4141GENERAL_DOMAIN = None
4242ALL_DOMAINS = "" # The setting is Optional[str], so don't use other types here
4343
44+ # The number of characters at which filter overrides the domain and language
45+ FILTER_OVERRIDE_LENGTH = 4
46+
4447
4548def ensure_local (index_url , file_path , local_cache_path ,
4649 force = False , progress_advance = None ):
@@ -180,7 +183,7 @@ def filterAcceptsRow(self, row, parent):
180183 data = source .index (row , 0 ).data (Qt .UserRole )
181184 in_filter = (
182185 self .__filter is not None
183- and len (self .__filter ) >= 4
186+ and len (self .__filter ) >= FILTER_OVERRIDE_LENGTH
184187 and self .__filter in data .title .casefold ()
185188 )
186189 published_ok = data .publication_status == Namespace .PUBLISHED
@@ -190,7 +193,6 @@ def filterAcceptsRow(self, row, parent):
190193 and (published_ok and domain_ok and language_ok
191194 or in_filter ))
192195
193-
194196class OWDataSets (OWWidget ):
195197 name = "Datasets"
196198 description = "Load a dataset from an online repository"
@@ -276,8 +278,13 @@ def __init__(self):
276278 "Typing four letters or more overrides domain and language filters" )
277279 layout .addWidget (self .filterLineEdit )
278280
281+ self .combo_elements = []
282+
279283 layout .addSpacing (20 )
280- layout .addWidget (QLabel ("Show data sets in " ))
284+ label = QLabel ("Show data sets in " )
285+ layout .addWidget (label )
286+ self .combo_elements .append (label )
287+
281288 lang_combo = self .language_combo = QComboBox ()
282289 languages = [self .DEFAULT_LANG , self .ALL_LANGUAGES ]
283290 if self .language is not None and self .language not in languages :
@@ -289,14 +296,19 @@ def __init__(self):
289296 lang_combo .setCurrentText (self .language )
290297 lang_combo .activated .connect (self ._on_language_changed )
291298 layout .addWidget (lang_combo )
299+ self .combo_elements .append (lang_combo )
292300
293301 layout .addSpacing (20 )
294- layout .addWidget (QLabel ("Domain:" ))
302+ label = QLabel ("Domain:" )
303+ layout .addWidget (label )
304+ self .combo_elements .append (label )
305+
295306 domain_combo = self .domain_combo = QComboBox ()
296307 domain_combo .addItem (self .GENERAL_DOMAIN_LABEL )
297308 domain_combo .activated .connect (self ._on_domain_changed )
298309 if self .core_widget :
299310 layout .addWidget (domain_combo )
311+ self .combo_elements .append (domain_combo )
300312
301313 self .mainArea .layout ().addLayout (layout )
302314
@@ -494,17 +506,20 @@ def update_model(self):
494506 self .domain = datainfo .domain
495507 if self .domain == "sc" : # domain from the list of ignored domain
496508 self .domain = ALL_DOMAINS
497- combo = self .domain_combo
498- if self .domain == GENERAL_DOMAIN :
499- combo .setCurrentIndex (0 )
500- elif self .domain == ALL_DOMAINS :
501- combo .setCurrentIndex (combo .count () - 1 )
502- else :
503- combo .setCurrentText (self .domain )
509+ self .__update_domain_combo ()
504510 self ._on_domain_changed ()
505511
506512 return model , current_index
507513
514+ def __update_domain_combo (self ):
515+ combo = self .domain_combo
516+ if self .domain == GENERAL_DOMAIN :
517+ combo .setCurrentIndex (0 )
518+ elif self .domain == ALL_DOMAINS :
519+ combo .setCurrentIndex (combo .count () - 1 )
520+ else :
521+ combo .setCurrentText (self .domain )
522+
508523 def _on_language_changed (self ):
509524 combo = self .language_combo
510525 if combo .currentIndex () == combo .count () - 1 :
@@ -622,6 +637,17 @@ def selected_dataset(self):
622637
623638 def filter (self ):
624639 filter_string = self .filterLineEdit .text ().strip ()
640+ enable_combos = len (filter_string ) < FILTER_OVERRIDE_LENGTH
641+ if enable_combos is not self .domain_combo .isEnabled ():
642+ for element in self .combo_elements :
643+ element .setEnabled (enable_combos )
644+ if enable_combos :
645+ self .__update_domain_combo ()
646+ self .language_combo .setCurrentText (self .language )
647+ else :
648+ self .domain_combo .setCurrentText (self .ALL_DOMAINS_LABEL )
649+ self .language_combo .setCurrentText (self .ALL_LANGUAGES )
650+
625651 self .filter_hint = filter_string
626652 proxyModel = self .view .model ()
627653 if proxyModel :
0 commit comments