Added support for context menus on SvgToolButton widgets
This commit is contained in:
@@ -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())));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user