[shotwell] Make two dialogs Template-based



commit 25ef3e05e3573bf39efd8d07fe038c6a61fccd20
Author: Jens Georg <mail jensge org>
Date:   Mon Dec 5 20:57:51 2016 +0100

    Make two dialogs Template-based
    
    Also fixes an issue with upcoming vala release
    
    Signed-off-by: Jens Georg <mail jensge org>

 org.gnome.Shotwell.gresource.xml      |    2 +
 shotwell.am                           |    1 +
 src/Dialogs.vala                      |  142 +++++++++++++++------------------
 ui/Makefile.am                        |    8 +-
 ui/set_background_dialog.ui           |   15 +---
 ui/set_background_slideshow_dialog.ui |   94 +++++++++++----------
 6 files changed, 128 insertions(+), 134 deletions(-)
---
diff --git a/org.gnome.Shotwell.gresource.xml b/org.gnome.Shotwell.gresource.xml
index ad8c75a..11489d9 100644
--- a/org.gnome.Shotwell.gresource.xml
+++ b/org.gnome.Shotwell.gresource.xml
@@ -7,5 +7,7 @@
       <file alias="sidebar_default_context.ui">ui/sidebar_default_context.ui</file>
       <file alias="search_bar.ui">ui/search_bar.ui</file>
       <file alias="appmenu.ui">ui/appmenu.ui</file>
+      <file>ui/set_background_dialog.ui</file>
+      <file>ui/set_background_slideshow_dialog.ui</file>
   </gresource>
 </gresources>
diff --git a/shotwell.am b/shotwell.am
index ac73241..ceb5fd2 100644
--- a/shotwell.am
+++ b/shotwell.am
@@ -17,6 +17,7 @@ shotwell_VALAFLAGS = $(COMMON_VALAFLAGS) \
        --pkg libgphoto2 --pkg posix --pkg libraw --pkg gexiv2 \
        --pkg libexif --pkg gudev-1.0 --pkg gstreamer-1.0 \
        --pkg gstreamer-pbutils-1.0 --pkg misc \
+       --gresources $(abs_top_srcdir)/org.gnome.Shotwell.gresource.xml \
        $(UNITY_VALAFLAGS) \
        $(COMMON_VALAFLAGS_POST)
 
diff --git a/src/Dialogs.vala b/src/Dialogs.vala
index ffeb9d5..ef26b0e 100644
--- a/src/Dialogs.vala
+++ b/src/Dialogs.vala
@@ -1080,94 +1080,80 @@ public class EntryMultiCompletion : Gtk.EntryCompletion {
     }
 }
 
-public abstract class SetBackgroundDialog {
-    protected Gtk.Dialog dialog;
-    protected Gtk.CheckButton desktop_background_button;
-    protected Gtk.CheckButton screensaver_button;
-    protected Gtk.Button ok_button;
-    // the checkbuttons themselves are initialized to these values
-    protected bool desktop = true;
-    protected bool screensaver = false;
-
-    public SetBackgroundDialog(Gtk.Builder builder) {
-        
-        dialog = builder.get_object("dialog1") as Gtk.Dialog;
-        dialog.set_type_hint(Gdk.WindowTypeHint.DIALOG);
-        dialog.set_parent_window(AppWindow.get_instance().get_parent_window());
-        dialog.set_transient_for(AppWindow.get_instance());
-        dialog.set_default_response(Gtk.ResponseType.OK);
-        
-        desktop_background_button = builder.get_object("desktop_background_checkbox") as Gtk.CheckButton;
-        desktop_background_button.active = desktop;
-        desktop_background_button.toggled.connect(on_checkbox_clicked);
-        screensaver_button = builder.get_object("screensaver_checkbox") as Gtk.CheckButton;
-        screensaver_button.active = screensaver;
-        screensaver_button.toggled.connect(on_checkbox_clicked);
-        
-        ok_button = builder.get_object("ok_button") as Gtk.Button;
-    }
-    
-    protected void on_checkbox_clicked() {
-        desktop = desktop_background_button.active;
-        screensaver = screensaver_button.active;
+[GtkTemplate (ui = "/org/gnome/Shotwell/ui/set_background_dialog.ui")]
+public class SetBackgroundPhotoDialog : Gtk.Dialog {
+    [GtkChild]
+    private Gtk.CheckButton desktop_background_checkbox;
+    [GtkChild]
+    private Gtk.CheckButton screensaver_checkbox;
 
-        if (!desktop && !screensaver) {
-            ok_button.sensitive = false;
-        } else {
-            ok_button.sensitive = true;
-        }
-    }
-    
-    protected bool execute_base() {
-        dialog.show_all();
-        bool result = dialog.run() == Gtk.ResponseType.OK;
-        dialog.destroy();
-        
-        return result;
+    public SetBackgroundPhotoDialog() {
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
+        this.set_transient_for (AppWindow.get_instance());
     }
-}
 
-public class SetBackgroundPhotoDialog : SetBackgroundDialog {
-    
-    public SetBackgroundPhotoDialog() {
-        Gtk.Builder builder = AppWindow.create_builder("set_background_dialog.ui", this);
-        base(builder);
+    [GtkCallback]
+    private void on_checkbox_clicked() {
+        set_response_sensitive (Gtk.ResponseType.OK,
+                                desktop_background_checkbox.active ||
+                                screensaver_checkbox.active);
     }
-    
+
     public bool execute(out bool desktop_background, out bool screensaver) {
-        bool result = execute_base();
-        
-        desktop_background = this.desktop;
-        screensaver = this.screensaver;
-        
+        this.show_all();
+        var result = this.run() == Gtk.ResponseType.OK;
+        this.hide ();
+
+        desktop_background = desktop_background_checkbox.active;
+        screensaver = screensaver_checkbox.active;
+
+        this.destroy();
         return result;
     }
 }
 
-public class SetBackgroundSlideshowDialog : SetBackgroundDialog {
-    private Gtk.Label delay_value_label;
+[GtkTemplate (ui = "/org/gnome/Shotwell/ui/set_background_slideshow_dialog.ui")]
+public class SetBackgroundSlideshowDialog : Gtk.Dialog {
+    [GtkChild]
+    private Gtk.CheckButton desktop_background_checkbox;
+    [GtkChild]
+    private Gtk.CheckButton screensaver_checkbox;
+    [GtkChild]
     private Gtk.Scale delay_scale;
+    [GtkChild]
+    private Gtk.Label delay_value_label;
+
     private int delay_value = 0;
-    
+
     public SetBackgroundSlideshowDialog() {
-        Gtk.Builder builder = AppWindow.create_builder("set_background_slideshow_dialog.ui", this);
-        base(builder);
-        
-        delay_value_label = builder.get_object("delay_value_label") as Gtk.Label;
-        
-        delay_scale = builder.get_object("delay_scale") as Gtk.Scale;
-        delay_scale.value_changed.connect(on_delay_scale_value_changed);
-        delay_scale.adjustment.value = 50;
+        bool use_header;
+        Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+        Object(use_header_bar: use_header ? 1 : 0);
+        this.set_transient_for (AppWindow.get_instance());
     }
-    
+
+    public override void constructed () {
+        on_delay_scale_value_changed ();
+    }
+
+    [GtkCallback]
+    private void on_checkbox_clicked() {
+        set_response_sensitive (Gtk.ResponseType.OK,
+                                desktop_background_checkbox.active ||
+                                screensaver_checkbox.active);
+    }
+
+    [GtkCallback]
     private void on_delay_scale_value_changed() {
         double value = delay_scale.adjustment.value;
-        
+
         // f(x)=x^5 allows to have fine-grained values (seconds) to the left
         // and very coarse-grained values (hours) to the right of the slider.
         // We limit maximum value to 1 day and minimum to 5 seconds.
         delay_value = (int) (Math.pow(value, 5) / Math.pow(90, 5) * 60 * 60 * 24 + 5);
-        
+
         // convert to text and remove fractions from values > 1 minute
         string text;
         if (delay_value < 60) {
@@ -1184,21 +1170,25 @@ public class SetBackgroundSlideshowDialog : SetBackgroundDialog {
             text = _("1 day");
             delay_value = 60 * 60 * 24;
         }
-        
+
         delay_value_label.label = text;
     }
-    
+
     public bool execute(out int delay_value, out bool desktop_background, out bool screensaver) {
-        bool result = execute_base();
-        
+        this.show_all();
+        var result = this.run() == Gtk.ResponseType.OK;
+        this.hide ();
+
         delay_value = this.delay_value;
-        desktop_background = this.desktop;
-        screensaver = this.screensaver;
-        
+        desktop_background = desktop_background_checkbox.active;
+        screensaver = screensaver_checkbox.active;
+
+        this.destroy();
         return result;
     }
 }
 
+
 public class TextEntryDialog : Gtk.Dialog {
     public delegate bool OnModifyValidateType(string text);
     
diff --git a/ui/Makefile.am b/ui/Makefile.am
index 6010b27..7bcf37d 100644
--- a/ui/Makefile.am
+++ b/ui/Makefile.am
@@ -15,15 +15,17 @@ dist_ui_DATA = \
        savedsearch.ui \
        search_bar.ui \
        search_sidebar_context.ui \
-       set_background_dialog.ui \
-       set_background_slideshow_dialog.ui \
        shotwell.ui \
-       shotwell.xml \
        sidebar_default_context.ui \
        tag_sidebar_context.ui \
        tags.ui \
        top.ui \
        trash.ui
 
+dist_noinst_DATA = \
+       appmenu.ui \
+       set_background_dialog.ui \
+       set_background_slideshow_dialog.ui
+
 
 -include $(top_srcdir)/git.mk
diff --git a/ui/set_background_dialog.ui b/ui/set_background_dialog.ui
index ee7106f..e8930e1 100644
--- a/ui/set_background_dialog.ui
+++ b/ui/set_background_dialog.ui
@@ -2,13 +2,7 @@
 <!-- Generated with glade 3.20.0 -->
 <interface domain="shotwell">
   <requires lib="gtk+" version="3.14"/>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">100</property>
-    <property name="step_increment">10</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
-  <object class="GtkDialog" id="dialog1">
+  <template class="SetBackgroundPhotoDialog" parent="GtkDialog">
     <property name="width_request">400</property>
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -29,7 +23,6 @@
             <child>
               <object class="GtkButton" id="cancel_button">
                 <property name="label">_Cancel</property>
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
@@ -45,7 +38,6 @@
             <child>
               <object class="GtkButton" id="ok_button">
                 <property name="label">_OK</property>
-                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
@@ -79,7 +71,9 @@
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
                 <property name="halign">start</property>
+                <property name="active">True</property>
                 <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_checkbox_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -95,6 +89,7 @@
                 <property name="receives_default">False</property>
                 <property name="halign">start</property>
                 <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_checkbox_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -115,5 +110,5 @@
       <action-widget response="-6">cancel_button</action-widget>
       <action-widget response="-5">ok_button</action-widget>
     </action-widgets>
-  </object>
+  </template>
 </interface>
diff --git a/ui/set_background_slideshow_dialog.ui b/ui/set_background_slideshow_dialog.ui
index 438e565..39e1b82 100644
--- a/ui/set_background_slideshow_dialog.ui
+++ b/ui/set_background_slideshow_dialog.ui
@@ -1,14 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.2 -->
-<interface>
-  <requires lib="gtk+" version="3.0"/>
+<!-- Generated with glade 3.20.0 -->
+<interface domain="shotwell">
+  <requires lib="gtk+" version="3.14"/>
   <object class="GtkAdjustment" id="adjustment1">
     <property name="upper">100</property>
+    <property name="value">50</property>
     <property name="step_increment">10</property>
     <property name="page_increment">10</property>
     <property name="page_size">10</property>
   </object>
-  <object class="GtkDialog" id="dialog1">
+  <template class="SetBackgroundSlideshowDialog" parent="GtkDialog">
     <property name="width_request">400</property>
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -21,35 +22,43 @@
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
-        <child>
-          <object class="GtkBox" id="hbox1">
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="spacing">5</property>
+            <property name="layout_style">end</property>
             <child>
-              <object class="GtkLabel" id="label1">
+              <object class="GtkButton" id="cancel_button">
+                <property name="label">_Cancel</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Show each photo for</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_underline">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">True</property>
+                <property name="fill">False</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="delay_value_label">
+              <object class="GtkButton" id="ok_button">
+                <property name="label">_OK</property>
+                <property name="use_action_appearance">False</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes">period of time</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                </attributes>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="has_tooltip">True</property>
+                <property name="tooltip_text" translatable="yes">Generate desktop background 
slideshow</property>
+                <property name="use_underline">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">True</property>
+                <property name="fill">False</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -57,46 +66,39 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
+            <property name="pack_type">end</property>
             <property name="position">0</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox" id="dialog-action_area2">
+        <child>
+          <object class="GtkBox" id="hbox1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
+            <property name="spacing">5</property>
             <child>
-              <object class="GtkButton" id="cancel_button">
-                <property name="label">_Cancel</property>
-                <property name="use_action_appearance">False</property>
+              <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_underline">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Show each photo for</property>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="ok_button">
-                <property name="label">_OK</property>
-                <property name="use_action_appearance">False</property>
+              <object class="GtkLabel" id="delay_value_label">
                 <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>
-                <property name="has_tooltip">True</property>
-                <property name="tooltip_text" translatable="yes">Generate desktop background 
slideshow</property>
-                <property name="use_underline">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">period of time</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -104,7 +106,6 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="pack_type">end</property>
             <property name="position">0</property>
           </packing>
         </child>
@@ -115,6 +116,7 @@
             <property name="tooltip_text" translatable="yes">How long each photo is shown on the desktop 
background</property>
             <property name="adjustment">adjustment1</property>
             <property name="draw_value">False</property>
+            <signal name="value-changed" handler="on_delay_scale_value_changed" swapped="no"/>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -133,9 +135,10 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
-                <property name="xalign">0</property>
-                <property name="yalign">0.5899999737739563</property>
+                <property name="halign">start</property>
+                <property name="active">True</property>
                 <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_checkbox_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -149,8 +152,9 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
-                <property name="xalign">0</property>
+                <property name="halign">start</property>
                 <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_checkbox_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -171,5 +175,5 @@
       <action-widget response="-6">cancel_button</action-widget>
       <action-widget response="-5">ok_button</action-widget>
     </action-widgets>
-  </object>
+  </template>
 </interface>


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