import jexer.TKeypress;
import jexer.TMessageBox;
import jexer.TStatusBar;
+import jexer.TWidget;
import jexer.TWindow;
import jexer.event.TMenuEvent;
import jexer.menu.TMenu;
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;
+
+ public static final TCommand CMD_EXIT = new TCommand(MENU_EXIT) {
+ };
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,
super(backend);
init(reader);
- main = new TuiReaderMainWindow(this);
- main.setSource(source);
+ showMain(null, source, false);
}
@Override
// 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());
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);
+ }
+ }
+ }
+
private void init(Reader reader) {
this.reader = 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
// TODO: i18n
switch (menu.getId()) {
case MENU_EXIT:
- if (messageBox("Confirmation", "(TODO: i18n) Exit application?",
- TMessageBox.Type.YESNO).getResult() == TMessageBox.Result.YES) {
- // exit(false);
- }
-
+ close(this);
return true;
case MENU_IMPORT_URL:
String clipboard = "";
e.printStackTrace();
}
+ return true;
+ case MENU_LIBRARY:
+ try {
+ showMain(meta, source, useMeta);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
return true;
}
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();
+ }
+ }
}