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