diff options
Diffstat (limited to 'src/dialogs/SetBackgroundSlideshow.vala')
| -rw-r--r-- | src/dialogs/SetBackgroundSlideshow.vala | 78 | 
1 files changed, 78 insertions, 0 deletions
| diff --git a/src/dialogs/SetBackgroundSlideshow.vala b/src/dialogs/SetBackgroundSlideshow.vala new file mode 100644 index 0000000..914af76 --- /dev/null +++ b/src/dialogs/SetBackgroundSlideshow.vala @@ -0,0 +1,78 @@ +/* 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. + */ + +[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() { +        Object(use_header_bar: Resources.use_header_bar()); +        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) { +            text = ngettext("%d second", "%d seconds", delay_value).printf(delay_value); +        } else if (delay_value < 60 * 60) { +            int minutes = delay_value / 60; +            text = ngettext("%d minute", "%d minutes", minutes).printf(minutes); +            delay_value = minutes * 60; +        } else if (delay_value < 60 * 60 * 24) { +            int hours = delay_value / (60 * 60); +            text = ngettext("%d hour", "%d hours", hours).printf(hours); +            delay_value = hours * (60 * 60); +        } else { +            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) { +        this.show_all(); +        var result = this.run() == Gtk.ResponseType.OK; +        this.hide (); + +        delay_value = this.delay_value; +        desktop_background = desktop_background_checkbox.active; +        screensaver = screensaver_checkbox.active; + +        this.destroy(); +        return result; +    } +} | 
