class DaysOfMonth(Base): HELP = _('''\ Download this periodical every month, on the specified days. The download will happen as soon after the specified time as possible on the specified days of each month. For example, if you choose the 1st and the 15th after 9:00 AM, the periodical will be downloaded on the 1st and 15th of every month, as soon after 9:00 AM as possible. ''') def __init__(self, parent=None): Base.__init__(self, parent) self.l1 = QLabel(_('&Days of the month:')) self.days = QLineEdit(self) self.days.setToolTip( _('Comma separated list of days of the month.' ' For example: 1, 15')) self.l1.setBuddy(self.days) self.l2 = QLabel(_('Download &after:')) self.time = QTimeEdit(self) self.time.setDisplayFormat('hh:mm AP') self.l2.setBuddy(self.time) self.l.addWidget(self.l1, 0, 0, 1, 1) self.l.addWidget(self.days, 0, 1, 1, 1) self.l.addWidget(self.l2, 1, 0, 1, 1) self.l.addWidget(self.time, 1, 1, 1, 1) def initialize(self, typ=None, val=None): if val is None: val = ((1, ), 6, 0) days_of_month, hour, minute = val self.days.setText(', '.join(map(str, map(int, days_of_month)))) self.time.setTime(QTime(hour, minute)) @property def schedule(self): parts = [ x.strip() for x in unicode(self.days.text()).split(',') if x.strip() ] try: days_of_month = tuple(map(int, parts)) except: days_of_month = (1, ) if not days_of_month: days_of_month = (1, ) t = self.time.time() hour, minute = t.hour(), t.minute() return 'days_of_month', (days_of_month, int(hour), int(minute))
class DaysOfWeek(Base): HELP = _('''\ Download this periodical every week on the specified days after the specified time. For example, if you choose: Monday after 9:00 AM, then the periodical will be download every Monday as soon after 9:00 AM as possible. ''') def __init__(self, parent=None): Base.__init__(self, parent) self.days = [ QCheckBox(force_unicode(calendar.day_abbr[d]), self) for d in xrange(7) ] for i, cb in enumerate(self.days): row = i % 2 col = i // 2 self.l.addWidget(cb, row, col, 1, 1) self.time = QTimeEdit(self) self.time.setDisplayFormat('hh:mm AP') if canonicalize_lang(get_lang()) in {'deu', 'nds'}: self.time.setDisplayFormat('HH:mm') self.hl = QHBoxLayout() self.l1 = QLabel(_('&Download after:')) self.l1.setBuddy(self.time) self.hl.addWidget(self.l1) self.hl.addWidget(self.time) self.l.addLayout(self.hl, 1, 3, 1, 1) self.initialize() def initialize(self, typ=None, val=None): if typ is None: typ = 'day/time' val = (-1, 6, 0) if typ == 'day/time': val = convert_day_time_schedule(val) days_of_week, hour, minute = val for i, d in enumerate(self.days): d.setChecked(i in days_of_week) self.time.setTime(QTime(hour, minute)) @property def schedule(self): days_of_week = tuple( [i for i, d in enumerate(self.days) if d.isChecked()]) t = self.time.time() hour, minute = t.hour(), t.minute() return 'days_of_week', (days_of_week, int(hour), int(minute))
class DownQDialog(QDialog): """ Class who create Downtime QDialog for hosts/services """ def __init__(self, parent=None): super(DownQDialog, self).__init__(parent) self.setWindowTitle(_('Request a Downtime')) self.setWindowFlags(Qt.FramelessWindowHint) self.setStyleSheet(settings.css_style) self.setWindowIcon(QIcon(settings.get_image('icon'))) self.setMinimumSize(360, 460) self.setObjectName('dialog') # Fields self.fixed = True self.fixed_toggle_btn = ToggleQWidgetButton() self.duration = QTimeEdit() self.start_time = QDateTimeEdit() self.end_time = QDateTimeEdit() self.comment_edit = QTextEdit() self.offset = None def initialize(self, item_type, item_name, comment): # pylint: disable=too-many-locals """ Initialize Downtime QDialog :param item_type: type of item to acknowledge : host | service :type item_type: str :param item_name: name of the item to acknowledge :type item_name: str :param comment: the default comment of action :type comment: str """ logger.debug("Create Downtime QDialog...") # Main status_layout center_widget(self) main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.addWidget(get_logo_widget(self, _('Request Downtime'))) downtime_widget = QWidget() downtime_widget.setObjectName('dialog') downtime_layout = QGridLayout(downtime_widget) downtime_title = QLabel(_('Request a downtime')) downtime_title.setObjectName('itemtitle') downtime_layout.addWidget(downtime_title, 0, 0, 1, 3) host_label = QLabel('<b>%s:</b> %s' % (item_type.capitalize(), item_name)) downtime_layout.addWidget(host_label, 1, 0, 1, 1) options_label = QLabel(_('Downtime options:')) options_label.setObjectName('subtitle') downtime_layout.addWidget(options_label, 2, 0, 1, 1) self.fixed_toggle_btn.initialize() self.fixed_toggle_btn.update_btn_state(self.fixed) downtime_layout.addWidget(self.fixed_toggle_btn, 2, 1, 1, 1) fixed_label = QLabel(_('Fixed')) downtime_layout.addWidget(fixed_label, 2, 2, 1, 1) fixed_info = QLabel( _('If checked, downtime will start and end at the times specified' ' by the “start time” and “end time” fields.')) fixed_info.setWordWrap(True) downtime_layout.addWidget(fixed_info, 3, 0, 1, 3) duration_label = QLabel(_('Duration')) duration_label.setObjectName('subtitle') downtime_layout.addWidget(duration_label, 4, 0, 1, 1) duration_clock = QLabel() duration_clock.setPixmap(QPixmap(settings.get_image('time'))) downtime_layout.addWidget(duration_clock, 4, 1, 1, 1) duration_clock.setFixedSize(16, 16) duration_clock.setScaledContents(True) self.duration.setTime(QTime(4, 00)) self.duration.setDisplayFormat("HH'h'mm") downtime_layout.addWidget(self.duration, 4, 2, 1, 1) duration_info = QLabel( _('Sets the duration if it is a non-fixed downtime.')) downtime_layout.addWidget(duration_info, 5, 0, 1, 3) date_range_label = QLabel(_('Downtime date range')) date_range_label.setObjectName('subtitle') downtime_layout.addWidget(date_range_label, 6, 0, 1, 1) calendar_label = QLabel() calendar_label.setPixmap(QPixmap(settings.get_image('calendar'))) calendar_label.setFixedSize(16, 16) calendar_label.setScaledContents(True) downtime_layout.addWidget(calendar_label, 6, 1, 1, 1) start_time_label = QLabel(_('Start time:')) downtime_layout.addWidget(start_time_label, 7, 0, 1, 1) self.start_time.setCalendarPopup(True) self.start_time.setDateTime(datetime.datetime.now()) self.start_time.setDisplayFormat("dd/MM/yyyy HH'h'mm") downtime_layout.addWidget(self.start_time, 7, 1, 1, 2) end_time_label = QLabel(_('End time:')) downtime_layout.addWidget(end_time_label, 8, 0, 1, 1) self.end_time.setCalendarPopup(True) self.end_time.setDateTime(datetime.datetime.now() + datetime.timedelta(hours=2)) self.end_time.setDisplayFormat("dd/MM/yyyy HH'h'mm") downtime_layout.addWidget(self.end_time, 8, 1, 1, 2) self.comment_edit.setText(comment) self.comment_edit.setMaximumHeight(60) downtime_layout.addWidget(self.comment_edit, 9, 0, 1, 3) request_btn = QPushButton(_('REQUEST DOWNTIME'), self) request_btn.clicked.connect(self.handle_accept) request_btn.setObjectName('valid') request_btn.setMinimumHeight(30) request_btn.setDefault(True) downtime_layout.addWidget(request_btn, 10, 0, 1, 3) main_layout.addWidget(downtime_widget) def duration_to_seconds(self): """ Return "duration" QTimeEdit value in seconds :return: "duration" in seconds :rtype: int """ return QTime(0, 0).secsTo(self.duration.time()) def handle_accept(self): """ Check if end_time timestamp is not lower than start_time """ if self.start_time.dateTime().toTime_t() > self.end_time.dateTime( ).toTime_t(): logger.warning( 'Try to add Downtime with "End Time" lower than "Start Time"') else: self.accept() def mousePressEvent(self, event): # pragma: no cover """ QWidget.mousePressEvent(QMouseEvent) """ self.offset = event.pos() def mouseMoveEvent(self, event): # pragma: no cover """ QWidget.mousePressEvent(QMouseEvent) """ try: x = event.globalX() y = event.globalY() x_w = self.offset.x() y_w = self.offset.y() self.move(x - x_w, y - y_w) except AttributeError as e: logger.warning('Move Event %s: %s', self.objectName(), str(e))
class DownQDialog(QDialog): """ Class who create Downtime QDialog for hosts/services """ def __init__(self, parent=None): super(DownQDialog, self).__init__(parent) self.setWindowTitle(_('Request a Downtime')) self.setWindowFlags(Qt.FramelessWindowHint) self.setStyleSheet(settings.css_style) self.setWindowIcon(QIcon(settings.get_image('icon'))) self.setMinimumSize(360, 460) self.setObjectName('dialog') # Fields self.fixed = True self.fixed_toggle_btn = ToggleQWidgetButton() self.duration = QTimeEdit() self.start_time = QDateTimeEdit() self.end_time = QDateTimeEdit() self.comment_edit = QTextEdit() self.offset = None def initialize(self, item_type, item_name, comment): # pylint: disable=too-many-locals """ Initialize Downtime QDialog :param item_type: type of item to acknowledge : host | service :type item_type: str :param item_name: name of the item to acknowledge :type item_name: str :param comment: the default comment of action :type comment: str """ logger.debug("Create Downtime QDialog...") # Main status_layout center_widget(self) main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.addWidget(get_logo_widget(self, _('Request Downtime'))) downtime_widget = QWidget() downtime_widget.setObjectName('dialog') downtime_layout = QGridLayout(downtime_widget) downtime_title = QLabel(_('Request a downtime')) downtime_title.setObjectName('itemtitle') downtime_layout.addWidget(downtime_title, 0, 0, 1, 3) host_label = QLabel('<b>%s:</b> %s' % (item_type.capitalize(), item_name)) downtime_layout.addWidget(host_label, 1, 0, 1, 1) options_label = QLabel(_('Downtime options:')) options_label.setObjectName('subtitle') downtime_layout.addWidget(options_label, 2, 0, 1, 1) self.fixed_toggle_btn.initialize() self.fixed_toggle_btn.update_btn_state(self.fixed) downtime_layout.addWidget(self.fixed_toggle_btn, 2, 1, 1, 1) fixed_label = QLabel(_('Fixed')) downtime_layout.addWidget(fixed_label, 2, 2, 1, 1) fixed_info = QLabel( _( 'If checked, downtime will start and end at the times specified' ' by the “start time” and “end time” fields.' ) ) fixed_info.setWordWrap(True) downtime_layout.addWidget(fixed_info, 3, 0, 1, 3) duration_label = QLabel(_('Duration')) duration_label.setObjectName('subtitle') downtime_layout.addWidget(duration_label, 4, 0, 1, 1) duration_clock = QLabel() duration_clock.setPixmap(QPixmap(settings.get_image('time'))) downtime_layout.addWidget(duration_clock, 4, 1, 1, 1) duration_clock.setFixedSize(16, 16) duration_clock.setScaledContents(True) self.duration.setTime(QTime(4, 00)) self.duration.setDisplayFormat("HH'h'mm") downtime_layout.addWidget(self.duration, 4, 2, 1, 1) duration_info = QLabel( _('Sets the duration if it is a non-fixed downtime.') ) downtime_layout.addWidget(duration_info, 5, 0, 1, 3) date_range_label = QLabel(_('Downtime date range')) date_range_label.setObjectName('subtitle') downtime_layout.addWidget(date_range_label, 6, 0, 1, 1) calendar_label = QLabel() calendar_label.setPixmap(QPixmap(settings.get_image('calendar'))) calendar_label.setFixedSize(16, 16) calendar_label.setScaledContents(True) downtime_layout.addWidget(calendar_label, 6, 1, 1, 1) start_time_label = QLabel(_('Start time:')) downtime_layout.addWidget(start_time_label, 7, 0, 1, 1) self.start_time.setCalendarPopup(True) self.start_time.setDateTime(datetime.datetime.now()) self.start_time.setDisplayFormat("dd/MM/yyyy HH'h'mm") downtime_layout.addWidget(self.start_time, 7, 1, 1, 2) end_time_label = QLabel(_('End time:')) downtime_layout.addWidget(end_time_label, 8, 0, 1, 1) self.end_time.setCalendarPopup(True) self.end_time.setDateTime(datetime.datetime.now() + datetime.timedelta(hours=2)) self.end_time.setDisplayFormat("dd/MM/yyyy HH'h'mm") downtime_layout.addWidget(self.end_time, 8, 1, 1, 2) self.comment_edit.setText(comment) self.comment_edit.setMaximumHeight(60) downtime_layout.addWidget(self.comment_edit, 9, 0, 1, 3) request_btn = QPushButton(_('REQUEST DOWNTIME'), self) request_btn.clicked.connect(self.handle_accept) request_btn.setObjectName('valid') request_btn.setMinimumHeight(30) request_btn.setDefault(True) downtime_layout.addWidget(request_btn, 10, 0, 1, 3) main_layout.addWidget(downtime_widget) def duration_to_seconds(self): """ Return "duration" QTimeEdit value in seconds :return: "duration" in seconds :rtype: int """ return QTime(0, 0).secsTo(self.duration.time()) def handle_accept(self): """ Check if end_time timestamp is not lower than start_time """ if self.start_time.dateTime().toTime_t() > self.end_time.dateTime().toTime_t(): logger.warning('Try to add Downtime with "End Time" lower than "Start Time"') else: self.accept() def mousePressEvent(self, event): # pragma: no cover """ QWidget.mousePressEvent(QMouseEvent) """ self.offset = event.pos() def mouseMoveEvent(self, event): # pragma: no cover """ QWidget.mousePressEvent(QMouseEvent) """ try: x = event.globalX() y = event.globalY() x_w = self.offset.x() y_w = self.offset.y() self.move(x - x_w, y - y_w) except AttributeError as e: logger.warning('Move Event %s: %s', self.objectName(), str(e))