Source/MenuHandler.cp

/*
    File:       MenuHandler.cp
 
    Contains:   xxx put contents here xxx
 
    Version:    xxx put version here xxx
 
    Copyright:  © 1999 by Apple Computer, Inc., all rights reserved.
 
    File Ownership:
 
        DRI:                xxx put dri here xxx
 
        Other Contact:      xxx put other contact here xxx
 
        Technology:         xxx put technology here xxx
 
    Writers:
 
        (BWS)   Brent Schorsch
 
    Change History (most recent first):
 
       <SP1>      7/1/99    BWS     first checked in
*/
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Includes
 
#include <Devices.h>
#include <Processes.h>
#include <ToolUtils.h>
#include <Windows.h>
 
#include <stdio.h>
#include <string.h>
 
#include "AboutBox.h"
#include "AppShellResources.h"
#include "EventHandler.h"
#include "MemoryHandler.h"
#include "MenuHandler.h"
#include "ShellWindow.h"
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Definitions
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Constants
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Types
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Structs
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Variables
 
static Boolean gMenuHandlerInited = false;
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Private Functions
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    Public Variables
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    MenuInit
 
void
MenuInit(void)
{
Handle      theMenuBar;
    
    //¥ Load the menu bar
    theMenuBar = GetNewMBar(kMBAR_Main);
    if (theMenuBar == nil)
        ExitToShell();
 
    //¥ Install the menu bar
    SetMenuBar(theMenuBar);
 
    //¥ Add Apple Menu items
    AppendResMenu(GetMenuHandle(kMENU_Apple), 'DRVR');
    DisposeHandleZ(&theMenuBar);
 
    DrawMenuBar();
 
    gMenuHandlerInited = true;
}
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    MenuPrepForSelect
 
void
MenuPrepForSelect(void)
{
    DrawMenuBar();
}
 
//¥ ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ    MenuDoChoice
 
Boolean
MenuDispatch(SInt32 inMenu, const short inModifiers)
{
SInt16      theMenu;
SInt16      theItem;
UInt32      menuCommand;
MenuHandle  theMenuHandle;
Boolean     handled = true;
WindowPtr   whichWindow;
ShellWindow *myWindow = nil;
 
    if (false == gMenuHandlerInited)
        return (false);
        
    theMenu = HiWord(inMenu);
    theItem = LoWord(inMenu);
    theMenuHandle = GetMenuHandle(theMenu);
 
    //¥ Small hackish thing because the menu command stuff doesn't
    //¥ bother mentioning that you got a desk accessory.
    if ((kMENU_Apple == theMenu) && (theItem > 2))
    {
    Str255  daName;
    GrafPtr oldPort;
    
        GetPort(&oldPort);
        GetMenuItemText(theMenuHandle, theItem, daName);
        OpenDeskAcc(daName);
        SetPort(oldPort);
    }
    else
    {
        GetMenuItemCommandID(theMenuHandle, theItem, &menuCommand);
    
        whichWindow = FrontWindow();
        if (userKind == GetWindowKind(whichWindow))
            myWindow = (ShellWindow *) GetWRefCon(whichWindow);
    
        if (nil != myWindow)
            handled = (myWindow->Menu(menuCommand, inModifiers));
        
        if (!handled)
            switch (menuCommand)
            {
                case kMenuCMD_AboutBox:
                    AboutBox();
                    break;
                    
                case kMenuCMD_Quit:
                    gDone = true;
                    break;
    
                default:
                    handled = false;
                    break;
            }
    }
 
    HiliteMenu(0);
    DrawMenuBar();
 
    return (handled);
}