package be.nikiroo.fanfix.reader.ui;
import java.awt.BorderLayout;
+import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
*
* @param book
* the {@link GuiReaderBook} itself
- * @param e
- * the {@link MouseEvent} that generated this call
+ * @param target
+ * the target component for the popup
+ * @param x
+ * the X position of the click/request (in case of popup
+ * request from the keyboard, the center of the target is
+ * selected as point of reference)
+ * @param y
+ * the Y position of the click/request (in case of popup
+ * request from the keyboard, the center of the target is
+ * selected as point of reference)
*/
- public void popupRequested(GuiReaderBook book, MouseEvent e);
+ public void popupRequested(GuiReaderBook book, Component target, int x,
+ int y);
}
private static final long serialVersionUID = 1L;
*
* @return TRUE if it is mouse-hovered
*/
- private boolean isHovered() {
+ public boolean isHovered() {
return this.hovered;
}
* @param hovered
* TRUE if it is mouse-hovered
*/
- private void setHovered(boolean hovered) {
+ public void setHovered(boolean hovered) {
if (this.hovered != hovered) {
this.hovered = hovered;
repaint();
}
private void popup(MouseEvent e) {
- for (BookActionListener listener : listeners) {
- listener.select((GuiReaderBook.this));
- listener.popupRequested(GuiReaderBook.this, e);
- }
-
+ GuiReaderBook.this
+ .popup(GuiReaderBook.this, e.getX(), e.getY());
e.consume();
}
});
/**
* Cause a select event on this {@link GuiReaderBook}.
+ * <p>
+ * Have a look at {@link GuiReaderBook#setSelected(boolean)}.
*/
private void select() {
for (BookActionListener listener : listeners) {
}
}
+ /**
+ * Request a popup.
+ *
+ * @param target
+ * the target component for the popup
+ * @param x
+ * the X position of the click/request (in case of popup request
+ * from the keyboard, the center of the target should be selected
+ * as point of reference)
+ * @param y
+ * the Y position of the click/request (in case of popup request
+ * from the keyboard, the center of the target should be selected
+ * as point of reference)
+ */
+ public void popup(Component target, int x, int y) {
+ for (BookActionListener listener : listeners) {
+ listener.select((GuiReaderBook.this));
+ listener.popupRequested(GuiReaderBook.this, target, x, y);
+ }
+ }
+
/**
* The information about the book represented by this item.
*
import java.awt.BorderLayout;
import java.awt.Color;
+import java.awt.Component;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
}
@Override
- public void popupRequested(GuiReaderBook book, MouseEvent e) {
+ public void popupRequested(GuiReaderBook book,
+ Component target, int x, int y) {
}
@Override
*/
private void onKeyTyped(KeyEvent e) {
boolean consumed = false;
- if (e.getKeyChar() == '\n') {
+ boolean action = e.getKeyChar() == '\n';
+ boolean popup = e.getKeyChar() == ' ';
+ if (action || popup) {
consumed = true;
int index = getSelectedBookIndex();
if (index >= 0) {
- books.get(index).action();
+ GuiReaderBook book = books.get(index);
+ if (action) {
+ book.action();
+ } else if (popup) {
+ book.popup(book, book.getWidth() / 2, book.getHeight() / 2);
+ }
}
}
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.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
}
@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
}
@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