|
|
|
@ -9,6 +9,20 @@ MenuBar::MenuBar() :
|
|
|
|
|
|
|
|
|
|
void MenuBar::input(const sf::Event &event)
|
|
|
|
|
{
|
|
|
|
|
switch (event.type)
|
|
|
|
|
{
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case sf::Event::MouseButtonReleased:
|
|
|
|
|
if (!isUnderMouse(event.mouseButton.x, event.mouseButton.y))
|
|
|
|
|
{
|
|
|
|
|
for (auto& submenu : _submenus)
|
|
|
|
|
submenu->unlock();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget::input(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -19,7 +33,9 @@ void MenuBar::update()
|
|
|
|
|
|
|
|
|
|
void MenuBar::draw(sf::RenderTarget& target, sf::RenderStates states) const
|
|
|
|
|
{
|
|
|
|
|
if (_is_visible)
|
|
|
|
|
target.draw(_bar_rect, states);
|
|
|
|
|
|
|
|
|
|
Widget::draw(target, states);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -51,15 +67,32 @@ bool MenuBar::isUnderMouse(int mouse_x, int mouse_y) const
|
|
|
|
|
|
|
|
|
|
void MenuBar::addSubMenu(std::string name, const std::shared_ptr<MenuDrop>& submenu)
|
|
|
|
|
{
|
|
|
|
|
const auto new_button = std::make_shared<Button>(name);
|
|
|
|
|
const auto new_button = std::make_shared<PushButton>(name);
|
|
|
|
|
|
|
|
|
|
std::size_t current_index = _amount_buttons;
|
|
|
|
|
new_button->setRect(sf::FloatRect(current_index * _button_width, 0, _button_width, _bar_rect.getSize().y));
|
|
|
|
|
new_button->setCallback([submenu=submenu]()
|
|
|
|
|
{
|
|
|
|
|
submenu->trigger();
|
|
|
|
|
submenu->setVisibility(true);
|
|
|
|
|
submenu->lock();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
new_button->setFillColor(sf::Color(171, 141, 189));
|
|
|
|
|
submenu->setPosition({static_cast<float>(current_index * _button_width),
|
|
|
|
|
_bar_rect.getSize().y});
|
|
|
|
|
|
|
|
|
|
new_button->setFillColors(sf::Color(171, 141, 189), sf::Color(48, 27, 57));
|
|
|
|
|
addChild(new_button);
|
|
|
|
|
addChild(submenu);
|
|
|
|
|
|
|
|
|
|
_submenus.emplace_back(submenu);
|
|
|
|
|
|
|
|
|
|
++_amount_buttons;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MenuBar::setVisibility(bool is_visible)
|
|
|
|
|
{
|
|
|
|
|
Widget::setVisibility(is_visible);
|
|
|
|
|
|
|
|
|
|
for (auto& submenu : _submenus)
|
|
|
|
|
submenu->setVisibility(false);
|
|
|
|
|
}
|
|
|
|
|