[gnome-usage] header-bar: Port to Gtk+ widget template



commit 8044f70b0bd226abfa4d54e368fd3e1de6899c9e
Author: Felipe Borges <felipeborges gnome org>
Date:   Sat Apr 22 15:03:59 2017 +0200

    header-bar: Port to Gtk+ widget template
    
    https://bugzilla.gnome.org/show_bug.cgi?id=781607

 data/org.gnome.Usage.gresource.xml |    3 +-
 data/ui/header-bar.ui              |   98 ++++++++++++++++++
 src/header-bar.vala                |  193 ++++++++++++++----------------------
 3 files changed, 176 insertions(+), 118 deletions(-)
---
diff --git a/data/org.gnome.Usage.gresource.xml b/data/org.gnome.Usage.gresource.xml
index e6dc6e0..fedcfe0 100644
--- a/data/org.gnome.Usage.gresource.xml
+++ b/data/org.gnome.Usage.gresource.xml
@@ -3,5 +3,6 @@
     <gresource prefix="/org/gnome/Usage">
         <file compressed="true">interface/adwaita.css</file>
         <file compressed="true">interface/adwaita-dark.css</file>
+        <file preprocess="xml-stripblanks">ui/header-bar.ui</file>
     </gresource>
-</gresources>
\ No newline at end of file
+</gresources>
diff --git a/data/ui/header-bar.ui b/data/ui/header-bar.ui
new file mode 100644
index 0000000..c264278
--- /dev/null
+++ b/data/ui/header-bar.ui
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.9 -->
+
+  <template class="UsageHeaderBar" parent="GtkHeaderBar">
+    <property name="visible">False</property>
+    <property name="show-close-button">True</property>
+
+    <child>
+      <object class="GtkButton" id="storage_back_button">
+        <property name="visible">False</property>
+        <property name="no-show-all">True</property>
+        <signal name="clicked" handler="on_storage_back_button_clicked"/>
+
+        <child>
+          <object class="GtkImage">
+            <property name="visible">True</property>
+            <property name="icon-name">go-previous-symbolic</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">start</property>
+      </packing>
+    </child>
+
+    <child type="title">
+      <object class="GtkStackSwitcher" id="stack_switcher">
+        <property name="visible">True</property>
+      </object>
+    </child>
+
+    <child>
+      <object class="GtkButton" id="storage_rescan_button">
+        <property name="visible">False</property>
+        <property name="no-show-all">True</property>
+        <signal name="clicked" handler="on_storage_rescan_button_clicked"/>
+
+        <child>
+          <object class="GtkImage">
+            <property name="visible">True</property>
+            <property name="icon-name">view-refresh-symbolic</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+
+    <child>
+      <object class="GtkToggleButton" id="performance_search_button">
+        <property name="visible">True</property>
+        <signal name="toggled" handler="on_performance_search_button_toggled"/>
+
+        <child>
+          <object class="GtkImage">
+            <property name="visible">True</property>
+            <property name="icon-name">system-search-symbolic</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+
+    <child>
+      <object class="GtkButton" id="storage_cancel_button">
+        <property name="visible">False</property>
+        <property name="no-show-all">True</property>
+        <property name="label" translatable="yes">Cancel</property>
+        <signal name="clicked" handler="on_storage_cancel_button_clicked"/>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+
+    <child>
+      <object class="GtkButton" id="storage_select_button">
+        <property name="visible">False</property>
+        <property name="no-show-all">True</property>
+        <signal name="clicked" handler="on_storage_select_button_clicked"/>
+
+        <child>
+          <object class="GtkImage">
+            <property name="visible">True</property>
+            <property name="icon-name">emblem-ok-symbolic</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="pack-type">end</property>
+      </packing>
+    </child>
+  </template>
+</interface>
diff --git a/src/header-bar.vala b/src/header-bar.vala
index 0402a15..659cbf1 100644
--- a/src/header-bar.vala
+++ b/src/header-bar.vala
@@ -1,3 +1,5 @@
+using Gtk;
+
 namespace Usage
 {
     public enum HeaderBarMode
@@ -8,19 +10,28 @@ namespace Usage
         POWER
     }
 
-       public class HeaderBar : Gtk.HeaderBar
-       {
-           private Gtk.StackSwitcher stack_switcher;
-           private Gtk.ToggleButton? performance_search_button;
-           private bool active_performance_search_btn = false;
-           private Gtk.Button? storage_back_button;
-           private Gtk.Button? storage_rescan_button;
-           private Gtk.Button? storage_select_button;
-           private Gtk.Button? storage_cancel_button;
+    [GtkTemplate (ui = "/org/gnome/Usage/ui/header-bar.ui")]
+    public class HeaderBar : Gtk.HeaderBar
+    {
+        [GtkChild]
+        private Gtk.StackSwitcher stack_switcher;
+
+        [GtkChild]
+        private Gtk.ToggleButton performance_search_button;
+
+        [GtkChild]
+        private Gtk.Button storage_back_button;
+
+        [GtkChild]
+        private Gtk.Button storage_rescan_button;
+
+        [GtkChild]
+        private Gtk.Button storage_select_button;
+
+        [GtkChild]
+        private Gtk.Button storage_cancel_button;
+
            private Gtk.MenuButton? storage_selection_menu;
-           private bool show_storage_back_btn = false;
-           private bool show_storage_rescan_btn = false;
-           private bool show_storage_select_btn = false;
            private string title_text = "";
            private HeaderBarMode mode;
 
@@ -32,13 +43,9 @@ namespace Usage
            public HeaderBar(Gtk.Stack stack)
            {
                mode = HeaderBarMode.PERFORMANCE;
-               show_close_button = true;
-               stack_switcher = new Gtk.StackSwitcher();
-            stack_switcher.halign = Gtk.Align.CENTER;
             stack_switcher.set_stack(stack);
 
             set_mode(HeaderBarMode.PERFORMANCE);
-            show_all();
            }
 
            public void set_mode(HeaderBarMode mode)
@@ -46,21 +53,15 @@ namespace Usage
             switch(this.mode)
             {
                 case HeaderBarMode.PERFORMANCE:
-                    remove_widget(performance_search_button);
-                    performance_search_button = null;
+                    performance_search_button.hide ();
                     break;
                 case HeaderBarMode.DATA:
                     break;
                 case HeaderBarMode.STORAGE:
-                    remove_widget(storage_back_button);
-                    remove_widget(storage_rescan_button);
-                    remove_widget(storage_select_button);
-                    remove_widget(storage_cancel_button);
-                    storage_rescan_button = null;
-                    storage_back_button = null;
-                    storage_select_button = null;
-                    storage_select_button = null;
-                    storage_cancel_button = null;
+                    storage_back_button.hide ();
+                    storage_rescan_button.hide ();
+                    storage_select_button.hide ();
+                    storage_cancel_button.hide ();
                     break;
                 case HeaderBarMode.POWER:
                     break;
@@ -70,15 +71,8 @@ namespace Usage
             {
                 case HeaderBarMode.PERFORMANCE:
                     show_stack_switcher();
-                    performance_search_button = new Gtk.ToggleButton();
-                    performance_search_button.set_image(new 
Gtk.Image.from_icon_name("system-search-symbolic", Gtk.IconSize.BUTTON));
-                    performance_search_button.set_active(active_performance_search_btn);
-                    performance_search_button.toggled.connect(() => {
-                        active_performance_search_btn = performance_search_button.active;
-                        ((PerformanceView) (GLib.Application.get_default() as 
Application).get_window().get_views()[0]).set_search_mode(performance_search_button.active);
-                    });
+
                     performance_search_button.show();
-                    pack_end(performance_search_button);
                     break;
                 case HeaderBarMode.DATA:
                     show_stack_switcher();
@@ -88,38 +82,10 @@ namespace Usage
                         show_stack_switcher();
                     else
                         show_title();
-                    storage_back_button = new Gtk.Button.from_icon_name("go-previous-symbolic");
-                    storage_back_button.clicked.connect(() => {
-                        ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).get_storage_list_box().on_back_button_clicked();
-                    });
-                    show_storage_back_button(show_storage_back_btn);
-
-                    storage_rescan_button = new Gtk.Button.from_icon_name("view-refresh-symbolic");
-                    storage_rescan_button.clicked.connect(() => {
-                        show_stack_switcher();
-                        show_storage_select_button(false);
-                        show_storage_rescan_button(false);
-                        show_storage_back_button(false);
-                        (GLib.Application.get_default() as 
Application).get_storage_analyzer().create_cache.begin(true);
-                        ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).get_storage_list_box().reload();
-                    });
-
-                    storage_select_button = new Gtk.Button.from_icon_name("emblem-ok-symbolic");
-                    storage_select_button.clicked.connect(() => {
-                        show_storage_selection_mode(true);
-                    });
-                    show_storage_select_button(show_storage_select_btn);
-                    show_storage_rescan_button(show_storage_rescan_btn);
-
-                    storage_cancel_button = new Gtk.Button.with_label(_("Cancel"));
-                    storage_cancel_button.clicked.connect(() => {
-                        show_storage_selection_mode(false);
-                    });
-
-                    pack_start(storage_back_button);
-                    pack_end(storage_select_button);
-                    pack_end(storage_rescan_button);
-                    pack_end(storage_cancel_button);
+
+                    storage_rescan_button.show ();
+                    storage_select_button.show ();
+
                     break;
                 case HeaderBarMode.POWER:
                     show_stack_switcher();
@@ -128,6 +94,39 @@ namespace Usage
             this.mode = mode;
            }
 
+        [GtkCallback]
+        private void on_performance_search_button_toggled () {
+            /* TODO: Implement a saner way of toggling this mode. */
+            ((PerformanceView) (GLib.Application.get_default() as 
Application).get_window().get_views()[0]).set_search_mode(performance_search_button.active);
+        }
+
+        [GtkCallback]
+        private void on_storage_back_button_clicked () {
+            ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).get_storage_list_box().on_back_button_clicked();
+        }
+
+        [GtkCallback]
+        private void on_storage_rescan_button_clicked () {
+            stack_switcher.show ();
+
+            storage_select_button.hide ();
+            storage_rescan_button.hide ();
+
+            storage_back_button.hide ();
+            (GLib.Application.get_default() as Application).get_storage_analyzer().create_cache.begin(true);
+            ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).get_storage_list_box().reload();
+        }
+
+        [GtkCallback]
+        private void on_storage_cancel_button_clicked () {
+            show_storage_selection_mode(false);
+        }
+
+        [GtkCallback]
+        private void on_storage_select_button_clicked () {
+            show_storage_selection_mode(true);
+        }
+
            public void change_selected_items(uint count)
            {
                if(storage_selection_menu != null)
@@ -162,50 +161,17 @@ namespace Usage
 
         public void show_storage_back_button(bool show)
         {
-            if(show)
-            {
-                if(storage_back_button != null)
-                    storage_back_button.show();
-                show_storage_back_btn = true;
-            }
-            else
-            {
-                if(storage_back_button != null)
-                    storage_back_button.hide();
-                show_storage_back_btn = false;
-            }
+            storage_back_button.visible = show;
         }
 
         public void show_storage_rescan_button(bool show)
         {
-            if(show)
-            {
-                if(storage_rescan_button != null)
-                    storage_rescan_button.show();
-                show_storage_rescan_btn = true;
-            }
-            else
-            {
-                if(storage_rescan_button != null)
-                    storage_rescan_button.hide();
-                show_storage_rescan_btn = false;
-            }
+            storage_rescan_button.visible = show;
         }
 
         public void show_storage_select_button(bool show)
         {
-            if(show)
-            {
-                if(storage_select_button != null)
-                    storage_select_button.show();
-                show_storage_select_btn = true;
-            }
-            else
-            {
-                if(storage_select_button != null)
-                    storage_select_button.hide();
-                show_storage_select_btn = false;
-            }
+            storage_select_button.visible = show;
         }
 
         public void action_on_search()
@@ -226,8 +192,8 @@ namespace Usage
         {
             if(show)
             {
-                show_storage_rescan_button(false);
-                show_storage_select_button(false);
+                storage_rescan_button.hide ();
+                storage_select_button.hide ();
                 storage_back_button.hide();
                 storage_cancel_button.show();
                 ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).show_action_bar(true);
@@ -258,11 +224,10 @@ namespace Usage
             }
             else
             {
-                if(show_storage_back_btn)
-                    storage_back_button.show();
+                storage_back_button.show ();
 
-                show_storage_rescan_button(true);
-                show_storage_select_button(true);
+                storage_rescan_button.show ();
+                storage_select_button.show ();
                 storage_cancel_button.hide();
                 storage_selection_menu = null;
                 if(title_text == "")
@@ -286,11 +251,5 @@ namespace Usage
         {
             ((StorageView) (GLib.Application.get_default() as 
Application).get_window().get_views()[2]).get_storage_list_box().unselect_all_rows();
         }
-
-        private void remove_widget(Gtk.Widget? widget)
-        {
-            if(widget != null)
-                remove(widget);
-        }
-       }
-}
\ No newline at end of file
+    }
+}


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