X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2Fui%2FGuiReaderMainPanel.java;h=3153dea106b3c03e819aa5ab32492952e95672ca;hb=0bb51c9c66697fe63ba066715207deabbcc1d479;hp=5192278992ee03e5cfae845dc4891ff5621fd3ad;hpb=484a31aadf54746222f9f35fb607a2ebee4e5e58;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java b/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java index 5192278..3153dea 100644 --- a/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java +++ b/src/be/nikiroo/fanfix/reader/ui/GuiReaderMainPanel.java @@ -9,6 +9,8 @@ import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -83,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 @@ -179,6 +181,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; @@ -188,23 +197,28 @@ 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 desc = Instance.getTransGui().getStringX( @@ -246,8 +260,11 @@ 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) { @@ -316,6 +333,8 @@ class GuiReaderMainPanel extends JPanel { openBook(book); } }); + + focus(); } /** @@ -341,11 +360,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)); } @@ -649,6 +674,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(); + } } /**