def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: now = _datetime.datetime.now() nextdate = _datetime.datetime(now.year, now.month, now.day, now.hour) + _datetime.timedelta(hours=1) refstart = int(_time.mktime(nextdate.timetuple())) - \ UTCOffset.compute2_current() values = { 'reference_start': refstart, 'interval': 86400, 'overlaps': 0, 'bgap': 86400 - 3600, 'end_relative_time': 3600, 'inclusive': False, 'end_type': 0, 'time_standard': standard, } else: values = { 'reference_start': rule[0], 'interval': rule[1], 'overlaps': rule[2], 'bgap': rule[3], 'end_relative_time': rule[4] if rule[4] is not None else 3600, 'inclusive': rule[5], 'end_type': rule[6][0], 'time_standard': standard, } wstart = _datetime.datetime.utcfromtimestamp( values['reference_start']) wend = _datetime.datetime.utcfromtimestamp( values['reference_start'] + values['end_relative_time']) values['interval_number'], values['interval_unit'] = \ TimeSpanCtrl.compute_widget_values( values['interval']) values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_relative_time']) values.update({ 'start_year': wstart.year, 'start_month': wstart.month - 1, 'start_day': wstart.day, 'start_hour': wstart.hour, 'start_minute': wstart.minute, 'end_year': wend.year, 'end_month': wend.month - 1, 'end_day': wend.day, 'end_hour': wend.hour, 'end_minute': wend.minute, }) return values
def __init__(self, parent, input_values, # Temporary workaround for bug #332 filename, id_): self.box = wx.BoxSizer(wx.HORIZONTAL) self.ilabel = wx.StaticText(parent, label='Interval time:') self.box.Add(self.ilabel, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=4) self.intervalw = TimeSpanCtrl(parent, 1, 999) self.intervalw.set_values(input_values['interval_number'], input_values['interval_unit']) self.box.Add(self.intervalw.get_main_panel())
class Interval(object): def __init__(self, parent, input_values, # Temporary workaround for bug #332 filename, id_): self.box = wx.BoxSizer(wx.HORIZONTAL) self.ilabel = wx.StaticText(parent, label='Interval time:') self.box.Add(self.ilabel, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=4) self.intervalw = TimeSpanCtrl(parent, 1, 999) self.intervalw.set_values(input_values['interval_number'], input_values['interval_unit']) self.box.Add(self.intervalw.get_main_panel()) def get_main_window(self): return self.box def get_first_column_width(self): return self.ilabel.GetSizeTuple()[0] def set_first_column_width(self, width): iminh = self.ilabel.GetMinHeight() self.ilabel.SetMinSize((width, iminh)) def get_values(self, values): return {'interval': self.intervalw.get_time_span(), 'interval_number': self.intervalw.get_number(), 'interval_unit': self.intervalw.get_unit()}
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: nh = _datetime.datetime.now() + _datetime.timedelta(hours=1) lday = _calendar.monthrange(nh.year, nh.month)[1] values = { 'start_day': lday - nh.day + 1, 'start_hour': nh.hour, 'start_minute': 0, 'end_relative_time': 3600, 'alarm_relative_time': 0, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'max_overlap': rule[0], 'selected_months_raw': rule[1], 'start_day': rule[2], 'start_hour': rule[3], 'start_minute': rule[4], 'end_relative_time': rule[5] if rule[5] is not None else 3600, 'alarm_relative_time': rule[6] if rule[6] is not None else 0, 'end_type': rule[7][1], 'alarm_type': rule[7][2], 'time_standard': standard, } values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_relative_time']) # ralarm could be negative values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['alarm_relative_time']))) rrstart = values['start_hour'] * 3600 + values['start_minute'] * 60 rrend = rrstart + values['end_relative_time'] values['end_next_day'] = False # End time could be set after 23:59 of the start day if rrend > 86399: rrend = rrend % 86400 values['end_next_day'] = True rralarm = rrstart - values['alarm_relative_time'] values['alarm_previous_day'] = False # Alarm time could be set before 00:00 of the start day if rralarm < 0: rralarm = 86400 - abs(rralarm) % 86400 values['alarm_previous_day'] = True values.update({ 'end_hour': rrend // 3600, 'end_minute': rrend % 3600 // 60, 'alarm_hour': rralarm // 3600, 'alarm_minute': rralarm % 3600 // 60, }) return values
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: now = _datetime.datetime.now() nextdate = _datetime.datetime(now.year, now.month, now.day, now.hour) + _datetime.timedelta(hours=1) refstart = int(_time.mktime(nextdate.timetuple())) - \ UTCOffset.compute2_current() currw = nextdate.weekday() values = { 'reference_start': refstart, 'interval': 604800, 'overlaps': 0, 'bgap': 604800 - 3600, 'end_relative_time': 3600, 'alarm_relative_time': 0, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'reference_start': rule[0], 'interval': rule[1], 'overlaps': rule[2], 'bgap': rule[3], 'end_relative_time': rule[4] if rule[4] is not None else 3600, 'alarm_relative_time': rule[5] if rule[5] is not None else 0, 'end_type': rule[6][1], 'alarm_type': rule[6][2], 'time_standard': standard, } currw = _datetime.datetime.utcfromtimestamp( values['reference_start']).weekday() values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_relative_time']) # ralarm could be negative values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['alarm_relative_time']))) rrstart = values['reference_start'] % 86400 rrend = rrstart + values['end_relative_time'] values['end_next_day'] = False # End time could be set after 23:59 of the start day if rrend > 86399: rrend = rrend % 86400 values['end_next_day'] = True rralarm = rrstart - values['alarm_relative_time'] values['alarm_previous_day'] = False # Alarm time could be set before 00:00 of the start day if rralarm < 0: rralarm = 86400 - abs(rralarm) % 86400 values['alarm_previous_day'] = True values.update({ 'start_weekday': WeekDayHourCtrl.compute_widget_day(currw), 'start_hour': rrstart // 3600, 'start_minute': rrstart % 3600 // 60, 'end_hour': rrend // 3600, 'end_minute': rrend % 3600 // 60, 'alarm_hour': rralarm // 3600, 'alarm_minute': rralarm % 3600 // 60, }) return values
def _create_alarm_advance_widget(self): self.alarmw = TimeSpanCtrl(self.alarmchoicew.get_main_panel(), 0, 999) self.alarmw.set_values(self.input_values['alarm_relative_number'], self.input_values['alarm_relative_unit']) return self.alarmw.get_main_panel()
def _create_duration_widget(self): self.endw = TimeSpanCtrl(self.endchoicew.get_main_panel(), 1, 999) self.endw.set_values(self.input_values['end_relative_number'], self.input_values['end_relative_unit']) return self.endw.get_main_panel()
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: nh = _datetime.datetime.now() + _datetime.timedelta(hours=1) values = { "start_day": nh.day, "start_hour": nh.hour, "start_minute": 0, "end_relative_time": 3600, "alarm_relative_time": 0, "end_type": 0, "alarm_type": 0, "time_standard": standard, } else: values = { "max_overlap": rule[0], "selected_months_raw": rule[1], "start_day": rule[2], "start_hour": rule[3], "start_minute": rule[4], "end_relative_time": rule[5] if rule[5] is not None else 3600, "alarm_relative_time": rule[6] if rule[6] is not None else 0, "end_type": rule[7][1], "alarm_type": rule[7][2], "time_standard": standard, } values["end_relative_number"], values["end_relative_unit"] = TimeSpanCtrl.compute_widget_values( values["end_relative_time"] ) # ralarm could be negative values["alarm_relative_number"], values["alarm_relative_unit"] = TimeSpanCtrl.compute_widget_values( max((0, values["alarm_relative_time"])) ) rrstart = values["start_hour"] * 3600 + values["start_minute"] * 60 rrend = rrstart + values["end_relative_time"] values["end_next_day"] = False # End time could be set after 23:59 of the start day if rrend > 86399: rrend = rrend % 86400 values["end_next_day"] = True rralarm = rrstart - values["alarm_relative_time"] values["alarm_previous_day"] = False # Alarm time could be set before 00:00 of the start day if rralarm < 0: rralarm = 86400 - abs(rralarm) % 86400 values["alarm_previous_day"] = True values.update( { "end_hour": rrend // 3600, "end_minute": rrend % 3600 // 60, "alarm_hour": rralarm // 3600, "alarm_minute": rralarm % 3600 // 60, } ) return values
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: now = _datetime.datetime.now() nextdate = _datetime.datetime(now.year, now.month, now.day, now.hour) + _datetime.timedelta(hours=1) refstart = int(_time.mktime(nextdate.timetuple())) - UTCOffset.compute2_current() values = { "reference_start": refstart, "interval": 2551443, "overlaps": 0, "bgap": 2551443 - 3600, "end_relative_time": 3600, "alarm_relative_time": 0, "end_type": 0, "alarm_type": 0, "time_standard": standard, } else: values = { "reference_start": rule[0], "interval": rule[1], "overlaps": rule[2], "bgap": rule[3], "end_relative_time": rule[4] if rule[4] is not None else 3600, "alarm_relative_time": rule[5] if rule[5] is not None else 0, "end_type": rule[6][1], "alarm_type": rule[6][2], "time_standard": standard, } wstart = _datetime.datetime.utcfromtimestamp(values["reference_start"]) wend = _datetime.datetime.utcfromtimestamp(values["reference_start"] + values["end_relative_time"]) walarm = _datetime.datetime.utcfromtimestamp(values["reference_start"] - values["alarm_relative_time"]) values["end_relative_number"], values["end_relative_unit"] = TimeSpanCtrl.compute_widget_values( values["end_relative_time"] ) # ralarm could be negative values["alarm_relative_number"], values["alarm_relative_unit"] = TimeSpanCtrl.compute_widget_values( max((0, values["alarm_relative_time"])) ) values.update( { "start_year": wstart.year, "start_month": wstart.month - 1, "start_day": wstart.day, "start_hour": wstart.hour, "start_minute": wstart.minute, "end_year": wend.year, "end_month": wend.month - 1, "end_day": wend.day, "end_hour": wend.hour, "end_minute": wend.minute, "alarm_year": walarm.year, "alarm_month": walarm.month - 1, "alarm_day": walarm.day, "alarm_hour": walarm.hour, "alarm_minute": walarm.minute, } ) return values
def __init__(self, tasklist): wx.Menu.__init__(self) self.tasklist = tasklist self.occview = tasklist.list_ self.ID_NAVIGATOR = wx.NewId() self.ID_SCROLL = wx.NewId() self.ID_FIND = wx.NewId() self.ID_EDIT = wx.NewId() self.ID_SNOOZE = wx.NewId() self.ID_SNOOZE_ALL = wx.NewId() self.ID_SNOOZE_FOR_SEL = wx.NewId() self.ID_SNOOZE_FOR_ALL = wx.NewId() self.ID_DISMISS = wx.NewId() self.ID_DISMISS_ALL = wx.NewId() self.ID_EXPORT = wx.NewId() config = coreaux_api.get_plugin_configuration('wxtasklist') # Using a set here to remove any duplicates would lose the order of the # times snooze_times = config['snooze_times'].split(' ') self.snoozetimesconf = [] for stime in snooze_times: ID_SNOOZE_FOR_N_SEL = wx.NewId() ID_SNOOZE_FOR_N_ALL = wx.NewId() time = int(stime) * 60 number, unit = TimeSpanCtrl.compute_widget_values(time) # Duplicate time values are not supported, just make sure they # don't crash the application self.snoozetimesconf.append( ((ID_SNOOZE_FOR_N_SEL, ID_SNOOZE_FOR_N_ALL), time, number, unit)) self.navigator_submenu = NavigatorMenu(tasklist) self.snooze_selected_submenu = SnoozeSelectedConfigMenu(tasklist, self) self.snooze_all_submenu = SnoozeAllConfigMenu(tasklist, self) self.export_submenu = ExportMenu(tasklist) shconf = config("GlobalShortcuts") self.navigator = wx.MenuItem(self, self.ID_NAVIGATOR, 'Na&vigator', 'Navigator actions', subMenu=self.navigator_submenu) self.scroll = wx.MenuItem( self, self.ID_SCROLL, "Scro&ll to ongoing\t{}".format(shconf['scroll_to_ongoing']), "Order the list by State and scroll " "to the first ongoing event") self.find = wx.MenuItem( self, self.ID_FIND, "&Find in database\t{}".format(shconf('Items')['find_selected']), "Select the database items associated to the selected events") self.edit = wx.MenuItem( self, self.ID_EDIT, "&Edit selected\t{}".format(shconf('Items')['edit_selected']), "Open in the editor the database items associated " "to the selected events") self.snooze = wx.MenuItem(self, self.ID_SNOOZE, "&Snooze selected", "Snooze the selected alarms", subMenu=self.snooze_selected_submenu) self.snooze_all = wx.MenuItem(self, self.ID_SNOOZE_ALL, "S&nooze all", "Snooze all the active alarms", subMenu=self.snooze_all_submenu) self.dismiss = wx.MenuItem( self, self.ID_DISMISS, "&Dismiss selected\t{}".format( shconf('Items')['dismiss_selected']), "Dismiss the selected alarms") self.dismiss_all = wx.MenuItem( self, self.ID_DISMISS_ALL, "Dis&miss all\t{}".format(shconf('Items')['dismiss_all']), "Dismiss all the active alarms") self.export = wx.MenuItem(self, self.ID_EXPORT, 'E&xport view', 'Export the current view to a file', subMenu=self.export_submenu) self.navigator.SetBitmap(wxgui_api.get_menu_icon('@navigator')) self.scroll.SetBitmap(wxgui_api.get_menu_icon('@scroll')) self.find.SetBitmap(wxgui_api.get_menu_icon('@dbfind')) self.edit.SetBitmap(wxgui_api.get_menu_icon('@edit')) self.snooze.SetBitmap(wxgui_api.get_menu_icon('@snooze')) self.snooze_all.SetBitmap(wxgui_api.get_menu_icon('@snooze')) self.dismiss.SetBitmap(wxgui_api.get_menu_icon('@dismiss')) self.dismiss_all.SetBitmap(wxgui_api.get_menu_icon('@dismiss')) self.export.SetBitmap(wxgui_api.get_menu_icon('@saveas')) self.AppendItem(self.navigator) self.AppendItem(self.scroll) self.AppendSeparator() self.AppendItem(self.find) self.AppendItem(self.edit) self.AppendSeparator() self.AppendItem(self.snooze) self.AppendItem(self.snooze_all) self.AppendItem(self.dismiss) self.AppendItem(self.dismiss_all) self.AppendSeparator() self.AppendItem(self.export) wxgui_api.bind_to_menu(self._scroll_to_ongoing, self.scroll) wxgui_api.bind_to_menu(self._find_in_tree, self.find) wxgui_api.bind_to_menu(self._edit_items, self.edit) wxgui_api.bind_to_menu(self._dismiss_selected_alarms, self.dismiss) wxgui_api.bind_to_menu(self._dismiss_all_alarms, self.dismiss_all) wxgui_api.bind_to_update_menu_items(self._update_items) wxgui_api.bind_to_reset_menu_items(self._reset_items) wxgui_api.insert_menu_main_item('S&chedule', wxgui_api.get_menu_view_position(), self)
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: nextdate = _datetime.datetime.now() + _datetime.timedelta(hours=1) sdate = _datetime.datetime.combine(nextdate.date(), _datetime.time(hour=nextdate.hour)) values = { 'interval_years': 1, 'start_year': sdate.year, 'start_month_1': sdate.month, 'start_day':sdate.day, 'start_hour': sdate.hour, 'start_minute': 0, 'end_relative_time': 3600, 'alarm_relative_time': 0, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'maxoverlap': rule[0], 'interval_years': rule[1], 'start_year': rule[2], 'start_month_1': rule[3], 'start_day': rule[4], 'start_hour': rule[5], 'start_minute': rule[6], 'end_relative_time': rule[7] if rule[7] is not None else 3600, 'alarm_relative_time': rule[8] if rule[8] is not None else 0, 'end_type': rule[9][0], 'alarm_type': rule[9][1], 'time_standard': standard, } sdate = _datetime.datetime(values['start_year'], values['start_month_1'], values['start_day'], values['start_hour'], values['start_minute']) values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_relative_time']) # ralarm could be negative values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['alarm_relative_time']))) rstart = values['start_hour'] * 3600 + values['start_minute'] * 60 rrend = rstart + values['end_relative_time'] values['end_next_day'] = False # End time could be set after 23:59 of the start day if rrend > 86399: rrend = rrend % 86400 values['end_next_day'] = True rralarm = rstart - values['alarm_relative_time'] values['alarm_previous_day'] = False # Alarm time could be set before 00:00 of the start day if rralarm < 0: rralarm = 86400 - abs(rralarm) % 86400 values['alarm_previous_day'] = True values.update({ 'start_month': values['start_month_1'] - 1, 'end_hour': rrend // 3600, 'end_minute': rrend % 3600 // 60, 'alarm_hour': rralarm // 3600, 'alarm_minute': rralarm % 3600 // 60, }) return values
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: now = _datetime.datetime.now() nextdate = _datetime.datetime( now.year, now.month, now.day, now.hour) + _datetime.timedelta(hours=1) start = int(_time.mktime(nextdate.timetuple())) - \ UTCOffset.compute2_current() values = { 'start_unix_time': start, 'end_unix_time': start + 3600, 'alarm_unix_time': start, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'start_unix_time': rule[0], 'end_unix_time': rule[1] if rule[1] else rule[0] + 3600, 'alarm_unix_time': rule[2] if rule[2] else rule[0], 'end_type': rule[3][0], 'alarm_type': rule[3][1], 'time_standard': standard, } wstart = _datetime.datetime.utcfromtimestamp(values['start_unix_time']) wend = _datetime.datetime.utcfromtimestamp(values['end_unix_time']) walarm = _datetime.datetime.utcfromtimestamp(values['alarm_unix_time']) values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_unix_time'] - values['start_unix_time']) values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['start_unix_time'] - values['alarm_unix_time']))) values.update({ 'start_year': wstart.year, 'start_month': wstart.month - 1, 'start_day': wstart.day, 'start_hour': wstart.hour, 'start_minute': wstart.minute, 'end_year': wend.year, 'end_month': wend.month - 1, 'end_day': wend.day, 'end_hour': wend.hour, 'end_minute': wend.minute, 'alarm_year': walarm.year, 'alarm_month': walarm.month - 1, 'alarm_day': walarm.day, 'alarm_hour': walarm.hour, 'alarm_minute': walarm.minute, }) return values
def __init__(self, tasklist): wx.Menu.__init__(self) self.tasklist = tasklist self.occview = tasklist.list_ self.ID_NAVIGATOR = wx.NewId() self.ID_SCROLL = wx.NewId() self.ID_FIND = wx.NewId() self.ID_EDIT = wx.NewId() self.ID_SNOOZE = wx.NewId() self.ID_SNOOZE_ALL = wx.NewId() self.ID_SNOOZE_FOR_SEL = wx.NewId() self.ID_SNOOZE_FOR_ALL = wx.NewId() self.ID_DISMISS = wx.NewId() self.ID_DISMISS_ALL = wx.NewId() self.ID_EXPORT = wx.NewId() config = coreaux_api.get_plugin_configuration('wxtasklist') # Using a set here to remove any duplicates would lose the order of the # times snooze_times = config['snooze_times'].split(' ') self.snoozetimesconf = [] for stime in snooze_times: ID_SNOOZE_FOR_N_SEL = wx.NewId() ID_SNOOZE_FOR_N_ALL = wx.NewId() time = int(stime) * 60 number, unit = TimeSpanCtrl.compute_widget_values(time) # Duplicate time values are not supported, just make sure they # don't crash the application self.snoozetimesconf.append(((ID_SNOOZE_FOR_N_SEL, ID_SNOOZE_FOR_N_ALL), time, number, unit)) self.navigator_submenu = NavigatorMenu(tasklist) self.snooze_selected_submenu = SnoozeSelectedConfigMenu(tasklist, self) self.snooze_all_submenu = SnoozeAllConfigMenu(tasklist, self) self.export_submenu = ExportMenu(tasklist) shconf = config("GlobalShortcuts") self.navigator = wx.MenuItem(self, self.ID_NAVIGATOR, 'Na&vigator', 'Navigator actions', subMenu=self.navigator_submenu) self.scroll = wx.MenuItem(self, self.ID_SCROLL, "Scro&ll to ongoing\t{}".format(shconf['scroll_to_ongoing']), "Order the list by State and scroll " "to the first ongoing event") self.find = wx.MenuItem(self, self.ID_FIND, "&Find in database\t{}".format(shconf('Items')['find_selected']), "Select the database items associated to the selected events") self.edit = wx.MenuItem(self, self.ID_EDIT, "&Edit selected\t{}".format(shconf('Items')['edit_selected']), "Open in the editor the database items associated " "to the selected events") self.snooze = wx.MenuItem(self, self.ID_SNOOZE, "&Snooze selected", "Snooze the selected alarms", subMenu=self.snooze_selected_submenu) self.snooze_all = wx.MenuItem(self, self.ID_SNOOZE_ALL, "S&nooze all", "Snooze all the active alarms", subMenu=self.snooze_all_submenu) self.dismiss = wx.MenuItem(self, self.ID_DISMISS, "&Dismiss selected\t{}".format( shconf('Items')['dismiss_selected']), "Dismiss the selected alarms") self.dismiss_all = wx.MenuItem(self, self.ID_DISMISS_ALL, "Dis&miss all\t{}".format(shconf('Items')['dismiss_all']), "Dismiss all the active alarms") self.export = wx.MenuItem(self, self.ID_EXPORT, 'E&xport view', 'Export the current view to a file', subMenu=self.export_submenu) self.navigator.SetBitmap(wxgui_api.get_menu_icon('@navigator')) self.scroll.SetBitmap(wxgui_api.get_menu_icon('@scroll')) self.find.SetBitmap(wxgui_api.get_menu_icon('@dbfind')) self.edit.SetBitmap(wxgui_api.get_menu_icon('@edit')) self.snooze.SetBitmap(wxgui_api.get_menu_icon('@snooze')) self.snooze_all.SetBitmap(wxgui_api.get_menu_icon('@snooze')) self.dismiss.SetBitmap(wxgui_api.get_menu_icon('@dismiss')) self.dismiss_all.SetBitmap(wxgui_api.get_menu_icon('@dismiss')) self.export.SetBitmap(wxgui_api.get_menu_icon('@saveas')) self.AppendItem(self.navigator) self.AppendItem(self.scroll) self.AppendSeparator() self.AppendItem(self.find) self.AppendItem(self.edit) self.AppendSeparator() self.AppendItem(self.snooze) self.AppendItem(self.snooze_all) self.AppendItem(self.dismiss) self.AppendItem(self.dismiss_all) self.AppendSeparator() self.AppendItem(self.export) wxgui_api.bind_to_menu(self._scroll_to_ongoing, self.scroll) wxgui_api.bind_to_menu(self._find_in_tree, self.find) wxgui_api.bind_to_menu(self._edit_items, self.edit) wxgui_api.bind_to_menu(self._dismiss_selected_alarms, self.dismiss) wxgui_api.bind_to_menu(self._dismiss_all_alarms, self.dismiss_all) wxgui_api.bind_to_update_menu_items(self._update_items) wxgui_api.bind_to_reset_menu_items(self._reset_items) wxgui_api.insert_menu_main_item('S&chedule', wxgui_api.get_menu_view_position(), self)
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: now = _datetime.datetime.now() nextdate = _datetime.datetime(now.year, now.month, now.day, now.hour) + _datetime.timedelta(hours=1) start = int(_time.mktime(nextdate.timetuple())) - \ UTCOffset.compute2_current() values = { 'start_unix_time': start, 'end_unix_time': start + 3600, 'alarm_unix_time': start, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'start_unix_time': rule[0], 'end_unix_time': rule[1] if rule[1] else rule[0] + 3600, 'alarm_unix_time': rule[2] if rule[2] else rule[0], 'end_type': rule[3][0], 'alarm_type': rule[3][1], 'time_standard': standard, } wstart = _datetime.datetime.utcfromtimestamp(values['start_unix_time']) wend = _datetime.datetime.utcfromtimestamp(values['end_unix_time']) walarm = _datetime.datetime.utcfromtimestamp(values['alarm_unix_time']) values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_unix_time'] - values['start_unix_time']) values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['start_unix_time'] - values['alarm_unix_time']))) values.update({ 'start_year': wstart.year, 'start_month': wstart.month - 1, 'start_day': wstart.day, 'start_hour': wstart.hour, 'start_minute': wstart.minute, 'end_year': wend.year, 'end_month': wend.month - 1, 'end_day': wend.day, 'end_hour': wend.hour, 'end_minute': wend.minute, 'alarm_year': walarm.year, 'alarm_month': walarm.month - 1, 'alarm_day': walarm.day, 'alarm_hour': walarm.hour, 'alarm_minute': walarm.minute, }) return values
def _compute_values(cls, standard, rule): # Remember to support also time zones that differ from UTC by not # exact hours (e.g. Australia/Adelaide) if not rule: nextdate = _datetime.datetime.now() + _datetime.timedelta(hours=1) sdate = _datetime.datetime.combine( nextdate.date(), _datetime.time(hour=nextdate.hour)) values = { 'interval_years': 1, 'start_year': sdate.year, 'start_month_1': sdate.month, 'start_day': sdate.day, 'start_hour': sdate.hour, 'start_minute': 0, 'end_relative_time': 3600, 'alarm_relative_time': 0, 'end_type': 0, 'alarm_type': 0, 'time_standard': standard, } else: values = { 'maxoverlap': rule[0], 'interval_years': rule[1], 'start_year': rule[2], 'start_month_1': rule[3], 'start_day': rule[4], 'start_hour': rule[5], 'start_minute': rule[6], 'end_relative_time': rule[7] if rule[7] is not None else 3600, 'alarm_relative_time': rule[8] if rule[8] is not None else 0, 'end_type': rule[9][0], 'alarm_type': rule[9][1], 'time_standard': standard, } sdate = _datetime.datetime(values['start_year'], values['start_month_1'], values['start_day'], values['start_hour'], values['start_minute']) values['end_relative_number'], values['end_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( values['end_relative_time']) # ralarm could be negative values['alarm_relative_number'], values['alarm_relative_unit'] = \ TimeSpanCtrl.compute_widget_values( max((0, values['alarm_relative_time']))) rstart = values['start_hour'] * 3600 + values['start_minute'] * 60 rrend = rstart + values['end_relative_time'] values['end_next_day'] = False # End time could be set after 23:59 of the start day if rrend > 86399: rrend = rrend % 86400 values['end_next_day'] = True rralarm = rstart - values['alarm_relative_time'] values['alarm_previous_day'] = False # Alarm time could be set before 00:00 of the start day if rralarm < 0: rralarm = 86400 - abs(rralarm) % 86400 values['alarm_previous_day'] = True values.update({ 'start_month': values['start_month_1'] - 1, 'end_hour': rrend // 3600, 'end_minute': rrend % 3600 // 60, 'alarm_hour': rralarm // 3600, 'alarm_minute': rralarm % 3600 // 60, }) return values