diff options
| author | Adrien Tétar | 2015-09-29 10:44:58 +0200 |
|---|---|---|
| committer | Adrien Tétar | 2015-09-29 11:48:28 +0200 |
| commit | 2675fa8275a60bdd613de40e5d61f9947b856152 (patch) | |
| tree | 65a367c80689f65043b079c5767a6e47875f11c6 /Lib/defconQt/fontView.py | |
| parent | 6b4593337cd4626b5b780d2774013063f537e793 (diff) | |
| download | trufont-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.py | 60 |
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() |
