ISXMr/libs/isxdk/include/ISUI/LGUIContextMenu.h

170 lines
3.8 KiB
C++

#pragma once
enum ContextMenuType
{
CMT_ITEM=1,
CMT_SUBMENU=2,
CMT_SEPARATOR=3,
};
class LGUIContextMenuNode
{
public:
LGUIContextMenuNode(class LGUIContextMenu *p_pParent, ContextMenuType p_Type, unsigned int p_ID=0);
LGUIContextMenuNode(class LGUIContextMenu *p_pParent, LGUIContextMenuNode *pInsertAfter, ContextMenuType p_Type, unsigned int ID=0);
virtual ~LGUIContextMenuNode();
RECT r;
virtual size_t Render()=0;
virtual void OnLMouseUp()=0;
class LGUIContextMenu *pMenu;
LGUIContextMenuNode *pPrev;
LGUIContextMenuNode *pNext;
ContextMenuType Type;
unsigned int ID;
};
class LGUIContextMenuItem : public LGUIContextMenuNode
{
public:
LGUIContextMenuItem(class LGUIContextMenu *p_pParent, char *p_Text, unsigned int p_ID=0);
~LGUIContextMenuItem();
size_t Render();
void OnLMouseUp();
char *Text;
bool bChecked;
};
class LGUIContextMenuSubmenu : public LGUIContextMenuNode
{
public:
LGUIContextMenuSubmenu(class LGUIContextMenu *p_pParent, char *Text, class CContextMenuHandler *p_pHandler, unsigned int p_ID=0);
~LGUIContextMenuSubmenu();
size_t Render();
void OnLMouseUp();
char *Text;
class CContextMenuHandler *pHandler;
};
class LGUIContextMenuSeparator : public LGUIContextMenuNode
{
public:
LGUIContextMenuSeparator(class LGUIContextMenu *p_pParent);
~LGUIContextMenuSeparator();
size_t Render();
void OnLMouseUp()
{
}
};
class LGUIContextMenu :
public LGUIFrame
{
public:
LGUIContextMenu(const char *p_Factory, LGUIElement *p_pParent, const char *p_Name);
~LGUIContextMenu(void);
bool IsTypeOf(char *TestFactory);
// class LSTypeDefinition *GetLSType();
bool FromXML(class XMLNode *pXML, class XMLNode *pTemplate=0);
bool Create(class CContextMenuHandler *p_pMenuHandler, class XMLNode *pTemplate=0);
void Render();
bool OnLMouseUp(POINT2I &pt);
bool OnLMouseDown(POINT2I &pt);
bool OnMouseMove(POINT2I &pt);
unsigned int AddItem(char *Text, unsigned int ID=0);
unsigned int AddSubmenu(char *Text, CContextMenuHandler *pHandler, unsigned int ID=0);
unsigned int AddSeparator();
bool GetItemCheck(unsigned int ID, bool &bChecked);
void SetItemCheck(unsigned int ID, bool bChecked);
void OnKeyboardExit(LGUIElement *pNewFocus);
void OnLMouseDownOther(LGUIElement *pOther);
// -- From XML --
LGUIFont *pFont;
unsigned int HighlightColor;
LGUITexture *pItemTexture;
LGUITexture *pSubmenuTexture;
LGUITexture *pSeparatorTexture;
LGUITexture *pHighlightItemTexture;
LGUITexture *pHighlightSubmenuTexture;
LGUITexture *pItemCheckTexture;
// --------------------------------
unsigned int ParentMenuID;
unsigned int ChildMenuID;
unsigned int NextID;
LGUIContextMenuNode *pItems;
unsigned int nItems;
LGUIContextMenuNode *pMouseOver;
class CContextMenuHandler *pMenuHandler;
};
class CContextMenuHandler
{
public:
LGUI_API CContextMenuHandler()
{
pMenu=0;
pTemplate=0;
pChildMenu=0;
pParentMenu=0;
}
LGUI_API virtual ~CContextMenuHandler()
{
DestroyMenu();
}
inline bool IsMenu()
{
return pMenu!=0;
}
inline void SetTemplate(class XMLNode *pNewTemplate)
{
pTemplate=pNewTemplate;
}
bool Create(CContextMenuHandler *p_pParentMenu, unsigned int ParentItemID, int X, int Y);
LGUI_API bool Create(int X, int Y);
LGUI_API unsigned int AddItem(char *Text, unsigned int ID=0);
LGUI_API unsigned int AddSubMenu(char *Text, CContextMenuHandler *pHandler, unsigned int ID=0);
LGUI_API unsigned int AddSeparator();
LGUI_API bool GetItemCheck(unsigned int ID, bool &bChecked);
LGUI_API void SetItemCheck(unsigned int ID, bool bChecked);
LGUI_API virtual void OnCreate(unsigned int ParentItemID) {}
virtual void OnClick(unsigned int ItemID)=0;
LGUI_API void DestroyMenu(bool bParentsToo=false);
LGUI_API virtual void OnMenuDestroyed()
{
pMenu=0;
}
private:
class XMLNode *pTemplate;
class LGUIContextMenu *pMenu;
class CContextMenuHandler *pChildMenu;
class CContextMenuHandler *pParentMenu;
};