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 ✓ 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

View File

@@ -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

View File

@@ -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)