class NotificationWidget(QWidget): """Widget for notification phone numbers""" def __init__(self, name, default, parent=None): """ Initialise layout. Arguments: name - Name of the widget default - Default value for the widget parent - Parent widget Returns: None """ super(NotificationWidget, self).__init__(parent) # Global content self.name = name self.default = default if self.default == 'choose': self.edit = QComboBox(self) else: self.edit = QLineEdit(self.name, self) self.edit.setReadOnly(True) self.check_box = QCheckBox(self.name, self) # Event self.check_box.stateChanged.connect(self._change_state) # Layout layout = QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.check_box) layout.addWidget(self.edit) self.edit.setEnabled(False) # Default if self.default == 'choose': pass else: self.edit.setText(default) # Object name self.edit.setObjectName('noti_edit') self.check_box.setObjectName('noti_check') self.exceptions = [] @pyqtSlot() def _change_state(self): """ Change enable state of the edit Arguments: None Returns: None """ self.edit.setEnabled(self.check_box.isChecked()) def add_exceptions(self, name): """ Add a person to the exception list and dont send notification anymore. Arguments: name - Name of the person Returns: None """ self.exceptions.append(name) def update_combo_email(self, users): """ Update the combo boxes. Arguments: users - User dictionary Returns: None """ if self.default == 'choose': items = [ '@ {0}'.format(key) for key in users if '@ {0}'.format(key) not in self.exceptions ] self.edit.addItems(sorted(items)) def update_combo_telegram(self, users): """ Update the combo boxes. Arguments: users - User dictionary Returns: None """ if self.default == 'choose': items = [ 'T {0}'.format(key) for key in users if 'T {0}'.format(key) not in self.exceptions ] self.edit.addItems(sorted(items)) def clear_combo(self): """ Remove all users from the combo box. Arguments: None Returns: None """ if self.default == 'choose': self.edit.clear() def get_settings(self): """ Get text of the currently selected combo item. Arguments: None Returns: Settings dictionary """ settings = {} if self.default == 'choose': settings[self.name] = '{0}\t{1}'.format(self.edit.currentText(), self.check_box.isChecked()) else: settings[self.name] = '{0}\t{1}'.format(self.edit.text(), self.check_box.isChecked()) return settings def set_settings(self, name, state): """ Set currently selected combo item in text. Arguments: name - Name of the person that should be currently selected. state - State of the person (True/False;Enables/Disables) Returns: None """ self.check_box.setChecked(bool(state == 'True')) if self.default == 'choose': index = self.edit.findText(name) self.edit.setCurrentIndex(index) else: self.edit.setText(name)
def addRichTypes(self, l): """set the list of richtypes""" for q in l: i = len(self.richTypes) self.richTypes.append(q) l = QLabel(self) self.qlabels.append(l) l.setText(q.name) l.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding) l.setToolTip(q.descr) self.gridLayout.addWidget(l, i, 0, 1, 1) cls = q.__class__ if cls == Text: w = QLineEdit(self) w.setMinimumSize(300, 30) if q.maxLen: w.setMaxLength(q.maxLen) w.setText(q.v) elif cls == MLText: w = QTextEdit(self) w.setAcceptRichText(False) w.setMinimumSize(300, 60) w.setText(q.v) elif cls == Choice: w = QComboBox(self) c = [unicode(x) for x in q.choices] c.sort() w.addItems(c) idx = w.findText(unicode(q.v)) if idx >= 0: w.setCurrentIndex(idx) elif cls == MultiChoice: w = QListWidget(self) w.setSelectionMode(QAbstractItemView.MultiSelection) w.setMinimumSize(100, 60) c = [unicode(x) for x in q.choices] c.sort() v = [unicode(x) for x in q.v] for ii, s in enumerate(c): w.addItem(s) if s in v: w.item(ii).setSelected(True) elif cls == Bool: w = QCheckBox(self) if q.v: w.setCheckState(Qt.Checked) else: w.setCheckState(Qt.Unchecked) elif cls == Integer: w = QSpinBox(self) if q.min is not None: w.setMinimum(q.min) if q.max is not None: w.setMaximum(q.max) if q.step is not None: w.setSingleStep(q.step or 0.01) if q.unit: w.setSuffix(' '+q.unit) w.setValue(q.v) elif cls == Float: w = QDoubleSpinBox(self) if q.min is not None: w.setMinimum(q.min) if q.max is not None: w.setMaximum(q.max) w.setSingleStep(q.step or 0.01) if q.unit: w.setSuffix(' '+q.unit) w.setValue(q.v) elif cls == DateTime: w = QDateTimeEdit(self) w.setCalendarPopup(True) dt = QDateTime() dt.setTime_t(q.v) w.setDateTime(dt) if q.min is not None: mindt = QDateTime() mindt.setTime_t(q.min) w.setMinimumDate(mindt.date()) if q.max is not None: maxdt = QDateTime() maxdt.setTime_t(q.max) w.setMaximumDate(maxdt.date()) l.setBuddy(w) w.setToolTip(q.descr) w.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) w.adjustSize() self.gridLayout.addWidget(w, i, 1, 1, 1) self.qwidgets.append(w) self.adjustSize()