aboutsummaryrefslogtreecommitdiffstats
path: root/Lib/defconQt/fontView.py
diff options
context:
space:
mode:
authorAdrien Tétar2015-10-04 15:47:52 +0200
committerAdrien Tétar2015-10-04 15:54:23 +0200
commitb11dbffcf986b527cbb280e0dc6f655033e6aa2b (patch)
treef629b1f2c18e50f03e59850e165cf935ac415141 /Lib/defconQt/fontView.py
parent8c420771a2427127bd849e7d8dd88762b8f34668 (diff)
downloadtrufont-b11dbffcf986b527cbb280e0dc6f655033e6aa2b.tar.bz2
fontView: add Recent Files support
Diffstat (limited to 'Lib/defconQt/fontView.py')
-rw-r--r--Lib/defconQt/fontView.py67
1 files changed, 58 insertions, 9 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py
index 96b6a81..b3c4757 100644
--- a/Lib/defconQt/fontView.py
+++ b/Lib/defconQt/fontView.py
@@ -57,6 +57,8 @@ class Application(QApplication):
def currentFont(self):
return self.currentMainWindow._font
+MAX_RECENT_FILES = 6
+
# TODO: implement Frederik's Glyph Construction Builder
class AddGlyphDialog(QDialog):
def __init__(self, currentGlyphs=None, parent=None):
@@ -267,6 +269,8 @@ class SortDialog(QDialog):
class MainWindow(QMainWindow):
def __init__(self, font):
super(MainWindow, self).__init__()
+ self.setAttribute(Qt.WA_DeleteOnClose)
+
squareSize = 56
self.collectionWidget = GlyphCollectionWidget(self)
self._font = None
@@ -277,12 +281,20 @@ class MainWindow(QMainWindow):
self.collectionWidget.setFocus()
menuBar = self.menuBar()
+ settings = QSettings()
# TODO: make shortcuts platform-independent
fileMenu = QMenu("&File", self)
fileMenu.addAction("&New…", self.newFile, QKeySequence.New)
fileMenu.addAction("&Open…", self.openFile, QKeySequence.Open)
- # TODO: add functionality
- #fileMenu.addMenu(QMenu("Open &Recent...", self))
+ # recent files
+ self.recentFilesMenu = QMenu("Open &Recent...", self)
+ for i in range(MAX_RECENT_FILES):
+ action = QAction(self.recentFilesMenu)
+ action.setVisible(False)
+ action.triggered.connect(self.openRecentFont)
+ self.recentFilesMenu.addAction(action)
+ self.updateRecentFiles()
+ fileMenu.addMenu(self.recentFilesMenu)
fileMenu.addSeparator()
fileMenu.addAction("&Save", self.saveFile, QKeySequence.Save)
fileMenu.addAction("Save &As…", self.saveFileAs, QKeySequence.SaveAs)
@@ -311,6 +323,8 @@ class MainWindow(QMainWindow):
editMenu.addAction("Copy", self.copy, QKeySequence.Copy)
editMenu.addAction("Copy as Component", self.copyAsComponent, "Ctrl+Alt+c")
editMenu.addAction("Paste", self.paste, QKeySequence.Paste)
+ editMenu.addSeparator()
+ editMenu.addAction("Settings…", self.settings)
menuBar.addMenu(editMenu)
fontMenu = QMenu("&Font", self)
@@ -350,6 +364,7 @@ class MainWindow(QMainWindow):
self.setCentralWidget(self.collectionWidget.scrollArea())
self.resize(605, 430)
+ self.setCurrentFile(font.path)
self.setWindowTitle()
def newFile(self):
@@ -370,20 +385,23 @@ class MainWindow(QMainWindow):
"UFO Fonts (metainfo.plist)")
if not ok: return
if path:
- # TODO: error handling
- path = os.path.dirname(path)
- # TODO: I note that a change of self.font often goes with setWindowTitle().
- # Be more DRY.
- #self.font = TFont(path)
- #self.setWindowTitle()
+ if ".plist" in path:
+ path = os.path.dirname(path)
for window in QApplication.topLevelWidgets():
if isinstance(window, MainWindow) and window._font.path == path:
window.raise_()
return
- font = TFont(path)
+ try:
+ font = TFont(path)
+ except:
+ return
window = MainWindow(font)
window.show()
+ def openRecentFont(self):
+ fontPath = self.sender().toolTip()
+ self.openFile(fontPath)
+
def saveFile(self, path=None):
if path is None and self.font.path is None:
self.saveFileAs()
@@ -398,6 +416,7 @@ class MainWindow(QMainWindow):
self.font.dirty = False
for glyph in self.font:
glyph.dirty = False
+ self.setCurrentFile(path)
self.setWindowModified(False)
def saveFileAs(self):
@@ -408,6 +427,36 @@ class MainWindow(QMainWindow):
self.setWindowTitle()
#return ok
+ def setCurrentFile(self, path):
+ settings = QSettings()
+ recentFiles = settings.value("core/recentFiles", [], type=str)
+ if path in recentFiles:
+ recentFiles.remove(path)
+ recentFiles.insert(0, path)
+ while len(recentFiles) > MAX_RECENT_FILES:
+ del recentFiles[-1]
+ settings.setValue("core/recentFiles", recentFiles)
+ for window in QApplication.topLevelWidgets():
+ if isinstance(window, MainWindow):
+ window.updateRecentFiles()
+
+ def updateRecentFiles(self):
+ settings = QSettings()
+ recentFiles = settings.value("core/recentFiles", [], type=str)
+ count = min(len(recentFiles), MAX_RECENT_FILES)
+ actions = self.recentFilesMenu.actions()
+ for index, recentFile in enumerate(recentFiles[:count]):
+ action = actions[index]
+ shortName = os.path.basename(recentFile.rstrip(os.sep))
+
+ action.setText(shortName)
+ action.setToolTip(recentFile)
+ action.setVisible(True)
+ for index in range(count, MAX_RECENT_FILES):
+ actions[index].setVisible(False)
+
+ self.recentFilesMenu.setEnabled(len(recentFiles))
+
def closeEvent(self, event):
ok = self.maybeSaveBeforeExit()
if ok: