6 #include <QColorDialog>
7 #include <QDialogButtonBox>
8 #include <QDoubleValidator>
9 #include <QGraphicsSceneMouseEvent>
10 #include <QGridLayout>
11 #include <QHBoxLayout>
15 #include <QPushButton>
16 #include <QResizeEvent>
17 #include <QToolButton>
18 #include <QVBoxLayout>
30 setFrameStyle(QFrame::Box | QFrame::Plain);
31 QPalette pal = palette();
32 pal.setColor(backgroundRole(), pal.highlight().color());
34 setAutoFillBackground(
true);
39 _color = QColor(
int(255 * value[0] + 0.5),
int(255 * value[1] + 0.5),
int(255 * value[2] + 0.5));
52 p.fillRect(contentsRect(),
_color);
57 if (event->button() == Qt::RightButton)
60 QColor color = QColorDialog::getColor(
_color);
62 if (color.isValid()) {
63 _value[0] = color.red() / 255.0;
64 _value[1] = color.green() / 255.0;
65 _value[2] = color.blue() / 255.0;
76 auto *menu =
new QMenu(
this);
77 QAction *deleteAction = menu->addAction(tr(
"Delete Swatch"));
78 menu->addAction(tr(
"Cancel"));
79 QAction *action = menu->exec(mapToGlobal(pos));
80 if (action == deleteAction)
92 auto *vbox =
new QVBoxLayout();
93 vbox->setContentsMargins(0, 0, 0, 0);
98 auto *label =
new QLabel(tr(
"%1").arg(index));
99 vbox->addWidget(label);
115 , _indexLabel(indexLabel)
117 auto *hboxLayout =
new QHBoxLayout();
118 hboxLayout->setContentsMargins(0, 0, 0, 0);
119 setLayout(hboxLayout);
121 auto *addBtn =
new QToolButton;
122 addBtn->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
123 auto *detailAction =
new QAction(tr(
"&Add..."));
124 QIcon detailIcon = QIcon::fromTheme(
"addlayer", QIcon::fromTheme(
"list-add"));
125 detailAction->setIcon(detailIcon);
126 addBtn->setDefaultAction(detailAction);
127 addBtn->setFixedHeight(16);
128 auto *swatchControlLayout =
new QVBoxLayout();
129 swatchControlLayout->setContentsMargins(0, 0, 0, 0);
130 swatchControlLayout->setAlignment(Qt::AlignLeft | Qt::AlignCenter);
131 auto *addRemoveBtnLayout =
new QHBoxLayout();
132 addRemoveBtnLayout->setContentsMargins(0, 0, 0, 0);
133 addRemoveBtnLayout->setSpacing(0);
134 addRemoveBtnLayout->addWidget(addBtn);
135 swatchControlLayout->addLayout(addRemoveBtnLayout);
136 swatchControlLayout->addStretch();
138 auto *paletteLayout =
new QHBoxLayout();
139 paletteLayout->setContentsMargins(0, 0, 0, 0);
140 auto *colorGrid =
new QWidget();
141 colorGrid->setMinimumWidth(256);
146 colorGrid->setLayout(paletteLayout);
148 hboxLayout->addWidget(colorGrid);
149 hboxLayout->addLayout(swatchControlLayout);
150 hboxLayout->addStretch();
153 connect(addBtn, SIGNAL(triggered(QAction *)),
this, SLOT(
addNewColor()));
178 int index =
_gridLayout->indexOf(swatchFrame->parentWidget());
184 QWidget *parentWidget = widget->parentWidget();
187 if (
_gridLayout->itemAt(i)->widget() == parentWidget) {
189 parentWidget->deleteLater();
198 if (index >= 0 && index < _gridLayout->count()) {
199 KSeExpr::Vec3d newColor(color.redF(), color.greenF(), color.blueF());
200 QLayoutItem *layoutItem =
_gridLayout->itemAt(index);
201 if (layoutItem && layoutItem->widget()) {
202 QWidget *widget = layoutItem->widget();
203 auto *cFrame = (
dynamic_cast<ExprColorWidget *
>(widget))->getColorFrame();
204 cFrame->setValue(newColor);
211 if (index >= 0 && index < _gridLayout->count()) {
212 QLayoutItem *layoutItem =
_gridLayout->itemAt(index);
213 if (layoutItem && layoutItem->widget()) {
214 QWidget *widget = layoutItem->widget();
217 return QColor::fromRgbF(val[0], val[1], val[2], 1);
static constexpr std::array< int, 514 > p
void setValue(const KSeExpr::Vec3d &value)
void deleteSwatchMenu(const QPoint &pos)
void swatchChanged(QColor color)
void mouseReleaseEvent(QMouseEvent *event) override
void selValChangedSignal(KSeExpr::Vec3d value)
ExprColorFrame(KSeExpr::Vec3d value, QWidget *parent=nullptr)
KSeExpr::Vec3d getValue() const
void paintEvent(QPaintEvent *event) override
void deleteSwatch(ExprColorFrame *swatch)