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