E-book viewer: Allow scrolling of the ToC, highlights, bookmarks, etc. with touch gestures. Fixes #1963875 [Make the Viewer TOC touch friendly](https://bugs.launchpad.net/calibre/+bug/1963875)

This commit is contained in:
Kovid Goyal 2022-03-07 21:15:11 +05:30
parent 894f7d547a
commit 9a73323fa3
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 18 additions and 10 deletions

View File

@ -5,9 +5,9 @@
import json import json
from operator import itemgetter from operator import itemgetter
from qt.core import ( from qt.core import (
QAction, QComboBox, QGridLayout, QHBoxLayout, QIcon, QInputDialog, QAbstractItemView, QAction, QComboBox, QGridLayout, QHBoxLayout, QIcon,
QItemSelectionModel, QLabel, QListWidget, QListWidgetItem, QPushButton, Qt, QInputDialog, QItemSelectionModel, QLabel, QListWidget, QListWidgetItem,
QWidget, pyqtSignal QPushButton, QScroller, Qt, QWidget, pyqtSignal
) )
from calibre.gui2 import choose_files, choose_save_file from calibre.gui2 import choose_files, choose_save_file
@ -32,6 +32,8 @@ class BookmarksList(QListWidget):
self.addAction(ac) self.addAction(ac)
self.ac_delete = ac = QAction(QIcon(I('trash.png')), _('Remove this bookmark'), self) self.ac_delete = ac = QAction(QIcon(I('trash.png')), _('Remove this bookmark'), self)
self.addAction(ac) self.addAction(ac)
QScroller.grabGesture(self.viewport(), QScroller.ScrollerGestureType.TouchGesture)
self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
@property @property
def current_non_removed_item(self): def current_non_removed_item(self):

View File

@ -10,7 +10,7 @@ from qt.core import (
QAbstractItemView, QColor, QDialog, QFont, QHBoxLayout, QIcon, QImage, QAbstractItemView, QColor, QDialog, QFont, QHBoxLayout, QIcon, QImage,
QItemSelectionModel, QKeySequence, QLabel, QMenu, QPainter, QPainterPath, QItemSelectionModel, QKeySequence, QLabel, QMenu, QPainter, QPainterPath,
QPalette, QPixmap, QPushButton, QRect, QSizePolicy, QStyle, Qt, QTextCursor, QPalette, QPixmap, QPushButton, QRect, QSizePolicy, QStyle, Qt, QTextCursor,
QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal QTextEdit, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal, QScroller
) )
from calibre.constants import ( from calibre.constants import (
@ -175,6 +175,8 @@ class Highlights(QTreeWidget):
self.uuid_map = {} self.uuid_map = {}
self.section_font = QFont(self.font()) self.section_font = QFont(self.font())
self.section_font.setItalic(True) self.section_font.setItalic(True)
QScroller.grabGesture(self.viewport(), QScroller.ScrollerGestureType.TouchGesture)
self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
def show_context_menu(self, point): def show_context_menu(self, point):
index = self.indexAt(point) index = self.indexAt(point)

View File

@ -6,8 +6,9 @@ import regex
from collections import Counter, OrderedDict from collections import Counter, OrderedDict
from html import escape from html import escape
from qt.core import ( from qt.core import (
QCheckBox, QComboBox, QFont, QHBoxLayout, QIcon, QLabel, Qt, QToolButton, QAbstractItemView, QCheckBox, QComboBox, QFont, QHBoxLayout, QIcon, QLabel,
QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal QScroller, Qt, QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget,
pyqtSignal
) )
from threading import Thread from threading import Thread
@ -471,6 +472,8 @@ class Results(QTreeWidget): # {{{
self.section_map = {} self.section_map = {}
self.search_results = [] self.search_results = []
self.item_map = {} self.item_map = {}
QScroller.grabGesture(self.viewport(), QScroller.ScrollerGestureType.TouchGesture)
self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
def current_item_changed(self, current, previous): def current_item_changed(self, current, previous):
if current is not None: if current is not None:

View File

@ -4,11 +4,10 @@
import re import re
from functools import partial from functools import partial
from qt.core import ( from qt.core import (
QApplication, QFont, QHBoxLayout, QIcon, QMenu, QModelIndex, QStandardItem, QAbstractItemView, QApplication, QEvent, QFont, QHBoxLayout, QIcon, QMenu,
QStandardItemModel, QStyledItemDelegate, Qt, QToolButton, QToolTip, QTreeView, QModelIndex, QScroller, QStandardItem, QStandardItemModel, QStyledItemDelegate,
QWidget, pyqtSignal, QEvent Qt, QToolButton, QToolTip, QTreeView, QWidget, pyqtSignal
) )
from calibre.gui2 import error_dialog from calibre.gui2 import error_dialog
@ -48,6 +47,8 @@ class TOCView(QTreeView):
self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.customContextMenuRequested.connect(self.context_menu) self.customContextMenuRequested.connect(self.context_menu)
QApplication.instance().palette_changed.connect(self.set_style_sheet, type=Qt.ConnectionType.QueuedConnection) QApplication.instance().palette_changed.connect(self.set_style_sheet, type=Qt.ConnectionType.QueuedConnection)
QScroller.grabGesture(self.viewport(), QScroller.ScrollerGestureType.TouchGesture)
self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
def setModel(self, model): def setModel(self, model):
QTreeView.setModel(self, model) QTreeView.setModel(self, model)