Commit | Line | Data |
---|---|---|
a6395bef NR |
1 | package be.nikiroo.fanfix.reader; |
2 | ||
3 | import java.awt.Desktop; | |
4 | import java.awt.FlowLayout; | |
5 | import java.awt.event.ActionEvent; | |
6 | import java.awt.event.ActionListener; | |
333f0e7b NR |
7 | import java.awt.event.KeyEvent; |
8 | import java.awt.event.WindowEvent; | |
9 | import java.io.File; | |
a6395bef | 10 | import java.io.IOException; |
333f0e7b | 11 | import java.util.ArrayList; |
a6395bef NR |
12 | import java.util.List; |
13 | ||
a6395bef | 14 | import javax.swing.JFrame; |
333f0e7b NR |
15 | import javax.swing.JMenu; |
16 | import javax.swing.JMenuBar; | |
17 | import javax.swing.JMenuItem; | |
18 | import javax.swing.JOptionPane; | |
19 | import javax.swing.JPanel; | |
a6395bef NR |
20 | |
21 | import be.nikiroo.fanfix.Instance; | |
333f0e7b | 22 | import be.nikiroo.fanfix.Main; |
a6395bef | 23 | import be.nikiroo.fanfix.data.MetaData; |
333f0e7b | 24 | import be.nikiroo.fanfix.reader.LocalReaderBook.BookActionListner; |
a6395bef NR |
25 | |
26 | class LocalReaderFrame extends JFrame { | |
27 | private static final long serialVersionUID = 1L; | |
28 | private LocalReader reader; | |
333f0e7b NR |
29 | private List<MetaData> stories; |
30 | private List<LocalReaderBook> books; | |
31 | private JPanel bookPane; | |
32 | private String type; | |
a6395bef | 33 | |
333f0e7b | 34 | public LocalReaderFrame(LocalReader reader, String type) { |
a6395bef NR |
35 | super("HTML reader"); |
36 | ||
37 | this.reader = reader; | |
38 | ||
39 | setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
40 | setSize(800, 600); | |
41 | setLayout(new FlowLayout()); | |
42 | ||
333f0e7b NR |
43 | books = new ArrayList<LocalReaderBook>(); |
44 | bookPane = new JPanel(); | |
45 | add(bookPane); | |
a6395bef | 46 | |
333f0e7b NR |
47 | refreshBooks(type); |
48 | setJMenuBar(createMenu()); | |
49 | ||
50 | setVisible(true); | |
51 | } | |
52 | ||
53 | private void refreshBooks(String type) { | |
54 | this.type = type; | |
55 | stories = Instance.getLibrary().getList(type); | |
56 | books.clear(); | |
57 | bookPane.removeAll(); | |
58 | for (MetaData meta : stories) { | |
59 | LocalReaderBook book = new LocalReaderBook(meta); | |
60 | books.add(book); | |
61 | final String luid = meta.getLuid(); | |
62 | book.addActionListener(new BookActionListner() { | |
63 | public void select(LocalReaderBook book) { | |
64 | for (LocalReaderBook abook : books) { | |
65 | abook.setSelected(abook == book); | |
66 | } | |
67 | } | |
68 | ||
69 | public void action(LocalReaderBook book) { | |
a6395bef | 70 | try { |
333f0e7b NR |
71 | File target = LocalReaderFrame.this.reader |
72 | .getTarget(luid); | |
73 | Desktop.getDesktop().browse(target.toURI()); | |
74 | } catch (IOException e) { | |
75 | Instance.syserr(e); | |
a6395bef NR |
76 | } |
77 | } | |
78 | }); | |
79 | ||
333f0e7b | 80 | bookPane.add(book); |
a6395bef NR |
81 | } |
82 | ||
333f0e7b NR |
83 | bookPane.validate(); |
84 | bookPane.repaint(); | |
85 | } | |
86 | ||
87 | private JMenuBar createMenu() { | |
88 | JMenuBar bar = new JMenuBar(); | |
89 | ||
90 | JMenu file = new JMenu("File"); | |
91 | ||
92 | JMenuItem imprt = new JMenuItem("Import", KeyEvent.VK_I); | |
93 | imprt.addActionListener(new ActionListener() { | |
94 | public void actionPerformed(ActionEvent e) { | |
95 | String url = JOptionPane.showInputDialog(LocalReaderFrame.this, | |
96 | "url?"); | |
97 | if (Main.imprt(url) != 0) { | |
98 | JOptionPane.showMessageDialog(LocalReaderFrame.this, | |
99 | "Cannot import", "Imort error", | |
100 | JOptionPane.ERROR_MESSAGE); | |
101 | } else { | |
102 | refreshBooks(type); | |
103 | } | |
104 | } | |
105 | }); | |
106 | JMenu types = new JMenu("Type"); | |
107 | List<String> tt = Instance.getLibrary().getTypes(); | |
108 | tt.add(0, null); | |
109 | for (final String type : tt) { | |
110 | JMenuItem item = new JMenuItem(type == null ? "[all]" : type); | |
111 | item.addActionListener(new ActionListener() { | |
112 | public void actionPerformed(ActionEvent e) { | |
113 | refreshBooks(type); | |
114 | } | |
115 | }); | |
116 | types.add(item); | |
117 | } | |
118 | JMenuItem exit = new JMenuItem("Exit", KeyEvent.VK_X); | |
119 | exit.addActionListener(new ActionListener() { | |
120 | public void actionPerformed(ActionEvent e) { | |
121 | LocalReaderFrame.this.dispatchEvent(new WindowEvent( | |
122 | LocalReaderFrame.this, WindowEvent.WINDOW_CLOSING)); | |
123 | } | |
124 | }); | |
125 | ||
126 | file.add(imprt); | |
127 | file.add(types); | |
128 | file.addSeparator(); | |
129 | file.add(exit); | |
130 | ||
131 | bar.add(file); | |
132 | ||
133 | return bar; | |
a6395bef NR |
134 | } |
135 | } |