/* * File: OSXAdapter.java * * Description:A single class with clear, static entry points for hooking * existing preferences, about, quit functionality from an existing Java app * into handlers for the Mac OS X application menu. Useful for developers * looking to support multiple platforms with a single codebase, and support * Mac OS X features with minimal impact. * * This sample is designed for Java 1.4.1 and later on Mac OS X. * * Author: mdrance * * Copyright: (C) Copyright 2003 Apple Computer, Inc. All rights reserved. * * Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple * Computer, Inc. ("Apple") in consideration of your agreement to the following * terms, and your use, installation, modification or redistribution of this * Apple software constitutes acceptance of these terms. If you do not agree * with these terms, please do not use, install, modify or redistribute this * Apple software. * * In consideration of your agreement to abide by the following terms, and * subject to these terms, Apple grants you a personal, non-exclusive license, * under Apple's copyrights in this original Apple software (the "Apple * Software"), to use, reproduce, modify and redistribute the Apple Software, * with or without modifications, in source and/or binary forms; provided that * if you redistribute the Apple Software in its entirety and without * modifications, you must retain this notice and the following text and * disclaimers in all such redistributions of the Apple Software. Neither the * name, trademarks, service marks or logos of Apple Computer, Inc. may be used * to endorse or promote products derived from the Apple Software without * specific prior written permission from Apple. Except as expressly stated in * this notice, no other rights or licenses, express or implied, are granted by * Apple herein, including but not limited to any patent rights that may be * infringed by your derivative works or by other works in which the Apple * Software may be incorporated. * * The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN * COMBINATION WITH YOUR PRODUCTS. * * IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION * AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER * THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR * OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Change History (most recent first): 04092003 mdrance added comments * */ package com.myjavaworld.jftp; import com.apple.eawt.ApplicationAdapter; import com.apple.eawt.ApplicationEvent; public class OSXAdapterOld extends ApplicationAdapter { // pseudo-singleton model; no point in making multiple instances // of the EAWT application or our adapter private static OSXAdapterOld theAdapter; private static com.apple.eawt.Application theApplication; // reference to the app where the existing quit, about, prefs code is private JFTPApplication mainApp; private OSXAdapterOld(JFTPApplication inApp) { mainApp = inApp; } // implemented handler methods. These are basically hooks into existing // functionality from the main app, as if it came over from another // platform. @Override public void handleAbout(ApplicationEvent ae) { if (mainApp != null) { ae.setHandled(true); mainApp.showAboutDialog(); } else { throw new IllegalStateException( "handleAbout: MyApp instance detached from listener"); } } @Override public void handlePreferences(ApplicationEvent ae) { if (mainApp != null) { mainApp.showPreferencesDialog(); ae.setHandled(true); } else { throw new IllegalStateException( "handlePreferences: MyApp instance detached from listener"); } } @Override public void handleQuit(ApplicationEvent ae) { if (mainApp != null) { /* * / You MUST setHandled(false) if you want to delay or cancel the * quit. / This is important for cross-platform development -- have * a universal quit / routine that chooses whether or not to quit, * so the functionality is identical / on all platforms. This * example simply cancels the AppleEvent-based quit and / defers to * that universal method. */ ae.setHandled(false); mainApp.quit(); } else { throw new IllegalStateException( "handleQuit: MyApp instance detached from listener"); } } // The main entry-point for this functionality. This is the only method // that needs to be called at runtime, and it can easily be done using // reflection (see MyApp.java) public static void registerMacOSXApplication(JFTPApplication inApp) { if (theApplication == null) { theApplication = new com.apple.eawt.Application(); } if (theAdapter == null) { theAdapter = new OSXAdapterOld(inApp); } theApplication.addApplicationListener(theAdapter); } // Another static entry point for EAWT functionality. Enables the // "Preferences..." menu item in the application menu. public static void enablePrefs(boolean enabled) { if (theApplication == null) { theApplication = new com.apple.eawt.Application(); } theApplication.setEnabledPreferencesMenu(enabled); } }