[shotwell] Extract AdjustDateTimeDialog
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [shotwell] Extract AdjustDateTimeDialog
- Date: Wed, 20 Dec 2017 21:50:05 +0000 (UTC)
commit 122e3bda66d4b4afbc110363c6f1c00f237898ad
Author: Jens Georg <mail jensge org>
Date: Tue Dec 19 20:59:22 2017 +0100
Extract AdjustDateTimeDialog
src/Dialogs.vala | 339 --------------------------------
src/dialogs/AdjustDateTimeDialog.vala | 345 +++++++++++++++++++++++++++++++++
src/meson.build | 5 +-
3 files changed, 348 insertions(+), 341 deletions(-)
---
diff --git a/src/Dialogs.vala b/src/Dialogs.vala
index dc08212..df0ca81 100644
--- a/src/Dialogs.vala
+++ b/src/Dialogs.vala
@@ -956,345 +956,6 @@ public class ProgressDialog : Gtk.Window {
}
}
-public class AdjustDateTimeDialog : Gtk.Dialog {
- private const int64 SECONDS_IN_DAY = 60 * 60 * 24;
- private const int64 SECONDS_IN_HOUR = 60 * 60;
- private const int64 SECONDS_IN_MINUTE = 60;
- private const int YEAR_OFFSET = 1900;
- private bool no_original_time = false;
-
- private const int CALENDAR_THUMBNAIL_SCALE = 1;
-
- time_t original_time;
- Gtk.Label original_time_label;
- Gtk.Calendar calendar;
- Gtk.SpinButton hour;
- Gtk.SpinButton minute;
- Gtk.SpinButton second;
- Gtk.ComboBoxText system;
- Gtk.RadioButton relativity_radio_button;
- Gtk.RadioButton batch_radio_button;
- Gtk.CheckButton modify_originals_check_button;
- Gtk.Label notification;
-
- private enum TimeSystem {
- AM,
- PM,
- 24HR;
- }
-
- TimeSystem previous_time_system;
-
- public AdjustDateTimeDialog(Dateable source, int photo_count, bool display_options = true,
- bool contains_video = false, bool only_video = false) {
- assert(source != null);
-
- bool use_header;
- Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
- Object(use_header_bar: use_header ? 1 : 0);
-
- set_modal(true);
- set_resizable(false);
- set_transient_for(AppWindow.get_instance());
-
- add_buttons(Resources.CANCEL_LABEL, Gtk.ResponseType.CANCEL,
- Resources.OK_LABEL, Gtk.ResponseType.OK);
- set_title(Resources.ADJUST_DATE_TIME_LABEL);
-
- calendar = new Gtk.Calendar();
- calendar.show_heading = false;
- calendar.day_selected.connect(on_time_changed);
- calendar.month_changed.connect(on_time_changed);
- calendar.next_year.connect(on_time_changed);
- calendar.prev_year.connect(on_time_changed);
-
- if (Config.Facade.get_instance().get_use_24_hour_time())
- hour = new Gtk.SpinButton.with_range(0, 23, 1);
- else
- hour = new Gtk.SpinButton.with_range(1, 12, 1);
-
- hour.output.connect(on_spin_button_output);
- hour.set_width_chars(2);
- hour.set_max_width_chars(2);
-
- minute = new Gtk.SpinButton.with_range(0, 59, 1);
- minute.set_width_chars(2);
- minute.set_max_width_chars(2);
- minute.output.connect(on_spin_button_output);
-
- second = new Gtk.SpinButton.with_range(0, 59, 1);
- second.set_width_chars(2);
- second.set_max_width_chars(2);
- second.output.connect(on_spin_button_output);
-
- system = new Gtk.ComboBoxText();
- system.append_text(_("AM"));
- system.append_text(_("PM"));
- system.append_text(_("24 Hr"));
- system.changed.connect(on_time_system_changed);
-
- Gtk.Box clock = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 3);
-
- clock.pack_start(hour, false, false, 0);
- clock.pack_start(new Gtk.Label(":"), false, false, 0); // internationalize?
- clock.pack_start(minute, false, false, 0);
- clock.pack_start(new Gtk.Label(":"), false, false, 0);
- clock.pack_start(second, false, false, 0);
- clock.pack_start(system, false, false, 0);
-
- set_default_response(Gtk.ResponseType.OK);
-
- relativity_radio_button = new Gtk.RadioButton.with_mnemonic(null,
- _("_Shift photos/videos by the same amount"));
- relativity_radio_button.set_active(Config.Facade.get_instance().get_keep_relativity());
- relativity_radio_button.sensitive = display_options && photo_count > 1;
-
- batch_radio_button = new Gtk.RadioButton.with_mnemonic(relativity_radio_button.get_group(),
- _("Set _all photos/videos to this time"));
- batch_radio_button.set_active(!Config.Facade.get_instance().get_keep_relativity());
- batch_radio_button.sensitive = display_options && photo_count > 1;
- batch_radio_button.toggled.connect(on_time_changed);
-
- if (contains_video) {
- var text = ngettext ("_Modify original photo file", "_Modify original photo files",
- photo_count);
- modify_originals_check_button = new Gtk.CheckButton.with_mnemonic(text);
- } else {
- var text = ngettext ("_Modify original file", "_Modify original files", photo_count);
- modify_originals_check_button = new Gtk.CheckButton.with_mnemonic(text);
- }
-
-
modify_originals_check_button.set_active(Config.Facade.get_instance().get_commit_metadata_to_masters() &&
- display_options);
- modify_originals_check_button.sensitive = (!only_video) &&
- (!Config.Facade.get_instance().get_commit_metadata_to_masters() && display_options);
-
- Gtk.Box time_content = new Gtk.Box(Gtk.Orientation.VERTICAL, 5);
-
- var picker = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5);
- var combo = new Gtk.ComboBoxText();
- for (int i = 0; i < 12; i++){
- combo.append_text(Time.gm((i * 2764800)).format("%B"));
- }
- picker.pack_start(combo, false, false, 0);
- // Limits taken from GtkCalendar
- var spin = new Gtk.SpinButton.with_range(0, int.MAX >> 9, 1);
- picker.pack_end(spin, false, false, 0);
- spin.bind_property("value", calendar, "year", GLib.BindingFlags.BIDIRECTIONAL);
- combo.bind_property("active", calendar, "month", GLib.BindingFlags.BIDIRECTIONAL);
-
- time_content.pack_start(picker, false, false, 0);
- time_content.pack_start(calendar, true, false, 0);
- time_content.pack_start(clock, true, false, 0);
-
- if (display_options) {
- time_content.pack_start(relativity_radio_button, true, false, 0);
- time_content.pack_start(batch_radio_button, true, false, 0);
- time_content.pack_start(modify_originals_check_button, true, false, 0);
- }
-
- Gdk.Pixbuf preview = null;
- try {
- // Instead of calling get_pixbuf() here, we use the thumbnail instead;
- // this was needed for Videos, since they don't support get_pixbuf().
- preview = source.get_thumbnail(CALENDAR_THUMBNAIL_SCALE);
- } catch (Error err) {
- warning("Unable to fetch preview for %s", source.to_string());
- }
-
- Gtk.Box image_content = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
- image_content.set_valign(Gtk.Align.START);
- image_content.set_homogeneous(true);
- Gtk.Image image = (preview != null) ? new Gtk.Image.from_pixbuf(preview) : new Gtk.Image();
- original_time_label = new Gtk.Label(null);
- image_content.pack_start(image, true, false, 0);
- image_content.pack_start(original_time_label, true, false, 0);
-
- Gtk.Box hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 10);
- hbox.set_border_width(3);
- hbox.pack_start(image_content, true, false, 0);
- hbox.pack_start(time_content, true, false, 0);
- hbox.halign = Gtk.Align.CENTER;
- hbox.valign = Gtk.Align.CENTER;
- hbox.hexpand = false;
- hbox.vexpand = false;
-
- ((Gtk.Box) get_content_area()).pack_start(hbox, true, false, 0);
-
- notification = new Gtk.Label("");
- notification.set_line_wrap(true);
- notification.set_justify(Gtk.Justification.CENTER);
-
- ((Gtk.Box) get_content_area()).pack_start(notification, true, true, 0);
-
- original_time = source.get_exposure_time();
-
- if (original_time == 0) {
- original_time = time_t();
- no_original_time = true;
- }
-
- set_time(Time.local(original_time));
- set_original_time_label(Config.Facade.get_instance().get_use_24_hour_time());
- }
-
- private void set_time(Time time) {
- calendar.select_month(time.month, time.year + YEAR_OFFSET);
- calendar.select_day(time.day);
- calendar.notify_property("year");
- calendar.notify_property("month");
-
- if (Config.Facade.get_instance().get_use_24_hour_time()) {
- system.set_active(TimeSystem.24HR);
- hour.set_value(time.hour);
- } else {
- int AMPM_hour = time.hour % 12;
- hour.set_value((AMPM_hour == 0) ? 12 : AMPM_hour);
- system.set_active((time.hour >= 12) ? TimeSystem.PM : TimeSystem.AM);
- }
-
- minute.set_value(time.minute);
- second.set_value(time.second);
-
- previous_time_system = (TimeSystem) system.get_active();
- }
-
- private void set_original_time_label(bool use_24_hr_format) {
- if (no_original_time)
- return;
-
- original_time_label.set_text(_("Original: ") +
- Time.local(original_time).format(use_24_hr_format ? _("%m/%d/%Y, %H:%M:%S") :
- _("%m/%d/%Y, %I:%M:%S %p")));
- }
-
- private time_t get_time() {
- Time time = Time();
-
- time.second = (int) second.get_value();
- time.minute = (int) minute.get_value();
-
- // convert to 24 hr
- int hour = (int) hour.get_value();
- time.hour = (hour == 12 && system.get_active() != TimeSystem.24HR) ? 0 : hour;
- time.hour += ((system.get_active() == TimeSystem.PM) ? 12 : 0);
-
- uint year, month, day;
- calendar.get_date(out year, out month, out day);
- time.year = ((int) year) - YEAR_OFFSET;
- time.month = (int) month;
- time.day = (int) day;
-
- time.isdst = -1;
-
- return time.mktime();
- }
-
- public bool execute(out int64 time_shift, out bool keep_relativity,
- out bool modify_originals) {
- show_all();
-
- bool response = false;
-
- if (run() == Gtk.ResponseType.OK) {
- if (no_original_time)
- time_shift = (int64) get_time();
- else
- time_shift = (int64) (get_time() - original_time);
-
- keep_relativity = relativity_radio_button.get_active();
-
- if (relativity_radio_button.sensitive)
- Config.Facade.get_instance().set_keep_relativity(keep_relativity);
-
- modify_originals = modify_originals_check_button.get_active();
-
- if (modify_originals_check_button.sensitive)
- Config.Facade.get_instance().set_modify_originals(modify_originals);
-
- response = true;
- } else {
- time_shift = 0;
- keep_relativity = true;
- modify_originals = false;
- }
-
- destroy();
-
- return response;
- }
-
- private bool on_spin_button_output(Gtk.SpinButton button) {
- button.set_text("%02d".printf((int) button.get_value()));
-
- on_time_changed();
-
- return true;
- }
-
- private void on_time_changed() {
- int64 time_shift = ((int64) get_time() - (int64) original_time);
- calendar.notify_property("year");
- calendar.notify_property("month");
-
- previous_time_system = (TimeSystem) system.get_active();
-
- if (time_shift == 0 || no_original_time || (batch_radio_button.get_active() &&
- batch_radio_button.sensitive)) {
- notification.hide();
- } else {
- bool forward = time_shift > 0;
- int days, hours, minutes, seconds;
-
- time_shift = time_shift.abs();
-
- days = (int) (time_shift / SECONDS_IN_DAY);
- time_shift = time_shift % SECONDS_IN_DAY;
- hours = (int) (time_shift / SECONDS_IN_HOUR);
- time_shift = time_shift % SECONDS_IN_HOUR;
- minutes = (int) (time_shift / SECONDS_IN_MINUTE);
- seconds = (int) (time_shift % SECONDS_IN_MINUTE);
-
- string shift_status = (forward) ?
- _("Exposure time will be shifted forward by\n%d %s, %d %s, %d %s, and %d %s.") :
- _("Exposure time will be shifted backward by\n%d %s, %d %s, %d %s, and %d %s.");
-
- notification.set_text(shift_status.printf(days, ngettext("day", "days", days),
- hours, ngettext("hour", "hours", hours), minutes,
- ngettext("minute", "minutes", minutes), seconds,
- ngettext("second", "seconds", seconds)));
-
- notification.show();
- }
- }
-
- private void on_time_system_changed() {
- if (previous_time_system == system.get_active())
- return;
-
- Config.Facade.get_instance().set_use_24_hour_time(system.get_active() == TimeSystem.24HR);
-
- if (system.get_active() == TimeSystem.24HR) {
- int time = (hour.get_value() == 12.0) ? 0 : (int) hour.get_value();
- time = time + ((previous_time_system == TimeSystem.PM) ? 12 : 0);
-
- hour.set_range(0, 23);
- set_original_time_label(true);
-
- hour.set_value(time);
- } else {
- int AMPM_hour = ((int) hour.get_value()) % 12;
-
- hour.set_range(1, 12);
- set_original_time_label(false);
-
- hour.set_value((AMPM_hour == 0) ? 12 : AMPM_hour);
- }
-
- on_time_changed();
- }
-}
-
public const int MAX_OBJECTS_DISPLAYED = 3;
public void multiple_object_error_dialog(Gee.ArrayList<DataObject> objects, string message,
string title) {
diff --git a/src/dialogs/AdjustDateTimeDialog.vala b/src/dialogs/AdjustDateTimeDialog.vala
new file mode 100644
index 0000000..a55a084
--- /dev/null
+++ b/src/dialogs/AdjustDateTimeDialog.vala
@@ -0,0 +1,345 @@
+/* Copyright 2016 Software Freedom Conservancy Inc.
+ * Copyright 2017 Jens Georg <mail jensge org>
+ *
+ * This software is licensed under the GNU LGPL (version 2.1 or later).
+ * See the COPYING file in this distribution.
+ */
+
+public class AdjustDateTimeDialog : Gtk.Dialog {
+ private const int64 SECONDS_IN_DAY = 60 * 60 * 24;
+ private const int64 SECONDS_IN_HOUR = 60 * 60;
+ private const int64 SECONDS_IN_MINUTE = 60;
+ private const int YEAR_OFFSET = 1900;
+ private bool no_original_time = false;
+
+ private const int CALENDAR_THUMBNAIL_SCALE = 1;
+
+ time_t original_time;
+ Gtk.Label original_time_label;
+ Gtk.Calendar calendar;
+ Gtk.SpinButton hour;
+ Gtk.SpinButton minute;
+ Gtk.SpinButton second;
+ Gtk.ComboBoxText system;
+ Gtk.RadioButton relativity_radio_button;
+ Gtk.RadioButton batch_radio_button;
+ Gtk.CheckButton modify_originals_check_button;
+ Gtk.Label notification;
+
+ private enum TimeSystem {
+ AM,
+ PM,
+ 24HR;
+ }
+
+ TimeSystem previous_time_system;
+
+ public AdjustDateTimeDialog(Dateable source, int photo_count, bool display_options = true,
+ bool contains_video = false, bool only_video = false) {
+ assert(source != null);
+
+ bool use_header;
+ Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+ Object(use_header_bar: use_header ? 1 : 0);
+
+ set_modal(true);
+ set_resizable(false);
+ set_transient_for(AppWindow.get_instance());
+
+ add_buttons(Resources.CANCEL_LABEL, Gtk.ResponseType.CANCEL,
+ Resources.OK_LABEL, Gtk.ResponseType.OK);
+ set_title(Resources.ADJUST_DATE_TIME_LABEL);
+
+ calendar = new Gtk.Calendar();
+ calendar.show_heading = false;
+ calendar.day_selected.connect(on_time_changed);
+ calendar.month_changed.connect(on_time_changed);
+ calendar.next_year.connect(on_time_changed);
+ calendar.prev_year.connect(on_time_changed);
+
+ if (Config.Facade.get_instance().get_use_24_hour_time())
+ hour = new Gtk.SpinButton.with_range(0, 23, 1);
+ else
+ hour = new Gtk.SpinButton.with_range(1, 12, 1);
+
+ hour.output.connect(on_spin_button_output);
+ hour.set_width_chars(2);
+ hour.set_max_width_chars(2);
+
+ minute = new Gtk.SpinButton.with_range(0, 59, 1);
+ minute.set_width_chars(2);
+ minute.set_max_width_chars(2);
+ minute.output.connect(on_spin_button_output);
+
+ second = new Gtk.SpinButton.with_range(0, 59, 1);
+ second.set_width_chars(2);
+ second.set_max_width_chars(2);
+ second.output.connect(on_spin_button_output);
+
+ system = new Gtk.ComboBoxText();
+ system.append_text(_("AM"));
+ system.append_text(_("PM"));
+ system.append_text(_("24 Hr"));
+ system.changed.connect(on_time_system_changed);
+
+ Gtk.Box clock = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 3);
+
+ clock.pack_start(hour, false, false, 0);
+ clock.pack_start(new Gtk.Label(":"), false, false, 0); // internationalize?
+ clock.pack_start(minute, false, false, 0);
+ clock.pack_start(new Gtk.Label(":"), false, false, 0);
+ clock.pack_start(second, false, false, 0);
+ clock.pack_start(system, false, false, 0);
+
+ set_default_response(Gtk.ResponseType.OK);
+
+ relativity_radio_button = new Gtk.RadioButton.with_mnemonic(null,
+ _("_Shift photos/videos by the same amount"));
+ relativity_radio_button.set_active(Config.Facade.get_instance().get_keep_relativity());
+ relativity_radio_button.sensitive = display_options && photo_count > 1;
+
+ batch_radio_button = new Gtk.RadioButton.with_mnemonic(relativity_radio_button.get_group(),
+ _("Set _all photos/videos to this time"));
+ batch_radio_button.set_active(!Config.Facade.get_instance().get_keep_relativity());
+ batch_radio_button.sensitive = display_options && photo_count > 1;
+ batch_radio_button.toggled.connect(on_time_changed);
+
+ if (contains_video) {
+ var text = ngettext ("_Modify original photo file", "_Modify original photo files",
+ photo_count);
+ modify_originals_check_button = new Gtk.CheckButton.with_mnemonic(text);
+ } else {
+ var text = ngettext ("_Modify original file", "_Modify original files", photo_count);
+ modify_originals_check_button = new Gtk.CheckButton.with_mnemonic(text);
+ }
+
+
modify_originals_check_button.set_active(Config.Facade.get_instance().get_commit_metadata_to_masters() &&
+ display_options);
+ modify_originals_check_button.sensitive = (!only_video) &&
+ (!Config.Facade.get_instance().get_commit_metadata_to_masters() && display_options);
+
+ Gtk.Box time_content = new Gtk.Box(Gtk.Orientation.VERTICAL, 5);
+
+ var picker = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5);
+ var combo = new Gtk.ComboBoxText();
+ for (int i = 0; i < 12; i++){
+ combo.append_text(Time.gm((i * 2764800)).format("%B"));
+ }
+ picker.pack_start(combo, false, false, 0);
+ // Limits taken from GtkCalendar
+ var spin = new Gtk.SpinButton.with_range(0, int.MAX >> 9, 1);
+ picker.pack_end(spin, false, false, 0);
+ spin.bind_property("value", calendar, "year", GLib.BindingFlags.BIDIRECTIONAL);
+ combo.bind_property("active", calendar, "month", GLib.BindingFlags.BIDIRECTIONAL);
+
+ time_content.pack_start(picker, false, false, 0);
+ time_content.pack_start(calendar, true, false, 0);
+ time_content.pack_start(clock, true, false, 0);
+
+ if (display_options) {
+ time_content.pack_start(relativity_radio_button, true, false, 0);
+ time_content.pack_start(batch_radio_button, true, false, 0);
+ time_content.pack_start(modify_originals_check_button, true, false, 0);
+ }
+
+ Gdk.Pixbuf preview = null;
+ try {
+ // Instead of calling get_pixbuf() here, we use the thumbnail instead;
+ // this was needed for Videos, since they don't support get_pixbuf().
+ preview = source.get_thumbnail(CALENDAR_THUMBNAIL_SCALE);
+ } catch (Error err) {
+ warning("Unable to fetch preview for %s", source.to_string());
+ }
+
+ Gtk.Box image_content = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
+ image_content.set_valign(Gtk.Align.START);
+ image_content.set_homogeneous(true);
+ Gtk.Image image = (preview != null) ? new Gtk.Image.from_pixbuf(preview) : new Gtk.Image();
+ original_time_label = new Gtk.Label(null);
+ image_content.pack_start(image, true, false, 0);
+ image_content.pack_start(original_time_label, true, false, 0);
+
+ Gtk.Box hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 10);
+ hbox.set_border_width(3);
+ hbox.pack_start(image_content, true, false, 0);
+ hbox.pack_start(time_content, true, false, 0);
+ hbox.halign = Gtk.Align.CENTER;
+ hbox.valign = Gtk.Align.CENTER;
+ hbox.hexpand = false;
+ hbox.vexpand = false;
+
+ ((Gtk.Box) get_content_area()).pack_start(hbox, true, false, 0);
+
+ notification = new Gtk.Label("");
+ notification.set_line_wrap(true);
+ notification.set_justify(Gtk.Justification.CENTER);
+
+ ((Gtk.Box) get_content_area()).pack_start(notification, true, true, 0);
+
+ original_time = source.get_exposure_time();
+
+ if (original_time == 0) {
+ original_time = time_t();
+ no_original_time = true;
+ }
+
+ set_time(Time.local(original_time));
+ set_original_time_label(Config.Facade.get_instance().get_use_24_hour_time());
+ }
+
+ private void set_time(Time time) {
+ calendar.select_month(time.month, time.year + YEAR_OFFSET);
+ calendar.select_day(time.day);
+ calendar.notify_property("year");
+ calendar.notify_property("month");
+
+ if (Config.Facade.get_instance().get_use_24_hour_time()) {
+ system.set_active(TimeSystem.24HR);
+ hour.set_value(time.hour);
+ } else {
+ int AMPM_hour = time.hour % 12;
+ hour.set_value((AMPM_hour == 0) ? 12 : AMPM_hour);
+ system.set_active((time.hour >= 12) ? TimeSystem.PM : TimeSystem.AM);
+ }
+
+ minute.set_value(time.minute);
+ second.set_value(time.second);
+
+ previous_time_system = (TimeSystem) system.get_active();
+ }
+
+ private void set_original_time_label(bool use_24_hr_format) {
+ if (no_original_time)
+ return;
+
+ original_time_label.set_text(_("Original: ") +
+ Time.local(original_time).format(use_24_hr_format ? _("%m/%d/%Y, %H:%M:%S") :
+ _("%m/%d/%Y, %I:%M:%S %p")));
+ }
+
+ private time_t get_time() {
+ Time time = Time();
+
+ time.second = (int) second.get_value();
+ time.minute = (int) minute.get_value();
+
+ // convert to 24 hr
+ int hour = (int) hour.get_value();
+ time.hour = (hour == 12 && system.get_active() != TimeSystem.24HR) ? 0 : hour;
+ time.hour += ((system.get_active() == TimeSystem.PM) ? 12 : 0);
+
+ uint year, month, day;
+ calendar.get_date(out year, out month, out day);
+ time.year = ((int) year) - YEAR_OFFSET;
+ time.month = (int) month;
+ time.day = (int) day;
+
+ time.isdst = -1;
+
+ return time.mktime();
+ }
+
+ public bool execute(out int64 time_shift, out bool keep_relativity,
+ out bool modify_originals) {
+ show_all();
+
+ bool response = false;
+
+ if (run() == Gtk.ResponseType.OK) {
+ if (no_original_time)
+ time_shift = (int64) get_time();
+ else
+ time_shift = (int64) (get_time() - original_time);
+
+ keep_relativity = relativity_radio_button.get_active();
+
+ if (relativity_radio_button.sensitive)
+ Config.Facade.get_instance().set_keep_relativity(keep_relativity);
+
+ modify_originals = modify_originals_check_button.get_active();
+
+ if (modify_originals_check_button.sensitive)
+ Config.Facade.get_instance().set_modify_originals(modify_originals);
+
+ response = true;
+ } else {
+ time_shift = 0;
+ keep_relativity = true;
+ modify_originals = false;
+ }
+
+ destroy();
+
+ return response;
+ }
+
+ private bool on_spin_button_output(Gtk.SpinButton button) {
+ button.set_text("%02d".printf((int) button.get_value()));
+
+ on_time_changed();
+
+ return true;
+ }
+
+ private void on_time_changed() {
+ int64 time_shift = ((int64) get_time() - (int64) original_time);
+ calendar.notify_property("year");
+ calendar.notify_property("month");
+
+ previous_time_system = (TimeSystem) system.get_active();
+
+ if (time_shift == 0 || no_original_time || (batch_radio_button.get_active() &&
+ batch_radio_button.sensitive)) {
+ notification.hide();
+ } else {
+ bool forward = time_shift > 0;
+ int days, hours, minutes, seconds;
+
+ time_shift = time_shift.abs();
+
+ days = (int) (time_shift / SECONDS_IN_DAY);
+ time_shift = time_shift % SECONDS_IN_DAY;
+ hours = (int) (time_shift / SECONDS_IN_HOUR);
+ time_shift = time_shift % SECONDS_IN_HOUR;
+ minutes = (int) (time_shift / SECONDS_IN_MINUTE);
+ seconds = (int) (time_shift % SECONDS_IN_MINUTE);
+
+ string shift_status = (forward) ?
+ _("Exposure time will be shifted forward by\n%d %s, %d %s, %d %s, and %d %s.") :
+ _("Exposure time will be shifted backward by\n%d %s, %d %s, %d %s, and %d %s.");
+
+ notification.set_text(shift_status.printf(days, ngettext("day", "days", days),
+ hours, ngettext("hour", "hours", hours), minutes,
+ ngettext("minute", "minutes", minutes), seconds,
+ ngettext("second", "seconds", seconds)));
+
+ notification.show();
+ }
+ }
+
+ private void on_time_system_changed() {
+ if (previous_time_system == system.get_active())
+ return;
+
+ Config.Facade.get_instance().set_use_24_hour_time(system.get_active() == TimeSystem.24HR);
+
+ if (system.get_active() == TimeSystem.24HR) {
+ int time = (hour.get_value() == 12.0) ? 0 : (int) hour.get_value();
+ time = time + ((previous_time_system == TimeSystem.PM) ? 12 : 0);
+
+ hour.set_range(0, 23);
+ set_original_time_label(true);
+
+ hour.set_value(time);
+ } else {
+ int AMPM_hour = ((int) hour.get_value()) % 12;
+
+ hour.set_range(1, 12);
+ set_original_time_label(false);
+
+ hour.set_value((AMPM_hour == 0) ? 12 : AMPM_hour);
+ }
+
+ on_time_changed();
+ }
+}
diff --git a/src/meson.build b/src/meson.build
index 3006480..32f19ac 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -192,13 +192,14 @@ executable('shotwell',
'MediaViewTracker.vala',
'UnityProgressBar.vala',
'Upgrades.vala',
+ 'dialogs/AdjustDateTimeDialog.vala',
'dialogs/EntryMultiCompletion.vala',
+ 'dialogs/ExportDialog.vala',
+ 'dialogs/MultiTextEntryDialog.vala',
'dialogs/Preferences.vala',
'dialogs/SetBackgroundSlideshow.vala',
'dialogs/SetBackground.vala',
'dialogs/TextEntry.vala',
- 'dialogs/ExportDialog.vala',
- 'dialogs/MultiTextEntryDialog.vala',
'.unitize/_UnitInternals.vala',
'.unitize/_UtilInternals.vala',
'.unitize/_ThreadsInternals.vala',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]