15#include <QScopedValueRollback>
17#include <KConfigGroup>
18#include <KSharedConfig>
19#include <KLocalizedString>
22#include <config-qt-patches-present.h>
52 setDropIndicatorShown(
true);
53 setDragDropMode(QAbstractItemView::DragDrop);
54 setSelectionMode(QAbstractItemView::SingleSelection);
56 setAcceptDrops(
false);
64 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
67 horizontalHeader()->setVisible(
false);
68 verticalHeader()->setVisible(
false);
69 horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
71 verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
74#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0) && !KRITA_QT_HEADER_VIEW_MEMORY_MODE_INITIALIZATION_FIX
94 verticalHeader()->setStretchLastSection(
true);
95 verticalHeader()->setStretchLastSection(
false);
96 horizontalHeader()->setStretchLastSection(
true);
97 horizontalHeader()->setStretchLastSection(
false);
100 connect(horizontalHeader(), SIGNAL(sectionResized(
int,
int,
int)),
102 setAutoFillBackground(
true);
106 connect(scroller, SIGNAL(stateChanged(QScroller::State)),
129 dialog.setWindowTitle(i18nc(
"@title:dialog",
"Add a new Color Swatch"));
130 QFormLayout *editableItems =
new QFormLayout(dialog.mainWidget());
132 QComboBox *cmbGroups =
new QComboBox;
133 QString defaultGroupName = i18nc(
"Name for default swatch group",
"Default");
134 cmbGroups->addItem(defaultGroupName);
135 cmbGroups->addItems(
d->model->colorSet()->swatchGroupNames());
136 QLineEdit *lnIDName =
new QLineEdit;
137 QLineEdit *lnName =
new QLineEdit;
139 QCheckBox *chkSpot =
new QCheckBox;
140 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."));
141 editableItems->addRow(i18n(
"Swatch Group:"), cmbGroups);
142 editableItems->addRow(i18n(
"Swatch ID:"), lnIDName);
143 editableItems->addRow(i18n(
"Color swatch name:"), lnName);
144 editableItems->addRow(i18nc(
"Color as the Color of a Swatch in a Palette",
"Color:"), bnColor);
145 editableItems->addRow(i18n(
"Spot color:"), chkSpot);
146 cmbGroups->setCurrentIndex(0);
147 lnName->setText(i18nc(
"Prefix of a color swatch default name, as in Color 1",
"Color")+
" " + QString::number(
d->model->colorSet()->colorCount()+1));
148 lnIDName->setText(QString::number(
d->model->colorSet()->colorCount() + 1));
150 chkSpot->setChecked(
false);
152 if (dialog.exec() == KoDialog::Accepted) {
153 QString groupName = cmbGroups->currentText();
154 if (groupName == defaultGroupName) {
155 groupName = QString();
159 newEntry.
setName(lnName->text());
160 newEntry.
setId(lnIDName->text());
162 d->model->addSwatch(newEntry, groupName);
173 dialog.setWindowTitle(i18nc(
"@title:dialog",
"Add a new group"));
174 QFormLayout *editableItems =
new QFormLayout(dialog.mainWidget());
175 QLineEdit *lnName =
new QLineEdit();
176 lnName->setText(i18nc(
"Part of default name for a new group",
"Color Group")+
""+QString::number(
d->model->colorSet()->swatchGroupNames().size()+1));
177 editableItems->addRow(i18nc(
"Name for a group",
"Name"), lnName);
179 if (dialog.exec() == KoDialog::Accepted) {
180 d->model->addGroup(lnName->text());
189 if(!
d->foregroundColorChangeInProgress) {
190 QTableView::scrollTo(index, hint);
196 bool keepColors =
false;
199 dialog.setWindowTitle(i18nc(
"@title:dialog",
"Removing Group"));
200 QFormLayout *editableItems =
new QFormLayout(dialog.mainWidget());
201 QCheckBox *chkKeep =
new QCheckBox();
202 editableItems->addRow(i18nc(
"Shows up when deleting a swatch group",
"Keep the Colors"), chkKeep);
204 if (dialog.exec() != KoDialog::Accepted) {
return false; }
205 keepColors = chkKeep->isChecked();
207 d->model->removeSwatch(index, keepColors);
217 if (!colorSet || !colorSet->valid() || currentIndex().row() < 0) {
222 if (
d->model->getSwatch(currentIndex()).color() == color) {
226 selectionModel()->clearSelection();
227 QModelIndex index =
d->model->indexForClosest(color);
229 selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
234 QModelIndex index =
d->model->indexForClosest(color);
235 KisSwatch swatch =
d->model->getSwatch(index);
236 return swatch.
color();
241 QScopedValueRollback<bool> rollback(
d->foregroundColorChangeInProgress,
true);
248 disconnect(
d->model, 0,
this, 0);
266 setAcceptDrops(allow);
277 verticalHeader()->setDefaultSectionSize(newSize);
278 verticalHeader()->resizeSections(QHeaderView::Fixed);
288 if (selectedIndexes().size() <= 0) {
291 d->model->removeSwatch(currentIndex());
302 if (!
d->model->colorSet())
return;
305 resizeRows(verticalHeader()->defaultSectionSize());
307 for (
const QString &groupName :
d->model->colorSet()->swatchGroupNames()) {
308 if (groupName.isEmpty())
continue;
310 int rowNumber =
d->model->colorSet()->startRowForGroup(groupName);
311 setSpan(rowNumber, 0, 1,
d->model->columnCount());
312 setRowHeight(rowNumber, fontMetrics().lineSpacing() + 6);
318 if (!newCurrent.isValid()) {
return; }
323 const KisSwatch newEntry =
d->model->getSwatch(newCurrent);
338 d->model->setDisplayRenderer(displayRenderer);
float value(const T *src, size_t ch)
void setCrossedKeyword(const QString &value)
The KisPaletteModel class This, together with KisPaletteView and KisPaletteDelegate forms a mvc way t...
void setCrossedKeyword(const QString &value)
setCrossedKeyword This allows you to set keywords that can cross out colors. This is implemented to m...
void scrollTo(const QModelIndex &index, ScrollHint hint=EnsureVisible) override
void setAllowModification(bool allow)
setAllowModification Set whether doubleclick calls up a modification window. This is to prevent users...
void slotAdditionalGuiUpdate()
bool removeEntryWithDialog(QModelIndex index)
void sigColorSelected(const KoColor &)
const KoColor closestColor(const KoColor &color) const
closestColor determines closest swatch in the active palette and returns it's color as KoColor
void slotFGColorChanged(const KoColor &)
const QScopedPointer< Private > d
void removeSelectedEntry()
void slotHorizontalHeaderResized(int, int, int newSize)
void slotCurrentSelectionChanged(const QModelIndex &newCurrent)
void sigIndexSelected(const QModelIndex &index)
KisPaletteModel * paletteModel() const
void setPaletteModel(KisPaletteModel *model)
~KisPaletteView() override
void slotScrollerStateChanged(QScroller::State state)
bool addGroupWithDialog()
bool addEntryWithDialog(KoColor color)
KisPaletteView(QWidget *parent=0)
void resizeRows(int newSize)
static int MINIMUM_ROW_HEIGHT
void selectClosestColor(const KoColor &color)
selectClosestColor select a color that's closest to parameter color
void setDisplayRenderer(const KoColorDisplayRendererInterface *displayRenderer)
static bool updateResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource)
void setSpotColor(bool spotColor)
void setColor(const KoColor &color)
void setId(const QString &id)
void setName(const QString &name)
A dialog base class with standard buttons and predefined layouts.
#define KIS_ASSERT_RECOVER_RETURN(cond)
bool foregroundColorChangeInProgress
QPointer< KisPaletteModel > model