Microsoft-3D-Movie-Maker/kauai/SRC/MENU.H

130 lines
2.3 KiB
C++

/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/* Copyright (c) Microsoft Corporation.
Licensed under the MIT License. */
/***************************************************************************
Author: ShonK
Project: Kauai
Reviewed:
Copyright (c) Microsoft Corporation
Menu bar management.
***************************************************************************/
#ifndef MENU_H
#define MENU_H
// Menu Bar class
typedef class MUB *PMUB;
#define MUB_PAR BASE
#define kclsMUB 'MUB'
class MUB : public MUB_PAR
{
RTCLASS_DEC
MARKMEM
private:
#ifdef MAC
// System Menu
typedef MenuInfo SMU;
// System Menu Bar
struct SMB
{
ushort cmid;
ushort rgmid[1];
};
// Menu Item
struct MNI
{
long cid;
long lw0;
};
// Menu
struct MNU
{
long mid;
SMU **hnsmu;
PGL pglmni;
};
//menu list
struct MLST
{
long imnu;
long imniBase;
long cmni;
long cid;
bool fSeparator;
};
HN _hnmbar;
PGL _pglmnu;
PGL _pglmlst; //menu lists
bool _FInsertMni(long imnu, long imni, long cid, long lw0, PSTN pstn);
void _DeleteMni(long imnu, long imni);
bool _FFindMlst(long imnu, long imni, MLST *pmlst = pvNil,
long *pimlst = pvNil);
bool _FGetCmdFromCode(long lwCode, CMD *pcmd);
void _Free(void);
bool _FFetchRes(ulong ridMenuBar);
#endif //MAC
#ifdef WIN
//menu list
struct MLST
{
HMENU hmenu;
long imniBase;
long wcidList;
long cid;
bool fSeparator;
PGL pgllw;
};
HMENU _hmenu; //the menu bar
long _cmnu; //number of menus on the menu bar
PGL _pglmlst; //menu lists
bool _FInitLists(void);
bool _FFindMlst(long wcid, MLST *pmlst, long *pimlst = pvNil);
bool _FGetCmdForWcid(long wcid, PCMD pcmd);
#endif //WIN
protected:
MUB(void) {}
public:
~MUB(void);
static PMUB PmubNew(ulong ridMenuBar);
virtual void Set(void);
virtual void Clean(void);
#ifdef MAC
virtual bool FDoClick(EVT *pevt);
virtual bool FDoKey(EVT *pevt);
#endif //MAC
#ifdef WIN
virtual void EnqueueWcid(long wcid);
#endif //WIN
virtual bool FAddListCid(long cid, long lw0, PSTN pstn);
virtual bool FRemoveListCid(long cid, long lw0, PSTN pstn = pvNil);
virtual bool FChangeListCid(long cid, long lwOld, PSTN pstnOld,
long lwNew, PSTN pstnNew);
virtual bool FRemoveAllListCid(long cid);
};
extern PMUB vpmubCur;
#endif //!MENU_H