Begin bookmark editing

This commit is contained in:
BasioMeusPuga
2018-02-28 22:57:40 +05:30
parent e3579498a5
commit a2eca6bb14
3 changed files with 69 additions and 23 deletions

5
TODO
View File

@@ -27,7 +27,7 @@ TODO
Information dialog widget Information dialog widget
Context menu: Cache, Read, Edit database, delete, Mark read/unread Context menu: Cache, Read, Edit database, delete, Mark read/unread
Set focus to newly added file Set focus to newly added file
Allow editing of database data through the UI Allow editing of database data through the UI + for Bookmarks
Reading: Reading:
✓ Drop down for TOC ✓ Drop down for TOC
✓ Override the keypress event of the textedit ✓ Override the keypress event of the textedit
@@ -43,6 +43,7 @@ TODO
✓ View and hide toolbar actions in a list ✓ View and hide toolbar actions in a list
✓ Line spacing ✓ Line spacing
✓ Record progress ✓ Record progress
✓ Text alignment
Bookmarks Bookmarks
Set context menu for definitions and the like Set context menu for definitions and the like
Search document using QTextCursor? Search document using QTextCursor?
@@ -59,7 +60,7 @@ TODO
mobi, azw support mobi, azw support
Other: Other:
✓ Define every widget in code ✓ Define every widget in code
Include icons for emblems Include icons for filetype emblems
Bugs: Bugs:
If there are files open and the database is deleted, TypeErrors result If there are files open and the database is deleted, TypeErrors result
Closing a fullscreened contentView does not save settings Closing a fullscreened contentView does not save settings

View File

@@ -22,6 +22,31 @@ from PyQt5 import QtCore, QtWidgets
from resources import pie_chart from resources import pie_chart
class BookmarkProxyModel(QtCore.QSortFilterProxyModel):
def __init__(self, parent=None):
super(BookmarkProxyModel, self).__init__(parent)
self.parent = parent
self.filter_string = None
def setFilterParams(self, filter_text):
self.filter_text = filter_text
def filterAcceptsRow(self, row, parent):
# TODO
# Connect this to the search bar
return True
def setData(self, index, value, role):
if role == QtCore.Qt.EditRole:
source_index = self.mapToSource(index)
self.sourceModel().setData(source_index, value, QtCore.Qt.DisplayRole)
row = index.row()
print(self.parent.metadata['bookmarks'])
return True
class ItemProxyModel(QtCore.QSortFilterProxyModel): class ItemProxyModel(QtCore.QSortFilterProxyModel):
def __init__(self, parent=None): def __init__(self, parent=None):
super(ItemProxyModel, self).__init__(parent) super(ItemProxyModel, self).__init__(parent)

View File

@@ -26,6 +26,7 @@ import os
from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5 import QtWidgets, QtGui, QtCore
from resources import pie_chart from resources import pie_chart
from models import BookmarkProxyModel
class Tab(QtWidgets.QWidget): class Tab(QtWidgets.QWidget):
@@ -89,7 +90,7 @@ class Tab(QtWidgets.QWidget):
QtCore.Qt.ScrollBarAlwaysOff) QtCore.Qt.ScrollBarAlwaysOff)
# Create the dock widget for context specific display # Create the dock widget for context specific display
self.dockWidget = QtWidgets.QDockWidget(self) self.dockWidget = PliantDockWidget(self)
self.dockWidget.setFeatures(QtWidgets.QDockWidget.DockWidgetClosable) self.dockWidget.setFeatures(QtWidgets.QDockWidget.DockWidgetClosable)
self.dockWidget.setFloating(False) self.dockWidget.setFloating(False)
self.dockWidget.hide() self.dockWidget.hide()
@@ -102,9 +103,9 @@ class Tab(QtWidgets.QWidget):
self.dockListView.clicked.connect(self.navigate_to_bookmark) self.dockListView.clicked.connect(self.navigate_to_bookmark)
self.dockWidget.setWidget(self.dockListView) self.dockWidget.setWidget(self.dockListView)
self.bookmark_model = QtGui.QStandardItemModel() self.bookmark_model = QtGui.QStandardItemModel(self)
self.proxy_model = BookmarkProxyModel(self)
self.generate_bookmark_model() self.generate_bookmark_model()
self.dockListView.setModel(self.bookmark_model)
self.generate_keyboard_shortcuts() self.generate_keyboard_shortcuts()
@@ -249,7 +250,6 @@ class Tab(QtWidgets.QWidget):
font, font_size, foreground.name(), background.name())) font, font_size, foreground.name(), background.name()))
# Line spacing # Line spacing
# Iterate over each block using the QTextCursor
# Set line spacing per a block format # Set line spacing per a block format
# This is proportional line spacing so assume a divisor of 100 # This is proportional line spacing so assume a divisor of 100
block_format = QtGui.QTextBlockFormat() block_format = QtGui.QTextBlockFormat()
@@ -298,6 +298,25 @@ class Tab(QtWidgets.QWidget):
self.metadata['bookmarks'].append([ self.metadata['bookmarks'].append([
chapter, search_data, description]) chapter, search_data, description])
self.add_bookmark_to_model(description, chapter, search_data) self.add_bookmark_to_model(description, chapter, search_data)
self.dockWidget.setVisible(True)
def add_bookmark_to_model(self, description, chapter, search_data):
bookmark = QtGui.QStandardItem()
bookmark.setData(description, QtCore.Qt.DisplayRole)
bookmark.setData(chapter, QtCore.Qt.UserRole)
bookmark.setData(search_data, QtCore.Qt.UserRole + 1)
self.bookmark_model.appendRow(bookmark)
def navigate_to_bookmark(self, index):
if not index.isValid():
return
chapter = self.proxy_model.data(index, QtCore.Qt.UserRole)
search_data = self.proxy_model.data(index, QtCore.Qt.UserRole + 1)
self.window().bookToolBar.tocBox.setCurrentIndex(chapter - 1)
self.set_scroll_value(False, search_data)
def generate_bookmark_model(self): def generate_bookmark_model(self):
bookmarks = self.metadata['bookmarks'] bookmarks = self.metadata['bookmarks']
@@ -313,23 +332,12 @@ class Tab(QtWidgets.QWidget):
for i in bookmarks: for i in bookmarks:
self.add_bookmark_to_model(i[2], i[0], i[1]) self.add_bookmark_to_model(i[2], i[0], i[1])
def add_bookmark_to_model(self, description, chapter, search_data): self.generate_proxy_model()
bookmark = QtGui.QStandardItem()
bookmark.setData(description, QtCore.Qt.DisplayRole)
bookmark.setData(chapter, QtCore.Qt.UserRole)
bookmark.setData(search_data, QtCore.Qt.UserRole + 1)
self.bookmark_model.appendRow(bookmark) def generate_proxy_model(self):
self.proxy_model.setSourceModel(self.bookmark_model)
def navigate_to_bookmark(self, index): self.proxy_model.setSortCaseSensitivity(False)
if not index.isValid(): self.dockListView.setModel(self.proxy_model)
return
chapter = self.bookmark_model.data(index, QtCore.Qt.UserRole)
search_data = self.bookmark_model.data(index, QtCore.Qt.UserRole + 1)
self.window().bookToolBar.tocBox.setCurrentIndex(chapter - 1)
self.set_scroll_value(False, search_data)
def hide_mouse(self): def hide_mouse(self):
self.contentView.setCursor(QtCore.Qt.BlankCursor) self.contentView.setCursor(QtCore.Qt.BlankCursor)
@@ -620,7 +628,7 @@ class BookmarkDelegate(QtWidgets.QStyledItemDelegate):
self.parent = parent self.parent = parent
def sizeHint(self, *args): def sizeHint(self, *args):
dockwidget_width = self.parent.width() dockwidget_width = self.parent.width() - 20
return QtCore.QSize(dockwidget_width, 50) return QtCore.QSize(dockwidget_width, 50)
def paint(self, painter, option, index): def paint(self, painter, option, index):
@@ -637,3 +645,15 @@ class BookmarkDelegate(QtWidgets.QStyledItemDelegate):
option.rect, option.rect,
QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.TextWordWrap, QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.TextWordWrap,
' ' + chapter_name) ' ' + chapter_name)
class PliantDockWidget(QtWidgets.QDockWidget):
def __init__(self, parent=None):
super(PliantDockWidget, self).__init__(parent)
self.parent = parent
def showEvent(self, event):
self.parent.window().bookToolBar.bookmarkButton.setChecked(True)
def hideEvent(self, event):
self.parent.window().bookToolBar.bookmarkButton.setChecked(False)