wip
[fanfix.git] / src / be / nikiroo / fanfix / reader / tui / TuiReaderApplication.java
index 6fa969b50da925f0ffe1994fa0f25dbc76faec8f..89034e485c5f9b6ff79f3d1d4b40c8994e505956 100644 (file)
@@ -10,6 +10,7 @@ import jexer.TCommand;
 import jexer.TKeypress;
 import jexer.TMessageBox;
 import jexer.TStatusBar;
+import jexer.TWidget;
 import jexer.TWindow;
 import jexer.event.TMenuEvent;
 import jexer.menu.TMenu;
@@ -37,6 +38,9 @@ class TuiReaderApplication extends TApplication implements Reader {
        public static final int MENU_LIBRARY = 1029;
        public static final int MENU_EXIT = 1030;
 
+       public static final TCommand CMD_EXIT = new TCommand(MENU_EXIT) {
+       };
+
        private Reader reader;
        private TuiReaderMainWindow main;
 
@@ -50,9 +54,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                super(backend);
                init(reader);
 
-               MetaData meta = getMeta();
-
-               showMain(meta, null, true);
+               showMain(getMeta(), null, true);
        }
 
        public TuiReaderApplication(Reader reader, String source,
@@ -63,31 +65,6 @@ class TuiReaderApplication extends TApplication implements Reader {
                showMain(null, source, false);
        }
 
-       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);
-                       }
-               }
-       }
-
        @Override
        public void read() throws IOException {
                MetaData meta = getMeta();
@@ -98,9 +75,9 @@ class TuiReaderApplication extends TApplication implements Reader {
 
                // TODO: open in editor + external option
                if (!meta.isImageDocument()) {
-                       @SuppressWarnings("unused")
-                       Object discard = new TuiReaderStoryWindow(this, getLibrary(), meta,
+                       TWindow window = new TuiReaderStoryWindow(this, getLibrary(), meta,
                                        getChapter());
+                       window.maximize();
                } else {
                        try {
                                openExternal(getLibrary(), meta.getLuid());
@@ -161,6 +138,52 @@ 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, CMD_EXIT, "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);
+                       }
+                       main.maximize();
+               }
+       }
+
        private void init(Reader reader) {
                this.reader = reader;
 
@@ -180,10 +203,8 @@ class TuiReaderApplication extends TApplication implements Reader {
                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
 
@@ -199,11 +220,7 @@ class TuiReaderApplication extends TApplication implements Reader {
                // TODO: i18n
                switch (menu.getId()) {
                case MENU_EXIT:
-                       if (messageBox("Confirmation", "(TODO: i18n) Exit application?",
-                                       TMessageBox.Type.YESNO).getResult() == TMessageBox.Result.YES) {
-                               exit(); // TODO: exit(false) for "no confirm box"
-                       }
-
+                       close(this);
                        return true;
                case MENU_IMPORT_URL:
                        String clipboard = "";
@@ -266,4 +283,33 @@ class TuiReaderApplication extends TApplication implements Reader {
        public void openExternal(BasicLibrary lib, String luid) throws IOException {
                reader.openExternal(lib, luid);
        }
+
+       /**
+        * Ask the user and, if confirmed, close the {@link TApplication} this
+        * {@link TWidget} is running on.
+        * <p>
+        * This should result in the program terminating.
+        * 
+        * @param widget
+        *            the {@link TWidget}
+        */
+       static public void close(TWidget widget) {
+               close(widget.getApplication());
+       }
+
+       /**
+        * Ask the user and, if confirmed, close the {@link TApplication}.
+        * <p>
+        * This should result in the program terminating.
+        * 
+        * @param app
+        *            the {@link TApplication}
+        */
+       static void close(TApplication app) {
+               // TODO: i18n
+               if (app.messageBox("Confirmation", "(TODO: i18n) Exit application?",
+                               TMessageBox.Type.YESNO).getResult() == TMessageBox.Result.YES) {
+                       app.exit();
+               }
+       }
 }