#include <gtk/gtk.h>
/* обратный вызов.
* данные направленные в эту функцию будут выведены на stdout */
void callback( gtkwidget *widget,
gpointer data )
{
g_print ("hello again - %s was pressed\n", (char *) data);
}
/* обратный вызов выхода из программмы */
gint delete_event( gtkwidget *widget,
gdkevent *event,
gpointer data )
{
gtk_main_quit ();
return false;
}
int main( int argc,
char *argv[] )
{
gtkwidget *window;
gtkwidget *button;
gtkwidget *table;
gtk_init (&argc, &argv);
/* создаём новое окно */
window = gtk_window_new (gtk_window_toplevel);
/* устанавливаем заголовок окна */
gtk_window_set_title (gtk_window (window), "table");
/* определяем обработчик сигналов для delete_event, чтобы выходить из gtk */
g_signal_connect (g_object (window), "delete_event",
g_callback (delete_event), null);
/* устанавливаем окантовку окна. */
gtk_container_set_border_width (gtk_container (window), 20);
/* создаём таблицу 2x2 */
table = gtk_table_new (2, 2, true);
/* вставляем таблицу в главное окно */
gtk_container_add (gtk_container (window), table);
/* создаём первую кнопку */
button = gtk_button_new_with_label ("button 1");
/* когда нажимается кнопка, происходит вызов функции
* с указателем на кнопку "button 1" в качестве аргумента */
g_signal_connect (g_object (button), "clicked",
g_callback (callback), (gpointer) "button 1");
/* вставляем первую кнопку в верхний левый угол таблицы */
gtk_table_attach_defaults (gtk_table (table), button, 0, 1, 0, 1);
gtk_widget_show (button);
/* создаём вторую кнопку */
button = gtk_button_new_with_label ("button 2");
/* когда нажимается кнопка, происходит вызов функции
* с указателем на кнопку "button 2" в качестве аргумента */
g_signal_connect (g_object (button), "clicked",
g_callback (callback), (gpointer) "button 2");
/* вставляем кнопку в верхний правый угол таблицы */
gtk_table_attach_defaults (gtk_table (table), button, 1, 2, 0, 1);
gtk_widget_show (button);
/* создаём кнопку выхода "quit" */
button = gtk_button_new_with_label ("quit");
/* при нажатии на кнопку происходит вызов функции delete_event и выход из программмы */
g_signal_connect (g_object (button), "clicked",
g_callback (delete_event), null);
/* вставляем кнопку выхода в обе нижние ячейки */
gtk_table_attach_defaults (gtk_table (table), button, 0, 2, 1, 2);
gtk_widget_show (button);
gtk_widget_show (table);
gtk_widget_show (window);
gtk_main ();
return 0;
}
|