Exemplo n.º 1
0
class SettingsDialog(QDialog):
    def __init__(self, settings, callback, parent=None):
        super(SettingsDialog, self).__init__(parent)
        # Function to apply changes
        self.callback = callback
        self.settings = settings
        # Dialog properties
        self.resize(320, 190)
        self.setWindowTitle('Settings')
        # Create, connect and add Widgets
        self.createWidgets()
        self.createConnections()
        self.addWidgets()

    def createWidgets(self):
        numeric_reg = QRegExp(r"[0-9]+")
        self.line_width_label = QLabel('Line Width')
        self.line_width_edit = QLineEdit()
        self.line_width_edit.setValidator(QRegExpValidator(numeric_reg, self))
        self.line_width_edit.setText(str(self.settings['plotLineWidth']))

        self.horizontal_grid_label = QLabel('Horizontal Grid')
        self.horizontal_grid_checkbox = QCheckBox()
        self.horizontal_grid_checkbox.setChecked(
            self.settings['horizontalGrid'])

        self.vertical_grid_label = QLabel('Vertical Grid')
        self.vertical_grid_checkbox = QCheckBox()
        self.vertical_grid_checkbox.setChecked(self.settings['verticalGrid'])

        self.grid_opacity_label = QLabel('Line Opacity')
        self.grid_opacity_spinbox = QDoubleSpinBox()
        self.grid_opacity_spinbox.setRange(0.10, 1.00)
        self.grid_opacity_spinbox.setSingleStep(0.10)
        self.grid_opacity_spinbox.setValue(float(self.settings['gridOpacity']))
        self.grid_opacity_spinbox.setFocusPolicy(Qt.NoFocus)

        self.line_color_label = QLabel('Line Color')
        self.line_color_combo = QComboBox()
        self.line_color_combo.addItem('blue')
        self.line_color_combo.addItem('cyan')
        self.line_color_combo.addItem('green')
        self.line_color_combo.addItem('magenta')
        self.line_color_combo.addItem('white')
        self.line_color_combo.addItem('yellow')
        print self.settings['lineColor']
        self.line_color_combo.setCurrentIndex(
            self.line_color_combo.findText(self.settings['lineColor']))

        self.serial_baud_label = QLabel('Serial Baud')
        self.serial_baud_edit = QLineEdit()
        self.serial_baud_edit.setText(str(self.settings['serialBaud']))
        self.serial_baud_edit.setValidator(QRegExpValidator(numeric_reg, self))

        self.separator_label = QLabel('Separator')
        self.separator_edit = QLineEdit()
        self.separator_edit.setText(self.settings['separator'])
        self.separator_edit.setInputMask('X')

        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Apply
                                          | QDialogButtonBox.Close
                                          | QDialogButtonBox.RestoreDefaults)

# Connect elements to their events

    def createConnections(self):
        self.buttonBox.button(QDialogButtonBox.Apply).clicked.connect(
            self.apply)
        self.buttonBox.button(QDialogButtonBox.Apply).setDefault(True)
        self.buttonBox.button(QDialogButtonBox.Apply).setAutoDefault(True)
        self.buttonBox.rejected.connect(self.reject)
        self.buttonBox.button(
            QDialogButtonBox.RestoreDefaults).clicked.connect(
                self.restore_defaults)
        self.buttonBox.button(
            QDialogButtonBox.RestoreDefaults).setDefault(False)
        self.buttonBox.button(
            QDialogButtonBox.RestoreDefaults).setAutoDefault(False)

# Add elements to the GUI

    def addWidgets(self):
        grid = QGridLayout()
        grid.addWidget(self.line_width_label, 0, 0)
        grid.addWidget(self.line_width_edit, 0, 1)
        grid.addWidget(self.horizontal_grid_label, 1, 0)
        grid.addWidget(self.horizontal_grid_checkbox, 1, 1)
        grid.addWidget(self.vertical_grid_label, 2, 0)
        grid.addWidget(self.vertical_grid_checkbox, 2, 1)
        grid.addWidget(self.grid_opacity_label, 3, 0)
        grid.addWidget(self.grid_opacity_spinbox, 3, 1)
        grid.addWidget(self.line_color_label, 4, 0)
        grid.addWidget(self.line_color_combo, 4, 1)
        grid.addWidget(self.serial_baud_label, 5, 0)
        grid.addWidget(self.serial_baud_edit, 5, 1)
        grid.addWidget(self.separator_label, 6, 0)
        grid.addWidget(self.separator_edit, 6, 1)
        grid.addWidget(self.buttonBox, 7, 0, 1, 2)

        self.setLayout(grid)

# Apply new Settings

    def apply(self):
        #        dict(plotLineWidth=1, horizontalGrid=True, verticalGrid=True, gridOpacity=1, lineColor='b',
        #             arrayPlotSize=25, updatePlotTime=1)
        self.settings['plotLineWidth'] = int(self.line_width_edit.text())
        self.settings[
            'horizontalGrid'] = self.horizontal_grid_checkbox.isChecked()
        self.settings['verticalGrid'] = self.vertical_grid_checkbox.isChecked()
        self.settings['gridOpacity'] = float(self.grid_opacity_spinbox.value())
        self.settings['lineColor'] = unicode(
            self.line_color_combo.currentText())
        self.settings['serialBaud'] = int(self.serial_baud_edit.text())
        if len(self.separator_edit.text()) != 1:
            self.settings['separator'] = ' '
        else:
            self.settings['separator'] = unicode(self.separator_edit.text())
        self.callback()


# Restores default settings values

    def restore_defaults(self):
        default_values = dict(plotLineWidth=1,
                              horizontalGrid=True,
                              verticalGrid=True,
                              gridOpacity=1,
                              lineColor='b',
                              arrayPlotSize=25,
                              serialBaud=115200,
                              separator=' ')
        self.settings.update(default_values)
        self.callback()
        self.line_width_edit.setText(str(self.settings['plotLineWidth']))
        self.horizontal_grid_checkbox.setChecked(
            self.settings['horizontalGrid'])
        self.vertical_grid_checkbox.setChecked(self.settings['verticalGrid'])
        self.grid_opacity_spinbox.setValue(self.settings['gridOpacity'])
        self.line_color_combo.setCurrentIndex(0)
        self.serial_baud_edit.setText(str(self.settings['serialBaud']))
        self.separator_edit.setText(self.settings['separator'])