diff options
Diffstat (limited to 'src/gui/preferencesWindow.vala')
-rw-r--r-- | src/gui/preferencesWindow.vala | 231 |
1 files changed, 111 insertions, 120 deletions
diff --git a/src/gui/preferencesWindow.vala b/src/gui/preferencesWindow.vala index 3055bc5..8cdc853 100644 --- a/src/gui/preferencesWindow.vala +++ b/src/gui/preferencesWindow.vala @@ -1,4 +1,4 @@ -/* +/* Copyright (c) 2011 by Simon Schneegans This program is free software: you can redistribute it and/or modify it @@ -12,164 +12,155 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program. If not, see <http://www.gnu.org/licenses/>. +this program. If not, see <http://www.gnu.org/licenses/>. */ namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// The settings menu of Gnome-Pie. ///////////////////////////////////////////////////////////////////////// public class PreferencesWindow : GLib.Object { - + ///////////////////////////////////////////////////////////////////// /// The ID of the currently selected Pie. ///////////////////////////////////////////////////////////////////// - + private string selected_id = ""; - + ///////////////////////////////////////////////////////////////////// /// Some Gtk widgets used by this window. ///////////////////////////////////////////////////////////////////// - + private Gtk.Window? window = null; private Gtk.Label? id_label = null; private Gtk.Label? name_label = null; private Gtk.Label? hotkey_label = null; private Gtk.Label? no_pie_label = null; private Gtk.Label? no_slice_label = null; - private Gtk.VBox? preview_box = null; + private Gtk.Box? preview_box = null; private Gtk.Image? icon = null; private Gtk.EventBox? preview_background = null; private Gtk.Button? icon_button = null; private Gtk.Button? name_button = null; private Gtk.Button? hotkey_button = null; private Gtk.ToolButton? remove_pie_button = null; - + ///////////////////////////////////////////////////////////////////// /// Some custom widgets and dialogs used by this window. ///////////////////////////////////////////////////////////////////// - + private PiePreview? preview = null; private PieList? pie_list = null; private SettingsWindow? settings_window = null; private TriggerSelectWindow? trigger_window = null; private IconSelectWindow? icon_window = null; private RenameWindow? rename_window = null; - + ///////////////////////////////////////////////////////////////////// /// C'tor, creates the window. ///////////////////////////////////////////////////////////////////// - + public PreferencesWindow() { - try { - var builder = new Gtk.Builder(); - - builder.add_from_file (Paths.ui_files + "/preferences.ui"); - - this.window = builder.get_object("window") as Gtk.Window; - - this.window.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | - Gdk.EventMask.KEY_RELEASE_MASK | - Gdk.EventMask.KEY_PRESS_MASK | - Gdk.EventMask.POINTER_MOTION_MASK); - - #if HAVE_GTK_3 - var toolbar = builder.get_object ("toolbar") as Gtk.Widget; - toolbar.get_style_context().add_class("primary-toolbar"); - - var inline_toolbar = builder.get_object ("pies-toolbar") as Gtk.Widget; - inline_toolbar.get_style_context().add_class("inline-toolbar"); - #endif - - this.pie_list = new PieList(); - this.pie_list.on_select.connect(this.on_pie_select); - - var scroll_area = builder.get_object("pies-scrolledwindow") as Gtk.ScrolledWindow; - scroll_area.add(this.pie_list); - - this.preview = new PiePreview(); - this.preview.on_first_slice_added.connect(() => { - this.no_slice_label.hide(); - }); - - this.preview.on_last_slice_removed.connect(() => { - this.no_slice_label.show(); - }); - - preview_box = builder.get_object("preview-box") as Gtk.VBox; - this.preview_box.pack_start(preview, true, true); - - this.id_label = builder.get_object("id-label") as Gtk.Label; - this.name_label = builder.get_object("pie-name-label") as Gtk.Label; - this.hotkey_label = builder.get_object("hotkey-label") as Gtk.Label; - this.no_pie_label = builder.get_object("no-pie-label") as Gtk.Label; - this.no_slice_label = builder.get_object("no-slice-label") as Gtk.Label; - this.icon = builder.get_object("icon") as Gtk.Image; - this.preview_background = builder.get_object("preview-background") as Gtk.EventBox; - - (builder.get_object("settings-button") as Gtk.ToolButton).clicked.connect(on_settings_button_clicked); - - this.hotkey_button = builder.get_object("key-button") as Gtk.Button; - this.hotkey_button.clicked.connect(on_key_button_clicked); - - this.icon_button = builder.get_object("icon-button") as Gtk.Button; - this.icon_button.clicked.connect(on_icon_button_clicked); - - this.name_button = builder.get_object("rename-button") as Gtk.Button; - this.name_button.clicked.connect(on_rename_button_clicked); - - this.remove_pie_button = builder.get_object("remove-pie-button") as Gtk.ToolButton; - this.remove_pie_button.clicked.connect(on_remove_pie_button_clicked); - - (builder.get_object("add-pie-button") as Gtk.ToolButton).clicked.connect(on_add_pie_button_clicked); - - this.window.hide.connect(() => { - // save settings on close - Config.global.save(); - Pies.save(); - - Timeout.add(100, () => { - IconSelectWindow.clear_icons(); - return false; - }); + var builder = new Gtk.Builder.from_file(Paths.ui_files + "/preferences.ui"); + + this.window = builder.get_object("window") as Gtk.Window; + this.window.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK | + Gdk.EventMask.KEY_RELEASE_MASK | + Gdk.EventMask.KEY_PRESS_MASK | + Gdk.EventMask.POINTER_MOTION_MASK); + + var toolbar = builder.get_object ("toolbar") as Gtk.Widget; + toolbar.get_style_context().add_class("primary-toolbar"); + + var inline_toolbar = builder.get_object ("pies-toolbar") as Gtk.Widget; + inline_toolbar.get_style_context().add_class("inline-toolbar"); + + this.pie_list = new PieList(); + this.pie_list.on_select.connect(this.on_pie_select); + + var scroll_area = builder.get_object("pies-scrolledwindow") as Gtk.ScrolledWindow; + scroll_area.add(this.pie_list); + + this.preview = new PiePreview(); + this.preview.on_first_slice_added.connect(() => { + this.no_slice_label.hide(); + }); + + this.preview.on_last_slice_removed.connect(() => { + this.no_slice_label.show(); + }); + + preview_box = builder.get_object("preview-box") as Gtk.Box; + this.preview_box.pack_start(preview, true, true); + this.id_label = builder.get_object("id-label") as Gtk.Label; + this.name_label = builder.get_object("pie-name-label") as Gtk.Label; + this.hotkey_label = builder.get_object("hotkey-label") as Gtk.Label; + this.no_pie_label = builder.get_object("no-pie-label") as Gtk.Label; + this.no_slice_label = builder.get_object("no-slice-label") as Gtk.Label; + this.icon = builder.get_object("icon") as Gtk.Image; + this.preview_background = builder.get_object("preview-background") as Gtk.EventBox; + + (builder.get_object("settings-button") as Gtk.ToolButton).clicked.connect(on_settings_button_clicked); + + this.hotkey_button = builder.get_object("key-button") as Gtk.Button; + this.hotkey_button.clicked.connect(on_key_button_clicked); + + this.icon_button = builder.get_object("icon-button") as Gtk.Button; + this.icon_button.clicked.connect(on_icon_button_clicked); + + this.name_button = builder.get_object("rename-button") as Gtk.Button; + this.name_button.clicked.connect(on_rename_button_clicked); + + this.remove_pie_button = builder.get_object("remove-pie-button") as Gtk.ToolButton; + this.remove_pie_button.clicked.connect(on_remove_pie_button_clicked); + + (builder.get_object("add-pie-button") as Gtk.ToolButton).clicked.connect(on_add_pie_button_clicked); + + this.window.hide.connect(() => { + // save settings on close + Config.global.save(); + Pies.save(); + + Timeout.add(100, () => { + IconSelectWindow.clear_icons(); + return false; }); - - this.window.delete_event.connect(this.window.hide_on_delete); - - } catch (GLib.Error e) { - error("Could not load UI: %s\n", e.message); - } + }); + + this.window.delete_event.connect(this.window.hide_on_delete); } - + ///////////////////////////////////////////////////////////////////// /// Shows the window. ///////////////////////////////////////////////////////////////////// - + public void show() { this.preview.draw_loop(); this.window.show_all(); this.pie_list.select_first(); - this.preview_background.modify_bg(Gtk.StateType.NORMAL, Gtk.rc_get_style(this.window).light[0]); + + var style = this.preview_background.get_style_context(); + this.preview_background.override_background_color(Gtk.StateFlags.NORMAL, style.get_background_color(Gtk.StateFlags.NORMAL)); } - + ///////////////////////////////////////////////////////////////////// /// Called when a new Pie is selected in the PieList. ///////////////////////////////////////////////////////////////////// - + private void on_pie_select(string id) { selected_id = id; - + this.no_slice_label.hide(); this.no_pie_label.hide(); this.preview_box.hide(); - + this.name_button.sensitive = false; this.hotkey_button.sensitive = false; this.icon_button.sensitive = false; this.remove_pie_button.sensitive = false; - + if (id == "") { this.id_label.label = ""; this.name_label.label = _("No Pie selected."); @@ -182,51 +173,51 @@ public class PreferencesWindow : GLib.Object { this.id_label.label = ("ID: %s").printf(pie.id); this.name_label.label = PieManager.get_name_of(pie.id); this.hotkey_label.set_markup(PieManager.get_accelerator_label_of(pie.id)); - + if (pie.icon.contains("/")) try { - this.icon.pixbuf = new Gdk.Pixbuf.from_file_at_scale(pie.icon, + this.icon.pixbuf = new Gdk.Pixbuf.from_file_at_scale(pie.icon, this.icon.get_pixel_size(), this.icon.get_pixel_size(), true); } catch (GLib.Error error) { warning(error.message); } else this.icon.icon_name = pie.icon; - + this.preview.set_pie(id); this.preview_box.show(); - + if (pie.action_groups.size == 0) { this.no_slice_label.show(); } - + this.name_button.sensitive = true; this.hotkey_button.sensitive = true; this.icon_button.sensitive = true; this.remove_pie_button.sensitive = true; } } - + ///////////////////////////////////////////////////////////////////// /// Called when the add Pie button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_add_pie_button_clicked(Gtk.ToolButton button) { var new_pie = PieManager.create_persistent_pie(_("New Pie"), "stock_unknown", null); this.pie_list.reload_all(); this.pie_list.select(new_pie.id); } - + ///////////////////////////////////////////////////////////////////// /// Called when the remove Pie button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_remove_pie_button_clicked(Gtk.ToolButton button) { if (this.selected_id != "") { var dialog = new Gtk.MessageDialog((Gtk.Window)this.window.get_toplevel(), Gtk.DialogFlags.MODAL, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, _("Do you really want to delete the selected Pie with all contained Slices?")); - + dialog.response.connect((response) => { if (response == Gtk.ResponseType.YES) { PieManager.remove_pie(selected_id); @@ -234,16 +225,16 @@ public class PreferencesWindow : GLib.Object { this.pie_list.select_first(); } }); - + dialog.run(); dialog.destroy(); } } - + ///////////////////////////////////////////////////////////////////// /// Called when rename Pie button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_rename_button_clicked(Gtk.Button button) { if (this.rename_window == null) { this.rename_window = new RenameWindow(); @@ -256,15 +247,15 @@ public class PreferencesWindow : GLib.Object { this.pie_list.reload_all(); }); } - + this.rename_window.set_pie(selected_id); this.rename_window.show(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the hotkey button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_key_button_clicked(Gtk.Button button) { if (this.trigger_window == null) { this.trigger_window = new TriggerSelectWindow(); @@ -274,28 +265,28 @@ public class PreferencesWindow : GLib.Object { this.hotkey_label.set_markup(trigger.label_with_specials); }); } - + this.trigger_window.set_pie(selected_id); this.trigger_window.show(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the general settings button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_settings_button_clicked(Gtk.ToolButton button) { if (this.settings_window == null) { this.settings_window = new SettingsWindow(); this.settings_window.set_parent(this.window.get_toplevel() as Gtk.Window); } - + this.settings_window.show(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the icon button is clicked. ///////////////////////////////////////////////////////////////////// - + private void on_icon_button_clicked(Gtk.Button button) { if (this.icon_window == null) { this.icon_window = new IconSelectWindow(this.window); @@ -306,7 +297,7 @@ public class PreferencesWindow : GLib.Object { this.pie_list.reload_all(); }); } - + this.icon_window.show(); this.icon_window.set_icon(PieManager.all_pies[selected_id].icon); } |