Шрифт:
Интервал:
Закладка:
i++;
sprintf(msg, "Вы нажали кнопку: %d раз(а)", i);
gtk_label_set_text(GTK_LABEL(label), msg);
}
Думаю, текст программы ясен без лишних комментариев. Нужно лишь пояснить один очень важный момент. Обратите внимание на то, что мы переопределили обработчик для события delete_event.
gtk_signal_connect(GTK_OBJECT(window), "delete_event",
GTK_SIGNAL_FUNC(delete_event), NULL);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(destroy), &ctrl);
Если данный обработчик возвращает FALSE, то будет вызвана функция destroy(), которая уничтожит окно. Мы переписали функцию delete_event() так, чтобы она всегда возвращала TRUE, то есть функция destroy() вообще не будет вызвана. Но в таком случае наше окно вообще никогда не закроется, поэтому нужно, чтобы кто-то позаботился о закрытии окна. Это будет функция quit_confirm(), отображающая диалог завершения работы.
gint delete_event(GtkWidget *widget, GdkEvent *event,
gpointer data) {
quit_confirm(widget);
return(TRUE);
}
Рис. 23.6. Программа только запущена
Рис. 23.7. Пользователь нажал на кнопку 4 раза
Рис. 23.8. Диалог завершения работы
Теперь рассмотрим обработчики событий кнопок Да и Нет диалога:
gtk_signal_connect_object(GTK_OBJECT(yes_button),
"clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
(gpointer)widget);
gtk_signal_connect_object(GTK_OBJECT(no_button), "clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),(gpointer)quit_form);
Кнопка yes_button вызывает функцию gtk_widget_destroy() и передает ей параметр (gpointer)widget, то есть уничтожает главное окно приложения, а кнопка no_button передает функции gtk_widget_destroy() параметр (gpointer)quit_form. который указывает на окно диалога, то есть при нажатии этой кнопки будет закрыто само окно нашего диалога.
23.4.7. Меню
Меню программы вручную писать довольно неудобно, поэтому для разработки меню воспользуемся студией разработки графического интерфейса Glade.
23.4.8. Иерархия виджитов
GtkObject
+GtkWidget
| +GtkMisc
| | +GtkLabel
| | | +GtkAccelLabel
| | | `GtkTipsQuery
| | +GtkArrow
| | +GtkImage
| | `GtkPixmap
| +GtkContainer
| | +GtkBin
| | | +GtkAlignment
| | | +GtkFrame
| | | | `GtkAspectFrame
| | | +GtkButton
| | | | +GtkToggleButton
| | | | | `GtkCheckButton
| | | | | `GtkRadioButton
| | | | `GtkOptionMenu
| | | +GtkItem
| | | | +GtkMenuItem
| | | | | +GtkCheckMenuItem
| | | | | | `GtkRadioMenuItem
| | | | | `GtkTearoffMenuItem
| | | | +GtkListItem
| | | | `GtkTreeItem
| | | +GtkWindow
| | | | +GtkColorSelectionDialog
| | | | +GtkDialog
| | | | | `GtkInputDialog
| | | | +GtkDrawWindow
| | | | +GtkFileSelection
| | | | +GtkFontSelectionDialog
| | | | `GtkPlug
| | | +GtkEventBox
| | | +GtkHandleBox
| | | +GtkScrolledWindow
| | | `GtkViewport
| | +GtkBox
| | | +GtkButtonBox
| | | | +GtkHButtonBox
| | | | `GtkVButtonBox
| | | +GtkVBox
| | | | +GtkColorSelection
| | | | `GtkGammaCurve
| | | `GtkHBox
| | | +GtkCombo
| | | `GtkStatusbar
| | +GtkCList
| | | `GtkCTree
| | +GtkFixed
| | +GtkNotebook
| | | `GtkFontSelection
| | +GtkPaned
| | | +GtkHPaned
| | | `GtkVPaned
| | +GtkLayout
| | +GtkList
| | +GtkMenuShell
| | | +GtkMenuBar
| | | `GtkMenu
| | +GtkPacker
| | +GtkSocket
| | +GtkTable
| | +GtkToolbar
| | `GtkTree
| +GtkCalendar
| +GtkDrawingArea
| | `GtkCurve
| +GtkEditable
| | +GtkEntry
| | | `GtkSpinButton
| | `GtkText
| +GtkRuler
| | +GtkHRuler
| | `GtkVRuler
| +GtkRange
| | +GtkScale
| | | +GtkHScale
| | | `GtkVScale
| | `GtkScrollbar
| | +GtkHScrollbar
| | `GtkVScrollbar
| +GtkSeparator
| | +GtkHSeparator
| | `GtkVSeparator
| +GtkPreview
| `GtkProgress
| `GtkProgressBar
+GtkData
| +GtkAdjustment
| `GtkTooltips
`GtkItemFactory
Глава 24
Студия Glade
24.1. Что такое Glade?
В предыдущей главе мы рассмотрели далеко не все виджиты и далеко не все сигналы, на которые должны реагировать рассмотренные виджиты. Это было сделано умышленно: для начала вам нужно было разобраться, что такое виджит и «с чем его едят», а также понять, что такое сигнал и функция-обработчик. С этого момента вам не нужно беспокоиться о том, что вы забыли имя виджита, имя сигнала или что означает та или иная маска сигнала, вам также не придется писать вручную прототипы функций обработчиков. За вас все сделает студия разработки графического интерфейса Glade. Почему вам не нужно знать имя виджита? Вам достаточно выбрать нужный вам виджит из палитры и поместить его в контейнер, причем контейнер также представляется визуально. Вам не нужно рисовать на бумажке или представлять перед собой координаты ячеек таблицы контейнера Glade, поскольку вы все видите перед собой. Если вы забыли (или не знаете) имя нужного вам сигнала, Glade при написании обработчика позволит вам выбрать нужный сигнал из списка. Если вам нужно замаскировать определенное событие, нет проблем: Glade не только отобразит доступные маски, но и выведет их описание. Код функций-обработчиков Glade также напишет самостоятельно — вам лишь нужно будет заполнить тело функции-обработчика, поскольку Glade пока еще не научился читать ваши мысли.
Что вам нужно для работы с Glade? Просто установите пакет glade (он входит в состав большинства современных дистрибутивов) и наслаждайтесь, Особенно приятно работать с Glade будет тем программистам, которые привыкли работать с визуальными средами разработки, например, Delphi или Visual С.
24.2. Знакомство с Glade
Наше знакомство с Glade мы начнем с разработки калькулятора, но прежде нужно познакомиться с интерфейсом самой студии. После запуска Glade вы увидите три окна:
♦ Главное окно Glade — используется для операций с проектом, например, создания, открытия, сохранения, указания опций.
♦ Палитра — набор виджитов, которые вы можете поместить в контейнер.
♦ Свойства — окно свойств виджитов, в котором отображаются свойства активного виджита.
Рис. 24.1. Студия Glade
Палитра содержит три набора виджитов:
♦ GTK+ Основа — основные виджиты;
♦ GTK+ Дополнения — дополнительные виджиты;
♦ Gnome — специальные виджиты для создания GNOME-приложений.
К основным виджитам относятся:
♦ Окно — основной элемент вашего приложения.
♦ Главное меню — строка меню приложения.
♦ Панель инструментов — на этой панели обычно находятся кнопки быстрого доступа к некоторым элементам главного меню, например, Создать, Открыть, Сохранить, Выход и т.д.
Рис. 24.2. Палитра
♦ Ползунок — позволяет изменять размеры некоторых виджитов; обычно ползунок ставится между двумя панелями инструментов.
♦ Метка — надпись.
♦ Поле ввода текста — название говорит само за себя.
♦ Комб. список — комбинированный список (Combo Box).
♦ Текстовый бокс — область для ввода нескольких строк текста; может использоваться в качестве основы простого текстового редактора.
♦ Кнопка — думаю, этот виджит в комментариях не нуждается.
♦ Кнопка-переключатель — кнопка, которая может находиться в одном из двух положений: включено или выключено.
♦ Флажок — независимый переключатель.
♦ Радиокнопка — зависимый переключатель.
♦ Список — простой список.
♦ Дерево — иерархическая схема элементов.
♦ Колоночный список — это список CList из главы 23.
♦ Колоночное дерево — что-то среднее между деревом и колоночным списком.
♦ Меню параметров — выпадающий список опций, напоминает список ComboBox (см. рис. 24.3, тип окна).
♦ Крутящаяся кнопка — не знаю, почему ее так назвали, на самом деле это поле с кнопками уменьшения/увеличения значения (как поле ввода ширины или высоты окна, см. рис. 24.3).
Рис. 24.3. Окно свойств
♦ Индикатор выполнения — вы использовали программу GnoRPM для установки пакетов? Пока пакет устанавливался, в небольшом окошке ползла небольшая шкала, информирующая нас о процессе установки. Это индикатор выполнения,
♦ Строка статуса — небольшая панель с текстовым полем, точнее, надписью, содержащей информацию о статусе приложения.
- Операционная система UNIX - Андрей Робачевский - Программное обеспечение
- Разработка приложений в среде Linux. Второе издание - Майкл Джонсон - Программное обеспечение
- Искусство программирования для Unix - Эрик Реймонд - Программное обеспечение
- Linux - Алексей Стахнов - Программное обеспечение
- Fedora 8 Руководство пользователя - Денис Колисниченко - Программное обеспечение
- Недокументированные и малоизвестные возможности Windows XP - Роман Клименко - Программное обеспечение
- Изучаем Windows Vista. Начали! - Дмитрий Донцов - Программное обеспечение
- Windows Vista - Виталий Леонтьев - Программное обеспечение
- Архитектура операционной системы UNIX - Морис Бах - Программное обеспечение
- Windows Vista. Трюки и эффекты - Юрий Зозуля - Программное обеспечение