aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/groupsView.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/defconQt/groupsView.py')
-rw-r--r--Lib/defconQt/groupsView.py91
1 files changed, 48 insertions, 43 deletions
diff --git a/Lib/defconQt/groupsView.py b/Lib/defconQt/groupsView.py
index bec64dc..e6ee932 100644
--- a/Lib/defconQt/groupsView.py
+++ b/Lib/defconQt/groupsView.py
@@ -1,4 +1,4 @@
-from defconQt.fontView import CharacterWidget
+from defconQt.glyphCollectionView import GlyphCollectionWidget
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
@@ -9,12 +9,12 @@ class GroupListWidget(QListWidget):
#self.setAlternatingRowColors(True)
self.setSelectionMode(QAbstractItemView.SingleSelection)
self.setSortingEnabled(True)
-
+
for groupName in groupNames:
item = QListWidgetItem(groupName, self)
item.setFlags(item.flags() | Qt.ItemIsEditable)
#if len(groupNames): self.setCurrentRow(0)
-
+
def keyPressEvent(self, event):
key = event.key()
if key == Qt.Key_Delete:
@@ -36,19 +36,19 @@ class GroupStackWidget(QWidget):
self.upm = font.info.unitsPerEm
self.padding = 10
self.alignRight = False
-
+
def setAlignment(self, alignRight):
self.alignRight = alignRight
self.update()
-
+
def setGlyphs(self, glyphs):
self.glyphs = glyphs
self.maxWidth = max(glyph.width for glyph in self.glyphs) if len(self.glyphs) else 300
self.update()
-
+
def sizeHint(self):
return QSize(self.maxWidth+2*self.padding, 400)
-
+
def paintEvent(self, event):
# TODO: maybe use self.upm*(1+2*BufferHeight) for the denominator as in fontView
scale = self.height() / (self.upm*1.2)
@@ -60,7 +60,7 @@ class GroupStackWidget(QWidget):
painter.setRenderHint(QPainter.Antialiasing)
painter.translate(self.padding, self.padding+(self.ascender*1.2)*scale)
painter.scale(scale, -scale)
-
+
col = QColor(Qt.black)
col.setAlphaF(.2)
for glyph in self.glyphs:
@@ -72,32 +72,38 @@ class GroupStackWidget(QWidget):
painter.fillPath(glyphPath, col)
painter.restore()
-class GroupCharacterWidget(CharacterWidget):
- def __init__(self, font, squareSize=56, scrollArea=None, parent=None):
- super(GroupCharacterWidget, self).__init__(font, squareSize, scrollArea, parent)
- self.columns = 9
- self.scrollArea.setAcceptDrops(True)
- self.scrollArea.dragEnterEvent = self.pipeDragEnterEvent
- self.scrollArea.dropEvent = self.pipeDropEvent
+class GroupCollectionWidget(GlyphCollectionWidget):
+ def __init__(self, parent=None):
+ super(GroupCollectionWidget, self).__init__(parent)
+ self._columns = 9
+ self._scrollArea.setAcceptDrops(True)
+ self._scrollArea.dragEnterEvent = self.pipeDragEnterEvent
+ self._scrollArea.dropEvent = self.pipeDropEvent
+
+ # TODO: upstream this, somehow
+ self.characterDeletionCallback = None
+ self.characterDropCallback = None
self.resize(self.width(), 200)
-
+
# TODO: The standard QListWidget has scrollbar and does not need three times parent call.
# Find out how to handle that properly.
def keyPressEvent(self, event):
if event.key() == Qt.Key_Delete:
- self.parent().parent().parent().characterDeleteEvent(self._selection)
+ if self.characterDeletionCallback is not None:
+ self.characterDeletionCallback(self.selection)
event.accept()
else:
- super(GroupCharacterWidget, self).keyPressEvent(event)
-
+ super(GroupCollectionWidget, self).keyPressEvent(event)
+
def pipeDragEnterEvent(self, event):
# TODO: the problem with text/plain is that any sort of text can get here.
# (It allows direct compatibility with featureTextEditor though.)
if (event.mimeData().hasText()):
event.acceptProposedAction()
-
+
def pipeDropEvent(self, event):
- self.parent().parent().parent().characterDropEvent(event)
+ if self.characterDropCallback is not None:
+ self.characterDropCallback(event)
class GroupsWindow(QWidget):
leftGroups = ["@MMK_L", "public.kern1"]
@@ -112,9 +118,9 @@ class GroupsWindow(QWidget):
self.groupsList.currentItemChanged.connect(self._groupChanged)
self.groupsList.itemChanged.connect(self._groupRenamed)
self.groupsList.setFocus(True)
-
+
self.stackWidget = GroupStackWidget(self.font, parent=self)
-
+
self.addGroupButton = QPushButton("+", self)
self.addGroupButton.clicked.connect(self._groupAdd)
self.removeGroupButton = QPushButton("−", self)
@@ -126,12 +132,12 @@ class GroupsWindow(QWidget):
self.alignLeftBox.setChecked(True)
self.alignLeftBox.toggled.connect(self._alignmentChanged)
self._autoDirection = True
-
- self.scrollArea = QScrollArea(self)
- self.characterWidget = GroupCharacterWidget(self.font, scrollArea=self.scrollArea, parent=self)
- self.scrollArea.setWidget(self.characterWidget)
+
+ self.collectionWidget = GroupCollectionWidget(parent=self)
+ self.collectionWidget.characterDeletionCallback = self.characterDeleteEvent
+ self.collectionWidget.characterDropCallback = self.characterDropEvent
self._cachedName = None
-
+
layout = QGridLayout(self)
layout.addWidget(self.groupsList, 0, 0, 5, 4)
layout.addWidget(self.stackWidget, 0, 4, 5, 4)
@@ -139,17 +145,17 @@ class GroupsWindow(QWidget):
layout.addWidget(self.removeGroupButton, 5, 3)
layout.addWidget(self.alignLeftBox, 5, 4)
layout.addWidget(self.alignRightBox, 5, 7)
- layout.addWidget(self.scrollArea, 6, 0, 4, 8)
+ layout.addWidget(self.collectionWidget.scrollArea(), 6, 0, 4, 8)
# TODO: calib this more
layout.setColumnStretch(4, 1)
self.setLayout(layout)
-
- self.setWindowTitle("%s%s%s%s" % ("Groups window – ", self.font.info.familyName, " ", self.font.info.styleName))
-
+
+ self.setWindowTitle("Groups window – %s %s" % (self.font.info.familyName, self.font.info.styleName))
+
def _alignmentChanged(self):
alignRight = self.alignRightBox.isChecked()
self.stackWidget.setAlignment(alignRight)
-
+
def _groupAdd(self):
groupName = "New group"
if groupName in self.font.groups:
@@ -163,7 +169,7 @@ class GroupsWindow(QWidget):
self.groupsList.setCurrentItem(item)
self.groupsList.editItem(item)
self.removeGroupButton.setEnabled(True)
-
+
def _groupChanged(self):
self._cachedName = self.groupsList.currentItem().text()
if self._autoDirection:
@@ -180,23 +186,22 @@ class GroupsWindow(QWidget):
if gName in self.font:
glyphs.append(self.font[gName])
self.stackWidget.setGlyphs(glyphs)
- self.characterWidget.setGlyphs(glyphs)
- self.characterWidget.update()
-
+ self.collectionWidget.glyphs = glyphs
+
def _groupRenamed(self):
newKey = self.groupsList.currentItem()
if newKey is None: return
newKey = newKey.text()
self.font.groups[newKey] = self.font.groups[self._cachedName]
del self.font.groups[self._cachedName]
-
+
def _groupDelete(self):
newKey = self.groupsList.currentItem().text()
del self.font.groups[newKey]
self.groupsList.takeItem(self.groupsList.currentRow())
if not self.font.groups.keys(): self.removeGroupButton.setEnabled(False)
self._groupChanged()
-
+
def characterDeleteEvent(self, selection):
currentGroup = self.groupsList.currentItem().text()
currentGroupList = self.font.groups[currentGroup]
@@ -206,7 +211,7 @@ class GroupsWindow(QWidget):
del currentGroupList[key]
self.font.groups[currentGroup] = currentGroupList
self._groupChanged()
-
+
def characterDropEvent(self, event):
currentGroup = self.groupsList.currentItem()
if currentGroup is None: return
@@ -220,11 +225,11 @@ class GroupsWindow(QWidget):
self.font.groups[currentGroup] = currentGroupList
event.acceptProposedAction()
self._groupChanged()
-
+
def resizeEvent(self, event):
if self.isVisible():
margins = self.layout().contentsMargins()
width = event.size().width() - (margins.left() + margins.right())
- self.characterWidget._sizeEvent(width)
+ self.collectionWidget._sizeEvent(width)
self.stackWidget.update()
- super(GroupsWindow, self).resizeEvent(event) \ No newline at end of file
+ super(GroupsWindow, self).resizeEvent(event)