Freecell68k/gamemenu.c

131 lines
2.4 KiB
C

#include "gamemenu.h"
#include "common.h"
#include "gamewind.h"
#include "gamestate.h"
#include "gameintf.h"
#define MBAR_ID 128
enum {
appleID=128,
fileID,
editID
};
enum {
apple_aboutID=1
};
enum {
file_newID=1,
file_openID,
file_restartID,
file_quitID=5
};
enum {
edit_undoID=1,
edit_cutID=3,
edit_copyID,
edit_pasteID,
edit_clearID
};
static void DoAppleMenu(short item);
static void DoFileMenu(short item);
static void DoEditMenu(short item);
void MenuCreate(void) {
Handle mHandle;
mHandle = GetNewMBar(MBAR_ID);
SetMenuBar(mHandle);
DrawMenuBar();
mHandle = (Handle) GetMHandle(appleID);
AddResMenu((MenuHandle) mHandle, 'DRVR');
}
void MenuEvent(long menuitem) {
short menuID = HIWORD(menuitem);
short itemID = LOWORD(menuitem);
switch(menuID) {
case appleID: DoAppleMenu(itemID); break;
case fileID: DoFileMenu(itemID); break;
case editID: DoEditMenu(itemID); break;
}
}
void MenuEditState(Boolean active) {
MenuHandle theMenu = GetMHandle(editID);
if(active) {
EnableItem(theMenu, edit_cutID);
EnableItem(theMenu, edit_copyID);
EnableItem(theMenu, edit_pasteID);
EnableItem(theMenu, edit_clearID);
} else {
DisableItem(theMenu, edit_cutID);
DisableItem(theMenu, edit_copyID);
DisableItem(theMenu, edit_pasteID);
DisableItem(theMenu, edit_clearID);
}
}
void MenuUndoState(Boolean active) {
MenuHandle theMenu = GetMHandle(editID);
if(active) {
EnableItem(theMenu, edit_undoID);
} else {
DisableItem(theMenu, edit_undoID);
}
}
void DoAppleMenu(short item) {
GrafPtr *oldPort;
MenuHandle theMenu = GetMHandle(appleID);
if(item > apple_aboutID) {
StringPtr name = (StringPtr) NewPtr(sizeof(Str255));
GetPort(&oldPort);
GetItem(theMenu, item, name);
OpenDeskAcc(name);
SetPort(oldPort);
DisposPtr(name);
} else {
DlogAbout();
}
}
void DoFileMenu(short item) {
MenuHandle theMenu = GetMHandle(fileID);
switch(item) {
case file_newID:
GameNewGame(&gstate.fcGame, GAME_RANDOMSEED);
break;
case file_openID: {
ushort openSeed = DlogOpenGame();
if(openSeed != -1) {
GameNewGame(&gstate.fcGame, openSeed);
}
} break;
case file_restartID:
GameNewGame(&gstate.fcGame, GAME_RANDOMSEED);
break;
case file_quitID:
gstate.running = false;
break;
}
}
void DoEditMenu(short item) {
switch(item) {
case edit_undoID:
FreecellUndoMove(&gstate.fcGame);
GameDrawMove(&gstate.fcGame, gstate.fcGame.lastMove[0],
gstate.fcGame.lastMove[1]);
break;
}
}