summaryrefslogtreecommitdiff
path: root/src/ui.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui.vala')
-rw-r--r--src/ui.vala153
1 files changed, 131 insertions, 22 deletions
diff --git a/src/ui.vala b/src/ui.vala
index 5b192d9..075c97d 100644
--- a/src/ui.vala
+++ b/src/ui.vala
@@ -31,6 +31,7 @@ public class UserInterface
private Gtk.MenuItem crop_rotate_menuitem;
private Gtk.MenuItem save_menuitem;
private Gtk.MenuItem save_as_menuitem;
+ private Gtk.MenuItem copy_to_clipboard_menuitem;
private Gtk.ToolButton save_toolbutton;
private Gtk.MenuItem stop_menuitem;
private Gtk.ToolButton stop_toolbutton;
@@ -51,11 +52,17 @@ public class UserInterface
private Gtk.ComboBox photo_dpi_combo;
private Gtk.ComboBox page_side_combo;
private Gtk.ComboBox paper_size_combo;
+ private Gtk.Scale brightness_scale;
+ private Gtk.Scale contrast_scale;
+ private Gtk.Scale quality_scale;
private Gtk.ListStore device_model;
private Gtk.ListStore text_dpi_model;
private Gtk.ListStore photo_dpi_model;
private Gtk.ListStore page_side_model;
private Gtk.ListStore paper_size_model;
+ private Gtk.Adjustment brightness_adjustment;
+ private Gtk.Adjustment contrast_adjustment;
+ private Gtk.Adjustment quality_adjustment;
private bool setting_devices;
private bool user_selected_device;
@@ -70,6 +77,8 @@ public class UserInterface
private Book book;
private string? book_uri = null;
+ private AutosaveManager? autosave_manager;
+
private BookView book_view;
private bool updating_page_menu;
private int default_page_width;
@@ -88,17 +97,19 @@ public class UserInterface
public signal void start_scan (string? device, ScanOptions options);
public signal void stop_scan ();
- public signal void email (string profile);
+ public signal void email (string profile, int quality);
public UserInterface ()
{
+ settings = new Settings ("org.gnome.SimpleScan");
+
book = new Book ();
book.page_removed.connect (page_removed_cb);
book.page_added.connect (page_added_cb);
- settings = new Settings ("org.gnome.SimpleScan");
-
load ();
+
+ autosave_manager = AutosaveManager.create (ref book);
}
~UserInterface ()
@@ -316,13 +327,7 @@ public class UserInterface
private void on_file_type_changed (Gtk.TreeSelection selection)
{
- Gtk.TreeModel model;
- Gtk.TreeIter iter;
- if (!selection.get_selected (out model, out iter))
- return;
-
- string extension;
- model.get (iter, 1, out extension, -1);
+ var extension = get_selected_extension (selection);
var path = save_dialog.get_filename ();
var filename = Path.get_basename (path);
@@ -334,6 +339,17 @@ public class UserInterface
save_dialog.set_current_name (filename);
}
+ private string get_selected_extension (Gtk.TreeSelection selection)
+ {
+ Gtk.TreeModel model;
+ Gtk.TreeIter iter;
+ string extension = "";
+
+ if (selection.get_selected (out model, out iter))
+ model.get (iter, 1, out extension, -1);
+ return extension;
+ }
+
private string choose_file_location ()
{
/* Get directory to save to */
@@ -373,10 +389,10 @@ public class UserInterface
expander.set_spacing (5);
save_dialog.set_extra_widget (expander);
- string extension = "";
+ string default_extension = "";
var index = default_file_name.last_index_of_char ('.');
if (index >= 0)
- extension = default_file_name.slice (0, index);
+ default_extension = default_file_name.substring (index);
var file_type_store = new Gtk.ListStore (2, typeof (string), typeof (string));
Gtk.TreeIter iter;
@@ -414,7 +430,7 @@ public class UserInterface
{
string e;
file_type_store.get (iter, 1, out e, -1);
- if (extension == e)
+ if (default_extension == e)
file_type_view.get_selection ().select_iter (iter);
} while (file_type_store.iter_next (ref iter));
}
@@ -426,7 +442,19 @@ public class UserInterface
string? uri = null;
if (response == Gtk.ResponseType.ACCEPT)
- uri = save_dialog.get_uri ();
+ {
+ var selection = file_type_view.get_selection ();
+ var extension = get_selected_extension (selection);
+
+ var path = save_dialog.get_filename ();
+ var filename = Path.get_basename (path);
+
+ var extension_index = filename.last_index_of_char ('.');
+ if (extension_index < 0)
+ path += extension;
+
+ uri = File.new_for_path (path).get_uri ();
+ }
settings.set_string ("save-directory", save_dialog.get_current_folder ());
@@ -465,7 +493,7 @@ public class UserInterface
show_progress_dialog ();
try
{
- book.save (format, file);
+ book.save (format, get_quality (), file);
}
catch (Error e)
{
@@ -525,6 +553,7 @@ public class UserInterface
book_uri = null;
book.set_needs_saving (false);
save_as_menuitem.set_sensitive (false);
+ copy_to_clipboard_menuitem.set_sensitive (false);
}
[CCode (cname = "G_MODULE_EXPORT new_button_clicked_cb", instance_pos = -1)]
@@ -610,6 +639,21 @@ public class UserInterface
if (have_iter)
paper_size_combo.set_active_iter (iter);
}
+
+ private void set_brightness (int brightness)
+ {
+ brightness_adjustment.set_value (brightness);
+ }
+
+ private void set_contrast (int contrast)
+ {
+ contrast_adjustment.set_value (contrast);
+ }
+
+ private void set_quality (int quality)
+ {
+ quality_adjustment.set_value (quality);
+ }
private int get_text_dpi ()
{
@@ -658,6 +702,21 @@ public class UserInterface
return false;
}
+ private int get_brightness ()
+ {
+ return (int) brightness_adjustment.get_value ();
+ }
+
+ private int get_contrast ()
+ {
+ return (int) contrast_adjustment.get_value ();
+ }
+
+ private int get_quality ()
+ {
+ return (int) quality_adjustment.get_value ();
+ }
+
private ScanOptions get_scan_options ()
{
var options = new ScanOptions ();
@@ -674,6 +733,8 @@ public class UserInterface
options.depth = 8;
}
get_paper_size (out options.paper_width, out options.paper_height);
+ options.brightness = get_brightness ();
+ options.contrast = get_contrast ();
return options;
}
@@ -791,7 +852,7 @@ public class UserInterface
try
{
- page.save ("tiff", file);
+ page.save ("tiff", get_quality (), file);
}
catch (Error e)
{
@@ -981,6 +1042,14 @@ public class UserInterface
save_document (false);
}
+ [CCode (cname = "G_MODULE_EXPORT copy_to_clipboard_button_clicked_cb", instance_pos = -1)]
+ public void copy_to_clipboard_button_clicked_cb (Gtk.Widget widget)
+ {
+ var page = book_view.get_selected ();
+ if (page != null)
+ page.copy_to_clipboard (window);
+ }
+
[CCode (cname = "G_MODULE_EXPORT save_as_file_button_clicked_cb", instance_pos = -1)]
public void save_as_file_button_clicked_cb (Gtk.Widget widget)
{
@@ -1015,7 +1084,7 @@ public class UserInterface
[CCode (cname = "G_MODULE_EXPORT email_button_clicked_cb", instance_pos = -1)]
public void email_button_clicked_cb (Gtk.Widget widget)
{
- email (document_hint);
+ email (document_hint, get_quality ());
}
[CCode (cname = "G_MODULE_EXPORT print_button_clicked_cb", instance_pos = -1)]
@@ -1069,7 +1138,7 @@ public class UserInterface
Gtk.show_about_dialog (window,
"title", title,
"program-name", "Simple Scan",
- "version", Config.VERSION,
+ "version", VERSION,
"comments", description,
"logo-icon-name", "scanner",
"authors", authors,
@@ -1101,6 +1170,9 @@ public class UserInterface
settings.set_enum ("page-side", get_page_side ());
settings.set_int ("paper-width", paper_width);
settings.set_int ("paper-height", paper_height);
+ settings.set_int ("brightness", get_brightness ());
+ settings.set_int ("contrast", get_contrast ());
+ settings.set_int ("jpeg-quality", get_quality ());
settings.set_int ("window-width", window_width);
settings.set_int ("window-height", window_height);
settings.set_boolean ("window-is-maximized", window_is_maximized);
@@ -1111,6 +1183,9 @@ public class UserInterface
window.destroy ();
+ if (autosave_manager != null)
+ autosave_manager.cleanup ();
+
return true;
}
@@ -1237,23 +1312,23 @@ public class UserInterface
save_toolbutton.set_sensitive (book.get_needs_saving ());
if (book.get_needs_saving ())
save_as_menuitem.set_sensitive (true);
+ copy_to_clipboard_menuitem.set_sensitive (true);
}
private void load ()
{
- Gtk.IconTheme.get_default ().append_search_path (Config.ICON_DIR);
+ Gtk.IconTheme.get_default ().append_search_path (ICON_DIR);
Gtk.Window.set_default_icon_name ("scanner");
builder = new Gtk.Builder ();
- var filename = Path.build_filename (Config.UI_DIR, "simple-scan.ui", null);
try
{
- builder.add_from_file (filename);
+ builder.add_from_resource ("/org/gnome/SimpleScan/simple-scan.ui");
}
catch (Error e)
{
- critical ("Unable to load UI %s: %s\n", filename, e.message);
+ critical ("Unable to load UI: %s\n", e.message);
show_error_dialog (/* Title of dialog when cannot load required files */
_("Files missing"),
/* Description in dialog when cannot load required files */
@@ -1272,6 +1347,7 @@ public class UserInterface
crop_rotate_menuitem = (Gtk.MenuItem) builder.get_object ("crop_rotate_menuitem");
save_menuitem = (Gtk.MenuItem) builder.get_object ("save_menuitem");
save_as_menuitem = (Gtk.MenuItem) builder.get_object ("save_as_menuitem");
+ copy_to_clipboard_menuitem = (Gtk.MenuItem) builder.get_object ("copy_to_clipboard_menuitem");
save_toolbutton = (Gtk.ToolButton) builder.get_object ("save_toolbutton");
stop_menuitem = (Gtk.MenuItem) builder.get_object ("stop_scan_menuitem");
stop_toolbutton = (Gtk.ToolButton) builder.get_object ("stop_toolbutton");
@@ -1297,6 +1373,12 @@ public class UserInterface
page_side_model = (Gtk.ListStore) page_side_combo.get_model ();
paper_size_combo = (Gtk.ComboBox) builder.get_object ("paper_size_combo");
paper_size_model = (Gtk.ListStore) paper_size_combo.get_model ();
+ brightness_scale = (Gtk.Scale) builder.get_object ("brightness_scale");
+ brightness_adjustment = (Gtk.Adjustment) brightness_scale.get_adjustment ();
+ contrast_scale = (Gtk.Scale) builder.get_object ("contrast_scale");
+ contrast_adjustment = (Gtk.Adjustment) contrast_scale.get_adjustment ();
+ quality_scale = (Gtk.Scale) builder.get_object ("quality_scale");
+ quality_adjustment = (Gtk.Adjustment) quality_scale.get_adjustment ();
/* Add InfoBar (not supported in Glade) */
info_bar = new Gtk.InfoBar ();
@@ -1363,6 +1445,33 @@ public class UserInterface
var paper_height = settings.get_int ("paper-height");
set_paper_size (paper_width, paper_height);
+ var lower = brightness_adjustment.get_lower ();
+ var darker_label = "<small>%s</small>".printf (_("Darker"));
+ var upper = brightness_adjustment.get_upper ();
+ var lighter_label = "<small>%s</small>".printf (_("Lighter"));
+ brightness_scale.add_mark (lower, Gtk.PositionType.BOTTOM, darker_label);
+ brightness_scale.add_mark (0, Gtk.PositionType.BOTTOM, null);
+ brightness_scale.add_mark (upper, Gtk.PositionType.BOTTOM, lighter_label);
+ set_brightness (settings.get_int ("brightness"));
+
+ lower = contrast_adjustment.get_lower ();
+ var less_label = "<small>%s</small>".printf (_("Less"));
+ upper = contrast_adjustment.get_upper ();
+ var more_label = "<small>%s</small>".printf (_("More"));
+ contrast_scale.add_mark (lower, Gtk.PositionType.BOTTOM, less_label);
+ contrast_scale.add_mark (0, Gtk.PositionType.BOTTOM, null);
+ contrast_scale.add_mark (upper, Gtk.PositionType.BOTTOM, more_label);
+ set_contrast (settings.get_int ("contrast"));
+
+ lower = quality_adjustment.get_lower ();
+ var minimum_label = "<small>%s</small>".printf (_("Minimum"));
+ upper = quality_adjustment.get_upper ();
+ var maximum_label = "<small>%s</small>".printf (_("Maximum"));
+ quality_scale.add_mark (lower, Gtk.PositionType.BOTTOM, minimum_label);
+ quality_scale.add_mark (75, Gtk.PositionType.BOTTOM, null);
+ quality_scale.add_mark (upper, Gtk.PositionType.BOTTOM, maximum_label);
+ set_quality (settings.get_int ("jpeg-quality"));
+
var device = settings.get_string ("selected-device");
if (device != null)
{