X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderSearch.java;h=229b5dbde6a28111315d65e9d7724084b4db5bba;hb=a12b668f37bdaf852ca2377739fd73b610f928c8;hp=59d4f21786724a90a5a0d39c5ea40abdb30f5593;hpb=81acd363d9b0af424d462e9d2e6a07b160e7af3b;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java index 59d4f21..229b5db 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderSearch.java @@ -13,6 +13,7 @@ import java.util.List; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; @@ -45,12 +46,12 @@ public class GuiReaderSearch extends JFrame { private JComboBox comboSupportTypes; private JTabbedPane searchTabs; private JTextField keywordsField; + private JButton submitKeywords; private boolean seeWordcount; private GuiReaderGroup books; public GuiReaderSearch(final GuiReader reader) { - // TODO: i18n super("Browse stories"); setLayout(new BorderLayout()); setSize(800, 600); @@ -68,7 +69,6 @@ public class GuiReaderSearch extends JFrame { } supportType = supportTypes.isEmpty() ? null : supportTypes.get(0); - JPanel top = new JPanel(new BorderLayout()); comboSupportTypes = new JComboBox( supportTypes.toArray(new SupportType[] {})); comboSupportTypes.addActionListener(new ActionListener() { @@ -78,13 +78,16 @@ public class GuiReaderSearch extends JFrame { .getSelectedItem()); } }); - top.add(comboSupportTypes, BorderLayout.NORTH); + JPanel searchSites = new JPanel(new BorderLayout()); + searchSites.add(comboSupportTypes, BorderLayout.CENTER); + searchSites.add(new JLabel(" " + "Website : "), BorderLayout.WEST); - // TODO: i18n searchTabs = new JTabbedPane(); searchTabs.addTab("By name", createByNameSearchPanel()); searchTabs.addTab("By tags", createByTagSearchPanel()); + JPanel top = new JPanel(new BorderLayout()); + top.add(searchSites, BorderLayout.NORTH); top.add(searchTabs, BorderLayout.CENTER); add(top, BorderLayout.NORTH); @@ -117,13 +120,12 @@ public class GuiReaderSearch extends JFrame { keywordsField = new JTextField(); byName.add(keywordsField, BorderLayout.CENTER); - // TODO: i18n - JButton submit = new JButton("Search"); - byName.add(submit, BorderLayout.EAST); + submitKeywords = new JButton("Search"); + byName.add(submitKeywords, BorderLayout.EAST); // TODO: ENTER -> search - submit.addActionListener(new ActionListener() { + submitKeywords.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { search(supportType, keywordsField.getText(), page, 0); @@ -145,7 +147,8 @@ public class GuiReaderSearch extends JFrame { if (supportType != this.supportType) { this.supportType = supportType; comboSupportTypes.setSelectedItem(supportType); - // TODO: reset all + books.clear(); + // TODO: reset all tags } } @@ -177,14 +180,17 @@ public class GuiReaderSearch extends JFrame { }); } + // cannot be NULL private void updateKeywords(final String keywords) { - inUi(new Runnable() { - @Override - public void run() { - GuiReaderSearch.this.keywords = keywords; - keywordsField.setText(keywords); - } - }); + if (!keywords.equals(this.keywords)) { + inUi(new Runnable() { + @Override + public void run() { + GuiReaderSearch.this.keywords = keywords; + keywordsField.setText(keywords); + } + }); + } } // can be NULL @@ -198,10 +204,12 @@ public class GuiReaderSearch extends JFrame { } private void updateBooks(final List infos) { + setWaitingScreen(true); inUi(new Runnable() { @Override public void run() { books.refreshBooks(infos, seeWordcount); + setWaitingScreen(false); } }); } @@ -210,6 +218,8 @@ public class GuiReaderSearch extends JFrame { public void search(final SupportType searchOn, final String keywords, final int page, final int item) { + setWaitingScreen(true); + updateSupportType(searchOn); updateSearchBy(false); updateKeywords(keywords); @@ -248,61 +258,73 @@ public class GuiReaderSearch extends JFrame { // TODO: "click" on item ITEM } } + + setWaitingScreen(false); } }).start(); } - public void searchTag(SupportType searchOn, int page, int item, - SearchableTag tag) { + public void searchTag(final SupportType searchOn, final int page, + final int item, final SearchableTag tag) { + + setWaitingScreen(true); updateSupportType(searchOn); updateSearchBy(true); updateTags(tag); updatePages(page, maxPage); - BasicSearchable search = BasicSearchable.getSearchable(searchOn); - - if (tag != null) { - int maxPage = 0; - try { - maxPage = search.searchPages(tag); - } catch (IOException e) { - Instance.getTraceHandler().error(e); - } - - updatePages(page, maxPage); - - if (page > 0) { - List metas = null; - List subtags = null; - int count; + new Thread(new Runnable() { + @Override + public void run() { + BasicSearchable search = BasicSearchable + .getSearchable(searchOn); - if (tag.isLeaf()) { + if (tag != null) { + int maxPage = 0; try { - metas = search.search(tag, page); + maxPage = search.searchPages(tag); } catch (IOException e) { - metas = new ArrayList(); Instance.getTraceHandler().error(e); } - count = metas.size(); - } else { - subtags = tag.getChildren(); - count = subtags.size(); - } - if (item > 0) { - if (item <= count) { - if (metas != null) { - MetaData meta = metas.get(item - 1); - // TODO: select story + updatePages(page, maxPage); + + 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); - // TODO: search on tag + 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 + } + } } } } + setWaitingScreen(false); } - } + }).start(); } /** @@ -316,7 +338,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 { @@ -329,4 +351,15 @@ public class GuiReaderSearch extends JFrame { } } } + + private void setWaitingScreen(final boolean waiting) { + inUi(new Runnable() { + @Override + public void run() { + GuiReaderSearch.this.setEnabled(!waiting); + books.setEnabled(!waiting); + submitKeywords.setEnabled(!waiting); + } + }); + } }