[gnome-clocks] Alarms edit dialog UI



commit f76ec5b3080eb1d90daffae896addfd4b04ba749
Author: Eslam Mostafa <cseslam gmail com>
Date:   Sat Aug 18 22:14:36 2012 +0200

    Alarms edit dialog UI
    
    Signed-off-by: Seif Lotfy <seif lotfy com>

 gnomeclocks/alarm.py   |    2 +-
 gnomeclocks/clocks.py  |   26 ++++++++-
 gnomeclocks/widgets.py |  147 ++++++++++++++++++++----------------------------
 3 files changed, 86 insertions(+), 89 deletions(-)
---
diff --git a/gnomeclocks/alarm.py b/gnomeclocks/alarm.py
index 6dfba35..84f9624 100644
--- a/gnomeclocks/alarm.py
+++ b/gnomeclocks/alarm.py
@@ -180,7 +180,7 @@ class AlarmItem:
                                       datetime.time(h, m))
         vevent.add('dtend').value =\
             datetime.datetime.combine(datetime.date.today(),
-                                      datetime.time(h, 59))
+                                      datetime.time(h, m))
         if len(self.repeat) == 0:
             vevent.add('rrule').value = 'FREQ=DAILY;'
         else:
diff --git a/gnomeclocks/clocks.py b/gnomeclocks/clocks.py
index 063bc4a..18230e9 100644
--- a/gnomeclocks/clocks.py
+++ b/gnomeclocks/clocks.py
@@ -19,7 +19,7 @@
 from gi.repository import Gtk, GObject, Gio
 from gi.repository.GdkPixbuf import Pixbuf
 
-from widgets import NewWorldClockDialog, NewAlarmDialog
+from widgets import NewWorldClockDialog, AlarmDialog
 from widgets import DigitalClock, AlarmWidget, EmptyPlaceholder
 from storage import worldclockstorage
 from utils import Alert
@@ -188,6 +188,7 @@ class Alarm(Clock):
     def __init__(self):
         Clock.__init__(self, _("Alarm"), True, True)
         self.liststore = liststore = Gtk.ListStore(Pixbuf, str,
+                                                  GObject.TYPE_PYOBJECT,
                                                   GObject.TYPE_PYOBJECT)
         self.iconview = iconview = Gtk.IconView.new()
 
@@ -209,10 +210,19 @@ class Alarm(Clock):
         self.scrolledwindow = Gtk.ScrolledWindow()
         self.scrolledwindow.add(iconview)
 
+        iconview.connect('selection-changed', self._on_selection_changed)
+
         self.alarms = []
         self.load_alarms()
         self.show_all()
 
+    def _on_selection_changed(self, iconview):
+        items = iconview.get_selected_items()
+        if items:
+            path = iconview.get_selected_items()[0]
+            vevent = self.liststore[path][-1]
+            self.open_edit_dialog(vevent)
+
     def get_system_clock_format(self):
         settings = Gio.Settings.new('org.gnome.desktop.interface')
         systemClockFormat = settings.get_string('clock-format')
@@ -261,15 +271,25 @@ class Alarm(Clock):
         widget = AlarmWidget(timestr, repeat)
         view_iter = self.liststore.append([widget.drawing.pixbuf,
                                            "<b>" + name + "</b>",
-                                           widget])
+                                           widget,
+                                           alarm.get_vevent()])
         widget.set_iter(self.liststore, view_iter)
 
+    def edit_alarm(self, vevent):
+        pass
+
     def open_new_dialog(self):
         parent = self.get_parent().get_parent().get_parent()
-        window = NewAlarmDialog(parent)
+        window = AlarmDialog(self, parent)
         window.connect("add-alarm", lambda w, l: self.add_alarm(l))
         window.show_all()
 
+    def open_edit_dialog(self, vevent):
+        parent = self.get_parent().get_parent().get_parent()
+        window = AlarmDialog(self, parent, vevent)
+        window.connect("edit-alarm", lambda w, l: self.edit_alarm(l))
+        window.show_all()
+
 
 class Stopwatch(Clock):
 
diff --git a/gnomeclocks/widgets.py b/gnomeclocks/widgets.py
index 5a2d820..60eef3b 100644
--- a/gnomeclocks/widgets.py
+++ b/gnomeclocks/widgets.py
@@ -412,13 +412,18 @@ class AlarmWidget():
         self.list_store = list_store
 
 
-class NewAlarmDialog(Gtk.Dialog):
+class AlarmDialog(Gtk.Dialog):
 
     __gsignals__ = {'add-alarm': (GObject.SignalFlags.RUN_LAST,
+                    None, (GObject.TYPE_PYOBJECT, )),
+                    'edit-alarm': (GObject.SignalFlags.RUN_LAST,
                     None, (GObject.TYPE_PYOBJECT, ))}
 
-    def __init__(self, parent):
-        Gtk.Dialog.__init__(self, _("New Alarm"), parent)
+    def __init__(self, alarm_view, parent, vevent=None):
+        if vevent:
+            Gtk.Dialog.__init__(self, _("Edit Alarm"), parent)
+        else:
+            Gtk.Dialog.__init__(self, _("New Alarm"), parent)
         self.set_border_width(12)
         self.parent = parent
         self.set_transient_for(parent)
@@ -438,10 +443,16 @@ class NewAlarmDialog(Gtk.Dialog):
         self.add_buttons(_("Cancel"), 0, _("Save"), 1)
         self.connect("response", self.on_response)
 
-        t = time.localtime()
-        h = t.tm_hour
-        m = t.tm_min
-        p = time.strftime("%p", t)
+        if vevent:
+            t = vevent.dtstart.value
+            h = int(t.strftime("%I"))
+            m = int(t.strftime("%m"))
+            p = t.strftime("%p")
+        else:
+            t = time.localtime()
+            h = t.tm_hour
+            m = t.tm_min
+            p = time.strftime("%p", t)
         time_label = Gtk.Label(_("Time"))
         time_label.set_alignment(1.0, 0.5)
         points = Gtk.Label(": ")
@@ -456,16 +467,6 @@ class NewAlarmDialog(Gtk.Dialog):
         minute_spinbutton.set_wrap(True)
         minute_spinbutton.connect('output', self.show_leading_zeros)
 
-        if cf == "12h":
-            if p == "PM":
-                h = h - 12
-            hour_spinbutton.set_range(1.0, 12.0)
-            hour_spinbutton.set_value(h)
-            self.hourselect = hourselect = hour_spinbutton
-        else:
-            hour_spinbutton.set_range(0.0, 23.0)
-            hour_spinbutton.set_value(h)
-            self.hourselect = hourselect = hour_spinbutton
         minute_spinbutton.set_range(0.0, 59.0)
         minute_spinbutton.set_value(m)
         self.minuteselect = minuteselect = minute_spinbutton
@@ -474,17 +475,23 @@ class NewAlarmDialog(Gtk.Dialog):
             self.ampm = ampm = Gtk.ComboBoxText()
             ampm.append_text("AM")
             ampm.append_text("PM")
-            if p == 'AM':
-                ampm.set_active(0)
-            else:
+            if p == "PM":
+                h = h - 12
                 ampm.set_active(1)
-
+            else:
+                ampm.set_active(0)
+            hour_spinbutton.set_range(1.0, 12.0)
+            hour_spinbutton.set_value(h)
+            self.hourselect = hourselect = hour_spinbutton
             table1.attach(time_label, 0, 1, 0, 1)
             table1.attach(hourselect, 1, 2, 0, 1)
             table1.attach(points, 2, 3, 0, 1)
             table1.attach(minuteselect, 3, 4, 0, 1)
             table1.attach(ampm, 4, 5, 0, 1)
         else:
+            hour_spinbutton.set_range(0.0, 23.0)
+            hour_spinbutton.set_value(h)
+            self.hourselect = hourselect = hour_spinbutton
             table1.attach(time_label, 0, 1, 0, 1)
             table1.attach(hourselect, 1, 2, 0, 1)
             table1.attach(points, 2, 3, 0, 1)
@@ -499,41 +506,36 @@ class NewAlarmDialog(Gtk.Dialog):
 
         table1.attach(name, 0, 1, 1, 2)
         table1.attach(repeat, 0, 1, 2, 3)
-        #table1.attach(sound, 0, 1, 3, 4)
 
         self.entry = entry = Gtk.Entry()
-        entry.set_text(_("New Alarm"))
+        if vevent:
+            entry.set_text(vevent.summary.value)
+        else:
+            entry.set_text(_("New Alarm"))
         entry.set_editable(True)
         if cf == "12h":
             table1.attach(entry, 1, 5, 1, 2)
         else:
             table1.attach(entry, 1, 4, 1, 2)
 
-        buttond1 = Gtk.ToggleButton(label=_("Mon"))
-        buttond1.connect("clicked", self.on_d1_clicked)
-        buttond2 = Gtk.ToggleButton(label=_("Tue"))
-        buttond2.connect("clicked", self.on_d2_clicked)
-        buttond3 = Gtk.ToggleButton(label=_("Wed"))
-        buttond3.connect("clicked", self.on_d3_clicked)
-        buttond4 = Gtk.ToggleButton(label=_("Thu"))
-        buttond4.connect("clicked", self.on_d4_clicked)
-        buttond5 = Gtk.ToggleButton(label=_("Fri"))
-        buttond5.connect("clicked", self.on_d5_clicked)
-        buttond6 = Gtk.ToggleButton(label=_("Sat"))
-        buttond6.connect("clicked", self.on_d6_clicked)
-        buttond7 = Gtk.ToggleButton(label=_("Sun"))
-        buttond7.connect("clicked", self.on_d7_clicked)
-
-        # create a box and put them all in it
+        # create a box and put repeat days in it
         box = Gtk.Box(True, 0)
         box.get_style_context().add_class("linked")
-        box.pack_start(buttond1, True, True, 0)
-        box.pack_start(buttond2, True, True, 0)
-        box.pack_start(buttond3, True, True, 0)
-        box.pack_start(buttond4, True, True, 0)
-        box.pack_start(buttond5, True, True, 0)
-        box.pack_start(buttond6, True, True, 0)
-        box.pack_start(buttond7, True, True, 0)
+
+        days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
+
+        if vevent:
+            self.repeat = self.get_repeat_days_from_vevent(vevent)
+
+        for day in days:
+            btn = Gtk.ToggleButton(label=_(day))
+            if vevent:
+                for r in self.repeat:
+                    if btn.get_label()[:2] == r:
+                        btn.set_active(True)
+            btn.connect("clicked", self.on_day_clicked)
+            box.pack_start(btn, True, True, 0)
+
         if cf == "12h":
             table1.attach(box, 1, 5, 2, 3)
         else:
@@ -548,6 +550,15 @@ class NewAlarmDialog(Gtk.Dialog):
         systemClockFormat = settings.get_string('clock-format')
         return systemClockFormat
 
+    def get_repeat_days_from_vevent(self, vevent):
+        rrule = vevent.rrule.value
+        repeat = []
+        if rrule[5] == 'W':
+            days = rrule[18:]
+            repeat = days.split(",")
+        return repeat
+
+
     def on_response(self, widget, id):
         if id == 0:
             self.destroy()
@@ -570,47 +581,13 @@ class NewAlarmDialog(Gtk.Dialog):
         else:
             pass
 
-    def on_d1_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('MO')
-        if btn.get_active() == False:
-            self.repeat_days.remove('MO')
-
-    def on_d2_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('TU')
-        else:
-            self.repeat_days.remove('TU')
-
-    def on_d3_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('WE')
-        else:
-            self.repeat_days.remove('WE')
-
-    def on_d4_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('TH')
-        else:
-            self.repeat_days.remove('TH')
-
-    def on_d5_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('FR')
-        else:
-            self.repeat_days.remove('FR')
-
-    def on_d6_clicked(self, btn):
-        if btn.get_active() == True:
-            self.repeat_days.append('SA')
-        else:
-            self.repeat_days.remove('SA')
-
-    def on_d7_clicked(self, btn):
+    def on_day_clicked(self, btn):
+        label = btn.get_label()
+        day = label[:2]
         if btn.get_active() == True:
-            self.repeat_days.append('SU')
+            self.repeat_days.append(day)
         else:
-            self.repeat_days.remove('SU')
+            self.repeat_days.remove(day)
 
 
 class EmptyPlaceholder(Gtk.Box):



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