diff options
Diffstat (limited to 'client')
| -rwxr-xr-x | client/ur_fuzzy_alarm_clock.py | 204 | 
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() | 
