130 lines
2.3 KiB
C++
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
|
|
|