X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderSearch.java;h=e7a1f2b518a54c52fb6267bdb7731fe9eacb73b9;hb=c499d79f13535082dd25c7ee46e897d3372c4299;hp=d9490ff0b8cc9480f96fc04e11be5f5950f8e09b;hpb=4357eb547f73618705be59abc086f2fddc2784cb;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java index d9490ff..e7a1f2b 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java @@ -1,6 +1,8 @@ package be.nikiroo.fanfix.reader.ui; import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -19,6 +21,7 @@ import javax.swing.JTextField; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.data.MetaData; +import be.nikiroo.fanfix.reader.ui.GuiReaderBook.BookActionListener; import be.nikiroo.fanfix.searchable.BasicSearchable; import be.nikiroo.fanfix.searchable.SearchableTag; import be.nikiroo.fanfix.supported.SupportType; @@ -34,6 +37,7 @@ public class GuiReaderSearch extends JFrame { private List supportTypes; private SupportType supportType; + private boolean searchByTags; private List tags; private String keywords; private int page; @@ -41,11 +45,12 @@ public class GuiReaderSearch extends JFrame { private JComboBox comboSupportTypes; private JTabbedPane searchTabs; + private JTextField keywordsField; private boolean seeWordcount; private GuiReaderGroup books; - public GuiReaderSearch(GuiReader reader) { + public GuiReaderSearch(final GuiReader reader) { // TODO: i18n super("Browse stories"); setLayout(new BorderLayout()); @@ -54,6 +59,7 @@ public class GuiReaderSearch extends JFrame { tags = new ArrayList(); page = 1; // TODO maxPage = -1; + searchByTags = false; supportTypes = new ArrayList(); for (SupportType type : SupportType.values()) { @@ -69,7 +75,7 @@ public class GuiReaderSearch extends JFrame { comboSupportTypes.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - setSupportType((SupportType) comboSupportTypes + updateSupportType((SupportType) comboSupportTypes .getSelectedItem()); } }); @@ -85,21 +91,31 @@ public class GuiReaderSearch extends JFrame { add(top, BorderLayout.NORTH); books = new GuiReaderGroup(reader, null, null); + books.setActionListener(new BookActionListener() { + @Override + public void select(GuiReaderBook book) { + } + + @Override + public void popupRequested(GuiReaderBook book, Component target, + int x, int y) { + } + + @Override + public void action(GuiReaderBook book) { + new GuiReaderSearchAction(reader.getLibrary(), book.getInfo()) + .setVisible(true); + } + }); JScrollPane scroll = new JScrollPane(books); scroll.getVerticalScrollBar().setUnitIncrement(16); add(scroll, BorderLayout.CENTER); } - public void setSupportType(SupportType supportType) { - this.supportType = supportType; - comboSupportTypes.setSelectedItem(supportType); - // TODO: reset all - } - private JPanel createByNameSearchPanel() { JPanel byName = new JPanel(new BorderLayout()); - final JTextField keywordsField = new JTextField(); + keywordsField = new JTextField(); byName.add(keywordsField, BorderLayout.CENTER); // TODO: i18n @@ -126,12 +142,81 @@ public class GuiReaderSearch extends JFrame { return byTag; } - // item 0 = no selction, else = default selection + private void updateSupportType(SupportType supportType) { + if (supportType != this.supportType) { + this.supportType = supportType; + comboSupportTypes.setSelectedItem(supportType); + // TODO: reset all + } + } + + private void updateSearchBy(final boolean byTag) { + if (byTag != this.searchByTags) { + inUi(new Runnable() { + @Override + public void run() { + if (!byTag) { + searchTabs.setSelectedIndex(0); + } else { + searchTabs.setSelectedIndex(1); + } + } + }); + } + } + + private void updatePages(final int page, final Integer maxPage) { + inUi(new Runnable() { + @Override + public void run() { + GuiReaderSearch.this.page = page; + GuiReaderSearch.this.maxPage = maxPage; + // TODO: gui + System.out.println("page: " + page); + System.out.println("max page: " + maxPage); + } + }); + } + + private void updateKeywords(final String keywords) { + inUi(new Runnable() { + @Override + public void run() { + GuiReaderSearch.this.keywords = keywords; + keywordsField.setText(keywords); + } + }); + } + + // can be NULL + private void updateTags(final SearchableTag tag) { + inUi(new Runnable() { + @Override + public void run() { + // TODO + } + }); + } + + private void updateBooks(final List infos) { + setWaitingScreen(true); + inUi(new Runnable() { + @Override + public void run() { + books.refreshBooks(infos, seeWordcount); + setWaitingScreen(false); + } + }); + } + + // item 0 = no selection, else = default selection public void search(final SupportType searchOn, final String keywords, final int page, final int item) { - setSupportType(searchOn); - this.keywords = keywords; - this.page = page; + + updateSupportType(searchOn); + updateSearchBy(false); + updateKeywords(keywords); + updatePages(page, maxPage); new Thread(new Runnable() { @Override @@ -170,91 +255,67 @@ public class GuiReaderSearch extends JFrame { }).start(); } - private void updatePages(final int page, final Integer maxPage) { - inUi(new Runnable() { - @Override - public void run() { - GuiReaderSearch.this.page = page; - GuiReaderSearch.this.maxPage = maxPage; - // TODO: gui - System.out.println("page: " + page); - System.out.println("max page: " + maxPage); - } - }); - } + public void searchTag(final SupportType searchOn, final int page, + final int item, final SearchableTag tag) { - private void updateBooks(final List infos) { - inUi(new Runnable() { + setWaitingScreen(true); + + updateSupportType(searchOn); + updateSearchBy(true); + updateTags(tag); + updatePages(page, maxPage); + + new Thread(new Runnable() { @Override public void run() { - books.refreshBooks(infos, seeWordcount); - } - }); - } - - private void searchTag(SupportType searchOn, int page, int item, - boolean sync, Integer... tags) throws IOException { + BasicSearchable search = BasicSearchable + .getSearchable(searchOn); - BasicSearchable search = BasicSearchable.getSearchable(searchOn); - SearchableTag stag = search.getTag(tags); + if (tag != null) { + int maxPage = 0; + try { + maxPage = search.searchPages(tag); + } catch (IOException e) { + Instance.getTraceHandler().error(e); + } - if (stag == null) { - // TODO i18n - System.out.println("Known tags: "); - int i = 1; - for (SearchableTag s : search.getTags()) { - System.out.println(String.format("%d: %s", i, s.getName())); - i++; - } - } else { - if (page <= 0) { - if (stag.isLeaf()) { - search.search(stag, 1); - System.out.println(stag.getPages()); - } else { - System.out.println(stag.getCount()); - } - } else { - List metas = null; - List subtags = null; - int count; - - if (stag.isLeaf()) { - metas = search.search(stag, page); - count = metas.size(); - } else { - subtags = stag.getChildren(); - count = subtags.size(); - } + updatePages(page, maxPage); - if (item > 0) { - if (item <= count) { - if (metas != null) { - MetaData meta = metas.get(item - 1); - // displayStory(meta); + if (page > 0) { + List metas = null; + List subtags = null; + int count; + + if (tag.isLeaf()) { + try { + metas = search.search(tag, page); + } catch (IOException e) { + metas = new ArrayList(); + Instance.getTraceHandler().error(e); + } + count = metas.size(); } else { - SearchableTag subtag = subtags.get(item - 1); - // displayTag(subtag); + subtags = tag.getChildren(); + count = subtags.size(); + } + + if (item > 0) { + if (item <= count) { + if (metas != null) { + MetaData meta = metas.get(item - 1); + // TODO: select story + } else { + SearchableTag subtag = subtags + .get(item - 1); + // TODO: search on tag + } + } } - } else { - System.out.println("Invalid item: only " + count - + " items found"); - } - } else { - if (metas != null) { - // TODO i18n - System.out.println(String.format("Content of %s: ", - stag.getFqName())); - // displayStories(metas); - } else { - // TODO i18n - System.out.println(String.format("Subtags of %s: ", - stag.getFqName())); - // displayTags(subtags); } } + setWaitingScreen(false); } - } + }).start(); } /** @@ -268,7 +329,7 @@ public class GuiReaderSearch extends JFrame { * @param run * the action to run */ - public void inUi(final Runnable run) { + private void inUi(final Runnable run) { if (EventQueue.isDispatchThread()) { run.run(); } else { @@ -281,4 +342,19 @@ public class GuiReaderSearch extends JFrame { } } } + + private void setWaitingScreen(final boolean waiting) { + inUi(new Runnable() { + @Override + public void run() { + GuiReaderSearch.this.setEnabled(!waiting); + // TODO: this is just an example of something to do + if (waiting) { + books.setBackground(Color.RED); + } else { + books.setBackground(null); + } + } + }); + } }