Skip to content

Commit

Permalink
#5127: Upgrade the PopupMenu code a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jan 3, 2021
1 parent feb0af6 commit e27bf33
Showing 1 changed file with 10 additions and 19 deletions.
29 changes: 10 additions & 19 deletions libs/wxutil/menu/PopupMenu.cpp
Expand Up @@ -7,7 +7,7 @@ namespace wxutil
PopupMenu::PopupMenu() :
wxMenu()
{
Connect(wxEVT_MENU, wxCommandEventHandler(PopupMenu::_onItemClick), NULL, this);
Bind(wxEVT_MENU, &PopupMenu::_onItemClick, this);
}

PopupMenu::~PopupMenu()
Expand All @@ -21,7 +21,7 @@ void PopupMenu::addItem(wxMenuItem* widget,
const VisibilityTest& visTest)
{
// Construct a wrapper and pass to specialised method
addItem(ui::IMenuItemPtr(new wxutil::MenuItem(widget, callback, sensTest, visTest)));
addItem(std::make_shared<wxutil::MenuItem>(widget, callback, sensTest, visTest));
}

void PopupMenu::addItem(const ui::IMenuItemPtr& item)
Expand All @@ -37,28 +37,23 @@ void PopupMenu::addSeparator()
AppendSeparator();
}

// Show the menu
void PopupMenu::show(wxWindow* parent)
{
// Iterate through the list of MenuItems, enabling or disabling each widget
// based on its SensitivityTest
for (MenuItemList::iterator i = _menuItems.begin();
i != _menuItems.end();
++i)
for (auto item : _menuItems)
{
ui::IMenuItem& item = *(*i);

bool visible = item.isVisible();
bool visible = item->isVisible();

if (visible)
{
// Visibility check passed
item.getMenuItem()->Enable(item.isSensitive());
item->getMenuItem()->Enable(item->isSensitive());
}
else
{
// Visibility check failed, skip sensitivity check
item.getMenuItem()->Enable(false);
item->getMenuItem()->Enable(false);
}
}

Expand All @@ -70,23 +65,19 @@ void PopupMenu::_onItemClick(wxCommandEvent& ev)
int commandId = ev.GetId();

// Find the menu item with that ID
for (MenuItemList::iterator i = _menuItems.begin();
i != _menuItems.end();
++i)
for (auto item : _menuItems)
{
ui::IMenuItem& item = *(*i);

if (item.getMenuItem()->GetId() == commandId)
if (item->getMenuItem()->GetId() == commandId)
{
item.execute();
item->execute();
break;
}
}
}

void PopupMenu::foreachMenuItem(const std::function<void(const ui::IMenuItemPtr&)>& functor)
{
for (const ui::IMenuItemPtr& item : _menuItems)
for (const auto& item : _menuItems)
{
functor(item);
}
Expand Down

0 comments on commit e27bf33

Please sign in to comment.