17 DEFINE_STATIC_LISTENED_EVENT_TYPES(Sml::MouseButtonPressedEvent::getStaticType(),
18 MouseExitedEvent::getStaticType())
23 virtual void onEvent(Sml::Event* event)
override
25 assert(event->isInCategory(Sml::MouseEvent::getStaticCategory()));
27 LOG_LIB_INFO(
"MenuSelectListener triggered");
29 switch (event->getType())
31 case Sml::MouseButtonPressedEvent::getStaticType():
33 m_MenuBar.showMenu(m_Menu);
37 case MouseExitedEvent::getStaticType():
47 LOG_LIB_ERROR(
"Invalid MenuSelectListener event type!");
58 Menu::Menu(
Scene* scene,
const char* title)
59 : m_TitleButton(new
Button{title}), m_ContextMenu(new
ContextMenu(scene, m_TitleButton))
61 m_ContextMenu->setFillAcross(
true);
70 const char* Menu::getTitle()
const
72 return m_TitleButton->getLabel();
75 Button* Menu::getTitleButton()
80 ContextMenu* Menu::getContextMenu()
85 const ColorFill DEFAULT_CONTAINER_FILL = {0xF5'F5'F5'FF};
86 const Background MenuBar::DEFAULT_BACKGROUND = {&DEFAULT_CONTAINER_FILL};
87 const Border MenuBar::DEFAULT_BORDER = Border{Insets{0, 0, 1, 0}, 0xE9'E9'E9'FF};
89 MenuBar::MenuBar(Scene* scene)
93 setBackground(&DEFAULT_BACKGROUND);
94 setBorder(&DEFAULT_BORDER);
100 for (Menu* menu : m_Menus)
106 Menu* MenuBar::addMenu(
const char* title)
111 Menu* menu =
new Menu{getScene(), title};
112 m_Menus.push_back(menu);
113 menu->getContextMenu()->setVisible(
false);
114 menu->getTitleButton()->getEventDispatcher()->attachHandler(MenuSelectListener::EVENT_TYPES,
115 new MenuSelectListener{*
this, menu});
122 getScene()->registerContextMenu(menu->getContextMenu());
127 Menu* MenuBar::getMenu(
const char* title)
131 for (
auto menu : m_Menus)
133 if (strcmp(title, menu->getTitle()) == 0)
142 void MenuBar::showMenu(Menu* menu)
145 menu->getContextMenu()->show();
148 void MenuBar::hideMenu(Menu* menu)
151 menu->getContextMenu()->hide();
void addChild(Component *child)
Convenience method for adding a child to Parent.