importer frame: step 1
[fanfix.git] / src / be / nikiroo / fanfix_swing / gui / MainFrame.java
1 package be.nikiroo.fanfix_swing.gui;
2
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.awt.event.KeyEvent;
6
7 import javax.swing.JComponent;
8 import javax.swing.JFrame;
9 import javax.swing.JLabel;
10 import javax.swing.JMenu;
11 import javax.swing.JMenuBar;
12 import javax.swing.JMenuItem;
13 import javax.swing.JSplitPane;
14
15 import be.nikiroo.utils.Version;
16
17 public class MainFrame extends JFrame {
18 private BooksPanel books;
19 private DetailsPanel details;
20 private BrowserPanel browser;
21
22 public MainFrame(boolean sidePanel, boolean detailsPanel) {
23 super("Fanfix " + Version.getCurrentVersion());
24 setSize(800, 600);
25 setJMenuBar(createMenuBar());
26
27 sidePanel = true;
28 detailsPanel = true;
29
30 browser = new BrowserPanel();
31 books = new BooksPanel(true);
32
33 JComponent other = null;
34 boolean orientationH = true;
35 if (sidePanel && !detailsPanel) {
36 other = browser;
37 } else if (sidePanel && detailsPanel) {
38 JComponent side = browser;
39 details = new DetailsPanel();
40 other = split(side, details, false, 0.5, 1);
41 } else if (!sidePanel && !detailsPanel) {
42 orientationH = false;
43 other = new JLabel("<< Go back");
44 } else if (!sidePanel && detailsPanel) {
45 JComponent goBack = new JLabel("<< Go back");
46 details = new DetailsPanel();
47 other = split(goBack, details, false, 0.5, 1);
48 }
49
50 browser.addActionListener(new ActionListener() {
51 @Override
52 public void actionPerformed(ActionEvent e) {
53 books.load(browser.getSelectedSources(),
54 browser.getSelectedAuthors(),
55 browser.getSelectedTags());
56 details.setBook(browser.getHighlight());
57 }
58 });
59 books.addActionListener(new ActionListener() {
60 @Override
61 public void actionPerformed(ActionEvent e) {
62 if (BooksPanel.INVALIDATE_CACHE.equals(e.getActionCommand())) {
63 browser.reloadData();
64 }
65 }
66 });
67
68 JSplitPane split = split(other, books, orientationH, 0.5, 0);
69
70 this.add(split);
71 }
72
73 private JSplitPane split(JComponent leftTop, JComponent rightBottom,
74 boolean horizontal, double ratio, double weight) {
75 JSplitPane split = new JSplitPane(
76 horizontal ? JSplitPane.HORIZONTAL_SPLIT
77 : JSplitPane.VERTICAL_SPLIT,
78 leftTop, rightBottom);
79 split.setOneTouchExpandable(true);
80 split.setResizeWeight(weight);
81 split.setContinuousLayout(true);
82 split.setDividerLocation(ratio);
83
84 return split;
85 }
86
87 private JMenuBar createMenuBar() {
88 JMenuBar bar = new JMenuBar();
89
90 JMenu file = new JMenu("File");
91 file.setMnemonic(KeyEvent.VK_F);
92
93 JMenuItem item1 = new JMenuItem("Download", KeyEvent.VK_D);
94 item1.addActionListener(new ActionListener() {
95 @Override
96 public void actionPerformed(ActionEvent e) {
97 // TODO: correctly use the importer (wip)
98 new ImporterFrame().imprtUrl(MainFrame.this, new Runnable() {
99 @Override
100 public void run() {
101 browser.reloadData();
102 books.load(browser.getSelectedSources(),
103 browser.getSelectedAuthors(),
104 browser.getSelectedTags());
105 details.setBook(browser.getHighlight());
106 }
107 });
108 }
109 });
110
111 JMenuItem item2 = new JMenuItem("Import file", KeyEvent.VK_I);
112 item2.addActionListener(new ActionListener() {
113 @Override
114 public void actionPerformed(ActionEvent e) {
115 // TODO: correctly use the importer (wip)
116 new ImporterFrame().imprtFile(MainFrame.this, new Runnable() {
117 @Override
118 public void run() {
119 browser.reloadData();
120 books.load(browser.getSelectedSources(),
121 browser.getSelectedAuthors(),
122 browser.getSelectedTags());
123 details.setBook(browser.getHighlight());
124 }
125 });
126 }
127 });
128
129 file.add(item1);
130 file.add(item2);
131
132 JMenu edit = new JMenu("Edit");
133 edit.setMnemonic(KeyEvent.VK_E);
134
135 JMenu view = new JMenu("View");
136 view.setMnemonic(KeyEvent.VK_V);
137
138 JMenuItem listMode = new JMenuItem("List mode", KeyEvent.VK_L);
139 listMode.addActionListener(new ActionListener() {
140 @Override
141 public void actionPerformed(ActionEvent e) {
142 books.setListMode(!books.isListMode());
143 }
144 });
145
146 view.add(listMode);
147
148 bar.add(file);
149 bar.add(edit);
150 bar.add(view);
151
152 return bar;
153 }
154 }