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;
private GuiReader reader;
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
}
/**
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;
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;
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);
}
mainPanel.outOfUi(null, 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
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(
mainPanel.outOfUi(null, 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);
}
mainPanel.unsetSelectedBook();
}
/**
- * Create the redownload (then delete original) menu item.
+ * Create the re-download (then delete original) menu item.
*
* @return the item
*/
public void actionPerformed(ActionEvent e) {
final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- final MetaData meta = selectedBook.getMeta();
+ final MetaData meta = selectedBook.getInfo().getMeta();
mainPanel.imprt(meta.getUrl(), new StoryRunnable() {
@Override
public void run(Story story) {
mainPanel.outOfUi(null, new Runnable() {
@Override
public void run() {
- reader.delete(selectedBook.getMeta().getLuid());
+ reader.delete(selectedBook.getInfo().getMeta()
+ .getLuid());
mainPanel.unsetSelectedBook();
}
});
@Override
public void run() {
new GuiReaderPropertiesFrame(reader, selectedBook
- .getMeta()).setVisible(true);
+ .getInfo()).setVisible(true);
}
});
}
public void actionPerformed(ActionEvent e) {
final GuiReaderBook selectedBook = mainPanel.getSelectedBook();
if (selectedBook != null) {
- if (selectedBook.getMeta().getLuid() == null) {
+ if (selectedBook.getInfo().getMeta() == null) {
mainPanel.removeBookPanes();
- mainPanel.addBookPane(selectedBook.getMeta()
- .getSource(), true);
+ mainPanel.addBookPane(selectedBook.getInfo().getMeta()
+ .getSource(), mainPanel.getCurrentType());
mainPanel.refreshBooks();
} else {
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 = 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);
}
}
});