Skip to content

Commit 18daccf

Browse files
committed
FIX: wheelscroll on a filter if no label was checked
1 parent 6a146da commit 18daccf

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

larray_editor/combo.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,23 +125,30 @@ def on_model_item_changed(self, item):
125125
checked_indices = [i for i, item in enumerate(model[1:]) if item.checked]
126126
self.checkedItemsChanged.emit(checked_indices)
127127

128+
# function is called to implement wheel scrolling (select prev/next label)
128129
def select_offset(self, offset):
129-
"""offset: 1 for next, -1 for previous"""
130-
130+
"""offset: -1 for previous, 1 for next"""
131+
assert offset in {-1, 1}
131132
model = self._model
132133
model.blockSignals(True)
134+
# Remember the "(select all)" label shifts all indices by one
133135
indices_checked = [i for i, item in enumerate(model) if item.checked]
134-
first_checked = indices_checked[0]
136+
if indices_checked:
137+
first_checked = indices_checked[0]
138+
else:
139+
# if no label is checked, act like "(select all)" was checked
140+
# (i.e. we will select the first real label)
141+
first_checked = 0
135142
# check first_checked + offset, uncheck the rest
136143
to_check = first_checked + offset
137144

138-
# wrap around
145+
# wrap around (index 0 is reserved for "(select all)")
139146
to_check = to_check if to_check < len(model) else 1
140147
to_check = to_check if to_check > 0 else len(model) - 1
141148

142-
is_checked = ["partial"] + [i == to_check for i in range(1, len(model))]
143-
for checked, item in zip(is_checked, model):
144-
item.checked = checked
149+
model[0].checked = "partial"
150+
for i, item in enumerate(model[1:], start=1):
151+
item.checked = i == to_check
145152
model.blockSignals(False)
146153
self.checkedItemsChanged.emit([to_check - 1])
147154

0 commit comments

Comments
 (0)