widgets/coloredit.cpp

Sat, 08 Apr 2023 15:15:41 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Sat, 08 Apr 2023 15:15:41 +0300
changeset 349
673b8dffbe14
parent 348
98776f54a8d0
permissions
-rw-r--r--

Rename ColorButtonPlugin -> ColorEditPlugin

#include <QColorDialog>
#include <QHBoxLayout>
#include "widgets/coloredit.h"

ColorEdit::ColorEdit(const QColor& color, QWidget* parent) :
	ColorEdit{parent}
{
	this->setColor(color);
}

ColorEdit::ColorEdit(QWidget* parent) :
	QWidget{parent},
	lineEdit{new QLineEdit{this}},
	button{new QPushButton{"…", this}}
{
	auto*const layout = new QHBoxLayout{};
	layout->addWidget(this->lineEdit);
	layout->addWidget(this->button);
	layout->setStretch(0, 1);
	layout->setStretch(1, 0);
	this->setLayout(layout);
	connect(this->button, &QPushButton::clicked, [&](){
		const QColor color = QColorDialog::getColor(this->color(), this->parentWidget());
		if (color.isValid()) {
			this->setColor(color);
		}
	});
	connect(this->lineEdit, &QLineEdit::textChanged, [&]{
		const QColor color = this->color();
		const qreal lightness = color.lightnessF();
		const QColor foreground = lightness < 0.4 ? Qt::white : Qt::black;
		this->setStyleSheet(
			QStringLiteral("QLineEdit{background-color: %1; color: %2;}")
				.arg(color.name())
				.arg(foreground.name()));
		Q_EMIT this->colorChanged(this->color());
	});
	this->setColor(Qt::black);
}

QColor ColorEdit::color() const
{
	return QColor{this->lineEdit->text()};
}

void ColorEdit::setColor(const QColor& color)
{
	if (color.isValid() and this->color() != color) {
		this->lineEdit->setText(color.name());
	}
}

mercurial