X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderFrame.java;h=f4c5eb3997cc97373788fe21c8bb2d1d3d52c061;hp=d849a438388f139d2c236d9bc647c03b265c5c1c;hb=c8d48938ca540d7b619a2c19bd76623d689b72cb;hpb=ce16dfd42bcd6efc9726df1f0471ffef6c957d61 diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderFrame.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderFrame.java index d849a43..f4c5eb3 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderFrame.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderFrame.java @@ -307,11 +307,14 @@ class GuiReaderFrame extends JFrame { popup.add(createMenuItemOpenBook()); popup.addSeparator(); popup.add(createMenuItemExport()); - popup.add(createMenuItemMove(true)); + popup.add(createMenuItemMoveTo(true)); popup.add(createMenuItemSetCover()); popup.add(createMenuItemClearCache()); popup.add(createMenuItemRedownload()); popup.addSeparator(); + popup.add(createMenuItemRename(true)); + popup.add(createMenuItemSetAuthor(true)); + popup.addSeparator(); popup.add(createMenuItemDelete()); popup.addSeparator(); popup.add(createMenuItemProperties()); @@ -394,11 +397,14 @@ class GuiReaderFrame extends JFrame { file.add(createMenuItemOpenBook()); file.add(createMenuItemExport()); - file.add(createMenuItemMove(libOk)); + file.add(createMenuItemMoveTo(libOk)); file.addSeparator(); file.add(imprt); file.add(imprtF); file.addSeparator(); + file.add(createMenuItemRename(libOk)); + file.add(createMenuItemSetAuthor(libOk)); + file.addSeparator(); file.add(exit); bar.add(file); @@ -711,74 +717,155 @@ class GuiReaderFrame extends JFrame { } /** - * Create the delete menu item. + * Create the "move to" menu item. * * @param libOk * the library can be queried * * @return the item */ - private JMenuItem createMenuItemMove(boolean libOk) { - JMenu moveTo = new JMenu("Move to..."); - moveTo.setMnemonic(KeyEvent.VK_M); + private JMenuItem createMenuItemMoveTo(boolean libOk) { + JMenuItem changeTo = new JMenu("Move to"); + changeTo.setMnemonic(KeyEvent.VK_M); - List types = new ArrayList(); - types.add(null); + List values = new ArrayList(); + values.add(null); if (libOk) { - types.addAll(reader.getLibrary().getSources()); + values.addAll(reader.getLibrary().getSources()); } - for (String type : types) { - JMenuItem item = new JMenuItem(type == null ? "New type..." : type); + for (String value : values) { + JMenuItem item = new JMenuItem(value == null ? "New type..." + : value); - moveTo.add(item); - if (type == null) { - moveTo.addSeparator(); - } + item.addActionListener(createMoveAction("SOURCE", value)); - final String ftype = type; - item.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (selectedBook != null) { - String type = ftype; - if (type == null) { - Object rep = JOptionPane.showInputDialog( - GuiReaderFrame.this, "Move to:", - "Moving story", - JOptionPane.QUESTION_MESSAGE, null, null, - selectedBook.getMeta().getSource()); - - if (rep == null) { - return; - } + changeTo.add(item); + if (value == null) { + ((JMenu) changeTo).addSeparator(); + } + } - type = rep.toString(); - } + return changeTo; + } - final String ftype = type; - outOfUi(null, new Runnable() { - @Override - public void run() { - reader.changeSource(selectedBook.getMeta() - .getLuid(), ftype); + /** + * Create the "set author" menu item. + * + * @param libOk + * the library can be queried + * + * @return the item + */ + private JMenuItem createMenuItemSetAuthor(boolean libOk) { + JMenu changeTo = new JMenu("Set author"); + changeTo.setMnemonic(KeyEvent.VK_A); - selectedBook = null; + // New author + JMenuItem newItem = new JMenuItem("New author..."); + changeTo.add(newItem); + changeTo.addSeparator(); + newItem.addActionListener(createMoveAction("AUTHOR", null)); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - setJMenuBar(createMenu(true)); - } - }); - } - }); + // Existing authors + if (libOk) { + List>> authorGroups = reader + .getLibrary().getAuthorsGrouped(); + + if (authorGroups.size() > 1) { + for (Entry> entry : authorGroups) { + JMenu group = new JMenu(entry.getKey()); + for (String value : entry.getValue()) { + JMenuItem item = new JMenuItem(value); + item.addActionListener(createMoveAction("AUTHOR", value)); + group.add(item); } + changeTo.add(group); } - }); + } else if (authorGroups.size() == 1) { + for (String value : authorGroups.get(0).getValue()) { + JMenuItem item = new JMenuItem(value); + item.addActionListener(createMoveAction("AUTHOR", value)); + changeTo.add(item); + } + } } - return moveTo; + return changeTo; + } + + /** + * Create the "rename" menu item. + * + * @param libOk + * the library can be queried + * + * @return the item + */ + private JMenuItem createMenuItemRename( + @SuppressWarnings("unused") boolean libOk) { + JMenuItem changeTo = new JMenuItem("Rename..."); + changeTo.setMnemonic(KeyEvent.VK_R); + changeTo.addActionListener(createMoveAction("TITLE", null)); + return changeTo; + } + + private ActionListener createMoveAction(final String what, final String type) { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (selectedBook != null) { + String changeTo = type; + if (type == null) { + String init = ""; + if (what.equals("SOURCE")) { + init = selectedBook.getMeta().getSource(); + } else if (what.equals("TITLE")) { + init = selectedBook.getMeta().getTitle(); + } else if (what.equals("AUTHOR")) { + init = selectedBook.getMeta().getAuthor(); + } + + Object rep = JOptionPane.showInputDialog( + GuiReaderFrame.this, "Move to:", + "Moving story", JOptionPane.QUESTION_MESSAGE, + null, null, init); + + if (rep == null) { + return; + } + + changeTo = rep.toString(); + } + + final String fChangeTo = changeTo; + 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); + } + + selectedBook = null; + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + setJMenuBar(createMenu(true)); + } + }); + } + }); + } + } + }; } /**