[shotwell] Make SavedSearch dialog templated



commit 9bf6ab69afdf00894cf3a73e0b8af24c5414d494
Author: Jens Georg <mail jensge org>
Date:   Wed Dec 20 13:36:10 2017 +0100

    Make SavedSearch dialog templated

 org.gnome.Shotwell.gresource.xml    |    1 +
 src/searches/SavedSearchDialog.vala |   55 ++------
 ui/saved_search_dialog.ui           |  244 +++++++++++++++++++++++++++++++++++
 ui/shotwell.ui                      |  168 ------------------------
 4 files changed, 259 insertions(+), 209 deletions(-)
---
diff --git a/org.gnome.Shotwell.gresource.xml b/org.gnome.Shotwell.gresource.xml
index 4d17435..538f919 100644
--- a/org.gnome.Shotwell.gresource.xml
+++ b/org.gnome.Shotwell.gresource.xml
@@ -25,6 +25,7 @@
       <file compressed="true">ui/shotwell.ui</file>
       <file preprocess="xml-stripblanks">ui/sidebar_default_context.ui</file>
       <file preprocess="xml-stripblanks">ui/slideshow_settings.ui</file>
+      <file preprocess="xml-stripblanks">ui/saved_search_dialog.ui</file>
       <file preprocess="xml-stripblanks">ui/tag_sidebar_context.ui</file>
       <file preprocess="xml-stripblanks">ui/tags.ui</file>
       <file preprocess="xml-stripblanks">ui/textentrydialog.ui</file>
diff --git a/src/searches/SavedSearchDialog.vala b/src/searches/SavedSearchDialog.vala
index 5365cde..5c9351f 100644
--- a/src/searches/SavedSearchDialog.vala
+++ b/src/searches/SavedSearchDialog.vala
@@ -5,7 +5,8 @@
  */
 
 // This dialog displays a boolean search configuration.
-public class SavedSearchDialog {
+[GtkTemplate (ui = "/org/gnome/Shotwell/ui/saved_search_dialog.ui")]
+public class SavedSearchDialog : Gtk.Dialog {
     
     // Contains a search row, with a type selector and remove button.
     private class SearchRowContainer {
@@ -634,11 +635,13 @@ public class SavedSearchDialog {
         }
     }
     
-    private Gtk.Builder builder;
-    private Gtk.Dialog dialog;
+    [GtkChild]
     private Gtk.Button add_criteria;
+    [GtkChild]
     private Gtk.ComboBoxText operator;
+    [GtkChild]
     private Gtk.Box row_box;
+    [GtkChild]
     private Gtk.Entry search_title;
     private Gee.ArrayList<SearchRowContainer> row_list = new Gee.ArrayList<SearchRowContainer>();
     private bool edit_mode = false;
@@ -656,16 +659,15 @@ public class SavedSearchDialog {
         add_text_search();
         row_list.get(0).allow_removal(false);
 
-        dialog.show_all();
+        show_all();
         set_valid(false);
     }
     
     public SavedSearchDialog.edit_existing(SavedSearch saved_search) {
-        previous_search = saved_search;
         edit_mode = true;
         setup_dialog();
         
-        dialog.show_all();
+        show_all();
         
         // Load existing search into dialog.
         operator.set_active((SearchOperator) saved_search.get_operator());
@@ -680,49 +682,20 @@ public class SavedSearchDialog {
         set_valid(true);
     }
     
-    ~SavedSearchDialog() {
-        search_title.changed.disconnect(on_title_changed);
-    }
-    
     // Builds the dialog UI.  Doesn't add buttons to the dialog or call dialog.show().
     private void setup_dialog() {
-        builder = AppWindow.create_builder();
-
-        dialog = new Gtk.Dialog.with_buttons(_("Search"),
-                                         (Gtk.Window) AppWindow.get_instance().get_parent_window(),
-                                         Gtk.DialogFlags.MODAL |
-                                         Gtk.DialogFlags.DESTROY_WITH_PARENT |
-                                         Gtk.DialogFlags.USE_HEADER_BAR,
-                                         _("Cancel"), Gtk.ResponseType.CANCEL,
-                                         _("OK"), Gtk.ResponseType.OK,
-                                         null);
-        dialog.set_resizable(false);
-        dialog.set_transient_for(AppWindow.get_instance());
-        dialog.set_default_response(Gtk.ResponseType.OK);
-        dialog.response.connect(on_response);
-        dialog.get_content_area().add(builder.get_object("criteria") as Gtk.Widget);
-        dialog.set_default_response (Gtk.ResponseType.OK);
+        set_transient_for(AppWindow.get_instance());
+        response.connect(on_response);
 
-        add_criteria = builder.get_object("Add search button") as Gtk.Button;
         add_criteria.button_press_event.connect(on_add_criteria);
         
-        search_title = builder.get_object("Search title") as Gtk.Entry;
-        search_title.set_activates_default(true);
         search_title.changed.connect(on_title_changed);
-        
-        row_box = builder.get_object("row_box") as Gtk.Box;
-        
-        operator = builder.get_object("Type of search criteria") as Gtk.ComboBoxText;
-        operator.append_text(_("any"));
-        operator.append_text(_("all"));
-        operator.append_text(_("none"));
-        operator.set_active(0);
     }
     
     // Displays the dialog.
-    public void show() {
-        dialog.run();
-        dialog.destroy();
+    public new void show() {
+        run();
+        destroy();
     }
     
     // Adds a row of search criteria.
@@ -820,6 +793,6 @@ public class SavedSearchDialog {
             }
         }
         
-        dialog.set_response_sensitive(Gtk.ResponseType.OK, valid);
+        set_response_sensitive(Gtk.ResponseType.OK, valid);
     }
 }
diff --git a/ui/saved_search_dialog.ui b/ui/saved_search_dialog.ui
new file mode 100644
index 0000000..3a0a610
--- /dev/null
+++ b/ui/saved_search_dialog.ui
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
+<interface domain="shotwell">
+  <requires lib="gtk+" version="3.18"/>
+  <template class="SavedSearchDialog" parent="GtkDialog">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">Search</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button1">
+                <property name="label" translatable="yes">Cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="label" translatable="yes">OK</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="criteria">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">3</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">5</property>
+            <child>
+              <object class="GtkBox" id="hbox3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="spacing">3</property>
+                <child>
+                  <object class="GtkLabel" id="Name of search:">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Name of search:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">search_title</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="search_title">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="invisible_char">•</property>
+                    <property name="activates_default">True</property>
+                    <property name="width_chars">20</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSeparator" id="hseparator1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="hbox2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="spacing">3</property>
+                <child>
+                  <object class="GtkLabel" id="Match">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">_Match</property>
+                    <property name="use_underline">True</property>
+                    <property name="justify">right</property>
+                    <property name="mnemonic_widget">operator</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkComboBoxText" id="operator">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="active">0</property>
+                    <items>
+                      <item translatable="yes">any</item>
+                      <item translatable="yes">all</item>
+                      <item translatable="yes">none</item>
+                    </items>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="padding">1</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="of the following:">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">of the following:</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkButton" id="add_criteria">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">True</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="icon_name">list-add-symbolic</property>
+                        <property name="icon_size">1</property>
+                      </object>
+                    </child>
+                    <style>
+                      <class name="image-button"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="pack_type">end</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSeparator" id="hseparator2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="row_box">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">4</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">button1</action-widget>
+      <action-widget response="-5">button2</action-widget>
+    </action-widgets>
+  </template>
+</interface>
diff --git a/ui/shotwell.ui b/ui/shotwell.ui
index 602a7c8..8d1e315 100644
--- a/ui/shotwell.ui
+++ b/ui/shotwell.ui
@@ -2,174 +2,6 @@
 <!-- Generated with glade 3.20.0 -->
 <interface domain="shotwell">
   <requires lib="gtk+" version="3.18"/>
-  <object class="GtkBox" id="criteria">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="border_width">3</property>
-    <property name="orientation">vertical</property>
-    <property name="spacing">5</property>
-    <child>
-      <object class="GtkBox" id="hbox3">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="hexpand">True</property>
-        <property name="vexpand">True</property>
-        <property name="spacing">3</property>
-        <child>
-          <object class="GtkLabel" id="Name of search:">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">_Name of search:</property>
-            <property name="use_underline">True</property>
-            <property name="mnemonic_widget">Search title</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkEntry" id="Search title">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="invisible_char">•</property>
-            <property name="width_chars">20</property>
-            <property name="primary_icon_activatable">False</property>
-            <property name="secondary_icon_activatable">False</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkSeparator" id="hseparator1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="hbox2">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="hexpand">True</property>
-        <property name="vexpand">True</property>
-        <property name="spacing">3</property>
-        <child>
-          <object class="GtkLabel" id="Match">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">_Match</property>
-            <property name="use_underline">True</property>
-            <property name="justify">right</property>
-            <property name="mnemonic_widget">Type of search criteria</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkComboBoxText" id="Type of search criteria">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="padding">1</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="of the following:">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">of the following:</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child>
-          <placeholder/>
-        </child>
-        <child>
-          <object class="GtkButton" id="Add search button">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <child>
-              <object class="GtkImage">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="icon_name">list-add-symbolic</property>
-                <property name="icon_size">1</property>
-              </object>
-            </child>
-            <style>
-              <class name="image-button"/>
-            </style>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">4</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">2</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkSeparator" id="hseparator2">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">4</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="row_box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">3</property>
-        <child>
-          <placeholder/>
-        </child>
-      </object>
-      <packing>
-        <property name="expand">True</property>
-        <property name="fill">True</property>
-        <property name="position">5</property>
-      </packing>
-    </child>
-  </object>
         <property name="fill">True</property>
         <property name="position">1</property>
       </packing>


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