예제 #1
0
class ParameterWindow(QMainWindow):
    def __init__(self, dplugin, api, pl_win_name = '',parent = None):
        QMainWindow.__init__(self, parent)

        # Build the tree for the parameters
        self.parameterTree = QTreeView(self)
        self.parameterTree.setObjectName("parameterTree")
        # Add it as the central widget
        self.setCentralWidget(self.parameterTree)
        # Add the DParameterTreeModel to the parameter tree
        self.dparameterModel = DParameterTreeModel()
        self.dparameterModel.setHorizontalHeaderLabels(['Name',''])
        self.parameterTree.setModel(self.dparameterModel)
        self.parameterTree.setUniformRowHeights(True)
        # connect the callback function for value changes
        self.dparameterModel.dataChanged.connect(self.data_changed_parameter_model)

        self.dpluign_object = dplugin
        self.api = api

        self.setWindowTitle(pl_win_name+' Parameter')



    def show_paramters(self, para_list):
        """
        Shows the list of parameters and values in the parameter window
        :param para_list:
        :return:
        """
        for dparameter_name in sorted(para_list):
            dparameter = para_list[dparameter_name]
            dparameter_item = DParameterTreeItem(dparameter)
            self.dparameterModel.appendRow(dparameter_item)
            self.parameterTree.resizeColumnToContents(0)
            self.parameterTree.resizeColumnToContents(1)
        self.parameterTree.expandAll()

        fh = self.parameterTree.fontMetrics().height()

        if len(para_list.keys()) > 8:
            self.setFixedHeight(fh*9+fh+25)
        else:
             self.setFixedHeight(fh*len(para_list.keys())+fh+fh+25)




    def data_changed_parameter_model(self, index, n):
        """
        This function is called when a dparameter value is changed by editing the 'value'-column.

        :param index: Index of current changed dparameter
        :param n: None
        :return:
        """

        dparameter = self.parameterTree.model().data(index, Qt.UserRole)

        self.api.do_set_parameter(self.dpluign_object.id, dparameter.name, dparameter.value)
예제 #2
0
class KerningWindow(QWidget):

    def __init__(self, font, parent=None):
        super().__init__(parent, Qt.Window)
        self._font = font
        self._font.kerning.addObserver(
            self, "_kerningChanged", "Kerning.Changed")
        self._font.info.addObserver(self, "_fontInfoChanged", "Info.Changed")
        self.kerningView = QTreeView(self)
        self.kerningView.setModel(
            KerningDictModel(font.kerning, self.kerningView))
        self.kerningView.expandAll()
        metrics = self.kerningView.fontMetrics()
        self.kerningView.setColumnWidth(1, 8 * metrics.width("0"))
        hdr = self.kerningView.header()
        hdr.setStretchLastSection(False)
        hdr.setSectionResizeMode(0, hdr.Stretch)
        hdr.hide()

        layout = QVBoxLayout(self)
        layout.addWidget(self.kerningView)
        layout.setContentsMargins(0, 0, 0, 0)

        self.updateWindowTitle(font=font)
        self.readSettings()

    def readSettings(self):
        geometry = settings.kerningWindowGeometry()
        if geometry:
            self.restoreGeometry(geometry)

    def writeSettings(self):
        settings.setKerningWindowGeometry(self.saveGeometry())

    def updateWindowTitle(self, title=None, font=None):
        if title is None:
            title = self.tr("Kerning")
        if font is not None:
            title = "%s – %s %s" % (
                title, font.info.familyName, font.info.styleName)
        self.setWindowTitle(title)

    # -------------
    # Notifications
    # -------------

    def _kerningChanged(self, notification):
        model = self.kerningView.model()
        model.setupModelData(self._font.kerning)

    def _fontInfoChanged(self, notification):
        self.updateWindowTitle(font=self._font)

    # ----------
    # Qt methods
    # ----------

    def sizeHint(self):
        return QSize(280, 460)

    def moveEvent(self, event):
        self.writeSettings()

    resizeEvent = moveEvent

    def closeEvent(self, event):
        super().closeEvent(event)
        if event.isAccepted():
            self._font.kerning.removeObserver(self, "Kerning.Changed")
            self._font.info.removeObserver(self, "Info.Changed")