package com.limegroup.gnutella.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import net.roydesign.event.ApplicationEvent; import net.roydesign.mac.MRJAdapter; /** * This class handles Macintosh specific events. The handled events * include the selection of the "About" option in the Mac file menu, * the selection of the "Quit" option from the Mac file menu, and the * dropping of a file on LimeWire on the Mac, which LimeWire would be * expected to handle in some way. */ public class MacEventHandler { private static MacEventHandler INSTANCE; public static synchronized MacEventHandler instance() { if (INSTANCE==null) INSTANCE = new MacEventHandler(); return INSTANCE; } /** Creates a new instance of MacEventHandler */ private MacEventHandler() { MRJAdapter.addAboutListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { handleAbout(); } }); MRJAdapter.addQuitApplicationListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { handleQuit(); } }); MRJAdapter.addOpenDocumentListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { File file = ((ApplicationEvent)evt).getFile(); handleOpenFile(file); } }); MRJAdapter.addReopenApplicationListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { handleReopen(); } }); } /** * Enable preferences. */ public void enablePreferences() { MRJAdapter.setPreferencesEnabled(true); MRJAdapter.addPreferencesListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { handlePreferences(); } }); } /** * This responds to the selection of the about option by displaying the * about window to the user. On OSX, this runs in a new ManagedThread to handle * the possibility that event processing can become blocked if launched * in the calling thread. */ private void handleAbout() { GUIMediator.showAboutWindow(); } /** * This method responds to a quit event by closing the application in * the whichever method the user has configured (closing after completed * file transfers by default). On OSX, this runs in a new ManagedThread to handle * the possibility that event processing can become blocked if launched * in the calling thread. */ private void handleQuit() { GUIMediator.applyWindowSettings(); GUIMediator.close(false); } /** * This method handles a request to open the specified file. */ private void handleOpenFile(File file) { String filename = file.toString(); if (filename.endsWith("limestart")) { Initializer.setStartup(); } else { PackagedMediaFileLauncher.launchFile(filename, false); } } private void handleReopen() { GUIMediator.handleReopen(); } private void handlePreferences() { GUIMediator.instance().setOptionsVisible(true); } }