diff options
| author | Adrien Tétar | 2015-11-05 21:48:05 +0100 | 
|---|---|---|
| committer | Adrien Tétar | 2015-11-05 21:48:05 +0100 | 
| commit | 33c230f51c6626ea75dc6622c246282caae54cd7 (patch) | |
| tree | 0f6d6e4e7c19fed3378dace5a09d309697737fd9 /Lib/defconQt/glyphView.py | |
| parent | 8df4f00b98ba9de08d411acf52464adf40664a01 (diff) | |
| download | trufont-33c230f51c6626ea75dc6622c246282caae54cd7.tar.bz2 | |
glyphView: add LayerActionsDialog
Diffstat (limited to 'Lib/defconQt/glyphView.py')
| -rw-r--r-- | Lib/defconQt/glyphView.py | 94 | 
1 files changed, 93 insertions, 1 deletions
| diff --git a/Lib/defconQt/glyphView.py b/Lib/defconQt/glyphView.py index 6ca8f07..02f41fc 100644 --- a/Lib/defconQt/glyphView.py +++ b/Lib/defconQt/glyphView.py @@ -197,6 +197,64 @@ class AddLayerDialog(QDialog):          return (name, result) +class LayerActionsDialog(QDialog): + +    def __init__(self, currentGlyph, parent=None): +        super().__init__(parent) +        self.setWindowModality(Qt.WindowModal) +        self.setWindowTitle("Layer actions…") +        self._workableLayers = [] +        for layer in currentGlyph.layerSet: +            if layer != currentGlyph.layer: +                self._workableLayers.append(layer) + +        layout = QGridLayout(self) + +        copyBox = QRadioButton("Copy", self) +        moveBox = QRadioButton("Move", self) +        swapBox = QRadioButton("Swap", self) +        self.otherCheckBoxes = (moveBox, swapBox) +        copyBox.setChecked(True) + +        self.layersList = QListWidget(self) +        self.layersList.addItems( +            layer.name for layer in self._workableLayers) +        if self.layersList.count(): self.layersList.setCurrentRow(0) +        self.layersList.itemDoubleClicked.connect(self.accept) + +        buttonBox = QDialogButtonBox( +            QDialogButtonBox.Ok | QDialogButtonBox.Cancel) +        buttonBox.accepted.connect(self.accept) +        buttonBox.rejected.connect(self.reject) + +        l = 0 +        layout.addWidget(copyBox, l, 0, 1, 2) +        layout.addWidget(moveBox, l, 2, 1, 2) +        layout.addWidget(swapBox, l, 4, 1, 2) +        l += 1 +        layout.addWidget(self.layersList, l, 0, 1, 6) +        l += 1 +        layout.addWidget(buttonBox, l, 0, 1, 6) +        self.setLayout(layout) + +    @classmethod +    def getLayerAndAction(cls, parent, currentGlyph): +        dialog = cls(currentGlyph, parent) +        result = dialog.exec_() +        currentItem = dialog.layersList.currentItem() +        newLayer = None +        if currentItem is not None: +            newLayerName = currentItem.text() +            for layer in dialog._workableLayers: +                if layer.name == newLayerName: +                    newLayer = layer +        action = "Copy" +        for checkBox in dialog.otherCheckBoxes: +            if checkBox.isChecked(): +                action = checkBox.text() +        return (newLayer, action, result) + +  class GenericSettings(object):      def __init__(self, title, parent, callback): @@ -307,7 +365,8 @@ class MainGfxWindow(QMainWindow):          menuBar.addMenu(fileMenu)          glyphMenu = QMenu("&Glyph", self) -        glyphMenu.addAction("&Go to…", self.changeGlyph, "G") +        glyphMenu.addAction("&Go To…", self.changeGlyph, "G") +        glyphMenu.addAction("&Layer Actions…", self.layerActions, "L")          menuBar.addMenu(glyphMenu)          self._displaySettings = DisplayStyleSettings( @@ -364,6 +423,10 @@ class MainGfxWindow(QMainWindow):          self.setWindowTitle(glyph.name, glyph.getParent())          self.adjustSize() +    def layerActions(self): +        if self.view is not None: +            self.view.layerActions() +      def _changeGlyph(self, glyph):          oldView = self.view          # Preserve the selected layer (by setting the glyph from that layer) @@ -2329,6 +2392,35 @@ class GlyphView(QGraphicsView):              component.baseGlyph = newGlyph.name              self._glyph.appendComponent(component) +    def layerActions(self): +        newLayer, action, ok = LayerActionsDialog.getLayerAndAction( +                                   self, self._glyph) +        if ok and newLayer is not None: +            # TODO: whole glyph for now, but consider selection too +            if not self._glyph.name in newLayer: +                newLayer.newGlyph(self._glyph.name) +            otherGlyph = newLayer[self._glyph.name] +            otherGlyph.disableNotifications() +            if action == "Swap": +                tempGlyph = TGlyph() +                otherGlyph.drawPoints(tempGlyph.getPointPen()) +                tempGlyph.width = otherGlyph.width +                otherGlyph.clearContours() +            self._glyph.drawPoints(otherGlyph.getPointPen()) +            otherGlyph.width = self._glyph.width +            if action != "Copy": +                self._glyph.disableNotifications() +                self._glyph.clearContours() +                # XXX: we shouldn't have to do this manually but it seems there +                # is a timing problem +                self._glyph.destroyAllRepresentations() +                if action == "Swap": +                    tempGlyph.drawPoints(self._glyph.getPointPen()) +                    self._glyph.width = tempGlyph.width +                self._glyph.enableNotifications() +            otherGlyph.enableNotifications() + +      def _makeLayerGlyph(self, layer):          name = self._name          glyph = layer.newGlyph(name) | 
