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
Example #2
0
    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())
Example #3
0
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()}
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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()
Example #7
0
    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()
Example #8
0
    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
Example #10
0
    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)
Example #11
0
    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
Example #12
0
    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
Example #13
0
    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)
Example #14
0
    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
Example #15
0
    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