#pragma once #include class GAction; class GMenuItem { public: enum Type { Invalid, Action, Separator }; explicit GMenuItem(Type); explicit GMenuItem(Retained&&); ~GMenuItem(); Type type() const { return m_type; } String text() const; const GAction* action() const { return m_action.ptr(); } GAction* action() { return m_action.ptr(); } unsigned identifier() const { return m_identifier; } private: Type m_type { Invalid }; unsigned m_identifier { 0 }; RetainPtr m_action; };