New SvgToolButton widget for tool buttons that use the custom SvgWidget for icons

This commit is contained in:
Nav
2021-08-22 20:42:55 +01:00
parent 9af1bb6557
commit 109c045536
2 changed files with 96 additions and 0 deletions

View File

@@ -129,6 +129,7 @@ add_executable(Bloom
src/Insight/UserInterfaces/InsightWindow/AboutWindow.cpp
src/Insight/UserInterfaces/InsightWindow/Widgets/RotatableLabel.cpp
src/Insight/UserInterfaces/InsightWindow/Widgets/SvgWidget.cpp
src/Insight/UserInterfaces/InsightWindow/Widgets/SvgToolButton.hpp
src/Insight/UserInterfaces/InsightWindow/Widgets/ExpandingWidget.hpp
src/Insight/UserInterfaces/InsightWindow/Widgets/ExpandingHeightScrollAreaWidget.hpp

View File

@@ -0,0 +1,95 @@
#pragma once
#include <QToolButton>
#include <QString>
#include "SvgWidget.hpp"
#include "src/Logger/Logger.hpp"
namespace Bloom::Widgets
{
class SvgToolButton: public QToolButton
{
Q_OBJECT
Q_PROPERTY(QString svgFilePath READ getSvgFilePath WRITE setSvgFilePath DESIGNABLE true)
Q_PROPERTY(QString disabledSvgFilePath READ getDisabledSvgFilePath WRITE setDisabledSvgFilePath DESIGNABLE true)
Q_PROPERTY(int buttonWidth READ getButtonWidth WRITE setButtonWidth DESIGNABLE true)
Q_PROPERTY(int buttonHeight READ getButtonHeight WRITE setButtonHeight DESIGNABLE true)
private:
SvgWidget* svgWidget = new SvgWidget(this);
SvgWidget* disabledSvgWidget = nullptr;
int buttonWidth = 0;
int buttonHeight = 0;
protected:
void changeEvent(QEvent* event) override {
if (event->type() == QEvent::EnabledChange && this->disabledSvgWidget != nullptr) {
auto enabled = this->isEnabled();
this->svgWidget->setVisible(enabled);
this->disabledSvgWidget->setVisible(!enabled);
}
};
public:
explicit SvgToolButton(QWidget* parent): QToolButton(parent) {
this->setButtonWidth(10);
this->setButtonHeight(10);
};
void setSvgFilePath(const QString& svgFilePath) {
this->svgWidget->setSvgFilePath(svgFilePath);
}
[[nodiscard]] QString getSvgFilePath() const {
return this->svgWidget->getSvgFilePath();
}
void setDisabledSvgFilePath(const QString& disabledSvgFilePath) {
if (this->disabledSvgWidget == nullptr) {
this->disabledSvgWidget = new SvgWidget(this);
this->disabledSvgWidget->setContainerWidth(this->buttonWidth);
this->disabledSvgWidget->setContainerHeight(this->buttonHeight);
}
this->disabledSvgWidget->setSvgFilePath(disabledSvgFilePath);
}
[[nodiscard]] QString getDisabledSvgFilePath() const {
if (this->disabledSvgWidget != nullptr) {
return this->disabledSvgWidget->getSvgFilePath();
}
return QString();
}
void setButtonWidth(int buttonWidth) {
this->buttonWidth = buttonWidth;
this->setFixedWidth(buttonWidth);
this->svgWidget->setContainerWidth(buttonWidth);
if (this->disabledSvgWidget != nullptr) {
this->disabledSvgWidget->setContainerWidth(buttonWidth);
}
}
[[nodiscard]] int getButtonWidth() const {
return this->buttonWidth;
}
void setButtonHeight(int buttonHeight) {
this->buttonHeight = buttonHeight;
this->setFixedHeight(buttonHeight);
this->svgWidget->setContainerHeight(buttonHeight);
if (this->disabledSvgWidget != nullptr) {
this->disabledSvgWidget->setContainerHeight(buttonHeight);
}
}
[[nodiscard]] int getButtonHeight() const {
return this->buttonHeight;
}
};
}