[gnome-clocks] Try to reduce deps between appwindow/toolbar and clocks
- From: Paolo Borelli <pborelli src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-clocks] Try to reduce deps between appwindow/toolbar and clocks
- Date: Sun, 18 Nov 2012 18:00:42 +0000 (UTC)
commit 915b77c5e209f0a6ab4cc8cd0f4d2f7a79317569
Author: Paolo Borelli <pborelli gnome org>
Date: Sun Nov 18 18:56:27 2012 +0100
Try to reduce deps between appwindow/toolbar and clocks
This refactoring starts to untangle mutual assupmtions between the main
window and the different clocks panels. I am not really happy with the
result yet....
gnomeclocks/alarm.py | 39 ++++++++++-----
gnomeclocks/app.py | 119 +++++++++++++++++++++++++---------------------
gnomeclocks/clocks.py | 12 +++--
gnomeclocks/stopwatch.py | 2 +
gnomeclocks/timer.py | 15 +++---
gnomeclocks/utils.py | 4 +-
gnomeclocks/world.py | 24 +++++++--
7 files changed, 129 insertions(+), 86 deletions(-)
---
diff --git a/gnomeclocks/alarm.py b/gnomeclocks/alarm.py
index 82aba25..1dbd9ee 100644
--- a/gnomeclocks/alarm.py
+++ b/gnomeclocks/alarm.py
@@ -21,7 +21,7 @@ import errno
import time
import json
from datetime import datetime, timedelta
-from gi.repository import GLib, Gio, GObject, Gtk, GdkPixbuf
+from gi.repository import GLib, GObject, Gtk, GdkPixbuf
from clocks import Clock
from utils import Dirs, SystemSettings, LocalizedWeekdays, Alert
from widgets import DigitalClockDrawing, SelectableIconView, ContentView
@@ -72,8 +72,7 @@ class AlarmItem:
def __init__(self, name=None, hour=None, minute=None, days=EVERY_DAY):
self.update(name=name, hour=hour, minute=minute, days=days)
- self.alert = Alert("alarm-clock-elapsed", name,
- self._on_notification_activated)
+ self.alert = Alert("alarm-clock-elapsed", name)
def update(self, name=None, hour=None, minute=None, days=EVERY_DAY):
self.name = name
@@ -111,10 +110,6 @@ class AlarmItem:
self.snooze_time = start_time + timedelta(minutes=9)
self.is_snoozing = False
- def _on_notification_activated(self, notif, action, data):
- app = Gio.Application.get_default()
- app.win.show_clock(app.win.alarm)
-
def snooze(self):
self.is_snoozing = True
self.alert.stop()
@@ -417,7 +412,12 @@ class AlarmStandalone(Gtk.EventBox):
class Alarm(Clock):
def __init__(self):
# Translators: "New" refers to an alarm
- Clock.__init__(self, _("Alarm"), _("New"), True)
+ Clock.__init__(self, _("Alarm"), _("New"))
+
+ self.notebook = Gtk.Notebook()
+ self.notebook.set_show_tabs(False)
+ self.notebook.set_show_border(False)
+ self.add(self.notebook)
self.liststore = Gtk.ListStore(bool,
GdkPixbuf.Pixbuf,
@@ -429,7 +429,7 @@ class Alarm(Clock):
contentview = ContentView(self.iconview,
"alarm-symbolic",
_("Select <b>New</b> to add an alarm"))
- self.add(contentview)
+ self.notebook.append_page(contentview, None)
self.iconview.connect("item-activated", self._on_item_activated)
self.iconview.connect("selection-changed", self._on_selection_changed)
@@ -440,16 +440,32 @@ class Alarm(Clock):
self.show_all()
self.standalone = AlarmStandalone(self)
+ self.notebook.append_page(self.standalone, None)
self.timeout_id = GLib.timeout_add(1000, self._check_alarms)
+ def set_mode(self, mode):
+ self.mode = mode
+ if mode is Clock.Mode.NORMAL:
+ self.iconview.unselect_all()
+ self.notebook.set_current_page(0)
+ self.iconview.set_selection_mode(False)
+ elif mode is Clock.Mode.STANDALONE:
+ self.notebook.set_current_page(1)
+ elif mode is Clock.Mode.SELECTION:
+ self.iconview.set_selection_mode(True)
+
+ @GObject.Signal
+ def alarm_ringing(self):
+ self.set_mode(Clock.Mode.STANDALONE)
+
def _check_alarms(self):
for i in self.liststore:
thumb = self.liststore.get_value(i.iter, 3)
alarm = thumb.get_alarm()
if alarm.check_expired():
self.standalone.set_alarm(alarm, True)
- self.emit("item-activated")
+ self.emit("alarm-ringing")
return True
def _on_item_activated(self, iconview, path):
@@ -460,9 +476,6 @@ class Alarm(Clock):
def _on_selection_changed(self, iconview):
self.emit("selection-changed")
- def set_selection_mode(self, active):
- self.iconview.set_selection_mode(active)
-
@GObject.Property(type=bool, default=False)
def can_select(self):
return len(self.liststore) != 0
diff --git a/gnomeclocks/app.py b/gnomeclocks/app.py
index 210625e..ed7394d 100644
--- a/gnomeclocks/app.py
+++ b/gnomeclocks/app.py
@@ -60,6 +60,7 @@ class Window(Gtk.ApplicationWindow):
self.notebook = Gtk.Notebook()
self.notebook.set_show_tabs(False)
self.notebook.set_show_border(False)
+ self.notebook.show()
self.world = World()
self.alarm = Alarm()
@@ -72,45 +73,43 @@ class Window(Gtk.ApplicationWindow):
self.vbox.pack_start(self.toolbar, False, False, 0)
- self.single_evbox = Gtk.EventBox()
-
self.vbox.pack_end(self.notebook, True, True, 0)
for view in self.views:
self.notebook.append_page(view, None)
- self.notebook.append_page(self.single_evbox, None)
self.world.connect("item-activated", self._on_item_activated)
+
self.alarm.connect("item-activated", self._on_item_activated)
+ self.alarm.connect("alarm-ringing", self._on_alarm_ringing)
- self.toolbar.connect("view-clock", self._on_view_clock)
- self.vbox.show_all()
- self.show_all()
- self.toolbar.show_overview_toolbar()
+ self.timer.connect("alarm-ringing", self._on_alarm_ringing)
+
+ self.toolbar.connect("back-clicked", self._on_back_clicked)
+ self.toolbar.connect("clock-changed", self._on_clock_changed)
- def show_clock(self, view):
- self.toolbar.activate_view(view)
+ self.vbox.show()
def _on_item_activated(self, view):
- def show_standalone_page():
- self.toolbar.show_standalone_toolbar(view.standalone)
- self.single_evbox.add(view.standalone)
- self.notebook.set_current_page(-1)
-
- if self.notebook.get_current_page() != len(self.views):
- self.embed.spotlight(show_standalone_page)
-
- def _on_view_clock(self, button, view):
- def show_clock_view():
- for child in self.single_evbox.get_children():
- self.single_evbox.remove(child)
- view.unselect_all()
- self.notebook.set_current_page(self.views.index(view))
- self.toolbar.show_overview_toolbar()
-
- if self.single_evbox.get_children():
- self.embed.spotlight(show_clock_view)
- else:
- show_clock_view()
+ def show_clock_standalone():
+ view.set_mode(Clock.Mode.STANDALONE)
+ self.toolbar.update_toolbar(view)
+
+ self.embed.spotlight(show_clock_standalone)
+
+ def _on_alarm_ringing(self, view):
+ self.notebook.set_current_page(self.views.index(view))
+ self.toolbar.update_toolbar(view)
+
+ def _on_back_clicked(self, button, view):
+ def show_clock_overview():
+ view.set_mode(Clock.Mode.NORMAL)
+ self.toolbar.update_toolbar(view)
+
+ self.embed.spotlight(show_clock_overview)
+
+ def _on_clock_changed(self, button, view):
+ self.notebook.set_current_page(self.views.index(view))
+ self.toolbar.update_toolbar(view)
def _on_new_activated(self, action, param):
self.toolbar.current_view.open_new_dialog()
@@ -232,7 +231,7 @@ class ClocksToolbar(Gtk.Toolbar):
self.back_button = SymbolicButton("go-previous-symbolic")
self.back_button.connect("clicked",
- lambda w: self.emit("view-clock", self.current_view))
+ lambda w: self.emit("back-clicked", self.current_view))
left_box.pack_start(self.back_button, False, False, 0)
center_item = Gtk.ToolItem()
@@ -255,7 +254,7 @@ class ClocksToolbar(Gtk.Toolbar):
self.button_box.pack_start(button, True, True, 0)
button.connect("toggled", self._on_toggled, view)
self.view_buttons[view] = button
- if view.has_selection_mode:
+ if hasattr(view, "can_select"):
view.connect("notify::can-select", self._on_can_select_changed)
if view == views[0]:
self.current_view = view
@@ -291,28 +290,40 @@ class ClocksToolbar(Gtk.Toolbar):
self.selection_handler = 0
+ self.show_all()
+ self.update_toolbar(self.current_view)
+
self.embed._selectionToolbar._toolbarDelete.connect("clicked", self._on_delete_clicked)
@GObject.Signal(arg_types=(Clock,))
- def view_clock(self, view):
+ def back_clicked(self, view):
+ self.select_button.set_sensitive(view.can_select)
+
+ @GObject.Signal(arg_types=(Clock,))
+ def clock_changed(self, view):
self.current_view = view
- if view.has_selection_mode:
+ if hasattr(view, "can_select"):
self.select_button.set_sensitive(view.can_select)
- def activate_view(self, view):
+ def update_toolbar(self, view):
if view is not self.current_view:
self.view_buttons[view].set_active(True)
-
- def show_overview_toolbar(self):
+ if view.mode is Clock.Mode.NORMAL:
+ self._show_normal_toolbar()
+ elif view.mode is Clock.Mode.STANDALONE:
+ self._show_standalone_toolbar()
+ elif view.mode is Clock.Mode.SELECTION:
+ self._show_selection_toolbar()
+
+ def _show_normal_toolbar(self):
self.get_style_context().remove_class("selection-mode")
- self.standalone = None
self.button_box.show()
if self.current_view.new_label:
self.new_button.set_label(self.current_view.new_label)
self.new_button.show()
else:
self.new_button.hide()
- self.select_button.set_visible(self.current_view.has_selection_mode)
+ self.select_button.set_visible(hasattr(self.current_view, "can_select"))
self.back_button.hide()
self.title_label.hide()
self.edit_button.hide()
@@ -321,26 +332,25 @@ class ClocksToolbar(Gtk.Toolbar):
self.current_view.disconnect_by_func(self._on_selection_changed)
self.selection_handler = 0
- def show_standalone_toolbar(self, widget):
+ def _show_standalone_toolbar(self):
self.get_style_context().remove_class("selection-mode")
- self.standalone = widget
self.button_box.hide()
self.new_button.hide()
self.select_button.hide()
self.back_button.show_all()
- self.title_label.set_markup("<b>%s</b>" % self.standalone.get_name())
+ standalone = self.current_view.standalone
+ self.title_label.set_markup("<b>%s</b>" % standalone.get_name())
self.title_label.show()
- self.edit_button.set_visible(self.standalone.can_edit)
+ self.edit_button.set_visible(standalone.can_edit)
self.done_button.hide()
- def show_selection_toolbar(self):
+ def _show_selection_toolbar(self):
self.get_style_context().add_class("selection-mode")
- self.standalone = None
self.button_box.hide()
self.new_button.hide()
self.select_button.hide()
self.back_button.hide()
- self.set_selection_label(0)
+ self._set_selection_label(0)
self.title_label.show()
self.edit_button.hide()
self.done_button.show()
@@ -349,9 +359,9 @@ class ClocksToolbar(Gtk.Toolbar):
self._on_selection_changed)
def _on_toggled(self, widget, view):
- self.emit("view-clock", view)
+ self.emit("clock-changed", view)
- def set_selection_label(self, n):
+ def _set_selection_label(self, n):
if n == 0:
self.title_label.set_markup("(%s)" % _("Click on items to select them"))
else:
@@ -361,7 +371,7 @@ class ClocksToolbar(Gtk.Toolbar):
def _on_selection_changed(self, view):
selection = view.get_selection()
n_selected = len(selection)
- self.set_selection_label(n_selected)
+ self._set_selection_label(n_selected)
self.embed.set_show_selectionbar(n_selected > 0)
def _on_can_select_changed(self, view, pspec):
@@ -369,20 +379,21 @@ class ClocksToolbar(Gtk.Toolbar):
self.select_button.set_sensitive(view.can_select)
def _on_select_clicked(self, button):
- self.show_selection_toolbar()
- self.current_view.set_selection_mode(True)
+ self.current_view.set_mode(Clock.Mode.SELECTION)
+ self.update_toolbar(self.current_view)
def _on_edit_clicked(self, button):
- self.standalone.open_edit_dialog()
+ standalone = self.current_view.standalone
+ standalone.open_edit_dialog()
def _on_done_clicked(self, widget):
- self.show_overview_toolbar()
- self.current_view.set_selection_mode(False)
+ self.current_view.set_mode(Clock.Mode.NORMAL)
+ self.update_toolbar(self.current_view)
self.embed.set_show_selectionbar(False)
def _on_delete_clicked(self, widget):
self.current_view.delete_selected()
- self.set_selection_label(0)
+ self._set_selection_label(0)
self.embed.set_show_selectionbar(False)
diff --git a/gnomeclocks/clocks.py b/gnomeclocks/clocks.py
index b3a2dab..0aebecc 100644
--- a/gnomeclocks/clocks.py
+++ b/gnomeclocks/clocks.py
@@ -20,8 +20,12 @@ from gi.repository import GObject, Gtk
class Clock(Gtk.EventBox):
+ class Mode:
+ NORMAL = 0
+ STANDALONE = 1
+ SELECTION = 2
- def __init__(self, label, new_label=None, has_selection_mode=False):
+ def __init__(self, label, new_label=None):
Gtk.EventBox.__init__(self)
# We catch map/unmap here to allow pausing of expensive UI
@@ -32,7 +36,7 @@ class Clock(Gtk.EventBox):
self.label = label
self.new_label = new_label
- self.has_selection_mode = has_selection_mode
+ self.mode = Clock.Mode.NORMAL
self.get_style_context().add_class('view')
self.get_style_context().add_class('content-view')
@@ -50,10 +54,10 @@ class Clock(Gtk.EventBox):
def get_selection(self):
pass
- def unselect_all(self):
+ def delete_selected(self):
pass
- def delete_selected(self):
+ def set_mode(self, mode):
pass
def _ui_freeze(self, widget):
diff --git a/gnomeclocks/stopwatch.py b/gnomeclocks/stopwatch.py
index 5898816..6336488 100644
--- a/gnomeclocks/stopwatch.py
+++ b/gnomeclocks/stopwatch.py
@@ -102,6 +102,8 @@ class Stopwatch(Clock):
scroll.add(self.laps_view)
vbox.pack_start(scroll, True, True, 0)
+ self.show_all()
+
def _on_left_button_clicked(self, widget):
if self.state in (Stopwatch.State.RESET, Stopwatch.State.STOPPED):
self.state = Stopwatch.State.RUNNING
diff --git a/gnomeclocks/timer.py b/gnomeclocks/timer.py
index 826411e..a5f2c14 100644
--- a/gnomeclocks/timer.py
+++ b/gnomeclocks/timer.py
@@ -17,7 +17,7 @@
# Author: Seif Lotfy <seif lotfy collabora co uk>
import time
-from gi.repository import GLib, Gtk
+from gi.repository import GLib, GObject, Gtk
from clocks import Clock
from utils import Alert
from widgets import Spinner
@@ -170,14 +170,15 @@ class Timer(Clock):
self.timer_screen = TimerScreen(self, size_group)
self.notebook.append_page(self.timer_screen, None)
- self.alert = Alert("complete", "Ta Da !",
- self._on_notification_activated)
+ self.show_all()
+
+ self.alert = Alert("complete", "Ta Da !")
self._ui_is_frozen = False
- def _on_notification_activated(self, notif, action, data):
- win = self.get_toplevel()
- win.show_clock(self)
+ @GObject.Signal
+ def alarm_ringing(self):
+ self.alert.show()
def show_setup_screen(self, reset):
self.notebook.set_current_page(0)
@@ -224,7 +225,7 @@ class Timer(Clock):
def count(self):
t = time.time()
if t >= self.deadline:
- self.alert.show()
+ self.emit("alarm-ringing")
self.state = Timer.State.STOPPED
self._remove_timeout()
self.timer_screen.set_time(0, 0, 0)
diff --git a/gnomeclocks/utils.py b/gnomeclocks/utils.py
index 8944ffd..d2b8334 100644
--- a/gnomeclocks/utils.py
+++ b/gnomeclocks/utils.py
@@ -127,7 +127,7 @@ class LocalizedWeekdays:
class Alert:
- def __init__(self, soundid, msg, callback):
+ def __init__(self, soundid, msg):
try:
self.canberra = pycanberra.Canberra()
except Exception as e:
@@ -139,8 +139,6 @@ class Alert:
self.notification = None
if Notify.is_initted() or Notify.init("GNOME Clocks"):
self.notification = Notify.Notification.new("Clocks", msg, 'clocks')
- # the special "default" action should not display a button
- self.notification.add_action("default", "Show", callback, None, None)
else:
print "Error: Could not trigger Alert"
diff --git a/gnomeclocks/world.py b/gnomeclocks/world.py
index 7c7ca10..4f68439 100644
--- a/gnomeclocks/world.py
+++ b/gnomeclocks/world.py
@@ -318,7 +318,12 @@ class ClockStandalone(Gtk.EventBox):
class World(Clock):
def __init__(self):
# Translators: "New" refers to a world clock
- Clock.__init__(self, _("World"), _("New"), True)
+ Clock.__init__(self, _("World"), _("New"))
+
+ self.notebook = Gtk.Notebook()
+ self.notebook.set_show_tabs(False)
+ self.notebook.set_show_border(False)
+ self.add(self.notebook)
self.liststore = Gtk.ListStore(bool,
GdkPixbuf.Pixbuf,
@@ -330,7 +335,7 @@ class World(Clock):
contentview = ContentView(self.iconview,
"document-open-recent-symbolic",
_("Select <b>New</b> to add a world clock"))
- self.add(contentview)
+ self.notebook.append_page(contentview, None)
self.iconview.connect("item-activated", self._on_item_activated)
self.iconview.connect("selection-changed", self._on_selection_changed)
@@ -341,9 +346,21 @@ class World(Clock):
self.show_all()
self.standalone = ClockStandalone()
+ self.notebook.append_page(self.standalone, None)
self.timeout_id = GLib.timeout_add(1000, self._update_clocks)
+ def set_mode(self, mode):
+ self.mode = mode
+ if mode is Clock.Mode.NORMAL:
+ self.iconview.unselect_all()
+ self.notebook.set_current_page(0)
+ self.iconview.set_selection_mode(False)
+ elif mode is Clock.Mode.STANDALONE:
+ self.notebook.set_current_page(1)
+ elif mode is Clock.Mode.SELECTION:
+ self.iconview.set_selection_mode(True)
+
def _update_clocks(self):
for i in self.liststore:
thumb = self.liststore.get_value(i.iter, 3)
@@ -359,9 +376,6 @@ class World(Clock):
def _on_selection_changed(self, iconview):
self.emit("selection-changed")
- def set_selection_mode(self, active):
- self.iconview.set_selection_mode(active)
-
@GObject.Property(type=bool, default=False)
def can_select(self):
return len(self.liststore) != 0
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]