Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPaletteEditor.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 Michael Zhou <simeirxh@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include <QHash>
8#include <QString>
9#include <QPointer>
10#include <QFormLayout>
11#include <QCheckBox>
12#include <QLineEdit>
13#include <QLabel>
14#include <QSpinBox>
15#include <QComboBox>
16#include <QMessageBox>
17
18#include <KoDialog.h>
19#include <KoFileDialog.h>
20#include <KoColorSet.h>
21#include <KisSwatchGroup.h>
23#include <KisViewManager.h>
24#include <KisDocument.h>
25#include <KoResourceServer.h>
26#include <KisStorageModel.h>
28#include <KisPaletteModel.h>
29#include <kis_color_button.h>
30
31#include "KisPaletteEditor.h"
34
36 QString name;
37 QString filename;
40 QHash<QString, KisSwatchGroupSP> groups;
41};
42
61
63 : QObject(parent)
64 , m_d(new Private)
65{
67 m_d->warnPalette.setColor(QPalette::Text, Qt::red);
68}
69
72
74{
75 if (!model) { return; }
76 if (m_d->model) {
77 m_d->model->disconnect(this);
78 }
79 m_d->model = model;
81 connect(model, SIGNAL(sigPaletteChanged()), SLOT(slotPaletteChanged()));
82 connect(model, SIGNAL(sigPaletteModified()), SLOT(slotSetDocumentModified()));
83}
84
86{
87 m_d->view = view;
88}
89
91{
92 if (!m_d->view) { return 0; }
93 if (!m_d->view->document()) { return 0; }
94
95 KoColorSetSP colorSet(new KoColorSet());
96
97 KoDialog dialog;
98 QFormLayout *layout = new QFormLayout(dialog.mainWidget());
99 QLineEdit *le = new QLineEdit(i18nc("Default name for a new palette","New Palette"));
100 layout->addRow(i18n("New palette name:"), le);
101
102 QComboBox *cmbPaletteType = new QComboBox();
103 cmbPaletteType->addItem(i18nc("Palette File Type", "Krita Palette (KPL)"));
104 cmbPaletteType->addItem(i18nc("Palette File Type", "GIMP Palette (GPL)"));
105 layout->addRow(cmbPaletteType);
106
107 QCheckBox *chkSaveInDocument = new QCheckBox(i18n("Save Palette in the Current Document"));
108 chkSaveInDocument->setChecked(false);
109 layout->addRow(chkSaveInDocument);
110
111
112 if (dialog.exec() != QDialog::Accepted) { return 0; }
113
114 QString name = le->text();
115 if (cmbPaletteType->currentIndex() == 0) {
116 colorSet->setPaletteType(KoColorSet::KPL);
117 }
118 else {
119 colorSet->setPaletteType(KoColorSet::GPL);
120 }
121 colorSet->setValid(true);
122 colorSet->setName(name);
123 colorSet->setFilename(name.split(" ").join("_")+colorSet->defaultFileExtension());
124
125 QString resourceLocation = "";
126 if (chkSaveInDocument->isChecked()) {
127 resourceLocation = m_d->view->document()->linkedResourcesStorageId();
128 }
129
130 if (KisResourceUserOperations::addResourceWithUserInput(m_d->view->mainWindowAsQWidget(), colorSet, resourceLocation)) {
131 return colorSet;
132
133 }
134
135 return 0;
136}
137
139{
140 KoFileDialog dialog(nullptr, KoFileDialog::OpenFile, "Open Palette");
141 dialog.setCaption(i18n("Import Palette"));
142
143 dialog.setDefaultDir(QDir::homePath());
144 dialog.setMimeTypeFilters(QStringList() << "application/x-krita-palette" << "application/x-gimp-color-palette");
145
146 QString filename = dialog.filename();
147 if (filename.isEmpty()) {
148 return nullptr;
149 }
150
151 QMessageBox messageBox;
152 messageBox.setText(i18n("Do you want to store this palette in your current image?"));
153 messageBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
154 QString storageLocation = "";
155 if (messageBox.exec() == QMessageBox::Yes) {
156 storageLocation = m_d->view->document()->linkedResourcesStorageId();
157 }
158 KoResourceSP resource = KisResourceUserOperations::importResourceFileWithUserInput(m_d->view->mainWindowAsQWidget(), storageLocation, ResourceType::Palettes, filename);
159
161 if (resource) {
162 palette = resource.dynamicCast<KoColorSet>();
163 }
164
165 return palette;
166}
167
169{
170 if (!m_d->view) { return; }
171 if (!m_d->view->document()) { return; }
172 if (!cs) { return; }
173 m_d->rServer->removeResourceFromServer(cs);
174}
175
176int KisPaletteEditor::rowCountOfGroup(const QString &originalName) const
177{
178 if (!m_d->modifiedPaletteInfo.groups.contains(originalName)) {
179 KoColorSetSP colorSet = m_d->model->colorSet();
180 if (originalName.isEmpty()) {
181 return colorSet->getGlobalGroup()->rowCount();
182 }
183 else {
184 KisSwatchGroupSP group = colorSet->getGroup(originalName);
185 if (group ){
186 return group->rowCount();
187 }
188 }
189 return 0;
190 }
191 return m_d->modifiedPaletteInfo.groups[originalName]->rowCount();
192}
193
194bool KisPaletteEditor::duplicateExistsGroupName(const QString &name) const
195{
196 if (name == m_d->groupBeingRenamed) { return false; }
197 Q_FOREACH (const KisSwatchGroupSP group, m_d->modifiedPaletteInfo.groups.values()) {
198 if (name == group->name()) { return true; }
199 }
200 return false;
201}
202
204{
205 return m_d->modifiedPaletteInfo.groups.contains(name);
206}
207
208QString KisPaletteEditor::oldNameFromNewName(const QString &newName) const
209{
210 Q_FOREACH (const QString &oldGroupName, m_d->modifiedPaletteInfo.groups.keys()) {
211 if (m_d->modifiedPaletteInfo.groups[oldGroupName]->name() == newName) {
212 return oldGroupName;
213 }
214 }
215 return QString();
216}
217
218void KisPaletteEditor::rename(const QString &newName)
219{
220 if (!m_d->isEditing) {
221 return;
222 }
223 if (newName.isEmpty()) { return; }
224 m_d->modifiedPaletteInfo.name = newName;
225}
226
228{
229 if (!m_d->isEditing) {
230 return;
231 }
232 m_d->modifiedPaletteInfo.columnCount = newCount;
233}
234
236{
237 if (!m_d->isEditing) {
238 return QString();
239 }
240 KoDialog dialog;
241 m_d->query = &dialog;
242
243 QVBoxLayout *layout = new QVBoxLayout(dialog.mainWidget());
244
245 layout->addWidget(new QLabel(i18n("New swatch group name:")));
246 QLineEdit *leName = new QLineEdit(newGroupName());
247 connect(leName, SIGNAL(textChanged(QString)), SLOT(slotGroupNameChanged(QString)));
248 layout->addWidget(leName);
249 layout->addWidget(new QLabel(i18n("Rows of swatches in group:")));
250 QSpinBox *spxRow = new QSpinBox();
251 spxRow->setValue(20);
252 layout->addWidget(spxRow);
253
254 if (dialog.exec() != QDialog::Accepted) { return QString(); }
255 if (duplicateExistsGroupName(leName->text())) { return QString(); }
256
257 QString realName = leName->text();
258 QString name = realName;
260 name = newGroupName();
261 }
262 m_d->modifiedPaletteInfo.groups[name].reset(new KisSwatchGroup);
263 KisSwatchGroupSP newGroup = m_d->modifiedPaletteInfo.groups[name];
264 newGroup->setName(realName);
265 m_d->newGroupNames.insert(name);
266 newGroup->setRowCount(spxRow->value());
267 return realName;
268}
269
270bool KisPaletteEditor::removeGroup(const QString &name)
271{
272 if (!m_d->isEditing) {
273 return false;
274 }
275 KoDialog dialog;
276 dialog.setWindowTitle(i18nc("@title:dialog", "Removing Swatch Group"));
277 QFormLayout *editableItems = new QFormLayout(dialog.mainWidget());
278 QCheckBox *chkKeep = new QCheckBox();
279
280 editableItems->addRow(i18nc("Shows up when deleting a swatch group", "Keep the Colors"), chkKeep);
281 if (dialog.exec() != KoDialog::Accepted) { return false; }
282
283 m_d->modifiedPaletteInfo.groups.remove(name);
284 m_d->newGroupNames.remove(name);
285 if (chkKeep->isChecked()) {
286 m_d->keepColorGroups.insert(name);
287 }
288 return true;
289}
290
291QString KisPaletteEditor::renameGroup(const QString &oldName)
292{
293 if (!m_d->isEditing) {
294 return QString();
295 }
296 if (oldName.isEmpty() || oldName == KoColorSet::GLOBAL_GROUP_NAME) { return QString(); }
297
298 KoDialog dialog;
299 m_d->query = &dialog;
300 m_d->groupBeingRenamed = m_d->modifiedPaletteInfo.groups[oldName]->name();
301
302 QFormLayout *form = new QFormLayout(dialog.mainWidget());
303
304 QLineEdit *leNewName = new QLineEdit();
305 connect(leNewName, SIGNAL(textChanged(QString)), SLOT(slotGroupNameChanged(QString)));
306 leNewName->setText(m_d->modifiedPaletteInfo.groups[oldName]->name());
307
308 form->addRow(i18n("New swatch group name:"), leNewName);
309
310 if (dialog.exec() != KoDialog::Accepted) { return QString(); }
311 if (leNewName->text().isEmpty()) { return QString(); }
312 if (duplicateExistsGroupName(leNewName->text())) { return QString(); }
313
314 m_d->modifiedPaletteInfo.groups[oldName]->setName(leNewName->text());
315 m_d->modifiedGroupNames.insert(oldName);
316
317 return leNewName->text();
318}
319
320void KisPaletteEditor::slotGroupNameChanged(const QString &newName)
321{
322 QLineEdit *leGroupName = qobject_cast<QLineEdit*>(sender());
323 if (duplicateExistsGroupName(newName) || newName == QString()) {
324 leGroupName->setPalette(m_d->warnPalette);
325 if (m_d->query->button(KoDialog::Ok)) {
326 m_d->query->button(KoDialog::Ok)->setEnabled(false);
327 }
328 return;
329 }
330 leGroupName->setPalette(m_d->normalPalette);
331 if (m_d->query->button(KoDialog::Ok)) {
332 m_d->query->button(KoDialog::Ok)->setEnabled(true);
333 }
334}
335
336void KisPaletteEditor::changeGroupRowCount(const QString &name, int newRowCount)
337{
338 if (!m_d->isEditing) {
339 return;
340 }
341 if (!m_d->modifiedPaletteInfo.groups.contains(name)) { return; }
342 m_d->modifiedPaletteInfo.groups[name]->setRowCount(newRowCount);
343 m_d->modifiedGroupNames.insert(name);
344}
345
347{
348 m_d->modifiedPaletteInfo.storageLocation = location;
349}
350
351void KisPaletteEditor::setEntry(const KoColor &color, const QModelIndex &index)
352{
353 Q_ASSERT(m_d->model);
354 if (!m_d->view) { return; }
355 if (!m_d->view->document()) { return; }
356 KisSwatch c = KisSwatch(color);
357 c.setId(QString::number(m_d->model->colorSet()->colorCount() + 1));
358 c.setName(i18nc("Default name for a color swatch","Color %1", QString::number(m_d->model->colorSet()->colorCount()+1)));
359 m_d->model->setSwatch(c, index);
360}
361
363{
364 if (m_d->modifiedPaletteInfo.storageLocation == m_d->view->document()->linkedResourcesStorageId()) {
365 KisResourceUserOperations::updateResourceWithUserInput(m_d->view->mainWindowAsQWidget(), m_d->model->colorSet());
366 m_d->view->document()->setModified(true);
367 }
368 m_d->model->colorSet()->setDirty(true);
369}
370
371void KisPaletteEditor::removeEntry(const QModelIndex &index)
372{
373 Q_ASSERT(m_d->model);
374 if (!m_d->view) { return; }
375 if (!m_d->view->document()) { return; }
376 if (qvariant_cast<bool>(index.data(KisPaletteModel::IsGroupNameRole))) {
377 startEditing();
378 removeGroup(qvariant_cast<QString>(index.data(KisPaletteModel::GroupNameRole)));
379 endEditing();
380 } else {
381 m_d->model->removeSwatch(index, false);
382 }
383}
384
385void KisPaletteEditor::modifyEntry(const QModelIndex &index)
386{
387 if (!m_d->view) { return; }
388 if (!m_d->view->document()) { return; }
389
390 KoDialog dialog;
391 dialog.setCaption(i18nc("@title:dialog", "Add a new Color Swatch"));
392 QFormLayout *editableItems = new QFormLayout(dialog.mainWidget());
393
394 QString groupName = qvariant_cast<QString>(index.data(Qt::DisplayRole));
395 if (qvariant_cast<bool>(index.data(KisPaletteModel::IsGroupNameRole))) {
396 startEditing();
397 renameGroup(groupName);
398 endEditing();
399 }
400 else {
401
402 QLineEdit *lnIDName = new QLineEdit();
403 QLineEdit *lnGroupName = new QLineEdit();
404 KisColorButton *bnColor = new KisColorButton();
405 QCheckBox *chkSpot = new QCheckBox();
406 chkSpot->setToolTip(i18nc("@info:tooltip", "A spot color is a color that the printer is able to print without mixing the paints it has available to it. The opposite is called a process color."));
407
408 KisSwatch entry = m_d->model->getSwatch(index);
409
410 editableItems->addRow(i18n("Swatch ID:"), lnIDName);
411 editableItems->addRow(i18n("Color swatch name:"), lnGroupName);
412 editableItems->addRow(i18nc("Color as the Color of a Swatch in a Palette", "Color:"), bnColor);
413 editableItems->addRow(i18n("Spot color:"), chkSpot);
414
415 lnGroupName->setText(entry.name());
416 lnIDName->setText(entry.id());
417 bnColor->setColor(entry.color());
418 chkSpot->setChecked(entry.spotColor());
419
420 if (dialog.exec() == KoDialog::Accepted) {
421 entry.setName(lnGroupName->text());
422 entry.setId(lnIDName->text());
423 entry.setColor(bnColor->color());
424 entry.setSpotColor(chkSpot->isChecked());
425 m_d->model->setSwatch(entry, index);
426 }
427 }
428}
429
431{
432 Q_ASSERT(m_d->model);
433 if (!m_d->view) { return; }
434 if (!m_d->view->document()) { return; }
435
436 KoDialog dialog;
437 dialog.setWindowTitle(i18nc("@title:dialog", "Add a new Color Swatch"));
438
439 QFormLayout *editableItems = new QFormLayout(dialog.mainWidget());
440
441 QComboBox *cmbGroups = new QComboBox();
442 cmbGroups->addItems(m_d->model->colorSet()->swatchGroupNames());
443 cmbGroups->setCurrentIndex(0);
444
445 QLineEdit *lnIDName = new QLineEdit();
446 lnIDName->setText(QString::number(m_d->model->colorSet()->colorCount() + 1));
447
448 QLineEdit *lnName = new QLineEdit();
449 lnName->setText(i18nc("Default name for a color swatch","Color %1", QString::number(m_d->model->colorSet()->colorCount()+1)));
450
451 KisColorButton *bnColor = new KisColorButton();
452 bnColor->setColor(color);
453
454 QCheckBox *chkSpot = new QCheckBox();
455 chkSpot->setChecked(false);
456 chkSpot->setToolTip(i18nc("@info:tooltip", "A spot color is a color that the printer is able to print without mixing the paints it has available to it. The opposite is called a process color."));
457
458 editableItems->addRow(i18n("Swatch Group:"), cmbGroups);
459 editableItems->addRow(i18n("Swatch ID:"), lnIDName);
460 editableItems->addRow(i18n("Color swatch name:"), lnName);
461 editableItems->addRow(i18nc("Color as the Color of a Swatch in a Palette", "Color:"), bnColor);
462 editableItems->addRow(i18n("Spot color:"), chkSpot);
463
464 if (dialog.exec() != KoDialog::Accepted) { return; }
465
466 QString groupName = cmbGroups->currentText();
467
468 KisSwatch newSwatch;
469 newSwatch.setColor(bnColor->color());
470 newSwatch.setName(lnName->text());
471 newSwatch.setId(lnIDName->text());
472 newSwatch.setSpotColor(chkSpot->isChecked());
473 m_d->model->addSwatch(newSwatch, groupName);
474 m_d->modifiedGroupNames.insert(groupName);
475 // TODO: This is getting called when startEditing is never called. This avoids the crash, but what is its purpose?
476 if (m_d->isEditing) {
477 KisSwatchGroupSP cs = m_d->modifiedPaletteInfo.groups.value(groupName);
478 cs->addSwatch(newSwatch);
479 if (!m_d->modifiedPaletteInfo.groups.contains(groupName)) {
480 m_d->modifiedPaletteInfo.groups.insert(groupName, cs);
481 }
482 }
483}
484
486{
487 if (m_d->model->colorSet()) {
488 return m_d->model->colorSet()->isDirty();
489 } else {
490 return false;
491 }
492}
493
495{
496 if (m_d->isEditing) {
497 qWarning() << "KisPaletteEditor::startEditing(): restarting palette editing.";
499 }
500
501 if (!m_d->model || !m_d->model->colorSet()) {
502 return;
503 }
504 KoColorSetSP palette = m_d->model->colorSet();
505
506 m_d->modifiedPaletteInfo.name = palette->name();
507 m_d->modifiedPaletteInfo.storageLocation = palette->storageLocation();
508 m_d->modifiedPaletteInfo.columnCount = palette->columnCount();
509 m_d->modifiedPaletteInfo.groups.clear();
510
511 Q_FOREACH (const QString &groupName, palette->swatchGroupNames()) {
512 KisSwatchGroupSP cs(new KisSwatchGroup(*palette->getGroup(groupName).data()));
513 m_d->modifiedPaletteInfo.groups.insert(groupName, cs);
514 }
515
516 m_d->isEditing = true;
517}
518
519void KisPaletteEditor::endEditing(bool applyChanges)
520{
521 if (!m_d->isEditing) {
522 qWarning("KisPaletteEditor::endEditing(): not in editing state; ignoring.");
523 return;
524 }
525
526 if (!applyChanges) {
528 return;
529 }
530
531 if (!m_d->model) return;
532 if (!m_d->model->colorSet()) return;
533 if (!m_d->view) return;
534 if (!m_d->view->document()) return;
535
536 KoColorSetSP palette = m_d->model->colorSet();
537 PaletteInfo &modified = m_d->modifiedPaletteInfo;
538
539 if (modified.columnCount != palette->columnCount()) {
540 m_d->model->setColumnCount(modified.columnCount);
541 }
542 if (modified.name != palette->name()) {
543 KisResourceUserOperations::renameResourceWithUserInput(m_d->view->mainWindowAsQWidget(), palette, m_d->modifiedPaletteInfo.name);
544 }
545 QString resourceLocation = m_d->model->colorSet()->storageLocation();
546 if (resourceLocation != m_d->modifiedPaletteInfo.storageLocation) {
547 // We need functionality for moving the resource to the new resource storage...
548 }
549
550 Q_FOREACH (const QString &groupName, palette->swatchGroupNames()) {
551 if (!modified.groups.contains(groupName)) {
552 m_d->model->removeGroup(groupName, m_d->keepColorGroups.contains(groupName));
553 }
554 }
555 Q_FOREACH (const QString &groupName, palette->swatchGroupNames()) {
556 if (m_d->modifiedGroupNames.contains(groupName)) {
557 m_d->model->setRowCountForGroup(groupName, modified.groups[groupName]->rowCount());
558 if (groupName != modified.groups[groupName]->name()) {
559 m_d->model->changeGroupName(groupName, modified.groups[groupName]->name());
560 modified.groups[modified.groups[groupName]->name()] = modified.groups[groupName];
561 modified.groups.remove(groupName);
562 }
563 }
564 }
565 Q_FOREACH (const QString &newGroupName, m_d->newGroupNames) {
566 m_d->model->addGroup(newGroupName, palette->columnCount(), m_d->modifiedPaletteInfo.groups[newGroupName]->rowCount());
567 }
568
570}
571
573{
574 m_d->modifiedPaletteInfo.groups.clear();
575 m_d->keepColorGroups.clear();
576 m_d->newGroupNames.clear();
577 m_d->modifiedGroupNames.clear();
578 m_d->isEditing = false;
579}
580
582{
583 if (!m_d->model || !m_d->model->colorSet()) { return; }
584
585 QModelIndex index = m_d->rServer->resourceModel()->indexForResource(m_d->model->colorSet());
586 bool isGlobal = false;
587 if (index.isValid()) {
588 bool ok = false;
589 int storageId = m_d->rServer->resourceModel()->data(index, Qt::UserRole + KisAllResourcesModel::StorageId).toInt(&ok);
590 if (ok) {
591 KisStorageModel storageModel;
592 KisResourceStorageSP storage = storageModel.storageForId(storageId);
593 isGlobal = storage->type() != KisResourceStorage::StorageType::Memory;
594 }
595 }
596 bool res = false;
597 if (isGlobal) {
598 if (m_d->view) {
599 res = KisResourceUserOperations::updateResourceWithUserInput(m_d->view->mainWindowAsQWidget(), m_d->model->colorSet());
600 } else if (m_d->model->colorSet()->version() >= 0) {
601 //if the version is -1, then the resource should not be updated, because it was never saved to begin with...
602 res = m_d->rServer->resourceModel()->updateResource(m_d->model->colorSet());
603 dbgResources << Q_FUNC_INFO << "-- Updating resource without user input: " << m_d->model->colorSet()->name() << "Result:" << res;
604 }
605 }
606}
607
609{
610 Q_ASSERT(m_d->model);
612}
613
615{
616 int i = 1;
617 QString groupname = i18nc("Default new group name", "New Group %1", QString::number(i));
618 while (m_d->modifiedPaletteInfo.groups.contains(groupname)) {
619 i++;
620 groupname = i18nc("Default new group name", "New Group %1", QString::number(i));
621 }
622 return groupname;
623}
624
625QString KisPaletteEditor::filenameFromPath(const QString &path) const
626{
627 return QDir::fromNativeSeparators(path).section('/', -1, -1);
628}
QList< QString > QStringList
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
A pushbutton to display or allow user selection of a color.
void setColor(const KoColor &c)
void setPaletteModel(KisPaletteModel *model)
KoColorSetSP addPalette()
void rename(const QString &newName)
Stage a palette rename.
KisPaletteEditor(QObject *parent=0)
void startEditing()
Start editing the current palette.
void modifyEntry(const QModelIndex &index)
QString newGroupName() const
void removePalette(KoColorSetSP)
void changeColumnCount(int)
Stage a change of the palette's column count.
bool duplicateExistsOriginalGroupName(const QString &name) const
KoColorSetSP importPalette()
QString filenameFromPath(const QString &path) const
void changeGroupRowCount(const QString &name, int newRowCount)
Stage a change to the row count of a group.
QString renameGroup(const QString &oldName)
Stage a rename of a group.
void saveNewPaletteVersion()
saveNewPaletteVersion
QString addGroup()
Stage the addition of a new swatch group.
QScopedPointer< Private > m_d
bool removeGroup(const QString &name)
Stage the removal of a group.
int rowCountOfGroup(const QString &originalName) const
rowCountOfGroup
void setView(KisViewManager *view)
void removeEntry(const QModelIndex &index)
void endEditing(bool applyChanges=true)
End editing and either apply or discard staged changes.
QString oldNameFromNewName(const QString &newName) const
oldNameFromNewName
void setStorageLocation(QString location)
bool duplicateExistsGroupName(const QString &name) const
void setEntry(const KoColor &color, const QModelIndex &index)
void slotGroupNameChanged(const QString &newName)
void addEntry(const KoColor &color)
The KisPaletteModel class This, together with KisPaletteView and KisPaletteDelegate forms a mvc way t...
static KoResourceSP importResourceFileWithUserInput(QWidget *widgetParent, QString storageLocation, QString resourceType, QString resourceFilepath)
static bool renameResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString resourceName)
static bool addResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString storageLocation="")
static bool updateResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource)
KisResourceStorageSP storageForId(const int storageId) const
The KisSwatchGroup class stores a matrix of color swatches swatches can accessed using (x,...
void setSpotColor(bool spotColor)
Definition KisSwatch.cpp:38
KoColor color() const
Definition KisSwatch.h:30
QString name() const
Definition KisSwatch.h:24
void setColor(const KoColor &color)
Definition KisSwatch.cpp:32
bool spotColor() const
Definition KisSwatch.h:33
void setId(const QString &id)
Definition KisSwatch.cpp:26
void setName(const QString &name)
Definition KisSwatch.cpp:20
QString id() const
Definition KisSwatch.h:27
static const QString GLOBAL_GROUP_NAME
Definition KoColorSet.h:33
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
#define dbgResources
Definition kis_debug.h:43
const QString Palettes
rgba palette[MAX_PALETTE]
Definition palette.c:35
QHash< QString, KisSwatchGroupSP > groups
QPointer< KisViewManager > view
KoResourceServer< KoColorSet > * rServer
QPointer< KoDialog > query
QPointer< KisPaletteModel > model
KisPaletteEditor::PaletteInfo modifiedPaletteInfo
static KoResourceServerProvider * instance()
KoResourceServer< KoColorSet > * paletteServer