aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/fontView.py
diff options
context:
space:
mode:
authorAdrien Tétar2015-09-29 10:44:58 +0200
committerAdrien Tétar2015-09-29 11:48:28 +0200
commit2675fa8275a60bdd613de40e5d61f9947b856152 (patch)
tree65a367c80689f65043b079c5767a6e47875f11c6 /Lib/defconQt/fontView.py
parent6b4593337cd4626b5b780d2774013063f537e793 (diff)
downloadtrufont-2675fa8275a60bdd613de40e5d61f9947b856152.tar.bz2
fontView,glyphView: generalize copy/paste and use app-wide clipboard
Diffstat (limited to 'Lib/defconQt/fontView.py')
-rw-r--r--Lib/defconQt/fontView.py60
1 files changed, 38 insertions, 22 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py
index c3e4854..0ab05c7 100644
--- a/Lib/defconQt/fontView.py
+++ b/Lib/defconQt/fontView.py
@@ -3,7 +3,7 @@ from defconQt.fontInfo import TabDialog
from defconQt.glyphCollectionView import GlyphCollectionWidget
from defconQt.glyphView import MainGfxWindow
from defconQt.groupsView import GroupsWindow
-from defconQt.objects.defcon import CharacterSet, TFont
+from defconQt.objects.defcon import CharacterSet, TFont, TGlyph
from defcon import Component
from defconQt.spaceCenter import MainSpaceWindow
from fontTools.agl import AGL2UV
@@ -11,8 +11,7 @@ from fontTools.agl import AGL2UV
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
-import os
-import unicodedata
+import os, pickle, unicodedata
cannedDesign = [
dict(type="cannedDesign", allowPseudoUnicode=True)
@@ -296,8 +295,9 @@ class MainWindow(QMainWindow):
green.setIcon(QIcon(pixmap))
green.setData(QColor(Qt.green))
editMenu.addMenu(markColorMenu)
- editMenu.addAction("Copy Reference", self.copyReference)
- editMenu.addAction("Paste Into", self.pasteInto)
+ editMenu.addAction("Copy", self.copy, QKeySequence.Copy)
+ editMenu.addAction("Copy Reference", self.copyReference, "Ctrl+Alt+c")
+ editMenu.addAction("Paste", self.paste, QKeySequence.Paste)
menuBar.addMenu(editMenu)
fontMenu = QMenu("&Font", self)
@@ -467,27 +467,43 @@ class MainWindow(QMainWindow):
doc="The sortDescriptor. Takes glyphs from the font and sorts them \
when set.")
- def copyReference(self):
+ def copy(self):
+ glyphs = self.collectionWidget.glyphs
selection = self.collectionWidget.selection
- if len(selection) == 0:
- pass # XXX: error dialog: "you need to select a glyph first"
- else:
- self.selectedReferences = selection
+ pickled = []
+ for index in sorted(self.collectionWidget.selection):
+ pickled.append(glyphs[index].serializeForUndo(False))
+ clipboard = QApplication.clipboard()
+ mimeData = QMimeData()
+ mimeData.setData("application/x-defconQt-glyph-data", pickle.dumps(pickled))
+ clipboard.setMimeData(mimeData)
- def pasteInto(self):
+ def copyReference(self):
glyphs = self.collectionWidget.glyphs
selection = self.collectionWidget.selection
- if len(selection) == 0:
- pass # XXX: error dialog: "you need to select a glyph first"
- else:
- try:
- for ref in self.selectedReferences:
- component = Component()
- component.baseGlyph = glyphs[ref].name
- for key in selection:
- glyphs[key].appendComponent(component)
- except:
- pass
+ pickled = []
+ for index in sorted(self.collectionWidget.selection):
+ glyph = glyphs[index]
+ componentGlyph = TGlyph()
+ componentGlyph.width = glyph.width
+ component = Component()
+ component.baseGlyph = glyph.name
+ componentGlyph.appendComponent(component)
+ pickled.append(componentGlyph.serializeForUndo(False))
+ clipboard = QApplication.clipboard()
+ mimeData = QMimeData()
+ mimeData.setData("application/x-defconQt-glyph-data", pickle.dumps(pickled))
+ clipboard.setMimeData(mimeData)
+
+ def paste(self):
+ clipboard = QApplication.clipboard()
+ mimeData = clipboard.mimeData()
+ if mimeData.hasFormat("application/x-defconQt-glyph-data"):
+ data = pickle.loads(mimeData.data("application/x-defconQt-glyph-data"))
+ glyphs = self.collectionWidget.getSelectedGlyphs()
+ if len(data) == len(glyphs):
+ for pickled, glyph in zip(data, glyphs):
+ glyph.deserializeFromUndo(pickled)
def markColor(self):
color = self.sender().data()