Skip to content

Commit b193ea7

Browse files
committed
FIX: wheelscroll on a filter if no label was checked
1 parent bfbf500 commit b193ea7

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
@@ -159,23 +159,30 @@ def on_model_item_changed(self, item):
159159
checked_indices = [i for i, item in enumerate(model[1:]) if item.checked]
160160
self.checked_items_changed.emit(checked_indices)
161161

162+
# function is called to implement wheel scrolling (select prev/next label)
162163
def select_offset(self, offset):
163-
"""offset: 1 for next, -1 for previous"""
164-
164+
"""offset: -1 for previous, 1 for next"""
165+
assert offset in {-1, 1}
165166
model = self._model
166167
model.blockSignals(True)
168+
# Remember the "(select all)" label shifts all indices by one
167169
indices_checked = [i for i, item in enumerate(model) if item.checked]
168-
first_checked = indices_checked[0]
170+
if indices_checked:
171+
first_checked = indices_checked[0]
172+
else:
173+
# if no label is checked, act like "(select all)" was checked
174+
# (i.e. we will select the first real label)
175+
first_checked = 0
169176
# check first_checked + offset, uncheck the rest
170177
to_check = first_checked + offset
171178

172-
# wrap around
179+
# wrap around (index 0 is reserved for "(select all)")
173180
to_check = to_check if to_check < len(model) else 1
174181
to_check = to_check if to_check > 0 else len(model) - 1
175182

176-
is_checked = ["partial"] + [i == to_check for i in range(1, len(model))]
177-
for checked, item in zip(is_checked, model):
178-
item.checked = checked
183+
model[0].checked = "partial"
184+
for i, item in enumerate(model[1:], start=1):
185+
item.checked = i == to_check
179186
model.blockSignals(False)
180187
self.checked_items_changed.emit([to_check - 1])
181188

0 commit comments

Comments
 (0)