X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FTuiReaderApplication.java;h=384919ae2e2d067380e788b7e8d46917cf3cacea;hb=e2d017a31297742d3ea6ac215c3487fa6c67ddb1;hp=93a0167fe6be9e21b63718a4c2b0d326cc403065;hpb=bc2ea776b67cabcbdcbbc6d8a4e2df1aafa9101a;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java b/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java index 93a0167..384919a 100644 --- a/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java +++ b/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java @@ -1,12 +1,21 @@ package be.nikiroo.fanfix.reader; +import java.awt.Toolkit; +import java.awt.datatransfer.DataFlavor; import java.io.IOException; import java.net.URL; -import java.util.List; import jexer.TApplication; +import jexer.TCommand; +import jexer.TKeypress; import jexer.TMessageBox; +import jexer.TStatusBar; import jexer.TWindow; +import jexer.event.TMenuEvent; +import jexer.menu.TMenu; +import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.Instance.SyserrHandler; +import be.nikiroo.fanfix.Instance.TraceHandler; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.library.BasicLibrary; @@ -21,7 +30,14 @@ import be.nikiroo.utils.Progress; * @author niki */ class TuiReaderApplication extends TApplication implements Reader { + public static final int MENU_OPEN = 1025; + 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; + private Reader reader; + private TuiReaderMainWindow main; // start reading if meta present public TuiReaderApplication(Reader reader, BackendType backend) @@ -31,21 +47,24 @@ class TuiReaderApplication extends TApplication implements Reader { MetaData meta = getMeta(); - new TuiReaderMainWindow(this).setMeta(meta); - + main = new TuiReaderMainWindow(this); + main.setMeta(meta); if (meta != null) { read(); } } - public TuiReaderApplication(List stories, Reader reader, + public TuiReaderApplication(Reader reader, String source, TApplication.BackendType backend) throws Exception { super(backend); + init(reader); - new TuiReaderMainWindow(this).setMetas(stories); + main = new TuiReaderMainWindow(this); + main.setSource(source); } + @Override public void read() throws IOException { MetaData meta = getMeta(); @@ -55,7 +74,9 @@ class TuiReaderApplication extends TApplication implements Reader { // TODO: open in editor + external option if (!meta.isImageDocument()) { - new TuiReaderStoryWindow(this, getLibrary(), meta, getChapter()); + @SuppressWarnings("unused") + Object discard = new TuiReaderStoryWindow(this, getLibrary(), meta, + getChapter()); } else { try { BasicReader.openExternal(getLibrary(), meta.getLuid()); @@ -66,42 +87,52 @@ class TuiReaderApplication extends TApplication implements Reader { } } + @Override public MetaData getMeta() { return reader.getMeta(); } + @Override public Story getStory(Progress pg) { return reader.getStory(pg); } + @Override public BasicLibrary getLibrary() { return reader.getLibrary(); } + @Override public void setLibrary(BasicLibrary lib) { reader.setLibrary(lib); } + @Override public void setMeta(MetaData meta) throws IOException { reader.setMeta(meta); } + @Override public void setMeta(String luid) throws IOException { reader.setMeta(luid); } + @Override public void setMeta(URL source, Progress pg) throws IOException { reader.setMeta(source, pg); } + @Override public void browse(String source) { reader.browse(source); } + @Override public int getChapter() { return reader.getChapter(); } + @Override public void setChapter(int chapter) { reader.setChapter(chapter); } @@ -109,12 +140,104 @@ class TuiReaderApplication extends TApplication implements Reader { private void init(Reader reader) { this.reader = reader; - // Add the menus - addFileMenu(); - addEditMenu(); + // Do not allow traces/debug to pollute the screen: + Instance.setSyserrHandler(new SyserrHandler() { + @Override + public void notify(Exception e, boolean showDetails) { + // TODO + } + }); + + Instance.setTraceHandler(new TraceHandler() { + @Override + public void trace(String message) { + // TODO + } + }); + // + + // Add the menus TODO: i18n + TMenu fileMenu = addMenu("&File"); + fileMenu.addItem(MENU_OPEN, "&Open"); + fileMenu.addItem(MENU_EXPORT, "&Save as..."); + // TODO: Move to... + fileMenu.addSeparator(); + fileMenu.addItem(MENU_IMPORT_URL, "Import &URL..."); + fileMenu.addItem(MENU_IMPORT_FILE, "Import &file..."); + fileMenu.addSeparator(); + fileMenu.addItem(MENU_EXIT, "E&xit"); + + TStatusBar statusBar = fileMenu.newStatusBar("File-management " + + "commands (Open, Save, Print, etc.)"); + // TODO: doesn't actually work: + statusBar.addShortcutKeypress(TKeypress.kbF10, TCommand.cmExit, "Exit"); + + // TODO: Edit: re-download, delete + + // + addWindowMenu(); - addHelpMenu(); getBackend().setTitle("Fanfix"); } + + @Override + protected boolean onMenu(TMenuEvent menu) { + // TODO: i18n + switch (menu.getId()) { + case MENU_EXIT: + if (messageBox("Confirmation", "(TODO: i18n) Exit application?", + TMessageBox.Type.YESNO).getResult() == TMessageBox.Result.YES) { + exit(false); + } + + return true; + case MENU_IMPORT_URL: + String clipboard = ""; + try { + clipboard = ("" + Toolkit.getDefaultToolkit() + .getSystemClipboard().getData(DataFlavor.stringFlavor)) + .trim(); + } catch (Exception e) { + // No data will be handled + } + + if (clipboard == null || !clipboard.startsWith("http")) { + clipboard = ""; + } + + String url = inputBox("Import story", "URL to import", clipboard) + .getText(); + + if (!imprt(url)) { + // TODO: bad import + } + + return true; + case MENU_IMPORT_FILE: + try { + String filename = fileOpenBox("."); + if (!imprt(filename)) { + // TODO: bad import + } + } catch (IOException e) { + // TODO: bad file + e.printStackTrace(); + } + + return true; + } + + return super.onMenu(menu); + } + + private boolean imprt(String url) { + try { + reader.getLibrary().imprt(BasicReader.getUrl(url), null); + main.refreshStories(); + return true; + } catch (IOException e) { + return false; + } + } }