diff options
| author | Adrien Tétar | 2015-07-17 21:16:35 +0200 |
|---|---|---|
| committer | Adrien Tétar | 2015-07-17 21:16:35 +0200 |
| commit | b6ead7e3b27d2bad9663235b16cf0e8de7b1fe54 (patch) | |
| tree | 70c4f90973b8a911719653eb437104604682ae4b | |
| parent | 0bef879f6d5a9bf46b7aac548b97a7e9fdb889d4 (diff) | |
| download | trufont-b6ead7e3b27d2bad9663235b16cf0e8de7b1fe54.tar.bz2 | |
spaceCenter: more callbacks and notification blocking, nits
| -rw-r--r-- | Lib/defconQt/spaceCenter.py | 69 |
1 files changed, 48 insertions, 21 deletions
diff --git a/Lib/defconQt/spaceCenter.py b/Lib/defconQt/spaceCenter.py index 89878ad..79b6af3 100644 --- a/Lib/defconQt/spaceCenter.py +++ b/Lib/defconQt/spaceCenter.py @@ -28,8 +28,9 @@ class MainSpaceWindow(QWidget): self.canvas = GlyphsCanvas(self.font, self.glyphs, self.scrollArea, pointSize, self) self.scrollArea.setWidget(self.canvas) self.table = SpaceTable(self.glyphs, self) - self.canvas.setSelectionCallback(self.table.setCurrentGlyph) + self.canvas.setDoubleClickCallback(self._glyphOpened) self.canvas.setPointSizeCallback(self.toolbar.setPointSize) + self.canvas.setSelectionCallback(self.table.setCurrentGlyph) self.table.setSelectionCallback(self.canvas.setSelected) layout = QVBoxLayout(self) @@ -60,14 +61,18 @@ class MainSpaceWindow(QWidget): super(MainSpaceWindow, self).close() def _fontInfoChanged(self, notification): + self.canvas.fetchFontMetrics() self.canvas.update() def _glyphChanged(self, notification): self.canvas.update() - self.table.blockSignals(True) - self.table.fillGlyphs() - self.table.blockSignals(False) + self.table.updateCells() + def _glyphOpened(self, glyph): + from glyphView import MainGfxWindow + glyphViewWindow = MainGfxWindow(self.font, glyph, self.parent()) + glyphViewWindow.show() + def _textChanged(self, newText): # unsubscribe from the old glyphs self._unsubscribeFromGlyphs() @@ -167,6 +172,7 @@ class FontToolBar(QToolBar): self.textField = QLineEdit(string, self) self.comboBox = QComboBox(self) self.comboBox.setEditable(True) + self.comboBox.setValidator(QIntValidator(self)) for p in pointSizes: self.comboBox.addItem(str(p)) self.comboBox.lineEdit().setText(str(pointSize)) @@ -228,12 +234,7 @@ class GlyphsCanvas(QWidget): super(GlyphsCanvas, self).__init__(parent) self.font = font - self.ascender = font.info.ascender - if self.ascender is None: self.ascender = 750 - self.descender = font.info.descender - if self.descender is None: self.descender = 250 - self.upm = font.info.unitsPerEm - if self.upm is None or not self.upm > 0: self.upm = 1000 + self.fetchFontMetrics() self.glyphs = glyphs self.ptSize = pointSize self.calculateScale() @@ -243,6 +244,7 @@ class GlyphsCanvas(QWidget): self._verticalFlip = False self._positions = None self._selected = None + self._doubleClickCallback = None self._pointSizeChangedCallback = None self._selectionChangedCallback = None @@ -284,6 +286,14 @@ class GlyphsCanvas(QWidget): self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.update() + def fetchFontMetrics(self): + self.ascender = self.font.info.ascender + if self.ascender is None: self.ascender = 750 + self.descender = self.font.info.descender + if self.descender is None: self.descender = 250 + self.upm = self.font.info.unitsPerEm + if self.upm is None or not self.upm > 0: self.upm = 1000 + def setGlyphs(self, newGlyphs): self.glyphs = newGlyphs self._selected = None @@ -298,6 +308,7 @@ class GlyphsCanvas(QWidget): self._pointSizeChangedCallback = pointSizeChangedCallback def setSelected(self, selected): + # TODO: this should scroll to selection as well self._selected = selected self.update() @@ -373,6 +384,7 @@ class GlyphsCanvas(QWidget): def mousePressEvent(self, event): # Take focus to quit eventual cell editing + # XXX: shouldnt set focus if we are in input field... self.setFocus(Qt.MouseFocusReason) if event.button() == Qt.LeftButton: if self._verticalFlip: @@ -407,13 +419,13 @@ class GlyphsCanvas(QWidget): def mouseDoubleClickEvent(self, event): if event.button() == Qt.LeftButton and self._selected is not None: - from fontView import MainWindow - # XXX: we are doing glyph -> name and glyphView does it backwards - # stop adding indirection in ctor - MainWindow._glyphOpened(self, self.glyphs[self._selected].name) - event.accept() + if self._doubleClickCallback is not None: + self._doubleClickCallback(self.glyphs[self._selected]) else: super(GlyphCanvas, self).mouseDoubleClickEvent(event) + + def setDoubleClickCallback(self, doubleClickCallback): + self._doubleClickCallback = doubleClickCallback def paintEvent(self, event): linePen = QPen(Qt.black) @@ -563,11 +575,15 @@ class SpaceTable(QTableWidget): self.setSelectionMode(QAbstractItemView.SingleSelection) # edit cell on single click, not double self.setEditTriggers(QAbstractItemView.CurrentChanged) + self._blocked = False self._selectionChangedCallback = None def setGlyphs(self, newGlyphs): self.glyphs = newGlyphs # TODO: we don't need to reallocate cells, split alloc and fill + self.updateCells() + + def updateCells(self): self.blockSignals(True) self.fillGlyphs() self.blockSignals(False) @@ -591,19 +607,24 @@ class SpaceTable(QTableWidget): # defcon callbacks do the update def _itemChanged(self, current, previous): - cur = current.column() + if current is not None: + cur = current.column() if previous is not None: prev = previous.column() - if cur == prev: + if current is not None and cur == prev: return emptyBrush = QBrush(Qt.NoBrush) selectionColor = QColor(235, 235, 235) for i in range(4): if previous is not None: self.item(i, prev).setBackground(emptyBrush) - self.item(i, cur).setBackground(selectionColor) - if self._selectionChangedCallback is not None: - self._selectionChangedCallback(cur - 1) + if current is not None: + self.item(i, cur).setBackground(selectionColor) + if self._selectionChangedCallback is not None and not self._blocked: + if current is not None: + self._selectionChangedCallback(cur - 1) + else: + self._selectionChangedCallback(None) def sizeHint(self): # http://stackoverflow.com/a/7216486/2037879 @@ -614,13 +635,19 @@ class SpaceTable(QTableWidget): return QSize(self.width(), height) def setCurrentGlyph(self, glyphIndex): - self.setCurrentCell(1, glyphIndex+1) + self._blocked = True + if glyphIndex is None: + self.setCurrentItem(None) + else: + self.setCurrentCell(1, glyphIndex+1) + self._blocked = False def setSelectionCallback(self, selectionChangedCallback): self._selectionChangedCallback = selectionChangedCallback def fillGlyphs(self): def glyphTableWidgetItem(content, disableCell=False): + content = round(content) if content is not None: content = str(content) item = SpaceTableWidgetItem(content) if disableCell: |
