Skip to content

Commit

Permalink
Merge pull request #5032 from irgolic/nice-hscroll-datatable
Browse files Browse the repository at this point in the history
Slow horizontal scrolling in `QTableView`s
  • Loading branch information
janezd committed Oct 16, 2020
2 parents ac714e7 + 2394b60 commit ccd1d3d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Orange/widgets/data/owtable.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ def table_selection_to_list(table):
TableSlot = namedtuple("TableSlot", ["input_id", "table", "summary", "view"])


class TableView(QTableView):
class TableView(gui.HScrollStepMixin, QTableView):
#: Signal emitted when selection finished. It is not emitted during
#: mouse drag selection updates.
selectionFinished = Signal()
Expand Down
2 changes: 1 addition & 1 deletion Orange/widgets/evaluate/owpredictions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,7 @@ def reset(self):
self.clearCurrentIndex()


class TableView(QTableView):
class TableView(gui.HScrollStepMixin, QTableView):
MaxSizeHintSamples = 1000

def sizeHintForColumn(self, column):
Expand Down
28 changes: 27 additions & 1 deletion Orange/widgets/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import math

import logging
import sys
import warnings
import weakref
from collections.abc import Sequence

from AnyQt import QtWidgets, QtCore, QtGui
from AnyQt.QtCore import Qt, QSize, QItemSelection
from AnyQt.QtGui import QColor
from AnyQt.QtGui import QColor, QWheelEvent
from AnyQt.QtWidgets import QWidget, QItemDelegate, QListView, QComboBox

# re-export relevant objects
Expand Down Expand Up @@ -658,3 +659,28 @@ def paint(self, painter, option, index):

from Orange.widgets.utils.colorpalettes import patch_variable_colors
patch_variable_colors()


class HScrollStepMixin:
"""
Overrides default TableView horizontal behavior (scrolls 1 page at a time)
to a friendlier scroll speed akin to that of vertical scrolling.
"""

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.horizontalScrollBar().setSingleStep(20)

def wheelEvent(self, event: QWheelEvent):
if event.source() == Qt.MouseEventNotSynthesized and \
(event.modifiers() & Qt.ShiftModifier and sys.platform == 'darwin' or
event.modifiers() & Qt.AltModifier and sys.platform != 'darwin'):
new_event = QWheelEvent(
event.pos(), event.globalPos(), event.pixelDelta(),
event.angleDelta(), event.buttons(), Qt.NoModifier,
event.phase(), event.inverted(), Qt.MouseEventSynthesizedByApplication
)
event.accept()
super().wheelEvent(new_event)
else:
super().wheelEvent(event)
6 changes: 5 additions & 1 deletion Orange/widgets/unsupervised/owdistancematrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ def set_selected_items(self, inds):
self.select(selection, QItemSelectionModel.ClearAndSelect)


class TableView(gui.HScrollStepMixin, QTableView):
pass


class DistanceMatrixContextHandler(ContextHandler):
@staticmethod
def _var_names(annotations):
Expand Down Expand Up @@ -213,7 +217,7 @@ def __init__(self):
self.items = None

self.tablemodel = DistanceMatrixModel()
view = self.tableview = QTableView()
view = self.tableview = TableView()
view.setEditTriggers(QTableView.NoEditTriggers)
view.setItemDelegate(TableBorderItem())
view.setModel(self.tablemodel)
Expand Down

0 comments on commit ccd1d3d

Please sign in to comment.