diff options
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/defconQt/fontView.py | 47 | ||||
| -rw-r--r-- | Lib/defconQt/objects/colorWidgets.py | 15 | 
2 files changed, 41 insertions, 21 deletions
| diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py index 506c842..ed6214c 100644 --- a/Lib/defconQt/fontView.py +++ b/Lib/defconQt/fontView.py @@ -128,11 +128,11 @@ class Application(QApplication):  MAX_RECENT_FILES = 6 -class InfoPanel(QWidget): +class InspectorWindow(QWidget):      def __init__(self):          super().__init__(flags=Qt.Tool) -        self.setWindowTitle("Info Panel") +        self.setWindowTitle("Inspector Window")          self._blocked = False          self._glyph = None @@ -169,8 +169,10 @@ class InfoPanel(QWidget):          self.rightSideBearingEdit.setMaximumWidth(columnOneWidth)          self.rightSideBearingEdit.setValidator(QIntValidator(self))          markColorLabel = QLabel("Flag:", self) -        self.markColorButton = QPushButton(self) -        self.markColorButton.setMaximumWidth(columnOneWidth) +        self.markColorWidget = ColorVignette(QColor(Qt.white), self) +        self.markColorWidget.colorChanged.connect( +            self.writeMarkColor) +        self.markColorWidget.setMaximumWidth(columnOneWidth)          app = QApplication.instance()          self.updateGlyph()          app.currentGlyphChanged.connect(self.updateGlyph) @@ -191,7 +193,7 @@ class InfoPanel(QWidget):          glyphLayout.addWidget(self.rightSideBearingEdit, l, 3)          l += 1          glyphLayout.addWidget(markColorLabel, l, 0) -        glyphLayout.addWidget(self.markColorButton, l, 1) +        glyphLayout.addWidget(self.markColorWidget, l, 1)          glyphGroup.setLayout(glyphLayout)          transformGroup = QGroupBox("Transform", self) @@ -347,7 +349,7 @@ class InfoPanel(QWidget):          width = None          leftSideBearing = None          rightSideBearing = None -        colorStr = "white" +        markColor = QColor(Qt.white)          if self._glyph is not None:              name = self._glyph.name              unicodes = " ".join("%06X" % u if u > 0xFFFF else "%04X" % @@ -359,16 +361,15 @@ class InfoPanel(QWidget):              if self._glyph.rightMargin is not None:                  rightSideBearing = str(int(self._glyph.rightMargin))              if self._glyph.markColor is not None: -                colorStr = QColor.fromRgbF( -                    *tuple(self._glyph.markColor)).name() +                markColor = QColor.fromRgbF( +                    *tuple(self._glyph.markColor))          self.nameEdit.setText(name)          self.unicodesEdit.setText(unicodes)          self.widthEdit.setText(width)          self.leftSideBearingEdit.setText(leftSideBearing)          self.rightSideBearingEdit.setText(rightSideBearing) -        self.markColorButton.setStyleSheet("background-color: {}; \ -            border: 1px solid black;".format(colorStr)) +        self.markColorWidget.setColor(markColor)      def writeGlyphName(self):          if self._glyph is None: @@ -409,6 +410,10 @@ class InfoPanel(QWidget):          self._glyph.rightMargin = int(self.nameEdit.text())          self._blocked = False +    def writeMarkColor(self): +        color = self.markColorWidget.color() +        self._glyph.markColor = Color(color.getRgbF()) +  class AddGlyphsDialog(QDialog): @@ -416,7 +421,7 @@ class AddGlyphsDialog(QDialog):      def __init__(self, currentGlyphs=None, parent=None):          super(AddGlyphsDialog, self).__init__(parent)          self.setWindowModality(Qt.WindowModal) -        self.setWindowTitle("Add glyphs…") +        self.setWindowTitle("Add Glyphs…")          self.currentGlyphs = currentGlyphs          self.currentGlyphNames = [glyph.name for glyph in currentGlyphs] @@ -719,7 +724,8 @@ class MainWindow(QMainWindow):          menuBar.addMenu(pythonMenu)          windowMenu = QMenu("&Windows", self) -        action = windowMenu.addAction("&Info Panel", self.infoPanel, "Ctrl+I") +        action = windowMenu.addAction( +            "&Inspector Window", self.inspector, "Ctrl+I")          # XXX: we're getting duplicate shortcut when we spawn a new window...          action.setShortcutContext(Qt.ApplicationShortcut)          windowMenu.addAction("&Metrics Window", self.metrics, "Ctrl+Alt+S") @@ -1212,18 +1218,18 @@ class MainWindow(QMainWindow):          else:              app.scriptingWindow.show() -    def infoPanel(self): +    def inspector(self):          app = QApplication.instance() -        if not hasattr(app, 'infoPanelWindow'): -            app.infoPanelWindow = InfoPanel() -            app.infoPanelWindow.show() -        elif app.infoPanelWindow.isVisible(): +        if not hasattr(app, 'inspectorWindow'): +            app.inspectorWindow = InspectorWindow() +            app.inspectorWindow.show() +        elif app.inspectorWindow.isVisible():              # TODO: do this only if the widget is user-visible, otherwise the              # key press feels as if it did nothing              # toggle -            app.infoPanelWindow.close() +            app.inspectorWindow.close()          else: -            app.infoPanelWindow.show() +            app.inspectorWindow.show()      def sortGlyphs(self):          sortDescriptor, ok = SortDialog.getDescriptor(self, @@ -1596,6 +1602,7 @@ class MiscTab(QTabWidget):          for name, color in entries.items():              modelIndex = self.markColorModel.index(index, 0)              widget = ColorVignette(color, self) +            widget.setMargins(2, 2, 2, 2)              self.markColorView.setIndexWidget(modelIndex, widget)              item = QStandardItem()              item.setText(name) @@ -1636,7 +1643,9 @@ class MiscTab(QTabWidget):          self.markColorModel.setItem(index, 1, item)          modelIndex = self.markColorModel.index(index, 0) +        # TODO: not DRY with ctor          widget = ColorVignette(QColor(), self) +        widget.setMargins(2, 2, 2, 2)          self.markColorView.setIndexWidget(modelIndex, widget)          itemIndex = self.markColorModel.index(index, 1) diff --git a/Lib/defconQt/objects/colorWidgets.py b/Lib/defconQt/objects/colorWidgets.py index f9708c7..f8b4010 100644 --- a/Lib/defconQt/objects/colorWidgets.py +++ b/Lib/defconQt/objects/colorWidgets.py @@ -1,4 +1,4 @@ -from PyQt5.QtCore import QSize, Qt +from PyQt5.QtCore import pyqtSignal, QSize, Qt  from PyQt5.QtWidgets import (QColorDialog, QStyle, QStyleOptionFrame,                               QStylePainter, QWidget) @@ -11,9 +11,12 @@ class ColorVignette(QWidget):      Inspired by ColorPreview and ColorSelector, by Mattia Basaglia.      """ +    colorChanged = pyqtSignal() +      def __init__(self, color, parent=None):          super().__init__(parent)          self._color = color +        self._margins = (0, 2, 0, -2)          self._readOnly = False      def color(self): @@ -31,6 +34,14 @@ class ColorVignette(QWidget):          ok = dialog.exec_()          if ok:              self.setColor(dialog.currentColor()) +            self.colorChanged.emit() + +    def margins(self): +        dx1, dy1, dx2, dy2 = self._margins +        return (dx1, dy1, -dx2, -dy2) + +    def setMargins(self, left, top, right, bottom): +        self._margins = (left, top, -right, -bottom)      def readOnly(self):          return self._readOnly @@ -43,7 +54,7 @@ class ColorVignette(QWidget):          panel.initFrom(self)          panel.lineWidth = 2          panel.midLineWidth = 0 -        panel.rect = panel.rect.adjusted(2, 2, -2, -2) +        panel.rect = panel.rect.adjusted(*self._margins)          panel.state = panel.state | QStyle.State_Sunken          self.style().drawPrimitive(QStyle.PE_Frame, panel, painter, self)          r = self.style().subElementRect(QStyle.SE_FrameContents, panel, self) | 
