aboutsummaryrefslogtreecommitdiff
path: root/client/ur_fuzzy_alarm_clock.py
diff options
context:
space:
mode:
Diffstat (limited to 'client/ur_fuzzy_alarm_clock.py')
-rwxr-xr-xclient/ur_fuzzy_alarm_clock.py204
1 files changed, 204 insertions, 0 deletions
diff --git a/client/ur_fuzzy_alarm_clock.py b/client/ur_fuzzy_alarm_clock.py
new file mode 100755
index 0000000..24bbb94
--- /dev/null
+++ b/client/ur_fuzzy_alarm_clock.py
@@ -0,0 +1,204 @@
+#!/usr/bin/env python
+
+import urwid
+
+class FuzzyAlarmClock:
+
+ def __init__(self,device):
+ self.device = device
+
+ def set_time_to_now(self):
+ pass
+
+ def read_alarms(self):
+ return [
+ [ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ 0, 0,
+ 10, 23
+ ],
+ [ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ 10, 20,
+ 10, 23
+ ],
+ [ True,
+ True,
+ True,
+ False,
+ True,
+ True,
+ False,
+ True,
+ 0, 0,
+ 10, 23
+ ],
+ [ True,
+ True,
+ False,
+ True,
+ True,
+ False,
+ True,
+ False,
+ 12, 1,
+ 10, 23
+ ],
+ ]
+
+
+class ModEdit(urwid.IntEdit):
+
+ def __init__(self,mod,caption="",default=None,offset=0):
+ self.mod = mod
+ self.offset = offset
+
+ super(ModEdit,self).__init__(caption,default)
+
+ def insert_text(self,text):
+ super(ModEdit,self).insert_text(text)
+ self.set_edit_text(str((self.value() - self.offset)% self.mod+self.offset))
+
+
+class Alarm:
+
+ def __init__(self,aid,fac):
+ self.w_aid = urwid.Text(str(aid))
+ self.w_repeat = urwid.CheckBox("")
+ self.w_mon = urwid.CheckBox("")
+ self.w_tue = urwid.CheckBox("")
+ self.w_wed = urwid.CheckBox("")
+ self.w_thu = urwid.CheckBox("")
+ self.w_fri = urwid.CheckBox("")
+ self.w_sat = urwid.CheckBox("")
+ self.w_sun = urwid.CheckBox("")
+ self.w_month = ModEdit(12,offset=1)
+ self.w_day = ModEdit(31,offset=1)
+ self.w_hour = ModEdit(24,default=0)
+ self.w_minute = ModEdit(60,default=0)
+
+ self.widgets = urwid.Columns([self.w_aid,
+ self.w_repeat,
+ self.w_mon,
+ self.w_tue,
+ self.w_wed,
+ self.w_thu,
+ self.w_fri,
+ self.w_sat,
+ self.w_sun,
+ self.w_month,
+ self.w_day,
+ self.w_hour,
+ self.w_minute,
+ ],
+ dividechars=1)
+
+ def set_values(self,values):
+ self.w_repeat.set_state(values[0])
+ self.w_mon.set_state(values[1])
+ self.w_tue.set_state(values[2])
+ self.w_wed.set_state(values[3])
+ self.w_thu.set_state(values[4])
+ self.w_fri.set_state(values[5])
+ self.w_sat.set_state(values[6])
+ self.w_sun.set_state(values[7])
+ self.w_month.set_edit_text(values[8])
+ self.w_day.set_edit_text(values[9])
+ self.w_hour.set_edit_text(values[10])
+ self.w_minute.set_edit_text(values[11])
+
+
+class UI:
+
+ def __init__(self,fac):
+ self.fac = fac
+
+ self.alarm_number=4
+
+ self.frame = self.build_ui()
+ self.loop = urwid.MainLoop(self.frame,self.palette,unhandled_input=self.read_commands)
+
+ def build_ui(self):
+ self.palette = [
+ ('header', 'light gray', 'dark blue'),
+ ('footer', 'dark cyan', 'black')
+ ]
+
+ self.alarms = []
+ for i in xrange(self.alarm_number):
+ self.alarms.append(Alarm(i,self.fac))
+
+ alarm_headers = urwid.Columns([
+ urwid.Text('#'),
+ urwid.Text('rep'),
+ urwid.Text('Mon'),
+ urwid.Text('Tue'),
+ urwid.Text('Wed'),
+ urwid.Text('Thu'),
+ urwid.Text('Fri'),
+ urwid.Text('Sat'),
+ urwid.Text('Sun'),
+ urwid.Text('mm'),
+ urwid.Text('dd'),
+ urwid.Text('HH'),
+ urwid.Text('MM'),
+ ],dividechars=1)
+ self.main_body = urwid.ListBox([alarm_headers]+[al.widgets for al in self.alarms])
+
+ footer = urwid.Text('a, b, c')
+ footer_map = urwid.AttrMap(footer,'footer')
+
+ header = urwid.Text('q: Quit r: Read s: Set n: time=Now ?:Help')
+ header_map = urwid.AttrMap(header,'header')
+
+ ui = urwid.Frame(self.main_body,footer=footer_map,header=header_map)
+ return ui
+
+ def read_commands(self,cmd):
+ {'n': self.fac.set_time_to_now,
+ 'r': self.read_alarms,
+ 's': self.set_alarms,
+ '?': self.print_help,
+ 'q': self.quit
+ }.get(cmd,self.do_nothing)()
+
+ def do_nothing(self):
+ pass
+
+ def read_alarms(self):
+ alarms = self.fac.read_alarms()
+
+ for i, al in enumerate(alarms):
+ self.alarms[i].set_values(al)
+
+ def set_alarms(self):
+ pass
+
+ def print_help(self):
+ pass
+
+ def quit(self):
+ raise urwid.ExitMainLoop()
+
+ def run(self):
+ self.loop.run()
+
+
+def main():
+ fac = FuzzyAlarmClock('/dev/ttyUSB0')
+ ui = UI(fac)
+ ui.run()
+
+if __name__ == '__main__': main()