Allow adding submenu actions with icons.

This commit is contained in:
John Preston 2021-12-09 21:55:35 +04:00
parent 7efa1f9b2b
commit 6ac846adbb
4 changed files with 30 additions and 8 deletions

View file

@ -68,10 +68,12 @@ not_null<QAction*> Menu::addAction(
not_null<QAction*> Menu::addAction( not_null<QAction*> Menu::addAction(
const QString &text, const QString &text,
std::unique_ptr<QMenu> submenu) { std::unique_ptr<QMenu> submenu,
const style::icon *icon,
const style::icon *iconOver) {
const auto action = new QAction(text, this); const auto action = new QAction(text, this);
action->setMenu(submenu.release()); action->setMenu(submenu.release());
return addAction(action, nullptr, nullptr); return addAction(action, icon, iconOver);
} }
not_null<QAction*> Menu::addAction( not_null<QAction*> Menu::addAction(

View file

@ -40,7 +40,9 @@ public:
const style::icon *iconOver = nullptr); const style::icon *iconOver = nullptr);
not_null<QAction*> addAction( not_null<QAction*> addAction(
const QString &text, const QString &text,
std::unique_ptr<QMenu> submenu); std::unique_ptr<QMenu> submenu,
const style::icon *icon = nullptr,
const style::icon *iconOver = nullptr);
not_null<QAction*> addSeparator(); not_null<QAction*> addSeparator();
void clearActions(); void clearActions();
void finishAnimating(); void finishAnimating();

View file

@ -357,14 +357,24 @@ not_null<QAction*> PopupMenu::addAction(
return _menu->addAction(std::move(widget)); return _menu->addAction(std::move(widget));
} }
not_null<QAction*> PopupMenu::addAction(const QString &text, Fn<void()> callback, const style::icon *icon, const style::icon *iconOver) { not_null<QAction*> PopupMenu::addAction(
const QString &text,
Fn<void()> callback,
const style::icon *icon,
const style::icon *iconOver) {
return _menu->addAction(text, std::move(callback), icon, iconOver); return _menu->addAction(text, std::move(callback), icon, iconOver);
} }
not_null<QAction*> PopupMenu::addAction( not_null<QAction*> PopupMenu::addAction(
const QString &text, const QString &text,
std::unique_ptr<PopupMenu> submenu) { std::unique_ptr<PopupMenu> submenu,
const auto action = _menu->addAction(text, std::make_unique<QMenu>()); const style::icon *icon,
const style::icon *iconOver) {
const auto action = _menu->addAction(
text,
std::make_unique<QMenu>(),
icon,
iconOver);
const auto saved = _submenus.emplace( const auto saved = _submenus.emplace(
action, action,
base::unique_qptr<PopupMenu>(submenu.release()) base::unique_qptr<PopupMenu>(submenu.release())

View file

@ -29,8 +29,16 @@ public:
} }
not_null<QAction*> addAction(base::unique_qptr<Menu::ItemBase> widget); not_null<QAction*> addAction(base::unique_qptr<Menu::ItemBase> widget);
not_null<QAction*> addAction(const QString &text, Fn<void()> callback, const style::icon *icon = nullptr, const style::icon *iconOver = nullptr); not_null<QAction*> addAction(
not_null<QAction*> addAction(const QString &text, std::unique_ptr<PopupMenu> submenu); const QString &text,
Fn<void()> callback,
const style::icon *icon = nullptr,
const style::icon *iconOver = nullptr);
not_null<QAction*> addAction(
const QString &text,
std::unique_ptr<PopupMenu> submenu,
const style::icon *icon = nullptr,
const style::icon *iconOver = nullptr);
not_null<QAction*> addSeparator(); not_null<QAction*> addSeparator();
void clearActions(); void clearActions();