Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
TestHIView.cp
/* |
File: TestHIView.cp |
Contains: Minimal application to test HIViews. |
Version: 1.0.1 |
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. |
Copyright © 2002 Apple Computer, Inc., All Rights Reserved |
*/ |
#include <Carbon/Carbon.h> |
#include "HICustomLeftRightSwitch.h" |
// Common stuff to all samples |
void InitToolbox(void); |
void InitMenuBar(void); |
pascal OSErr HandlePref(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon); |
pascal OSErr HandleOapp(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon); |
pascal OSErr HandleOdoc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon); |
pascal OSErr HandlePdoc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon); |
void InstallAppleEventHandlers(void); |
pascal OSStatus CommandProcess(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData); |
void InstallApplicationCarbonEventHandlers(void); |
void DoCloseWindow(WindowRef theWind); |
void RecursiveCloseWindow(WindowRef theWind); |
void CloseAllWindows(); |
void InitApplication(void); |
void TermApplication(void); |
// End of common stuff |
void DoAboutBox(void); |
void DoPreferences(void); |
void DoNewWindow(void); |
int main(void) |
{ |
InitToolbox(); |
InitApplication(); |
RunApplicationEventLoop(); |
TermApplication(); |
return 0; |
} |
//------------------------------- Initializations ------------------------------ |
void InitToolbox(void) |
{ |
InitCursor(); |
} |
void InitApplication(void) |
{ |
long response; |
OSErr err; |
// Can we run this particular demo application? |
err = Gestalt(gestaltSystemVersion, &response); |
Boolean ok = ((err == noErr) && (response >= 0x00001020)); |
if (!ok) |
{ |
StandardAlert(kAlertStopAlert, "\pMac OS X 10.2 (minimum) is required for this application", "\p", NULL, NULL); |
ExitToShell(); |
} |
InstallAppleEventHandlers(); |
InstallApplicationCarbonEventHandlers(); |
InitMenuBar(); |
DoNewWindow(); |
} |
void InitMenuBar(void) |
{ |
// Getting our menu bar |
Handle aHand = GetNewMBar(128); |
SetMenuBar(aHand); |
// Enabling Preferences menu item |
EnableMenuCommand(NULL, kHICommandPreferences); |
// Adding some menu item commands |
MenuHandle menu = GetMenuHandle(128); |
SetMenuItemCommandID(menu, 1, kHICommandNew); |
SetMenuItemCommandID(menu, 2, kHICommandClose); |
SetMenuItemCommandID(GetMenuHandle(1), 1, kHICommandAbout); |
// Adding a standard Window menu |
CreateStandardWindowMenu(0, &menu); |
InsertMenu(menu, 0); |
DrawMenuBar(); |
DisposeHandle(aHand); |
} |
//------------------------------- Apple Events --------------------------------- |
void InstallAppleEventHandlers(void) |
{ |
OSErr err; |
err = AEInstallEventHandler(kCoreEventClass, kAEShowPreferences, NewAEEventHandlerUPP(HandlePref), 0, false); |
if (err) DebugStr("\pAEInstallEventHandler failed for kAEOpenApplication"); |
err = AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, NewAEEventHandlerUPP(HandleOapp), 0, false); |
if (err) DebugStr("\pAEInstallEventHandler failed for kAEOpenApplication"); |
err = AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, NewAEEventHandlerUPP(HandleOdoc), 0, false); |
if (err) DebugStr("\pAEInstallEventHandler failed for kAEOpenDocuments"); |
err = AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, NewAEEventHandlerUPP(HandlePdoc), 0, false); |
if (err) DebugStr("\pAEInstallEventHandler failed for kAEPrintDocuments"); |
// Note: Since RunApplicationEventLoop installs a Quit AE Handler, we no longer have to do it here. |
} |
pascal OSErr HandlePref(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon) |
{ |
#pragma unused (theAppleEvent, reply, handlerRefcon) |
return errAEEventNotHandled; |
} |
pascal OSErr HandleOapp(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon) |
{ |
#pragma unused (theAppleEvent, reply, handlerRefcon) |
return noErr; |
} |
pascal OSErr HandleOdoc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon) |
{ |
#pragma unused (theAppleEvent, reply, handlerRefcon) |
return errAEEventNotHandled; |
} |
pascal OSErr HandlePdoc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon) |
{ |
#pragma unused (theAppleEvent, reply, handlerRefcon) |
return errAEEventNotHandled; |
} |
//------------------------------- Carbon Events -------------------------------- |
void InstallApplicationCarbonEventHandlers(void) |
{ |
EventTypeSpec eventType = {kEventClassCommand, kEventCommandProcess}; |
InstallEventHandler(GetApplicationEventTarget(), NewEventHandlerUPP(CommandProcess), 1, &eventType, NULL, NULL); |
} |
pascal OSStatus CommandProcess(EventHandlerCallRef nextHandler, EventRef theEvent, void* userData) |
{ |
#pragma unused (nextHandler, userData) |
HICommand aCommand; |
OSStatus status = noErr; |
GetEventParameter(theEvent, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &aCommand); |
switch (aCommand.commandID) |
{ |
case kHICommandAbout: |
DoAboutBox(); |
break; |
case kHICommandPreferences: |
DoPreferences(); |
break; |
case kHICommandNew: |
DoNewWindow(); |
break; |
case kHICommandClose: |
DoCloseWindow(FrontNonFloatingWindow()); |
break; |
default: |
status = eventNotHandledErr; |
break; |
} |
return status; |
} |
//------------------------------- Terminating ---------------------------------- |
void TermApplication(void) |
{ |
CloseAllWindows(); |
} |
void CloseAllWindows() |
{ |
WindowRef theWind = FrontWindow(); |
if (theWind) |
{ |
RecursiveCloseWindow(theWind); |
} |
} |
void RecursiveCloseWindow(WindowRef theWind) |
{ |
WindowRef nextWind = GetNextWindow(theWind); |
if (nextWind) RecursiveCloseWindow(nextWind); |
DoCloseWindow(theWind); |
} |
void DoCloseWindow(WindowRef theWind) |
{ |
EventRef theEvent; |
CreateEvent(NULL, kEventClassWindow, kEventWindowClose, 0, 0, &theEvent); |
SetEventParameter(theEvent, kEventParamDirectObject, typeWindowRef, sizeof(WindowRef), &theWind); |
SendEventToEventTarget(theEvent, GetWindowEventTarget(theWind)); |
} |
//------------------------------- End of common stuff -------------------------- |
void DoAboutBox(void) |
{ |
StandardAlert(kAlertNoteAlert, "\pHICustomLeftRightSwitch 1.1 by DTS, Apple © 2002", "\p", NULL, NULL); |
} |
void DoPreferences(void) |
{ |
StandardAlert(kAlertNoteAlert, "\pNo Preferences yet!", "\p", NULL, NULL); |
} |
void DoNewWindow(void) |
{ |
WindowRef theWind; |
Rect bounds = {50, 50, 550, 550}; |
OSStatus theStatus = CreateNewWindow( |
kDocumentWindowClass, |
kWindowStandardDocumentAttributes | kWindowStandardHandlerAttribute | kWindowCompositingAttribute, |
&bounds, &theWind); |
if ((theStatus != noErr) || (theWind == NULL)) {DebugStr("\pCreateNewWindow failed!"); return;} |
SetWTitle(theWind, "\pHICustomLeftRightSwitch"); |
HIViewRef theSwitch; |
HIRect frame = { {10.0, 30.0}, {300.0, 18.0} }; |
theStatus = HICreateCustomLeftRightSwitch(theWind, &frame, CFSTR("Left"), CFSTR("Right"), true, &theSwitch); |
// give the button a command so that it does something when pressed |
SetControlCommandID(theSwitch, kHICommandAbout); |
// views are initially invisible, so make it visible |
ShowControl(theSwitch); |
ShowWindow(theWind); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-02-06