Exemplo n.º 1
0
class SettingsEditDialog(QDialog):

    def __init__(self, parent=None):
        super().__init__(parent)

        self.setModal(True)
        self.setWindowTitle('Settings')
        self.setMinimumWidth(400)

        self.accepted.connect(self.save)

        # Editor group

        self.font_family_input = QFontComboBox()

        self.font_size_input = QSpinBox()
        self.font_size_input.setRange(8, 24)
        self.font_size_input.setSuffix(' pt')

        self.tab_size_input = QSpinBox()
        self.tab_size_input.setRange(1, 16)
        self.tab_size_input.setSuffix(' spaces')

        self.enable_text_wrapping_input = QCheckBox('Enable text wrapping')

        editor_layout = QFormLayout()
        editor_layout.addRow('Font family:', self.font_family_input)
        editor_layout.addRow('Font size:', self.font_size_input)
        editor_layout.addRow('Tab size:', self.tab_size_input)
        editor_layout.addRow('', self.enable_text_wrapping_input)

        editor_group = QGroupBox('Editor')
        editor_group.setLayout(editor_layout)

        # Buttons

        edit_project_button = QPushButton('Edit default project...')
        edit_project_button.clicked.connect(
            lambda: projects.show_edit_dialog('default'))

        save_button = QPushButton('OK')
        save_button.setDefault(True)
        save_button.clicked.connect(self.accept)

        cancel_button = QPushButton('Cancel')
        cancel_button.clicked.connect(self.reject)

        button_layout = QHBoxLayout()
        button_layout.addWidget(edit_project_button, 1, Qt.AlignLeft)
        button_layout.addWidget(save_button, 0, Qt.AlignRight)
        button_layout.addWidget(cancel_button)

        # Main layout

        main_layout = QVBoxLayout()
        main_layout.addWidget(editor_group)
        main_layout.addLayout(button_layout)

        self.setLayout(main_layout)

    def show(self):
        font = QFont(value('editor/font_family'))
        self.font_family_input.setCurrentFont(font)
        self.font_family_input.setCurrentText(QFontInfo(font).family())
        self.font_family_input.setFocus(Qt.OtherFocusReason)

        self.font_size_input.setValue(value('editor/font_size'))

        self.tab_size_input.setValue(value('editor/tab_size'))

        self.enable_text_wrapping_input.setChecked(
            value('editor/enable_text_wrapping'))

        super().show()

    def save(self):
        set_value('editor/font_family',
                  QFontInfo(self.font_family_input.currentFont()).family())
        set_value('editor/font_size', self.font_size_input.value())
        set_value('editor/tab_size', self.tab_size_input.value())
        set_value('editor/enable_text_wrapping',
                  self.enable_text_wrapping_input.isChecked())

        edit_dialog_saved().emit()