Begin bookmark editing
This commit is contained in:
5
TODO
5
TODO
@@ -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
|
||||||
|
25
models.py
25
models.py
@@ -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)
|
||||||
|
62
widgets.py
62
widgets.py
@@ -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)
|
||||||
|
Reference in New Issue
Block a user