Added support for context menus on SvgToolButton widgets

This commit is contained in:
Nav
2022-07-17 15:39:24 +01:00
parent 8ed520d0a7
commit b894ebcd2c
2 changed files with 28 additions and 3 deletions

View File

@@ -1,7 +1,5 @@
#include "SvgToolButton.hpp" #include "SvgToolButton.hpp"
#include <QMenu>
namespace Bloom::Widgets namespace Bloom::Widgets
{ {
SvgToolButton::SvgToolButton(QWidget* parent): QToolButton(parent) { SvgToolButton::SvgToolButton(QWidget* parent): QToolButton(parent) {
@@ -17,8 +15,20 @@ namespace Bloom::Widgets
*/ */
auto* menuWidget = qobject_cast<QMenu*>(childEvent->child()); auto* menuWidget = qobject_cast<QMenu*>(childEvent->child());
if (menuWidget != nullptr && menuWidget != this->menu()) { if (menuWidget != nullptr && menuWidget != this->menu()) {
this->setMenu(menuWidget); if (this->contextMenuEnabled) {
this->contextMenu = menuWidget;
this->setContextMenuPolicy(Qt::ContextMenuPolicy::DefaultContextMenu);
} else {
this->setMenu(menuWidget);
}
} }
} }
} }
void SvgToolButton::contextMenuEvent(QContextMenuEvent* event) {
if (this->contextMenu != nullptr) {
this->contextMenu->exec(this->mapToGlobal(QPoint(0, this->height())));
}
}
} }

View File

@@ -3,6 +3,8 @@
#include <QToolButton> #include <QToolButton>
#include <QString> #include <QString>
#include <QChildEvent> #include <QChildEvent>
#include <QContextMenuEvent>
#include <QMenu>
#include "SvgWidget.hpp" #include "SvgWidget.hpp"
@@ -16,6 +18,7 @@ namespace Bloom::Widgets
Q_PROPERTY(int buttonWidth READ getButtonWidth WRITE setButtonWidth DESIGNABLE true) Q_PROPERTY(int buttonWidth READ getButtonWidth WRITE setButtonWidth DESIGNABLE true)
Q_PROPERTY(int buttonHeight READ getButtonHeight WRITE setButtonHeight DESIGNABLE true) Q_PROPERTY(int buttonHeight READ getButtonHeight WRITE setButtonHeight DESIGNABLE true)
Q_PROPERTY(bool contextMenuEnabled READ getContextMenuEnabled WRITE setContextMenuEnabled DESIGNABLE true)
public: public:
explicit SvgToolButton(QWidget* parent); explicit SvgToolButton(QWidget* parent);
@@ -56,6 +59,14 @@ namespace Bloom::Widgets
return this->buttonHeight; return this->buttonHeight;
} }
void setContextMenuEnabled(bool enabled) {
this->contextMenuEnabled = enabled;
}
[[nodiscard]] bool getContextMenuEnabled() const {
return this->contextMenuEnabled;
}
void startSpin() { void startSpin() {
this->svgWidget->startSpin(); this->svgWidget->startSpin();
} }
@@ -65,10 +76,14 @@ namespace Bloom::Widgets
} }
protected: protected:
void childEvent(QChildEvent* childEvent) override; void childEvent(QChildEvent* childEvent) override;
void contextMenuEvent(QContextMenuEvent* event) override;
private: private:
SvgWidget* svgWidget = new SvgWidget(this); SvgWidget* svgWidget = new SvgWidget(this);
int buttonWidth = 0; int buttonWidth = 0;
int buttonHeight = 0; int buttonHeight = 0;
bool contextMenuEnabled = false;
QMenu* contextMenu = nullptr;
}; };
} }