// License: GPL. For details, see LICENSE file. package org.wikipedia.gui; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Dimension; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.ExtendedDialog; import org.openstreetmap.josm.gui.util.GuiHelper; import org.wikipedia.WikipediaApp; final class WikipediaCategorySearchDialog extends ExtendedDialog { private final Selector selector; private static final WikipediaCategorySearchDialog INSTANCE = new WikipediaCategorySearchDialog(); private WikipediaCategorySearchDialog() { super(Main.parent, tr("Search Wikipedia category"), new String[]{tr("Load category"), tr("Cancel")}); this.selector = new Selector(); this.selector.setDblClickListener(e -> buttonAction(0, null)); setContent(selector, false); setPreferredSize(new Dimension(600, 300)); } /** * Returns the unique instance of {@code MenuItemSearchDialog}. * * @return the unique instance of {@code MenuItemSearchDialog}. */ public static synchronized WikipediaCategorySearchDialog getInstance() { return INSTANCE; } @Override public ExtendedDialog showDialog() { selector.init(); super.showDialog(); selector.clearSelection(); selector.requestFocus(); return this; } String getCategory() { return selector.getSelectedItem(); } private static class Selector extends WikiSearchTextResultListPanel<String> { @Override protected void filterItems() { final String query = edSearchText.getText(); debouncer.debounce(getClass(), () -> { final List<String> entries = query == null || query.isEmpty() ? Collections.emptyList() : WikipediaApp.forLanguage(WikipediaToggleDialog.wikipediaLang.get()).getCategoriesForPrefix(query); GuiHelper.runInEDT(() -> lsResultModel.setItems(entries)); }, 200, TimeUnit.MILLISECONDS); } } }