Skip to content

Commit 4e185c5

Browse files
committed
Data sets: Disable combos when filter overrides them
1 parent 732f706 commit 4e185c5

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

Orange/widgets/data/owdatasets.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@
4141
GENERAL_DOMAIN = None
4242
ALL_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

4548
def 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-
194196
class 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

@@ -622,6 +634,17 @@ def selected_dataset(self):
622634

623635
def filter(self):
624636
filter_string = self.filterLineEdit.text().strip()
637+
enable_combos = len(filter_string) < FILTER_OVERRIDE_LENGTH
638+
if enable_combos is not self.domain_combo.isEnabled():
639+
for element in self.combo_elements:
640+
element.setEnabled(enable_combos)
641+
if enable_combos:
642+
self.domain_combo.setCurrentText(self.domain)
643+
self.language_combo.setCurrentText(self.language)
644+
else:
645+
self.domain_combo.setCurrentIndex(self.domain_combo.count() - 1)
646+
self.language_combo.setCurrentIndex(self.language_combo.count() - 1)
647+
625648
self.filter_hint = filter_string
626649
proxyModel = self.view.model()
627650
if proxyModel:

Orange/widgets/data/tests/test_owdatasets.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@ def test_filter_overrides_language_and_domain(self):
211211
settings = w.settingsHandler.pack_data(w)
212212
w2 = self.create_widget(OWDataSets, stored_settings=settings)
213213
self.wait_until_stop_blocking(w2)
214-
self.assertEqual(w2.language_combo.currentText(), "English")
214+
self.assertEqual(w2.language_combo.currentText(), w2.ALL_LANGUAGES)
215+
self.assertFalse(w2.language_combo.isEnabled())
215216
self.assertEqual(w2.filterLineEdit.text(), "bax d")
216217
self.assertEqual(self.__titles(w2), {"Bax data set"})
217218

@@ -266,8 +267,8 @@ def test_download_iris(self):
266267
# select the only dataset
267268
sel_type = QItemSelectionModel.ClearAndSelect | QItemSelectionModel.Rows
268269
w.view.selectionModel().select(w.view.model().index(0, 0), sel_type)
269-
self.assertEqual(w.selected_id, "iris.tab")
270270
w.commit()
271+
self.assertEqual(w.selected_id, "iris.tab")
271272
iris = self.get_output(w.Outputs.data, w)
272273
self.assertEqual(len(iris), 150)
273274

0 commit comments

Comments
 (0)