[four-in-a-row] Use GtkBuilder.



commit 992dc39a9c8cf99438bfa69b1c68ad6995e41410
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Wed Aug 20 02:09:52 2014 +0200

    Use GtkBuilder.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=735073

 data/Makefile.am      |    8 ++-
 data/four-in-a-row.ui |  126 +++++++++++++++++++++++++++++++++++++++++++++++++
 po/POTFILES.in        |    1 +
 src/main.c            |   77 +++++++++---------------------
 4 files changed, 156 insertions(+), 56 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index dab9951..7176972 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -3,6 +3,9 @@ SUBDIRS = icons
 gsettings_SCHEMAS = org.gnome.four-in-a-row.gschema.xml
 @GSETTINGS_RULES@
 
+uidir = $(datadir)/four-in-a-row
+ui_DATA = four-in-a-row.ui
+
 pixmapdir = $(datadir)/four-in-a-row
 pixmap_DATA = \
     tileset_50x50_hcontrast.svg \
@@ -31,9 +34,10 @@ appdata_DATA = $(appdata_in_files:.xml.in=.xml)
 
 man_MANS     = four-in-a-row.6
 
-EXTRA_DIST = $(pixmap_DATA) \
+EXTRA_DIST = $(ui_DATA) \
+             $(pixmap_DATA) \
              $(sounds_DATA) \
-            $(appdata_in_files) \
+             $(appdata_in_files) \
              $(desktop_in_files) \
              $(gsettings_SCHEMAS) \
              $(man_MANS)
diff --git a/data/four-in-a-row.ui b/data/four-in-a-row.ui
new file mode 100644
index 0000000..4753453
--- /dev/null
+++ b/data/four-in-a-row.ui
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.12 -->
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkApplicationWindow" id="fiar-window">
+    <property name="title" translatable="yes">Four-in-a-row</property>
+    <property name="border-width">25</property>
+    <child type="titlebar">
+      <object class="GtkHeaderBar" id="headerbar">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="show_close_button">True</property>
+        <property name="title" translatable="yes">Four-in-a-row</property>
+        <child>
+          <object class="GtkButton">
+            <property name="visible">True</property>
+            <property name="sensitive">False</property>
+            <property name="valign">center</property>
+            <property name="tooltip-text" translatable="yes">Undo your most recent move</property>
+            <property name="can_focus">True</property>
+            <property name="focus_on_click">False</property>
+            <property name="action-name">app.undo-move</property>
+            <style>
+              <class name="image-button"/>
+            </style>
+            <child>
+              <object class="GtkImage">
+                <property name="icon_name">edit-undo-symbolic</property>
+                <property name="visible">True</property>
+                <property name="icon_size">1</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkAspectFrame">
+        <property name="visible">True</property>
+        <property name="shadow-type">GTK_SHADOW_NONE</property>
+        <property name="obey-child">false</property>
+        <property name="ratio">1.4</property>
+        <property name="xalign">0.5</property>
+        <property name="yalign">0.5</property>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="orientation">horizontal</property>
+            <property name="spacing">25</property>
+            <child>
+              <object class="GtkAspectFrame" id="frame">
+                <property name="visible">True</property>
+                <property name="shadow-type">GTK_SHADOW_NONE</property>
+                <property name="obey-child">false</property>
+                <property name="ratio">1</property>
+                <property name="xalign">0.5</property>
+                <property name="yalign">0.5</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="pack-type">start</property>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="padding">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButtonBox">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">6</property>
+                <property name="valign">end</property>
+                <child>
+                  <object class="GtkButton">
+                    <property name="visible">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="label" translatable="yes">_Hint</property>
+                    <property name="halign">fill</property>
+                    <property name="valign">center</property>
+                    <property name="action-name">app.hint</property>
+                    <property name="tooltip-text" translatable="yes">Receive a hint for your next 
move</property>
+                    <property name="width-request">120</property>
+                    <property name="height-request">60</property>
+                  </object>
+                  <packing>
+                    <property name="pack-type">start</property>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="padding">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton">
+                    <property name="visible">True</property>
+                    <property name="use_underline">True</property>
+                    <property name="label" translatable="yes">_Start Over</property>
+                    <property name="halign">fill</property>
+                    <property name="valign">center</property>
+                    <property name="action-name">app.new-game</property>
+                    <property name="tooltip-text" translatable="yes">Start a new game</property>
+                    <property name="width-request">120</property>
+                    <property name="height-request">60</property>
+                  </object>
+                  <packing>
+                    <property name="pack-type">end</property>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="pack-type">end</property>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="padding">0</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 5c68103..8024722 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,6 +3,7 @@
 [encoding: UTF-8]
 data/four-in-a-row.appdata.xml.in
 data/four-in-a-row.desktop.in
+[type: gettext/glade]data/four-in-a-row.ui
 data/org.gnome.four-in-a-row.gschema.xml
 src/games-controls.c
 src/gfx.c
diff --git a/src/main.c b/src/main.c
index b89608c..275654c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1161,33 +1161,30 @@ static gboolean
 create_app (void)
 {
   GtkWidget *frame;
-  GtkWidget *hbox, *vbox;
-  GtkWidget *image;
-  GtkWidget *new_game_button;
-  GtkWidget *undo_button;
-  GtkWidget *hint_button;
   GMenu *app_menu, *section;
 
-  window = gtk_application_window_new (application);
-  gtk_window_set_application (GTK_WINDOW (window), application);
-  gtk_window_set_title (GTK_WINDOW (window), _(APPNAME_LONG));
-  gtk_container_set_border_width (GTK_CONTAINER (window), 25);
-  gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_WIDTH, DEFAULT_HEIGHT);
+  GtkBuilder *builder = NULL;
+  GtkCssProvider *css_provider = NULL;
+  GError *error = NULL;
+
   gtk_window_set_default_icon_name ("four-in-a-row");
 
-  headerbar = gtk_header_bar_new ();
-  gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), _("Four-in-a-row"));
-  gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE);
-  gtk_widget_show (headerbar);
-  gtk_window_set_titlebar (GTK_WINDOW (window), headerbar);
+  css_provider = gtk_css_provider_get_default ();
+  gtk_css_provider_load_from_data (css_provider, "GtkButtonBox{-GtkButtonBox-child-internal-pad-x:0;}\0", 
-1, &error);
+  if (G_UNLIKELY (error != NULL)) {
+      fprintf (stderr, "Could not load UI: %s\n", error->message);
+      g_clear_error (&error);
+      return;
+  }
+  gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), css_provider, 
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+  builder = gtk_builder_new_from_file (DATA_DIRECTORY "/four-in-a-row.ui");
+
+  window = gtk_builder_get_object (builder, "fiar-window");
+  gtk_window_set_application (GTK_WINDOW (window), application);
+  gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_WIDTH, DEFAULT_HEIGHT);     // TODO save size & 
state
 
-  undo_button = gtk_button_new_from_icon_name ("edit-undo-symbolic", GTK_ICON_SIZE_BUTTON);
-  gtk_widget_set_valign (undo_button, GTK_ALIGN_CENTER);
-  gtk_widget_set_halign (undo_button, GTK_ALIGN_CENTER);
-  gtk_actionable_set_action_name (GTK_ACTIONABLE (undo_button), "app.undo-move");
-  gtk_widget_set_tooltip_text (undo_button, _("Undo your most recent move"));
-  gtk_widget_show (undo_button);
-  gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), undo_button);
+  headerbar = gtk_builder_get_object (builder, "headerbar");
 
   g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries, G_N_ELEMENTS (app_entries), 
application);
   gtk_application_add_accelerator (application, "<Primary>n", "app.new-game", NULL);
@@ -1214,17 +1211,14 @@ create_app (void)
 
   gtk_application_set_app_menu (GTK_APPLICATION (application), G_MENU_MODEL (app_menu));
 
-  frame = gtk_aspect_frame_new (NULL, 0.5, 0.5, 1.45, FALSE);
-  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
-  gtk_container_add (GTK_CONTAINER (window), frame);
-
-  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 25);
-  gtk_container_add (GTK_CONTAINER (frame), hbox);
+  frame = gtk_builder_get_object (builder, "frame");
 
   drawarea = gtk_drawing_area_new ();
   /* set a min size to avoid pathological behavior of gtk when scaling down */
   gtk_widget_set_size_request (drawarea, 350, 350);
-  gtk_box_pack_start (GTK_BOX (hbox), drawarea, TRUE, TRUE, 0);
+  gtk_widget_set_halign (drawarea, GTK_ALIGN_FILL);
+  gtk_widget_set_valign (drawarea, GTK_ALIGN_FILL);
+  gtk_container_add (GTK_CONTAINER (frame), drawarea);
 
   gtk_widget_set_events (drawarea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
   g_signal_connect (G_OBJECT (drawarea), "configure_event",
@@ -1239,31 +1233,6 @@ create_app (void)
   /* We do our own double-buffering. */
   gtk_widget_set_double_buffered (GTK_WIDGET (drawarea), FALSE);
 
-  vbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL);
-  gtk_box_set_spacing (GTK_BOX (vbox), 6);
-  gtk_widget_set_valign (vbox, GTK_ALIGN_END);
-  gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, TRUE, 0);
-
-  hint_button = gtk_button_new ();
-  gtk_button_set_label (GTK_BUTTON (hint_button), _("_Hint"));
-  gtk_button_set_use_underline (GTK_BUTTON (hint_button), TRUE);
-  gtk_widget_set_valign (hint_button, GTK_ALIGN_CENTER);
-  gtk_widget_set_halign (hint_button, GTK_ALIGN_FILL);
-  gtk_widget_set_size_request (hint_button, 120, 60);
-  gtk_actionable_set_action_name (GTK_ACTIONABLE (hint_button), "app.hint");
-  gtk_widget_set_tooltip_text (hint_button, _("Receive a hint for your next move"));
-  gtk_box_pack_end (GTK_BOX (vbox), hint_button, FALSE, FALSE, 0);
-
-  new_game_button = gtk_button_new ();
-  gtk_button_set_label (GTK_BUTTON (new_game_button), _("_Start Over"));
-  gtk_button_set_use_underline (GTK_BUTTON (new_game_button), TRUE);
-  gtk_widget_set_valign (new_game_button, GTK_ALIGN_CENTER);
-  gtk_widget_set_halign (new_game_button, GTK_ALIGN_FILL);
-  gtk_widget_set_size_request (new_game_button, 120, 60);
-  gtk_actionable_set_action_name (GTK_ACTIONABLE (new_game_button), "app.new-game");
-  gtk_widget_set_tooltip_text (new_game_button, _("Start a new game"));
-  gtk_box_pack_end (GTK_BOX (vbox), new_game_button, FALSE, FALSE, 0);
-
   g_simple_action_set_enabled (G_SIMPLE_ACTION (hint_action), FALSE);
   g_simple_action_set_enabled (G_SIMPLE_ACTION (undo_action), FALSE);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]