Skip to content

Commit d9356c1

Browse files
committed
using the mouse scrollwheel on filter combo boxes will switch to the previous/next label
1 parent f140604 commit d9356c1

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

larray_editor/combo.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from qtpy import QtGui, QtCore, QtWidgets
2+
from qtpy.QtCore import QPoint
23

34

45
class StandardItemModelIterator(object):
@@ -117,6 +118,24 @@ def on_model_item_changed(self, item):
117118
is_checked = [i for i, item in enumerate(model[1:]) if item.checked]
118119
self.checkedItemsChanged.emit(is_checked)
119120

121+
def select_offset(self, offset):
122+
"""offset: 1 for next, -1 for previous"""
123+
124+
model = self._model
125+
# model.blockSignals(True)
126+
indices_checked = [i for i, item in enumerate(model) if item.checked]
127+
first_checked = indices_checked[0]
128+
# check first_checked + offset, uncheck the rest
129+
to_check = first_checked + offset
130+
131+
# wrap around
132+
to_check = to_check if to_check < len(model) else 1
133+
to_check = to_check if to_check > 0 else len(model) - 1
134+
135+
is_checked = ["partial"] + [i == to_check for i in range(1, len(model))]
136+
for checked, item in zip(is_checked, model):
137+
item.checked = checked
138+
120139
def addItem(self, text):
121140
item = StandardItem(text)
122141
# not editable
@@ -222,6 +241,12 @@ def eventFilter(self, obj, event):
222241

223242
return False
224243

244+
def wheelEvent(self, event):
245+
delta = event.angleDelta()
246+
assert isinstance(delta, QPoint)
247+
offset = 1 if delta.y() < 0 else -1
248+
self._menu.select_offset(offset)
249+
225250

226251
if __name__ == '__main__':
227252
import sys

0 commit comments

Comments
 (0)