From 16adf57daedacff69ecd1fba9c132e3fb91169a7 Mon Sep 17 00:00:00 2001 From: BasioMeusPuga Date: Sun, 8 Jul 2018 20:20:57 -0400 Subject: [PATCH] Add option to include TOC with bookmarks Shift dock positions --- lector/resources/raw/settings.ui | 11 ++++++++ lector/resources/settingswindow.py | 7 +++++ lector/settings.py | 3 ++ lector/settingsdialog.py | 5 +++- lector/widgets.py | 44 ++++++++++++++++++++---------- 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/lector/resources/raw/settings.ui b/lector/resources/raw/settings.ui index 002105a..91fb4bf 100644 --- a/lector/resources/raw/settings.ui +++ b/lector/resources/raw/settings.ui @@ -213,6 +213,17 @@ Reopen book to see changes + + + + + + Show TOC with Bookmarks + + + + + diff --git a/lector/resources/settingswindow.py b/lector/resources/settingswindow.py index 598a161..a488e0e 100644 --- a/lector/resources/settingswindow.py +++ b/lector/resources/settingswindow.py @@ -123,6 +123,12 @@ class Ui_Dialog(object): self.cachingEnabled.setObjectName("cachingEnabled") self.horizontalLayout_6.addWidget(self.cachingEnabled) self.verticalLayout_3.addLayout(self.horizontalLayout_6) + self.horizontalLayout_12 = QtWidgets.QHBoxLayout() + self.horizontalLayout_12.setObjectName("horizontalLayout_12") + self.tocWithBookmarks = QtWidgets.QCheckBox(self.groupBox_2) + self.tocWithBookmarks.setObjectName("tocWithBookmarks") + self.horizontalLayout_12.addWidget(self.tocWithBookmarks) + self.verticalLayout_3.addLayout(self.horizontalLayout_12) self.horizontalLayout_8 = QtWidgets.QHBoxLayout() self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.horizontalLayout_5 = QtWidgets.QHBoxLayout() @@ -324,6 +330,7 @@ class Ui_Dialog(object): self.hideScrollBars.setText(_translate("Dialog", "Hide scrollbars when reading")) self.cachingEnabled.setToolTip(_translate("Dialog", "Greatly reduces page transition time at the cost of more memory")) self.cachingEnabled.setText(_translate("Dialog", "Cache comic / pdf pages")) + self.tocWithBookmarks.setText(_translate("Dialog", "Show TOC with Bookmarks")) self.languageLabel.setText(_translate("Dialog", "Dictionary language")) self.scrollSpeedLabel.setText(_translate("Dialog", "Scroll speed")) self.newAnnotation.setToolTip(_translate("Dialog", "New")) diff --git a/lector/settings.py b/lector/settings.py index 4e6d7fa..7c9f257 100644 --- a/lector/settings.py +++ b/lector/settings.py @@ -119,6 +119,8 @@ class Settings: 'cachingEnabled', 'True').capitalize()) self.parent.settings['hide_scrollbars'] = literal_eval(self.settings.value( 'hideScrollBars', 'False').capitalize()) + self.parent.settings['toc_with_bookmarks'] = literal_eval(self.settings.value( + 'tocWithBookmarks', 'False').capitalize()) self.parent.settings['scroll_speed'] = int(self.settings.value('scrollSpeed', 7)) self.parent.settings['consider_read_at'] = int(self.settings.value('considerReadAt', 95)) self.parent.settings['attenuate_titles'] = literal_eval(self.settings.value( @@ -201,6 +203,7 @@ class Settings: self.settings.setValue('cachingEnabled', str(current_settings['caching_enabled'])) self.settings.setValue('hideScrollBars', str(current_settings['hide_scrollbars'])) self.settings.setValue('attenuateTitles', str(current_settings['attenuate_titles'])) + self.settings.setValue('tocWithBookmarks', str(current_settings['toc_with_bookmarks'])) self.settings.setValue('scrollSpeed', current_settings['scroll_speed']) self.settings.setValue('considerReadAt', current_settings['consider_read_at']) self.settings.endGroup() diff --git a/lector/settingsdialog.py b/lector/settingsdialog.py index 08a4107..ea470e7 100644 --- a/lector/settingsdialog.py +++ b/lector/settingsdialog.py @@ -96,6 +96,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.cachingEnabled.setChecked(self.main_window.settings['caching_enabled']) self.hideScrollBars.setChecked(self.main_window.settings['hide_scrollbars']) self.attenuateTitles.setChecked(self.main_window.settings['attenuate_titles']) + self.tocWithBookmarks.setChecked(self.main_window.settings['toc_with_bookmarks']) self.scrollSpeedSlider.setValue(self.main_window.settings['scroll_speed']) self.readAtPercent.setValue(self.main_window.settings['consider_read_at']) @@ -107,6 +108,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): self.cachingEnabled.clicked.connect(self.manage_checkboxes) self.hideScrollBars.clicked.connect(self.manage_checkboxes) self.attenuateTitles.clicked.connect(self.manage_checkboxes) + self.tocWithBookmarks.clicked.connect(self.manage_checkboxes) self.scrollSpeedSlider.valueChanged.connect(self.change_scroll_speed) self.readAtPercent.valueChanged.connect(self.change_read_at) @@ -374,7 +376,8 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog): 'performCulling': 'perform_culling', 'cachingEnabled': 'caching_enabled', 'hideScrollBars': 'hide_scrollbars', - 'attenuateTitles': 'attenuate_titles'} + 'attenuateTitles': 'attenuate_titles', + 'tocWithBookmarks': 'toc_with_bookmarks'} self.main_window.settings[ sender_dict[sender]] = not self.main_window.settings[sender_dict[sender]] diff --git a/lector/widgets.py b/lector/widgets.py index 18d1eae..5ee21d5 100644 --- a/lector/widgets.py +++ b/lector/widgets.py @@ -150,7 +150,12 @@ class Tab(QtWidgets.QWidget): # Create the dock widget for context specific display self.bookmarkDock = PliantDockWidget(self.main_window, 'bookmarks', self.contentView) - self.bookmarkDock.setWindowTitle(self._translate('Tab', 'Bookmarks')) + + title_string = self._translate('Tab', 'Bookmarks') + if self.main_window.settings['toc_with_bookmarks']: + title_string = self._translate('Tab', 'TOC + Bookmarks') + self.bookmarkDock.setWindowTitle(title_string) + self.bookmarkDock.setFeatures(QtWidgets.QDockWidget.DockWidgetClosable) self.bookmarkDock.hide() @@ -505,11 +510,11 @@ class Tab(QtWidgets.QWidget): # In case no parent item exists bookmarkParent = QtGui.QStandardItem() - bookmarkParent.setData(True, QtCore.Qt.UserRole + 10) # Is Parent - bookmarkParent.setFlags(bookmarkParent.flags() & ~QtCore.Qt.ItemIsEditable) - chapter_name = self.metadata['content'][chapter - 1][0] + bookmarkParent.setData(True, QtCore.Qt.UserRole + 10) # Is Parent + bookmarkParent.setFlags(bookmarkParent.flags() & ~QtCore.Qt.ItemIsEditable) # Is Editable + chapter_name = self.metadata['content'][chapter - 1][0] # Chapter Name bookmarkParent.setData(chapter_name, QtCore.Qt.DisplayRole) - bookmarkParent.setData(chapter, QtCore.Qt.UserRole) + bookmarkParent.setData(chapter, QtCore.Qt.UserRole) # Chapter Number bookmarkParent.appendRow(bookmark) self.bookmarkModel.appendRow(bookmarkParent) @@ -521,9 +526,10 @@ class Tab(QtWidgets.QWidget): if not index.isValid(): return - is_parent = self.bookmarkProxyModel.data( - index, QtCore.Qt.UserRole + 10) + is_parent = self.bookmarkProxyModel.data(index, QtCore.Qt.UserRole + 10) if is_parent: + chapter_number = self.bookmarkProxyModel.data(index, QtCore.Qt.UserRole) + self.main_window.bookToolBar.tocBox.setCurrentIndex(chapter_number - 1) return chapter = self.bookmarkProxyModel.data(index, QtCore.Qt.UserRole) @@ -535,6 +541,16 @@ class Tab(QtWidgets.QWidget): def generate_bookmark_model(self): self.bookmarkModel = QtGui.QStandardItemModel(self) + + if self.main_window.settings['toc_with_bookmarks']: + for chapter_number, i in enumerate(self.metadata['content']): + chapterItem = QtGui.QStandardItem() + chapterItem.setData(i[0], QtCore.Qt.DisplayRole) # Display name + chapterItem.setData(chapter_number + 1, QtCore.Qt.UserRole) # Chapter Number + chapterItem.setData(True, QtCore.Qt.UserRole + 10) # Is Parent + chapterItem.setFlags(chapterItem.flags() & ~QtCore.Qt.ItemIsEditable) # Is Editable + self.bookmarkModel.appendRow(chapterItem) + for i in self.metadata['bookmarks'].items(): description = i[1]['description'] chapter = i[1]['chapter'] @@ -568,8 +584,7 @@ class Tab(QtWidgets.QWidget): if not index.isValid(): return - is_parent = self.bookmarkProxyModel.data( - index, QtCore.Qt.UserRole + 10) + is_parent = self.bookmarkProxyModel.data(index, QtCore.Qt.UserRole + 10) if is_parent: return @@ -614,7 +629,8 @@ class Tab(QtWidgets.QWidget): def sneaky_exit(self): self.contentView.hide() self.main_window.closeEvent() - + + class PliantDockWidget(QtWidgets.QDockWidget): def __init__(self, main_window, intended_for, contentView, parent=None): super(PliantDockWidget, self).__init__() @@ -631,17 +647,17 @@ class PliantDockWidget(QtWidgets.QDockWidget): self.contentView.viewport().rect().topLeft()) desktop_size = QtWidgets.QDesktopWidget().screenGeometry() - dock_y = viewport_topRight.y() + (viewport_height * .10) - dock_height = viewport_height * .80 + dock_y = viewport_topRight.y() # + (viewport_height * .10) + dock_height = viewport_height * .999 if self.intended_for == 'bookmarks': dock_width = desktop_size.width() // 5.5 - dock_x = viewport_topRight.x() - dock_width + 1 + dock_x = viewport_topLeft.x() self.main_window.bookToolBar.bookmarkButton.setChecked(True) elif self.intended_for == 'annotations': dock_width = desktop_size.width() // 5.5 - dock_x = viewport_topLeft.x() + dock_x = viewport_topRight.x() - dock_width + 1 self.main_window.bookToolBar.annotationButton.setChecked(True) elif self.intended_for == 'notes':