def configuration(self, action=None): """ Read and write configuration """ defaultFont = QFont() defaultFont.fromString(config.data.get(config.ConfigKey.SystemFont)) defaultFont.setPointSize(14) bLogging = False if action == config.Action.Reset: # Font self.setFont(defaultFont) self.setAppFont(defaultFont) # Logging self.enableLogging(bLogging) # Geometry self.setGeometry(0, 0, 1280, 720) centerWidget(self) elif action == config.Action.Restore: # Font if strFont := config.data.get(config.ConfigKey.Font): restoreFont = QFont() restoreFont.fromString(strFont) self.setFont(restoreFont) self.setAppFont(restoreFont) else: self.setFont(defaultFont) self.setAppFont(defaultFont) # Logging if bLogging := config.data.get(config.ConfigKey.Logging): self.enableLogging(bLogging)
def setDefaultFont(app: QApplication) -> None: """save and set default font point size""" strSystemFont = data.get(ConfigKey.SystemFont) if strSystemFont is None: systemFont = app.font() systemFont.setPointSize(14) data.set(ConfigKey.SystemFont, systemFont.toString()) else: systemFont = QFont() systemFont.fromString(strSystemFont) strFont = data.get(ConfigKey.Font) if strFont is None: font = systemFont font.setPointSize(14) data.set(ConfigKey.Font, font.toString())
def restoreDefaults(self): """ restoreDefaults restore application defaults """ self.parent.ui.chkBoxRestoreWindowSize.setChecked(True) self.parent.ui.chkBoxEnableLogging.setChecked(False) if config.data.get(config.ConfigKey.JobHistory) is not None: self.parent.ui.chkBoxEnableJobHistory.setChecked(False) self.parent.ui.chkBoxEnableLogViewer.setChecked(False) defaultFont = QFont() defaultFont.fromString(config.data.get(config.ConfigKey.SystemFont)) self.parent.ui.fcmbBoxFontFamily.setCurrentFont(defaultFont.family()) self.parent.ui.spinBoxFontSize.setValue(defaultFont.pointSize()) if config.data.get(config.ConfigKey.Algorithm) is not None: self.parent.radioButtons[config.ALGORITHMDEFAULT].setChecked(True)
def clickedButton(self, button): """ clickedButton deals with the final button clicked Args: button (QPushButton): buttons for the Preferences Dialog """ buttonRole = self.parent.ui.btnBox.buttonRole(button) if buttonRole in [ QDialogButtonBox.AcceptRole, QDialogButtonBox.ResetRole ]: if buttonRole == QDialogButtonBox.ResetRole: self.parent.ui.chkBoxRestoreWindowSize.setChecked(True) self.parent.ui.chkBoxEnableLogging.setChecked(False) defaultFont = QFont() defaultFont.fromString( config.data.get(config.ConfigKey.SystemFont)) self.parent.ui.fcmbBoxFontFamily.setCurrentFont( defaultFont.family()) self.parent.ui.spinBoxFontSize.setValue( defaultFont.pointSize())
def on_font(self, topic, value): font = QFont() font.fromString(value) self.font = font self.resize()
def create_ui(self): """Setup main UI elements, dock widgets, UI-related elements, etc. """ log.debug('Loading UI') # Undo Stack self.undo_stack = QUndoStack(self) self.undo_stack.setUndoLimit(100) # Object navigation history self.obj_history = deque([], config.MAX_OBJ_HISTORY) app = QApplication.instance() base_font = QFont() base_font.fromString(self.prefs['base_font']) app.setFont(base_font) # Object class table widget # classTable = QTableView(self) classTable = classtable.TableView(self) classTable.setObjectName("classTable") classTable.setAlternatingRowColors(True) classTable.setFrameShape(QFrame.StyledPanel) classTable_font = QFont() classTable_font.fromString(self.prefs['class_table_font']) classTable.setFont(classTable_font) fm = classTable.fontMetrics() classTable.setWordWrap(True) classTable.setEditTriggers(QAbstractItemView.EditKeyPressed | QAbstractItemView.DoubleClicked | QAbstractItemView.AnyKeyPressed | QAbstractItemView.SelectedClicked) # classTable.horizontalHeader().setMovable(True) # classTable.verticalHeader().setMovable(False) classTable.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) classTable.verticalHeader().setSectionResizeMode(QHeaderView.Interactive) classTable.horizontalHeader().setDefaultSectionSize(self.prefs['default_column_width']) classTable.verticalHeader().setDefaultSectionSize(fm.height() + 0) classTable.setSelectionMode(QAbstractItemView.ExtendedSelection) classTable.setContextMenuPolicy(Qt.CustomContextMenu) classTable.customContextMenuRequested.connect(self.custom_table_context_menu) # Create table model and proxy layers for transposing and filtering self.classTableModel = classtable.IDFObjectTableModel(classTable) self.transposeableModel = classtable.TransposeProxyModel(self.classTableModel) self.transposeableModel.setSourceModel(self.classTableModel) self.sortableModel = classtable.SortFilterProxyModel(self.transposeableModel) self.sortableModel.setSourceModel(self.transposeableModel) # Assign model to table (enable sorting FIRST) # table.setSortingEnabled(True) # Disable for now, CRUD actions won't work! classTable.setModel(self.sortableModel) # Connect some signals selection_model = classTable.selectionModel() selection_model.selectionChanged.connect(self.table_selection_changed) scroll_bar = classTable.verticalScrollBar() scroll_bar.valueChanged.connect(self.scroll_changed) # These are currently broken # classTable.horizontalHeader().sectionMoved.connect(self.moveObject) # classTable.verticalHeader().sectionMoved.connect(self.moveObject) # Object class tree widget classTreeDockWidget = QDockWidget("Object Classes and Counts", self) classTreeDockWidget.setObjectName("classTreeDockWidget") classTreeDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) classTree = QTreeView(classTreeDockWidget) classTree.setUniformRowHeights(True) classTree.setAllColumnsShowFocus(True) classTree.setRootIsDecorated(False) classTree.setExpandsOnDoubleClick(True) classTree.setIndentation(15) classTree.setAnimated(True) classTree_font = QFont() classTree_font.fromString(self.prefs['class_tree_font']) classTree.setFont(classTree_font) classTree.setAlternatingRowColors(True) classTree.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) palette = classTree.palette() palette.setColor(QPalette.Highlight, Qt.darkCyan) classTree.setPalette(palette) class_tree_window = QWidget(classTreeDockWidget) class_tree_dock_layout_v = QVBoxLayout() class_tree_dock_layout_h = QHBoxLayout() class_tree_dock_layout_v.setContentsMargins(0, 8, 0, 0) class_tree_dock_layout_h.setContentsMargins(0, 0, 0, 0) class_tree_filter_edit = QLineEdit(classTreeDockWidget) class_tree_filter_edit.setPlaceholderText("Filter Classes") class_tree_filter_edit.textChanged.connect(self.treeFilterRegExpChanged) class_tree_filter_cancel = QPushButton("Clear", classTreeDockWidget) class_tree_filter_cancel.setMaximumWidth(45) class_tree_filter_cancel.clicked.connect(self.clearTreeFilterClicked) class_tree_dock_layout_h.addWidget(class_tree_filter_edit) class_tree_dock_layout_h.addWidget(class_tree_filter_cancel) class_tree_dock_layout_v.addLayout(class_tree_dock_layout_h) class_tree_dock_layout_v.addWidget(classTree) class_tree_window.setLayout(class_tree_dock_layout_v) classTreeDockWidget.setWidget(class_tree_window) classTreeDockWidget.setContentsMargins(0,0,0,0) # Comments widget commentDockWidget = QDockWidget("Comments", self) commentDockWidget.setObjectName("commentDockWidget") commentDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) commentView = UndoRedoTextEdit(commentDockWidget, self) commentView.setLineWrapMode(QTextEdit.FixedColumnWidth) commentView.setLineWrapColumnOrWidth(499) commentView.setFrameShape(QFrame.StyledPanel) commentView_font = QFont() commentView_font.fromString(self.prefs['comments_font']) commentView.setFont(commentView_font) commentDockWidget.setWidget(commentView) # Info and help widget infoDockWidget = QDockWidget("Info", self) infoDockWidget.setObjectName("infoDockWidget") infoDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) infoView = QTextEdit(infoDockWidget) infoView.setFrameShape(QFrame.StyledPanel) infoView.setReadOnly(True) infoDockWidget.setWidget(infoView) # Node list and jump menu widget refDockWidget = QDockWidget("Field References", self) refDockWidget.setObjectName("refDockWidget") refDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) ref_model = reftree.ReferenceTreeModel(None, refDockWidget) refView = QTreeView(refDockWidget) refView.setModel(ref_model) refView.setUniformRowHeights(True) refView.setRootIsDecorated(False) refView.setIndentation(15) refView.setColumnWidth(0, 160) refView.setFrameShape(QFrame.StyledPanel) refDockWidget.setWidget(refView) refView.doubleClicked.connect(self.ref_tree_double_clicked) # Logging and debugging widget logDockWidget = QDockWidget("Log Viewer", self) logDockWidget.setObjectName("logDockWidget") logDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) logView = QPlainTextEdit(logDockWidget) logView.setLineWrapMode(QPlainTextEdit.NoWrap) logView.setReadOnly(True) logView_font = QFont() logView_font.fromString(self.prefs['base_font']) logView.setFont(logView_font) logView.ensureCursorVisible() logDockWidget.setWidget(logView) # Undo view widget undoDockWidget = QDockWidget("Undo History", self) undoDockWidget.setObjectName("undoDockWidget") undoDockWidget.setAllowedAreas(Qt.AllDockWidgetAreas) undoView = QUndoView(self.undo_stack) undoDockWidget.setWidget(undoView) # Define corner docking behaviour self.setDockNestingEnabled(True) self.setCorner(Qt.TopLeftCorner, Qt.LeftDockWidgetArea) self.setCorner(Qt.TopRightCorner, Qt.RightDockWidgetArea) self.setCorner(Qt.BottomLeftCorner, Qt.LeftDockWidgetArea) self.setCorner(Qt.BottomRightCorner, Qt.RightDockWidgetArea) # Assign main widget and dock widgets to QMainWindow self.setCentralWidget(classTable) self.addDockWidget(Qt.LeftDockWidgetArea, classTreeDockWidget) self.addDockWidget(Qt.RightDockWidgetArea, commentDockWidget) self.addDockWidget(Qt.RightDockWidgetArea, infoDockWidget) self.addDockWidget(Qt.RightDockWidgetArea, refDockWidget) self.addDockWidget(Qt.RightDockWidgetArea, logDockWidget) self.addDockWidget(Qt.RightDockWidgetArea, undoDockWidget) # Store widgets for access by other objects self.classTable = classTable self.commentView = commentView self.infoView = infoView self.classTree = classTree self.logView = logView self.undoView = undoView self.refView = refView self.filterTreeBox = class_tree_filter_edit # Store docks for access by other objects self.commentDockWidget = commentDockWidget self.infoDockWidget = infoDockWidget self.classTreeDockWidget = classTreeDockWidget self.logDockWidget = logDockWidget self.undoDockWidget = undoDockWidget self.refDockWidget = refDockWidget # Perform other UI-related initialization tasks self.center() self.setUnifiedTitleAndToolBarOnMac(True) self.setWindowIcon(QIcon(':/images/logo.png')) # Status bar setup self.statusBar().showMessage('Status: Ready') self.unitsLabel = QLabel() self.unitsLabel.setAlignment(Qt.AlignCenter) self.unitsLabel.setMinimumSize(self.unitsLabel.sizeHint()) self.unitsLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) self.statusBar().addPermanentWidget(self.unitsLabel) self.pathLabel = QLabel() self.pathLabel.setAlignment(Qt.AlignCenter) self.pathLabel.setMinimumSize(self.pathLabel.sizeHint()) self.pathLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) self.statusBar().addPermanentWidget(self.pathLabel) self.versionLabel = QLabel() self.versionLabel.setAlignment(Qt.AlignCenter) self.versionLabel.setMinimumSize(self.versionLabel.sizeHint()) self.versionLabel.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken) self.statusBar().addPermanentWidget(self.versionLabel) self.progressBarIDF = QProgressBar() self.progressBarIDF.setAlignment(Qt.AlignCenter) self.progressBarIDF.setMaximumWidth(200) self.statusBar().addPermanentWidget(self.progressBarIDF) self.clipboard = QApplication.instance().clipboard() self.obj_clipboard = [] self.setStyleSheet(""" QToolTip { background-color: gray; color: white; border: black solid 1px } # QMenu { # background-color: rgbf(0.949020, 0.945098, 0.941176); # color: rgb(255,255,255); # } # QMenu::item::selected { # background-color: rgbf(0.949020, 0.945098, 0.941176); # } """)
def setup_ui_font(font_str): font = QFont() font.fromString(font_str) QApplication.setFont(font)
def _initUI(self): # # Interface Language # language = config.data.get(config.ConfigKey.Language) index = 0 self.ui.cmbBoxInterfaceLanguage.clear() for key, value in config.data.get( config.ConfigKey.InterfaceLanguages).items(): self.ui.cmbBoxInterfaceLanguage.addItem(value) if key == language: self.ui.cmbBoxInterfaceLanguage.setCurrentIndex(index) index += 1 # # Font & Size # font = QFont() font.fromString(config.data.get(config.ConfigKey.Font)) self.ui.fcmbBoxFontFamily.setCurrentFont(font.family()) self.ui.spinBoxFontSize.setValue(font.pointSize()) # # Logging is boolean value # isLogging = config.data.get(config.ConfigKey.Logging) self.ui.chkBoxEnableLogging.setChecked( config.data.get(config.ConfigKey.Logging)) # # Enable Log Viewer # self.ui.chkBoxEnableLogViewer.setChecked( config.data.get(config.ConfigKey.LogViewer)) # # Does not follow global palette fully # if platform.system() == "Windows": disabledColor = QColor(127, 127, 127) chkBoxPalette = self.ui.chkBoxEnableLogViewer.palette() chkBoxPalette.setColor(QPalette.Disabled, QPalette.WindowText, disabledColor) self.ui.chkBoxEnableLogViewer.setPalette(chkBoxPalette) if not isLogging: self.ui.chkBoxEnableLogViewer.setEnabled(False) # # Enable History # # Temporalily disable History # if config.data.get(config.ConfigKey.JobHistoryDisabled): self.ui.chkBoxEnableJobHistory.setEnabled(False) self.ui.chkBoxAutoSaveJobHistory.setEnabled(False) self.ui.chkBoxEnableJobHistory.hide() self.ui.chkBoxAutoSaveJobHistory.hide() if config.data.get(config.ConfigKey.JobHistory) is not None: self.ui.chkBoxEnableJobHistory.setChecked( config.data.get(config.ConfigKey.JobHistory)) if config.data.get(config.ConfigKey.JobsAutoSave) is not None: self.ui.chkBoxAutoSaveJobHistory.setChecked( config.data.get(config.ConfigKey.JobsAutoSave)) # # Restore Windows Size # self.ui.chkBoxRestoreWindowSize.setChecked(False) # # Algorithm # if config.data.get(config.ConfigKey.Algorithm) is not None: currentAlgorithm = config.data.get(config.ConfigKey.Algorithm) self.radioButtons[currentAlgorithm].setChecked(True)
def applyChanges(self): """Activate changes selected on Preferences Dialog""" if self.preferences: # # Language # if self.preferences.language is not None: config.data.set(config.ConfigKey.Language, self.preferences.language) self.parent.setLanguage() # # Font & Size # if (self.preferences.font is not None) or (self.preferences.fontSize is not None): font = QFont() font.fromString(config.data.get(config.ConfigKey.Font)) if self.preferences.font is not None: font = self.preferences.font if self.preferences.fontSize is not None: font.setPointSize(self.preferences.fontSize) self.parent.setFont(font) self.parent.setAppFont(font) config.data.set(config.ConfigKey.Font, font.toString()) # # Logging # if self.preferences.enableLogging is not None: config.data.set(config.ConfigKey.Logging, self.preferences.enableLogging) self.parent.enableLogging(self.preferences.enableLogging) # # LogViewer # loggingOn = config.data.get(config.ConfigKey.Logging) if loggingOn: if self.preferences.enableLogViewer is not None: config.data.set(config.ConfigKey.LogViewer, self.preferences.enableLogViewer) if self.preferences.enableLogViewer: if self.parent.logViewerWidget.tab < 0: self.parent.logViewerWidget.unHideTab() self.parent.logViewerWidget.setAsCurrentTab() else: if self.parent.logViewerWidget.tab >= 0: self.parent.logViewerWidget.hideTab() else: config.data.set(config.ConfigKey.LogViewer, False) if self.parent.logViewerWidget.tab >= 0: self.parent.logViewerWidget.hideTab() # # Job History # if config.data.get(config.ConfigKey.JobHistory) is not None: if self.preferences.enableJobHistory is not None: config.data.set(config.ConfigKey.JobHistory, self.preferences.enableJobHistory) if self.preferences.enableJobHistory: if self.parent.historyWidget.tab < 0: self.parent.historyWidget.unHideTab() self.parent.historyWidget.setAsCurrentTab() else: if self.parent.historyWidget.tab >= 0: self.parent.historyWidget.hideTab() # # Algorithm # if config.data.get(config.ConfigKey.Algorithm) is not None: for index, rb in enumerate(self.radioButtons): if rb.isChecked(): config.data.set(config.ConfigKey.Algorithm, index) # # Restore window size # if self.preferences.restoreWindowSize is not None: defaultGeometry = config.data.get( config.ConfigKey.DefaultGeometry) self.parent.setGeometry( defaultGeometry[0], defaultGeometry[1], defaultGeometry[2], defaultGeometry[3], ) # Center window some title bar goes out of screen centerWidget(self.parent) # Update geometry includes position base64Geometry = self.parent.saveGeometry().toBase64() b = base64Geometry.data() # b is a bytes string config.data.set(config.ConfigKey.Geometry, b)