#ifndef _Menu_H_
#define _Menu_H_
class IMenuItem : public IObject {
public:
virtual int GetID() = 0;
virtual const ZString& GetString() = 0;
virtual void SetString(const ZString& str) = 0;
virtual void SetColors(
const Color& colorBack,
const Color& colorText,
const Color& colorSelectedBack,
const Color& colorSelectedText
) = 0;
virtual Color GetColor() = 0;
virtual void SetEnabled(bool bEnabled) = 0;
virtual bool IsEnabled() = 0;
virtual void SetAccelerator(char ch) = 0;
};
class ISubmenuEventSink : public IObject {
public:
static TRef<ISubmenuEventSink> CreateDelegate(ISubmenuEventSink* psink);
virtual TRef<IPopup> GetSubMenu(IMenuItem* pitem) = 0;
};
class IMenu;
class IMenuCommandSink : public IObject {
public:
static TRef<IMenuCommandSink> CreateDelegate(IMenuCommandSink* psink);
virtual void OnMenuCommand(IMenuItem* pitem) = 0;
virtual void OnMenuSelect(IMenuItem* pitem) {};
virtual void OnMenuClose(IMenu* pmenu) {};
};
class IMenu : public IPopup {
public:
virtual TRef<IMenuItem> AddMenuItem(
int id,
const ZString& str,
char chAccelerator = 0,
ISubmenuEventSink* psubmenuEventSink = NULL
) = 0;
virtual IMenuItem* FindMenuItem(int id) = 0;
virtual void SetMenuCommandSink(IMenuCommandSink* psink) = 0;
};
TRef<IMenu> CreateMenu(
Modeler* pmodeler,
IEngineFont* pfont,
IMenuCommandSink* psink
);
#endif