Migrate view action

This commit is contained in:
Kovid Goyal 2010-08-12 19:56:40 -06:00
parent e4b2729e78
commit d9ac3a0e0a
6 changed files with 32 additions and 25 deletions

View File

@ -599,7 +599,11 @@ class ActionDelete(InterfaceActionBase):
class ActionEditMetadata(InterfaceActionBase): class ActionEditMetadata(InterfaceActionBase):
name = 'Edit Metadata' name = 'Edit Metadata'
actual_plugin = 'calibre.gui2.actions.delete:EditMetadataAction' actual_plugin = 'calibre.gui2.actions.edit_metadata:EditMetadataAction'
class ActionView(InterfaceActionBase):
name = 'View'
actual_plugin = 'calibre.gui2.actions.view:ViewAction'
plugins += [ActionAdd, ActionFetchAnnotations, ActionGenerateCatalog, plugins += [ActionAdd, ActionFetchAnnotations, ActionGenerateCatalog,
ActionConvert, ActionDelete, ActionEditMetadata] ActionConvert, ActionDelete, ActionEditMetadata, ActionView]

View File

@ -6,8 +6,9 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, time import os, time
from functools import partial
from PyQt4.Qt import Qt from PyQt4.Qt import Qt, QMenu
from calibre.constants import isosx from calibre.constants import isosx
from calibre.gui2 import error_dialog, Dispatcher, question_dialog, config, \ from calibre.gui2 import error_dialog, Dispatcher, question_dialog, config, \
@ -15,13 +16,24 @@ from calibre.gui2 import error_dialog, Dispatcher, question_dialog, config, \
from calibre.gui2.dialogs.choose_format import ChooseFormatDialog from calibre.gui2.dialogs.choose_format import ChooseFormatDialog
from calibre.utils.config import prefs from calibre.utils.config import prefs
from calibre.ptempfile import PersistentTemporaryFile from calibre.ptempfile import PersistentTemporaryFile
from calibre.gui2.actions import InterfaceAction
class ViewAction(object): class ViewAction(InterfaceAction):
name = 'View' name = 'View'
action_spec = (_('View'), 'view.svg', None, _('V'))
def genesis(self): def genesis(self):
self.persistent_files = []
self.metadata_view_id = None self.metadata_view_id = None
self.qaction.triggered.connect(self.view_book)
self.view_menu = QMenu()
self.view_menu.addAction(_('View'), partial(self.view_book, False))
ac = self.view_menu.addAction(_('View specific format'))
ac.setShortcut((Qt.ControlModifier if isosx else Qt.AltModifier)+Qt.Key_V)
self.qaction.setMenu(self.view_menu)
ac.triggered.connect(self.view_specific_format, type=Qt.QueuedConnection)
def location_selected(self, loc): def location_selected(self, loc):
enabled = loc == 'library' enabled = loc == 'library'
@ -49,12 +61,12 @@ class ViewAction(object):
def book_downloaded_for_viewing(self, job): def book_downloaded_for_viewing(self, job):
if job.failed: if job.failed:
self.device_job_exception(job) self.gui.device_job_exception(job)
return return
self._view_file(job.result) self._view_file(job.result)
def _launch_viewer(self, name=None, viewer='ebook-viewer', internal=True): def _launch_viewer(self, name=None, viewer='ebook-viewer', internal=True):
self.setCursor(Qt.BusyCursor) self.gui.setCursor(Qt.BusyCursor)
try: try:
if internal: if internal:
args = [viewer] args = [viewer]
@ -62,13 +74,13 @@ class ViewAction(object):
args.append('--raise-window') args.append('--raise-window')
if name is not None: if name is not None:
args.append(name) args.append(name)
self.job_manager.launch_gui_app(viewer, self.gui.job_manager.launch_gui_app(viewer,
kwargs=dict(args=args)) kwargs=dict(args=args))
else: else:
open_local_file(name) open_local_file(name)
time.sleep(2) # User feedback time.sleep(2) # User feedback
finally: finally:
self.unsetCursor() self.gui.unsetCursor()
def _view_file(self, name): def _view_file(self, name):
ext = os.path.splitext(name)[1].upper().replace('.', '') ext = os.path.splitext(name)[1].upper().replace('.', '')
@ -85,7 +97,7 @@ class ViewAction(object):
row = rows[0].row() row = rows[0].row()
formats = self.gui.library_view.model().db.formats(row).upper().split(',') formats = self.gui.library_view.model().db.formats(row).upper().split(',')
d = ChooseFormatDialog(self, _('Choose the format to view'), formats) d = ChooseFormatDialog(self.gui, _('Choose the format to view'), formats)
if d.exec_() == d.Accepted: if d.exec_() == d.Accepted:
format = d.format() format = d.format()
self.view_format(row, format) self.view_format(row, format)
@ -162,7 +174,7 @@ class ViewAction(object):
os.path.splitext(path)[1]) os.path.splitext(path)[1])
self.persistent_files.append(pt) self.persistent_files.append(pt)
pt.close() pt.close()
self.device_manager.view_book(\ self.gui.device_manager.view_book(\
Dispatcher(self.book_downloaded_for_viewing), Dispatcher(self.book_downloaded_for_viewing),
path, pt.name) path, pt.name)

View File

@ -122,7 +122,7 @@ class CoverFlowMixin(object):
self.sync_cf_to_listview) self.sync_cf_to_listview)
self.db_images = DatabaseImages(self.library_view.model()) self.db_images = DatabaseImages(self.library_view.model())
self.cover_flow.setImages(self.db_images) self.cover_flow.setImages(self.db_images)
self.cover_flow.itemActivated.connect(self.view_specific_book) self.cover_flow.itemActivated.connect(self.iactions['View'].view_specific_book)
else: else:
self.cover_flow = QLabel('<p>'+_('Cover browser could not be loaded') self.cover_flow = QLabel('<p>'+_('Cover browser could not be loaded')
+'<br>'+pictureflowerror) +'<br>'+pictureflowerror)

View File

@ -118,7 +118,7 @@ class LibraryViewMixin(object): # {{{
for view in ('library', 'memory', 'card_a', 'card_b'): for view in ('library', 'memory', 'card_a', 'card_b'):
view = getattr(self, view+'_view') view = getattr(self, view+'_view')
view.verticalHeader().sectionDoubleClicked.connect(self.view_specific_book) view.verticalHeader().sectionDoubleClicked.connect(self.iactions['View'].view_specific_book)
@ -308,8 +308,8 @@ class LayoutMixin(object): # {{{
self.status_bar.initialize(self.system_tray_icon) self.status_bar.initialize(self.system_tray_icon)
self.book_details.show_book_info.connect(self.show_book_info) self.book_details.show_book_info.connect(self.show_book_info)
self.book_details.files_dropped.connect(self.iactions['Add Books'].files_dropped_on_book) self.book_details.files_dropped.connect(self.iactions['Add Books'].files_dropped_on_book)
self.book_details.open_containing_folder.connect(self.view_folder_for_id) self.book_details.open_containing_folder.connect(self.iactions['View'].view_folder_for_id)
self.book_details.view_specific_format.connect(self.view_format_by_id) self.book_details.view_specific_format.connect(self.iactions['View'].view_format_by_id)
m = self.library_view.model() m = self.library_view.model()
if m.rowCount(None) > 0: if m.rowCount(None) > 0:

View File

@ -13,7 +13,7 @@ from PyQt4.Qt import QIcon, Qt, QWidget, QAction, QToolBar, QSize, \
QObject, QVBoxLayout, QSizePolicy, QLabel, QHBoxLayout, QActionGroup, \ QObject, QVBoxLayout, QSizePolicy, QLabel, QHBoxLayout, QActionGroup, \
QMenu, QUrl QMenu, QUrl
from calibre.constants import __appname__, isosx from calibre.constants import __appname__
from calibre.gui2.search_box import SearchBox2, SavedSearchBox from calibre.gui2.search_box import SearchBox2, SavedSearchBox
from calibre.gui2.throbber import ThrobbingButton from calibre.gui2.throbber import ThrobbingButton
from calibre.gui2 import config, open_url, gprefs from calibre.gui2 import config, open_url, gprefs
@ -510,18 +510,10 @@ class MainWindowMixin(object):
self.save_menu.addMenu(self.save_sub_menu) self.save_menu.addMenu(self.save_sub_menu)
self.save_sub_menu.save_fmt.connect(self.save_specific_format_disk) self.save_sub_menu.save_fmt.connect(self.save_specific_format_disk)
self.action_view.triggered.connect(self.view_book)
self.view_menu = QMenu()
self.view_menu.addAction(_('View'), partial(self.view_book, False))
ac = self.view_menu.addAction(_('View specific format'))
ac.setShortcut((Qt.ControlModifier if isosx else Qt.AltModifier)+Qt.Key_V)
self.action_view.setMenu(self.view_menu)
ac.triggered.connect(self.view_specific_format, type=Qt.QueuedConnection)
self.action_open_containing_folder.setShortcut(Qt.Key_O) self.action_open_containing_folder.setShortcut(Qt.Key_O)
self.addAction(self.action_open_containing_folder) self.addAction(self.action_open_containing_folder)
self.action_open_containing_folder.triggered.connect(self.view_folder) self.action_open_containing_folder.triggered.connect(self.iactions['View'].view_folder)
self.action_sync.setShortcut(Qt.Key_D) self.action_sync.setShortcut(Qt.Key_D)
self.action_sync.setEnabled(True) self.action_sync.setEnabled(True)
self.create_device_menu() self.create_device_menu()

View File

@ -149,7 +149,6 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, # {{{
self.verbose = opts.verbose self.verbose = opts.verbose
self.get_metadata = GetMetadata() self.get_metadata = GetMetadata()
self.upload_memory = {} self.upload_memory = {}
self.persistent_files = []
self.metadata_dialogs = [] self.metadata_dialogs = []
self.default_thumbnail = None self.default_thumbnail = None
self.tb_wrapper = textwrap.TextWrapper(width=40) self.tb_wrapper = textwrap.TextWrapper(width=40)