From 497452250a2d9638cb5e04fa7ef4f5dc764b034e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 13 Jan 2021 18:04:05 +0300 Subject: [PATCH] Added ability to set index to menu item. --- ui/widgets/menu/menu.cpp | 5 +++-- ui/widgets/menu/menu_action.cpp | 3 +-- ui/widgets/menu/menu_action.h | 1 - ui/widgets/menu/menu_item_base.cpp | 9 ++++++--- ui/widgets/menu/menu_item_base.h | 5 +++-- ui/widgets/menu/menu_separator.cpp | 3 +-- ui/widgets/menu/menu_separator.h | 1 - 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ui/widgets/menu/menu.cpp b/ui/widgets/menu/menu.cpp index 85095a4..5922274 100644 --- a/ui/widgets/menu/menu.cpp +++ b/ui/widgets/menu/menu.cpp @@ -86,7 +86,6 @@ not_null Menu::addAction( auto item = base::make_unique_q( this, _st, - 0, std::move(action), icon, iconOver ? iconOver : icon, @@ -105,6 +104,8 @@ not_null Menu::addAction(base::unique_qptr widget) { widget->moveToLeft(0, top); widget->show(); + widget->setIndex(_actionWidgets.size()); + widget->selects( ) | rpl::start_with_next([=](const CallbackData &data) { if (!data.selected) { @@ -156,7 +157,7 @@ not_null Menu::addAction(base::unique_qptr widget) { not_null Menu::addSeparator() { const auto separator = new QAction(this); separator->setSeparator(true); - auto item = base::make_unique_q(this, _st, 0, separator); + auto item = base::make_unique_q(this, _st, separator); return addAction(std::move(item)); } diff --git a/ui/widgets/menu/menu_action.cpp b/ui/widgets/menu/menu_action.cpp index 3422c55..8ca196e 100644 --- a/ui/widgets/menu/menu_action.cpp +++ b/ui/widgets/menu/menu_action.cpp @@ -49,12 +49,11 @@ TextParseOptions MenuTextOptions = { Action::Action( not_null parent, const style::Menu &st, - int index, not_null action, const style::icon *icon, const style::icon *iconOver, bool hasSubmenu) -: ItemBase(parent, st, index) +: ItemBase(parent, st) , _action(action) , _st(st) , _icon(icon) diff --git a/ui/widgets/menu/menu_action.h b/ui/widgets/menu/menu_action.h index 8714ac7..37d3d41 100644 --- a/ui/widgets/menu/menu_action.h +++ b/ui/widgets/menu/menu_action.h @@ -19,7 +19,6 @@ public: Action( not_null parent, const style::Menu &st, - int index, not_null action, const style::icon *icon, const style::icon *iconOver, diff --git a/ui/widgets/menu/menu_item_base.cpp b/ui/widgets/menu/menu_item_base.cpp index 3f7ca00..a798898 100644 --- a/ui/widgets/menu/menu_item_base.cpp +++ b/ui/widgets/menu/menu_item_base.cpp @@ -10,9 +10,8 @@ namespace Ui::Menu { ItemBase::ItemBase( not_null parent, - const style::Menu &st, int index) -: RippleButton(parent, st.ripple) -, _index(index) { + const style::Menu &st) +: RippleButton(parent, st.ripple) { init(); } @@ -48,6 +47,10 @@ int ItemBase::index() const { return _index; } +void ItemBase::setIndex(int index) { + _index = index; +} + void ItemBase::setClicked(TriggeredSource source) { if (isEnabled()) { _lastTriggeredSource = source; diff --git a/ui/widgets/menu/menu_item_base.h b/ui/widgets/menu/menu_item_base.h index efcc7da..9844bf6 100644 --- a/ui/widgets/menu/menu_item_base.h +++ b/ui/widgets/menu/menu_item_base.h @@ -15,7 +15,7 @@ namespace Ui::Menu { class ItemBase : public RippleButton { public: - ItemBase(not_null parent, const style::Menu &st, int index); + ItemBase(not_null parent, const style::Menu &st); TriggeredSource lastTriggeredSource() const; @@ -26,6 +26,7 @@ public: bool isSelected() const; int index() const; + void setIndex(int index); void setClicked(TriggeredSource source = TriggeredSource::Mouse); @@ -48,7 +49,7 @@ protected: virtual int contentHeight() const = 0; private: - const int _index; + int _index = -1; bool _hasSubmenu = false; diff --git a/ui/widgets/menu/menu_separator.cpp b/ui/widgets/menu/menu_separator.cpp index 8d2079b..cce5e45 100644 --- a/ui/widgets/menu/menu_separator.cpp +++ b/ui/widgets/menu/menu_separator.cpp @@ -13,9 +13,8 @@ namespace Ui::Menu { Separator::Separator( not_null parent, const style::Menu &st, - int index, not_null action) -: ItemBase(parent, st, index) +: ItemBase(parent, st) , _lineWidth(st.separatorWidth) , _padding(st.separatorPadding) , _fg(st.separatorFg) diff --git a/ui/widgets/menu/menu_separator.h b/ui/widgets/menu/menu_separator.h index 04ac54a..c6a3a76 100644 --- a/ui/widgets/menu/menu_separator.h +++ b/ui/widgets/menu/menu_separator.h @@ -18,7 +18,6 @@ public: Separator( not_null parent, const style::Menu &st, - int index, not_null action); QAction *action() const override;