Lot of fixes + first (bad, ugly) working GUI
[fanfix.git] / src / be / nikiroo / fanfix / reader / LocalReaderFrame.java
CommitLineData
a6395bef
NR
1package be.nikiroo.fanfix.reader;
2
3import java.awt.Desktop;
4import java.awt.FlowLayout;
5import java.awt.event.ActionEvent;
6import java.awt.event.ActionListener;
333f0e7b
NR
7import java.awt.event.KeyEvent;
8import java.awt.event.WindowEvent;
9import java.io.File;
a6395bef 10import java.io.IOException;
333f0e7b 11import java.util.ArrayList;
a6395bef
NR
12import java.util.List;
13
a6395bef 14import javax.swing.JFrame;
333f0e7b
NR
15import javax.swing.JMenu;
16import javax.swing.JMenuBar;
17import javax.swing.JMenuItem;
18import javax.swing.JOptionPane;
19import javax.swing.JPanel;
a6395bef
NR
20
21import be.nikiroo.fanfix.Instance;
333f0e7b 22import be.nikiroo.fanfix.Main;
a6395bef 23import be.nikiroo.fanfix.data.MetaData;
333f0e7b 24import be.nikiroo.fanfix.reader.LocalReaderBook.BookActionListner;
a6395bef
NR
25
26class 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}