[gnome-clocks] Various cleanups to the selection code



commit 2051b0433ec84bb62b23d636a645056de1684f10
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Aug 25 16:52:02 2012 +0200

    Various cleanups to the selection code

 gnomeclocks/alarm.py   |    1 +
 gnomeclocks/app.py     |   56 +++++++++++++++++++++--------------------------
 gnomeclocks/clocks.py  |   26 +++++++++++++++++++--
 gnomeclocks/widgets.py |   46 ++++++++++++--------------------------
 4 files changed, 64 insertions(+), 65 deletions(-)
---
diff --git a/gnomeclocks/alarm.py b/gnomeclocks/alarm.py
index 3aea4c8..3a2baeb 100644
--- a/gnomeclocks/alarm.py
+++ b/gnomeclocks/alarm.py
@@ -22,6 +22,7 @@ import vobject
 
 from utils import Dirs, SystemSettings
 
+
 class ICSHandler():
     def __init__(self):
         self.ics_file = os.path.join(Dirs.get_user_data_dir(), "alarms.ics")
diff --git a/gnomeclocks/app.py b/gnomeclocks/app.py
index 0ed1041..2dd25c4 100644
--- a/gnomeclocks/app.py
+++ b/gnomeclocks/app.py
@@ -50,8 +50,8 @@ class Window(Gtk.ApplicationWindow):
                                          Gtk.STYLE_PROVIDER_PRIORITY_USER)
 
         self.set_size_request(640, 480)
-        self.vbox = vbox = Gtk.VBox()
-        embed = Embed(vbox)
+        self.vbox = Gtk.VBox()
+        embed = Embed(self.vbox)
         self.add(embed)
         self.notebook = Gtk.Notebook()
         self.notebook.set_show_tabs(False)
@@ -64,21 +64,21 @@ class Window(Gtk.ApplicationWindow):
 
         self.views = (self.world, self.alarm, self.stopwatch, self.timer)
 
-        self.toolbar = ClocksToolbar(self.views, embed._selectionToolbar)
+        self.toolbar = ClocksToolbar(self.views, embed)
 
-        vbox.pack_start(self.toolbar, False, False, 0)
-        vbox.pack_start(self.toolbar.selection_toolbar, False, False, 0)
+        self.vbox.pack_start(self.toolbar, False, False, 0)
+        self.vbox.pack_start(self.toolbar.selection_toolbar, False, False, 0)
 
         self.single_evbox = Gtk.EventBox()
 
-        vbox.pack_end(self.notebook, True, True, 0)
+        self.vbox.pack_end(self.notebook, True, True, 0)
         for view in self.views:
             self.notebook.append_page(view, Gtk.Label(str(view)))
         self.notebook.append_page(self.single_evbox, Gtk.Label("Widget"))
 
         self.world.connect("show-clock", self._on_show_clock)
         self.toolbar.connect("view-clock", self._on_view_clock)
-        vbox.show_all()
+        self.vbox.show_all()
         self.show_all()
         self.toolbar.selection_toolbar.hide()
 
@@ -140,14 +140,15 @@ class Window(Gtk.ApplicationWindow):
 
 
 class SelectionToolbar(Gtk.Toolbar):
-    def __init__(self, _selectionToolbar):
+    def __init__(self, embed):
         Gtk.Toolbar.__init__(self)
-        self._selectionToolbar = _selectionToolbar
         self.get_style_context().add_class("clocks-toolbar")
         self.set_icon_size(Gtk.IconSize.MENU)
         self.get_style_context().add_class(Gtk.STYLE_CLASS_MENUBAR)
         self.get_style_context().add_class("selection-mode")
 
+        self.embed = embed
+
         # same size as the button to keep the label centered
         sep = Gtk.SeparatorToolItem()
         sep.set_draw(False)
@@ -183,7 +184,8 @@ class SelectionToolbar(Gtk.Toolbar):
         self.doneButton.set_label(_("Done"))
         self.doneButton.set_size_request(64, 34)
         self.doneButton.connect("clicked", self._on_done_clicked)
-        self._selectionToolbar._toolbarDelete.connect("clicked", self._on_delete_clicked)
+
+        self.embed._selectionToolbar._toolbarDelete.connect("clicked", self._on_delete_clicked)
 
         self.leftBox = box = Gtk.Box()
         box.pack_start(self.doneButton, False, False, 0)
@@ -208,30 +210,22 @@ class SelectionToolbar(Gtk.Toolbar):
 
     def _on_selection_changed(self, view):
         selection = view.get_selection()
-        self.set_selection_label(len(selection))
-        if len(selection) > 0:
-            self._selectionToolbar._fade_in()
-        else:
-            self._selectionToolbar._fade_out()
+        n_selected = len(selection)
+        self.set_selection_label(n_selected)
+        self.embed.set_show_selectionbar(n_selected > 0)
 
     def _on_done_clicked(self, widget):
-        #TODO: do something
-        self._selectionToolbar._fade_out()
+        self.embed.set_show_selectionbar(False)
 
     def _on_delete_clicked(self, widget):
-        selection = self.current_view.get_selection()
-        if type(self.current_view) == World:
-            model = self.current_view.liststore
-            items = []
-            for treepath in selection:
-                items.append(model[treepath][3])
-            self.current_view.delete_clocks(items)
-        selection = self.current_view.get_selection()
-        self.set_selection_label(len(selection))
-        self._selectionToolbar._fade_out()
+        self.current_view.delete_selected()
+        self.set_selection_label(0)
+        self.embed.set_show_selectionbar(False)
+
 
 class ClockButton(Gtk.RadioButton):
     _group = None
+
     def __init__(self, text):
         Gtk.RadioButton.__init__(self, group=ClockButton._group, draw_indicator=False)
         self.text = text
@@ -259,7 +253,7 @@ class ClocksToolbar(Gtk.Toolbar):
     __gsignals__ = {'view-clock': (GObject.SignalFlags.RUN_LAST,
                     None, (Clock,))}
 
-    def __init__(self, views, selectionToolbar):
+    def __init__(self, views, embed):
         Gtk.Toolbar.__init__(self)
 
         self.get_style_context().add_class("clocks-toolbar")
@@ -333,7 +327,7 @@ class ClocksToolbar(Gtk.Toolbar):
         box.pack_end(self.selectButton, False, False, 0)
         toolbox.pack_start(box, True, True, 0)
 
-        self.selection_toolbar = SelectionToolbar(selectionToolbar)
+        self.selection_toolbar = SelectionToolbar(embed)
         self.selection_toolbar.doneButton.connect("clicked",
             self._on_selection_mode, False)
 
@@ -396,8 +390,8 @@ class ClocksApplication(Gtk.Application):
         Gtk.Application.__init__(self)
 
     def do_activate(self):
-        self.win = win = Window(self)
-        win.show()
+        self.win = Window(self)
+        self.win.present()
 
     def quit_cb(self, action, parameter):
         self.quit()
diff --git a/gnomeclocks/clocks.py b/gnomeclocks/clocks.py
index 860a956..529daed 100644
--- a/gnomeclocks/clocks.py
+++ b/gnomeclocks/clocks.py
@@ -63,7 +63,11 @@ class Clock(Gtk.EventBox):
         pass
 
     def unselect_all(self):
-         pass
+        pass
+
+    def delete_selected(self):
+        pass
+
 
 class World(Clock):
     def __init__(self):
@@ -115,6 +119,13 @@ class World(Clock):
     def get_selection(self):
         return self.iconview.get_selection()
 
+    def delete_selected(self):
+        selection = self.get_selection()
+        items = []
+        for treepath in selection:
+            items.append(self.liststore[treepath][3])
+        self.delete_clocks(items)
+
     def load_clocks(self):
         self.clocks = worldclockstorage.load_clocks()
         for clock in self.clocks:
@@ -234,6 +245,13 @@ class Alarm(Clock):
     def get_selection(self):
         return self.iconview.get_selection()
 
+    def delete_selected(self):
+        selection = self.get_selection()
+        items = []
+        for treepath in selection:
+            items.append(self.liststore[treepath][3])
+        self.delete_alarms(items)
+
     def load_alarms(self):
         handler = ICSHandler()
         vevents = handler.load_vevents()
@@ -278,14 +296,16 @@ class Alarm(Clock):
     def edit_alarm(self, alarm):
         print "To Do!"
 
+    def delete_alarms(self, alarms):
+        print "To Do!"
+
     def open_new_dialog(self):
         window = AlarmDialog(self, self.get_toplevel())
         window.connect("response", self.on_dialog_response, True)
         window.show_all()
 
     def open_edit_dialog(self, vevent):
-        parent = self.get_parent().get_parent().get_parent()
-        window = AlarmDialog(self, parent, vevent)
+        window = AlarmDialog(self, self.get_toplevel(), vevent)
         window.connect("response", self.on_dialog_response, False)
         window.show_all()
 
diff --git a/gnomeclocks/widgets.py b/gnomeclocks/widgets.py
index c389dcc..a449f66 100644
--- a/gnomeclocks/widgets.py
+++ b/gnomeclocks/widgets.py
@@ -27,7 +27,6 @@ import os
 import cairo
 import time
 
-SELECTION_TOOLBAR_DEFAULT_WIDTH = 300;
 
 # FIXME: Use real sunrise/sunset time in the future
 def get_is_day(hour):
@@ -676,32 +675,29 @@ class SelectableIconView(Gtk.IconView):
                 self.emit("item-activated", path)
         return False
 
-def alphaGtkWidget(widget):
-    widget.override_background_color(0, Gdk.RGBA(0,0,0,0))
 
 class SelectionToolbar():
+    DEFAULT_WIDTH = 300
 
     def __init__(self, parent_actor):
-        self._parent_actor = parent_actor
-        
         self.widget = Gtk.Toolbar()
         self.widget.set_show_arrow(False)
         self.widget.set_icon_size(Gtk.IconSize.LARGE_TOOLBAR)
-        self.widget.get_style_context().add_class('osd');
-        self.widget.set_size_request(SELECTION_TOOLBAR_DEFAULT_WIDTH, -1);
+        self.widget.get_style_context().add_class('osd')
+        self.widget.set_size_request(SelectionToolbar.DEFAULT_WIDTH, -1)
 
         self.actor = GtkClutter.Actor.new_with_contents(self.widget)
         self.actor.set_opacity(0)
-        alphaGtkWidget(self.actor.get_widget())
+        self.actor.get_widget().override_background_color(0, Gdk.RGBA(0, 0, 0, 0))
 
         constraint = Clutter.AlignConstraint()
-        constraint.set_source(self._parent_actor)
+        constraint.set_source(parent_actor)
         constraint.set_align_axis(Clutter.AlignAxis.X_AXIS)
         constraint.set_factor(0.50)
         self.actor.add_constraint(constraint)
 
         constraint = Clutter.AlignConstraint()
-        constraint.set_source(self._parent_actor)
+        constraint.set_source(parent_actor)
         constraint.set_align_axis(Clutter.AlignAxis.Y_AXIS)
         constraint.set_factor(0.95)
         self.actor.add_constraint(constraint)
@@ -710,29 +706,19 @@ class SelectionToolbar():
         self._leftGroup = Gtk.ToolItem()
         self._leftGroup.set_expand(True)
         self._leftGroup.add(self._leftBox)
-        self.widget.insert(self._leftGroup, -1);
-        self._toolbarDelete = Gtk.Button("Delete") #FIXME: Make translatable
-        self._leftBox.pack_start(self._toolbarDelete, True, True, 0);
-        self._toolbarDelete.connect('clicked', self._on_toolbar_delete)
+        self.widget.insert(self._leftGroup, -1)
+        self._toolbarDelete = Gtk.Button(_("Delete"))
+        self._leftBox.pack_start(self._toolbarDelete, True, True, 0)
         self.widget.show_all()
 
-    def _on_toolbar_delete(self, widget):
-        pass
-
-    def change_select_mode(self, mode):
-        if mode:
-            self._fade_in() #TODO implement fading in
-        else:
-            self._fade_out()
-
-    def _fade_in(self):
+    def fade_in(self):
         self.actor.save_easing_state()
         self.actor.set_easing_duration(300)
         self.actor.set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD)
         self.actor.set_opacity(255)
         self.actor.restore_easing_state()
 
-    def _fade_out(self):
+    def fade_out(self):
         self.actor.save_easing_state()
         self.actor.set_easing_duration(300)
         self.actor.set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD)
@@ -740,7 +726,7 @@ class SelectionToolbar():
         self.actor.restore_easing_state()
 
 
-class Embed (GtkClutter.Embed):
+class Embed(GtkClutter.Embed):
     def __init__(self, notebook):
         GtkClutter.Embed.__init__(self)
         self.set_use_layout_size(True)
@@ -763,8 +749,6 @@ class Embed (GtkClutter.Embed):
         self._overlayLayout.add(self._contentsActor,
             Clutter.BinAlignment.FILL, Clutter.BinAlignment.FILL)
 
-        # pack the main GtkNotebook and a spinnerbox in a BinLayout, so that
-        # we can easily bring them front/back
         self._viewLayout = Clutter.BinLayout()
         self._viewActor = Clutter.Box()
         self._viewActor.set_layout_manager(self._viewLayout)
@@ -784,8 +768,8 @@ class Embed (GtkClutter.Embed):
                                 Clutter.BinAlignment.FIXED)
         self.show_all()
 
-    def set_show_selectionbar(show):
+    def set_show_selectionbar(self, show):
         if show:
-            self._selectionToolbar._fade_in()
+            self._selectionToolbar.fade_in()
         else:
-            self._selectionToolbar._fade_out()
+            self._selectionToolbar.fade_out()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]