diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index 7cbc6a25fe..61c11597ed 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -10,7 +10,7 @@ import tempfile, shutil from PyQt4.Qt import QObject -from calibre.gui2 import error_dialog +from calibre.gui2 import error_dialog, choose_files from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ebooks.oeb.polish.main import SUPPORTED from calibre.ebooks.oeb.polish.container import get_container, clone_container @@ -37,7 +37,17 @@ class Boss(QObject): # TODO: Implement this return True - def open_book(self, path): + def open_book(self, path=None): + if not self.check_dirtied(): + return + + if not hasattr(path, 'rpartition'): + path = choose_files(self.gui, 'open-book-for-tweaking', _('Choose book'), + [(_('Books'), [x.lower() for x in SUPPORTED])], all_files=False, select_only_single_file=True) + if not path: + return + path = path[0] + ext = path.rpartition('.')[-1].upper() if ext not in SUPPORTED: return error_dialog(self.gui, _('Unsupported format'), @@ -45,9 +55,6 @@ class Boss(QObject): ' Convert your book to one of these formats first.') % _(' and ').join(sorted(SUPPORTED)), show=True) - if not self.check_dirtied(): - return - self.container_count = -1 if self.tdir: shutil.rmtree(self.tdir, ignore_errors=True) diff --git a/src/calibre/gui2/tweak_book/ui.py b/src/calibre/gui2/tweak_book/ui.py index a6e2c6c852..394a2ef4b4 100644 --- a/src/calibre/gui2/tweak_book/ui.py +++ b/src/calibre/gui2/tweak_book/ui.py @@ -6,13 +6,14 @@ from __future__ import (unicode_literals, division, absolute_import, __license__ = 'GPL v3' __copyright__ = '2013, Kovid Goyal ' -from PyQt4.Qt import QDockWidget, Qt, QLabel, QIcon +from PyQt4.Qt import QDockWidget, Qt, QLabel, QIcon, QAction from calibre.gui2.main_window import MainWindow from calibre.gui2.tweak_book import current_container from calibre.gui2.tweak_book.file_list import FileListWidget from calibre.gui2.tweak_book.job import BlockingJob from calibre.gui2.tweak_book.boss import Boss +from calibre.gui2.keyboard import Manager as KeyboardManager class Main(MainWindow): @@ -28,12 +29,11 @@ class Main(MainWindow): self.container = None self.current_metadata = None self.blocking_job = BlockingJob(self) + self.keyboard = KeyboardManager(parent=self, config_name='shortcuts/tweak') - self.file_list_dock = d = QDockWidget(_('&Files Browser'), self) - d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) - self.file_list = FileListWidget(d) - d.setWidget(self.file_list) - self.addDockWidget(Qt.LeftDockWidgetArea, d) + self.create_actions() + self.create_menubar() + self.create_docks() self.status_bar = self.statusBar() self.l = QLabel('Placeholder') @@ -41,6 +41,35 @@ class Main(MainWindow): self.setCentralWidget(self.l) self.boss(self) + self.keyboard.finalize() + + def create_actions(self): + group = _('Global Actions') + + def reg(icon, text, target, sid, keys, description): + ac = QAction(QIcon(I(icon)), text, self) + ac.triggered.connect(target) + if isinstance(keys, type('')): + keys = (keys,) + self.keyboard.register_shortcut( + sid, unicode(ac.text()), default_keys=keys, description=description, action=ac, group=group) + self.addAction(ac) + return ac + + self.action_open_book = reg('document_open.png', _('Open &book'), self.boss.open_book, 'open-book', 'Ctrl+O', _('Open a new book')) + + def create_menubar(self): + b = self.menuBar() + f = b.addMenu(_('&File')) + f.addAction(self.action_open_book) + + def create_docks(self): + self.file_list_dock = d = QDockWidget(_('&Files Browser'), self) + d.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) + self.file_list = FileListWidget(d) + d.setWidget(self.file_list) + self.addDockWidget(Qt.LeftDockWidgetArea, d) + def resizeEvent(self, ev): self.blocking_job.resize(ev.size()) return super(Main, self).resizeEvent(ev)