Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPaletteChooser.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013 Sven Langkamp <sven.langkamp@gmail.com>
3 * SPDX-FileCopyrightText: 2018 Michael Zhou <simeirxh@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#include <QGridLayout>
9#include <QFile>
10#include <QMessageBox>
11#include <QInputDialog>
12#include <QDir>
13
14#include <kis_icon.h>
15#include <KoFileDialog.h>
16
17#include <KisResourceModel.h>
19
20#include <ui_WdgPaletteListWidget.h>
21#include "KisPaletteChooser.h"
22#include "KisPaletteChooser_p.h"
23
25 : QWidget(parent)
26 , m_ui(new Ui_WdgPaletteListWidget)
27 , m_d(new KisPaletteChooserPrivate(this))
28{
29 m_d->actAdd.reset(new QAction(KisIconUtils::loadIcon("list-add"),
30 i18n("Add a new palette")));
31 m_d->actRemove.reset(new QAction(KisIconUtils::loadIcon("edit-delete"),
32 i18n("Remove current palette")));
33 m_d->actImport.reset(new QAction(KisIconUtils::loadIcon("document-import-16"),
34 i18n("Import a new palette from file")));
35 m_d->actExport.reset(new QAction(KisIconUtils::loadIcon("document-export-16"),
36 i18n("Export current palette to file")));
37 m_ui->setupUi(this);
38 m_ui->bnAdd->setDefaultAction(m_d->actAdd.data());
39 m_ui->bnRemove->setDefaultAction(m_d->actRemove.data());
40 m_ui->bnImport->setDefaultAction(m_d->actImport.data());
41 m_ui->bnExport->setDefaultAction(m_d->actExport.data());
42
43 m_ui->bnAdd->setAutoRaise(true);
44 m_ui->bnRemove->setAutoRaise(true);
45 m_ui->bnImport->setAutoRaise(true);
46 m_ui->bnExport->setAutoRaise(true);
47
48 connect(m_d->actAdd.data(), SIGNAL(triggered()), SLOT(slotAdd()));
49 connect(m_d->actRemove.data(), SIGNAL(triggered()), SLOT(slotRemove()));
50 connect(m_d->actImport.data(), SIGNAL(triggered()), SLOT(slotImport()));
51 connect(m_d->actExport.data(), SIGNAL(triggered()), SLOT(slotExport()));
52
53 m_d->itemChooser->setItemDelegate(m_d->delegate.data());
54 m_d->itemChooser->setRowHeight(40);
55 m_d->itemChooser->setListViewMode(ListViewMode::Detail);
56 m_d->itemChooser->showImportExportBtns(false);
57 m_d->itemChooser->showTaggingBar(true);
58 QHBoxLayout *paletteLayout = new QHBoxLayout(m_ui->viewPalette);
59 paletteLayout->addWidget(m_d->itemChooser.data());
60
61 m_d->itemChooser->setCurrentItem(0);
62
63 connect(m_d->itemChooser.data(), SIGNAL(resourceSelected(KoResourceSP )), SLOT(paletteSelected(KoResourceSP )));
64}
65
68
70{
71 m_d->itemChooser->setCurrentResource(currentResource);
72}
73
75{
76 KoColorSetSP g = r.staticCast<KoColorSet>();
77 Q_EMIT sigPaletteSelected(g);
78 m_ui->bnRemove->setEnabled(true);
79}
80
82{
83 // Don't select any palette,
84 // because it doesn't need to be added at the end of the list.
85 // The PaletteEditor will select the newly added palette.
86 Q_EMIT sigAddPalette();
87}
88
90{
91 if (m_d->itemChooser->currentResource()) {
92 KoColorSetSP cs = m_d->itemChooser->currentResource().staticCast<KoColorSet>();
93 Q_EMIT sigRemovePalette(cs);
94 }
95 m_d->itemChooser->setCurrentItem(0);
96}
97
99{
100 Q_EMIT sigImportPalette();
101}
102
104{
105 if (!m_d->itemChooser->currentResource()) {
106 m_d->itemChooser->setCurrentItem(0);
107 }
108 KoColorSetSP palette = m_d->itemChooser->currentResource().dynamicCast<KoColorSet>();
110}
111
112/************************* KisPaletteChooserPrivate **********************/
113
115 : c(a_c)
116 , itemChooser(new KisResourceItemChooser(ResourceType::Palettes, false, a_c))
117 , delegate(new Delegate(a_c))
118{ }
119
122
123/******************* KisPaletteChooserPrivate::Delegate ******************/
124
126 : QAbstractItemDelegate(parent)
127{ }
128
131
133 const QStyleOptionViewItem &option,
134 const QModelIndex &index) const
135{
136 painter->save();
137 if (!index.isValid())
138 return;
139
140 QImage preview = index.data(Qt::UserRole + KisAbstractResourceModel::Thumbnail).value<QImage>();
141 QString name = index.data(Qt::UserRole + KisAbstractResourceModel::Name).toString();
142
143 QRect previewRect(option.rect.x() + 2,
144 option.rect.y() + 2,
145 option.rect.height() - 4,
146 option.rect.height() - 4);
147
148 painter->drawImage(previewRect, preview);
149
150 if (option.state & QStyle::State_Selected) {
151 painter->fillRect(option.rect, option.palette.highlight());
152 painter->drawImage(previewRect, preview);
153 painter->setPen(option.palette.highlightedText().color());
154 } else {
155 painter->setPen(option.palette.text().color());
156 }
157
158 painter->drawText(option.rect.x() + previewRect.width() + 10,
159 option.rect.y() + painter->fontMetrics().ascent() + 5,
160 name);
161
162 painter->restore();
163}
164
165inline QSize KisPaletteChooserPrivate::Delegate::sizeHint(const QStyleOptionViewItem & option,
166 const QModelIndex &) const
167{
168 return option.decorationSize;
169}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &) const override
void sigPaletteSelected(KoColorSetSP)
KisPaletteChooser(QWidget *parent=nullptr)
void paletteSelected(KoResourceSP)
void sigExportPalette(KoColorSetSP)
void sigRemovePalette(KoColorSetSP)
QScopedPointer< Ui_WdgPaletteListWidget > m_ui
void setCurrentItem(KoResourceSP currentResource)
QScopedPointer< KisPaletteChooserPrivate > m_d
QIcon loadIcon(const QString &name)
rgba palette[MAX_PALETTE]
Definition palette.c:35
KisPaletteChooserPrivate(KisPaletteChooser *)