aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/defconQt/featureTextEditor.py7
-rw-r--r--Lib/defconQt/spaceCenter.py62
2 files changed, 48 insertions, 21 deletions
diff --git a/Lib/defconQt/featureTextEditor.py b/Lib/defconQt/featureTextEditor.py
index 5363034..4458ba1 100644
--- a/Lib/defconQt/featureTextEditor.py
+++ b/Lib/defconQt/featureTextEditor.py
@@ -158,7 +158,8 @@ class TextEditor(QPlainTextEdit):
return indent
def keyPressEvent(self, event):
- if event.key() == Qt.Key_Return:
+ key = event.key()
+ if key == Qt.Key_Return:
cursor = self.textCursor()
indentLvl = self.findLineIndentLevel(cursor)
newBlock = False
@@ -200,10 +201,10 @@ class TextEditor(QPlainTextEdit):
cursor.movePosition(QTextCursor.Up)
cursor.movePosition(QTextCursor.EndOfLine)
self.setTextCursor(cursor)
- elif event.key() == Qt.Key_Tab:
+ elif key == Qt.Key_Tab:
cursor = self.textCursor()
cursor.insertText(self._indent)
- elif event.key() == Qt.Key_Backspace:
+ elif key == Qt.Key_Backspace:
cursor = self.textCursor()
cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.KeepAnchor,
len(self._indent))
diff --git a/Lib/defconQt/spaceCenter.py b/Lib/defconQt/spaceCenter.py
index 9fabaa5..320bf0b 100644
--- a/Lib/defconQt/spaceCenter.py
+++ b/Lib/defconQt/spaceCenter.py
@@ -274,6 +274,10 @@ class GlyphsCanvas(QWidget):
self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.update()
+ def setSelected(self, selected):
+ self._selected = selected
+ self.update()
+
def _pointSizeChanged(self, pointSize):
self.ptSize = int(pointSize)
self.calculateScale()
@@ -281,6 +285,7 @@ class GlyphsCanvas(QWidget):
def _glyphsChanged(self, newGlyphs):
self.glyphs = newGlyphs
+ self._selected = None
self.update()
def _sizeEvent(self, event):
@@ -482,15 +487,19 @@ class GlyphCellItemDelegate(QStyledItemDelegate):
return editor
# TODO: implement =... lexer
+ # TODO: Alt+left or Alt+right don't SelectAll of the new cell
+ # cell by default. Implement this.
+ # TODO: cycle b/w editable cell area
def eventFilter(self, editor, event):
if event.type() == QEvent.KeyPress:
chg = None
count = event.count()
- if event.key() == Qt.Key_Up:
+ key = event.key()
+ if key == Qt.Key_Up:
chg = count
- elif event.key() == Qt.Key_Down:
+ elif key == Qt.Key_Down:
chg = -count
- elif not event.key() == Qt.Key_Return:
+ elif not key == Qt.Key_Return:
return False
if chg is not None:
modifiers = event.modifiers()
@@ -518,11 +527,12 @@ class SpaceTable(QTableWidget):
# fillGlyphs() will change this value back
self.setColumnCount(len(self.glyphs)+2)
data = [None, "Width", "Left", "Right"]
- for index, item in enumerate(data):
- cell = SpaceTableWidgetItem(item)
- # don't set ItemIsEditable
- cell.setFlags(Qt.ItemIsEnabled)
- self.setItem(index, 0, cell)
+ self._fgOverride = SpaceTableWidgetItem().foreground()
+ for index, title in enumerate(data):
+ item = SpaceTableWidgetItem(title)
+ item.setFlags(Qt.NoItemFlags)
+ item.setForeground(self._fgOverride)
+ self.setItem(index, 0, item)
# let's use this one column to compute the width of others
self._cellWidth = .5*self.columnWidth(0)
self.setColumnWidth(0, self._cellWidth)
@@ -534,12 +544,11 @@ class SpaceTable(QTableWidget):
self.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed))
self.fillGlyphs()
self.resizeRowsToContents()
+ self.currentItemChanged.connect(self._itemChanged)
self.cellChanged.connect(self._cellEdited)
self.setSelectionMode(QAbstractItemView.SingleSelection)
# edit cell on single click, not double
self.setEditTriggers(QAbstractItemView.CurrentChanged)
- # TODO: investigate changing cell color as in robofont
- # http://stackoverflow.com/a/13926342/2037879
def _glyphsChanged(self, newGlyphs):
self.glyphs = newGlyphs
@@ -557,14 +566,30 @@ class SpaceTable(QTableWidget):
item = int(item)
# -1 because the first col contains descriptive text
glyph = self.glyphs[col-1]
+ # != comparisons avoid making glyph dirty when editor content is unchanged
if row == 1:
- glyph.width = item
+ if item != glyph.width: glyph.width = item
elif row == 2:
- glyph.leftMargin = item
+ if item != glyph.leftMargin: glyph.leftMargin = item
elif row == 3:
- glyph.rightMargin = item
+ if item != glyph.rightMargin: glyph.rightMargin = item
# defcon callbacks do the update
+ def _itemChanged(self, current, previous):
+ cur = current.column()
+ if previous is not None:
+ prev = previous.column()
+ if 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)
+ # TODO: refactor this out into a parent method + callback arg
+ self.parent().canvas.setSelected(cur - 1)
+
def sizeHint(self):
# http://stackoverflow.com/a/7216486/2037879
height = sum(self.rowHeight(k) for k in range(self.rowCount()))
@@ -574,15 +599,16 @@ class SpaceTable(QTableWidget):
return QSize(self.width(), height)
def setCurrentColumn(self, column):
- self.setCurrentCell(0, column)
+ self.setCurrentCell(1, column)
def fillGlyphs(self):
- def glyphTableWidgetItem(content, blockEdition=False):
+ def glyphTableWidgetItem(content, disableCell=False):
if content is not None: content = str(content)
item = SpaceTableWidgetItem(content)
- if content is None or blockEdition:
- # don't set ItemIsEditable
- item.setFlags(Qt.ItemIsEnabled)
+ if disableCell:
+ item.setFlags(Qt.NoItemFlags)
+ item.setForeground(self._fgOverride)
+ elif content is None: item.setFlags(Qt.ItemIsEnabled)
# TODO: should fields be centered? I find left-aligned more
# natural to read, personally...
#item.setTextAlignment(Qt.AlignCenter)