[gnome-clocks] Display number of selected item



commit daa15ce956fa172367f014fe1bfb98162ceef437
Author: Paolo Borelli <pborelli gnome org>
Date:   Mon Aug 20 21:29:43 2012 +0200

    Display number of selected item
    
    Implement get_selection that returns a list of the selected GtkTreePaths
    and use it to implement the display of the number of selected items in
    the toolbar

 gnomeclocks/app.py     |   39 +++++++++++++++++++++++++++------------
 gnomeclocks/clocks.py  |   17 ++++++++++++++---
 gnomeclocks/widgets.py |    9 +++++++++
 3 files changed, 50 insertions(+), 15 deletions(-)
---
diff --git a/gnomeclocks/app.py b/gnomeclocks/app.py
index d1c8774..1d03339 100644
--- a/gnomeclocks/app.py
+++ b/gnomeclocks/app.py
@@ -159,9 +159,10 @@ class SelectionToolbar(Gtk.Toolbar):
         self.insert(sep, -1)
 
         toolitem = Gtk.ToolItem()
-        label = Gtk.Label("(%s)" % _("Click on items to select them"))
-        label.set_halign(Gtk.Align.CENTER)
-        toolitem.add(label)
+        self.label = Gtk.Label()
+        self.label.set_halign(Gtk.Align.CENTER)
+        self.set_selection_label(0)
+        toolitem.add(self.label)
         self.insert(toolitem, -1)
 
         sep = Gtk.SeparatorToolItem()
@@ -185,6 +186,27 @@ class SelectionToolbar(Gtk.Toolbar):
         box.pack_start(self.doneButton, False, False, 0)
         toolbox.pack_start(box, True, True, 0)
 
+        self.current_view = None
+
+    def set_selection_label(self, n):
+        if n == 0:
+            self.label.set_markup("(%s)" % _("Click on items to select them"))
+        elif n == 1:
+            self.label.set_markup("<b>1 item selected</b>")
+        else:
+            self.label.set_markup("<b>%d items selected</b>" % (n))
+
+    def set_current_view(self, view):
+        if self.current_view:
+            self.current_view.disconnect_by_func(self._on_selection_changed)
+
+        self.current_view = view
+        self.current_view.connect("selection-changed", self._on_selection_changed)
+
+    def _on_selection_changed(self, view):
+        selection = view.get_selection()
+        self.set_selection_label(len(selection))
+
 
 class ClockButton(Gtk.RadioButton):
     _group = None
@@ -344,15 +366,8 @@ class ClocksToolbar(Gtk.Toolbar):
     def _on_selection_mode(self, button, selection_mode):
         self.selection_toolbar.set_visible(selection_mode)
         self.set_visible(not selection_mode)
-
-        active_view = None
-        for view in self.views:
-            if view.button.get_active():
-                active_view = view
-        active_view.set_selection_mode(selection_mode)
-
-    def _delete_clock(self, button):
-        pass
+        self.selection_toolbar.set_current_view(self.current_view)
+        self.current_view.set_selection_mode(selection_mode)
 
 
 class ClocksApplication(Gtk.Application):
diff --git a/gnomeclocks/clocks.py b/gnomeclocks/clocks.py
index b39fe32..9c8200d 100644
--- a/gnomeclocks/clocks.py
+++ b/gnomeclocks/clocks.py
@@ -41,7 +41,9 @@ class Clock(Gtk.EventBox):
     __gsignals__ = {'show-requested': (GObject.SignalFlags.RUN_LAST,
                     None, ()),
                     'show-clock': (GObject.SignalFlags.RUN_LAST,
-                    None, (GObject.TYPE_PYOBJECT, ))}
+                    None, (GObject.TYPE_PYOBJECT, )),
+                    'selection-changed': (GObject.SignalFlags.RUN_LAST,
+                    None, ())}
 
     def __init__(self, label, hasNew=False, hasSelectionMode=False):
         Gtk.EventBox.__init__(self)
@@ -54,6 +56,9 @@ class Clock(Gtk.EventBox):
     def open_new_dialog(self):
         pass
 
+    def get_selection(self):
+        pass
+
     def unselect_all(self):
         pass
 
@@ -93,7 +98,10 @@ class World(Clock):
         self.emit("show-clock", d)
 
     def _on_selection_changed(self, iconview):
-        pass
+        self.emit("selection-changed")
+
+    def get_selection(self):
+        return self.iconview.get_selection()
 
     def load_clocks(self):
         self.clocks = worldclockstorage.load_clocks()
@@ -191,7 +199,10 @@ class Alarm(Clock):
         self.open_edit_dialog(alarm)
 
     def _on_selection_changed(self, iconview):
-        pass
+        self.emit("selection-changed")
+
+    def get_selection(self):
+        return self.iconview.get_selection()
 
     def load_alarms(self):
         handler = ICSHandler()
diff --git a/gnomeclocks/widgets.py b/gnomeclocks/widgets.py
index f72e1bf..3a8d7fc 100644
--- a/gnomeclocks/widgets.py
+++ b/gnomeclocks/widgets.py
@@ -639,6 +639,15 @@ class SelectableIconView(Gtk.IconView):
             self.pack_start(renderer_text, True)
             self.add_attribute(renderer_text, "markup", text_col)
 
+    def get_selection(self):
+        selection = []
+        store = self.get_model()
+        for i in store:
+            selected = store.get_value(i.iter, self.selection_col)
+            if selected:
+                selection.append(i.path)
+        return selection
+
     def set_selection_mode(self, active):
         self.selection_mode = active
         self.renderer_pixbuf.set_property("toggle_visible", active)



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