// MainFrame package org.javamoney.examples.ez.money.gui; import static org.javamoney.examples.ez.common.CommonConstants.IS_MAC; import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton; import static org.javamoney.examples.ez.common.utility.I18NHelper.getSharedProperty; import static org.javamoney.examples.ez.common.utility.ResourceHelper.openURL; import static javax.swing.JOptionPane.PLAIN_MESSAGE; import static javax.swing.JOptionPane.showMessageDialog; import static org.javamoney.examples.ez.money.IconKeys.WINDOWS_BANNER; import static org.javamoney.examples.ez.money.IconKeys.WINDOWS_LOGO; import static org.javamoney.examples.ez.money.gui.dialog.PreferencesDialog.showPreferencesDialog; import static org.javamoney.examples.ez.money.utility.BackupHelper.makeBackup; import static org.javamoney.examples.ez.money.utility.BackupHelper.restoreFromBackup; import static org.javamoney.examples.ez.money.utility.DialogHelper.decide; import static org.javamoney.examples.ez.money.utility.ShutdownHelper.doShutdown; import static org.javamoney.examples.ez.money.utility.UpdateHelper.CURRENT_VERSION; import static org.javamoney.examples.ez.money.utility.UpdateHelper.checkForUpdates; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import org.javamoney.examples.ez.money.gui.dialog.AccountStatementDialog; import org.javamoney.examples.ez.money.gui.dialog.BudgetReportDialog; import org.javamoney.examples.ez.money.gui.dialog.CategoryReportDialog; import org.javamoney.examples.ez.money.gui.dialog.UninstallDialog; import org.javamoney.examples.ez.money.gui.view.ViewsPanel; import org.javamoney.examples.ez.money.importexport.CSVExporter; import org.javamoney.examples.ez.money.importexport.CSVImporter; import org.javamoney.examples.ez.money.importexport.OFXImporter; import org.javamoney.examples.ez.money.importexport.QIFExporter; import org.javamoney.examples.ez.money.importexport.QIFImporter; //import com.apple.eawt.Application; //import com.apple.eawt.ApplicationAdapter; //import com.apple.eawt.ApplicationEvent; import org.javamoney.examples.ez.common.gui.Frame; import org.javamoney.examples.ez.common.gui.Panel; import org.javamoney.examples.ez.common.utility.I18NHelper; /** * This class is the main application frame that the user interacts with. */ public final class MainFrame extends Frame { /** * Constructs a new main application frame. */ public MainFrame() { setContentPane(new ViewsPanel()); setIconImage(WINDOWS_LOGO.getIcon().getImage()); setTitle(APPLICATION_NAME); buildMenus(); // buildMacMenus(); // Add listeners. addWindowListener(new WindowHandler()); } /** * This method returns the panel that manages the views. * * @return The panel that manages the views. */ public ViewsPanel getViews() { return (ViewsPanel)getContentPane(); } /** * This method updates all necessary components to reflect a data change. */ public void signalDataChange() { getViews().updateView(); } ////////////////////////////////////////////////////////////////////////////// // Start of private methods. ////////////////////////////////////////////////////////////////////////////// // private // void // buildMacMenus() // { // Application application = Application.getApplication(); // // application.addApplicationListener(new MacApplicationHandler()); // application.addPreferencesMenuItem(); // application.setEnabledPreferencesMenu(true); // } private void buildMenus() { JMenuBar menuBar = new JMenuBar(); ActionHandler handler = new ActionHandler(); JMenu backup = new JMenu(getProperty("menu.backup")); JMenu file = new JMenu(getProperty("menu.file")); JMenu help = new JMenu(getProperty("menu.help")); JMenu importExport = new JMenu(getProperty("menu.import_export")); JMenu reports = new JMenu(getProperty("menu.reports")); backup.add(createMenuItem(ACTION_BACKUP, handler)); backup.add(createMenuItem(ACTION_RESTORE, handler)); file.add(backup); file.addSeparator(); file.add(importExport); file.addSeparator(); file.add(reports); // Platform specific. if(IS_MAC == false) { file.addSeparator(); file.add(createMenuItem(ACTION_PREFERENCES, handler)); file.addSeparator(); file.add(createMenuItem(ACTION_QUIT, handler)); help.add(createMenuItem(ACTION_ABOUT, handler)); help.addSeparator(); } help.add(createMenuItem(ACTION_WEB, handler)); help.addSeparator(); help.add(createMenuItem(ACTION_UPDATE, handler)); help.addSeparator(); help.add(createMenuItem(ACTION_UNINSTALL, handler)); importExport.add(createMenuItem(ACTION_IMPORT_QIF, handler)); importExport.add(createMenuItem(ACTION_EXPORT_QIF, handler)); importExport.addSeparator(); importExport.add(createMenuItem(ACTION_IMPORT_CSV, handler)); importExport.add(createMenuItem(ACTION_EXPORT_CSV, handler)); importExport.addSeparator(); importExport.add(createMenuItem(ACTION_IMPORT_OFX, handler)); reports.add(createMenuItem(ACTION_STATEMENT, handler)); reports.add(createMenuItem(ACTION_BUDGET_REPORT, handler)); reports.add(createMenuItem(ACTION_CATEGORY_REPORT, handler)); menuBar.add(file); menuBar.add(help); // Provide access to the menus. setJMenuBar(menuBar); } private static JMenuItem createMenuItem(String action, ActionHandler handler) { JMenuItem item = new JMenuItem(); // Build item. buildButton(item, action, handler); return item; } private static String getProperty(String key) { return I18NHelper.getProperty("MainFrame." + key); } private void restore() { if(decide(getProperty("restore.title"), getProperty("restore.description")) == true) { restoreFromBackup(); } } private void showAbout() { Panel panel = new Panel(); JLabel name = new JLabel(APPLICATION_NAME); JLabel version = new JLabel(); // Customize look to be the same as the Mac's about box. name.setFont(name.getFont().deriveFont(14.0f)); name.setFont(name.getFont().deriveFont(Font.BOLD)); version.setFont(version.getFont().deriveFont(10.0f)); version.setFont(version.getFont().deriveFont(Font.PLAIN)); version.setText(getProperty("about.version") + " " + CURRENT_VERSION.toString()); // Build panel. panel.addEmptyCellAt(0, 0); panel.add(WINDOWS_BANNER.getIcon(), 0, 1, 1, 1, 100, 0); panel.addEmptyCellAt(0, 2); panel.add(name, 0, 3, 1, 1, 0, 0); panel.addEmptyCellAt(0, 4); panel.setAnchor(GridBagConstraints.NORTH); panel.add(version, 0, 5, 1, 1, 0, 100); panel.addEmptyCellAt(0, 6); showMessageDialog(this, panel, "", PLAIN_MESSAGE); } ////////////////////////////////////////////////////////////////////////////// // Start of inner classes. ////////////////////////////////////////////////////////////////////////////// private class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent event) { String command = event.getActionCommand(); if(command.equals(ACTION_ABOUT) == true) { showAbout(); } else if(command.equals(ACTION_BACKUP) == true) { makeBackup(); } else if(command.equals(ACTION_BUDGET_REPORT) == true) { new BudgetReportDialog().showDialog(); } else if(command.equals(ACTION_CATEGORY_REPORT) == true) { new CategoryReportDialog().showDialog(); } else if(command.equals(ACTION_EXPORT_CSV) == true) { new CSVExporter().doExport(); } else if(command.equals(ACTION_EXPORT_QIF) == true) { new QIFExporter().doExport(); } else if(command.equals(ACTION_IMPORT_CSV) == true) { new CSVImporter().doImport(); } else if(command.equals(ACTION_IMPORT_OFX) == true) { new OFXImporter().doImport(); } else if(command.equals(ACTION_IMPORT_QIF) == true) { new QIFImporter().doImport(); } else if(command.equals(ACTION_PREFERENCES) == true) { showPreferencesDialog(); } else if(command.equals(ACTION_QUIT) == true) { doShutdown(); } else if(command.equals(ACTION_RESTORE) == true) { restore(); } else if(command.equals(ACTION_STATEMENT) == true) { new AccountStatementDialog().showDialog(); } else if(command.equals(ACTION_UNINSTALL) == true) { new UninstallDialog().showDialog(); } else if(command.equals(ACTION_UPDATE) == true) { checkForUpdates(); } else if(command.equals(ACTION_WEB) == true) { openURL(URL); } } } // private // class // MacApplicationHandler // extends ApplicationAdapter // { // @Override // public // void // handlePreferences(ApplicationEvent event) // { // showPreferencesDialog(); // } // // @Override // public // void // handleQuit(ApplicationEvent event) // { // doShutdown(); // } // } private class WindowHandler extends WindowAdapter { @Override public void windowClosed(WindowEvent event) { doShutdown(); } @Override public void windowClosing(WindowEvent event) { doShutdown(); } } ////////////////////////////////////////////////////////////////////////////// // Start of class members. ////////////////////////////////////////////////////////////////////////////// private static final String ACTION_ABOUT = getProperty("option.about"); private static final String ACTION_BACKUP = getProperty("option.backup"); private static final String ACTION_BUDGET_REPORT = getProperty("option.budget_report"); private static final String ACTION_CATEGORY_REPORT = getProperty("option.category_report"); private static final String ACTION_EXPORT_CSV = getProperty("option.export_csv"); private static final String ACTION_EXPORT_QIF = getProperty("option.export_qif"); private static final String ACTION_IMPORT_CSV = getProperty("option.import_csv"); private static final String ACTION_IMPORT_OFX = getProperty("option.import_ofx"); private static final String ACTION_IMPORT_QIF = getProperty("option.import_qif"); private static final String ACTION_PREFERENCES = getProperty("option.preferences"); private static final String ACTION_QUIT = getProperty("option.quit"); private static final String ACTION_RESTORE = getProperty("option.restore"); private static final String ACTION_STATEMENT = getProperty("option.statement"); private static final String ACTION_UNINSTALL = getProperty("option.uninstall"); private static final String ACTION_UPDATE = getProperty("option.update"); private static final String ACTION_WEB = getProperty("option.web"); private static final String URL = getSharedProperty("url"); private static final String APPLICATION_NAME = "JavaMoney EZ"; }