@@ -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