deargui-vpl/ref/virtools/Includes/MenuCIDBuilder.h

67 lines
1.8 KiB
C++

#pragma once
#ifdef CKCONTROLS_API
#define CKCONTROLS_CLASS_DECL __declspec(dllexport)
#else
#define CKCONTROLS_CLASS_DECL __declspec(dllimport)
#endif
namespace CKControl //----------------------------------------
{
#define MENUENTRYSTATE_INVALID -1
#define MENUENTRYSTATE_VALID 0
#define MENUENTRYSTATE_SEP 1
typedef BOOL (*MenuEntryValidateFunc) (XObjectPointerArray* oarray,UINT CommandID);
class CKVIPopupMenu;
class CKCONTROLS_CLASS_DECL MenuCIDBuilder;
typedef struct MenuEntry{
XString m_Label;
XBitArray m_Cids;
UINT m_CommandID;
UINT m_State;
MenuCIDBuilder* m_SubMenu;
MenuEntryValidateFunc m_ValidateFunc;
MenuEntry(){
m_CommandID = -1;
m_State = 0;
m_ValidateFunc = NULL;
m_SubMenu = NULL;
}
MenuEntry& operator = (const MenuEntry& e){
m_Label = e.m_Label;
m_Cids = e.m_Cids;
m_CommandID = e.m_CommandID;
m_State = e.m_State;
m_ValidateFunc = e.m_ValidateFunc;
m_SubMenu = e.m_SubMenu;
return *this;
}
} MenuEntry;
class MenuCIDBuilder{
public:
MenuCIDBuilder();
~MenuCIDBuilder();
void BuildCIDs(XBitArray& cids,const XArray<CK_CLASSID>& validCID,BOOL derivedValid,const XArray<CK_CLASSID>& InvalidCID,BOOL derivedInvalid);
void AddEntry(char *label,const XArray<CK_CLASSID>& validCID,BOOL derivedValid,const XArray<CK_CLASSID>& InvalidCID,BOOL derivedInvalid,UINT CommandID,MenuEntryValidateFunc func = NULL);
MenuCIDBuilder* AddSubMenu(char *label,const XArray<CK_CLASSID>& validCID,BOOL derivedValid,const XArray<CK_CLASSID>& InvalidCID,BOOL derivedInvalid,UINT CommandID,MenuEntryValidateFunc func = NULL);
void AddSeparator();
void PrepareMenu(XObjectPointerArray *oarray,CKVIPopupMenu *menu, int submenu = 0);
protected:
XClassArray<MenuEntry> m_MenuEntries;
};
} //namespace CKControl