67 lines
1.8 KiB
C++
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
|