GUI search: beta quality
authorNiki Roo <niki@nikiroo.be>
Fri, 19 Apr 2019 22:40:34 +0000 (00:40 +0200)
committerNiki Roo <niki@nikiroo.be>
Fri, 19 Apr 2019 22:40:34 +0000 (00:40 +0200)
src/be/nikiroo/fanfix/reader/ui/GuiReaderNavBar.java
src/be/nikiroo/fanfix/reader/ui/GuiReaderSearchByNamePanel.java
src/be/nikiroo/fanfix/reader/ui/GuiReaderSearchByTagPanel.java
src/be/nikiroo/fanfix/reader/ui/GuiReaderSearchFrame.java

index 0f3d8dc67ba6296629262e0b79399a0601a33670..099b3c87a0e66eb7d7074e3d58f350889c685f9d 100644 (file)
@@ -36,17 +36,20 @@ public class GuiReaderNavBar extends JPanel {
         * Create a new navigation bar.
         * <p>
         * The minimum must be lower or equal to the maximum.
+        * <p>
+        * Note than a max of "-1" means "infinite".
         * 
         * @param min
-        *            the minimum page number
+        *            the minimum page number (cannot be negative)
         * @param max
-        *            the maximum page number
+        *            the maximum page number (cannot be lower than min, except if
+        *            -1 (infinite))
         * 
         * @throws IndexOutOfBoundsException
-        *             if min &gt; max
+        *             if min &gt; max and max is not "-1"
         */
        public GuiReaderNavBar(int min, int max) {
-               if (min > max) {
+               if (min > max && max != -1) {
                        throw new IndexOutOfBoundsException(String.format(
                                        "min (%d) > max (%d)", min, max));
                }
@@ -60,24 +63,28 @@ public class GuiReaderNavBar extends JPanel {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                setIndex(GuiReaderNavBar.this.min);
+                               fireEvent();
                        }
                });
                navButtons[1] = createNavButton(" < ", new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                setIndex(index - 1);
+                               fireEvent();
                        }
                });
                navButtons[2] = createNavButton(" > ", new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                setIndex(index + 1);
+                               fireEvent();
                        }
                });
                navButtons[3] = createNavButton(">>", new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                setIndex(GuiReaderNavBar.this.max);
+                               fireEvent();
                        }
                });
 
@@ -114,15 +121,14 @@ public class GuiReaderNavBar extends JPanel {
         * @param index
         *            the new index
         */
-       private void setIndex(int index) {
+       public void setIndex(int index) {
                if (index != this.index) {
-                       if (index < min || index > max) {
+                       if (index < min || (index > max && max != -1)) {
                                throw new IndexOutOfBoundsException(String.format(
                                                "Index %d but min/max is [%d/%d]", index, min, max));
                        }
 
                        this.index = index;
-                       fireEvent();
                        updateLabel();
                }
 
@@ -130,7 +136,7 @@ public class GuiReaderNavBar extends JPanel {
        }
 
        /**
-        * The minimun page number.
+        * The minimun page number. Cannot be negative.
         * 
         * @return the min
         */
@@ -139,7 +145,7 @@ public class GuiReaderNavBar extends JPanel {
        }
 
        /**
-        * The minimum page number.
+        * The minimum page number. Cannot be negative.
         * <p>
         * May update the index if needed (if the index is &lt; the new min).
         * <p>
@@ -153,17 +159,15 @@ public class GuiReaderNavBar extends JPanel {
                this.min = min;
                if (index < min) {
                        index = min;
-                       updateEnabled();
-                       updateLabel();
-                       fireEvent();
-               } else {
-                       updateEnabled();
-                       updateLabel();
                }
+               updateEnabled();
+               updateLabel();
+
        }
 
        /**
-        * The maximum page number.
+        * The maximum page number. Cannot be lower than min, except if -1
+        * (infinite).
         * 
         * @return the max
         */
@@ -172,7 +176,8 @@ public class GuiReaderNavBar extends JPanel {
        }
 
        /**
-        * The maximum page number.
+        * The maximum page number. Cannot be lower than min, except if -1
+        * (infinite).
         * <p>
         * May update the index if needed (if the index is &gt; the new max).
         * <p>
@@ -184,15 +189,11 @@ public class GuiReaderNavBar extends JPanel {
         */
        public void setMax(int max) {
                this.max = max;
-               if (index > max) {
+               if (index > max && max != -1) {
                        index = max;
-                       updateEnabled();
-                       updateLabel();
-                       fireEvent();
-               } else {
-                       updateEnabled();
-                       updateLabel();
                }
+               updateEnabled();
+               updateLabel();
        }
 
        /**
@@ -246,9 +247,9 @@ public class GuiReaderNavBar extends JPanel {
        }
 
        /**
-        * Notify a chnge of page.
+        * Notify a change of page.
         */
-       private void fireEvent() {
+       public void fireEvent() {
                for (ActionListener listener : listeners) {
                        try {
                                listener.actionPerformed(new ActionEvent(this,
@@ -289,8 +290,8 @@ public class GuiReaderNavBar extends JPanel {
        private void updateEnabled() {
                navButtons[0].setEnabled(index > min);
                navButtons[1].setEnabled(index > min);
-               navButtons[2].setEnabled(index < max);
-               navButtons[3].setEnabled(index < max);
+               navButtons[2].setEnabled(index < max || max == -1);
+               navButtons[3].setEnabled(index < max || max == -1);
        }
 
        /**
@@ -313,7 +314,12 @@ public class GuiReaderNavBar extends JPanel {
        protected String computeLabel(int index,
                        @SuppressWarnings("unused") int min, int max) {
 
-               String base = "&nbsp;&nbsp;<B>Page <SPAN COLOR='#444466'>%d</SPAN>&nbsp;/&nbsp;%d</B>";
+               String base = "&nbsp;&nbsp;<B>Page <SPAN COLOR='#444466'>%d</SPAN>&nbsp;";
+               if (max >= 0) {
+                       base += "/&nbsp;%d";
+               }
+               base += "</B>";
+
                String ifLabel = ": %s";
 
                String display = base;
@@ -324,6 +330,10 @@ public class GuiReaderNavBar extends JPanel {
 
                display = "<HTML>" + display + "</HTML>";
 
-               return String.format(display, index, max, label);
+               if (max >= 0) {
+                       return String.format(display, index, max, label);
+               }
+
+               return String.format(display, index, label);
        }
 }
index 51db24c12076fc9929c31028eb952ce8b12d74c3..ebdb21ab2cf760562089447d48fffac6b873445f 100644 (file)
@@ -90,7 +90,7 @@ public class GuiReaderSearchByNamePanel extends JPanel {
         */
        public void setSearchable(BasicSearchable searchable) {
                this.searchable = searchable;
-               page = 1;
+               page = 0;
                maxPage = -1;
                storyItem = 0;
                stories = new ArrayList<MetaData>();
index a654d167b35bb7fc201e68cdb46c5897c4420501..260fc481cba8dd5bc2eb0c3f6d035ebb7ece8a1b 100644 (file)
@@ -49,7 +49,7 @@ public class GuiReaderSearchByTagPanel extends JPanel {
 
                this.waitable = waitable;
                combos = new ArrayList<JComboBox>();
-               page = 1;
+               page = 0;
                maxPage = -1;
 
                tagBars = new JPanel();
@@ -69,7 +69,7 @@ public class GuiReaderSearchByTagPanel extends JPanel {
         */
        public void setSearchable(BasicSearchable searchable) {
                this.searchable = searchable;
-               page = 1;
+               page = 0;
                maxPage = -1;
                storyItem = 0;
                stories = new ArrayList<MetaData>();
@@ -298,6 +298,7 @@ public class GuiReaderSearchByTagPanel extends JPanel {
                                                                        page = 1;
                                                                        stories = searchable.search(tag, 1);
                                                                        maxPage = searchable.searchPages(tag);
+                                                                       currentTag = tag;
                                                                } catch (IOException e) {
                                                                        GuiReaderSearchFrame.error(e);
                                                                        page = 0;
index 11d45e41fc6374ae2e46af973b9d1e9478bfa44b..5b997729469b9ae3bf2afee37a4f0365c295da3e 100644 (file)
@@ -34,12 +34,11 @@ public class GuiReaderSearchFrame extends JFrame {
        private static final long serialVersionUID = 1L;
 
        private List<SupportType> supportTypes;
-       private int page;
-       private int maxPage;
 
        private JComboBox comboSupportTypes;
        private ActionListener comboSupportTypesListener;
        private GuiReaderSearchByPanel searchPanel;
+       private GuiReaderNavBar navbar;
 
        private boolean seeWordcount;
        private GuiReaderGroup books;
@@ -49,9 +48,6 @@ public class GuiReaderSearchFrame extends JFrame {
                setLayout(new BorderLayout());
                setSize(800, 600);
 
-               page = 1;
-               maxPage = -1;
-
                supportTypes = new ArrayList<SupportType>();
                supportTypes.add(null);
                for (SupportType type : SupportType.values()) {
@@ -103,6 +99,16 @@ public class GuiReaderSearchFrame extends JFrame {
                                                        infos.add(GuiReaderBookInfo.fromMeta(meta));
                                                }
 
+                                               int page = searchPanel.getPage();
+                                               if (page <= 0) {
+                                                       navbar.setMin(1);
+                                                       navbar.setMax(1);
+                                               } else {
+                                                       int max = searchPanel.getMaxPage();
+                                                       navbar.setMin(1);
+                                                       navbar.setMax(max);
+                                                       navbar.setIndex(page);
+                                               }
                                                updateBooks(infos);
 
                                                // ! 1-based index !
@@ -139,6 +145,27 @@ public class GuiReaderSearchFrame extends JFrame {
                JScrollPane scroll = new JScrollPane(books);
                scroll.getVerticalScrollBar().setUnitIncrement(16);
                add(scroll, BorderLayout.CENTER);
+
+               navbar = new GuiReaderNavBar(-1, -1) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected String computeLabel(int index, int min, int max) {
+                               if (index <= 0) {
+                                       return "";
+                               }
+                               return super.computeLabel(index, min, max);
+                       }
+               };
+
+               navbar.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               searchPanel.setPage(navbar.getIndex());
+                       }
+               });
+
+               add(navbar, BorderLayout.SOUTH);
        }
 
        /**
@@ -162,7 +189,6 @@ public class GuiReaderSearchFrame extends JFrame {
                                                .removeActionListener(comboSupportTypesListener);
                                comboSupportTypes.setSelectedItem(supportType);
                                comboSupportTypes.addActionListener(comboSupportTypesListener);
-
                        }
                });
 
@@ -185,12 +211,14 @@ public class GuiReaderSearchFrame extends JFrame {
                inUi(new Runnable() {
                        @Override
                        public void run() {
-                               GuiReaderSearchFrame.this.page = page;
-                               GuiReaderSearchFrame.this.maxPage = maxPage;
-
-                               // TODO: gui
-                               System.out.println("page: " + page);
-                               System.out.println("max page: " + maxPage);
+                               if (maxPage >= 1) {
+                                       navbar.setMin(1);
+                                       navbar.setMax(maxPage);
+                                       navbar.setIndex(page);
+                               } else {
+                                       navbar.setMin(-1);
+                                       navbar.setMax(-1);
+                               }
                        }
                });
        }