@@ -220,6 +220,8 @@ def __init__(self):
220220 self ._subset_ids : Optional [set ] = None
221221 self .__pending_selection : Optional [_Selection ] = self .stored_selection
222222 self .__pending_sort : Optional [_Sorting ] = self .stored_sort
223+ self .__have_new_data = False
224+ self .__have_new_subset = False
223225 self .dist_color = QColor (220 , 220 , 220 , 255 )
224226
225227 info_box = gui .vBox (self .controlArea , "Info" )
@@ -297,6 +299,7 @@ def update(_):
297299 summary .len .add_done_callback (update )
298300 else :
299301 self .input = None
302+ self .__have_new_data = True
300303
301304 @Inputs .data_subset
302305 def set_subset_dataset (self , subset : Optional [Table ]):
@@ -306,25 +309,38 @@ def set_subset_dataset(self, subset: Optional[Table]):
306309 else :
307310 ids = None
308311 self ._subset_ids = ids
312+ self .__have_new_subset = True
309313
310314 def handleNewSignals (self ):
311315 super ().handleNewSignals ()
312316 self .Warning .non_sortable_input .clear ()
313317 self .Warning .missing_sort_columns .clear ()
314318 data : Optional [Table ] = self .input .table if self .input else None
315- self ._setup_table_view ()
316- self ._update_input_summary ()
319+ model = self .input .model if self .input else None
320+
321+ if self .__have_new_data :
322+ self ._setup_table_view ()
323+ self ._update_input_summary ()
324+
325+ if data is not None and self .__pending_sort is not None :
326+ self .__restore_sort ()
317327
318- if data is not None and self .__pending_sort is not None :
319- self .__restore_sort ()
328+ if data is not None and self .__pending_selection is not None :
329+ selection = self .__pending_selection
330+ self .__pending_selection = None
331+ rows = selection ["rows" ]
332+ columns = selection ["columns" ]
333+ self .set_selection (rows , columns )
320334
321- if data is not None and self .__pending_selection is not None :
322- selection = self .__pending_selection
323- self .__pending_selection = None
324- rows = selection ["rows" ]
325- columns = selection ["columns" ]
326- self .set_selection (rows , columns )
327- self .commit .now ()
335+ if self .__have_new_subset and model is not None :
336+ model .setSubsetRowIds (self ._subset_ids or set ())
337+ self .__have_new_subset = False
338+
339+ self ._setup_view_delegate ()
340+
341+ if self .__have_new_data :
342+ self .commit .now ()
343+ self .__have_new_data = False
328344
329345 def _setup_table_view (self ):
330346 """Setup the view with current input data."""
@@ -409,7 +425,8 @@ def _on_distribution_color_changed(self):
409425 self ._setup_view_delegate ()
410426
411427 def _setup_view_delegate (self ):
412- assert self .input is not None
428+ if self .input is None :
429+ return
413430 model = self .input .model
414431 data = model .source
415432 class_var = data .domain .class_var
0 commit comments