aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/spaceCenter.py
diff options
context:
space:
mode:
authorAdrien Tétar2015-10-24 11:59:03 +0200
committerAdrien Tétar2015-10-24 11:59:03 +0200
commitb6d4feaba7c9f3e9b05d1a76187876715538cfce (patch)
tree93f10b8c6a9c28a966f8c5ffd6fad1cfce9a2442 /Lib/defconQt/spaceCenter.py
parent6c473c9ebffd4feb90088dbd95ff3c472fce9130 (diff)
downloadtrufont-b6d4feaba7c9f3e9b05d1a76187876715538cfce.tar.bz2
meta: consolidate callbacks/scrolling/sizing
Diffstat (limited to 'Lib/defconQt/spaceCenter.py')
-rw-r--r--Lib/defconQt/spaceCenter.py46
1 files changed, 25 insertions, 21 deletions
diff --git a/Lib/defconQt/spaceCenter.py b/Lib/defconQt/spaceCenter.py
index 0c9596b..5e5c10c 100644
--- a/Lib/defconQt/spaceCenter.py
+++ b/Lib/defconQt/spaceCenter.py
@@ -4,7 +4,8 @@ from defconQt.glyphView import MainGfxWindow
from getpass import getuser
from PyQt5.QtCore import QEvent, QSettings, QSize, Qt
from PyQt5.QtGui import (
- QBrush, QColor, QIcon, QIntValidator, QKeySequence, QPainter, QPen)
+ QBrush, QColor, QIcon, QIntValidator, QKeySequence, QPainter, QPalette,
+ QPen)
from PyQt5.QtWidgets import (
QAbstractItemView, QActionGroup, QApplication, QComboBox, QLineEdit, QMenu,
QPushButton, QScrollArea, QStyledItemDelegate, QTableWidget,
@@ -35,18 +36,20 @@ class MainSpaceWindow(QWidget):
except:
string = "World"
string = "Hello %s" % string
+ # TODO: drop self.font and self.glyphs, store in the widgets only
self.font = font
self.glyphs = []
self.toolbar = FontToolBar(pointSize, self)
- self.canvas = GlyphsCanvas(self.font, self.glyphs, pointSize, self)
- self.table = SpaceTable(self.glyphs, self)
+ self.canvas = GlyphsCanvas(font, pointSize, self)
+ self.table = SpaceTable(self)
self.toolbar.comboBox.currentIndexChanged[
str].connect(self.canvas.setPointSize)
- self.toolbar.textField.editTextChanged.connect(self._textChanged)
self.canvas.doubleClickCallback = self._glyphOpened
- self.canvas.pointSizeCallback = self.toolbar.setPointSize
+ self.canvas.pointSizeChangedCallback = self.toolbar.setPointSize
self.canvas.selectionChangedCallback = self.table.setCurrentGlyph
self.table.selectionChangedCallback = self.canvas.setSelected
+
+ self.toolbar.textField.editTextChanged.connect(self._textChanged)
self.toolbar.textField.setEditText(string)
app = QApplication.instance()
app.currentGlyphChanged.connect(self._textChanged)
@@ -67,10 +70,9 @@ class MainSpaceWindow(QWidget):
def setupFileMenu(self):
fileMenu = QMenu("&File", self)
- self.menuBar().addMenu(fileMenu)
-
fileMenu.addAction("&Save...", self.save, QKeySequence.Save)
fileMenu.addAction("E&xit", self.close, QKeySequence.Quit)
+ self.menuBar().addMenu(fileMenu)
def close(self):
self.font.info.removeObserver(self, "Info.Changed")
@@ -310,13 +312,13 @@ class FontToolBar(QToolBar):
class GlyphsCanvas(QWidget):
- def __init__(self, font, glyphs, pointSize=defaultPointSize, parent=None):
+ def __init__(self, font, pointSize=defaultPointSize, parent=None):
super(GlyphsCanvas, self).__init__(parent)
# XXX: make canvas font-agnostic as in defconAppkit and use
# glyph.getParent() instead
self.font = font
self.fetchFontMetrics()
- self.glyphs = glyphs
+ self.glyphs = []
self.ptSize = pointSize
self.calculateScale()
self.padding = 10
@@ -518,6 +520,7 @@ class GlyphsCanvas(QWidget):
count += len(self._positions[i])
self._selected = count + index
found = True
+ break
if not found:
self._selected = None
if self.selectionChangedCallback is not None:
@@ -666,21 +669,19 @@ class GlyphCellItemDelegate(QStyledItemDelegate):
class SpaceTable(QTableWidget):
- def __init__(self, glyphs, parent=None):
- self.glyphs = glyphs
- super(SpaceTable, self).__init__(4, len(glyphs) + 1, parent)
+ def __init__(self, parent=None):
+ super(SpaceTable, self).__init__(4, 1, parent)
self.setAttribute(Qt.WA_KeyCompression)
self.setItemDelegate(GlyphCellItemDelegate(self))
- # XXX: dunno why but without updating col count
- # scrollbar reports incorrect height...
- # fillGlyphs() will change this value back
- self.setColumnCount(len(self.glyphs) + 2)
data = [None, "Width", "Left", "Right"]
- self._fgOverride = SpaceTableWidgetItem().foreground()
+ # Don't grey-out disabled cells
+ palette = self.palette()
+ fgColor = palette.color(QPalette.Text)
+ palette.setColor(QPalette.Disabled, QPalette.Text, fgColor)
+ self.setPalette(palette)
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)
@@ -692,6 +693,7 @@ class SpaceTable(QTableWidget):
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self.setSizePolicy(QSizePolicy(
QSizePolicy.Preferred, QSizePolicy.Fixed))
+ self._glyphs = []
self.fillGlyphs()
self.resizeRowsToContents()
self.currentItemChanged.connect(self._itemChanged)
@@ -773,7 +775,7 @@ class SpaceTable(QTableWidget):
def sizeHint(self):
# http://stackoverflow.com/a/7216486/2037879
height = sum(self.rowHeight(k) for k in range(self.rowCount()))
- height += self.horizontalScrollBar().height()
+ height += self.horizontalScrollBar().sizeHint().height()
margins = self.contentsMargins()
height += margins.top() + margins.bottom()
return QSize(self.width(), height)
@@ -799,7 +801,6 @@ class SpaceTable(QTableWidget):
item = SpaceTableWidgetItem(content)
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
@@ -817,6 +818,9 @@ class SpaceTable(QTableWidget):
self.setColumnWidth(index + 1, self._cellWidth)
def wheelEvent(self, event):
+ # A mouse can only scroll along the y-axis. Use x-axis if we have one
+ # (e.g. from touchpad), otherwise use y-axis.
+ angleDelta = event.angleDelta().x() or event.angleDelta().y()
cur = self.horizontalScrollBar().value()
- self.horizontalScrollBar().setValue(cur - event.angleDelta().y() / 120)
+ self.horizontalScrollBar().setValue(cur - angleDelta / 120)
event.accept()