button_add = gtk_button_new_with_label('Добавить');
button_clear = gtk_button_new_with_label('Очистить');
button_hide_show = gtk_button_new_with_label('Спрятать/отобразить');
gtk_box_pack_start(GTK_BOX(hbox), button_add,
TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button_clear,
TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button_hide_show,
TRUE, TRUE, 0);
/* Связываем обработчики */
gtk_signal_connect_object(GTK_OBJECT(button_add),
'clicked',
GTK_SIGNAL_FUNC(button_add_clicked), (gpointer) clist);
gtk_signal_connect_object(GTK_OBJECT(button_clear),
'clicked',
GTK_SIGNAL_FUNC(button_clear_clicked),(gpointer)clist);
gtk_signal_connect_object(GTK_OBJECT(button_hide_show),
'clicked', GTK_SIGNAL_FUNC(button_hide_show_clicked),
(gpointer)clist);
gtk_widget_show(button_add);
gtk_widget_show(button_clear);
gtk_widget_show(button_hide_show);
gtk_widget_show(window);
gtk_main();
return(0);
}
Программа работает так: при нажатии кнопки Добавить создается список, состоящий из названий четырех популярных дистрибутивов Linux. Кнопка Очистить очищает список, а Спрятать/отобразить прячет или отображает заголовки списка. При щелчке на определенной ячейке списка на консоль выводится соответствующее сообщение — координаты ячейки и ее текст.
Рис 23.5.
< … стр. 639–640 … >
void destroy(GtkWidget *widget, gpointer data);
static void button_click(GtkWidget *widget, gpointer data);
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;
GtkWidget *label;
w_ctrl ctrl;
gchar *caption;
setlocale(LC_ALL, 'ru_RU.KOI8-R');
caption = g_strdup_printf('Доброго времени суток!');
gtk_init(&argc, &argv);
window = gtk_window_new( GTK_WINDOW_TOPLEVEL);
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);
gtk_window_set_title(GTK_WINDOW(window), caption);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
button = gtk_button_new();
label = gtk_label_new(' -== Нажмите кнопку ==- ' );
ctrl.app_window = window;
ctrl.label = label;
gtk_container_add(GTK_CONTAINER(button), label);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_signal_connect(GTK_OBJECT(button), 'clicked',
GTK_SIGNAL_FUNC(button_click), &ctrl);
gtk_widget_show_all(window);
gtk_main();
return(0);
}
// ****************************************************
void quit_confirm(GtkWidget *widget) {
GtkWidget *quit_form;
GtkWidget *label;
GtkWidget *yes_button, *no_button;
quit_form = gtk_dialog_new();
gtk_window_set_position(GTK_WINDOW(quit_form),
GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(quit_form),
10);
label =
gtk_label_new('
Вы действительно хотите выйти?
*);
yes_button = gtk_button_new_with_label('Да');
no_button = gtk_button_new_with_label('Нет');
gtk_signal_connect_object(GTK_OBJECT(yes_button),
'clicked',