#ifndef MENUITEM_H #define MENUITEM_H #ifdef _WIN32 #pragma once #endif #include "VGUI.h" #include "Button.h" #include "Menu.h" namespace vgui { class IBorder; class TextImage; class Menu; class Image; class MenuItem : public Button { DECLARE_CLASS_SIMPLE(MenuItem, Button); public: MenuItem(Menu* parent, const char* panelName, const char* text, Menu* cascadeMenu = NULL, bool checkable = false); MenuItem(Menu* parent, const char* panelName, const wchar_t* wszText, Menu* cascadeMenu = NULL, bool checkable = false); ~MenuItem(); virtual void Paint(); virtual void FireActionSignal(); virtual bool CanBeDefaultButton(void); void OnCursorEntered(); void OnCursorExited(); void CloseCascadeMenu(); MESSAGE_FUNC(OnKillFocus, "MenuClose"); bool HasMenu(); void SetTextImageSize(int wide, int tall); void GetTextImageSize(int& wide, int& tall); void GetArrowImageSize(int& wide, int& tall); void GetCheckImageSize(int& wide, int& tall); Menu* GetMenu(); virtual void PerformLayout(); void OnCursorMoved(int x, int y); MESSAGE_FUNC(ArmItem, "ArmItem"); MESSAGE_FUNC(DisarmItem, "DisarmItem"); bool IsItemArmed(); void OpenCascadeMenu(); bool IsCheckable(); bool IsChecked(); void SetChecked(bool state); KeyValues* GetUserData(); void SetUserData(const KeyValues* kv); int GetActiveItem() { if (m_pCascadeMenu) { return m_pCascadeMenu->GetActiveItem(); } else { return 0; } } Menu* GetParentMenu(); void SetCurrentKeyBinding(char const* keyName); virtual void GetContentSize(int& cw, int& ch); protected: void OnKeyCodeReleased(KeyCode code); void OnMenuClose(); MESSAGE_FUNC(OnKeyModeSet, "KeyModeSet"); virtual void Init(void); virtual void ApplySchemeSettings(IScheme* pScheme); virtual IBorder* GetBorder(bool depressed, bool armed, bool selected, bool keyfocus); private: enum { CHECK_INSET = 6 }; Menu* m_pCascadeMenu; bool m_bCheckable; bool m_bChecked; TextImage* m_pCascadeArrow; Image* m_pCheck; TextImage* m_pBlankCheck; TextImage* m_pCurrentKeyBinding; KeyValues* m_pUserData; }; } #endif