From 84a27086bbd9f493128b354300f9c77ccb32a56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sat, 18 Apr 2015 15:42:59 +0200 Subject: Imported Upstream version 0.6.0 --- src/gui/aboutWindow.vala | 72 ++++++++-------- src/gui/iconSelectWindow.vala | 32 +++---- src/gui/indicator.vala | 32 +++---- src/gui/newSliceWindow.vala | 32 +++---- src/gui/newsWindow.vala | 32 +++---- src/gui/pieComboList.vala | 92 ++++++++++---------- src/gui/pieList.vala | 144 +++++++++++++++---------------- src/gui/piePreview.vala | 32 +++---- src/gui/piePreviewAddSign.vala | 140 +++++++++++++++---------------- src/gui/piePreviewCenter.vala | 32 +++---- src/gui/piePreviewDeleteSign.vala | 110 ++++++++++++------------ src/gui/piePreviewRenderer.vala | 32 +++---- src/gui/piePreviewSliceRenderer.vala | 158 +++++++++++++++++------------------ src/gui/preferencesWindow.vala | 32 +++---- src/gui/renameWindow.vala | 78 ++++++++--------- src/gui/settingsWindow.vala | 42 ++++++---- src/gui/sliceTypeList.vala | 106 +++++++++++------------ src/gui/themeList.vala | 68 +++++++-------- src/gui/triggerSelectButton.vala | 97 ++++++++++----------- src/gui/triggerSelectWindow.vala | 98 +++++++++++++++++----- 20 files changed, 766 insertions(+), 695 deletions(-) (limited to 'src/gui') diff --git a/src/gui/aboutWindow.vala b/src/gui/aboutWindow.vala index 39258cb..cf1ce8a 100644 --- a/src/gui/aboutWindow.vala +++ b/src/gui/aboutWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { @@ -29,38 +29,40 @@ public class AboutWindow: Gtk.AboutDialog { ///////////////////////////////////////////////////////////////////// public AboutWindow () { - string[] devs = { - "Simon Schneegans ", + string[] devs = { + "Simon Schneegans ", + "Gabriel Dubatti ", "Francesco Piccinno " }; string[] artists = { - "Simon Schneegans " + "Simon Schneegans " }; - string[] translators = { - "Simon Schneegans (DE, EN)", - "Riccardo Traverso (IT)", - "Magnun Leno (PT-BR)", - "Kim Boram (KO)", + string[] translators = { + "Simon Schneegans (DE, EN)", + "Riccardo Traverso (IT)", + "Magnun Leno (PT-BR)", + "Kim Boram (KO)", "Eduardo Anabalon (ES)", + "Gabriel Dubatti (ES)", "Grégoire Bellon-Gervais (FR)", "Alex Maxime (FR)", "Eugene Roskin (RU)", "Ting Zhou (ZH-CN)", "Martin Dinov (BG)" - }; + }; - // sort translators - GLib.List translator_list = new GLib.List(); - foreach (var translator in translators) - translator_list.append(translator); + // sort translators + GLib.List translator_list = new GLib.List(); + foreach (var translator in translators) + translator_list.append(translator); - translator_list.sort((a, b) => { - return a.ascii_casecmp(b); - }); + translator_list.sort((a, b) => { + return a.ascii_casecmp(b); + }); - string translator_string = ""; - foreach (var translator in translator_list) - translator_string += translator + "\n"; + string translator_string = ""; + foreach (var translator in translator_list) + translator_string += translator + "\n"; GLib.Object ( artists : artists, diff --git a/src/gui/iconSelectWindow.vala b/src/gui/iconSelectWindow.vala index 2560811..ce610ea 100644 --- a/src/gui/iconSelectWindow.vala +++ b/src/gui/iconSelectWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/indicator.vala b/src/gui/indicator.vala index 1277fb8..b46ee59 100644 --- a/src/gui/indicator.vala +++ b/src/gui/indicator.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/newSliceWindow.vala b/src/gui/newSliceWindow.vala index 92c7701..a17c819 100644 --- a/src/gui/newSliceWindow.vala +++ b/src/gui/newSliceWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/newsWindow.vala b/src/gui/newsWindow.vala index 373135f..cc1a77d 100644 --- a/src/gui/newsWindow.vala +++ b/src/gui/newsWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/pieComboList.vala b/src/gui/pieComboList.vala index 3be3bff..f0fd22f 100644 --- a/src/gui/pieComboList.vala +++ b/src/gui/pieComboList.vala @@ -1,23 +1,23 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A drop-down list, containing one entry for each existing Pie. ///////////////////////////////////////////////////////////////////////// @@ -26,19 +26,19 @@ class PieComboList : Gtk.ComboBox { ///////////////////////////////////////////////////////////////////// /// This signal gets emitted when the user selects a new Pie. ///////////////////////////////////////////////////////////////////// - + public signal void on_select(string id); - + ///////////////////////////////////////////////////////////////////// /// The currently selected row. ///////////////////////////////////////////////////////////////////// - + public string current_id { get; private set; default=""; } - + ///////////////////////////////////////////////////////////////////// /// Stores the data internally. ///////////////////////////////////////////////////////////////////// - + private Gtk.ListStore data; private enum DataPos {ICON, NAME, ID} @@ -48,25 +48,25 @@ class PieComboList : Gtk.ComboBox { public PieComboList() { GLib.Object(); - - this.data = new Gtk.ListStore(3, typeof(Gdk.Pixbuf), + + this.data = new Gtk.ListStore(3, typeof(Gdk.Pixbuf), typeof(string), typeof(string)); - + this.data.set_sort_column_id(1, Gtk.SortType.ASCENDING); - + base.set_model(this.data); - + var icon_render = new Gtk.CellRendererPixbuf(); icon_render.xpad = 4; this.pack_start(icon_render, false); - + var name_render = new Gtk.CellRendererText(); this.pack_start(name_render, true); - + this.add_attribute(icon_render, "pixbuf", DataPos.ICON); this.add_attribute(name_render, "text", DataPos.NAME); - + this.changed.connect(() => { Gtk.TreeIter active; if (this.get_active_iter(out active)) { @@ -76,36 +76,36 @@ class PieComboList : Gtk.ComboBox { this.current_id = id; } }); - + reload(); } - + ///////////////////////////////////////////////////////////////////// /// Loads all existing Pies to the list. ///////////////////////////////////////////////////////////////////// - + public void reload() { Gtk.TreeIter active; string id = ""; if (this.get_active_iter(out active)) this.data.get(active, DataPos.ID, out id); - + data.clear(); foreach (var pie in PieManager.all_pies.entries) { this.load_pie(pie.value); } - + select_first(); select(id); } - + ///////////////////////////////////////////////////////////////////// /// Selects the first Pie. ///////////////////////////////////////////////////////////////////// - + public void select_first() { Gtk.TreeIter active; - + if(this.data.get_iter_first(out active) ) { this.set_active_iter(active); string id = ""; @@ -117,37 +117,37 @@ class PieComboList : Gtk.ComboBox { this.current_id = ""; } } - + ///////////////////////////////////////////////////////////////////// /// Selects the Pie with the given ID. ///////////////////////////////////////////////////////////////////// - + public void select(string id) { this.data.foreach((model, path, iter) => { string pie_id; this.data.get(iter, DataPos.ID, out pie_id); - + if (id == pie_id) { this.set_active_iter(iter); return true; } - + return false; }); } - + ///////////////////////////////////////////////////////////////////// /// Loads one given pie to the list. ///////////////////////////////////////////////////////////////////// - + private void load_pie(Pie pie) { if (pie.id.length == 3) { Gtk.TreeIter last; this.data.append(out last); var icon = new Icon(pie.icon, 24); - this.data.set(last, DataPos.ICON, icon.to_pixbuf(), + this.data.set(last, DataPos.ICON, icon.to_pixbuf(), DataPos.NAME, pie.name, - DataPos.ID, pie.id); + DataPos.ID, pie.id); } } } diff --git a/src/gui/pieList.vala b/src/gui/pieList.vala index f9fb54b..29c0a1e 100644 --- a/src/gui/pieList.vala +++ b/src/gui/pieList.vala @@ -1,23 +1,23 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A list, containing one entry for each existing Pie. ///////////////////////////////////////////////////////////////////////// @@ -26,22 +26,22 @@ class PieList : Gtk.TreeView { ///////////////////////////////////////////////////////////////////// /// This signal gets emitted when the user selects a new Pie. ///////////////////////////////////////////////////////////////////// - + public signal void on_select(string id); - + ///////////////////////////////////////////////////////////////////// /// Stores the data internally. ///////////////////////////////////////////////////////////////////// - + private Gtk.ListStore data; private enum DataPos {ICON, ICON_NAME, NAME, ID} - + ///////////////////////////////////////////////////////////////////// /// Stores where a drag startet. ///////////////////////////////////////////////////////////////////// - + private Gtk.TreeIter? drag_start = null; - + ///////////////////////////////////////////////////////////////////// /// Rembers the time when a last drag move event was reported. Used /// to avoid frequent changes of selected Pie when a Pie is dragged @@ -49,45 +49,45 @@ class PieList : Gtk.TreeView { ///////////////////////////////////////////////////////////////////// private uint last_hover = 0; - + ///////////////////////////////////////////////////////////////////// /// C'tor, constructs the Widget. ///////////////////////////////////////////////////////////////////// public PieList() { GLib.Object(); - - this.data = new Gtk.ListStore(4, typeof(Gdk.Pixbuf), + + this.data = new Gtk.ListStore(4, typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string)); - + this.data.set_sort_column_id(DataPos.NAME, Gtk.SortType.ASCENDING); - + this.set_model(this.data); this.set_headers_visible(false); this.set_grid_lines(Gtk.TreeViewGridLines.NONE); this.width_request = 170; this.set_enable_search(false); - + this.set_events(Gdk.EventMask.POINTER_MOTION_MASK); - + var main_column = new Gtk.TreeViewColumn(); var icon_render = new Gtk.CellRendererPixbuf(); icon_render.xpad = 4; icon_render.ypad = 4; main_column.pack_start(icon_render, false); - + var name_render = new Gtk.CellRendererText(); name_render.ellipsize = Pango.EllipsizeMode.END; name_render.ellipsize_set = true; main_column.pack_start(name_render, true); - + base.append_column(main_column); - + main_column.add_attribute(icon_render, "pixbuf", DataPos.ICON); main_column.add_attribute(name_render, "text", DataPos.NAME); - + // setup drag'n'drop Gtk.TargetEntry uri_source = {"text/uri-list", 0, 0}; Gtk.TargetEntry[] entries = { uri_source }; @@ -100,7 +100,7 @@ class PieList : Gtk.TreeView { this.drag_leave.connect(() => { this.last_hover = 0; }); - + this.get_selection().changed.connect(() => { Gtk.TreeIter active; if (this.get_selection().get_selected(null, out active)) { @@ -109,35 +109,35 @@ class PieList : Gtk.TreeView { this.on_select(id); } }); - + reload_all(); } - + ///////////////////////////////////////////////////////////////////// /// Loads all existing Pies to the list. ///////////////////////////////////////////////////////////////////// - + public void reload_all() { Gtk.TreeIter active; string id = ""; if (this.get_selection().get_selected(null, out active)) this.data.get(active, DataPos.ID, out id); - + data.clear(); foreach (var pie in PieManager.all_pies.entries) { this.load_pie(pie.value); } - + select(id); } - + ///////////////////////////////////////////////////////////////////// /// Selects the first Pie. ///////////////////////////////////////////////////////////////////// - + public void select_first() { Gtk.TreeIter active; - + if(this.data.get_iter_first(out active) ) { this.get_selection().select_iter(active); string id = ""; @@ -147,45 +147,45 @@ class PieList : Gtk.TreeView { this.on_select(""); } } - + ///////////////////////////////////////////////////////////////////// /// Selects the Pie with the given ID. ///////////////////////////////////////////////////////////////////// - + public void select(string id) { this.data.foreach((model, path, iter) => { string pie_id; this.data.get(iter, DataPos.ID, out pie_id); - + if (id == pie_id) { this.get_selection().select_iter(iter); return true; } - + return false; }); } - + ///////////////////////////////////////////////////////////////////// /// Loads one given pie to the list. ///////////////////////////////////////////////////////////////////// - + private void load_pie(Pie pie) { if (pie.id.length == 3) { Gtk.TreeIter last; this.data.append(out last); var icon = new Icon(pie.icon, 24); - this.data.set(last, DataPos.ICON, icon.to_pixbuf(), + this.data.set(last, DataPos.ICON, icon.to_pixbuf(), DataPos.ICON_NAME, pie.icon, DataPos.NAME, pie.name, - DataPos.ID, pie.id); + DataPos.ID, pie.id); } } - + ///////////////////////////////////////////////////////////////////// /// Called when a drag which started on this Widget was successfull. ///////////////////////////////////////////////////////////////////// - + private void on_dnd_source(Gdk.DragContext context, Gtk.SelectionData selection_data, uint info, uint time_) { if (this.drag_start != null) { string id = ""; @@ -193,72 +193,72 @@ class PieList : Gtk.TreeView { selection_data.set_uris({"file://" + Paths.launchers + "/" + id + ".desktop"}); } } - + ///////////////////////////////////////////////////////////////////// /// Called when a drag operation is started on this Widget. ///////////////////////////////////////////////////////////////////// - + private void on_start_drag(Gdk.DragContext ctx) { if (this.get_selection().get_selected(null, out this.drag_start)) { string icon_name = ""; this.data.get(this.drag_start, DataPos.ICON_NAME, out icon_name); - + var icon = new Icon(icon_name, 48); var pixbuf = icon.to_pixbuf(); Gtk.drag_set_icon_pixbuf(ctx, pixbuf, icon.size()/2, icon.size()/2); } } - + ///////////////////////////////////////////////////////////////////// /// Called when something is dragged over this Widget. ///////////////////////////////////////////////////////////////////// - + private bool on_drag_move(Gdk.DragContext context, int x, int y, uint time) { - + Gtk.TreeViewDropPosition position; Gtk.TreePath path; - + if (!this.get_dest_row_at_pos(x, y, out path, out position)) return false; - + if (position == Gtk.TreeViewDropPosition.BEFORE) this.set_drag_dest_row(path, Gtk.TreeViewDropPosition.INTO_OR_BEFORE); else if (position == Gtk.TreeViewDropPosition.AFTER) this.set_drag_dest_row(path, Gtk.TreeViewDropPosition.INTO_OR_AFTER); Gdk.drag_status(context, context.get_suggested_action(), time); - + // avoid too frequent selection... this.last_hover = time; - + GLib.Timeout.add(150, () => { if (this.last_hover == time) - this.get_selection().select_path(path); + this.get_selection().select_path(path); return false; }); - + return true; } - + ///////////////////////////////////////////////////////////////////// /// Called when the user finishes a drag operation on this widget. /// Only used for external drags. ///////////////////////////////////////////////////////////////////// - - private void on_dnd_received(Gdk.DragContext context, int x, int y, + + private void on_dnd_received(Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint info, uint time_) { - + Gtk.TreeIter active; if (this.get_selection().get_selected(null, out active)) { string id = ""; this.data.get(active, DataPos.ID, out id); - + var pie = PieManager.all_pies[id]; - + foreach (var uri in selection_data.get_uris()) { pie.add_action(ActionRegistry.new_for_uri(uri), 0); } - + this.on_select(id); } } diff --git a/src/gui/piePreview.vala b/src/gui/piePreview.vala index 0420d5e..ce1ba96 100644 --- a/src/gui/piePreview.vala +++ b/src/gui/piePreview.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/piePreviewAddSign.vala b/src/gui/piePreviewAddSign.vala index ee8c14b..fb5e9fa 100644 --- a/src/gui/piePreviewAddSign.vala +++ b/src/gui/piePreviewAddSign.vala @@ -1,25 +1,25 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// using GLib.Math; namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A liitle plus-sign displayed on the preview widget to indicate where /// the user may add a new Slice. ///////////////////////////////////////////////////////////////////////// @@ -31,57 +31,57 @@ public class PiePreviewAddSign : GLib.Object { ///////////////////////////////////////////////////////////////////// public signal void on_clicked(int position); - + ///////////////////////////////////////////////////////////////////// /// The image used to display this oject. ///////////////////////////////////////////////////////////////////// - + public Image icon { get; private set; } - + ///////////////////////////////////////////////////////////////////// /// True, when the add sign is currently visible. ///////////////////////////////////////////////////////////////////// - + public bool visible { get; private set; default=false; } - + ///////////////////////////////////////////////////////////////////// /// The position of the sign in its parent Pie. May be 2.5 for /// example. ///////////////////////////////////////////////////////////////////// - + private double position = 0; - + ///////////////////////////////////////////////////////////////////// /// The parent renderer. ///////////////////////////////////////////////////////////////////// - private unowned PiePreviewRenderer parent; - + private unowned PiePreviewRenderer parent; + ///////////////////////////////////////////////////////////////////// /// Some values used for displaying this sign. ///////////////////////////////////////////////////////////////////// - + private double time = 0; - private double max_size = 0; - private double angle = 0; - private AnimatedValue size; - private AnimatedValue alpha; - private AnimatedValue activity; - private AnimatedValue clicked; - + private double max_size = 0; + private double angle = 0; + private AnimatedValue size; + private AnimatedValue alpha; + private AnimatedValue activity; + private AnimatedValue clicked; + ///////////////////////////////////////////////////////////////////// /// C'tor, sets everything up. ///////////////////////////////////////////////////////////////////// public PiePreviewAddSign(PiePreviewRenderer parent) { this.parent = parent; - + this.size = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 0, 0, 0, 2.0); this.alpha = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 0, 0, 0, 0.0); this.activity = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, -3, -3, 0, 0.0); this.clicked = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 1, 1, 0, 0.0); } - + ///////////////////////////////////////////////////////////////////// /// Loads the desired icon for this sign. ///////////////////////////////////////////////////////////////////// @@ -89,41 +89,41 @@ public class PiePreviewAddSign : GLib.Object { public void load() { this.icon = new Icon("add", 36); } - + ///////////////////////////////////////////////////////////////////// /// Updates the position where this object should be displayed. ///////////////////////////////////////////////////////////////////// public void set_position(int position) { double new_position = position; - + if (!this.parent.drag_n_drop_mode) new_position += 0.5; this.position = new_position; this.angle = 2.0 * PI * new_position/parent.slice_count(); } - + ///////////////////////////////////////////////////////////////////// /// Makes this object visible. ///////////////////////////////////////////////////////////////////// - + public void show() { this.visible = true; - this.size.reset_target(this.max_size, 0.3); - this.alpha.reset_target(1.0, 0.3); + this.size.reset_target(this.max_size, 0.3); + this.alpha.reset_target(1.0, 0.3); } - + ///////////////////////////////////////////////////////////////////// /// Makes this object invisible. ///////////////////////////////////////////////////////////////////// - + public void hide() { this.visible = false; - this.size.reset_target(0.0, 0.3); - this.alpha.reset_target(0.0, 0.3); + this.size.reset_target(0.0, 0.3); + this.alpha.reset_target(0.0, 0.3); } - + ///////////////////////////////////////////////////////////////////// /// Updates the size of this object. All transitions will be smooth. ///////////////////////////////////////////////////////////////////// @@ -132,7 +132,7 @@ public class PiePreviewAddSign : GLib.Object { this.max_size = size; this.size.reset_target(size, 0.5); } - + ///////////////////////////////////////////////////////////////////// /// Draws the sign to the given context. ///////////////////////////////////////////////////////////////////// @@ -140,75 +140,75 @@ public class PiePreviewAddSign : GLib.Object { public void draw(double frame_time, Cairo.Context ctx) { this.time += frame_time; - + this.size.update(frame_time); this.alpha.update(frame_time); this.activity.update(frame_time); this.clicked.update(frame_time); - + if (this.parent.slice_count() == 0) { ctx.save(); - - double scale = this.clicked.val + + double scale = this.clicked.val + GLib.Math.sin(this.time*10)*0.02*this.alpha.val + this.alpha.val*0.08 - 0.1; ctx.scale(scale, scale); - + // paint the image icon.paint_on(ctx); - + ctx.restore(); - + } else if (this.alpha.val*this.activity.val > 0) { ctx.save(); - + // distance from the center double radius = 120; - + // transform the context ctx.translate(cos(this.angle)*radius, sin(this.angle)*radius); - double scale = this.size.val*this.clicked.val + double scale = this.size.val*this.clicked.val + this.activity.val*0.07 + GLib.Math.sin(this.time*10)*0.03*this.activity.val - 0.1; ctx.scale(scale, scale); - + // paint the image icon.paint_on(ctx, this.alpha.val*this.activity.val); - + ctx.restore(); } } - + ///////////////////////////////////////////////////////////////////// /// Called when the mouse moves to another position. ///////////////////////////////////////////////////////////////////// - + public void on_mouse_move(double angle) { double direction = 2.0 * PI * position/parent.slice_count(); double diff = fabs(angle-direction); - + if (diff > PI) - diff = 2 * PI - diff; - - if (diff < 0.5*PI/parent.slice_count()) this.activity.reset_target(1.0, 1.0); + diff = 2 * PI - diff; + + if (diff < 0.5*PI/parent.slice_count()) this.activity.reset_target(1.0, 1.0); else this.activity.reset_target(-3.0, 1.5); } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is pressed. ///////////////////////////////////////////////////////////////////// - + public void on_button_press(double x, double y) { if (this.activity.end == 1.0) { this.clicked.reset_target(0.9, 0.1); } } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is released. ///////////////////////////////////////////////////////////////////// - + public void on_button_release(double x, double y) { if (this.clicked.end == 0.9) { this.clicked.reset_target(1.0, 0.1); diff --git a/src/gui/piePreviewCenter.vala b/src/gui/piePreviewCenter.vala index 20527bc..2a163b6 100644 --- a/src/gui/piePreviewCenter.vala +++ b/src/gui/piePreviewCenter.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// using GLib.Math; diff --git a/src/gui/piePreviewDeleteSign.vala b/src/gui/piePreviewDeleteSign.vala index 500d876..6ba4dcb 100644 --- a/src/gui/piePreviewDeleteSign.vala +++ b/src/gui/piePreviewDeleteSign.vala @@ -1,25 +1,25 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// using GLib.Math; namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// The delete sign, displayed in the upper right corner of each /// Slice. ///////////////////////////////////////////////////////////////////////// @@ -31,17 +31,17 @@ public class PiePreviewDeleteSign : GLib.Object { ///////////////////////////////////////////////////////////////////// public signal void on_clicked(); - + ///////////////////////////////////////////////////////////////////// /// The image used to display this oject. ///////////////////////////////////////////////////////////////////// - + public Image icon { get; private set; } - + ///////////////////////////////////////////////////////////////////// /// Some constants determining the look and behaviour of this Slice. ///////////////////////////////////////////////////////////////////// - + private static const int radius = 18; private static const double globale_scale = 0.8; private static const double click_cancel_treshold = 5; @@ -51,24 +51,24 @@ public class PiePreviewDeleteSign : GLib.Object { ///////////////////////////////////////////////////////////////////// private bool visible = false; - + ///////////////////////////////////////////////////////////////////// /// Some AnimatedValues for smooth transitions. ///////////////////////////////////////////////////////////////////// - + private AnimatedValue size; - private AnimatedValue alpha; - private AnimatedValue activity; - private AnimatedValue clicked; - + private AnimatedValue alpha; + private AnimatedValue activity; + private AnimatedValue clicked; + ///////////////////////////////////////////////////////////////////// /// Storing the position where a mouse click was executed. Useful for /// canceling the click when the mouse moves some pixels. ///////////////////////////////////////////////////////////////////// - + private double clicked_x = 0.0; private double clicked_y = 0.0; - + ///////////////////////////////////////////////////////////////////// /// C'tor, sets everything up. ///////////////////////////////////////////////////////////////////// @@ -79,7 +79,7 @@ public class PiePreviewDeleteSign : GLib.Object { this.activity = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, -3, -3, 0, 0.0); this.clicked = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 1, 1, 0, 0.0); } - + ///////////////////////////////////////////////////////////////////// /// Loads an Action. All members are initialized accordingly. ///////////////////////////////////////////////////////////////////// @@ -87,26 +87,26 @@ public class PiePreviewDeleteSign : GLib.Object { public void load() { this.icon = new Icon("stock_delete", PiePreviewDeleteSign.radius*2); } - + ///////////////////////////////////////////////////////////////////// /// Makes this object visible. ///////////////////////////////////////////////////////////////////// - + public void show() { if (!this.visible) { this.visible = true; - this.alpha.reset_target(1.0, 0.3); + this.alpha.reset_target(1.0, 0.3); } } - + ///////////////////////////////////////////////////////////////////// /// Makes this object invisible. ///////////////////////////////////////////////////////////////////// - + public void hide() { if (this.visible) { this.visible = false; - this.alpha.reset_target(0.0, 0.3); + this.alpha.reset_target(0.0, 0.3); } } @@ -117,7 +117,7 @@ public class PiePreviewDeleteSign : GLib.Object { public void set_size(double size) { this.size.reset_target(size, 0.2); } - + ///////////////////////////////////////////////////////////////////// /// Draws the sign to the given context. ///////////////////////////////////////////////////////////////////// @@ -127,46 +127,46 @@ public class PiePreviewDeleteSign : GLib.Object { this.alpha.update(frame_time); this.activity.update(frame_time); this.clicked.update(frame_time); - + if (this.alpha.val > 0) { ctx.save(); - + // transform the context - double scale = (this.size.val*this.clicked.val + double scale = (this.size.val*this.clicked.val + this.activity.val*0.2 - 0.2)*PiePreviewDeleteSign.globale_scale; ctx.scale(scale, scale); - + // paint the image icon.paint_on(ctx, this.alpha.val); - + ctx.restore(); } } - + ///////////////////////////////////////////////////////////////////// /// Called when the mouse moves to another position. ///////////////////////////////////////////////////////////////////// - + public bool on_mouse_move(double x, double y) { if (this.clicked.end == 0.9) { double dist = GLib.Math.pow(x-this.clicked_x, 2) + GLib.Math.pow(y-this.clicked_y, 2); if (dist > PiePreviewDeleteSign.click_cancel_treshold*PiePreviewDeleteSign.click_cancel_treshold) this.clicked.reset_target(1.0, 0.1); } - - if (GLib.Math.fabs(x) <= PiePreviewDeleteSign.radius*PiePreviewDeleteSign.globale_scale && GLib.Math.fabs(y) <= PiePreviewDeleteSign.radius*PiePreviewDeleteSign.globale_scale) { - this.activity.reset_target(1.0, 0.2); - return true; - } - + + if (GLib.Math.fabs(x) <= PiePreviewDeleteSign.radius*PiePreviewDeleteSign.globale_scale && GLib.Math.fabs(y) <= PiePreviewDeleteSign.radius*PiePreviewDeleteSign.globale_scale) { + this.activity.reset_target(1.0, 0.2); + return true; + } + this.activity.reset_target(0.0, 0.2); return false; } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is pressed. ///////////////////////////////////////////////////////////////////// - + public bool on_button_press(double x, double y) { if (this.activity.end == 1.0) { this.clicked.reset_target(0.9, 0.1); @@ -176,16 +176,16 @@ public class PiePreviewDeleteSign : GLib.Object { } return false; } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is released. ///////////////////////////////////////////////////////////////////// - + public bool on_button_release(double x, double y) { if (this.clicked.end == 0.9) { this.clicked.reset_target(1.0, 0.1); this.on_clicked(); - + return true; } return false; diff --git a/src/gui/piePreviewRenderer.vala b/src/gui/piePreviewRenderer.vala index 626ab73..53dd2fb 100644 --- a/src/gui/piePreviewRenderer.vala +++ b/src/gui/piePreviewRenderer.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// using GLib.Math; diff --git a/src/gui/piePreviewSliceRenderer.vala b/src/gui/piePreviewSliceRenderer.vala index 6a12a47..5b4d939 100644 --- a/src/gui/piePreviewSliceRenderer.vala +++ b/src/gui/piePreviewSliceRenderer.vala @@ -1,25 +1,25 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// using GLib.Math; namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// Displays the preview of a Slice. ///////////////////////////////////////////////////////////////////////// @@ -30,17 +30,17 @@ public class PiePreviewSliceRenderer : GLib.Object { ///////////////////////////////////////////////////////////////////// public signal void on_clicked(int position); - + ///////////////////////////////////////////////////////////////////// /// Called when the user clicked on the delete sign. ///////////////////////////////////////////////////////////////////// - + public signal void on_remove(int position); - + ///////////////////////////////////////////////////////////////////// /// The image used to display this oject. ///////////////////////////////////////////////////////////////////// - + public Icon icon { get; private set; } public ActionGroup action_group { get; private set; } public string name { get; private set; default=""; } @@ -50,47 +50,47 @@ public class PiePreviewSliceRenderer : GLib.Object { /// The parent renderer. ///////////////////////////////////////////////////////////////////// - private unowned PiePreviewRenderer parent; - + private unowned PiePreviewRenderer parent; + ///////////////////////////////////////////////////////////////////// /// The delete sign, displayed in the upper right corner of each /// Slice. ///////////////////////////////////////////////////////////////////// - + private PiePreviewDeleteSign delete_sign = null; - + ///////////////////////////////////////////////////////////////////// /// Some AnimatedValues for smooth transitions. ///////////////////////////////////////////////////////////////////// - - private AnimatedValue angle; - private AnimatedValue size; - private AnimatedValue activity; - private AnimatedValue clicked; - + + private AnimatedValue angle; + private AnimatedValue size; + private AnimatedValue activity; + private AnimatedValue clicked; + ///////////////////////////////////////////////////////////////////// /// Some constants determining the look and behaviour of this Slice. ///////////////////////////////////////////////////////////////////// - + private static const double pie_radius = 126; private static const double radius = 24; private static const double delete_x = 13; private static const double delete_y = -13; private static const double click_cancel_treshold = 5; - + ///////////////////////////////////////////////////////////////////// /// Storing the position where a mouse click was executed. Useful for /// canceling the click when the mouse moves some pixels. ///////////////////////////////////////////////////////////////////// - + private double clicked_x = 0.0; private double clicked_y = 0.0; - + ///////////////////////////////////////////////////////////////////// /// The index of this slice in a pie. Clockwise assigned, starting /// from the right-most slice. ///////////////////////////////////////////////////////////////////// - + private int position; ///////////////////////////////////////////////////////////////////// @@ -103,21 +103,21 @@ public class PiePreviewSliceRenderer : GLib.Object { this.delete_sign.on_clicked.connect(() => { this.on_remove(this.position); }); - + this.parent = parent; this.angle = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 0, 0, 0, 0.5); this.size = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 0, 0, 0, 1.0); this.activity = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 0, 0, 0, 0.0); this.clicked = new AnimatedValue.cubic(AnimatedValue.Direction.OUT, 1, 1, 0, 1.0); } - + ///////////////////////////////////////////////////////////////////// /// Loads an Action. All members are initialized accordingly. ///////////////////////////////////////////////////////////////////// public void load(ActionGroup group) { this.action_group = group; - + // if it's a custom ActionGroup if (group.get_type().depth() == 2 && group.actions.size > 0) { this.icon = new Icon(group.actions[0].icon, (int)(PiePreviewSliceRenderer.radius*2)); @@ -127,23 +127,23 @@ public class PiePreviewSliceRenderer : GLib.Object { this.name = GroupRegistry.descriptions[group.get_type().name()].name; } } - + ///////////////////////////////////////////////////////////////////// /// Updates the position where this object should be displayed. ///////////////////////////////////////////////////////////////////// public void set_position(int position, bool smoothly = true) { double direction = 2.0 * PI * position/parent.slice_count(); - + if (direction != this.angle.end) { this.position = position; this.angle.reset_target(direction, smoothly ? 0.5 : 0.0); - + if (!smoothly) this.angle.update(1.0); } } - + ///////////////////////////////////////////////////////////////////// /// Updates the size of this object. All transitions will be smooth. ///////////////////////////////////////////////////////////////////// @@ -152,15 +152,15 @@ public class PiePreviewSliceRenderer : GLib.Object { this.size.reset_target(size, 0.5); this.delete_sign.set_size(size); } - + ///////////////////////////////////////////////////////////////////// /// Notifies that all quick actions should be disabled. ///////////////////////////////////////////////////////////////////// - + public void disable_quickactions() { this.action_group.disable_quickactions(); } - + ///////////////////////////////////////////////////////////////////// /// Draws the slice to the given context. ///////////////////////////////////////////////////////////////////// @@ -172,100 +172,100 @@ public class PiePreviewSliceRenderer : GLib.Object { this.clicked.update(frame_time); ctx.save(); - + // transform the context ctx.translate(cos(this.angle.val)*PiePreviewSliceRenderer.pie_radius, sin(this.angle.val)*PiePreviewSliceRenderer.pie_radius); - - double scale = this.size.val*this.clicked.val + + double scale = this.size.val*this.clicked.val + this.activity.val*0.1 - 0.1; - ctx.save(); - + ctx.save(); + ctx.scale(scale, scale); - + // paint the image icon.paint_on(ctx); - + ctx.restore(); - + ctx.translate(PiePreviewSliceRenderer.delete_x*this.size.val, PiePreviewSliceRenderer.delete_y*this.size.val); this.delete_sign.draw(frame_time, ctx); - + ctx.restore(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the mouse moves to another position. ///////////////////////////////////////////////////////////////////// - + public bool on_mouse_move(double angle, double x, double y) { double direction = 2.0 * PI * position/parent.slice_count(); double diff = fabs(angle-direction); - + if (diff > PI) - diff = 2 * PI - diff; - - bool active = diff < 0.5*PI/parent.slice_count(); - - if (active) { - this.activity.reset_target(1.0, 0.3); - this.delete_sign.show(); + diff = 2 * PI - diff; + + bool active = diff < 0.5*PI/parent.slice_count(); + + if (active) { + this.activity.reset_target(1.0, 0.3); + this.delete_sign.show(); } else { this.activity.reset_target(0.0, 0.3); this.delete_sign.hide(); - } - + } + if (this.clicked.end == 0.9) { double dist = GLib.Math.pow(x-this.clicked_x, 2) + GLib.Math.pow(y-this.clicked_y, 2); if (dist > PiePreviewSliceRenderer.click_cancel_treshold*PiePreviewSliceRenderer.click_cancel_treshold) this.clicked.reset_target(1.0, 0.1); } - + double own_x = cos(this.angle.val)*PiePreviewSliceRenderer.pie_radius; double own_y = sin(this.angle.val)*PiePreviewSliceRenderer.pie_radius; - this.delete_hovered = this.delete_sign.on_mouse_move(x - own_x - PiePreviewSliceRenderer.delete_x*this.size.val, + this.delete_hovered = this.delete_sign.on_mouse_move(x - own_x - PiePreviewSliceRenderer.delete_x*this.size.val, y - own_y - PiePreviewSliceRenderer.delete_y*this.size.val); - + return active; } - + ///////////////////////////////////////////////////////////////////// /// Called when the mouse leaves the area of this widget. ///////////////////////////////////////////////////////////////////// - + public void on_mouse_leave() { this.activity.reset_target(0.0, 0.3); this.delete_sign.hide(); } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is pressed. ///////////////////////////////////////////////////////////////////// - + public void on_button_press(double x, double y) { bool delete_pressed = false; if (this.activity.end == 1.0) { double own_x = cos(this.angle.val)*PiePreviewSliceRenderer.pie_radius; double own_y = sin(this.angle.val)*PiePreviewSliceRenderer.pie_radius; - delete_pressed = this.delete_sign.on_button_press(x - own_x - PiePreviewSliceRenderer.delete_x*this.size.val, + delete_pressed = this.delete_sign.on_button_press(x - own_x - PiePreviewSliceRenderer.delete_x*this.size.val, y - own_y - PiePreviewSliceRenderer.delete_y*this.size.val); } - + if (!delete_pressed && this.activity.end == 1.0) { this.clicked.reset_target(0.9, 0.1); this.clicked_x = x; this.clicked_y = y; } } - + ///////////////////////////////////////////////////////////////////// /// Called when a button of the mouse is released. ///////////////////////////////////////////////////////////////////// - + public void on_button_release(double x, double y) { bool deleted = false; if (this.activity.end == 1.0) deleted = this.delete_sign.on_button_release(x, y); - + if (!deleted && this.clicked.end == 0.9) { this.clicked.reset_target(1.0, 0.1); this.on_clicked(this.position); diff --git a/src/gui/preferencesWindow.vala b/src/gui/preferencesWindow.vala index 8cdc853..29b5250 100644 --- a/src/gui/preferencesWindow.vala +++ b/src/gui/preferencesWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { diff --git a/src/gui/renameWindow.vala b/src/gui/renameWindow.vala index 389b460..de65069 100644 --- a/src/gui/renameWindow.vala +++ b/src/gui/renameWindow.vala @@ -1,106 +1,106 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A window which allows selection of a new name for a Pie. ///////////////////////////////////////////////////////////////////////// public class RenameWindow : GLib.Object { - + ///////////////////////////////////////////////////////////////////// /// Gets emitted when the user selects a new name. ///////////////////////////////////////////////////////////////////// - + public signal void on_ok(string new_name); - + ///////////////////////////////////////////////////////////////////// /// Some Widgets used by this dialog. ///////////////////////////////////////////////////////////////////// - + private Gtk.Dialog window = null; private Gtk.Entry entry = null; - + ///////////////////////////////////////////////////////////////////// /// C'tor, constructs the Widget. ///////////////////////////////////////////////////////////////////// - + public RenameWindow() { try { - + Gtk.Builder builder = new Gtk.Builder(); builder.add_from_file (Paths.ui_files + "/rename_pie.ui"); window = builder.get_object("window") as Gtk.Dialog; entry = builder.get_object("name-entry") as Gtk.Entry; - + entry.activate.connect(this.on_ok_button_clicked); - + (builder.get_object("ok-button") as Gtk.Button).clicked.connect(on_ok_button_clicked); (builder.get_object("cancel-button") as Gtk.Button).clicked.connect(on_cancel_button_clicked); - + this.window.delete_event.connect(this.window.hide_on_delete); - + } catch (GLib.Error e) { error("Could not load UI: %s\n", e.message); } } - + ///////////////////////////////////////////////////////////////////// /// Sets the parent window, in order to make this window stay in /// front. ///////////////////////////////////////////////////////////////////// - + public void set_parent(Gtk.Window parent) { this.window.set_transient_for(parent); } - + ///////////////////////////////////////////////////////////////////// /// Displays the window on the screen. ///////////////////////////////////////////////////////////////////// - + public void show() { this.window.show_all(); this.entry.is_focus = true; - } - + } + ///////////////////////////////////////////////////////////////////// /// Make the text entry display the name of the Pie with given ID. ///////////////////////////////////////////////////////////////////// - + public void set_pie(string id) { entry.text = PieManager.get_name_of(id); } - + ///////////////////////////////////////////////////////////////////// /// Called when the ok button is pressed. ///////////////////////////////////////////////////////////////////// - + private void on_ok_button_clicked() { this.on_ok(entry.text); this.window.hide(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the cancel button is pressed. ///////////////////////////////////////////////////////////////////// - + private void on_cancel_button_clicked() { this.window.hide(); } diff --git a/src/gui/settingsWindow.vala b/src/gui/settingsWindow.vala index b03ae2f..6bb10c1 100644 --- a/src/gui/settingsWindow.vala +++ b/src/gui/settingsWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { @@ -99,13 +99,21 @@ public class SettingsWindow : GLib.Object { }); var range_slider = (builder.get_object("range-hscale") as Gtk.Scale); - range_slider.set_range(100, 2000); + range_slider.set_range(0, 2000); range_slider.set_increments(10, 100); range_slider.set_value(Config.global.activation_range); range_slider.value_changed.connect(() => { Config.global.activation_range = (int)range_slider.get_value(); }); + var range_slices = (builder.get_object("range-slices") as Gtk.Scale); + range_slices.set_range(12, 96); + range_slices.set_increments(4, 12); + range_slices.set_value(Config.global.max_visible_slices); + range_slices.value_changed.connect(() => { + Config.global.max_visible_slices = (int)range_slices.get_value(); + }); + this.window.delete_event.connect(this.window.hide_on_delete); } catch (GLib.Error e) { diff --git a/src/gui/sliceTypeList.vala b/src/gui/sliceTypeList.vala index a339e5e..e164dea 100644 --- a/src/gui/sliceTypeList.vala +++ b/src/gui/sliceTypeList.vala @@ -1,23 +1,23 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A list displaying all available Action types and ActionGroup types. ///////////////////////////////////////////////////////////////////////// @@ -26,13 +26,13 @@ class SliceTypeList : Gtk.TreeView { ///////////////////////////////////////////////////////////////////// /// This signal gets emitted when the user selects a new Type. ///////////////////////////////////////////////////////////////////// - + public signal void on_select(string id, string icon_name); - + ///////////////////////////////////////////////////////////////////// /// The listore which staroes all types internally. ///////////////////////////////////////////////////////////////////// - + private Gtk.ListStore data; private enum DataPos {ICON, ICON_NAME, NAME, ID} @@ -42,33 +42,33 @@ class SliceTypeList : Gtk.TreeView { public SliceTypeList() { GLib.Object(); - - this.data = new Gtk.ListStore(4, typeof(Gdk.Pixbuf), + + this.data = new Gtk.ListStore(4, typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string)); - + this.data.set_sort_column_id(2, Gtk.SortType.ASCENDING); - + base.set_model(this.data); base.set_headers_visible(true); base.set_grid_lines(Gtk.TreeViewGridLines.NONE); this.set_fixed_height_mode(true); - + var main_column = new Gtk.TreeViewColumn(); main_column.set_sizing(Gtk.TreeViewColumnSizing.FIXED); main_column.title = _("Slice types"); var icon_render = new Gtk.CellRendererPixbuf(); main_column.pack_start(icon_render, false); - + var name_render = new Gtk.CellRendererText(); main_column.pack_start(name_render, true); - + base.append_column(main_column); - + main_column.add_attribute(icon_render, "pixbuf", DataPos.ICON); main_column.add_attribute(name_render, "markup", DataPos.NAME); - + this.get_selection().changed.connect(() => { Gtk.TreeIter active; if (this.get_selection().get_selected(null, out active)) { @@ -79,59 +79,59 @@ class SliceTypeList : Gtk.TreeView { this.on_select(id, icon); } }); - + reload_all(); } - + ///////////////////////////////////////////////////////////////////// /// Loads a registered actions and action groups. ///////////////////////////////////////////////////////////////////// - + public void reload_all() { Gtk.TreeIter active; string current_id = ""; if (this.get_selection().get_selected(null, out active)) this.data.get(active, DataPos.ID, out current_id); - + data.clear(); - + foreach (var action_type in ActionRegistry.types) { var description = ActionRegistry.descriptions[action_type]; - + Gtk.TreeIter current; data.append(out current); var icon = new Icon(description.icon, 36); - data.set(current, DataPos.ICON, icon.to_pixbuf()); - data.set(current, DataPos.ICON_NAME, description.icon); + data.set(current, DataPos.ICON, icon.to_pixbuf()); + data.set(current, DataPos.ICON_NAME, description.icon); data.set(current, DataPos.NAME, "" + GLib.Markup.escape_text(description.name) + "\n" - + "" + GLib.Markup.escape_text(description.description) + ""); - data.set(current, DataPos.ID, description.id); + + "" + GLib.Markup.escape_text(description.description) + ""); + data.set(current, DataPos.ID, description.id); } - + foreach (var group_type in GroupRegistry.types) { var description = GroupRegistry.descriptions[group_type]; - + Gtk.TreeIter current; data.append(out current); var icon = new Icon(description.icon, 36); - data.set(current, DataPos.ICON, icon.to_pixbuf()); + data.set(current, DataPos.ICON, icon.to_pixbuf()); data.set(current, DataPos.ICON_NAME, description.icon); data.set(current, DataPos.NAME, "" + GLib.Markup.escape_text(description.name) + "\n" - + "" + GLib.Markup.escape_text(description.description) + ""); - data.set(current, DataPos.ID, description.id); + + "" + GLib.Markup.escape_text(description.description) + ""); + data.set(current, DataPos.ID, description.id); } - + select_first(); select(current_id); } - + ///////////////////////////////////////////////////////////////////// /// Selects the first type in the list. ///////////////////////////////////////////////////////////////////// - + public void select_first() { Gtk.TreeIter active; - + if(this.data.get_iter_first(out active) ) { this.get_selection().select_iter(active); string id = ""; @@ -143,16 +143,16 @@ class SliceTypeList : Gtk.TreeView { this.on_select("", "stock_unknown"); } } - + ///////////////////////////////////////////////////////////////////// /// Select the given slice type. ///////////////////////////////////////////////////////////////////// - + public void select(string id) { this.data.foreach((model, path, iter) => { string pie_id; this.data.get(iter, DataPos.ID, out pie_id); - + if (id == pie_id) { this.get_selection().select_iter(iter); string icon = ""; @@ -160,10 +160,10 @@ class SliceTypeList : Gtk.TreeView { this.on_select(pie_id, icon); this.scroll_to_cell(path, null, true, 0.5f, 0.5f); this.has_focus = true; - + return true; } - + return false; }); } diff --git a/src/gui/themeList.vala b/src/gui/themeList.vala index 1c038a9..4173819 100644 --- a/src/gui/themeList.vala +++ b/src/gui/themeList.vala @@ -1,23 +1,23 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// A widget displaying all available themes of Gnome-Pie. ///////////////////////////////////////////////////////////////////////// @@ -26,7 +26,7 @@ class ThemeList : Gtk.TreeView { ///////////////////////////////////////////////////////////////////// /// This signal gets emitted, when a new theme is selected by the /// user. This new theme is applied automatically, with this signal - /// actions may be triggered which should be executed AFTER the + /// actions may be triggered which should be executed AFTER the /// change to a new theme. ///////////////////////////////////////////////////////////////////// @@ -37,11 +37,11 @@ class ThemeList : Gtk.TreeView { ///////////////////////////////////////////////////////////////////// private Gtk.TreeIter active { private get; private set; } - + ///////////////////////////////////////////////////////////////////// /// The positions in the data list store. ///////////////////////////////////////////////////////////////////// - + private enum DataPos {ICON, NAME} ///////////////////////////////////////////////////////////////////// @@ -50,57 +50,57 @@ class ThemeList : Gtk.TreeView { public ThemeList() { GLib.Object(); - - var data = new Gtk.ListStore(2, typeof(Gdk.Pixbuf), + + var data = new Gtk.ListStore(2, typeof(Gdk.Pixbuf), typeof(string)); this.set_model(data); this.set_headers_visible(true); this.set_grid_lines(Gtk.TreeViewGridLines.NONE); this.set_fixed_height_mode(true); - + var main_column = new Gtk.TreeViewColumn(); main_column.title = _("Themes"); main_column.set_sizing(Gtk.TreeViewColumnSizing.FIXED); var icon_render = new Gtk.CellRendererPixbuf(); main_column.pack_start(icon_render, false); - + var theme_render = new Gtk.CellRendererText(); main_column.pack_start(theme_render, true); - + this.append_column(main_column); - + main_column.add_attribute(icon_render, "pixbuf", DataPos.ICON); main_column.add_attribute(theme_render, "markup", DataPos.NAME); - + this.get_selection().changed.connect(() => { Gtk.TreeIter active; if (this.get_selection().get_selected(null, out active)) { Timeout.add(10, () => { int index = int.parse(data.get_path(active).to_string()); Config.global.theme = Config.global.themes[index]; - + this.on_select_new(); - + Config.global.theme.load(); Config.global.theme.load_images(); return false; - }); + }); } }); - + // load all themes into the list var themes = Config.global.themes; foreach(var theme in themes) { Gtk.TreeIter current; data.append(out current); - data.set(current, DataPos.ICON, theme.preview_icon.to_pixbuf()); + data.set(current, DataPos.ICON, theme.preview_icon.to_pixbuf()); data.set(current, DataPos.NAME, ""+GLib.Markup.escape_text(theme.name)+" - " +GLib.Markup.escape_text(theme.description)+"\n" +""+GLib.Markup.escape_text(_("By")+" "+theme.author) - +""); + +""); if(theme == Config.global.theme) get_selection().select_iter(current); - } + } } } diff --git a/src/gui/triggerSelectButton.vala b/src/gui/triggerSelectButton.vala index 7132220..92cd8a3 100644 --- a/src/gui/triggerSelectButton.vala +++ b/src/gui/triggerSelectButton.vala @@ -1,64 +1,64 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { -///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// /// This window allows the selection of a hotkey. It is returned in form /// of a Trigger. Therefore it can be either a keyboard driven hotkey or /// a mouse based hotkey. ///////////////////////////////////////////////////////////////////////// public class TriggerSelectButton : Gtk.ToggleButton { - + ///////////////////////////////////////////////////////////////////// /// This signal is emitted when the user selects a new hot key. ///////////////////////////////////////////////////////////////////// - + public signal void on_select(Trigger trigger); - + ///////////////////////////////////////////////////////////////////// /// The currently contained Trigger. ///////////////////////////////////////////////////////////////////// - + private Trigger trigger = null; - + ///////////////////////////////////////////////////////////////////// /// True, if mouse buttons can be bound as well. ///////////////////////////////////////////////////////////////////// - + private bool enable_mouse = false; - + ///////////////////////////////////////////////////////////////////// /// These modifiers are ignored. ///////////////////////////////////////////////////////////////////// - + private Gdk.ModifierType lock_modifiers = Gdk.ModifierType.MOD2_MASK |Gdk.ModifierType.SUPER_MASK |Gdk.ModifierType.LOCK_MASK |Gdk.ModifierType.MOD5_MASK; - + ///////////////////////////////////////////////////////////////////// /// C'tor, constructs a new TriggerSelectWindow. ///////////////////////////////////////////////////////////////////// - + public TriggerSelectButton(bool enable_mouse) { this.enable_mouse = enable_mouse; - + this.toggled.connect(() => { if (this.active) { this.set_label(_("Press a hotkey ...")); @@ -66,49 +66,49 @@ public class TriggerSelectButton : Gtk.ToggleButton { FocusGrabber.grab(this.get_window(), true, true, true); } }); - + this.button_press_event.connect(this.on_button_press); this.key_press_event.connect(this.on_key_press); this.set_trigger(new Trigger()); } - + ///////////////////////////////////////////////////////////////////// /// Makes the button display the given Trigger. ///////////////////////////////////////////////////////////////////// - + public void set_trigger(Trigger trigger) { this.trigger = trigger; this.set_label(trigger.label); } - + ///////////////////////////////////////////////////////////////////// /// Can be called to cancel the selection process. ///////////////////////////////////////////////////////////////////// - + private void cancel() { this.set_label(trigger.label); this.set_active(false); Gtk.grab_remove(this); FocusGrabber.ungrab(true, true); } - + ///////////////////////////////////////////////////////////////////// /// Makes the button display the given Trigger. ///////////////////////////////////////////////////////////////////// - + private void update_trigger(Trigger trigger) { if (this.trigger.name != trigger.name) { this.set_trigger(trigger); this.on_select(this.trigger); } - + this.cancel(); } - + ///////////////////////////////////////////////////////////////////// /// Called when the user presses a keyboard key. ///////////////////////////////////////////////////////////////////// - + private bool on_key_press(Gdk.EventKey event) { if (this.active) { if (Gdk.keyval_name(event.keyval) == "Escape") { @@ -117,44 +117,45 @@ public class TriggerSelectButton : Gtk.ToggleButton { this.update_trigger(new Trigger()); } else if (event.is_modifier == 0) { Gdk.ModifierType state = event.state & ~ this.lock_modifiers; - this.update_trigger(new Trigger.from_values(event.keyval, state, false, false, false, false)); + this.update_trigger(new Trigger.from_values(event.keyval, state, false, false, false, + false, false, 5)); } - + return true; } return false; } - + ///////////////////////////////////////////////////////////////////// /// Called when the user presses a button of the mouse. ///////////////////////////////////////////////////////////////////// - + private bool on_button_press(Gdk.EventButton event) { if (this.active) { Gtk.Allocation rect; this.get_allocation(out rect); if (event.x < 0 || event.x > rect.width || event.y < 0 || event.y > rect.height) { - + this.cancel(); return true; } } - + if (this.active && this.enable_mouse) { Gdk.ModifierType state = event.state & ~ this.lock_modifiers; var new_trigger = new Trigger.from_values((int)event.button, state, true, - false, false, false); - + false, false, false, false, 5); + if (new_trigger.key_code != 1) this.update_trigger(new_trigger); else this.cancel(); - + return true; } else if (this.active) { this.cancel(); return true; } - + return false; } } diff --git a/src/gui/triggerSelectWindow.vala b/src/gui/triggerSelectWindow.vala index 611c179..56781b4 100644 --- a/src/gui/triggerSelectWindow.vala +++ b/src/gui/triggerSelectWindow.vala @@ -1,19 +1,19 @@ -/* -Copyright (c) 2011 by Simon Schneegans - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) -any later version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -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 . -*/ +///////////////////////////////////////////////////////////////////////// +// Copyright (c) 2011-2015 by Simon Schneegans +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or (at +// your option) any later version. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or 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 . +///////////////////////////////////////////////////////////////////////// namespace GnomePie { @@ -39,6 +39,8 @@ public class TriggerSelectWindow : GLib.Object { private Gtk.CheckButton turbo; private Gtk.CheckButton delayed; private Gtk.CheckButton centered; + private Gtk.CheckButton warp; + private Gtk.RadioButton rshape[10]; private TriggerSelectButton button; ///////////////////////////////////////////////////////////////////// @@ -55,6 +57,13 @@ public class TriggerSelectWindow : GLib.Object { private Trigger original_trigger = null; + ///////////////////////////////////////////////////////////////////// + /// Radioboxes call toggled() twice per selection change. + /// This flag is used to discard one of the two notifications. + ///////////////////////////////////////////////////////////////////// + + private static int notify_toggle= 0; + ///////////////////////////////////////////////////////////////////// /// C'tor, constructs a new TriggerSelectWindow. ///////////////////////////////////////////////////////////////////// @@ -76,7 +85,9 @@ public class TriggerSelectWindow : GLib.Object { trigger.with_mouse, this.turbo.active, this.delayed.active, - this.centered.active); + this.centered.active, + this.warp.active, + this.get_radio_shape()); }); (builder.get_object("trigger-box") as Gtk.Box).pack_start(this.button, true, true); @@ -93,6 +104,14 @@ public class TriggerSelectWindow : GLib.Object { this.centered = builder.get_object("center-check") as Gtk.CheckButton; this.centered.toggled.connect(this.on_check_toggled); + this.warp = builder.get_object("warp-check") as Gtk.CheckButton; + this.warp.toggled.connect(this.on_check_toggled); + + for (int i= 0; i < 10; i++) { + this.rshape[i] = builder.get_object("rshape%d".printf(i)) as Gtk.RadioButton; + this.rshape[i].toggled.connect(this.on_radio_toggled); + } + this.window.delete_event.connect(this.window.hide_on_delete); } catch (GLib.Error e) { @@ -128,6 +147,8 @@ public class TriggerSelectWindow : GLib.Object { this.turbo.active = trigger.turbo; this.delayed.active = trigger.delayed; this.centered.active = trigger.centered; + this.warp.active = trigger.warp; + this.set_radio_shape( trigger.shape ); this.original_trigger = trigger; this.trigger = trigger; @@ -135,14 +156,53 @@ public class TriggerSelectWindow : GLib.Object { } ///////////////////////////////////////////////////////////////////// - /// Called when one of the three checkoxes is toggled. + /// Called when one of the checkboxes is toggled. ///////////////////////////////////////////////////////////////////// private void on_check_toggled() { if (this.trigger != null) this.trigger = new Trigger.from_values(this.trigger.key_sym, this.trigger.modifiers, this.trigger.with_mouse, this.turbo.active, - this.delayed.active, this.centered.active); + this.delayed.active, this.centered.active, + this.warp.active, + this.get_radio_shape()); + } + + ///////////////////////////////////////////////////////////////////// + /// Returns the current selected radio-button shape: 0= automatic + /// 5= full pie; 1,3,7,8= quarters; 2,4,6,8=halves + /// 1 | 4 | 7 + /// 2 | 5 | 8 + /// 3 | 6 | 9 + ///////////////////////////////////////////////////////////////////// + + private int get_radio_shape() { + int rs; + for (rs= 0; rs < 10; rs++) + if (this.rshape[rs].active) + break; + return rs; + } + + ///////////////////////////////////////////////////////////////////// + /// Sets the current selected radio-button shape: 0= automatic + /// 5= full pie; 1,3,7,8= quarters; 2,4,6,8=halves + ///////////////////////////////////////////////////////////////////// + + private void set_radio_shape(int rs) { + if (rs < 0 || rs > 9) + rs= 5; //replace invalid value with default= full pie + this.rshape[rs].active= true; + } + + ///////////////////////////////////////////////////////////////////// + /// Called twice when one of the radioboxes is toggled. + ///////////////////////////////////////////////////////////////////// + + private void on_radio_toggled() { + notify_toggle= 1 - notify_toggle; + if (notify_toggle == 1) + on_check_toggled(); //just call once } ///////////////////////////////////////////////////////////////////// -- cgit v1.2.3