1 line
3.4 KiB
C
1 line
3.4 KiB
C
/*****
|
|
* mwMenus.c
|
|
*
|
|
* Routines for Mandy Fractal Generator menus.
|
|
*
|
|
*****/
|
|
|
|
#include "mwMenus.h"
|
|
|
|
extern WindowPtr mwWindow;
|
|
extern int width;
|
|
|
|
|
|
MenuHandle appleMenu, fileMenu, editMenu, fractalMenu;
|
|
|
|
enum {
|
|
appleID = 1,
|
|
fileID,
|
|
editID,
|
|
fractalID
|
|
};
|
|
|
|
enum {
|
|
openItem = 1,
|
|
closeItem,
|
|
quitItem = 4
|
|
};
|
|
|
|
|
|
/* SetUpMenus()
|
|
Set up the menus. Normally, weÕd use a resource file, but
|
|
for this example weÕll supply ÒhardwiredÓ strings. */
|
|
void SetUpMenus(void) {
|
|
InsertMenu(appleMenu = NewMenu(appleID, "\p\024"), 0);
|
|
InsertMenu(fileMenu = NewMenu(fileID, "\pFile"), 0);
|
|
InsertMenu(editMenu = NewMenu(editID, "\pEdit"), 0);
|
|
InsertMenu(fractalMenu = NewMenu(fractalID, "\pFractal"), 0);
|
|
DrawMenuBar();
|
|
AddResMenu(appleMenu, 'DRVR');
|
|
AppendMenu(fileMenu, "\pOpen/O;Close/W;(-;Quit/Q");
|
|
AppendMenu(editMenu, "\pUndo/Z;(-;Cut/X;Copy/C;Paste/V;Clear");
|
|
AppendMenu(fractalMenu, "\pTree/T;Mandelbrot/M;Julia/J");
|
|
}
|
|
|
|
/* AdjustMenus()
|
|
Enable or disable the items in the Edit menu if a DA window
|
|
comes up or goes away. Our application doesn't do anything with
|
|
the Edit menu. */
|
|
static void enable (MenuHandle menu, short item, short ok);
|
|
|
|
void AdjustMenus(void) {
|
|
register WindowPeek wp = (WindowPeek) FrontWindow();
|
|
short kind = wp ? wp->windowKind : 0;
|
|
Boolean DA = kind < 0;
|
|
|
|
enable(editMenu, 1, DA);
|
|
enable(editMenu, 3, DA);
|
|
enable(editMenu, 4, DA);
|
|
enable(editMenu, 5, DA);
|
|
enable(editMenu, 6, DA);
|
|
|
|
enable(fileMenu, openItem, !((WindowPeek) mwWindow)->visible);
|
|
enable(fileMenu, closeItem, DA || ((WindowPeek) mwWindow)->visible);
|
|
|
|
// CheckItem(widthMenu, width, true);
|
|
}
|
|
|
|
static
|
|
void enable(MenuHandle menu, short item, short ok) {
|
|
if (ok)
|
|
EnableItem(menu, item);
|
|
else
|
|
DisableItem(menu, item);
|
|
}
|
|
|
|
/* HandleMenu(mSelect)
|
|
Handle the menu selection. mSelect is what MenuSelect() and
|
|
MenuKey() return: the high word is the menu ID, the low word
|
|
is the menu item */
|
|
void HandleMenu (long mSelect) {
|
|
int menuID = HiWord(mSelect);
|
|
int menuItem = LoWord(mSelect);
|
|
Str255 name;
|
|
GrafPtr savePort;
|
|
WindowPeek frontWindow;
|
|
|
|
switch (menuID) {
|
|
case appleID:
|
|
GetPort(&savePort);
|
|
GetItem(appleMenu, menuItem, name);
|
|
OpenDeskAcc(name);
|
|
SetPort(savePort);
|
|
break;
|
|
|
|
case fileID:
|
|
switch (menuItem) {
|
|
case openItem:
|
|
ShowWindow(mwWindow);
|
|
SelectWindow(mwWindow);
|
|
break;
|
|
|
|
case closeItem:
|
|
if ((frontWindow = (WindowPeek) FrontWindow()) == 0L)
|
|
break;
|
|
|
|
if (frontWindow->windowKind < 0)
|
|
CloseDeskAcc(frontWindow->windowKind);
|
|
else if ((frontWindow = (WindowPeek) mwWindow) != NULL)
|
|
HideWindow(mwWindow);
|
|
break;
|
|
|
|
case quitItem:
|
|
ExitToShell();
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case editID:
|
|
if (!SystemEdit(menuItem-1))
|
|
SysBeep(5);
|
|
break;
|
|
|
|
case fractalID:
|
|
CheckItem(fractalMenu, width, false);
|
|
width = menuItem;
|
|
InvalRect(&mwWindow->portRect);
|
|
break;
|
|
}
|
|
}
|
|
|