X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderSearch.java;h=c421ba6b006a43425aa735f6f1a0a4cc38ee95eb;hb=e96619eaf672b7779c7db9bb4db82afa51bd2856;hp=cfe241c00c5e724aa3b857c0df2a0376c602c48c;hpb=bf2b37b0aca363d30d8086c440dd2cb23e6e0915;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java index cfe241c..c421ba6 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java @@ -48,8 +48,9 @@ public class GuiReaderSearch extends JFrame { private int maxPage; private JPanel tagBars; + private List combos; - private JComboBox comboSupportTypes; + private JComboBox comboSupportTypes; private JTabbedPane searchTabs; private JTextField keywordsField; private JButton submitKeywords; @@ -75,7 +76,7 @@ public class GuiReaderSearch extends JFrame { } supportType = supportTypes.isEmpty() ? null : supportTypes.get(0); - comboSupportTypes = new JComboBox( + comboSupportTypes = new JComboBox( supportTypes.toArray(new SupportType[] {})); comboSupportTypes.addActionListener(new ActionListener() { @Override @@ -144,6 +145,8 @@ public class GuiReaderSearch extends JFrame { } private JPanel createByTagSearchPanel() { + combos = new ArrayList(); + JPanel byTag = new JPanel(); tagBars = new JPanel(); tagBars.setLayout(new BoxLayout(tagBars, BoxLayout.Y_AXIS)); @@ -202,6 +205,7 @@ public class GuiReaderSearch extends JFrame { } } + // update and reset the tagsbar // can be NULL, for base tags private void updateTags(final SearchableTag tag) { final List parents = new ArrayList(); @@ -220,15 +224,21 @@ public class GuiReaderSearch extends JFrame { // TODO: Slow UI // TODO: select the right one try { + SearchableTag selectedChild = parents.isEmpty() ? null + : parents.get(parents.size() - 1); addTagBar(BasicSearchable.getSearchable(supportType) - .getTags(), tag); + .getTags(), selectedChild); } catch (IOException e) { error(e); } for (int i = parents.size() - 1; i >= 0; i--) { + SearchableTag selectedChild = null; + if (i > 0) { + selectedChild = parents.get(i - 1); + } SearchableTag parent = parents.get(i); - addTagBar(parent.getChildren(), parent); + addTagBar(parent.getChildren(), selectedChild); } tagBars.validate(); @@ -247,35 +257,35 @@ public class GuiReaderSearch extends JFrame { }); } + // not 1.6 compatible + @SuppressWarnings({ "unchecked", "rawtypes" }) private void addTagBar(List tags, final SearchableTag selected) { tags.add(0, null); - final JComboBox combo = new JComboBox( + final int comboIndex = combos.size(); + + final JComboBox combo = new JComboBox( tags.toArray(new SearchableTag[] {})); combo.setSelectedItem(selected); - // We want to pass it a String - @SuppressWarnings({ "rawtypes" }) final ListCellRenderer basic = combo.getRenderer(); - combo.setRenderer(new ListCellRenderer() { + combo.setRenderer(new ListCellRenderer() { @Override - public Component getListCellRendererComponent( - JList list, SearchableTag value, - int index, boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, + Object value, int index, boolean isSelected, + boolean cellHasFocus) { Object displayValue = value; - if (value == null) { + if (value instanceof SearchableTag) { + displayValue = ((SearchableTag) value).getName(); + } else { displayValue = "Select a tag..."; cellHasFocus = false; isSelected = false; - } else { - displayValue = value.getName(); } - // We willingly pass a String here - @SuppressWarnings("unchecked") Component rep = basic.getListCellRendererComponent(list, displayValue, index, isSelected, cellHasFocus); @@ -293,6 +303,11 @@ public class GuiReaderSearch extends JFrame { final SearchableTag tag = (SearchableTag) combo .getSelectedItem(); if (tag != null) { + while (comboIndex + 1 < combos.size()) { + JComboBox combo = combos.remove(comboIndex + 1); + tagBars.remove(combo); + } + addTagBar(tag, new Runnable() { @Override public void run() {