From 7c8dd9bc777a5fb4378a52a5c0bb87ec70ae824d Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Thu, 16 Aug 2012 16:02:28 +0400 Subject: [PATCH] glade_habr added --- c/glade_habr/Example1.cpp | 117 ++++++++++++ c/glade_habr/Makefile | 13 ++ c/glade_habr/README | 1 + c/glade_habr/mainForm.glade | 359 ++++++++++++++++++++++++++++++++++++ 4 files changed, 490 insertions(+) create mode 100644 c/glade_habr/Example1.cpp create mode 100644 c/glade_habr/Makefile create mode 100644 c/glade_habr/README create mode 100644 c/glade_habr/mainForm.glade diff --git a/c/glade_habr/Example1.cpp b/c/glade_habr/Example1.cpp new file mode 100644 index 0000000..ecf3836 --- /dev/null +++ b/c/glade_habr/Example1.cpp @@ -0,0 +1,117 @@ +/* Example1.cpp */ +#include +#include + +#define UI_FILE "mainForm.glade" + +// описание виджетов +GtkBuilder *builder; +GtkWidget *topWindow; +GtkRadioButton *rbutRectangle, *rbutEllipse, *rbutTriangle; +GtkDrawingArea *drawingarea; + +// описание обработчиков сигналов +extern "C" void topWindow_destroy_cb (GtkObject *object, gpointer user_data); +extern "C" gboolean drawingarea_draw_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data); +extern "C" void rbutton_toggled_cb (GtkObject *object); + +int main( int argc, char **argv ) +{ + GError *error = NULL; + + // инициализация GTK+ + gtk_init( &argc, &argv ); + + // создание нового GtkBuilder объекта + builder = gtk_builder_new(); + + // загрузка пользовательского интерфеса из файла, который мы создали в Glade + if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) ) + { + g_warning( "%s", error->message ); + g_free( error ); + return( 1 ); + } + + // связывание наших виджетов с описаннимем виджетов в GladeXML + topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topWindow")); + rbutRectangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutRectangle")); + rbutEllipse = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutEllipse")); + rbutTriangle = GTK_RADIO_BUTTON(gtk_builder_get_object(builder, "rbutTriangle")); + drawingarea = GTK_DRAWING_AREA(gtk_builder_get_object(builder, "drawingarea")); + + // связываем сигналы с объектами графического интерфейса + gtk_builder_connect_signals (builder, NULL); + + // освобождение памяти + g_object_unref( G_OBJECT( builder ) ); + + // Показываем форму и виджеты на ней + gtk_widget_show( topWindow ); + + // запуск главного цикла приложения + gtk_main(); + + return( 0 ); +} + +// закрытие приложения +void topWindow_destroy_cb (GtkObject *object, gpointer user_data) +{ + // завершаем главный цикл приложения + gtk_main_quit(); +} + +// перерисовка холста +gboolean drawingarea_draw_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) +{ + cairo_t *cr; + + cr = gdk_cairo_create (widget->window); + cairo_set_line_width (cr, 7); + cairo_set_source_rgb (cr, 0, 0, 0); + + // переключатель установлен на прямоугольник + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutRectangle))) + { + // рисуем прямоугольник + cairo_rectangle (cr, 20, 20, 200, 100); + cairo_stroke_preserve(cr); + cairo_set_source_rgb(cr, 0, 0.8, 0); + } + + // переключатель установлен на эллипс + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutEllipse))) + { + // рисуем эллипс + cairo_arc(cr, 150, 100, 90, 0, 2 * 3.14); + cairo_stroke_preserve(cr); + cairo_set_source_rgb(cr, 0.8, 0, 0); + } + + // переключатель установлен на треугольник + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(rbutTriangle))) + { + // рисуем треугольник + cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); + cairo_move_to (cr, 40, 40); + cairo_line_to (cr, 200, 40); + cairo_line_to (cr, 120, 160); + cairo_line_to (cr, 40, 40); + cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); + cairo_stroke_preserve(cr); + cairo_set_source_rgb(cr, 0.8, 0, 0.8); + } + + cairo_fill(cr); + + cairo_destroy(cr); + + return FALSE; +} + +void rbutton_toggled_cb (GtkObject *object) +{ + // перерисовка drawingarea + gtk_widget_queue_draw (GTK_WIDGET(drawingarea)); +} diff --git a/c/glade_habr/Makefile b/c/glade_habr/Makefile new file mode 100644 index 0000000..613a764 --- /dev/null +++ b/c/glade_habr/Makefile @@ -0,0 +1,13 @@ +CC=g++ +LDLIBS=`pkg-config --libs gtk+-3.0 gmodule-2.0` +CFLAGS=-Wall -g `pkg-config --cflags gtk+-2.0 gmodule-2.0` + +Example1: Example1.o + $(CC) $(LDLIBS) Example1.o -o Example1 + +Example1.o: Example1.cpp + $(CC) $(CFLAGS) -c Example1.cpp + +clean: + rm -f Example1 + rm -f *.o diff --git a/c/glade_habr/README b/c/glade_habr/README new file mode 100644 index 0000000..3b7cdb1 --- /dev/null +++ b/c/glade_habr/README @@ -0,0 +1 @@ +http://habrahabr.ru/post/107403/ diff --git a/c/glade_habr/mainForm.glade b/c/glade_habr/mainForm.glade new file mode 100644 index 0000000..aa6a43f --- /dev/null +++ b/c/glade_habr/mainForm.glade @@ -0,0 +1,359 @@ + + + + + False + 500 + 300 + + + + True + False + vertical + + + True + False + + + False + True + False + _Файл + True + + + True + False + + + gtk-new + False + True + False + True + True + + + + + gtk-open + False + True + False + True + True + + + + + gtk-save + False + True + False + True + True + + + + + gtk-save-as + False + True + False + True + True + + + + + False + True + False + + + + + gtk-quit + False + True + False + True + True + + + + + + + + + + False + True + False + _Правка + True + + + True + False + + + gtk-cut + False + True + False + True + True + + + + + gtk-copy + False + True + False + True + True + + + + + gtk-paste + False + True + False + True + True + + + + + gtk-delete + False + True + False + True + True + + + + + + + + + False + True + False + _Вид + True + + + + + False + True + False + _Справка + True + + + True + False + + + gtk-about + False + True + False + True + True + + + + + + + + + False + True + 0 + + + + + True + False + 0 + none + + + True + True + + + True + True + in + 145 + 145 + + + True + False + + + True + False + vertical + + + radiobutton + False + True + True + False + False + 0 + True + True + + + + False + True + 0 + + + + + radiobutton + False + True + True + False + False + 0 + True + True + rbutRectangle + + + + False + True + 1 + + + + + radiobutton + False + True + True + False + False + 0 + True + True + rbutRectangle + + + + False + True + 2 + + + + + + + + + False + True + + + + + True + True + in + + + True + False + + + True + False + vertical + + + True + False + Холст размером 300 x 200 + + + False + True + 0 + + + + + 300 + 200 + True + False + GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK + start + + + + False + True + 1 + + + + + + + + + True + True + + + + + + + False + True + 1 + + + + + True + False + vertical + 2 + + + False + True + 2 + + + + + +