Add more warnings source to 1.6) and fix warnings
[nikiroo-utils.git] / src / be / nikiroo / fanfix / reader / GuiReaderGroup.java
CommitLineData
4310bae9
NR
1package be.nikiroo.fanfix.reader;
2
3import java.awt.BorderLayout;
4import java.awt.Color;
5import java.awt.event.ActionListener;
6import java.awt.event.MouseEvent;
7import java.util.ArrayList;
8import java.util.List;
9
10import javax.swing.JLabel;
11import javax.swing.JPanel;
12
13import be.nikiroo.fanfix.data.MetaData;
5dd985cf 14import be.nikiroo.fanfix.reader.GuiReaderBook.BookActionListener;
4310bae9
NR
15import be.nikiroo.utils.ui.WrapLayout;
16
17/**
5dd985cf 18 * A group of {@link GuiReaderBook}s for display.
4310bae9
NR
19 *
20 * @author niki
21 */
5dd985cf 22public class GuiReaderGroup extends JPanel {
4310bae9
NR
23 private static final long serialVersionUID = 1L;
24 private BookActionListener action;
25 private Color backgroundColor;
5dd985cf 26 private GuiReader reader;
4310bae9 27 private List<MetaData> stories;
5dd985cf 28 private List<GuiReaderBook> books;
4310bae9 29 private JPanel pane;
793f1071 30 private boolean words; // words or authors (secondary info on books)
4310bae9
NR
31
32 /**
5dd985cf 33 * Create a new {@link GuiReaderGroup}.
4310bae9
NR
34 *
35 * @param reader
e42573a0
NR
36 * the {@link GuiReaderBook} used to probe some information about
37 * the stories
4310bae9
NR
38 * @param title
39 * the title of this group
40 * @param backgroundColor
41 * the background colour to use (or NULL for default)
42 */
e42573a0 43 public GuiReaderGroup(GuiReader reader, String title, Color backgroundColor) {
4310bae9
NR
44 this.reader = reader;
45 this.backgroundColor = backgroundColor;
46
47 this.pane = new JPanel();
48
49 pane.setLayout(new WrapLayout(WrapLayout.LEADING, 5, 5));
50 if (backgroundColor != null) {
51 pane.setBackground(backgroundColor);
52 setBackground(backgroundColor);
53 }
54
55 setLayout(new BorderLayout(0, 10));
56 add(pane, BorderLayout.CENTER);
57
58 if (title != null) {
59 if (title.isEmpty()) {
60 title = "[unknown]";
61 }
62
63 JLabel label = new JLabel();
64 label.setText(String.format("<html>"
71d72f34
NR
65 + "<body style='text-align: center; color: gray;'><br><b>"
66 + "%s" + "</b></body>" + "</html>", title));
4310bae9
NR
67 label.setHorizontalAlignment(JLabel.CENTER);
68 add(label, BorderLayout.NORTH);
69 }
70 }
71
72 /**
73 * Set the {@link ActionListener} that will be fired on each
5dd985cf 74 * {@link GuiReaderBook} action.
4310bae9
NR
75 *
76 * @param action
77 * the action
78 */
79 public void setActionListener(BookActionListener action) {
80 this.action = action;
793f1071 81 refreshBooks(stories, words);
4310bae9
NR
82 }
83
84 /**
5dd985cf 85 * Refresh the list of {@link GuiReaderBook}s displayed in the control.
4310bae9
NR
86 *
87 * @param stories
88 * the stories
793f1071
NR
89 * @param seeWordcount
90 * TRUE to see word counts, FALSE to see authors
4310bae9 91 */
793f1071 92 public void refreshBooks(List<MetaData> stories, boolean seeWordcount) {
4310bae9 93 this.stories = stories;
793f1071 94 this.words = seeWordcount;
4310bae9 95
5dd985cf 96 books = new ArrayList<GuiReaderBook>();
4310bae9
NR
97 invalidate();
98 pane.invalidate();
99 pane.removeAll();
100
101 if (stories != null) {
102 for (MetaData meta : stories) {
e42573a0 103 GuiReaderBook book = new GuiReaderBook(reader, meta,
793f1071 104 reader.isCached(meta.getLuid()), seeWordcount);
4310bae9
NR
105 if (backgroundColor != null) {
106 book.setBackground(backgroundColor);
107 }
108
109 books.add(book);
110
111 book.addActionListener(new BookActionListener() {
211f7ddb 112 @Override
5dd985cf
NR
113 public void select(GuiReaderBook book) {
114 for (GuiReaderBook abook : books) {
4310bae9
NR
115 abook.setSelected(abook == book);
116 }
117 }
118
211f7ddb 119 @Override
e42573a0 120 public void popupRequested(GuiReaderBook book, MouseEvent e) {
4310bae9
NR
121 }
122
211f7ddb 123 @Override
5dd985cf 124 public void action(GuiReaderBook book) {
4310bae9
NR
125 }
126 });
127
128 if (action != null) {
129 book.addActionListener(action);
130 }
131
132 pane.add(book);
133 }
134 }
135
136 pane.validate();
137 pane.repaint();
138 validate();
139 repaint();
140 }
141
142 /**
143 * Enables or disables this component, depending on the value of the
144 * parameter <code>b</code>. An enabled component can respond to user input
145 * and generate events. Components are enabled initially by default.
146 * <p>
147 * Disabling this component will also affect its children.
148 *
149 * @param b
150 * If <code>true</code>, this component is enabled; otherwise
151 * this component is disabled
152 */
153 @Override
154 public void setEnabled(boolean b) {
155 if (books != null) {
5dd985cf 156 for (GuiReaderBook book : books) {
4310bae9
NR
157 book.setEnabled(b);
158 book.repaint();
159 }
160 }
161
162 pane.setEnabled(b);
163 super.setEnabled(b);
164 repaint();
165 }
166}