Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_wdg_generator.cpp
Go to the documentation of this file.
1/* This file is part of the KDE project
2 *
3 * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
9
10#include <QListWidget>
11#include <QListWidgetItem>
12#include <QLabel>
13#include <QString>
14#include <QGridLayout>
15#include <QStringList>
16
17#include <kis_image.h>
18#include <kis_paint_device.h>
21#include <kis_config_widget.h>
25
26#include "ui_wdggenerators.h"
27
28class KisGeneratorItem : public QListWidgetItem
29{
30public:
31
32 KisGeneratorItem(KisGeneratorSP _generator, QListWidget *parent = nullptr, int type = Type)
33 : QListWidgetItem(_generator->name(), parent, type)
34 , generator(_generator)
35 {
37 }
38
41};
42
44{
45
46public:
47
48 QWidget * centralWidget {nullptr}; // Active generator settings widget
50 Ui_WdgGenerators uiWdgGenerators;
52 QGridLayout *widgetLayout {nullptr};
53 KisViewManager *view {nullptr};
54};
55
57 : QWidget(parent)
58 , d(new Private())
59{
61}
62
67
69{
70 d->view = view;
71 d->uiWdgGenerators.setupUi(this);
72 d->widgetLayout = new QGridLayout(d->uiWdgGenerators.centralWidgetHolder);
73 d->widgetLayout->setContentsMargins(0, 0, 0, 0);
74 d->widgetLayout->setHorizontalSpacing(0);
76 generatorNames.sort();
77
78 Q_FOREACH (const QString &generatorName, generatorNames) {
79
80 KisGeneratorSP generator = KisGeneratorRegistry::instance()->get(generatorName);
81 // The item is automatically added to the lstGenerators listwidget
82 new KisGeneratorItem(generator,
83 d->uiWdgGenerators.lstGenerators,
84 QListWidgetItem::UserType + 1);
85
86 }
87 connect(d->uiWdgGenerators.lstGenerators, SIGNAL(currentRowChanged(int)),
88 this, SLOT(slotGeneratorActivated(int)));
89
90 if (d->uiWdgGenerators.lstGenerators->count() > 0) {
91 d->uiWdgGenerators.lstGenerators->setCurrentRow(0);
92 }
93}
94
95
96
98{
99 for (int i = 0; i < d->uiWdgGenerators.lstGenerators->count(); ++i) {
100 KisGeneratorItem * item = static_cast<KisGeneratorItem*>(d->uiWdgGenerators.lstGenerators->item(i));
101 if (item->generator->id() == config->name()) {
102 // match!
104 d->uiWdgGenerators.lstGenerators->setCurrentRow(i);
105 KisConfigWidget * wdg = dynamic_cast<KisConfigWidget*>(d->centralWidget);
106 if (wdg) {
107 wdg->setConfiguration(config);
108 }
109
110 return;
111 }
112 }
113}
114
116{
117 KisConfigWidget * wdg = dynamic_cast<KisConfigWidget*>(d->centralWidget);
118 if (wdg) {
119 KisFilterConfigurationSP config = dynamic_cast<KisFilterConfiguration*>(wdg->configuration().data());
120 if (config) {
121 return config;
122 }
123 } else {
125 }
126 return nullptr;
127}
128
129
131{
132 // Store the old settings
133 KisConfigWidget *wdg = dynamic_cast<KisConfigWidget*>(d->centralWidget);
134 if (wdg) {
136 for (int i = 0; i < d->uiWdgGenerators.lstGenerators->count(); ++i) {
137 KisGeneratorItem * item = static_cast<KisGeneratorItem*>(d->uiWdgGenerators.lstGenerators->item(i));
138 if (item->generator->id() == static_cast<KisFilterConfiguration*>(config.data())->name()) {
139 item->currentConfiguration = wdg->configuration();
140 }
141 }
142 }
143
144 // Retrieve the new configuration
145 KisGeneratorItem *item = dynamic_cast<KisGeneratorItem*>(d->uiWdgGenerators.lstGenerators->item(row));
146
147 if (!item) {
148 d->centralWidget = new QLabel(i18n("No configuration options."), d->uiWdgGenerators.centralWidgetHolder);
149 }
150 else {
151
153
154 delete d->centralWidget;
155
156 KisConfigWidget* widget =
157 d->currentGenerator->createConfigurationWidget(d->uiWdgGenerators.centralWidgetHolder, d->dev, true);
158
159 if (!widget) { // No widget, so display a label instead
160 d->centralWidget = new QLabel(i18n("No configuration options."),
161 d->uiWdgGenerators.centralWidgetHolder);
162 } else {
163 d->centralWidget = widget;
164
165 connect( widget, SIGNAL(sigConfigurationUpdated()), this, SIGNAL(previewConfiguration()));
166
167 widget->setView(d->view);
169 }
170 }
171 d->widgetLayout->addWidget(d->centralWidget, 0 , 0);
172 d->uiWdgGenerators.centralWidgetHolder->setMinimumSize(d->centralWidget->minimumSize());
173}
174
176{
177 d->uiWdgGenerators.lstGenerators->setVisible(visible);
178}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
virtual void setView(KisViewManager *view)
virtual KisPropertiesConfigurationSP configuration() const =0
virtual void setConfiguration(const KisPropertiesConfigurationSP config)=0
KisGeneratorSP generator
KisPropertiesConfigurationSP currentConfiguration
KisGeneratorItem(KisGeneratorSP _generator, QListWidget *parent=nullptr, int type=Type)
static KisGeneratorRegistry * instance()
static KisResourcesInterfaceSP instance()
KisWdgGenerator(QWidget *parent)
void setConfiguration(const KisFilterConfigurationSP config)
void slotGeneratorActivated(int)
~KisWdgGenerator() override
Private *const d
KisFilterConfigurationSP configuration()
void initialize(KisViewManager *view)
void previewConfiguration()
T get(const QString &id) const
QList< QString > keys() const
virtual KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const
virtual KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const
static KoColorSpaceRegistry * instance()