TUI: code cleanup + show story info
[fanfix.git] / src / be / nikiroo / fanfix / reader / tui / TuiReaderApplication.java
index b7109ab8d6ae55fba0e225d0604c1a6a139f89e8..7dc1fd5919609b64e33e88466318f668ee9ba336 100644 (file)
@@ -34,24 +34,23 @@ class TuiReaderApplication extends TApplication implements Reader {
        public static final int MENU_IMPORT_URL = 1026;
        public static final int MENU_IMPORT_FILE = 1027;
        public static final int MENU_EXPORT = 1028;
-       public static final int MENU_EXIT = 1029;
+       public static final int MENU_LIBRARY = 1029;
+       public static final int MENU_EXIT = 1030;
 
        private Reader reader;
        private TuiReaderMainWindow main;
 
+       private MetaData meta;
+       private String source;
+       private boolean useMeta;
+
        // start reading if meta present
        public TuiReaderApplication(Reader reader, BackendType backend)
                        throws Exception {
                super(backend);
                init(reader);
 
-               MetaData meta = getMeta();
-
-               main = new TuiReaderMainWindow(this);
-               main.setMeta(meta);
-               if (meta != null) {
-                       read();
-               }
+               showMain(getMeta(), null, true);
        }
 
        public TuiReaderApplication(Reader reader, String source,
@@ -59,8 +58,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                super(backend);
                init(reader);
 
-               main = new TuiReaderMainWindow(this);
-               main.setSource(source);
+               showMain(null, source, false);
        }
 
        @Override
@@ -136,6 +134,51 @@ class TuiReaderApplication extends TApplication implements Reader {
                reader.setChapter(chapter);
        }
 
+       /**
+        * Set the default status bar when this window appear.
+        * <p>
+        * Some shortcuts are always visible, and will be put here.
+        * <p>
+        * Note that shortcuts placed this way on menu won't work unless the menu
+        * also implement them.
+        * 
+        * @param window
+        *            the new window or menu on screen
+        * @param description
+        *            the description to show on the status ba
+        */
+       public TStatusBar setStatusBar(TWindow window, String description) {
+               TStatusBar statusBar = window.newStatusBar(description);
+               statusBar.addShortcutKeypress(TKeypress.kbF10, TCommand.cmExit, "Exit");
+               return statusBar;
+
+       }
+
+       private void showMain(MetaData meta, String source, boolean useMeta)
+                       throws IOException {
+               // TODO: thread-safety
+               this.meta = meta;
+               this.source = source;
+               this.useMeta = useMeta;
+
+               if (main != null && main.isVisible()) {
+                       main.activate();
+               } else {
+                       if (main != null) {
+                               main.close();
+                       }
+                       main = new TuiReaderMainWindow(this);
+                       if (useMeta) {
+                               main.setMeta(meta);
+                               if (meta != null) {
+                                       read();
+                               }
+                       } else {
+                               main.setSource(source);
+                       }
+               }
+       }
+
        private void init(Reader reader) {
                this.reader = reader;
 
@@ -151,12 +194,12 @@ class TuiReaderApplication extends TApplication implements Reader {
                fileMenu.addItem(MENU_IMPORT_URL, "Import &URL...");
                fileMenu.addItem(MENU_IMPORT_FILE, "Import &file...");
                fileMenu.addSeparator();
+               fileMenu.addItem(MENU_LIBRARY, "Lib&rary");
+               fileMenu.addSeparator();
                fileMenu.addItem(MENU_EXIT, "E&xit");
 
-               TStatusBar statusBar = fileMenu.newStatusBar("File-management "
+               setStatusBar(fileMenu, "File-management "
                                + "commands (Open, Save, Print, etc.)");
-               // TODO: doesn't actually work:
-               statusBar.addShortcutKeypress(TKeypress.kbF10, TCommand.cmExit, "Exit");
 
                // TODO: Edit: re-download, delete
 
@@ -174,7 +217,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                case MENU_EXIT:
                        if (messageBox("Confirmation", "(TODO: i18n) Exit application?",
                                        TMessageBox.Type.YESNO).getResult() == TMessageBox.Result.YES) {
-                               // exit(false);
+                               exit(); // TODO: exit(false) for "no confirm box"
                        }
 
                        return true;
@@ -211,6 +254,14 @@ class TuiReaderApplication extends TApplication implements Reader {
                                e.printStackTrace();
                        }
 
+                       return true;
+               case MENU_LIBRARY:
+                       try {
+                               showMain(meta, source, useMeta);
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                       }
+
                        return true;
                }