@@ -48,16 +48,17 @@ class Outputs:
4848 want_main_area = False
4949 resizing_enabled = False
5050
51+ settings_version = 2
5152 operation = settings .Setting (Diff )
5253 shift_period = settings .Setting (1 )
5354 invert_direction = settings .Setting (False )
5455 assume_zero_before = settings .Setting (False )
55- selection : List [str ] = settings .Setting ([])
56+ pending_selection : List [str ] = settings .Setting ([])
5657 autocommit = settings .Setting (True )
5758
5859 def __init__ (self ):
5960 self .data = None
60- self .selection = self . persistent_selection = []
61+ self .selection = []
6162
6263 self .view = view = QListView (self ,
6364 selectionMode = QListView .ExtendedSelection )
@@ -104,31 +105,30 @@ def _update_gui_state(self):
104105 and self .operation in (self .Diff , self .Diff2 ))
105106
106107 def _selection_changed (self ):
107- self .selection = [
108+ self .pending_selection = self . selection = [
108109 self .model .data (index )
109110 for index in self .view .selectionModel ().selectedRows ()]
110111 self .commit .deferred ()
111112
112113 @Inputs .time_series
113114 def set_data (self , data ):
114- if self .selection :
115- self .persistent_selection = self .selection [:]
116-
117115 if not data :
118116 self .data = None
119- self .model .clear ()
117+ with signal_blocking (self .view .selectionModel ()):
118+ self .model .clear ()
119+ self .selection = []
120120 self .commit .now ()
121121 return
122122
123123 self .data = Timeseries .from_data_table (data )
124- self .model [:] = [var for var in data .domain .variables
125- if var .is_continuous and var is not
126- self .data .time_variable ]
127-
128- names = [attr .name for attr in self .model ]
129- self .selection = [name for name in self .persistent_selection
130- if name in names ]
131124 with signal_blocking (self .view .selectionModel ()):
125+ self .model [:] = [var for var in data .domain .variables
126+ if var .is_continuous and var is not
127+ self .data .time_variable ]
128+
129+ names = [attr .name for attr in self .model ]
130+ self .pending_selection = self .selection = [
131+ name for name in self .pending_selection if name in names ]
132132 select_rows (self .view ,
133133 [names .index (name ) for name in self .selection ])
134134 self .commit .now ()
@@ -200,6 +200,11 @@ def compute(self, data, attr_names):
200200 columns = np .zeros ((len (data ), 0 ), dtype = float )
201201 return tuple (attrs ), columns
202202
203+ @classmethod
204+ def migrate_settings (cls , settings , version ):
205+ if version < 2 :
206+ settings ["pending_selection" ] = settings .pop ("selection" , [])
207+ return super ().migrate_settings (settings , version )
203208
204209if __name__ == "__main__" :
205210 WidgetPreview (OWDifference ).run (set_data = Table .from_file ('iris' ))
0 commit comments