Beispiel #1
0
    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)
Beispiel #2
0
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())
Beispiel #3
0
    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)
Beispiel #4
0
    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()
Beispiel #6
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)