X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FTuiReaderApplication.java;h=3d6a949528630e4733f945eb19724977788c6859;hb=a8209dd0972f751e59153dd80a53f3062042897a;hp=9a534983f3f25068ea7fd9f2b6b31909775abb39;hpb=b0e88ebd20f8b2950c382694e936da76ac3596b6;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java b/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java index 9a53498..3d6a949 100644 --- a/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java +++ b/src/be/nikiroo/fanfix/reader/TuiReaderApplication.java @@ -1,68 +1,151 @@ package be.nikiroo.fanfix.reader; import java.io.IOException; +import java.net.URL; import java.util.List; import jexer.TApplication; import jexer.TMessageBox; +import jexer.TWindow; +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; +import be.nikiroo.utils.Progress; -public class TuiReaderApplication extends TApplication { - private BasicReader reader; +/** + * Manages the TUI general mode and links and manages the {@link TWindow}s. + *

+ * It will also enclose a {@link Reader} and simply handle the reading part + * differently (it will create the required sub-windows and display them). + * + * @author niki + */ +class TuiReaderApplication extends TApplication implements Reader { + private Reader reader; - private static BackendType guessBackendType() { - // Swing is the default backend on Windows unless explicitly - // overridden by jexer.Swing. - TApplication.BackendType backendType = TApplication.BackendType.XTERM; - if (System.getProperty("os.name").startsWith("Windows")) { - backendType = TApplication.BackendType.SWING; - } - if (System.getProperty("os.name").startsWith("Mac")) { - backendType = TApplication.BackendType.SWING; - } - if (System.getProperty("jexer.Swing") != null) { - if (System.getProperty("jexer.Swing", "false").equals("true")) { - backendType = TApplication.BackendType.SWING; - } else { - backendType = TApplication.BackendType.XTERM; - } - } - return backendType; - } - - public TuiReaderApplication(List stories, BasicReader reader) + // start reading if meta present + public TuiReaderApplication(Reader reader, BackendType backend) throws Exception { - this(stories, reader, guessBackendType()); + super(backend); + init(reader); + + MetaData meta = getMeta(); + + new TuiReaderMainWindow(this).setMeta(meta); + + if (meta != null) { + read(); + } } - public TuiReaderApplication(List stories, BasicReader reader, + public TuiReaderApplication(List stories, Reader reader, TApplication.BackendType backend) throws Exception { super(backend); + init(reader); - this.reader = reader; - - // Add the menus - addFileMenu(); - addEditMenu(); - addWindowMenu(); - addHelpMenu(); + new TuiReaderMainWindow(this).setMetas(stories); + } - getBackend().setTitle("Fanfix"); + @SuppressWarnings("unused") + @Override + public void read() throws IOException { + MetaData meta = getMeta(); - new TuiReaderMainWindow(this, stories); - } + if (meta == null) { + throw new IOException("No story to read"); + } - public void open(MetaData meta) { // TODO: open in editor + external option if (!meta.isImageDocument()) { - new TuiReaderStoryWindow(this, reader.getLibrary(), meta); + new TuiReaderStoryWindow(this, getLibrary(), meta, getChapter()); } else { try { - BasicReader.open(reader.getLibrary(), meta.getLuid()); + BasicReader.openExternal(getLibrary(), meta.getLuid()); } catch (IOException e) { messageBox("Error when trying to open the story", e.getMessage(), TMessageBox.Type.OK); } } } + + @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); + } + + private void init(Reader reader) { + this.reader = reader; + + // 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 + addFileMenu(); + addEditMenu(); + addWindowMenu(); + addHelpMenu(); + + getBackend().setTitle("Fanfix"); + } }