1 package be
.nikiroo
.fanfix
.reader
;
3 import java
.awt
.BorderLayout
;
5 import java
.awt
.Graphics2D
;
6 import java
.awt
.event
.MouseEvent
;
7 import java
.awt
.event
.MouseListener
;
8 import java
.awt
.image
.BufferedImage
;
9 import java
.util
.ArrayList
;
10 import java
.util
.Date
;
11 import java
.util
.EventListener
;
12 import java
.util
.List
;
14 import javax
.swing
.ImageIcon
;
15 import javax
.swing
.JLabel
;
16 import javax
.swing
.JPanel
;
18 import be
.nikiroo
.fanfix
.data
.MetaData
;
21 * A book item presented in a {@link LocalReaderFrame}.
25 class LocalReaderBook
extends JPanel
{
27 * Action on a book item.
31 interface BookActionListner
extends EventListener
{
33 * The book was selected (single click).
36 * the {@link LocalReaderBook} itself
38 public void select(LocalReaderBook book
);
41 * The book was double-clicked.
44 * the {@link LocalReaderBook} itself
46 public void action(LocalReaderBook book
);
49 private static final long serialVersionUID
= 1L;
52 private JLabel author
;
53 private boolean selected
;
54 private boolean hovered
;
55 private Date lastClick
;
56 private long doubleClickDelay
= 200; // in ms
57 private List
<BookActionListner
> listeners
;
59 public LocalReaderBook(MetaData meta
) {
60 if (meta
.getCover() != null) {
61 BufferedImage resizedImage
= new BufferedImage(100, 150,
62 BufferedImage
.TYPE_4BYTE_ABGR
);
63 Graphics2D g
= resizedImage
.createGraphics();
64 g
.drawImage(meta
.getCover(), 0, 0, 100, 150, null);
67 icon
= new JLabel(new ImageIcon(resizedImage
));
69 icon
= new JLabel(" [ no cover ] ");
72 title
= new JLabel(meta
.getTitle());
73 author
= new JLabel("by " + meta
.getAuthor());
75 this.setLayout(new BorderLayout());
76 this.add(icon
, BorderLayout
.CENTER
);
77 this.add(title
, BorderLayout
.SOUTH
);
84 * The book current selection state.
86 * @return the selected
88 public boolean isSelected() {
93 * The book current selection state.
98 public void setSelected(boolean selected
) {
99 this.selected
= selected
;
103 private void setHovered(boolean hovered
) {
104 this.hovered
= hovered
;
108 private void fixColor() {
109 if (selected
&& !hovered
) {
110 setBackground(new Color(180, 180, 255));
111 } else if (!selected
&& hovered
) {
112 setBackground(new Color(230, 230, 255));
113 } else if (selected
&& hovered
) {
114 setBackground(new Color(200, 200, 255));
116 setBackground(new Color(255, 255, 255));
120 private void setupListeners() {
121 listeners
= new ArrayList
<LocalReaderBook
.BookActionListner
>();
122 addMouseListener(new MouseListener() {
123 public void mouseReleased(MouseEvent e
) {
126 public void mousePressed(MouseEvent e
) {
129 public void mouseExited(MouseEvent e
) {
133 public void mouseEntered(MouseEvent e
) {
137 public void mouseClicked(MouseEvent e
) {
138 Date now
= new Date();
139 if (lastClick
!= null
140 && now
.getTime() - lastClick
.getTime() < doubleClickDelay
) {
150 private void click(boolean doubleClick
) {
151 for (BookActionListner listener
: listeners
) {
153 listener
.action(this);
155 listener
.select(this);
160 public void addActionListener(BookActionListner listener
) {
161 listeners
.add(listener
);