Source code: com/cybertivity/powerjournal/MainView.java
1 package com.cybertivity.powerjournal;
2 import java.awt.BorderLayout;
3 import java.awt.CardLayout;
4 import java.awt.Color;
5 import java.awt.Container;
6 import java.awt.FlowLayout;
7 import java.awt.Image;
8 import java.awt.Insets;
9 import java.awt.Toolkit;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.InputEvent;
12 import java.awt.event.KeyAdapter;
13 import java.awt.event.KeyEvent;
14 import java.awt.event.KeyListener;
15 import java.awt.event.WindowAdapter;
16 import java.awt.event.WindowEvent;
17 import java.net.URL;
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.Iterator;
21 import java.util.Set;
22 import javax.swing.BorderFactory;
23 import javax.swing.JButton;
24 import javax.swing.JCheckBox;
25 import javax.swing.JComponent;
26 import javax.swing.JFrame;
27 import javax.swing.JLabel;
28 import javax.swing.JList;
29 import javax.swing.JMenu;
30 import javax.swing.JMenuBar;
31 import javax.swing.JOptionPane;
32 import javax.swing.JPanel;
33 import javax.swing.JScrollPane;
34 import javax.swing.JTextArea;
35 import javax.swing.JTextField;
36 import javax.swing.SwingConstants;
37 import javax.swing.SwingUtilities;
38 import javax.swing.UIManager;
39 import javax.swing.border.Border;
40 import javax.swing.event.ChangeEvent;
41 import javax.swing.event.ChangeListener;
42 import com.cybertivity.powerjournal.framework.*;
43 import com.cybertivity.powerjournal.gridpanel.*;
44 import com.l2fprod.gui.plaf.skin.CompoundSkin;
45 import com.l2fprod.gui.plaf.skin.Skin;
46 import com.l2fprod.gui.plaf.skin.SkinLookAndFeel;
47
48 /**
49 * Title: PowerJournal
50 * Description: $Id: MainView.java,v 1.12 2001/12/27 20:28:12 arrowood Exp $
51 * Copyright: Copyright (c) 2001
52 * Company: <A HREF="http://www.cybertivity.com">Cybertivity</A>
53 *
54 * @author <A HREF="mailto:chris.arrowood@cybertivity.com">Chris Arrowood</A>
55 * @created November 17, 2001
56 * @version 1.0
57 */
58
59 public class MainView extends FrameView {
60
61 private CardLayout cardLayout = null;
62 private Container contentPane = null;
63 private ActionFactory.DefaultAction quitAction = null;
64 private ActionFactory.DefaultAction aboutAction = null;
65 private ActionFactory.DefaultAction viewEntryAction = null;
66 private ActionFactory.DefaultAction viewEntriesAction = null;
67 private ActionFactory.DefaultAction optionsDatabaseAction = null;
68 private ActionFactory.DefaultAction newJournalAction = null;
69 private ActionFactory.DefaultAction deleteJournalAction = null;
70 private ActionFactory.DefaultAction changePasswordAction = null;
71 private ActionFactory.DefaultAction changeJournalAction = null;
72 private ActionFactory.DefaultAction exportAsCSVAction = null;
73 private ActionFactory.DefaultAction exportAsTextAction = null;
74 private ActionFactory.DefaultAction exportAsHTMLAction = null;
75 private ActionFactory.ToggleAction optionsUseSkinsAction = null;
76 private ActionFactory.DefaultAction optionChooseSkinAction = null;
77 private HashMap menus = new HashMap();
78 private String appName = "";
79 public final static String IMAGE_PATH = "/com/cybertivity/powerjournal/resources/images";
80 private final static String SI_FRAME_ICON_NAME = "/draw32x32.gif";
81 private boolean guestMode = true;
82 private SingleEntryView singleEntryView = null;
83 private EntryView entryView = null;
84 private MultiEntryView multiEntryView = null;
85 public final static String EVENT_EASTEREGG = "Easter Egg";
86 String LOOK_AND_FEEL_WINDOWS = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
87 String LOOK_AND_FEEL_MOTIF = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
88
89
90
91 public MainView(String appNameArg) {
92 this.setLookAndFeel(LOOK_AND_FEEL_WINDOWS);
93 this.getContent().addKeyListener(new KeyPressListener());
94 appName = appNameArg;
95 contentPane = content.getContentPane();
96 content.addWindowListener(new DeadlyWindowListener());
97 content.setTitle(appName);
98 setFrameIcon();
99 createActions();
100 createMenu();
101 createWindow();
102 content.setResizable(true);
103 content.setVisible(false);
104 content.pack();
105 moveToCenter();
106 }
107
108
109 public JFrame getContainer() {
110 return content;
111 }
112
113
114 private void setFrameIcon() {
115 Image SI_FRAME_ICON = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource(IMAGE_PATH + SI_FRAME_ICON_NAME));
116 content.setIconImage(SI_FRAME_ICON);
117 }
118
119
120 protected void cleanUp() { }
121
122
123 protected void handleModelEvent(ModelEvent event) { }
124
125
126 public void enableControls() {
127 singleEntryView.enableControls();
128 multiEntryView.enableControls();
129 menusSetEnabled(true);
130 }
131
132
133 public void disableControls() {
134 singleEntryView.disableControls();
135 multiEntryView.disableControls();
136 menusSetEnabled(false);
137 }
138
139
140 private void menusSetEnabled(boolean enable) {
141 Set set = menus.keySet();
142 Iterator iter = set.iterator();
143 while (iter.hasNext()) {
144 String name = (String) iter.next();
145 JMenu menu = (JMenu) menus.get(name);
146 menu.setEnabled(enable);
147 }
148 }
149
150
151 /**
152 * Sets the LookAndFeel attribute of the object
153 */
154 public void setLookAndFeel(String lookAndFeel ) {
155 try {
156 UIManager.setLookAndFeel(lookAndFeel);
157 SwingUtilities.updateComponentTreeUI(content);
158 } catch (Exception e) {
159 }
160 }
161 public String getLookAndFeel( ) {
162 try {
163 return UIManager.getLookAndFeel().getClass().getName();
164 } catch (Exception e) {
165 return "Unknown";
166 }
167 }
168
169 public boolean updateSkin(String skinPath) {
170 boolean success = true;
171 if (skinPath != null) {
172 if (optionsUseSkinsAction.getState()) {
173 try {
174 Skin skin = SkinLookAndFeel.loadThemePack(skinPath);
175 SkinLookAndFeel.setSkin(skin);
176
177 SkinLookAndFeel lnf = new SkinLookAndFeel();
178 UIManager.setLookAndFeel(lnf);
179
180 UIManager.getLookAndFeelDefaults().put("ClassLoader", lnf.getClass().getClassLoader());
181 SwingUtilities.updateComponentTreeUI(content);
182 } catch (Exception e) {
183 Dialogs.showError("Unable to update skin", "The specified skin could not be loaded.\n\nMake sure it is a valid skin.");
184 success = false;
185 }
186 }
187 }
188 return success;
189 }
190
191
192 /*
193 * MainView has one instance of this. It listens out for window
194 * closing events and notifies the controller.
195 */
196 private class DeadlyWindowListener extends WindowAdapter {
197 public void windowClosing(WindowEvent evt) {
198 fireEvent(MainActionFactory.ACTION_QUIT);
199 }
200 }
201
202
203 public void setVisible(boolean arg) {
204 content.pack();
205 content.setVisible(arg);
206 }
207
208
209 private void createMenu() {
210 JMenuBar menuBar = new JMenuBar();
211 JMenu menuMain = new JMenu("Main");
212 JMenu menuView = new JMenu("Entry");
213 JMenu menuExport = new JMenu("Export");
214 JMenu menuOptions = new JMenu("Options");
215 JMenu menuHelp = new JMenu("Help");
216
217 menus.put("Main", menuMain);
218 menus.put("View", menuView);
219 menus.put("Export", menuExport);
220 menus.put("Options", menuOptions);
221 menus.put("Help", menuHelp);
222
223 //populate menu main
224 viewEntryAction.menuItemFactory(menuView);
225 viewEntriesAction.menuItemFactory(menuView);
226 exportAsCSVAction.menuItemFactory(menuExport);
227 exportAsTextAction.menuItemFactory(menuExport);
228 exportAsHTMLAction.menuItemFactory(menuExport);
229 newJournalAction.menuItemFactory(menuMain);
230 changeJournalAction.menuItemFactory(menuMain);
231 deleteJournalAction.menuItemFactory(menuMain);
232 changePasswordAction.menuItemFactory(menuMain);
233 quitAction.menuItemFactory(menuMain);
234
235 //populate menu options
236 optionsDatabaseAction.menuItemFactory(menuOptions);
237 optionsUseSkinsAction.menuItemFactory(menuOptions);
238 optionChooseSkinAction.menuItemFactory(menuOptions);
239
240 //populate menu help
241 aboutAction.menuItemFactory(menuHelp);
242
243 menuBar.add(menuMain);
244 menuBar.add(menuView);
245 menuBar.add(menuExport);
246 menuBar.add(menuOptions);
247 menuBar.add(menuHelp);
248
249 content.setJMenuBar(menuBar);
250 }
251
252
253 private void createActions() {
254 MainActionFactory factory =
255 new MainActionFactory(IMAGE_PATH);
256 quitAction = factory.createAction(MainActionFactory.ACTION_QUIT);
257 aboutAction = factory.createAction(MainActionFactory.ACTION_ABOUT);
258 viewEntryAction = factory.createAction(MainActionFactory.ACTION_VIEW_ENTRY);
259 viewEntriesAction = factory.createAction(MainActionFactory.ACTION_VIEW_ALL_ENTRIES);
260 newJournalAction = factory.createAction(MainActionFactory.ACTION_NEW_JOURNAL);
261 deleteJournalAction = factory.createAction(MainActionFactory.ACTION_DELETE_JOURNAL);
262 changePasswordAction = factory.createAction(MainActionFactory.ACTION_CHANGE_PASSWORD);
263 changeJournalAction = factory.createAction(MainActionFactory.ACTION_CHANGE_JOURNAL);
264 //export menu
265 exportAsCSVAction = factory.createAction(MainActionFactory.ACTION_EXPORT_CSV);
266 exportAsTextAction = factory.createAction(MainActionFactory.ACTION_EXPORT_TEXT);
267 exportAsHTMLAction = factory.createAction(MainActionFactory.ACTION_EXPORT_HTML);
268 //options menu
269 optionsDatabaseAction = factory.createAction(MainActionFactory.ACTION_DB_OPTIONS);
270 optionChooseSkinAction = factory.createAction(MainActionFactory.ACTION_SKINS_CHOOSE);
271 optionsUseSkinsAction = factory.createToggleAction(MainActionFactory.ACTION_SKINS_USE);
272
273 //add listeners
274 quitAction.addActionListener(actionListener);
275 aboutAction.addActionListener(actionListener);
276 viewEntryAction.addActionListener(actionListener);
277 viewEntriesAction.addActionListener(actionListener);
278 optionsDatabaseAction.addActionListener(actionListener);
279 newJournalAction.addActionListener(actionListener);
280 deleteJournalAction.addActionListener(actionListener);
281 changePasswordAction.addActionListener(actionListener);
282 changeJournalAction.addActionListener(actionListener);
283 exportAsCSVAction.addActionListener(actionListener);
284 exportAsTextAction.addActionListener(actionListener);
285 exportAsHTMLAction.addActionListener(actionListener);
286 optionChooseSkinAction.addActionListener(actionListener);
287 optionsUseSkinsAction.addActionListener(actionListener);
288 }
289
290
291 private void createWindow() {
292 contentPane.removeAll();
293 cardLayout = new CardLayout();
294 contentPane.setLayout(cardLayout);
295 }
296
297
298 public void addEntryView(EntryView entryViewArg, String name) {
299 contentPane.add(entryViewArg.getContent(), name);
300 if (name.equals(MainController.CARD_SINGLE)) {
301 singleEntryView = (SingleEntryView) entryViewArg;
302 } else if (name.equals(MainController.CARD_MULTI)) {
303 multiEntryView = (MultiEntryView) entryViewArg;
304 }
305 entryView = entryViewArg;
306 content.pack();
307 moveToCenter();
308 }
309
310
311 public void showEntryView(String name) {
312 cardLayout.show(contentPane, name);
313 }
314
315
316 public void displayEntries(ArrayList entries) {
317 multiEntryView.displayEntries(entries);
318 cardLayout.show(contentPane, MainController.CARD_MULTI);
319 content.pack();
320 }
321
322
323 protected void displayEntry(Entry entry, boolean guestMode) {
324 cardLayout.show(contentPane, MainController.CARD_SINGLE);
325 singleEntryView.displayEntry(entry, guestMode);
326 content.pack();
327 }
328
329
330
331 class KeyPressListener extends KeyAdapter implements KeyListener {
332 public void keyPressed(KeyEvent event) {
333 int keyCode = event.getKeyCode();
334 if ((event.getModifiers() == (InputEvent.SHIFT_MASK + InputEvent.CTRL_MASK + InputEvent.ALT_MASK))) {
335 if (keyCode == KeyEvent.VK_ENTER) {
336 fireEvent(EVENT_EASTEREGG);
337 }
338 }
339 event.consume();
340 }
341 }
342 public boolean getUseSkins() {
343 return optionsUseSkinsAction.getState();
344 }
345 public void setUseSkins(boolean _useSkins) {
346 optionsUseSkinsAction.setState(_useSkins);
347 if (!_useSkins) {
348 updateSkin(null);
349 }
350
351 }
352
353
354 public void setUseSkins(String enabled){
355 if (enabled==null) {
356 enabled="1";
357 }
358 if (enabled.equals("1")) {
359 setUseSkins(true);
360 }
361 else {
362 setUseSkins(false);
363 }
364
365 }
366 }