X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderMainPanel.java;h=8593fe6471c816812220defeedf5775fe1757642;hb=a3550a0a2d1ee45b4853c789440a4a3226fc00c7;hp=359ac9213a231a99ad539ab3ffd9ca5a89e63723;hpb=2d56db730853fae42f5099cbca8cbed66129551c;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java index 359ac92..8593fe6 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java @@ -2,13 +2,15 @@ package be.nikiroo.fanfix.reader.ui; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.EventQueue; import java.awt.Frame; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -31,6 +33,7 @@ import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.bundles.StringIdGui; import be.nikiroo.fanfix.bundles.UiConfig; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.fanfix.data.Story; @@ -82,10 +85,10 @@ class GuiReaderMainPanel extends JPanel { *

* Will invalidate the layout. * - * @param libOk - * the library can be queried + * @param status + * the library status, must not be NULL */ - public void createMenu(boolean libOk); + public void createMenu(Status status); /** * Create a popup menu for a {@link GuiReaderBook} that represents a @@ -135,6 +138,7 @@ class GuiReaderMainPanel extends JPanel { pane = new JPanel(); pane.setLayout(new BoxLayout(pane, BoxLayout.PAGE_AXIS)); + JScrollPane scroll = new JScrollPane(pane); Integer icolor = Instance.getUiConfig().getColor( UiConfig.BACKGROUND_COLOR); @@ -142,9 +146,9 @@ class GuiReaderMainPanel extends JPanel { color = new Color(icolor); setBackground(color); pane.setBackground(color); + scroll.setBackground(color); } - JScrollPane scroll = new JScrollPane(pane); scroll.getVerticalScrollBar().setUnitIncrement(16); add(scroll, BorderLayout.CENTER); @@ -178,6 +182,13 @@ class GuiReaderMainPanel extends JPanel { books = new TreeMap(); + addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + focus(); + } + }); + pane.setVisible(false); final Progress pg = new Progress(); final String typeF = type; @@ -187,45 +198,42 @@ class GuiReaderMainPanel extends JPanel { final BasicLibrary lib = helper.getReader().getLibrary(); final Status status = lib.getStatus(); - if (status == Status.READY) { + if (status == Status.READ_WRITE) { lib.refresh(pg); } inUi(new Runnable() { @Override public void run() { - if (status == Status.READY) { - helper.createMenu(true); + if (status.isReady()) { + helper.createMenu(status); + pane.setVisible(true); if (typeF == null) { - addBookPane(true, false); + try { + addBookPane(true, false); + } catch (IOException e) { + error(e.getLocalizedMessage(), + "IOException", e); + } } else { addBookPane(typeF, true); } - pane.setVisible(true); } else { - helper.createMenu(false); + helper.createMenu(status); validate(); - String err = lib.getLibraryName() + "\n"; - switch (status) { - case INVALID: - err += "Library not valid"; - break; - - case UNAUTORIZED: - err += "You are not allowed to access this library"; - break; - - case UNAVAILABLE: - err += "Library currently unavailable"; - break; - - default: - err += "An error occured when contacting the library"; - break; + String desc = Instance.getTransGui().getStringX( + StringIdGui.ERROR_LIB_STATUS, + status.toString()); + if (desc == null) { + desc = GuiReader + .trans(StringIdGui.ERROR_LIB_STATUS); } - error(err, "Library error", null); + String err = lib.getLibraryName() + "\n" + desc; + error(err, GuiReader + .trans(StringIdGui.TITLE_ERROR_LIBRARY), + null); } } }); @@ -253,13 +261,17 @@ class GuiReaderMainPanel extends JPanel { * @param listMode * TRUE to get a listing of all the sources or authors, FALSE to * get one icon per source or author + * + * @throws IOException + * in case of I/O error */ - public void addBookPane(boolean type, boolean listMode) { + public void addBookPane(boolean type, boolean listMode) throws IOException { this.currentType = type; BasicLibrary lib = helper.getReader().getLibrary(); if (type) { if (!listMode) { - addListPane("Sources", lib.getSources(), type); + addListPane(GuiReader.trans(StringIdGui.MENU_SOURCES), + lib.getSources(), type); } else { for (String tt : lib.getSources()) { if (tt != null) { @@ -269,7 +281,8 @@ class GuiReaderMainPanel extends JPanel { } } else { if (!listMode) { - addListPane("Authors", lib.getAuthors(), type); + addListPane(GuiReader.trans(StringIdGui.MENU_AUTHORS), + lib.getAuthors(), type); } else { for (String tt : lib.getAuthors()) { if (tt != null) { @@ -310,9 +323,10 @@ class GuiReaderMainPanel extends JPanel { } @Override - public void popupRequested(GuiReaderBook book, MouseEvent e) { + public void popupRequested(GuiReaderBook book, Component target, + int x, int y) { JPopupMenu popup = helper.createBookPopup(); - popup.show(e.getComponent(), e.getX(), e.getY()); + popup.show(target, x, y); } @Override @@ -320,6 +334,8 @@ class GuiReaderMainPanel extends JPanel { openBook(book); } }); + + focus(); } /** @@ -345,11 +361,17 @@ class GuiReaderMainPanel extends JPanel { List infos = new ArrayList(); List metas; - if (currentType) { - metas = lib.getListBySource(value); - } else { - metas = lib.getListByAuthor(value); + try { + if (currentType) { + metas = lib.getListBySource(value); + } else { + metas = lib.getListByAuthor(value); + } + } catch (IOException e) { + error(e.getLocalizedMessage(), "IOException", e); + metas = new ArrayList(); } + for (MetaData meta : metas) { infos.add(GuiReaderBookInfo.fromMeta(meta)); } @@ -386,7 +408,8 @@ class GuiReaderMainPanel extends JPanel { }); } catch (IOException e) { Instance.getTraceHandler().error(e); - error("Cannot open the selected book", "Error", e); + error(GuiReader.trans(StringIdGui.ERROR_CANNOT_OPEN), + GuiReader.trans(StringIdGui.TITLE_ERROR), e); } } }); @@ -409,7 +432,8 @@ class GuiReaderMainPanel extends JPanel { public void outOfUi(Progress progress, final boolean refreshBooks, final Runnable run) { final Progress pg = new Progress(); - final Progress reload = new Progress("Reload books"); + final Progress reload = new Progress( + GuiReader.trans(StringIdGui.PROGRESS_OUT_OF_UI_RELOAD_BOOKS)); if (progress == null) { progress = new Progress(); @@ -498,7 +522,8 @@ class GuiReaderMainPanel extends JPanel { } url = JOptionPane.showInputDialog(GuiReaderMainPanel.this, - "url of the story to import?", "Importing from URL", + GuiReader.trans(StringIdGui.SUBTITLE_IMPORT_URL), + GuiReader.trans(StringIdGui.TITLE_IMPORT_URL), JOptionPane.QUESTION_MESSAGE, null, null, clipboard); } else if (fc.showOpenDialog(this) != JFileChooser.CANCEL_OPTION) { url = fc.getSelectedFile().getAbsolutePath(); @@ -550,11 +575,14 @@ class GuiReaderMainPanel extends JPanel { pgOnSuccess.setProgress(0); if (!ok) { if (e instanceof UnknownHostException) { - error("URL not supported: " + url, "Cannot import URL", - null); + error(GuiReader.trans( + StringIdGui.ERROR_URL_NOT_SUPPORTED, url), + GuiReader.trans(StringIdGui.TITLE_ERROR), null); } else { - error("Failed to import " + url + ": \n" - + e.getMessage(), "Cannot import URL", e); + error(GuiReader.trans( + StringIdGui.ERROR_URL_IMPORT_FAILED, url, + e.getMessage()), GuiReader + .trans(StringIdGui.TITLE_ERROR), e); } } else { if (onSuccess != null) { @@ -634,9 +662,10 @@ class GuiReaderMainPanel extends JPanel { } @Override - public void popupRequested(GuiReaderBook book, MouseEvent e) { + public void popupRequested(GuiReaderBook book, Component target, + int x, int y) { JPopupMenu popup = helper.createSourceAuthorPopup(); - popup.show(e.getComponent(), e.getX(), e.getY()); + popup.show(target, x, y); } @Override @@ -646,6 +675,27 @@ class GuiReaderMainPanel extends JPanel { refreshBooks(); } }); + + focus(); + } + + /** + * Focus the first {@link GuiReaderGroup} we find. + */ + private void focus() { + GuiReaderGroup group = null; + Map books = this.books; + if (books.size() > 0) { + group = books.values().iterator().next(); + } + + if (group == null) { + group = bookPane; + } + + if (group != null) { + group.requestFocusInWindow(); + } } /**