11#include <QDomDocument>
23#include <QScopedValueRollback>
26 : QAbstractTableModel(parent)
39 if (!
index.isValid()) {
return QVariant(); }
40 bool groupNameRow = m_colorSet->isGroupTitleRow(
index.row());
53 if (!m_colorSet)
return 0;
54 return m_colorSet->rowCountWithTitles();
59 if (m_colorSet && m_colorSet->columnCount() > 0) {
60 return m_colorSet->columnCount();
70 if (
index.isValid()) {
71 return Qt::ItemIsSelectable |
73 Qt::ItemIsUserCheckable |
74 Qt::ItemIsDragEnabled |
75 Qt::ItemIsDropEnabled;
77 return Qt::ItemIsDropEnabled;
86 group = m_colorSet->getGroup(row);
93 qDebug() <<
"no group for row" << row <<
"col" << column <<
"total rows in model" <<
rowCount() <<
"rows in colorset" << m_colorSet->rowCountWithTitles();
97 QModelIndex idx = createIndex(row, column);
112 m_colorSet->disconnect(
this);
131 return m_colorSet->rowNumberInGroup(rowInModel);
138 m_colorSet->addSwatch(entry, groupName);
144 if (!
index.isValid()) {
return; }
148 m_colorSet->removeSwatch(
index.column(),
153 int groupNameRow = m_colorSet->startRowForGroup(group->name());
154 QString groupName = m_colorSet->getGroup(groupNameRow)->name();
161 QScopedValueRollback editMarker(
m_editing,
true);
162 int removeStart = m_colorSet->startRowForGroup(groupName);
163 int removedRowCount = m_colorSet->getGroup(groupName)->rowCount();
165 beginRemoveRows(QModelIndex(), removeStart, removeStart + removedRowCount);
166 m_colorSet->removeGroup(groupName, keepColors);
171 int row,
int column,
const QModelIndex &parent)
175 if (!
data->hasFormat(
"krita/x-colorsetentry") && !
data->hasFormat(
"krita/x-colorsetgroup")) {
178 if (action == Qt::IgnoreAction) {
182 QModelIndex finalIndex = parent;
183 if (!finalIndex.isValid()) {
return false; }
185 if (
data->hasFormat(
"krita/x-colorsetgroup")) {
186 QScopedValueRollback editMarker(
m_editing,
true);
187 QByteArray encodedData =
data->data(
"krita/x-colorsetgroup");
188 QDataStream stream(&encodedData, QIODevice::ReadOnly);
190 while (!stream.atEnd()) {
191 QString groupNameDroppedOn = qvariant_cast<QString>(finalIndex.data(
GroupNameRole));
195 QString groupNameDragged;
196 stream >> groupNameDragged;
198 int start = m_colorSet->startRowForGroup(groupNameDragged);
199 int end = start + groupDragged->rowCount();
200 if (!beginMoveRows(QModelIndex(), start, end, QModelIndex(), m_colorSet->startRowForGroup(groupNameDroppedOn))) {
203 m_colorSet->moveGroup(groupNameDragged, groupNameDroppedOn);
214 if (
data->hasFormat(
"krita/x-colorsetentry")) {
215 QByteArray encodedData =
data->data(
"krita/x-colorsetentry");
216 QString oldGroupName;
221 if (action == Qt::MoveAction){
225 m_colorSet->addSwatch(
getSwatch(finalIndex), g->name(), oriColumn, oriRow);
227 m_colorSet->removeSwatch(oriColumn, oriRow, g);
241 QMimeData *
mimeData =
new QMimeData();
242 QByteArray encodedData;
244 QDataStream stream(&encodedData, QIODevice::WriteOnly);
245 QModelIndex
index = indexes.last();
247 QString mimeTypeName =
"krita/x-colorsetentry";
256 mimeTypeName =
"krita/x-colorsetgroup";
260 mimeData->setData(mimeTypeName, encodedData);
268 return QStringList() <<
"krita/x-colorsetentry" <<
"krita/x-colorsetgroup";
273 return Qt::MoveAction;
278 if (m_colorSet->isGroupTitleRow(
index.row()))
return;
280 Q_ASSERT(
index.column() < m_colorSet->columnCount());
293 QScopedValueRollback editMarker(
m_editing,
true);
295 m_colorSet->changeGroupName(groupName, newName);
301 QScopedValueRollback editMarker(
m_editing,
true);
303 m_colorSet->addGroup(groupName, _columnCount, _rowCount);
305 return m_colorSet->getGroup(groupName);
310 QScopedValueRollback editMarker(
m_editing,
true);
321 m_colorSet->setColumnCount(colCount);
331 QScopedValueRollback editMarker(
m_editing,
true);
334 m_colorSet->setColumnCount(defaultColumnsCount);
342 QString groupName = group->name();
344 case Qt::ToolTipRole:
345 case Qt::DisplayRole: {
368 bool entryPresent = group->checkSwatchExists(idx.column(), rowInGroup);
371 entry = group->getSwatch(idx.column(), rowInGroup);
374 case Qt::ToolTipRole:
375 case Qt::DisplayRole: {
378 case Qt::BackgroundRole: {
379 QColor color(0, 0, 0, 0);
383 return QBrush(color);
386 return group->name();
402 if (displayRenderer) {
431 m_colorSet->setFilename(QFileInfo(m_colorSet->filename()).completeBaseName() +
".kpl");
434 m_colorSet->setFilename(QFileInfo(m_colorSet->filename()).completeBaseName() +
".gpl");
455 QModelIndex
index = createIndex(row, column);
461 if (resource && resource == m_colorSet) {
469 KisSwatchGroup::SwatchInfo info =
colorSet()->getClosestSwatchInfo(compare);
475 int groupRow = m_colorSet->startRowForGroup(info.group);
476 if (info.group.isEmpty()) {
477 return groupRow + info.row;
479 return groupRow + info.row + 1;
487 return m_colorSet->getColorGlobal(
index.column(),
index.row());
QList< QString > QStringList
PythonPluginManager * instance
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotExternalPaletteModified(QSharedPointer< KoColorSet > resource)
QModelIndex indexForClosest(const KoColor &compare)
void sigPaletteModified()
sigPaletteModified emitted when palette associated with the model is modified
int columnCount(const QModelIndex &parent=QModelIndex()) const override
void changeGroupName(const QString &groupName, const QString &newName)
void setRowCountForGroup(const QString &groupName, int rowCount)
QPointer< const KoColorDisplayRendererInterface > m_displayRenderer
void removeSwatch(const QModelIndex &index, bool keepColors=true)
void setDisplayRenderer(const KoColorDisplayRendererInterface *displayRenderer)
QVariant dataForSwatch(const QModelIndex &idx, int role) const
void removeGroup(const QString &groupName, bool keepColors)
void slotDisplayConfigurationChanged()
void addSwatch(const KisSwatch &entry, const QString &groupName=KoColorSet::GLOBAL_GROUP_NAME)
void setColorSet(KoColorSetSP colorSet)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
int indexRowForInfo(const KisSwatchGroup::SwatchInfo &info)
KisPaletteModel(QObject *parent=0)
~KisPaletteModel() override
KisSwatch getSwatch(const QModelIndex &index) const
void slotPaletteModified()
void slotEntryChanged(int column, int row)
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
void setColumnCount(int colCount)
int rowNumberInGroup(int rowInModel) const
Qt::DropActions supportedDropActions() const override
void slotLayoutAboutToChange()
Qt::ItemFlags flags(const QModelIndex &index) const override
QVariant dataForGroupNameRow(const QModelIndex &idx, int role) const
KoColorSetSP colorSet() const
KisSwatchGroupSP addGroup(const QString &groupName, int columnCount=KisSwatchGroup::DEFAULT_COLUMN_COUNT, int rowCount=KisSwatchGroup::DEFAULT_ROW_COUNT)
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
void sigPaletteChanged()
sigPaletteChanged emitted when the palette associated with the model is changed for another palette
QStringList mimeTypes() const override
QMimeData * mimeData(const QModelIndexList &indexes) const override
void setSwatch(const KisSwatch &entry, const QModelIndex &index)
void writeToStream(QDataStream &stream, const QString &groupName, int originalRow, int originalColumn)
static KisSwatch fromByteArray(QByteArray &data, QString &groupName, int &originalRow, int &originalColumn)
static const QString GLOBAL_GROUP_NAME
static QString toQString(const KoColor &color)
toQString create a user-visible string of the channel names and the channel values
static KoColorDisplayRendererInterface * instance()