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.data.MetaData;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.fanfix.library.BasicLibrary;
import be.nikiroo.utils.Progress;
/**
* 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;
// start reading if meta present
public TuiReaderApplication(Reader reader, BackendType backend)
throws Exception {
super(backend);
init(reader);
MetaData meta = getMeta();
new TuiReaderMainWindow(this).setMeta(meta);
if (meta != null) {
read();
}
}
public TuiReaderApplication(List stories, Reader reader,
TApplication.BackendType backend) throws Exception {
super(backend);
init(reader);
new TuiReaderMainWindow(this).setMetas(stories);
}
public void read() throws IOException {
MetaData meta = getMeta();
if (meta == null) {
throw new IOException("No story to read");
}
// TODO: open in editor + external option
if (!meta.isImageDocument()) {
new TuiReaderStoryWindow(this, getLibrary(), meta, getChapter());
} else {
try {
BasicReader.openExternal(getLibrary(), meta.getLuid());
} catch (IOException e) {
messageBox("Error when trying to open the story",
e.getMessage(), TMessageBox.Type.OK);
}
}
}
public MetaData getMeta() {
return reader.getMeta();
}
public Story getStory(Progress pg) {
return reader.getStory(pg);
}
public BasicLibrary getLibrary() {
return reader.getLibrary();
}
public void setLibrary(BasicLibrary lib) {
reader.setLibrary(lib);
}
public void setMeta(MetaData meta) throws IOException {
reader.setMeta(meta);
}
public void setMeta(String luid) throws IOException {
reader.setMeta(luid);
}
public void setMeta(URL source, Progress pg) throws IOException {
reader.setMeta(source, pg);
}
public void browse(String source) {
reader.browse(source);
}
public int getChapter() {
return reader.getChapter();
}
public void setChapter(int chapter) {
reader.setChapter(chapter);
}
private void init(Reader reader) {
this.reader = reader;
// Add the menus
addFileMenu();
addEditMenu();
addWindowMenu();
addHelpMenu();
getBackend().setTitle("Fanfix");
}
}