Instance: use getInstance()
[nikiroo-utils.git] / src / be / nikiroo / fanfix / reader / tui / TuiReaderMainWindow.java
index e4323f08fe21ce836fa20d30b1275a2d3aea187b..b1ebcc2e6971de4c25e119c5e6fbbb7a32043844 100644 (file)
@@ -22,7 +22,7 @@ import be.nikiroo.fanfix.Instance;
 import be.nikiroo.fanfix.data.MetaData;
 import be.nikiroo.fanfix.library.BasicLibrary;
 import be.nikiroo.fanfix.output.BasicOutput.OutputType;
-import be.nikiroo.fanfix.reader.Reader;
+import be.nikiroo.jexer.TSizeConstraint;
 
 /**
  * The library window, that will list all the (filtered) stories available in
@@ -42,7 +42,7 @@ class TuiReaderMainWindow extends TWindow {
        private TList list;
        private List<MetaData> listKeys;
        private List<String> listItems;
-       private Reader reader;
+       private TuiReaderApplication reader;
 
        private Mode mode = Mode.SOURCE;
        private String target = null;
@@ -50,9 +50,9 @@ class TuiReaderMainWindow extends TWindow {
 
        private List<TSizeConstraint> sizeConstraints = new ArrayList<TSizeConstraint>();
 
-       // TODO: because no way to find out the current index!!
-       private TComboBox select;
-       private TComboBox option;
+       // The 2 comboboxes used to select by source/author
+       private TComboBox selectTargetBox;
+       private TComboBox selectBox;
 
        /**
         * Create a new {@link TuiReaderMainWindow} without any stories in the list.
@@ -70,9 +70,9 @@ class TuiReaderMainWindow extends TWindow {
                listKeys = new ArrayList<MetaData>();
                listItems = new ArrayList<String>();
 
-               addSearch();
                addList();
-               addSelect(); // TODO: last so it can draw over the rest
+               addSearch();
+               addSelect();
 
                TStatusBar statusBar = reader.setStatusBar(this, "Library");
                statusBar.addShortcutKeypress(TKeypress.kbCtrlF, CMD_SEARCH, "Search");
@@ -138,90 +138,87 @@ class TuiReaderMainWindow extends TWindow {
        }
 
        private void addSelect() {
-               // TODO: make a full list
-               final List<String> options = new ArrayList<String>();
-               options.add("(show all)");
-               options.add("Sources");
-               options.add("Author");
-
-               // TODO
+               // TODO: i18n
                final List<String> selects = new ArrayList<String>();
                selects.add("(show all)");
-               for (String source : reader.getLibrary().getSources()) {
-                       selects.add(source);
-               }
+               selects.add("Sources");
+               selects.add("Author");
+
+               final List<String> selectTargets = new ArrayList<String>();
+               selectTargets.add("");
 
                TLabel lblSelect = addLabel("Select: ", 0, 0);
 
-               // TODO: why must be last so to be able to draw over the rest
-               // TODO: make it so we cannot add manual entries
-               // TODO: how to select the item via keyboard? why double-click via
-               // mouse?
-               // TODO: how to change the values size on resize?
-               // TODO: setWidth() does not impact the display width, only the control
-               // and the down arrow on the right
-               // TODO: width 1 +resize + click on down arrow = bad format exception
-               select = addComboBox(0, 0, 10, selects, 0,
-                               Math.min(selects.size() + 1, getHeight() - 1 - 1),
-                               new TAction() {
-                                       @Override
-                                       public void DO() {
-                                               // TODO: detect (show all)
-                                               if (select.getText().equals("(show all)")) {
-                                                       setMode(mode, null);
-                                               } else {
-                                                       setMode(mode, select.getText());
+               TAction onSelect = new TAction() {
+                       @Override
+                       public void DO() {
+                               String smode = selectBox.getText();
+                               boolean showTarget;
+                               if (smode == null || smode.equals("(show all)")) {
+                                       showTarget = false;
+                               } else if (smode.equals("Sources")) {
+                                       selectTargets.clear();
+                                       selectTargets.add("(show all)");
+                                       try {
+                                               for (String source : reader.getLibrary().getSources()) {
+                                                       selectTargets.add(source);
                                                }
+                                       } catch (IOException e) {
+                                               Instance.getInstance().getTraceHandler().error(e);
                                        }
-                               });
 
-               option = addComboBox(0, 0, 10, options, 0,
-                               Math.min(selects.size() + 1, getHeight() - 1 - 1),
+                                       showTarget = true;
+                               } else {
+                                       selectTargets.clear();
+                                       selectTargets.add("(show all)");
+                                       try {
+                                               for (String author : reader.getLibrary().getAuthors()) {
+                                                       selectTargets.add(author);
+                                               }
+                                       } catch (IOException e) {
+                                               Instance.getInstance().getTraceHandler().error(e);
+                                       }
+
+                                       showTarget = true;
+                               }
+
+                               selectTargetBox.setVisible(showTarget);
+                               selectTargetBox.setEnabled(showTarget);
+                               if (showTarget) {
+                                       selectTargetBox.reflowData();
+                               }
+
+                               selectTargetBox.setText(selectTargets.get(0));
+                               if (showTarget) {
+                                       TuiReaderMainWindow.this.activate(selectTargetBox);
+                               } else {
+                                       TuiReaderMainWindow.this.activate(list);
+                               }
+                       }
+               };
+
+               selectBox = addComboBox(0, 0, 10, selects, 0, -1, onSelect);
+
+               selectTargetBox = addComboBox(0, 0, 0, selectTargets, 0, -1,
                                new TAction() {
                                        @Override
                                        public void DO() {
-                                               // TODO clear not working!!
-
-                                               String smode = option.getText();
-                                               Mode mode;
-                                               if (smode == null || smode.equals("(show all)")) {
-                                                       mode = null;
-                                                       select.setVisible(false);
-                                                       select.setEnabled(false);
-                                               } else if (smode.equals("Sources")) {
-                                                       mode = Mode.SOURCE;
-                                                       select.setVisible(true);
-                                                       select.setEnabled(true);
-                                                       selects.clear();
-                                                       selects.add("(show all)");
-                                                       for (String source : reader.getLibrary()
-                                                                       .getSources()) {
-                                                               selects.add(source);
-                                                       }
-                                               } else {
-                                                       mode = Mode.AUTHOR;
-                                                       select.setVisible(true);
-                                                       select.setEnabled(true);
-                                                       selects.clear();
-                                                       selects.add("(show all)");
-                                                       for (String author : reader.getLibrary()
-                                                                       .getAuthors()) {
-                                                               selects.add(author);
-                                                       }
-                                               }
-
-                                               // TODO: detect (show all)
-                                               if (select.getText().equals("(show all)")) {
+                                               if (selectTargetBox.getText().equals(
+                                                               selectTargets.get(0))) {
                                                        setMode(mode, null);
                                                } else {
-                                                       setMode(mode, select.getText());
+                                                       setMode(mode, selectTargetBox.getText());
                                                }
                                        }
                                });
 
+               // Set defaults
+               onSelect.DO();
+
                TSizeConstraint.setSize(sizeConstraints, lblSelect, 5, 3, null, null);
-               TSizeConstraint.setSize(sizeConstraints, option, 15, 3, -5, null);
-               TSizeConstraint.setSize(sizeConstraints, select, 15, 4, -5, null);
+               TSizeConstraint.setSize(sizeConstraints, selectBox, 15, 3, -5, null);
+               TSizeConstraint.setSize(sizeConstraints, selectTargetBox, 15, 4, -5,
+                               null);
        }
 
        @Override
@@ -243,12 +240,18 @@ class TuiReaderMainWindow extends TWindow {
         */
        public void refreshStories() {
                List<MetaData> metas;
-               if (mode == Mode.SOURCE) {
-                       metas = reader.getLibrary().getListBySource(target);
-               } else if (mode == Mode.AUTHOR) {
-                       metas = reader.getLibrary().getListByAuthor(target);
-               } else {
-                       metas = reader.getLibrary().getList();
+
+               try {
+                       if (mode == Mode.SOURCE) {
+                               metas = reader.getLibrary().getListBySource(target);
+                       } else if (mode == Mode.AUTHOR) {
+                               metas = reader.getLibrary().getListByAuthor(target);
+                       } else {
+                               metas = reader.getLibrary().getList();
+                       }
+               } catch (IOException e) {
+                       Instance.getInstance().getTraceHandler().error(e);
+                       metas = new ArrayList<MetaData>();
                }
 
                setMetas(metas);
@@ -294,6 +297,9 @@ class TuiReaderMainWindow extends TWindow {
                }
 
                list.setList(listItems);
+               if (listItems.size() > 0) {
+                       list.setSelectedIndex(0);
+               }
        }
 
        public MetaData getSelectedMeta() {
@@ -308,9 +314,9 @@ class TuiReaderMainWindow extends TWindow {
                try {
                        reader.setChapter(-1);
                        reader.setMeta(meta);
-                       reader.read();
+                       reader.read(false);
                } catch (IOException e) {
-                       Instance.getTraceHandler().error(e);
+                       Instance.getInstance().getTraceHandler().error(e);
                }
        }
 
@@ -333,11 +339,11 @@ class TuiReaderMainWindow extends TWindow {
                MetaData meta = getSelectedMeta();
                if (meta != null) {
                        switch (menu.getId()) {
-                       case TuiReaderApplication.MENU_OPEN:
+                       case TuiReaderApplication.MENU_FILE_OPEN:
                                readStory(meta);
 
                                return;
-                       case TuiReaderApplication.MENU_EXPORT:
+                       case TuiReaderApplication.MENU_FILE_EXPORT:
 
                                try {
                                        // TODO: choose type, pg, error