diff options
Diffstat (limited to 'src/preferences-dialog.vala')
-rw-r--r-- | src/preferences-dialog.vala | 229 |
1 files changed, 141 insertions, 88 deletions
diff --git a/src/preferences-dialog.vala b/src/preferences-dialog.vala index 02bbaf8..07fcf42 100644 --- a/src/preferences-dialog.vala +++ b/src/preferences-dialog.vala @@ -10,48 +10,75 @@ * license. */ +private class DpiItem: Object +{ + public int dpi; + public string label; + + public DpiItem(int dpi, string label) + { + this.dpi = dpi; + this.label = label; + } +} + +private class PaperSizeItem: Object +{ + public string label; + public int width; + public int height; + + public PaperSizeItem(string label, int width, int height) + { + this.label = label; + this.width = width; + this.height = height; + } +} + [GtkTemplate (ui = "/org/gnome/SimpleScan/ui/preferences-dialog.ui")] -private class PreferencesDialog : Hdy.PreferencesWindow +private class PreferencesDialog : Adw.PreferencesWindow { private Settings settings; [GtkChild] - private unowned Gtk.ComboBox text_dpi_combo; + private unowned Adw.ComboRow text_dpi_row; [GtkChild] - private unowned Gtk.ComboBox photo_dpi_combo; + private unowned Adw.ComboRow photo_dpi_row; [GtkChild] - private unowned Gtk.ComboBox paper_size_combo; + private unowned Adw.ComboRow paper_size_row; [GtkChild] private unowned Gtk.Scale brightness_scale; [GtkChild] private unowned Gtk.Scale contrast_scale; [GtkChild] - private unowned Gtk.RadioButton page_delay_0s_button; - [GtkChild] - private unowned Gtk.RadioButton page_delay_3s_button; - [GtkChild] - private unowned Gtk.RadioButton page_delay_6s_button; + private unowned Gtk.Scale compression_scale; [GtkChild] - private unowned Gtk.RadioButton page_delay_10s_button; + private unowned Gtk.ToggleButton page_delay_0s_button; [GtkChild] - private unowned Gtk.RadioButton page_delay_15s_button; + private unowned Gtk.ToggleButton page_delay_3s_button; [GtkChild] - private unowned Gtk.ListStore text_dpi_model; + private unowned Gtk.ToggleButton page_delay_6s_button; [GtkChild] - private unowned Gtk.ListStore photo_dpi_model; + private unowned Gtk.ToggleButton page_delay_10s_button; [GtkChild] - private unowned Gtk.RadioButton front_side_button; + private unowned Gtk.ToggleButton page_delay_15s_button; + private ListStore text_dpi_model; + private ListStore photo_dpi_model; [GtkChild] - private unowned Gtk.RadioButton back_side_button; + private unowned Gtk.ToggleButton front_side_button; [GtkChild] - private unowned Gtk.RadioButton both_side_button; + private unowned Gtk.ToggleButton back_side_button; [GtkChild] - private unowned Gtk.ListStore paper_size_model; + private unowned Gtk.ToggleButton both_side_button; + private ListStore paper_size_model; [GtkChild] private unowned Gtk.Adjustment brightness_adjustment; [GtkChild] private unowned Gtk.Adjustment contrast_adjustment; [GtkChild] + private unowned Gtk.Adjustment compression_adjustment; + [GtkChild] private unowned Gtk.Switch postproc_enable_switch; [GtkChild] private unowned Gtk.Entry postproc_script_entry; @@ -60,50 +87,77 @@ private class PreferencesDialog : Hdy.PreferencesWindow [GtkChild] private unowned Gtk.Switch postproc_keep_original_switch; + static string get_dpi_label (DpiItem device) { + return device.label; + } + + static string get_page_size_label (PaperSizeItem size) { + return size.label; + } + public PreferencesDialog (Settings settings) { this.settings = settings; - Gtk.TreeIter iter; - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 0, 1, 0, 2, - /* Combo box value for automatic paper size */ - _("Automatic"), -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 1050, 1, 1480, 2, "A6", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 1480, 1, 2100, 2, "A5", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 2100, 1, 2970, 2, "A4", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 2970, 1, 4200, 2, "A3", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 2159, 1, 2794, 2, "Letter", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 2159, 1, 3556, 2, "Legal", -1); - paper_size_model.append (out iter); - paper_size_model.set (iter, 0, 1016, 1, 1524, 2, "4×6", -1); + paper_size_row.expression = new Gtk.CClosureExpression ( + typeof (string), + null, + {}, + (Callback) get_page_size_label, + null, + null + ); + + paper_size_model = new ListStore (typeof (PaperSizeItem)); + /* Combo box value for automatic paper size */ + paper_size_model.append (new PaperSizeItem (_("Automatic"), 0, 0)); + paper_size_model.append (new PaperSizeItem ("A6", 1050, 1480)); + paper_size_model.append (new PaperSizeItem ("A5", 1480, 2100)); + paper_size_model.append (new PaperSizeItem ("A4", 2100, 2970)); + paper_size_model.append (new PaperSizeItem ("A3", 2970, 4200)); + paper_size_model.append (new PaperSizeItem ("Letter", 2159, 2794)); + paper_size_model.append (new PaperSizeItem ("Legal", 2159, 3556)); + paper_size_model.append (new PaperSizeItem ("4×6", 1016, 1524)); + paper_size_row.model = paper_size_model; + + text_dpi_row.expression = new Gtk.CClosureExpression ( + typeof (string), + null, + {}, + (Callback) get_dpi_label, + null, + null + ); + text_dpi_model = new ListStore (typeof (DpiItem)); + text_dpi_row.model = text_dpi_model; + + photo_dpi_row.expression = new Gtk.CClosureExpression ( + typeof (string), + null, + {}, + (Callback) get_dpi_label, + null, + null + ); + photo_dpi_model = new ListStore (typeof (DpiItem)); + photo_dpi_row.model = photo_dpi_model; var dpi = settings.get_int ("text-dpi"); if (dpi <= 0) dpi = DEFAULT_TEXT_DPI; - set_dpi_combo (text_dpi_combo, DEFAULT_TEXT_DPI, dpi); - text_dpi_combo.changed.connect (() => { settings.set_int ("text-dpi", get_text_dpi ()); }); + set_dpi_combo (text_dpi_row, DEFAULT_TEXT_DPI, dpi); + text_dpi_row.notify["selected"].connect (() => { settings.set_int ("text-dpi", get_text_dpi ()); }); dpi = settings.get_int ("photo-dpi"); if (dpi <= 0) dpi = DEFAULT_PHOTO_DPI; - set_dpi_combo (photo_dpi_combo, DEFAULT_PHOTO_DPI, dpi); - photo_dpi_combo.changed.connect (() => { settings.set_int ("photo-dpi", get_photo_dpi ()); }); + set_dpi_combo (photo_dpi_row, DEFAULT_PHOTO_DPI, dpi); + photo_dpi_row.notify["selected"].connect (() => { settings.set_int ("photo-dpi", get_photo_dpi ()); }); set_page_side ((ScanSide) settings.get_enum ("page-side")); front_side_button.toggled.connect ((button) => { if (button.active) settings.set_enum ("page-side", ScanSide.FRONT); }); back_side_button.toggled.connect ((button) => { if (button.active) settings.set_enum ("page-side", ScanSide.BACK); }); both_side_button.toggled.connect ((button) => { if (button.active) settings.set_enum ("page-side", ScanSide.BOTH); }); - var renderer = new Gtk.CellRendererText (); - paper_size_combo.pack_start (renderer, true); - paper_size_combo.add_attribute (renderer, "text", 2); - var lower = brightness_adjustment.lower; var darker_label = "<small>%s</small>".printf (_("Darker")); var upper = brightness_adjustment.upper; @@ -123,11 +177,20 @@ private class PreferencesDialog : Hdy.PreferencesWindow contrast_scale.add_mark (upper, Gtk.PositionType.BOTTOM, more_label); contrast_adjustment.value = settings.get_int ("contrast"); contrast_adjustment.value_changed.connect (() => { settings.set_int ("contrast", get_contrast ()); }); + + var minimum_size_label = "<small>%s</small>".printf (_("Minimum size")); + compression_scale.add_mark (compression_adjustment.lower, Gtk.PositionType.BOTTOM, minimum_size_label); + compression_scale.add_mark (75, Gtk.PositionType.BOTTOM, null); + compression_scale.add_mark (90, Gtk.PositionType.BOTTOM, null); + var full_detail_label = "<small>%s</small>".printf (_("Full detail")); + compression_scale.add_mark (compression_adjustment.upper, Gtk.PositionType.BOTTOM, full_detail_label); + compression_adjustment.value = settings.get_int ("jpeg-quality"); + compression_adjustment.value_changed.connect (() => { settings.set_int ("jpeg-quality", (int) compression_adjustment.value); }); var paper_width = settings.get_int ("paper-width"); var paper_height = settings.get_int ("paper-height"); set_paper_size (paper_width, paper_height); - paper_size_combo.changed.connect (() => + paper_size_row.notify["selected"].connect (() => { int w, h; get_paper_size (out w, out h); @@ -199,55 +262,47 @@ private class PreferencesDialog : Hdy.PreferencesWindow public void set_paper_size (int width, int height) { - Gtk.TreeIter iter; - bool have_iter; - - for (have_iter = paper_size_model.get_iter_first (out iter); - have_iter; - have_iter = paper_size_model.iter_next (ref iter)) + for (uint i = 0; i < paper_size_model.n_items; i++) { - int w, h; - paper_size_model.get (iter, 0, out w, 1, out h, -1); - if (w == width && h == height) - break; + var item = paper_size_model.get_item (i) as PaperSizeItem; + if (item.width == width && item.height == height) + { + paper_size_row.selected = i; + break; + } } - - if (!have_iter) - have_iter = paper_size_model.get_iter_first (out iter); - if (have_iter) - paper_size_combo.set_active_iter (iter); } public int get_text_dpi () { - Gtk.TreeIter iter; - int dpi = DEFAULT_TEXT_DPI; - - if (text_dpi_combo.get_active_iter (out iter)) - text_dpi_model.get (iter, 0, out dpi, -1); + if (text_dpi_row.selected != Gtk.INVALID_LIST_POSITION) + { + var item = text_dpi_model.get_item (text_dpi_row.selected) as DpiItem; + return item.dpi; + } - return dpi; + return DEFAULT_TEXT_DPI; } public int get_photo_dpi () { - Gtk.TreeIter iter; - int dpi = DEFAULT_PHOTO_DPI; - - if (photo_dpi_combo.get_active_iter (out iter)) - photo_dpi_model.get (iter, 0, out dpi, -1); + if (photo_dpi_row.selected != Gtk.INVALID_LIST_POSITION) + { + var item = photo_dpi_model.get_item (photo_dpi_row.selected) as DpiItem; + return item.dpi; + } - return dpi; + return DEFAULT_PHOTO_DPI; } public bool get_paper_size (out int width, out int height) { - Gtk.TreeIter iter; - width = height = 0; - if (paper_size_combo.get_active_iter (out iter)) + if (paper_size_row.selected != Gtk.INVALID_LIST_POSITION) { - paper_size_model.get (iter, 0, ref width, 1, ref height, -1); + var item = paper_size_model.get_item (paper_size_row.selected) as PaperSizeItem; + width = item.width; + height = item.height; return true; } @@ -302,16 +357,15 @@ private class PreferencesDialog : Hdy.PreferencesWindow page_delay_0s_button.active = true; } - private void set_dpi_combo (Gtk.ComboBox combo, int default_dpi, int current_dpi) + private void set_dpi_combo (Adw.ComboRow combo, int default_dpi, int current_dpi) { - var renderer = new Gtk.CellRendererText (); - combo.pack_start (renderer, true); - combo.add_attribute (renderer, "text", 1); - - var model = combo.model as Gtk.ListStore; + var model = combo.model as ListStore; int[] scan_resolutions = {75, 150, 200, 300, 600, 1200, 2400}; - foreach (var dpi in scan_resolutions) + + for (var i = 0; i < scan_resolutions.length; i++) { + var dpi = scan_resolutions[i]; + string label; if (dpi == default_dpi) /* Preferences dialog: Label for default resolution in resolution list */ @@ -325,13 +379,12 @@ private class PreferencesDialog : Hdy.PreferencesWindow else /* Preferences dialog: Label for resolution value in resolution list (dpi = dots per inch) */ label = _("%d dpi").printf (dpi); - - Gtk.TreeIter iter; - model.append (out iter); - model.set (iter, 0, dpi, 1, label, -1); + + model.append (new DpiItem (dpi, label)); if (dpi == current_dpi) - combo.set_active_iter (iter); + combo.selected = i; + } } } |