Bookmark editing implemented
This commit is contained in:
4
TODO
4
TODO
@@ -45,6 +45,10 @@ TODO
|
|||||||
✓ Record progress
|
✓ Record progress
|
||||||
✓ Text alignment
|
✓ Text alignment
|
||||||
Bookmarks
|
Bookmarks
|
||||||
|
✓ Creation
|
||||||
|
✓ Navigation
|
||||||
|
Editing: Name, Location
|
||||||
|
Deletion
|
||||||
Set context menu for definitions and the like
|
Set context menu for definitions and the like
|
||||||
Search document using QTextCursor?
|
Search document using QTextCursor?
|
||||||
Cache multiple images
|
Cache multiple images
|
||||||
|
@@ -39,10 +39,10 @@ class BookmarkProxyModel(QtCore.QSortFilterProxyModel):
|
|||||||
def setData(self, index, value, role):
|
def setData(self, index, value, role):
|
||||||
if role == QtCore.Qt.EditRole:
|
if role == QtCore.Qt.EditRole:
|
||||||
source_index = self.mapToSource(index)
|
source_index = self.mapToSource(index)
|
||||||
self.sourceModel().setData(source_index, value, QtCore.Qt.DisplayRole)
|
identifier = self.sourceModel().data(source_index, QtCore.Qt.UserRole + 2)
|
||||||
|
|
||||||
row = index.row()
|
self.sourceModel().setData(source_index, value, QtCore.Qt.DisplayRole)
|
||||||
print(self.parent.metadata['bookmarks'])
|
self.parent.metadata['bookmarks'][identifier]['description'] = value
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
53
widgets.py
53
widgets.py
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import uuid
|
||||||
from PyQt5 import QtWidgets, QtGui, QtCore
|
from PyQt5 import QtWidgets, QtGui, QtCore
|
||||||
|
|
||||||
from resources import pie_chart
|
from resources import pie_chart
|
||||||
@@ -89,8 +90,13 @@ class Tab(QtWidgets.QWidget):
|
|||||||
self.contentView.setHorizontalScrollBarPolicy(
|
self.contentView.setHorizontalScrollBarPolicy(
|
||||||
QtCore.Qt.ScrollBarAlwaysOff)
|
QtCore.Qt.ScrollBarAlwaysOff)
|
||||||
|
|
||||||
|
# See bookmark availability
|
||||||
|
if not self.metadata['bookmarks']:
|
||||||
|
self.metadata['bookmarks'] = {}
|
||||||
|
|
||||||
# Create the dock widget for context specific display
|
# Create the dock widget for context specific display
|
||||||
self.dockWidget = PliantDockWidget(self)
|
self.dockWidget = PliantDockWidget(self)
|
||||||
|
self.dockWidget.setWindowTitle('Bookmarks')
|
||||||
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()
|
||||||
@@ -283,8 +289,6 @@ class Tab(QtWidgets.QWidget):
|
|||||||
break
|
break
|
||||||
|
|
||||||
def toggle_bookmarks(self):
|
def toggle_bookmarks(self):
|
||||||
self.dockWidget.setWindowTitle('Bookmarks')
|
|
||||||
|
|
||||||
if self.dockWidget.isVisible():
|
if self.dockWidget.isVisible():
|
||||||
self.dockWidget.hide()
|
self.dockWidget.hide()
|
||||||
else:
|
else:
|
||||||
@@ -294,19 +298,27 @@ class Tab(QtWidgets.QWidget):
|
|||||||
chapter, scroll_position, visible_text = self.contentView.record_scroll_position(True)
|
chapter, scroll_position, visible_text = self.contentView.record_scroll_position(True)
|
||||||
description = 'New bookmark'
|
description = 'New bookmark'
|
||||||
search_data = (scroll_position, visible_text)
|
search_data = (scroll_position, visible_text)
|
||||||
|
identifier = uuid.uuid4().hex[:10]
|
||||||
|
|
||||||
self.metadata['bookmarks'].append([
|
self.metadata['bookmarks'][identifier] = {
|
||||||
chapter, search_data, description])
|
'chapter': chapter,
|
||||||
self.add_bookmark_to_model(description, chapter, search_data)
|
'search_data': search_data,
|
||||||
|
'description': description}
|
||||||
|
|
||||||
|
self.add_bookmark_to_model(
|
||||||
|
description, chapter, search_data, identifier)
|
||||||
self.dockWidget.setVisible(True)
|
self.dockWidget.setVisible(True)
|
||||||
|
|
||||||
def add_bookmark_to_model(self, description, chapter, search_data):
|
def add_bookmark_to_model(self, description, chapter, search_data, identifier):
|
||||||
bookmark = QtGui.QStandardItem()
|
bookmark = QtGui.QStandardItem()
|
||||||
bookmark.setData(description, QtCore.Qt.DisplayRole)
|
bookmark.setData(description, QtCore.Qt.DisplayRole)
|
||||||
|
|
||||||
bookmark.setData(chapter, QtCore.Qt.UserRole)
|
bookmark.setData(chapter, QtCore.Qt.UserRole)
|
||||||
bookmark.setData(search_data, QtCore.Qt.UserRole + 1)
|
bookmark.setData(search_data, QtCore.Qt.UserRole + 1)
|
||||||
|
bookmark.setData(identifier, QtCore.Qt.UserRole + 2)
|
||||||
|
|
||||||
self.bookmark_model.appendRow(bookmark)
|
self.bookmark_model.appendRow(bookmark)
|
||||||
|
self.update_bookmark_proxy_model()
|
||||||
|
|
||||||
def navigate_to_bookmark(self, index):
|
def navigate_to_bookmark(self, index):
|
||||||
if not index.isValid():
|
if not index.isValid():
|
||||||
@@ -319,26 +331,31 @@ class Tab(QtWidgets.QWidget):
|
|||||||
self.set_scroll_value(False, search_data)
|
self.set_scroll_value(False, search_data)
|
||||||
|
|
||||||
def generate_bookmark_model(self):
|
def generate_bookmark_model(self):
|
||||||
bookmarks = self.metadata['bookmarks']
|
|
||||||
|
|
||||||
if not bookmarks:
|
|
||||||
self.metadata['bookmarks'] = []
|
|
||||||
return
|
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
# Replace this with proxy model sorting
|
# Get the proxy model to sort this
|
||||||
bookmarks.sort(key=lambda x: x[0])
|
|
||||||
|
|
||||||
for i in bookmarks:
|
for i in self.metadata['bookmarks'].items():
|
||||||
self.add_bookmark_to_model(i[2], i[0], i[1])
|
self.add_bookmark_to_model(
|
||||||
|
i[1]['description'],
|
||||||
|
i[1]['chapter'],
|
||||||
|
i[1]['search_data'],
|
||||||
|
i[0])
|
||||||
|
|
||||||
self.generate_proxy_model()
|
self.generate_bookmark_proxy_model()
|
||||||
|
|
||||||
def generate_proxy_model(self):
|
def generate_bookmark_proxy_model(self):
|
||||||
self.proxy_model.setSourceModel(self.bookmark_model)
|
self.proxy_model.setSourceModel(self.bookmark_model)
|
||||||
self.proxy_model.setSortCaseSensitivity(False)
|
self.proxy_model.setSortCaseSensitivity(False)
|
||||||
|
self.proxy_model.setSortRole(QtCore.Qt.UserRole)
|
||||||
self.dockListView.setModel(self.proxy_model)
|
self.dockListView.setModel(self.proxy_model)
|
||||||
|
|
||||||
|
def update_bookmark_proxy_model(self):
|
||||||
|
self.proxy_model.invalidateFilter()
|
||||||
|
self.proxy_model.setFilterParams(
|
||||||
|
self.window().bookToolBar.searchBar.text())
|
||||||
|
self.proxy_model.setFilterFixedString(
|
||||||
|
self.window().bookToolBar.searchBar.text())
|
||||||
|
|
||||||
def hide_mouse(self):
|
def hide_mouse(self):
|
||||||
self.contentView.setCursor(QtCore.Qt.BlankCursor)
|
self.contentView.setCursor(QtCore.Qt.BlankCursor)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user