예제 #1
0
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)
예제 #2
0
 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()