home *** CD-ROM | disk | FTP | other *** search
- /*
- Menu.c - Concentration menu handlers.
- */
-
- # include "TransSkel.h"
- # include "TransDisplay.h"
- # if ENABLE_DEBUG
- # include "Debug.h"
- # endif
-
- # include "Concentration.h"
-
-
- typedef enum /* File menu items */
- {
- closeWind = 1,
- /* --- */
- quitApp = 3
- };
-
- typedef enum /* Edit menu items */
- {
- undo = 1,
- /* --- */
- cut = 3,
- copy,
- paste,
- clear
- };
-
-
- typedef enum /* Game menu items */
- {
- newGame = 1,
- showAnswer,
- /* --- */
- useLargePieces = 4,
- useSmallPieces,
- /* --- */
- boardSize = 7,
- players,
- /* --- */
- help = 10,
- /* --- */
- showDebug = 12
- };
-
-
- static MenuHandle fileMenu;
- static MenuHandle editMenu;
- static MenuHandle gameMenu;
-
-
- static pascal void
- DoAppleMenu (short item)
- {
- (void) SkelAlert (aboutAlrtNum, SkelDlogFilter (nil, true),
- skelPositionOnParentDevice);
- SkelRmveDlogFilter ();
- }
-
-
- static pascal void
- DoFileMenu (short item)
- {
- switch (item)
- {
- case closeWind:
- SkelClose (FrontWindow ());
- break;
- case quitApp:
- SkelStopEventLoop (); /* tell SkelEventLoop() to quit */
- break;
- }
- }
-
-
- static pascal void
- DoEditMenu (short item)
- {
- (void) SystemEdit (item - 1); /* route to DA if appropriate */
- }
-
-
- static pascal void
- DoGameMenu (short item)
- {
- switch (item)
- {
-
- case newGame:
- NewGameRound ();
- break;
-
- case showAnswer:
- ShowAnswer ();
- break;
-
- case useLargePieces:
- if (gb->sizeType != largePiece)
- {
- InitBoard (largePiece);
- NewGameRound ();
- }
- break;
-
- case useSmallPieces:
- if (gb->sizeType != smallPiece)
- {
- InitBoard (smallPiece);
- NewGameRound ();
- }
- break;
-
- case boardSize:
- BoardDialog ();
- break;
-
- case players:
- PlayerDialog ();
- break;
-
- case help:
- HelpWindow ();
- break;
-
- # if ENABLE_DEBUG
- case showDebug:
- ShowDebugWindow ();
- break;
- # endif
- }
- }
-
-
-
- /*
- * Enable or disable a menu item.
- */
-
- static void
- SetMenuItemState (MenuHandle m, short item, Boolean enable)
- {
- if (enable)
- EnableItem (m, item);
- else
- DisableItem (m, item);
- }
-
-
- /*
- * Adjust menus to match game state. There is always some window
- * (the game window at least), so there's no need to check whether
- * or not the front window is nil.
- *
- * File/Quit and Game/Help are always enabled.
- */
-
- static pascal void
- AdjustMenus (void)
- {
- WindowPtr w;
- Boolean daWind;
- Boolean enable;
-
- w = FrontWindow ();
- daWind = (((WindowPeek) w)->windowKind < 0);
-
- SetMenuItemState (fileMenu, closeWind, IsDWindow (w) || daWind);
-
- SetMenuItemState (editMenu, undo, daWind);
- SetMenuItemState (editMenu, cut, daWind);
- SetMenuItemState (editMenu, copy, daWind);
- SetMenuItemState (editMenu, paste, daWind);
- SetMenuItemState (editMenu, clear, daWind);
-
- enable = (w == gameWind);
- SetMenuItemState (gameMenu, newGame, enable);
- SetMenuItemState (gameMenu, showAnswer, enable);
- SetMenuItemState (gameMenu, useLargePieces, enable);
- SetMenuItemState (gameMenu, useSmallPieces, enable);
- SetMenuItemState (gameMenu, boardSize, enable);
- SetMenuItemState (gameMenu, players, enable);
- SetItemMark (gameMenu, useLargePieces,
- gb->sizeType == largePiece ? checkMark : noMark);
- SetItemMark (gameMenu, useSmallPieces,
- gb->sizeType == smallPiece ? checkMark : noMark);
- }
-
-
- /*
- * Set up menus: Tell TransSkel to make a default Apple menu handler,
- * create handlers for the File, Edit and Game menus.
- */
-
- void
- SetupMenus (void)
- {
-
- SkelApple ("\pAbout Concentration\311", DoAppleMenu);
-
- fileMenu = GetMenu (fileMenuNum);
- SkelMenu (fileMenu, DoFileMenu, nil, false, false);
-
- editMenu = GetMenu (editMenuNum);
- SkelMenu (editMenu, DoEditMenu, nil, false, false);
-
- gameMenu = GetMenu (gameMenuNum);
- # if ENABLE_DEBUG
- AppendMenu (gameMenu, "\p(-;Show Debug Window");
- # endif
- SkelMenu (gameMenu, DoGameMenu, nil, false, false);
-
- DrawMenuBar ();
-
- SkelSetMenuHook (AdjustMenus);
- }
-