mirror of
https://github.com/kovidgoyal/calibre.git
synced 2026-05-27 09:12:34 -04:00
Respect the scroll per line/column book list setting when doing momentum_scroll
This commit is contained in:
@@ -774,7 +774,7 @@ CoverTuple = namedtuple('CoverTuple', ['book_id', 'has_cover', 'cache_valid',
|
||||
# The View {{{
|
||||
|
||||
@setup_dnd_interface
|
||||
class GridView(QListView, MomentumScrollMixin):
|
||||
class GridView(MomentumScrollMixin, QListView):
|
||||
|
||||
update_item = pyqtSignal(object, object)
|
||||
files_dropped = pyqtSignal(object)
|
||||
|
||||
@@ -591,7 +591,7 @@ class HoveredCover:
|
||||
|
||||
|
||||
@setup_dnd_interface
|
||||
class BookshelfView(QAbstractScrollArea, MomentumScrollMixin):
|
||||
class BookshelfView(MomentumScrollMixin, QAbstractScrollArea):
|
||||
'''
|
||||
Enhanced bookshelf view displaying books as spines on shelves.
|
||||
|
||||
|
||||
@@ -366,9 +366,13 @@ class BooksView(TableView): # {{{
|
||||
self.alternate_views = AlternateViews(self)
|
||||
|
||||
for wv in self, self.pin_view:
|
||||
if not tweaks['horizontal_scrolling_per_column']:
|
||||
if tweaks['horizontal_scrolling_per_column']:
|
||||
wv.update_momentum_scroll_settings(enable_x=False)
|
||||
else:
|
||||
wv.setHorizontalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
|
||||
if not tweaks['vertical_scrolling_per_row']:
|
||||
if tweaks['vertical_scrolling_per_row']:
|
||||
wv.update_momentum_scroll_settings(enable_x=False)
|
||||
else:
|
||||
wv.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
|
||||
|
||||
wv.setEditTriggers(QAbstractItemView.EditTrigger.EditKeyPressed)
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# License: GPLv3 Copyright: 2025, Kovid Goyal <kovid at kovidgoyal.net>
|
||||
|
||||
from collections import deque
|
||||
from typing import NamedTuple
|
||||
|
||||
@@ -44,6 +47,10 @@ class MomentumSettings(NamedTuple):
|
||||
timer_interval_ms: int = 16 # ~60 FPS update rate
|
||||
# Time to wait after ScrollEnd to see if system momentum arrives
|
||||
momentum_detection_delay_ms: int = 50
|
||||
# Whether to enable momentum in the specified axis, defers to Qt handling
|
||||
# of wheelevents when false
|
||||
enable_x: bool = True
|
||||
enable_y: bool = True
|
||||
# How much to scale scroll amounts by
|
||||
x_multiplier: float = 1
|
||||
y_multiplier: float = 1
|
||||
@@ -336,6 +343,9 @@ class MomentumScrollMixin:
|
||||
|
||||
def wheelEvent(self, event: QWheelEvent):
|
||||
self._ensure_momentum_scroller()
|
||||
if (not self._momentum_scroller.settings.enable_x and event.angleDelta().x() != 0) or (
|
||||
not self._momentum_scroller.settings.enable_y and event.angleDelta().y() != 0):
|
||||
return super().wheelEvent(event)
|
||||
self._momentum_scroller.handle_wheel_event(event)
|
||||
event.accept()
|
||||
|
||||
@@ -344,6 +354,10 @@ class MomentumScrollMixin:
|
||||
if self._momentum_scroller:
|
||||
self._momentum_scroller.stop()
|
||||
|
||||
def update_momentum_scroll_settings(self, **kw) -> None:
|
||||
self._ensure_momentum_scroller()
|
||||
self._momentum_scroller.settings = self._momentum_scroller.settings._replace(**kw)
|
||||
|
||||
|
||||
# Demo {{{
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -28,7 +28,7 @@ from calibre.gui2.library.delegates import (
|
||||
from calibre.gui2.momentum_scroll import MomentumScrollMixin
|
||||
|
||||
|
||||
class TableView(QTableView, MomentumScrollMixin):
|
||||
class TableView(MomentumScrollMixin, QTableView):
|
||||
|
||||
def closeEditor(self, editor, hint):
|
||||
# We want to implement our own go to next/previous cell behavior
|
||||
|
||||
Reference in New Issue
Block a user