home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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;
- }
-
-