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/Viewer_Menu.c
/* |
* Viewer_Menu.c |
* |
* QuickDraw 3D 1.6 Sample |
* Robert Dierkes |
* |
* 12/22/98 RDD Created. |
*/ |
/*------------------*/ |
/* Include Files */ |
/*------------------*/ |
#include "QD3D.h" |
#include "QD3DViewer.h" |
#if defined(OS_MACINTOSH) && OS_MACINTOSH |
#include <Devices.h> |
#include <Menus.h> |
#include <Dialogs.h> |
#include <Resources.h> |
#include <ToolUtils.h> |
#endif |
#include "Viewer_Error.h" |
#include "Viewer_Main.h" |
#include "Viewer_Window.h" |
#include "Viewer_System.h" |
#include "Viewer_Menu.h" |
/*------------------*/ |
/* Constants */ |
/*------------------*/ |
#define kMenuBarRsrcID 128 |
#define kAboutDialogRsrcID 128 |
/*----------------------*/ |
/* Extern Declarations */ |
/*----------------------*/ |
extern TQ3Boolean gTimeToQuit; |
/*----------------------*/ |
/* Global Declarations */ |
/*----------------------*/ |
Handle ghMenuBar = NULL; |
/*----------------------*/ |
/* Local Prototypes */ |
/*----------------------*/ |
static |
TQ3Boolean Menu_Apple( |
short menuID, |
short itemNumber); |
static |
TQ3Boolean Menu_File( |
short itemNumber); |
static |
TQ3Boolean Menu_Edit( |
short itemNumber); |
static |
TQ3Boolean Menu_AboutBox ( |
void); |
/* |
* Menu_Initialize |
*/ |
TQ3Boolean Menu_Initialize( |
void) |
{ |
TQ3Boolean goodMenus; |
goodMenus = kQ3True; |
/* Initialize MenuBar */ |
ghMenuBar = GetNewMBar (kMenuBarRsrcID); |
if (ghMenuBar != NULL) { |
SetMenuBar(ghMenuBar); |
AppendResMenu(GetMenuHandle(mApple), (ResType) 'DRVR'); |
DrawMenuBar(); |
} |
else { |
ERROR_DEBUG_STR ("Menu_Initialize: Menu_Initialize: Couldn't find menu bar."); |
ghMenuBar = NULL; |
goodMenus = kQ3False; |
} |
return (goodMenus); |
} |
/* |
* Menu_Command |
*/ |
OSErr Menu_Command( |
long menuResult) |
{ |
TQ3Boolean isOK = kQ3True; |
short menuID, |
itemNumber; |
if (menuResult == 0) { |
return kQ3False; |
} |
menuID = HiWord (menuResult); |
itemNumber = LoWord (menuResult); |
switch (menuID) { |
case mApple: |
isOK = Menu_Apple(menuID, itemNumber); |
break; |
case mFile: |
isOK = Menu_File(itemNumber); |
break; |
case mEdit: |
isOK = Menu_Edit(itemNumber); |
break; |
default: |
System_Beep(); |
isOK = kQ3False; |
break; |
} /* switch (menuID) */ |
HiliteMenu (0); |
return (isOK == kQ3True) ? noErr : paramErr;/* TODO */ |
} |
#pragma mark - |
/* |
* Menu_Apple |
*/ |
static |
TQ3Boolean Menu_Apple( |
short menuID, |
short itemNumber) |
{ |
TQ3Boolean isOK = kQ3True; |
switch (itemNumber) |
{ |
case iAbout: |
isOK = Menu_AboutBox(); |
break; |
default: |
{ |
MenuHandle hMenu; |
Str255 deskAccName; |
GrafPtr oldPort; |
hMenu = GetMenuHandle(menuID); |
if (hMenu != NULL) { |
GetPort (&oldPort); |
GetMenuItemText (hMenu, itemNumber, deskAccName); |
(void) OpenDeskAcc (deskAccName); |
SetPort (oldPort); |
} |
else { |
isOK = kQ3False; |
} |
} |
break; |
} |
return isOK; |
} |
/* |
* Menu_File |
*/ |
static |
TQ3Boolean Menu_File( |
short itemNumber) |
{ |
TQ3Boolean isOK = kQ3True; |
switch (itemNumber) { |
case iNew: |
case iOpen: |
break; |
case iClose: |
{ |
WindowPtr pWindow = NULL; |
if ((pWindow = FrontWindow()) != NULL) { |
isOK = (Window_CloseViewer(&pWindow) == noErr) |
? kQ3True |
: kQ3False; |
} else { |
System_Beep(); |
} |
} |
break; |
case iSave: |
case iSaveAs: |
isOK = kQ3False; |
break; |
case iQuit: |
gTimeToQuit = kQ3True; |
break; |
default: |
System_Beep(); |
isOK = kQ3False; |
break; |
} |
return isOK; |
} |
/* |
* Menu_Edit |
*/ |
static |
TQ3Boolean Menu_Edit( |
short itemNumber) |
{ |
TQ3Boolean isOK = kQ3True; |
OSErr theErr = noErr; |
WindowPtr pWindow = NULL; |
TQ3ViewerObject viewer = NULL; |
MenuHandle hMenu; |
if (SystemEdit ((short)(itemNumber - 1)) == true) { |
return kQ3True; |
} |
if ((pWindow = FrontWindow()) == NULL) { |
return kQ3True; |
} |
if ((viewer = Window_GetViewer(pWindow)) == NULL) { |
return kQ3False; |
} |
switch (itemNumber) { |
case iUndo: |
theErr = Q3ViewerUndo(viewer); |
if (theErr != noErr) { |
ERROR_DEBUG_STR("Menu_Edit: Q3ViewerUndo failed"); |
} |
break; |
case iCut: |
theErr = Q3ViewerCut(viewer); |
if (theErr != noErr) { |
ERROR_DEBUG_STR("Menu_Edit: Q3ViewerCut failed"); |
} |
break; |
case iCopy: |
theErr = Q3ViewerCopy(viewer); |
if (theErr != noErr) { |
ERROR_DEBUG_STR("Menu_Edit: Q3ViewerCopy failed"); |
} |
break; |
case iPaste: |
theErr = Q3ViewerPaste(viewer); |
if (theErr != noErr) { |
ERROR_DEBUG_STR("Menu_Edit: Q3ViewerPaste failed"); |
} |
break; |
case iClear: |
theErr = Q3ViewerClear(viewer); |
if (theErr != noErr) { |
ERROR_DEBUG_STR("Menu_Edit: Q3ViewerClear failed"); |
} |
break; |
default: |
System_Beep(); |
break; |
} |
hMenu = GetMenuHandle(mEdit); |
if (theErr == noErr) { |
/* Change Undo menu item */ |
#define kMaxStrLen (sizeof(Str255) - 1) |
unsigned long length = kMaxStrLen;/* Pass in maxiumum size of undoStr[] */ |
Str255 undoStr; |
if (Q3ViewerGetUndoString(viewer, (char *) &undoStr[1], &length)) { |
if ((length > 0) && |
(length <= kMaxStrLen-1)) { |
/* Enable Undo item and set it's text */ |
if (hMenu != NULL) { |
undoStr[0] = length; |
SetMenuItemText(hMenu, iUndo, undoStr); |
EnableItem(hMenu, iUndo); |
} |
} |
} |
} |
else { |
DisableItem(hMenu, iUndo); |
} |
return isOK; |
} |
#pragma mark - |
/* |
* Menu_AboutBox |
*/ |
static |
TQ3Boolean Menu_AboutBox( |
void) |
{ |
TQ3Boolean isOK = kQ3True; |
DialogPtr theDialog; |
short itemHit; |
theDialog = GetNewDialog(kAboutDialogRsrcID, NULL, kWindowOnTop); |
if (theDialog == NULL) |
return kQ3False; |
do { |
ModalDialog (NULL, &itemHit); |
} |
while (itemHit != ok); |
DisposeDialog (theDialog); |
return isOK; |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14