aboutsummaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAdrien Tétar2015-10-31 13:10:21 +0100
committerAdrien Tétar2015-10-31 13:10:21 +0100
commit4b99df8bb0177a871feec1f78ef9ee35b8aab48d (patch)
tree4455d3e913d8f7133e728ccd4755791dc6cb7c33 /Lib
parent16c2f16dcdb17c997f2153a89a423c4e1ca86f79 (diff)
downloadtrufont-4b99df8bb0177a871feec1f78ef9ee35b8aab48d.tar.bz2
fontView: use font.glyphOrder + notifications
Diffstat (limited to 'Lib')
-rw-r--r--Lib/defconQt/fontView.py53
-rw-r--r--Lib/defconQt/objects/defcon.py4
2 files changed, 36 insertions, 21 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py
index c33f8c3..6bc5216 100644
--- a/Lib/defconQt/fontView.py
+++ b/Lib/defconQt/fontView.py
@@ -938,14 +938,17 @@ class MainWindow(QMainWindow):
def _set_font(self, font):
if self._font is not None:
self._font.removeObserver(self, "Font.Changed")
+ self._font.removeObserver(self, "Font.GlyphOrderChanged")
self._font = font
self._font.addObserver(self, "_fontChanged", "Font.Changed")
- if "public.glyphOrder" in self._font.lib:
- self.sortDescriptor = GlyphSet(
- self._font.lib["public.glyphOrder"])
- else:
+ self._font.addObserver(
+ self, "_glyphOrderChanged","Font.GlyphOrderChanged")
+ if self._font.glyphOrder is None:
# TODO: cannedDesign or carry sortDescriptor from previous font?
self.sortDescriptor = cannedDesign
+ else:
+ # use the glyphOrder from the font
+ self.sortDescriptor = None
font = property(_get_font, _set_font, doc="The fontView font. Subscribes \
to the new font, updates the sorting order and cells widget when set.")
@@ -954,21 +957,13 @@ class MainWindow(QMainWindow):
return self._sortDescriptor
def _set_sortDescriptor(self, desc):
- if isinstance(desc, GlyphSet):
- glyphs = []
- for glyphName in desc.glyphNames:
- if glyphName in self._font:
- glyphs.append(self._font[glyphName])
- if len(glyphs) < len(self._font):
- # if some glyphs in the font are not present in the glyph
- # order, loop again to add them at the end
- for glyph in self._font:
- if glyph not in glyphs:
- glyphs.append(glyph)
+ if desc is None:
+ self.updateGlyphsFromFont()
+ elif isinstance(desc, GlyphSet):
+ self._font.glyphOrder = desc.glyphNames
else:
- glyphs = [self._font[k] for k in self._font.unicodeData
- .sortGlyphNames(self._font.keys(), desc)]
- self.collectionWidget.glyphs = glyphs
+ self._font.glyphOrder = self._font.unicodeData.sortGlyphNames(
+ self._font.keys(), desc)
self._sortDescriptor = desc
sortDescriptor = property(_get_sortDescriptor, _set_sortDescriptor,
@@ -1040,7 +1035,27 @@ class MainWindow(QMainWindow):
def _fontChanged(self, notification):
self.collectionWidget.update()
- self.setWindowModified(True)
+ self.setWindowModified(self._font.dirty)
+
+ def _glyphOrderChanged(self, notification):
+ self.updateGlyphsFromFont()
+
+ def updateGlyphsFromFont(self):
+ glyphOrder = self._font.glyphOrder
+ if len(glyphOrder):
+ glyphs = []
+ for glyphName in glyphOrder:
+ if glyphName in self._font:
+ glyphs.append(self._font[glyphName])
+ if len(glyphs) < len(self._font):
+ # if some glyphs in the font are not present in the glyph
+ # order, loop again to add them at the end
+ for glyph in self._font:
+ if glyph not in glyphs:
+ glyphs.append(glyph)
+ else:
+ glyphs = self._font[:]
+ self.collectionWidget.glyphs = glyphs
def _glyphOpened(self, glyph):
glyphViewWindow = MainGfxWindow(glyph, self)
diff --git a/Lib/defconQt/objects/defcon.py b/Lib/defconQt/objects/defcon.py
index 24f585f..e9c3470 100644
--- a/Lib/defconQt/objects/defcon.py
+++ b/Lib/defconQt/objects/defcon.py
@@ -117,8 +117,8 @@ class TPoint(Point):
class GlyphSet(object):
__slots__ = ["_name", "_glyphNames"]
- def __init__(self, glyphNames, name=None):
- self._name = name
+ def __init__(self, glyphNames, name):
+ self._name = str(name)
self._glyphNames = glyphNames
def _get_name(self):