Bookmark editing implemented

This commit is contained in:
BasioMeusPuga
2018-02-28 23:26:32 +05:30
parent a2eca6bb14
commit db28d25767
3 changed files with 43 additions and 22 deletions

4
TODO
View File

@@ -45,6 +45,10 @@ TODO
✓ Record progress
✓ Text alignment
Bookmarks
✓ Creation
✓ Navigation
Editing: Name, Location
Deletion
Set context menu for definitions and the like
Search document using QTextCursor?
Cache multiple images

View File

@@ -39,11 +39,11 @@ class BookmarkProxyModel(QtCore.QSortFilterProxyModel):
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)
identifier = self.sourceModel().data(source_index, QtCore.Qt.UserRole + 2)
self.sourceModel().setData(source_index, value, QtCore.Qt.DisplayRole)
self.parent.metadata['bookmarks'][identifier]['description'] = value
row = index.row()
print(self.parent.metadata['bookmarks'])
return True

View File

@@ -23,6 +23,7 @@
import os
import uuid
from PyQt5 import QtWidgets, QtGui, QtCore
from resources import pie_chart
@@ -89,8 +90,13 @@ class Tab(QtWidgets.QWidget):
self.contentView.setHorizontalScrollBarPolicy(
QtCore.Qt.ScrollBarAlwaysOff)
# See bookmark availability
if not self.metadata['bookmarks']:
self.metadata['bookmarks'] = {}
# Create the dock widget for context specific display
self.dockWidget = PliantDockWidget(self)
self.dockWidget.setWindowTitle('Bookmarks')
self.dockWidget.setFeatures(QtWidgets.QDockWidget.DockWidgetClosable)
self.dockWidget.setFloating(False)
self.dockWidget.hide()
@@ -283,8 +289,6 @@ class Tab(QtWidgets.QWidget):
break
def toggle_bookmarks(self):
self.dockWidget.setWindowTitle('Bookmarks')
if self.dockWidget.isVisible():
self.dockWidget.hide()
else:
@@ -294,19 +298,27 @@ class Tab(QtWidgets.QWidget):
chapter, scroll_position, visible_text = self.contentView.record_scroll_position(True)
description = 'New bookmark'
search_data = (scroll_position, visible_text)
identifier = uuid.uuid4().hex[:10]
self.metadata['bookmarks'].append([
chapter, search_data, description])
self.add_bookmark_to_model(description, chapter, search_data)
self.metadata['bookmarks'][identifier] = {
'chapter': chapter,
'search_data': search_data,
'description': description}
self.add_bookmark_to_model(
description, chapter, search_data, identifier)
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.setData(description, QtCore.Qt.DisplayRole)
bookmark.setData(chapter, QtCore.Qt.UserRole)
bookmark.setData(search_data, QtCore.Qt.UserRole + 1)
bookmark.setData(identifier, QtCore.Qt.UserRole + 2)
self.bookmark_model.appendRow(bookmark)
self.update_bookmark_proxy_model()
def navigate_to_bookmark(self, index):
if not index.isValid():
@@ -319,26 +331,31 @@ class Tab(QtWidgets.QWidget):
self.set_scroll_value(False, search_data)
def generate_bookmark_model(self):
bookmarks = self.metadata['bookmarks']
if not bookmarks:
self.metadata['bookmarks'] = []
return
# TODO
# Replace this with proxy model sorting
bookmarks.sort(key=lambda x: x[0])
# Get the proxy model to sort this
for i in bookmarks:
self.add_bookmark_to_model(i[2], i[0], i[1])
for i in self.metadata['bookmarks'].items():
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.setSortCaseSensitivity(False)
self.proxy_model.setSortRole(QtCore.Qt.UserRole)
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):
self.contentView.setCursor(QtCore.Qt.BlankCursor)