Fix UTF-8 and "/" -> "\" issues for Win32
[fanfix.git] / src / be / nikiroo / fanfix / reader / LocalReaderFrame.java
CommitLineData
a6395bef
NR
1package be.nikiroo.fanfix.reader;
2
d3c84ac3 3import java.awt.BorderLayout;
a6395bef 4import java.awt.Desktop;
a6395bef
NR
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;
d3c84ac3 20import javax.swing.JScrollPane;
a6395bef
NR
21
22import be.nikiroo.fanfix.Instance;
333f0e7b 23import be.nikiroo.fanfix.Main;
a6395bef 24import be.nikiroo.fanfix.data.MetaData;
333f0e7b 25import be.nikiroo.fanfix.reader.LocalReaderBook.BookActionListner;
a6395bef
NR
26
27class 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}