• Название программы: calc — так будет назван исполнимый файл.
• Файл проекта: calc.glade.
• Каталог исходного кода: src (~/Projects/Calc/src).
• Каталог картинок: pixmap.
• Язык: С.
• Включить поддержку Gnome: Да.
♦ Вкладка «Параметры C»
• Все оставить по умолчанию.
В результате в каталоге ~/Projects/Calc будет создан файл проекта calc.glade. Этот файл полностью описывает наш проект на языке XML. Фрагмент этого файла приведен в листинге 25.1 — просто для общего развития.
Листинг 25.1. Фрагмент файла проекта calc.glade
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>Calc</name>
<program_name>calc</program_name>
<directory></directory>
<source_directory>src</source—directory>
<pixmaps_directory>pixmaps</pixmaps_directory >
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GtkWindow</class>
<name>window1</name>
<border_width>7</border_width>
<title>window1</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<name>vbox2</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkEntry</class>
<name>entry1</name>
<height>50</height>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text>0</text>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
...
</widget>
...
</widget>
...
</GTK-Interface>
Но кроме этого файла в каталоге Calc ничего нет. А где же исходный код? А где картинки? Чтобы Glade сгенерировала исходный код, нажмите кнопку Построить в главном окне Glade. В результате в каталоге calc будет создана структура подкаталогов, показанная на рис. 24.8.
Рис. 24.8. Структура каталогов проекта
В каталоге macros находятся макросы для поддержки среды Gnome. Каталог po предназначен только для вас — в него вы будете вносить сведения об изменениях в проекте. Каталог src содержит исходный код проекта.
О каталоге src нужно поговорить подробнее. В нем находятся следующие файлы:
♦ interface.*, support.* — эти файлы сгенерированы Glade, и вам не нужно их редактировать;
♦ callback.* — функции-обработчики. Автоматически сгенерированные функции первоначально не делают ничего, это только заготовки. Чтобы ваша программа что-нибудь делала, вам нужно отредактировать файл callback.c;
♦ make.c — вы можете редактировать этот файл, если вам это нужно.
Рассмотрим файл callback.c — его нужно редактировать в первую очередь. Glade создала для вас заготовки функций-обработчиков следующего вида:
Листинг 25.2. Фрагмент файла callback.c
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <gnome.h>
#include "callbacks.h"
#include "interface.h"
#include "support.h"
void
on_button_clicked (GtkButton *button,
gpointer user_data) {
}
void
ce_button_clicked (GtkButton *button,
gpointer user_data) {
}
...
void
on_button9_clicked (GtkButton *button,
gpointer user_data) {
}
Вписав в эти заготовки код, выполняющий нужные вам действия, можно попытаться собрать программу. Для этого перейдите в каталог calc и введите команду make.
Если вам нужно стандартное меню приложения, состоящее из пунктов Файл, Правка, Вид и т.п., используйте виджит Окно приложения Gnome (рис. 24.9) — вы его найдете на страничке виджитов Gnome.
Рис. 24.9. Окно приложения Gnome
Это уже готовый шаблон окна с меню, панелью инструментов и строкой статуса. Удобно?
Если же вам нужно нестандартное меню, то выберите виджит Меню, который находится на вкладке основных виджитов окна Палитра. В окне свойств меню нажмите кнопку Правка меню. В открывшемся окне редактора вы можете создавать пункты меню.
Для создания пункта меню нажмите кнопку Добавить и введите следующую информацию:
♦ Метка — эту надпись увидит пользователь.
♦ Имя — это идентификатор пункта меню.
♦ Обработчик — имя функции-обработчика.
♦ Иконка — иконка, соответствующая пункту меню.
♦ Подсказка — обычно эта подсказка отображается в строке статуса при выборе пункта меню.
♦ Тип элемента — обычный, зависимый (радиокнопка) или независимый (флажок) переключатель.
♦ Ускоритель — горячая комбинация клавиш.
Рис. 24.10. Редактор меню
С помощью стрелок вы можете изменять положение пунктов меню.
Интересных виджитов намного больше, чем будет описано в этом пункте, — каждый виджит по-своему интересен. Но мне больше всего понравились следующие виджиты:
♦ Шкала — виджит, напоминающий спидометр, находится на вкладке элементов Gnome.
♦ Выбор цвета — если этот виджит расположить в контейнере, то получится окно выбора цвета, которое очень похоже на стандартное окно выбора цвета среды Gnome (вкладка Дополнительно),
♦ Выбор шрифта — позволяет пользователю выбрать шрифт (вкладка Дополнительно).
♦ Диалоговое окно свойств — уже готовое окно свойств (напоминает окно свойств проекта), содержащее вкладки и кнопки OK, Применить, Закрыть, Справка (вкладка Gnome).
Рис. 24.11. Шкала
Рис. 24.12. Выбор цвета
Рис. 24.13. Выбор шрифта
Рис. 24.14. Окно свойств
Пакет dialog служит для вывода диалоговых окоп в сценариях bash. Элементы пользовательского интерфейса мы будем, как и в GTK+, называть виджитами. Пакет dialog позволяет использовать следующие виджиты:
♦ Infobox, Msgbox — выводят информационные сообщения;
♦ Inputbox — принимает ввод текстовой информации;
♦ Calendar — позволяет выбрать дату;
♦ Radiolist — список зависимых переключателей;
♦ Checklist — список независимых переключателей;
♦ Menubox — используется для организации меню;
♦ Gauge — шкала прогресса.
Установив пакет dialog, в каталоге /usr/share/doc/dialog-<версия> вы найдете много примеров применения этого замечательного пакета.
Начнем с самого простого — отображения небольших текстовых сообщений. Для этой цели можно использовать два виджита — Infobox или Msgbox. Первый отличается от второго тем, что не ждет подтверждения пользователя о прочтении, а закрывается через некоторое время. Виджит Msgbox ждет, пока пользователь нажмет кнопку OK или клавишу Enter.
Рассмотрим пример использования виджита Msgbox:
Листинг 25.1. Виджит Msgbox
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title "MESSAGE BOX" --clear
--msgbox "Этот виджит используется для вывода
сообщений. Ждет, пока пользователь нажмет Enter" 10 41
case $? in
0)
echo "OK";;
255)
echo "Нажата ESC.";;
esac
Теперь разберемся, что есть что. Параметр --title программы dialog задает заголовок виджита (рис. 25.1) Параметр --msgbox сообщает программе тип виджита, который нужно отобразить. После этого параметра нужно указать текст сообщения, заключенный в кавычки. В тексте можно использовать управляющие последовательности (b, n, t, a и др.). После сообщения задаются размеры виджита.
Рис. 25.1. Виджит Msgbox
Конструкция case проверяет возвращенное программой dialog значение. Если пользователь нажал OK (или <Ввод>), то программа возвращает 0, а если клавишу Esc, то 255.
Виджит Infobox следует использовать так:
Листинг 25.2. Использование виджита Infobox