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()