From af6c8364bf62cac2825843e6d8a7cb1c68a00ff7 Mon Sep 17 00:00:00 2001 From: Florian ROMEO Date: Wed, 10 Aug 2016 19:10:07 +0200 Subject: [PATCH] Custom color support --- lcUI/dialogs/addlayerdialog.cpp | 39 +++------------------ lcUI/dialogs/addlayerdialog.h | 4 +-- lcUI/dialogs/addlayerdialog.ui | 60 --------------------------------- lcUI/lua/qtbridge.cpp | 2 +- lcUI/widgets/colorselect.cpp | 45 +++++++++++++++++++++++-- lcUI/widgets/colorselect.h | 22 +++++++++--- lcUILua/ui/mainwindow.lua | 2 +- 7 files changed, 68 insertions(+), 106 deletions(-) diff --git a/lcUI/dialogs/addlayerdialog.cpp b/lcUI/dialogs/addlayerdialog.cpp index d99670963..75a169612 100644 --- a/lcUI/dialogs/addlayerdialog.cpp +++ b/lcUI/dialogs/addlayerdialog.cpp @@ -15,9 +15,11 @@ AddLayerDialog::AddLayerDialog(lc::Layer_CSPtr oldLayer, lc::Document_SPtr docum linePatternSelect = new LinePatternSelect(document, this); lineWidthSelect = new LineWidthSelect(this); + colorSelect = new ColorSelect(this); auto layout = dynamic_cast(this->layout()); if(layout) { + layout->setWidget(1, QFormLayout::FieldRole, colorSelect); layout->setWidget(2, QFormLayout::FieldRole, lineWidthSelect); layout->setWidget(3, QFormLayout::FieldRole, linePatternSelect); } @@ -25,11 +27,6 @@ AddLayerDialog::AddLayerDialog(lc::Layer_CSPtr oldLayer, lc::Document_SPtr docum if(oldLayer != nullptr) { ui->name->setText(oldLayer->name().c_str()); - ui->r->setValue(oldLayer->color().redI()); - ui->g->setValue(oldLayer->color().greenI()); - ui->b->setValue(oldLayer->color().blueI()); - ui->a->setValue(oldLayer->color().alphaI()); - if(oldLayer->linePattern() != nullptr) { int linePatternIndex = linePatternSelect->findText(oldLayer->linePattern()->name().c_str()); @@ -57,22 +54,14 @@ void AddLayerDialog::accept() { layer = std::make_shared( ui->name->text().toStdString(), *lineWidthSelect->lineWidth(), - lc::Color(ui->r->value(), - ui->g->value(), - ui->b->value(), - ui->a->value() - ) + colorSelect->color() ); } else { layer = std::make_shared( ui->name->text().toStdString(), *lineWidthSelect->lineWidth(), - lc::Color(ui->r->value(), - ui->g->value(), - ui->b->value(), - ui->a->value() - ), + colorSelect->color(), linePattern, false ); @@ -86,24 +75,4 @@ void AddLayerDialog::accept() { } this->close(); -} - -void AddLayerDialog::on_pickColorButton_clicked() { - QColor currentColor(ui->r->value(), - ui->g->value(), - ui->b->value(), - ui->a->value()); - auto colorDialog = new QColorDialog(); - - colorDialog->setCurrentColor(currentColor); - colorDialog->show(); - - connect(colorDialog, &QColorDialog::colorSelected, this, &AddLayerDialog::on_colorChanged); -} - -void AddLayerDialog::on_colorChanged(const QColor& color) { - ui->r->setValue(color.red()); - ui->g->setValue(color.green()); - ui->b->setValue(color.blue()); - ui->a->setValue(color.alpha()); } \ No newline at end of file diff --git a/lcUI/dialogs/addlayerdialog.h b/lcUI/dialogs/addlayerdialog.h index 669de6d85..852a6ed5d 100644 --- a/lcUI/dialogs/addlayerdialog.h +++ b/lcUI/dialogs/addlayerdialog.h @@ -7,6 +7,7 @@ #include "widgets/linepatternselect.h" #include "widgets/linewidthselect.h" +#include "widgets/colorselect.h" #include #include @@ -30,13 +31,12 @@ class AddLayerDialog : public QDialog { private slots: void accept(); - void on_pickColorButton_clicked(); - void on_colorChanged(const QColor& color); private: Ui::AddLayerDialog* ui; lc::Document_SPtr _document; LinePatternSelect* linePatternSelect; LineWidthSelect* lineWidthSelect; + ColorSelect* colorSelect; lc::Layer_CSPtr _oldLayer; }; \ No newline at end of file diff --git a/lcUI/dialogs/addlayerdialog.ui b/lcUI/dialogs/addlayerdialog.ui index 06928defb..aa1e214ff 100644 --- a/lcUI/dialogs/addlayerdialog.ui +++ b/lcUI/dialogs/addlayerdialog.ui @@ -55,66 +55,6 @@ - - - - - - true - - - R: - - - 255 - - - - - - - G: - - - 255 - - - - - - - B: - - - 255 - - - - - - - true - - - A: - - - 255 - - - 255 - - - - - - - Pick color - - - - - diff --git a/lcUI/lua/qtbridge.cpp b/lcUI/lua/qtbridge.cpp index be1844923..2595a9451 100644 --- a/lcUI/lua/qtbridge.cpp +++ b/lcUI/lua/qtbridge.cpp @@ -298,7 +298,7 @@ void addLCBindings(lua_State *L) { .addFactory([](QWidget* parent, bool showByLayer, bool showByBlock){ return new ColorSelect(parent, showByLayer, showByBlock); }) - .addFunction("color", &ColorSelect::color) + .addFunction("metaColor", &ColorSelect::metaColor) .endClass() .endModule(); diff --git a/lcUI/widgets/colorselect.cpp b/lcUI/widgets/colorselect.cpp index 493a508f6..41a118975 100644 --- a/lcUI/widgets/colorselect.cpp +++ b/lcUI/widgets/colorselect.cpp @@ -15,19 +15,60 @@ ColorSelect::ColorSelect(QWidget *parent, bool showByLayer, bool showByBlock) : addItem(BY_BLOCK); } + addItem(CUSTOM); + insertSeparator(count()); + for(auto color : QColor::colorNames()){ QPixmap pixmap(qIconSize); pixmap.fill(color); addItem(QIcon(pixmap), color); } + + connect(this, SIGNAL(activated(const QString&)), this, SLOT(onActivated(const QString&))); +} + +QColor ColorSelect::getColor() { + if(currentText() == CUSTOM) { + return _customColor; + } + else { + return QColor(currentText()); + } } -lc::MetaColor_CSPtr ColorSelect::color() { - QColor color(currentText()); +lc::MetaColor_CSPtr ColorSelect::metaColor() { + QColor color = getColor(); if(!color.isValid()) { return nullptr; } return std::make_shared(color.redF(), color.greenF(), color.blueF(), color.alphaF()); +} + +lc::Color ColorSelect::color() { + QColor color = getColor(); + + if(!color.isValid()) { + return lc::Color(); + } + + return lc::Color(color.redF(), color.greenF(), color.blueF(), color.alphaF()); +} + +void ColorSelect::onActivated(const QString& text) { + if(text == CUSTOM) { + auto colorDialog = new QColorDialog(this); + + if(_customColor.isValid()) { + colorDialog->setCurrentColor(_customColor); + } + colorDialog->show(); + + connect(colorDialog, &QColorDialog::colorSelected, this, &ColorSelect::on_customColorChanged); + } +} + +void ColorSelect::on_customColorChanged(const QColor &color) { + _customColor = color; } \ No newline at end of file diff --git a/lcUI/widgets/colorselect.h b/lcUI/widgets/colorselect.h index f50ffa3db..5d1ab5f9d 100644 --- a/lcUI/widgets/colorselect.h +++ b/lcUI/widgets/colorselect.h @@ -3,17 +3,29 @@ #include #include #include +#include #include #define BY_BLOCK "ByBlock" #define BY_LAYER "ByLayer" +#define CUSTOM "Custom" class ColorSelect : public QComboBox { -public: - ColorSelect(QWidget* parent = 0, bool showByLayer = false, bool showByBlock = false); - lc::MetaColor_CSPtr color(); + Q_OBJECT -private: - QSize qIconSize; + public: + ColorSelect(QWidget* parent = 0, bool showByLayer = false, bool showByBlock = false); + lc::MetaColor_CSPtr metaColor(); + lc::Color color(); + + private slots: + void onActivated(const QString& text); + void on_customColorChanged(const QColor& color); + + private: + QColor getColor(); + + QSize qIconSize; + QColor _customColor; }; \ No newline at end of file diff --git a/lcUILua/ui/mainwindow.lua b/lcUILua/ui/mainwindow.lua index d25da094b..19984f207 100644 --- a/lcUILua/ui/mainwindow.lua +++ b/lcUILua/ui/mainwindow.lua @@ -69,7 +69,7 @@ function active_metaInfo() metaInfo:add(lineWidth) end - local color = colorSelect:color() + local color = colorSelect:metaColor() if(color ~= nil) then metaInfo:add(color) end