Krita Source Code Documentation
Loading...
Searching...
No Matches
wdg_resource_preview.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
7#include "ui_wdgresourcepreview.h"
9
10#include <QAction>
11#include <QDebug>
12#include <QItemSelection>
13#include <QMenu>
14#include <QMenuBar>
15#include <QPainter>
16#include <QLabel>
17#include <QCompleter>
18#include <QLineEdit>
19
20#include <kis_action.h>
21#include <kis_action_manager.h>
22#include <kis_icon.h>
24#include <KisStorageModel.h>
25#include <KisTagModel.h>
27#include <KisResourceLocator.h>
28#include <KisResourceModel.h>
30#include <kis_assert.h>
32#include <wdgtagselection.h>
33#include <kis_paintop_factory.h>
35#include <dlg_create_bundle.h>
36#include <ResourceImporter.h>
37#include <KoIcon.h>
39#include <kis_config.h>
41
42#include <config-seexpr.h>
43
44
46 QWidget(parent),
47 m_ui(new Ui::WdgResourcePreview),
48 m_type(type)
49
50{
51 m_ui->setupUi(this);
52
53 m_ui->resourceItemView->setFixedToolTipThumbnailSize(QSize(128, 128));
54
57 m_ui->cmbResourceType->setModel(m_resourceTypeModel);
58 m_ui->cmbResourceType->setModelColumn(KisResourceTypeModel::Name);
59 for (int i = 0; i < m_resourceTypeModel->rowCount(); i++) {
60 QModelIndex idx = m_resourceTypeModel->index(i, 0);
61 QString resourceType = m_resourceTypeModel->data(idx, Qt::UserRole + KisResourceTypeModel::ResourceType).toString();
62 if (resourceType == "paintoppresets") {
63 m_ui->cmbResourceType->setCurrentIndex(i);
64 break;
65 }
66 }
67 } else {
69 #if defined HAVE_SEEXPR
70 resourceTypes << ResourceType::SeExprScripts;
71 #endif
73
74 for (int i = 0; i < resourceTypes.size(); i++) {
75 m_ui->cmbResourceType->addItem(ResourceName::resourceTypeToName(resourceTypes[i]));
76 m_ui->cmbResourceType->setItemData(m_ui->cmbResourceType->count()-1, resourceTypes[i], Qt::UserRole + KisResourceTypeModel::ResourceType);
77 }
78 }
79
80 connect(m_ui->cmbResourceType, SIGNAL(activated(int)), SLOT(slotResourceTypeSelected(int)));
81 connect(m_ui->cmbResourceType, SIGNAL(activated(int)), SIGNAL(resourceTypeSelected(int)));
82
83 QString selectedResourceType = getCurrentResourceType();
84
85
86 KisTagModel* tagModel = new KisTagModel(selectedResourceType);
87 tagModel->sort(KisAllTagsModel::Name);
88 m_tagModelsForResourceType.insert(selectedResourceType, tagModel);
89
90 m_ui->cmbTag->setModel(tagModel);
91 m_ui->cmbTag->setModelColumn(KisAllTagsModel::Name);
92
93 connect(m_ui->cmbTag, SIGNAL(activated(int)), SLOT(slotTagSelected(int)));
94
96 m_ui->cmbStorage->setVisible(false);
97 } else {
99
100 m_ui->cmbStorage->setModel(m_storageModel);
101 m_ui->cmbStorage->setModelColumn(KisStorageModel::DisplayName);
102 connect(m_ui->cmbStorage, SIGNAL(activated(int)), SLOT(slotStorageSelected(int)));
103 }
104
105 // the model will be owned by `proxyModel`
106 KisResourceModel* resourceModel;
107
109 resourceModel = new KisResourceModel(selectedResourceType);
112
113 } else {
114
115 QString standarizedResourceType = (selectedResourceType == "presets" ? ResourceType::PaintOpPresets : selectedResourceType);
116 resourceModel = new KisResourceModel(standarizedResourceType);
117 }
118
119 KisTagFilterResourceProxyModel* proxyModel = new KisTagFilterResourceProxyModel(selectedResourceType);
120 proxyModel->setResourceModel(resourceModel);
121 proxyModel->setTagFilter(0);
123 proxyModel->setStorageFilter(true, getCurrentStorageId());
124 }
125 proxyModel->sort(KisAbstractResourceModel::Name);
126 m_resourceProxyModelsForResourceType.insert(selectedResourceType, proxyModel);
127
128 m_ui->resourceItemView->setModel(proxyModel);
130 m_ui->resourceItemView->setItemDelegate(m_kisResourceItemDelegate);
131 m_ui->resourceItemView->setSelectionMode(QAbstractItemView::ExtendedSelection);
132
134 m_ui->chkShowDeleted->setVisible(false);
135 } else {
136 connect(m_ui->chkShowDeleted, SIGNAL(stateChanged(int)), SLOT(slotShowDeletedChanged(int)));
137 }
138
139 connect(m_ui->lneFilterText, SIGNAL(textChanged(const QString&)), SLOT(slotFilterTextChanged(const QString&)));
140
141 connect(m_ui->resourceItemView, SIGNAL(currentResourceChanged(QModelIndex)), SIGNAL(signalResourcesSelectionChanged(QModelIndex)));
142
143 KisResourceItemViewer *viewModeButton;
144
146 viewModeButton = new KisResourceItemViewer(Viewer::TableAvailable, this);
147 } else {
148 viewModeButton = new KisResourceItemViewer(Viewer::ResourceManager, this);
149 }
150
151 KisConfig cfg(true);
152
154 m_mode = (cfg.readEntry<quint32>("ResourceItemsBCSearch.viewMode", 1) == 1)? ListViewMode::IconGrid : ListViewMode::Detail;
155 } else {
156 m_mode = (cfg.readEntry<quint32>("ResourceItemsRM.viewMode", 1) == 1)? ListViewMode::IconGrid : ListViewMode::Detail;
157 }
158
159 connect(viewModeButton, SIGNAL(onViewThumbnail()), this, SLOT(slotViewThumbnail()));
160 connect(viewModeButton, SIGNAL(onViewDetails()), this, SLOT(slotViewDetails()));
161
163 QLabel *label = new QLabel("Search");
164 m_ui->horizontalLayout_2->addWidget(label);
165 } else {
166 m_ui->horizontalLayout_2->setAlignment(Qt::AlignRight);
167 }
168 m_ui->horizontalLayout_2->addWidget(viewModeButton);
169
172 } else {
174 }
175
176}
177
185
187{
189 m_ui->resourceItemView->setItemDelegate(m_kisResourceItemDelegate);
190 m_ui->resourceItemView->setListViewMode(ListViewMode::IconGrid);
191}
192
194{
196 m_ui->resourceItemView->setItemDelegate(m_kisResourceItemDelegate);
197 m_ui->resourceItemView->setListViewMode(ListViewMode::Detail);
198}
199
201{
202
203 QString selectedResourceType = getCurrentResourceType();
204 if (!m_tagModelsForResourceType.contains(selectedResourceType)) {
205 m_tagModelsForResourceType.insert(selectedResourceType, new KisTagModel(selectedResourceType));
206 m_tagModelsForResourceType[selectedResourceType]->sort(KisAllTagsModel::Name);
207 }
208
209 m_ui->cmbTag->setModel(m_tagModelsForResourceType[selectedResourceType]);
210
211 if (!m_resourceProxyModelsForResourceType.contains(selectedResourceType)) {
212 // the model will be owned by `proxyModel`
213 KisResourceModel* resourceModel;
215 resourceModel = new KisResourceModel(selectedResourceType);
216 KIS_SAFE_ASSERT_RECOVER_RETURN(resourceModel);
219 } else {
220 QString standarizedResourceType = (selectedResourceType == "presets" ? ResourceType::PaintOpPresets : selectedResourceType);
221 resourceModel = new KisResourceModel(standarizedResourceType);
222 KIS_SAFE_ASSERT_RECOVER_RETURN(resourceModel);
223 }
224
225 KisTagFilterResourceProxyModel* proxyModel = new KisTagFilterResourceProxyModel(selectedResourceType);
227 proxyModel->setResourceModel(resourceModel);
228 proxyModel->sort(KisAbstractResourceModel::Name);
229 m_resourceProxyModelsForResourceType.insert(selectedResourceType, proxyModel);
230 }
231
234 }
235 m_resourceProxyModelsForResourceType[selectedResourceType]->setTagFilter(getCurrentTag());
236
237 m_ui->resourceItemView->setModel(m_resourceProxyModelsForResourceType[selectedResourceType]);
238
239 if (selectedResourceType == ResourceType::Gradients) {
240 m_ui->resourceItemView->setFixedToolTipThumbnailSize(QSize(256, 64));
241 m_ui->resourceItemView->setToolTipShouldRenderCheckers(true);
242 }
243 else if (selectedResourceType == ResourceType::PaintOpPresets) {
244 m_ui->resourceItemView->setFixedToolTipThumbnailSize(QSize(128, 128));
245 } else if (selectedResourceType == ResourceType::Patterns || selectedResourceType == ResourceType::Palettes) {
246 m_ui->resourceItemView->setFixedToolTipThumbnailSize(QSize(256, 256));
247 m_ui->resourceItemView->setToolTipShouldRenderCheckers(false);
248 }
249}
264
265void WdgResourcePreview::slotFilterTextChanged(const QString& filterText)
266{
269 }
270}
280
282{
283 return m_ui->cmbResourceType->currentData(Qt::UserRole + KisResourceTypeModel::ResourceType).toString();
284}
285
287{
288 return m_ui->cmbTag->currentData(Qt::UserRole + KisAllTagsModel::KisTagRole).value<KisTagSP>();
289}
290
292{
293 QModelIndexList list = m_ui->resourceItemView->selectionModel()->selection().indexes();
294 return list;
295}
296
297QMap<QString, KisTagFilterResourceProxyModel*> WdgResourcePreview::getResourceProxyModelsForResourceType()
298{
300}
301
303{
304 return m_ui->cmbStorage->currentData(Qt::UserRole + KisStorageModel::Id).toInt();
305}
306
307QAbstractItemModel* WdgResourcePreview::getModel()
308{
309 return m_ui->resourceItemView->model();
310}
QList< QString > QStringList
@ ResourceManager
@ TableAvailable
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
T readEntry(const QString &name, const T &defaultValue=T())
Definition kis_config.h:789
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...
void setStorageFilter(StorageFilter filter) override
void setResourceFilter(ResourceFilter filter) override
QVariant data(const QModelIndex &index, int role) const override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
The KisTagFilterResourceProxyModel class filters the resources by tag or resource name.
void setResourceModel(KisResourceModel *resourceModel)
void setTagFilter(const KisTagSP tag)
setTagFilter sets the tag to filter with
void setStorageFilter(StorageFilter filter) override
KisResourceTypeModel * m_resourceTypeModel
Ui::WdgResourcePreview * m_ui
QMap< QString, KisTagModel * > m_tagModelsForResourceType
void signalResourcesSelectionChanged(QModelIndex selected)
QMap< QString, KisTagFilterResourceProxyModel * > getResourceProxyModelsForResourceType()
void resourceTypeSelected(int)
WdgResourcePreview(WidgetType type, QWidget *parent=nullptr)
KisStorageModel * m_storageModel
void slotFilterTextChanged(const QString &filterText)
void slotShowDeletedChanged(int newState)
QMap< QString, KisTagFilterResourceProxyModel * > m_resourceProxyModelsForResourceType
KisResourceItemDelegate * m_kisResourceItemDelegate
QModelIndexList getResourceItemsSelected()
QAbstractItemModel * getModel()
QSharedPointer< KisTag > getCurrentTag()
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
KRITARESOURCES_EXPORT QString resourceTypeToName(const QString &resourceType)
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