Clean up dock creation

This commit is contained in:
Kovid Goyal 2019-08-20 16:01:56 +05:30
parent ded9e3ef70
commit 1f9ac958e2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -9,7 +9,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera
import json import json
import os import os
import sys import sys
from collections import defaultdict from collections import defaultdict, namedtuple
from hashlib import sha256 from hashlib import sha256
from threading import Thread from threading import Thread
@ -35,11 +35,25 @@ from calibre.gui2.viewer.web_view import (
from calibre.utils.date import utcnow from calibre.utils.date import utcnow
from calibre.utils.ipc.simple_worker import WorkerError from calibre.utils.ipc.simple_worker import WorkerError
from calibre.utils.serialize import json_loads from calibre.utils.serialize import json_loads
from polyglot.builtins import as_bytes from polyglot.builtins import as_bytes, itervalues
annotations_dir = os.path.join(config_dir, 'viewer', 'annots') annotations_dir = os.path.join(config_dir, 'viewer', 'annots')
def dock_defs():
Dock = namedtuple('Dock', 'name title initial_area allowed_areas')
ans = {}
def d(title, name, area, allowed=Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea):
ans[name] = Dock(name + '-dock', title, area, allowed)
d(_('Table of Contents'), 'toc', Qt.LeftDockWidgetArea),
d(_('Lookup'), 'lookup', Qt.RightDockWidgetArea),
d(_('Bookmarks'), 'bookmarks', Qt.RightDockWidgetArea)
d(_('Inspector'), 'inspector', Qt.RightDockWidgetArea, Qt.AllDockWidgetAreas)
return ans
def path_key(path): def path_key(path):
return sha256(as_bytes(path)).hexdigest() return sha256(as_bytes(path)).hexdigest()
@ -62,6 +76,7 @@ class EbookViewer(MainWindow):
pass pass
self.current_book_data = {} self.current_book_data = {}
self.book_prepared.connect(self.load_finished, type=Qt.QueuedConnection) self.book_prepared.connect(self.load_finished, type=Qt.QueuedConnection)
self.dock_defs = dock_defs()
def create_dock(title, name, area, areas=Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea): def create_dock(title, name, area, areas=Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea):
ans = QDockWidget(title, self) ans = QDockWidget(title, self)
@ -70,7 +85,10 @@ class EbookViewer(MainWindow):
ans.setVisible(False) ans.setVisible(False)
return ans return ans
self.toc_dock = create_dock(_('Table of Contents'), 'toc-dock', Qt.LeftDockWidgetArea) for dock_def in itervalues(self.dock_defs):
setattr(self, '{}_dock'.format(dock_def.name.partition('-')[0]), create_dock(
dock_def.title, dock_def.name, dock_def.initial_area, dock_def.allowed_areas))
self.toc_container = w = QWidget(self) self.toc_container = w = QWidget(self)
w.l = QVBoxLayout(w) w.l = QVBoxLayout(w)
self.toc = TOCView(w) self.toc = TOCView(w)
@ -80,12 +98,10 @@ class EbookViewer(MainWindow):
w.l.addWidget(self.toc), w.l.addWidget(self.toc_search), w.l.setContentsMargins(0, 0, 0, 0) w.l.addWidget(self.toc), w.l.addWidget(self.toc_search), w.l.setContentsMargins(0, 0, 0, 0)
self.toc_dock.setWidget(w) self.toc_dock.setWidget(w)
self.lookup_dock = create_dock(_('Lookup'), 'lookup-dock', Qt.RightDockWidgetArea)
self.lookup_widget = w = Lookup(self) self.lookup_widget = w = Lookup(self)
self.lookup_dock.visibilityChanged.connect(self.lookup_widget.visibility_changed) self.lookup_dock.visibilityChanged.connect(self.lookup_widget.visibility_changed)
self.lookup_dock.setWidget(w) self.lookup_dock.setWidget(w)
self.bookmarks_dock = create_dock(_('Bookmarks'), 'bookmarks-dock', Qt.RightDockWidgetArea)
self.bookmarks_widget = w = BookmarkManager(self) self.bookmarks_widget = w = BookmarkManager(self)
connect_lambda( connect_lambda(
w.create_requested, self, w.create_requested, self,
@ -94,9 +110,6 @@ class EbookViewer(MainWindow):
self.bookmarks_widget.activated.connect(self.bookmark_activated) self.bookmarks_widget.activated.connect(self.bookmark_activated)
self.bookmarks_dock.setWidget(w) self.bookmarks_dock.setWidget(w)
self.inspector_dock = create_dock(
_('Inspector'), 'inspector', Qt.RightDockWidgetArea, areas=Qt.AllDockWidgetAreas)
self.web_view = WebView(self) self.web_view = WebView(self)
self.web_view.cfi_changed.connect(self.cfi_changed) self.web_view.cfi_changed.connect(self.cfi_changed)
self.web_view.reload_book.connect(self.reload_book) self.web_view.reload_book.connect(self.reload_book)
@ -153,7 +166,7 @@ class EbookViewer(MainWindow):
self.set_full_screen(not self.isFullScreen()) self.set_full_screen(not self.isFullScreen())
# }}} # }}}
# ToC/Bookmarks {{{ # Docks (ToC, Bookmarks, Lookup, etc.) {{{
def toggle_toc(self): def toggle_toc(self):
self.toc_dock.setVisible(not self.toc_dock.isVisible()) self.toc_dock.setVisible(not self.toc_dock.isVisible())