/* GanttProject is an opensource project management tool. Copyright (C) 2011 GanttProject team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject; import java.io.IOException; import javax.swing.SwingUtilities; import net.sourceforge.ganttproject.action.edit.SettingsDialogAction; import net.sourceforge.ganttproject.document.Document; import net.sourceforge.ganttproject.document.Document.DocumentException; import net.sourceforge.ganttproject.gui.about.AboutDialog2; import com.apple.eawt.ApplicationAdapter; import com.apple.eawt.ApplicationEvent; public class OSXAdapter extends ApplicationAdapter { private static OSXAdapter osxAdapter; private static com.apple.eawt.Application theApp; private GanttProject myProj; private OSXAdapter(GanttProject myProj) { this.myProj = myProj; System.setProperty("apple.awt.graphics.EnableQ2DX", "true"); System.setProperty("apple.laf.useScreenMenuBar", "true"); System.setProperty("com.apple.mrj.application.apple.menu.about.name", "GanttProject"); } /** * This method handles the case when a file in the Finder is dropped onto the * app, or GanttProject is selected via the open-with menu option. The event * argument contains the path of the file in either case. */ @Override public void handleOpenFile(final ApplicationEvent event) { SwingUtilities.invokeLater(new Runnable() { public void run() { if (myProj.getProjectUIFacade().ensureProjectSaved(myProj)) { String file = event.getFilename(); Document myDocument = myProj.getDocumentManager().getDocument(file); try { myProj.getProjectUIFacade().openProject(myDocument, myProj.getProject()); } catch (DocumentException e) { myProj.getUIFacade().showErrorDialog(e); } catch (IOException e) { myProj.getUIFacade().showErrorDialog(e); } } } }); event.setHandled(true); } @Override public void handlePreferences(ApplicationEvent e) { new SettingsDialogAction(myProj, myProj.getUIFacade()).actionPerformed(null); e.setHandled(true); } /** Handle the Mac OSX "about" menu option. */ @Override public void handleAbout(ApplicationEvent event) { AboutDialog2 abd = new AboutDialog2(myProj.getUIFacade()); abd.show(); // Indicate we've handled this event ourselves event.setHandled(true); } /** * Handles the quit menu option (defaults to command-q) the same way choosing * Project->Quit does. */ @Override public void handleQuit(ApplicationEvent event) { /* * Not a typo. Must set handled to false else the app will still quit even * if we say "cancel" on confirmation. */ event.setHandled(myProj.quitApplication()); } public static void registerMacOSXApplication(GanttProject myProj) { if (theApp == null) { theApp = new com.apple.eawt.Application(); } if (osxAdapter == null) { osxAdapter = new OSXAdapter(myProj); } theApp.addApplicationListener(osxAdapter); } }