import be.nikiroo.fanfix.bundles.UiConfig;
import be.nikiroo.fanfix.data.MetaData;
import be.nikiroo.fanfix.data.Story;
+import be.nikiroo.fanfix.library.BasicLibrary;
import be.nikiroo.fanfix.library.LocalLibrary;
import be.nikiroo.fanfix.output.BasicOutput.OutputType;
import be.nikiroo.fanfix.reader.BasicReader;
class GuiReaderFrame extends JFrame implements FrameHelper {
private static final long serialVersionUID = 1L;
private GuiReader reader;
- private GuiReaderMainPanel helpee;
+ private GuiReaderMainPanel mainPanel;
- private enum MoveAction {
- SOURCE, TITLE, AUTHOR
+ /**
+ * The different modification actions you can use on {@link Story} items.
+ *
+ * @author niki
+ */
+ private enum ChangeAction {
+ /** Change the source/type, that is, move it to another source. */
+ SOURCE,
+ /** Change its name. */
+ TITLE,
+ /** Change its author. */
+ AUTHOR
}
/**
this.reader = reader;
- // TODO: should we still have that??
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- helpee = new GuiReaderMainPanel(this, type);
+ mainPanel = new GuiReaderMainPanel(this, type);
setSize(800, 600);
setLayout(new BorderLayout());
- add(helpee);
-
- setVisible(true);
+ add(mainPanel, BorderLayout.CENTER);
}
@Override
popup.addSeparator();
popup.add(createMenuItemExport());
popup.add(createMenuItemMoveTo(true));
- popup.add(createMenuItemSetCover());
+ popup.add(createMenuItemSetCoverForSource());
+ popup.add(createMenuItemSetCoverForAuthor());
popup.add(createMenuItemClearCache());
popup.add(createMenuItemRedownload());
popup.addSeparator();
}
@Override
- public JPopupMenu createSourcePopup() {
+ public JPopupMenu createSourceAuthorPopup() {
JPopupMenu popup = new JPopupMenu();
popup.add(createMenuItemOpenBook());
return popup;
@Override
public void createMenu(boolean libOk) {
+ invalidate();
+
JMenuBar bar = new JMenuBar();
JMenu file = new JMenu("File");
imprt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.imprt(true);
+ mainPanel.imprt(true);
}
});
JMenuItem imprtF = new JMenuItem("Import File...", KeyEvent.VK_F);
imprtF.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.imprt(false);
+ mainPanel.imprt(false);
}
});
JMenuItem exit = new JMenuItem("Exit", KeyEvent.VK_X);
vauthors.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.setWords(false);
- helpee.refreshBooks();
+ mainPanel.setWords(false);
+ mainPanel.refreshBooks();
}
});
view.add(vauthors);
vwords.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.setWords(true);
- helpee.refreshBooks();
+ mainPanel.setWords(true);
+ mainPanel.refreshBooks();
}
});
view.add(vwords);
for (String sub : list) {
// " " instead of "" for the visual height
- String itemName = sub.isEmpty() ? " " : sub;
- String actualValue = value;
+ String itemName = sub;
+ if (itemName.isEmpty()) {
+ itemName = type ? " " : "[unknown]";
+ }
+ String actualValue = value;
if (type) {
if (!sub.isEmpty()) {
actualValue += "/" + sub;
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.removeBookPanes();
- helpee.addBookPane(source, type);
- helpee.refreshBooks();
+ mainPanel.removeBookPanes();
+ mainPanel.addBookPane(source, type);
+ mainPanel.refreshBooks();
}
};
}
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- helpee.removeBookPanes();
- helpee.addBookPane(type, listMode);
- helpee.refreshBooks();
+ mainPanel.removeBookPanes();
+ mainPanel.addBookPane(type, listMode);
+ mainPanel.refreshBooks();
}
};
}
export.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
fc.showDialog(GuiReaderFrame.this, "Save");
if (fc.getSelectedFile() != null) {
.getAbsolutePath()
+ type.getDefaultExtension(false);
final Progress pg = new Progress();
- helpee.outOfUi(pg, new Runnable() {
+ mainPanel.outOfUi(pg, false, new Runnable() {
@Override
public void run() {
try {
reader.getLibrary().export(
- selectedBook.getMeta().getLuid(),
- type, path, pg);
+ selectedBook.getInfo().getMeta()
+ .getLuid(), type, path, pg);
} catch (IOException e) {
Instance.getTraceHandler().error(e);
}
refresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- helpee.outOfUi(null, new Runnable() {
+ mainPanel.outOfUi(null, false, new Runnable() {
@Override
public void run() {
- reader.clearLocalReaderCache(selectedBook.getMeta()
- .getLuid());
+ reader.clearLocalReaderCache(selectedBook.getInfo()
+ .getMeta().getLuid());
selectedBook.setCached(false);
GuiReaderCoverImager.clearIcon(selectedBook
- .getMeta());
+ .getInfo());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
}
JMenuItem item = new JMenuItem("New type...");
- item.addActionListener(createMoveAction(MoveAction.SOURCE, null));
+ item.addActionListener(createMoveAction(ChangeAction.SOURCE, null));
changeTo.add(item);
changeTo.addSeparator();
List<String> list = groupedSources.get(type);
if (list.size() == 1 && list.get(0).isEmpty()) {
item = new JMenuItem(type);
- item.addActionListener(createMoveAction(MoveAction.SOURCE, type));
+ item.addActionListener(createMoveAction(ChangeAction.SOURCE,
+ type));
changeTo.add(item);
} else {
JMenu dir = new JMenu(type);
}
item = new JMenuItem(itemName);
- item.addActionListener(createMoveAction(MoveAction.SOURCE,
- actualType));
+ item.addActionListener(createMoveAction(
+ ChangeAction.SOURCE, actualType));
dir.add(item);
}
changeTo.add(dir);
JMenuItem newItem = new JMenuItem("New author...");
changeTo.add(newItem);
changeTo.addSeparator();
- newItem.addActionListener(createMoveAction(MoveAction.AUTHOR, null));
+ newItem.addActionListener(createMoveAction(ChangeAction.AUTHOR, null));
// Existing authors
if (libOk) {
for (String key : groupedAuthors.keySet()) {
JMenu group = new JMenu(key);
for (String value : groupedAuthors.get(key)) {
- JMenuItem item = new JMenuItem(value);
+ JMenuItem item = new JMenuItem(
+ value.isEmpty() ? "[unknown]" : value);
item.addActionListener(createMoveAction(
- MoveAction.AUTHOR, value));
+ ChangeAction.AUTHOR, value));
group.add(item);
}
changeTo.add(group);
}
} else if (groupedAuthors.size() == 1) {
for (String value : groupedAuthors.values().iterator().next()) {
- JMenuItem item = new JMenuItem(value);
- item.addActionListener(createMoveAction(MoveAction.AUTHOR,
- value));
+ JMenuItem item = new JMenuItem(
+ value.isEmpty() ? "[unknown]" : value);
+ item.addActionListener(createMoveAction(
+ ChangeAction.AUTHOR, value));
changeTo.add(item);
}
}
@SuppressWarnings("unused") boolean libOk) {
JMenuItem changeTo = new JMenuItem("Rename...");
changeTo.setMnemonic(KeyEvent.VK_R);
- changeTo.addActionListener(createMoveAction(MoveAction.TITLE, null));
+ changeTo.addActionListener(createMoveAction(ChangeAction.TITLE, null));
return changeTo;
}
- private ActionListener createMoveAction(final MoveAction what,
+ private ActionListener createMoveAction(final ChangeAction what,
final String type) {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
String changeTo = type;
if (type == null) {
+ MetaData meta = selectedBook.getInfo().getMeta();
String init = "";
- if (what == MoveAction.SOURCE) {
- init = selectedBook.getMeta().getSource();
- } else if (what == MoveAction.TITLE) {
- init = selectedBook.getMeta().getTitle();
- } else if (what == MoveAction.AUTHOR) {
- init = selectedBook.getMeta().getAuthor();
+ if (what == ChangeAction.SOURCE) {
+ init = meta.getSource();
+ } else if (what == ChangeAction.TITLE) {
+ init = meta.getTitle();
+ } else if (what == ChangeAction.AUTHOR) {
+ init = meta.getAuthor();
}
Object rep = JOptionPane.showInputDialog(
}
final String fChangeTo = changeTo;
- helpee.outOfUi(null, new Runnable() {
+ mainPanel.outOfUi(null, true, new Runnable() {
@Override
public void run() {
- if (what.equals("SOURCE")) {
- reader.changeSource(selectedBook.getMeta()
- .getLuid(), fChangeTo);
- } else if (what.equals("TITLE")) {
- reader.changeTitle(selectedBook.getMeta()
- .getLuid(), fChangeTo);
- } else if (what.equals("AUTHOR")) {
- reader.changeAuthor(selectedBook.getMeta()
- .getLuid(), fChangeTo);
+ String luid = selectedBook.getInfo().getMeta()
+ .getLuid();
+ if (what == ChangeAction.SOURCE) {
+ reader.changeSource(luid, fChangeTo);
+ } else if (what == ChangeAction.TITLE) {
+ reader.changeTitle(luid, fChangeTo);
+ } else if (what == ChangeAction.AUTHOR) {
+ reader.changeAuthor(luid, fChangeTo);
}
- helpee.unsetSelectedBook();
+ mainPanel.unsetSelectedBook();
SwingUtilities.invokeLater(new Runnable() {
@Override
}
/**
- * Create the redownload (then delete original) menu item.
+ * Create the re-download (then delete original) menu item.
*
* @return the item
*/
refresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- final MetaData meta = selectedBook.getMeta();
- helpee.imprt(meta.getUrl(), new StoryRunnable() {
+ final MetaData meta = selectedBook.getInfo().getMeta();
+ mainPanel.imprt(meta.getUrl(), new StoryRunnable() {
@Override
public void run(Story story) {
reader.delete(meta.getLuid());
- helpee.unsetSelectedBook();
+ mainPanel.unsetSelectedBook();
MetaData newMeta = story.getMeta();
if (!newMeta.getSource().equals(meta.getSource())) {
reader.changeSource(newMeta.getLuid(),
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- helpee.outOfUi(null, new Runnable() {
+ mainPanel.outOfUi(null, true, new Runnable() {
@Override
public void run() {
- reader.delete(selectedBook.getMeta().getLuid());
- helpee.unsetSelectedBook();
+ reader.delete(selectedBook.getInfo().getMeta()
+ .getLuid());
+ mainPanel.unsetSelectedBook();
}
});
}
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- helpee.outOfUi(null, new Runnable() {
+ mainPanel.outOfUi(null, false, new Runnable() {
@Override
public void run() {
- new GuiReaderPropertiesFrame(reader, selectedBook
- .getMeta()).setVisible(true);
+ new GuiReaderPropertiesFrame(reader.getLibrary(),
+ selectedBook.getInfo().getMeta())
+ .setVisible(true);
}
});
}
}
/**
- * Create the open menu item for a book or a source/type (no LUID).
+ * Create the open menu item for a book, a source/type or an author.
*
* @return the item
*/
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- if (selectedBook.getMeta().getLuid() == null) {
- helpee.removeBookPanes();
- helpee.addBookPane(selectedBook.getMeta().getSource(),
- true);
- helpee.refreshBooks();
+ if (selectedBook.getInfo().getMeta() == null) {
+ mainPanel.removeBookPanes();
+ mainPanel.addBookPane(selectedBook.getInfo()
+ .getMainInfo(), mainPanel.getCurrentType());
+ mainPanel.refreshBooks();
} else {
- helpee.openBook(selectedBook);
+ mainPanel.openBook(selectedBook);
}
}
}
*
* @return the item
*/
- private JMenuItem createMenuItemSetCover() {
+ private JMenuItem createMenuItemSetCoverForSource() {
JMenuItem open = new JMenuItem("Set as cover for source", KeyEvent.VK_C);
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- final GuiReaderBook selectedBook = helpee.getSelectedBook();
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- reader.getLibrary().setSourceCover(
- selectedBook.getMeta().getSource(),
- selectedBook.getMeta().getLuid());
- MetaData source = selectedBook.getMeta().clone();
- source.setLuid(null);
- GuiReaderCoverImager.clearIcon(source);
+ BasicLibrary lib = reader.getLibrary();
+ String luid = selectedBook.getInfo().getMeta().getLuid();
+ String source = selectedBook.getInfo().getMeta()
+ .getSource();
+
+ lib.setSourceCover(source, luid);
+
+ GuiReaderBookInfo sourceInfo = GuiReaderBookInfo
+ .fromSource(lib, source);
+ GuiReaderCoverImager.clearIcon(sourceInfo);
+ }
+ }
+ });
+
+ return open;
+ }
+
+ /**
+ * Create the SetCover menu item for a book to change the linked source
+ * cover.
+ *
+ * @return the item
+ */
+ private JMenuItem createMenuItemSetCoverForAuthor() {
+ JMenuItem open = new JMenuItem("Set as cover for author", KeyEvent.VK_A);
+ open.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
+ if (selectedBook != null) {
+ BasicLibrary lib = reader.getLibrary();
+ String luid = selectedBook.getInfo().getMeta().getLuid();
+ String author = selectedBook.getInfo().getMeta()
+ .getAuthor();
+
+ lib.setAuthorCover(author, luid);
+
+ GuiReaderBookInfo authorInfo = GuiReaderBookInfo
+ .fromAuthor(lib, author);
+ GuiReaderCoverImager.clearIcon(authorInfo);
}
}
});