Krita Source Code Documentation
Loading...
Searching...
No Matches
page_resource_chooser.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Srirupa Datta <srirupa.sps@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8#include "ui_pageresourcechooser.h"
11#include <kis_config.h>
12#include "dlg_create_bundle.h"
13
14#include <QPainter>
15#include <QDebug>
16#include <QLabel>
17#include <QScrollBar>
18#include <QScrollArea>
19#include <QListWidgetItem>
20
21#include <KisResourceModel.h>
27
28#include <config-seexpr.h>
29
30#define ICON_SIZE 56
31
33 QWizardPage(parent),
34 m_ui(new Ui::PageResourceChooser)
35 , m_bundle(bundle)
36{
37 m_ui->setupUi(this);
38
40 m_ui->formLayout->addWidget(m_wdgResourcePreview);
41
42 connect(m_wdgResourcePreview, SIGNAL(signalResourcesSelectionChanged(QModelIndex)), this, SLOT(slotResourcesSelectionChanged(QModelIndex)));
43 connect(m_wdgResourcePreview, SIGNAL(resourceTypeSelected(int)), this, SLOT(slotResourceTypeSelected(int)));
44
46 m_ui->verticalLayout_2->insertWidget(1, m_resourceItemWidget);
47
51
52 connect(m_ui->btnRemoveSelected, SIGNAL(clicked(bool)), this, SLOT(slotRemoveSelected(bool)));
53
54 KisResourceItemViewer *viewModeButton;
55 viewModeButton = new KisResourceItemViewer(Viewer::TableSelected, this);
56
57 KisConfig cfg(true);
58 m_mode = (cfg.readEntry<quint32>("ResourceItemsBCSelected.viewMode", 1) == 1)? ListViewMode::IconGrid : ListViewMode::Detail;
59
60
61 connect(viewModeButton, SIGNAL(onViewThumbnail()), this, SLOT(slotViewThumbnail()));
62 connect(viewModeButton, SIGNAL(onViewDetails()), this, SLOT(slotViewDetails()));
63
64 QLabel *label = new QLabel("Selected");
65 m_ui->horizontalLayout_2->addWidget(label);
66 m_ui->horizontalLayout_2->addWidget(viewModeButton);
67
70 } else {
72 }
73
74 m_resourceItemWidget->clear();
75
76 if (m_bundle) {
77
78 m_bundleStorage = new KisBundleStorage(m_bundle->filename());
79
81 #if defined HAVE_SEEXPR
82 resourceTypes << ResourceType::SeExprScripts;
83 #endif
85
86
87 for (int i = 0; i < resourceTypes.size(); i++) {
90 auto resourceSourceAdapter = resourcesInterface->source<KoResource>(resourceTypes[i]);
91 while (iter->hasNext()) {
92 iter->next();
93 KoResourceSP res = resourceSourceAdapter.bestMatch(iter->resource()->md5Sum(false), iter->resource()->filename(), iter->resource()->name());
94 if (!res.isNull()) {
95 m_selectedResourcesIds.append(res->resourceId());
96 }
97 }
98 }
99
100
101 QString standarizedResourceType = ResourceType::Brushes;
102
103 KisResourceModel model(standarizedResourceType);
104 for (int i = 0; i < model.rowCount(); i++) {
105 QModelIndex idx = model.index(i, 0);
106 int id = model.data(idx, Qt::UserRole + KisAbstractResourceModel::Id).toInt();
107
108 if (m_selectedResourcesIds.contains(id)) {
109 selectResource(&model, idx);
110 }
111 }
112
113 m_resourceItemWidget->sortItems();
114 }
115
116}
117
118void PageResourceChooser::updateResources(QString resourceType, int count)
119{
120 DlgCreateBundle *wizard = qobject_cast<DlgCreateBundle*>(this->wizard());
121 if (wizard) {
122 wizard->m_count[resourceType] = count;
123 qDebug() << resourceType << ": " << count;
124 }
125 Q_EMIT countUpdated();
126
127}
128
135
142
144{
145 Q_UNUSED(selected);
146
149
150
151 Q_FOREACH (QModelIndex idx, list) {
152 int id = proxyModel->data(idx, Qt::UserRole + KisAllResourcesModel::Id).toInt();
153 if (!m_selectedResourcesIds.contains(id)) {
154 selectResource(proxyModel, idx);
155 m_selectedResourcesIds.append(id);
156 updateCount(true);
157 }
158 }
159
160 m_resourceItemWidget->sortItems();
161}
162
164{
165 Q_UNUSED(idx);
166
167 QString resourceType = m_wdgResourcePreview->getCurrentResourceType();
168 m_resourceItemWidget->clear();
169 QString standarizedResourceType = (resourceType == "presets" ? ResourceType::PaintOpPresets : resourceType);
170
171 KisResourceModel model(standarizedResourceType);
172 for (int i = 0; i < model.rowCount(); i++) {
173 QModelIndex idx = model.index(i, 0);
174 int id = model.data(idx, Qt::UserRole + KisAbstractResourceModel::Id).toInt();
175
176 if (m_selectedResourcesIds.contains(id)) {
177 selectResource(&model, idx);
178 }
179 }
180
181 m_resourceItemWidget->sortItems();
182}
183
184void PageResourceChooser::selectResource(QSortFilterProxyModel *model, const QModelIndex idx)
185{
186 QString name = model->data(idx, Qt::UserRole + KisAllResourcesModel::Name).toString();
187
188 // Don't try to bundle special resources
189 QString resourceType = m_wdgResourcePreview->getCurrentResourceType();
190 if (resourceType == ResourceType::Gradients) {
191 if (name == "Foreground to Transparent" || name == "Foreground to Background") {
192 return;
193 }
194 }
195
196 int id = model->data(idx, Qt::UserRole + KisAllResourcesModel::Id).toInt();
197 QRect paintRect = QRect(0, 0, ICON_SIZE, ICON_SIZE);
198 QPixmap pixmap(paintRect.size() * devicePixelRatioF());
199 pixmap.setDevicePixelRatio(devicePixelRatioF());
200 QPainter painter(&pixmap);
201 KisResourceThumbnailPainter().paint(&painter, idx, paintRect, this->palette(), false, true);
202
203 QListWidgetItem *item = new QListWidgetItem(pixmap, name);
204 item->setData(Qt::UserRole, id);
205 item->setData(Qt::UserRole + KisAbstractResourceModel::Name, name);
206
207 m_resourceItemWidget->addItem(item);
208}
209
211{
212 int row = m_resourceItemWidget->currentRow();
213
214 Q_FOREACH (QListWidgetItem *item, m_resourceItemWidget->selectedItems()) {
215 m_resourceItemWidget->takeItem(m_resourceItemWidget->row(item));
216 m_selectedResourcesIds.removeAll(item->data(Qt::UserRole).toInt());
217 updateCount(false);
218 }
219
220 m_resourceItemWidget->setCurrentRow(row);
221}
222
227
229{
230 DlgCreateBundle *wizard = qobject_cast<DlgCreateBundle*>(this->wizard());
231 if (wizard) {
233 }
234
235 Q_EMIT countUpdated();
236}
237
QList< QString > QStringList
@ TableSelected
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QMap< QString, int > m_count
QSharedPointer< KisResourceStorage::ResourceIterator > resources(const QString &resourceType) override
T readEntry(const QString &name, const T &defaultValue=T())
Definition kis_config.h:789
static KisResourcesInterfaceSP instance()
The resource item delegate for rendering the resource preview.
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...
The resource item delegate for rendering the resource preview.
void paint(QPainter *painter, const QModelIndex &index, QRect rect, const QPalette &palette, bool selected, bool addMargin) const
The KisTagFilterResourceProxyModel class filters the resources by tag or resource name.
KisResourceItemDelegate * m_kisResourceItemDelegate
Ui::PageResourceChooser * m_ui
QList< int > getSelectedResourcesIds()
KisBundleStorage * m_bundleStorage
void slotResourcesSelectionChanged(QModelIndex selected)
PageResourceChooser(KoResourceBundleSP bundle=nullptr, QWidget *parent=nullptr)
KoResourceBundleSP m_bundle
void selectResource(QSortFilterProxyModel *model, const QModelIndex idx)
QList< int > m_selectedResourcesIds
void updateResources(QString resourceType, int count)
WdgResourcePreview * m_wdgResourcePreview
KisResourceItemListWidget * m_resourceItemWidget
QMap< QString, KisTagFilterResourceProxyModel * > getResourceProxyModelsForResourceType()
QModelIndexList getResourceItemsSelected()
const QString Palettes
const QString CssStyles
const QString Brushes
const QString GamutMasks
const QString Patterns
const QString SeExprScripts
const QString Gradients
const QString Workspaces
const QString PaintOpPresets
rgba palette[MAX_PALETTE]
Definition palette.c:35
#define ICON_SIZE
void setListViewMode(ListViewMode layout)