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.
Source/MenuDispatch.c
/* |
MenuDispatch.c |
Handle menu commands. |
© 1995 Apple Computer, Inc. |
*/ |
#include <QuickDraw.h> |
#include <Windows.h> |
#include <Menus.h> |
#include <Files.h> |
#include <StandardFile.h> |
#include <Menus.h> |
#include <Devices.h> |
#include <Events.h> |
#include "EventLoop.h" |
#include "MenuDispatch.h" |
#include "QD3DViewer.h" |
void BuildMenuBars(void); |
void ChooseApple(short itemNumber); |
void ChooseFile(short item); |
void ChooseEdit(short item); |
void MenuDispatch(short menuNumber,short itemNumber); |
void RunDeskAccesory(short item); |
void AdjustMenuItems(void); |
extern void ChooseView(short item); |
extern void ChooseTest(short item); |
extern WindowPtr MainView; |
int gWindowCount; |
void BuildMenuBars(void) |
{ |
SetMenuBar(GetNewMBar(128)); |
AppendResMenu(GetMenuHandle(APPLE_MENU),'DRVR'); |
DrawMenuBar(); |
gWindowCount = 0; |
} |
void RunDeskAccesory(short item) |
{ |
GrafPtr savePort; |
short daRefNum; |
Str255 daName; |
GetPort(&savePort); |
GetMenuItemText(GetMenuHandle(APPLE_MENU), item, daName); |
daRefNum = OpenDeskAcc(daName); |
SetPort(savePort); |
} |
void ChooseApple(short itemNumber) |
{ |
short item; |
if(itemNumber == cmdAbout) { |
item = Alert(ABOUT_BOX_ID,nil); |
} else { |
RunDeskAccesory(itemNumber); |
} |
} |
void ChooseFile(short item) |
{ |
switch(item) |
{ |
case cmdNew: |
{ |
Rect defaultBounds = {50, 50, 300, 300}; |
TQ3ViewerObject aViewer; |
TVCDemoDataHdl demoData; |
MainView = GetNewCWindow(128, nil, (WindowPtr)-1L); |
MoveWindow(MainView, 10 + (gWindowCount * 18), 40 + (gWindowCount * 18), true); |
gWindowCount++; |
ShowWindow(MainView); |
aViewer = Q3ViewerNew((CGrafPtr)MainView, &MainView->portRect, kQ3ViewerDefault); |
demoData = (TVCDemoDataHdl)NewHandle(sizeof(TVCDemoData)); |
(*demoData)->containerStyle = kContainerFull; |
(*demoData)->viewer1 = aViewer; |
SetWRefCon(MainView, (long)demoData); |
break; |
} |
case cmdOpen: |
{ |
short refNum; |
OSErr anErr = noErr; |
short numTypes; |
OSType typeList[2]; |
StandardFileReply sfReply; |
TVCDemoDataHdl demoData; |
numTypes = 2; |
typeList[0] = '3DMF'; |
typeList[1] = 'TEXT'; |
StandardGetFile(nil, numTypes, typeList, &sfReply); |
if (sfReply.sfGood) |
{ |
anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum); |
if (anErr == noErr) |
{ |
TQ3ViewerObject aViewer; |
ChooseFile(cmdNew); |
demoData = (TVCDemoDataHdl)GetWRefCon(MainView); |
aViewer = (*demoData)->viewer1; |
Q3ViewerUseFile(aViewer, refNum); |
anErr = FSClose(refNum); |
} |
} |
break; |
} |
case cmdClose: |
{ |
if (MainView == FrontWindow()) |
{ |
TQ3ViewerObject aViewer; |
TVCDemoDataHdl demoData; |
demoData = (TVCDemoDataHdl)GetWRefCon(MainView); |
aViewer = (*demoData)->viewer1; |
Q3ViewerDispose(aViewer); |
if ((*demoData)->containerStyle == kContainerFourView) |
{ |
Q3ViewerDispose((*demoData)->viewer2); |
Q3ViewerDispose((*demoData)->viewer3); |
Q3ViewerDispose((*demoData)->viewer4); |
} |
DisposeHandle((Handle)demoData); |
DisposeWindow(MainView); |
MainView = FrontWindow(); |
} |
break; |
} |
case cmdSave: |
case cmdSaveAs: |
{ |
short refNum; |
OSErr anErr = noErr; |
StandardFileReply sfReply; |
if (!MainView) |
break; |
StandardPutFile("\pSave model as:", "\pUntitled", &sfReply); |
if (sfReply.sfGood) |
{ |
anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum); |
if (anErr != noErr) |
{ |
anErr = FSpCreate(&sfReply.sfFile, 'QD3A', '3DMF', sfReply.sfScript); |
if (anErr == noErr) |
anErr = FSpOpenDF(&sfReply.sfFile, fsCurPerm, &refNum); |
} |
if (anErr == noErr) |
{ |
TVCDemoDataHdl demoData; |
TQ3ViewerObject aViewer; |
demoData = (TVCDemoDataHdl)GetWRefCon(MainView); |
aViewer = (*demoData)->viewer1; |
Q3ViewerWriteFile(aViewer, refNum); |
anErr = FSClose(refNum); |
} |
} |
break; |
} |
case cmdQuit: |
ChooseFile(cmdClose); |
Done = true; |
break; |
default: |
break; |
} |
} |
void ChooseEdit(short item) |
{ |
if (MainView == FrontWindow()) |
{ |
TQ3ViewerObject aViewer; |
TVCDemoDataHdl demoData; |
demoData = (TVCDemoDataHdl)GetWRefCon(MainView); |
aViewer = (*demoData)->viewer1; |
switch(item) |
{ |
case cmdCut: |
Q3ViewerCut(aViewer); |
break; |
case cmdCopy: |
Q3ViewerCopy(aViewer); |
break; |
case cmdPaste: |
Q3ViewerPaste(aViewer); |
break; |
case cmdClear: |
Q3ViewerClear(aViewer); |
break; |
default: |
break; |
} |
} |
} |
void MenuDispatch(short menuNumber,short itemNumber) |
{ |
if(menuNumber != 0) |
switch(menuNumber) { |
case APPLE_MENU : ChooseApple(itemNumber); |
break; |
case FILE_MENU : ChooseFile(itemNumber); |
break; |
case EDIT_MENU : ChooseEdit(itemNumber); |
break; |
case VIEW_MENU : ChooseView(itemNumber); |
break; |
case TEST_MENU : ChooseTest(itemNumber); |
break; |
default : break; |
} |
} |
void AdjustMenuItems(void) |
{ |
MenuHandle menu; |
unsigned long viewerFlags; |
Boolean checked; |
menu = GetMenuHandle(VIEW_MENU); |
if (MainView && MainView == FrontWindow()) |
{ |
TVCDemoDataHdl demoData; |
TQ3ViewerObject aViewer; |
demoData = (TVCDemoDataHdl)GetWRefCon(MainView); |
aViewer = (*demoData)->viewer1; |
viewerFlags = Q3ViewerGetFlags(aViewer); |
checked = (viewerFlags & kQ3ViewerShowBadge); |
CheckItem(menu, cmdBadge, checked); |
checked = (viewerFlags & kQ3ViewerActive); |
CheckItem(menu, cmdViewer, checked); |
checked = (viewerFlags & kQ3ViewerControllerVisible); |
CheckItem(menu, cmdController, checked); |
checked = (viewerFlags & kQ3ViewerDraggingOff); |
CheckItem(menu, cmdDraggingOff, checked); |
checked = (viewerFlags & kQ3ViewerButtonCamera); |
CheckItem(menu, cmdBtnCamera, checked); |
checked = (viewerFlags & kQ3ViewerButtonTruck); |
CheckItem(menu, cmdBtnTruck, checked); |
checked = (viewerFlags & kQ3ViewerButtonOrbit); |
CheckItem(menu, cmdBtnOrbit, checked); |
checked = (viewerFlags & kQ3ViewerDrawFrame); |
CheckItem(menu, cmdFrame, checked); |
if ((viewerFlags & kQ3ViewerButtonZoom) > 0) |
CheckItem(menu, cmdBtnZoom, 1); |
else |
CheckItem(menu, cmdBtnZoom, 0); |
if ((viewerFlags & kQ3ViewerButtonDolly) > 0) |
CheckItem(menu, cmdBtnDolly, 1); |
else |
CheckItem(menu, cmdBtnDolly, 0); |
menu = GetMenuHandle(TEST_MENU); |
CheckItem(menu, cmdNormalMemory, true); |
} |
} |
/* EOF */ |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14