# HG changeset patch # User Teemu Piippo # Date 1655927996 -10800 # Node ID c6f5de03dc0f76ee03d2b137eb9e5c4041e8f8a3 # Parent 5188f8a74a5cefa78a1f01486956af2398d3f75e Move color button into widgets lib diff -r 5188f8a74a5c -r c6f5de03dc0f CMakeLists.txt --- a/CMakeLists.txt Wed Jun 22 22:50:37 2022 +0300 +++ b/CMakeLists.txt Wed Jun 22 22:59:56 2022 +0300 @@ -51,7 +51,6 @@ src/types/boundingbox.cpp src/ui/circletooloptionswidget.cpp src/ui/objecteditor.cpp - src/widgets/colorbutton.cpp src/widgets/colorindexinput.cpp src/widgets/colorselectdialog.cpp ) @@ -91,7 +90,6 @@ src/types/boundingbox.h src/ui/circletooloptionswidget.h src/ui/objecteditor.h - src/widgets/colorbutton.h src/widgets/colorindexinput.h src/widgets/colorselectdialog.h ) diff -r 5188f8a74a5c -r c6f5de03dc0f src/settingseditor/settingseditor.cpp --- a/src/settingseditor/settingseditor.cpp Wed Jun 22 22:50:37 2022 +0300 +++ b/src/settingseditor/settingseditor.cpp Wed Jun 22 22:59:56 2022 +0300 @@ -40,9 +40,9 @@ void SettingsEditor::handleAccepted() { setSetting(this->ui.language->currentData().toString()); - setSetting(this->ui.mainColorButton->selectedColor()); - setSetting(this->ui.backgroundColorButton->selectedColor()); - setSetting(this->ui.selectedColorButton->selectedColor()); + setSetting(this->ui.mainColorButton->color()); + setSetting(this->ui.backgroundColorButton->color()); + setSetting(this->ui.selectedColorButton->color()); setSetting(static_cast(this->ui.lineThickness->value())); setSetting(this->ui.lineAntiAliasing->isChecked()); setSetting(this->ui.logOpenGLDebugMessages->isChecked()); @@ -78,9 +78,9 @@ void SettingsEditor::setDefaults() { this->setCurrentLanguage(setting()); - this->ui.mainColorButton->setSelectedColor(setting()); - this->ui.backgroundColorButton->setSelectedColor(setting()); - this->ui.selectedColorButton->setSelectedColor(setting()); + this->ui.mainColorButton->setColor(setting()); + this->ui.backgroundColorButton->setColor(setting()); + this->ui.selectedColorButton->setColor(setting()); this->ui.lineThickness->setValue(double_cast(setting())); this->ui.lineAntiAliasing->setChecked(setting()); this->ui.logOpenGLDebugMessages->setChecked(setting()); diff -r 5188f8a74a5c -r c6f5de03dc0f src/widgets/colorbutton.cpp --- a/src/widgets/colorbutton.cpp Wed Jun 22 22:50:37 2022 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -#include -#include "colorbutton.h" - -ColorButton::ColorButton(const QColor& color, QWidget* parent) : - ColorButton{parent} -{ - this->setSelectedColor(color); -} - -ColorButton::ColorButton(QWidget* parent) : - QPushButton{parent} -{ - connect(this, &QPushButton::clicked, [&]() - { - const QColor color = QColorDialog::getColor(this->storedSelectedColor, this->parentWidget()); - if (color.isValid()) - { - this->setSelectedColor(color); - } - }); -} - -QColor ColorButton::selectedColor() const -{ - return this->storedSelectedColor; -} - -void ColorButton::setSelectedColor(const QColor& newSelectedColor) -{ - this->storedSelectedColor = newSelectedColor; - this->setStyleSheet(QString{"background-color: %1"}.arg(newSelectedColor.name())); - this->setText(newSelectedColor.name()); -} - diff -r 5188f8a74a5c -r c6f5de03dc0f src/widgets/colorbutton.h --- a/src/widgets/colorbutton.h Wed Jun 22 22:50:37 2022 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -#pragma once -#include - -/** - * @brief A button that can be used to select a color - */ -class ColorButton : public QPushButton -{ -public: - ColorButton(const QColor& color = {}, QWidget* parent = nullptr); - ColorButton(QWidget* parent = nullptr); - QColor selectedColor() const; - void setSelectedColor(const QColor& newSelectedColor); -private: - QColor storedSelectedColor; -}; diff -r 5188f8a74a5c -r c6f5de03dc0f widgets/CMakeLists.txt --- a/widgets/CMakeLists.txt Wed Jun 22 22:50:37 2022 +0300 +++ b/widgets/CMakeLists.txt Wed Jun 22 22:59:56 2022 +0300 @@ -6,6 +6,8 @@ ) add_library(ldforgewidgets SHARED + colorbutton.cpp + colorbutton.h designerplugins.cpp designerplugins.h doublespinbox.cpp diff -r 5188f8a74a5c -r c6f5de03dc0f widgets/colorbutton.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/colorbutton.cpp Wed Jun 22 22:59:56 2022 +0300 @@ -0,0 +1,36 @@ +#include +#include "colorbutton.h" + +ColorButton::ColorButton(const QColor& color, QWidget* parent) : + ColorButton{parent} +{ + this->setColor(color); +} + +ColorButton::ColorButton(QWidget* parent) : + QPushButton{parent} +{ + connect(this, &QPushButton::clicked, [&](){ + const QColor color = QColorDialog::getColor(this->storedSelectedColor, this->parentWidget()); + if (color.isValid()) { + this->setColor(color); + } + }); + this->setColor(Qt::black); +} + +const QColor& ColorButton::color() const +{ + return this->storedSelectedColor; +} + +void ColorButton::setColor(const QColor& color) +{ + if (this->storedSelectedColor != color) { + this->storedSelectedColor = color; + this->setStyleSheet(QString{"background-color: %1"}.arg(color.name())); + this->setText(color.name()); + Q_EMIT this->colorChanged(this->storedSelectedColor); + } +} + diff -r 5188f8a74a5c -r c6f5de03dc0f widgets/colorbutton.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widgets/colorbutton.h Wed Jun 22 22:59:56 2022 +0300 @@ -0,0 +1,19 @@ +#pragma once +#include + +/** + * @brief A button that can be used to select a color + */ +class ColorButton : public QPushButton +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) +public: + ColorButton(const QColor& color = {}, QWidget* parent = nullptr); + ColorButton(QWidget* parent = nullptr); + const QColor& color() const; + Q_SLOT void setColor(const QColor& color); + Q_SIGNAL void colorChanged(const QColor& color); +private: + QColor storedSelectedColor; +}; diff -r 5188f8a74a5c -r c6f5de03dc0f widgets/designerplugins.cpp --- a/widgets/designerplugins.cpp Wed Jun 22 22:50:37 2022 +0300 +++ b/widgets/designerplugins.cpp Wed Jun 22 22:59:56 2022 +0300 @@ -1,12 +1,14 @@ #include "designerplugins.h" #include "vec3editor.h" #include "matrixeditor.h" +#include "colorbutton.h" LDForgeWidgetCollection::LDForgeWidgetCollection(QObject* parent) : QObject{parent} { this->interfaces.append(new Vec3EditorPlugin{this}); this->interfaces.append(new MatrixEditorPlugin{this}); + this->interfaces.append(new ColorButtonPlugin{this}); } QList LDForgeWidgetCollection::customWidgets() const @@ -93,3 +95,44 @@ { return new MatrixEditor{parent}; } + + +QString ColorButtonPlugin::name() const +{ + return "ColorButton"; +} + +QString ColorButtonPlugin::group() const +{ + return "LDForge"; +} + +QString ColorButtonPlugin::toolTip() const +{ + return ""; +} + +QString ColorButtonPlugin::whatsThis() const +{ + return ""; +} + +QString ColorButtonPlugin::includeFile() const +{ + return "colorbutton.h"; +} + +QIcon ColorButtonPlugin::icon() const +{ + return {}; +} + +bool ColorButtonPlugin::isContainer() const +{ + return false; +} + +QWidget* ColorButtonPlugin::createWidget(QWidget* parent) +{ + return new ColorButton{parent}; +} diff -r 5188f8a74a5c -r c6f5de03dc0f widgets/designerplugins.h --- a/widgets/designerplugins.h Wed Jun 22 22:50:37 2022 +0300 +++ b/widgets/designerplugins.h Wed Jun 22 22:59:56 2022 +0300 @@ -47,3 +47,20 @@ bool isContainer() const override; QWidget* createWidget(QWidget* parent) override; }; + +class ColorButtonPlugin final : public QObject, public QDesignerCustomWidgetInterface +{ + Q_OBJECT + Q_INTERFACES(QDesignerCustomWidgetInterface) +public: + ColorButtonPlugin(QObject* parent) : QObject{parent}{} + // QDesignerCustomWidgetInterface interface + QString name() const override; + QString group() const override; + QString toolTip() const override; + QString whatsThis() const override; + QString includeFile() const override; + QIcon icon() const override; + bool isContainer() const override; + QWidget* createWidget(QWidget* parent) override; +};