[shotwell] Make two dialogs Template-based
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [shotwell] Make two dialogs Template-based
- Date: Mon, 5 Dec 2016 19:59:34 +0000 (UTC)
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]