X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderSearch.java;h=50d3d82f4b80f23b6291da3c61e0166969412626;hb=6e950847558e8528100e4744ee3f2ffe341d74a4;hp=172f0fa822f379de921988608f65016ddf5ad83c;hpb=415c74543f4cdb92b32b495ac73c961f4f377387;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java index 172f0fa..50d3d82 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java @@ -36,18 +36,20 @@ import be.nikiroo.fanfix.supported.SupportType; * * @author niki */ +// JCombobox not 1.6 compatible +@SuppressWarnings({ "unchecked", "rawtypes" }) public class GuiReaderSearch extends JFrame { private static final long serialVersionUID = 1L; private List supportTypes; private SupportType supportType; private boolean searchByTags; - private List tags; private String keywords; private int page; private int maxPage; private JPanel tagBars; + private List combos; private JComboBox comboSupportTypes; private JTabbedPane searchTabs; @@ -62,7 +64,6 @@ public class GuiReaderSearch extends JFrame { setLayout(new BorderLayout()); setSize(800, 600); - tags = new ArrayList(); page = 1; // TODO maxPage = -1; searchByTags = false; @@ -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(); @@ -251,6 +261,8 @@ public class GuiReaderSearch extends JFrame { final SearchableTag selected) { tags.add(0, null); + final int comboIndex = combos.size(); + final JComboBox combo = new JComboBox( tags.toArray(new SearchableTag[] {})); combo.setSelectedItem(selected); @@ -259,13 +271,13 @@ public class GuiReaderSearch extends JFrame { combo.setRenderer(new ListCellRenderer() { @Override - public Component getListCellRendererComponent( - JList list, Object 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 instanceof SearchableTag) { - displayValue = ((SearchableTag)value).getName(); + displayValue = ((SearchableTag) value).getName(); } else { displayValue = "Select a tag..."; cellHasFocus = false; @@ -289,10 +301,30 @@ 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() { - // TODO: stories if needed + // TODO: slow ui + SearchableTag tag = ((SearchableTag) combo + .getSelectedItem()); + if (tag != null && tag.isLeaf()) { + BasicSearchable searchable = BasicSearchable + .getSearchable(supportType); + List metas = new ArrayList(); + try { + metas = searchable.search(tag, 1); + search(metas, 1, + searchable.searchPages(tag), 0); + } catch (IOException e) { + error(e); + } + } + setWaitingScreen(false); } }); @@ -300,6 +332,7 @@ public class GuiReaderSearch extends JFrame { } }); + combos.add(combo); tagBars.add(combo); } @@ -330,7 +363,6 @@ public class GuiReaderSearch extends JFrame { children = tag.getChildren(); } else { children = null; - // TODO: stories } } @@ -400,7 +432,7 @@ public class GuiReaderSearch extends JFrame { }).start(); } - // tag: must be filled (or NULL for base tags) + // tag: null = base tags public void searchTag(final SupportType searchOn, final int page, final int item, final SearchableTag tag) { @@ -418,6 +450,12 @@ public class GuiReaderSearch extends JFrame { .getSearchable(searchOn); if (tag != null) { + try { + search.fillTag(tag); + } catch (IOException e) { + error(e); + } + int maxPage = 0; try { maxPage = search.searchPages(tag);