Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGradientChooser.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2004 Adrian Page <adrian@pagenet.plus.com>
3 * SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#include <QPushButton>
9#include <QVBoxLayout>
10#include <QMenu>
11#include <QMessageBox>
12#include <QSlider>
13#include <QWidgetAction>
14#include <QSet>
15#include <QBuffer>
16#include <QActionGroup>
17
18#include <klocalizedstring.h>
20#include <KoResource.h>
23#include <KisKineticScroller.h>
24#include <KoStopGradient.h>
28#include <kis_icon.h>
29#include <kis_config.h>
30#include <kis_signals_blocker.h>
34#include "KisPopupButton.h"
38
41
42#include <ksharedconfig.h>
43#include <kconfiggroup.h>
44#include <ksqueezedtextlabel.h>
45
46#include "KisGradientChooser.h"
47
49{
50 Q_OBJECT
51
52public:
54 QWidget *parent,
55 const char *name,
56 KoCanvasResourcesInterfaceSP canvasResourcesInterface);
57
58private:
59 QWidget * m_page {0};
60};
61
63 QWidget *parent,
64 const char *name,
65 KoCanvasResourcesInterfaceSP canvasResourcesInterface)
66 : KoDialog(parent, Qt::Dialog)
67{
70 setObjectName(name);
71 setModal(false);
72
73 connect(this, SIGNAL(okClicked()), this, SLOT(accept()));
74 connect(this, SIGNAL(cancelClicked()), this, SLOT(reject()));
75
76 KoStopGradientSP stopGradient = gradient.dynamicCast<KoStopGradient>();
77 if (stopGradient) {
78 m_page = new KisStopGradientEditor(stopGradient, this, "autogradient", i18n("Custom Stop Gradient"), canvasResourcesInterface);
79 }
80 else {
81 KoSegmentGradientSP segmentedGradient = gradient.dynamicCast<KoSegmentGradient>();
82 if (segmentedGradient) {
83 m_page = new KisSegmentGradientEditor(segmentedGradient, this, "autogradient", i18n("Custom Segmented Gradient"), canvasResourcesInterface);
84 }
85 }
86
88
89 setCaption(m_page->windowTitle());
91}
92
93class Q_DECL_HIDDEN KisGradientChooser::Private : public QObject
94{
95 Q_OBJECT
96
97public:
99 {
100 ViewMode viewMode{ViewMode_Icon};
101 ItemSize itemSize{ItemSize_Medium};
102 int itemSizeCustom{32};
103 static constexpr int itemSizeSmall{32};
104 static constexpr int itemSizeMedium{48};
105 static constexpr int itemSizeLarge{64};
106 static constexpr qreal itemSizeWidthFactor{2.0};
107 };
108
110 KSqueezedTextLabel *labelName;
112
114
116 QToolButton *buttonAddGradient;
117 QPushButton *buttonEditGradient;
118
127
130 static QSet<KisGradientChooser*> globalChoosers;
132
135
136public Q_SLOTS:
137 void update(KoResourceSP resource);
141 void addGradient(KoAbstractGradientSP gradient, bool editGradient = false);
142
143 void on_actionGroupViewMode_triggered(QAction *triggeredAction);
144 void on_actionGroupItemSize_triggered(QAction *triggeredAction);
146
147public:
148 void updatePresetChooser(bool globalUpdate = true);
151};
152KisGradientChooser::Private::ViewOptions KisGradientChooser::Private::globalViewOptions;
153QSet<KisGradientChooser*> KisGradientChooser::Private::globalChoosers;
154
155KisGradientChooser::KisGradientChooser(QWidget *parent, const char *name, bool useGlobalViewOptions)
156 : QFrame(parent)
157 , m_d(new Private)
158{
159 setObjectName(name);
160
161 m_d->q = this;
162
163 // Name label
164 m_d->labelName = new KSqueezedTextLabel;
165 m_d->labelName->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
166
167 // Resource Item Chooser
168 m_d->itemChooser = new KisResourceItemChooser(ResourceType::Gradients, false, this);
169 m_d->itemChooser->showTaggingBar(true);
170 m_d->itemChooser->showViewModeBtn(true);
171
172 // View menu
173 QActionGroup *actionGroupViewMode = new QActionGroup(this);
174 m_d->actionViewModeIcon = new QAction(this);
175 m_d->actionViewModeIcon->setCheckable(true);
176 m_d->actionViewModeIcon->setActionGroup(actionGroupViewMode);
177 m_d->actionViewModeIcon->setText(
178 i18nc("Set the gradient chooser to show icons instead of a list", "Icon view")
179 );
180 m_d->actionViewModeList = new QAction(this);
181 m_d->actionViewModeList->setCheckable(true);
182 m_d->actionViewModeList->setActionGroup(actionGroupViewMode);
183 m_d->actionViewModeList->setText(
184 i18nc("Set the gradient chooser to show a list instead of icons", "List view")
185 );
186 QAction *separatorViewMode1 = new QAction(this);
187 separatorViewMode1->setSeparator(true);
188 QActionGroup *actionGroupItemSize = new QActionGroup(this);
189 m_d->actionItemSizeSmall = new QAction(this);
190 m_d->actionItemSizeSmall->setCheckable(true);
191 m_d->actionItemSizeSmall->setActionGroup(actionGroupItemSize);
192 m_d->actionItemSizeSmall->setText(
193 i18nc("Set the gradient chooser to show small items", "Small items")
194 );
195 m_d->actionItemSizeMedium = new QAction(this);
196 m_d->actionItemSizeMedium->setCheckable(true);
197 m_d->actionItemSizeMedium->setActionGroup(actionGroupItemSize);
198 m_d->actionItemSizeMedium->setText(
199 i18nc("Set the gradient chooser to show medium size items", "Medium size items")
200 );
201 m_d->actionItemSizeLarge = new QAction(this);
202 m_d->actionItemSizeLarge->setCheckable(true);
203 m_d->actionItemSizeLarge->setActionGroup(actionGroupItemSize);
204 m_d->actionItemSizeLarge->setText(
205 i18nc("Set the gradient chooser to show large items", "Large items")
206 );
207 m_d->actionItemSizeCustom = new QAction(this);
208 m_d->actionItemSizeCustom->setCheckable(true);
209 m_d->actionItemSizeCustom->setActionGroup(actionGroupItemSize);
210 m_d->actionItemSizeCustom->setText(
211 i18nc("Set the gradient chooser to show custom size items", "Custom size items")
212 );
213 m_d->sliderItemSizeCustom = new QSlider(this);
214 m_d->sliderItemSizeCustom->setRange(16, 128);
215 m_d->sliderItemSizeCustom->setOrientation(Qt::Horizontal);
216 m_d->containerSliderItemSizeCustom = new QWidget(this);
217 QVBoxLayout *layoutContainerSliderItemSizeCustom = new QVBoxLayout;
218 layoutContainerSliderItemSizeCustom->addWidget(m_d->sliderItemSizeCustom);
219 m_d->containerSliderItemSizeCustom->setLayout(layoutContainerSliderItemSizeCustom);
220 QWidgetAction *widgetActionSliderItemSizeCustom = new QWidgetAction(this);
221 widgetActionSliderItemSizeCustom->setDefaultWidget(m_d->containerSliderItemSizeCustom);
222 QMenu* menu = new QMenu(this);
223 menu->setStyleSheet("margin: 6px");
224 menu->addActions(actionGroupViewMode->actions());
225 menu->addAction(separatorViewMode1);
226 menu->addActions(actionGroupItemSize->actions());
227 menu->addAction(widgetActionSliderItemSizeCustom);
228 KisPopupButton *toolButtonItemChooserViewMode = m_d->itemChooser->viewModeButton();
229 toolButtonItemChooserViewMode->setPopupWidget(menu);
230
231
232 // Edit widgets
233 QHBoxLayout* layoutEditWidgets = new QHBoxLayout;
234 layoutEditWidgets->setContentsMargins(0, 0, 0, 0);
235 m_d->containerEditWidgets = new QWidget(this);
236
237 m_d->buttonAddGradient = new QToolButton(this);
238 m_d->buttonAddGradient->setText(i18n("Add..."));
239 m_d->buttonAddGradient->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
240 layoutEditWidgets->addWidget(m_d->buttonAddGradient);
241
242 QMenu *menuAddGradient = new QMenu(m_d->buttonAddGradient);
243 QAction* addStopGradient = new QAction(i18n("Stop gradient"), this);
244 menuAddGradient->addAction(addStopGradient);
245 QAction* addSegmentedGradient = new QAction(i18n("Segmented gradient"), this);
246 menuAddGradient->addAction(addSegmentedGradient);
247
248 m_d->buttonAddGradient->setMenu(menuAddGradient);
249 m_d->buttonAddGradient->setPopupMode(QToolButton::MenuButtonPopup);
250
251 m_d->buttonEditGradient = new QPushButton();
252 m_d->buttonEditGradient->setText(i18n("Edit..."));
253 m_d->buttonEditGradient->setEnabled(false);
254 layoutEditWidgets->addWidget(m_d->buttonEditGradient);
255
256 layoutEditWidgets->addStretch(0);
257
258 m_d->containerEditWidgets->setLayout(layoutEditWidgets);
259
260 // Layout
261 QVBoxLayout *mainLayout = new QVBoxLayout(this);
262 mainLayout->setObjectName("main layout");
263 mainLayout->setContentsMargins(0, 0, 0, 0);
264 mainLayout->addWidget(m_d->labelName);
265 mainLayout->addWidget(m_d->itemChooser);
266 mainLayout->addWidget(m_d->containerEditWidgets);
267 setLayout(mainLayout);
268
269 // Resource item chooser connections
270 connect(m_d->itemChooser, SIGNAL(resourceSelected(KoResourceSP)),
271 m_d.data(), SLOT(update(KoResourceSP)));
272 connect(m_d->itemChooser, SIGNAL(resourceSelected(KoResourceSP)),
273 this, SIGNAL(resourceSelected(KoResourceSP)));
274 connect(m_d->itemChooser, SIGNAL(resourceClicked(KoResourceSP)),
275 this, SIGNAL(resourceClicked(KoResourceSP)));
276
277 // View menu
278 connect(actionGroupViewMode, SIGNAL(triggered(QAction*)),
279 m_d.data(), SLOT(on_actionGroupViewMode_triggered(QAction*)));
280 connect(actionGroupItemSize, SIGNAL(triggered(QAction*)),
281 m_d.data(), SLOT(on_actionGroupItemSize_triggered(QAction*)));
282 connect(m_d->sliderItemSizeCustom, SIGNAL(valueChanged(int)),
283 m_d.data(), SLOT(on_sliderItemSizeCustom_valueChanged(int)));
284 // Edit widgets
285 connect(m_d->buttonAddGradient, SIGNAL(clicked()), m_d.data(), SLOT(addStopGradient()));
286 connect(addStopGradient, SIGNAL(triggered(bool)), m_d.data(), SLOT(addStopGradient()));
287 connect(addSegmentedGradient, SIGNAL(triggered(bool)), m_d.data(), SLOT(addSegmentedGradient()));
288 connect(m_d->buttonEditGradient, SIGNAL(clicked()), m_d.data(), SLOT(editGradient()));
289
290 m_d->isNameLabelVisible = true;
291 m_d->areEditOptionsVisible = true;
293
294 m_d->useGlobalViewOptions = useGlobalViewOptions;
296 m_d->viewOptions = &(m_d->globalViewOptions);
297 if (m_d->globalChoosers.size() == 0) {
299 }
300 m_d->globalChoosers.insert(this);
301 } else {
302 m_d->viewOptions = new Private::ViewOptions;
303 }
304 m_d->updatePresetChooser();
305 m_d->updateContainerSliderItemSizeCustom();
306}
307
309{
310 if (m_d->useGlobalViewOptions) {
311 m_d->globalChoosers.remove(this);
312 if (m_d->globalChoosers.size() == 0) {
314 }
315 } else {
316 delete m_d->viewOptions;
317 }
318}
319
321{
322 m_d->canvasResourcesInterface = canvasResourcesInterface;
323}
324
326{
327 return m_d->canvasResourcesInterface;
328}
329
331{
332 return m_d->itemChooser->currentResource(includeHidden);
333}
334
336{
337 m_d->itemChooser->setCurrentResource(resource);
338}
339
341{
342 m_d->itemChooser->setCurrentItem(row);
343 if (currentResource())
344 m_d->update(currentResource());
345}
346
347void KisGradientChooser::loadViewSettings(const QString &prefix)
348{
349 KConfigGroup configGroup(KSharedConfig::openConfig(), "GradientChooser");
350 const QString pfx = prefix.isEmpty() ? QString("global/") : prefix + "/";
351
352 QString strViewMode = configGroup.readEntry(pfx + "viewMode", QString());
353 if (strViewMode == "icon") {
354 m_d->viewOptions->viewMode = ViewMode_Icon;
355 } else if (strViewMode == "list") {
356 m_d->viewOptions->viewMode = ViewMode_List;
357 }
358 QString strItemSize = configGroup.readEntry(pfx + "itemSize", QString());
359 if (strItemSize == "small") {
360 m_d->viewOptions->itemSize = ItemSize_Small;
361 } else if (strItemSize == "medium") {
362 m_d->viewOptions->itemSize = ItemSize_Medium;
363 } else if (strItemSize == "large") {
364 m_d->viewOptions->itemSize = ItemSize_Large;
365 } else if (strItemSize == "custom") {
366 m_d->viewOptions->itemSize = ItemSize_Custom;
367 }
368 m_d->viewOptions->itemSizeCustom = configGroup.readEntry(pfx + "itemSizeCustom", m_d->viewOptions->itemSizeCustom);
369
370 m_d->updatePresetChooser();
371}
372
373void KisGradientChooser::saveViewSettings(const QString &prefix)
374{
375 KConfigGroup configGroup(KSharedConfig::openConfig(), "GradientChooser");
376 const QString pfx = prefix.isEmpty() ? QString("global/") : prefix + "/";
377
378 if (m_d->viewOptions->viewMode == ViewMode_Icon) {
379 configGroup.writeEntry(pfx + "viewMode", "icon");
380 } else {
381 configGroup.writeEntry(pfx + "viewMode", "list");
382 }
383 if (m_d->viewOptions->itemSize == ItemSize_Small) {
384 configGroup.writeEntry(pfx + "itemSize", "small");
385 } else if (m_d->viewOptions->itemSize == ItemSize_Medium) {
386 configGroup.writeEntry(pfx + "itemSize", "medium");
387 } else if (m_d->viewOptions->itemSize == ItemSize_Large) {
388 configGroup.writeEntry(pfx + "itemSize", "large");
389 } else {
390 configGroup.writeEntry(pfx + "itemSize", "custom");
391 }
392 configGroup.writeEntry(pfx + "itemSizeCustom", m_d->viewOptions->itemSizeCustom);
393}
394
396{
397 return m_d->viewOptions->viewMode;
398}
399
401{
402 return m_d->viewOptions->itemSize;
403}
404
406{
407 return m_d->viewOptions->itemSizeCustom;
408}
409
411{
412 return m_d->itemChooser;
413}
414
416{
417 return m_d->isNameLabelVisible;
418}
419
421{
422 return m_d->areEditOptionsVisible;
423}
424
426{
427 m_d->viewOptions->viewMode = newViewMode;
428 m_d->updatePresetChooser();
429}
430
432{
433 m_d->viewOptions->itemSize = newItemSize;
434 m_d->updatePresetChooser();
435}
436
438{
439 if (newSize == m_d->viewOptions->itemSizeCustom) {
440 return;
441 }
442
443 m_d->viewOptions->itemSizeCustom = newSize;
444 m_d->updatePresetChooser();
445}
446
447void KisGradientChooser::setNameLabelVisible(bool newNameLabelVisible)
448{
449 m_d->isNameLabelVisible = newNameLabelVisible;
450 m_d->labelName->setVisible(newNameLabelVisible);
451}
452
453void KisGradientChooser::setEditOptionsVisible(bool newEditOptionsVisible)
454{
455 m_d->areEditOptionsVisible = newEditOptionsVisible;
456 m_d->containerEditWidgets->setVisible(newEditOptionsVisible);
457}
458
459
461{
462 if (m_d->buttonAddGradient && m_d->buttonEditGradient) {
463 m_d->buttonAddGradient->setIcon(KisIconUtils::loadIcon("list-add"));
464 }
465}
466
468{
469 if (e->type() == QEvent::StyleChange) {
470 m_d->updateContainerSliderItemSizeCustom();
471 }
472 return false;
473}
474
475void KisGradientChooser::Private::update(KoResourceSP resource)
476{
477 KoAbstractGradientSP gradient = resource.staticCast<KoAbstractGradient>();
478 labelName->setText(gradient ? i18n(gradient->name().toUtf8().data()) : "");
479 buttonEditGradient->setEnabled(true);
480}
481
482void KisGradientChooser::Private::addStopGradient()
483{
484 KoStopGradientSP gradient(new KoStopGradient(""));
485
487 stops << KoGradientStop(0.0, KoColor(QColor(250, 250, 0), KoColorSpaceRegistry::instance()->rgb8()), COLORSTOP)
488 << KoGradientStop(1.0, KoColor(QColor(255, 0, 0, 255), KoColorSpaceRegistry::instance()->rgb8()), COLORSTOP);
489 gradient->setType(QGradient::LinearGradient);
490 gradient->setName(i18n("unnamed"));
491 gradient->setStops(stops);
492 addGradient(gradient);
493}
494
495void KisGradientChooser::Private::addSegmentedGradient()
496{
497 KoSegmentGradientSP gradient(new KoSegmentGradient(""));
498 gradient->createSegment(INTERP_LINEAR, COLOR_INTERP_RGB, 0.0, 1.0, 0.5, Qt::black, Qt::white);
499 gradient->setName(i18n("unnamed"));
500 addGradient(gradient);
501}
502
503void KisGradientChooser::Private::addGradient(KoAbstractGradientSP gradient, bool editGradient)
504{
505 if (!gradient) return;
506
507 gradient->updateVariableColors(canvasResourcesInterface);
508
509 // so we don't affect the original gradient, if we cancel
510 KoAbstractGradientSP newGradient = gradient->clone().dynamicCast<KoAbstractGradient>();
511 KisCustomGradientDialog dialog(newGradient, q, "KisCustomGradientDialog", canvasResourcesInterface);
512
513 if (dialog.exec() == KoDialog::Accepted) {
514 if (newGradient->name().isEmpty()) {
515 return;
516 }
517
518 auto copyGradientResource = [&](KoAbstractGradientSP dst, KoAbstractGradientSP src) {
519 QBuffer buf;
520 buf.open(QIODevice::ReadWrite);
521 src->saveToDevice(&buf);
522 buf.seek(0);
523 dst->loadFromDevice(&buf, KisGlobalResourcesInterface::instance());
524 buf.close();
525 };
526
527 // we save the state, in case user cancels overwrite operation
528 KoAbstractGradientSP originalGradient = gradient->clone().dynamicCast<KoAbstractGradient>();
529
530 // apply the changes to the "current" gradient -- without this gradient won't update until clicked away
531 copyGradientResource(gradient, newGradient);
532 gradient->setFilename(gradient->name().split(" ").join("_") + gradient->defaultFileExtension());
533 gradient->setValid(true);
534 gradient->updatePreview();
535
536 // if we're editing the gradient we can overwrite it right away
537 if (editGradient) {
539 // restore the original state, if user pressed cancel above
540 copyGradientResource(gradient, originalGradient);
541 return;
542 }
543 } else {
545 // restore the original state, if user pressed cancel above
546 copyGradientResource(gradient, originalGradient);
547 return;
548 }
549 }
550 itemChooser->tagFilterModel()->sort(Qt::DisplayRole);
551 itemChooser->setCurrentResource(gradient);
552 Q_EMIT q->gradientEdited(gradient);
553 }
554}
555
556void KisGradientChooser::Private::editGradient()
557{
558 if (!(q->currentResource())) {
559 itemChooser->setCurrentItem(0);
560 }
561 Q_ASSERT(q->currentResource());
562 addGradient(q->currentResource().staticCast<KoAbstractGradient>(), true);
563}
564
565void KisGradientChooser::Private::on_actionGroupViewMode_triggered(QAction *triggeredAction)
566{
567 if (triggeredAction == actionViewModeIcon) {
568 q->setViewMode(ViewMode_Icon);
569 } else {
570 q->setViewMode(ViewMode_List);
571 }
572}
573
574void KisGradientChooser::Private::on_actionGroupItemSize_triggered(QAction *triggeredAction)
575{
576 if (triggeredAction == actionItemSizeSmall) {
577 q->setItemSize(ItemSize_Small);
578 } else if (triggeredAction == actionItemSizeMedium) {
579 q->setItemSize(ItemSize_Medium);
580 } else if (triggeredAction == actionItemSizeLarge) {
581 q->setItemSize(ItemSize_Large);
582 } else {
583 q->setItemSize(ItemSize_Custom);
584 }
585}
586
587void KisGradientChooser::Private::on_sliderItemSizeCustom_valueChanged(int newValue)
588{
589 q->setItemSizeCustom(newValue);
590 q->setItemSize(ItemSize_Custom);
591}
592
593void KisGradientChooser::Private::updatePresetChooser(bool globalUpdate)
594{
595 if (useGlobalViewOptions && globalUpdate) {
596 for (KisGradientChooser *chooser : globalChoosers) {
597 chooser->m_d->updatePresetChooser(false);
598 }
599 return;
600 }
601
602 itemChooser->itemView()->setViewMode(
603 viewOptions->viewMode == ViewMode_Icon
604 ? QListView::IconMode
605 : QListView::ListMode
606 );
607
608 updatePresetChooserIcons();
609
610 if (viewOptions->viewMode == ViewMode_Icon) {
611 actionViewModeIcon->setChecked(true);
612 } else {
613 actionViewModeList->setChecked(true);
614 }
615 if (viewOptions->itemSize == ItemSize_Small) {
616 actionItemSizeSmall->setChecked(true);
617 } else if (viewOptions->itemSize == ItemSize_Medium) {
618 actionItemSizeMedium->setChecked(true);
619 } else if (viewOptions->itemSize == ItemSize_Large) {
620 actionItemSizeLarge->setChecked(true);
621 } else {
622 actionItemSizeCustom->setChecked(true);
623 }
624 {
625 KisSignalsBlocker signalsBlocker(sliderItemSizeCustom);
626 sliderItemSizeCustom->setValue(viewOptions->itemSizeCustom);
627 }
628}
629
630void KisGradientChooser::Private::updatePresetChooserIcons()
631{
632 int itemHeight;
633 if (viewOptions->itemSize == ItemSize_Small) {
634 itemHeight = viewOptions->itemSizeSmall;
635 } else if (viewOptions->itemSize == ItemSize_Medium) {
636 itemHeight = viewOptions->itemSizeMedium;
637 } else if (viewOptions->itemSize == ItemSize_Large) {
638 itemHeight = viewOptions->itemSizeLarge;
639 } else {
640 itemHeight = viewOptions->itemSizeCustom;
641 }
642 itemChooser->setRowHeight(itemHeight);
643 itemChooser->setColumnWidth(
644 static_cast<int>(qRound(itemHeight * viewOptions->itemSizeWidthFactor))
645 );
646}
647
648void KisGradientChooser::Private::updateContainerSliderItemSizeCustom()
649{
650 const int marginSize = q->style()->pixelMetric(QStyle::PM_ButtonMargin);
651 const int indicatorSize = q->style()->pixelMetric(QStyle::PM_ExclusiveIndicatorWidth);
652 const int spacingSize = q->style()->pixelMetric(QStyle::PM_RadioButtonLabelSpacing);
653 containerSliderItemSizeCustom->layout()->setContentsMargins(
654 indicatorSize + spacingSize, marginSize, marginSize, marginSize
655 );
656}
657
658#include "KisGradientChooser.moc"
@ INTERP_LINEAR
@ COLOR_INTERP_RGB
@ COLORSTOP
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisCustomGradientDialog(KoAbstractGradientSP gradient, QWidget *parent, const char *name, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
static KisResourcesInterfaceSP instance()
bool event(QEvent *e) override
void on_actionGroupItemSize_triggered(QAction *triggeredAction)
QScopedPointer< Private > m_d
void on_sliderItemSizeCustom_valueChanged(int newValue)
KisResourceItemChooser * resourceItemChooser() const
Get a pointer to the item chooser being used.
void on_actionGroupViewMode_triggered(QAction *triggeredAction)
void loadViewSettings(const QString &prefix=QString())
Load the view settings from the configuration.
static QSet< KisGradientChooser * > globalChoosers
void setItemSize(ItemSize newItemSize)
Set the size of the gradient preset chooser items.
void update(KoResourceSP resource)
QPushButton * buttonEditGradient
void updateContainerSliderItemSizeCustom()
int itemSizeCustom() const
Tell the size (height) in pixels used when KisGradientChooser::ItemSize_Custom is used as the item si...
void setViewMode(ViewMode newViewMode)
Set if the gradient preset chooser must show the items as a grid of icons or as a list.
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
@ ItemSize_Small
Show small items.
@ ItemSize_Large
Show large items.
@ ItemSize_Custom
Show items with a custom size.
@ ItemSize_Medium
Show medium size items.
static ViewOptions globalViewOptions
KSqueezedTextLabel * labelName
void addGradient(KoAbstractGradientSP gradient, bool editGradient=false)
void setCurrentResource(KoResourceSP resource)
KoCanvasResourcesInterfaceSP canvasResourcesInterface
void updatePresetChooser(bool globalUpdate=true)
KoResourceSP currentResource(bool includeHidden=false)
void setEditOptionsVisible(bool newEditOptionsVisible)
Set if the widgets with options to edit the gradient are visible.
void updatePresetChooserIcons()
void addSegmentedGradient()
KisGradientChooser(QWidget *parent=0, const char *name=0, bool useGlobalViewOptions=true)
void resourceClicked(KoResourceSP resource)
Emitted when a resource was clicked.
void saveViewSettings(const QString &prefix=QString())
Save the view settings to the configuration.
ItemSize itemSize() const
Tell the size of the gradient preset chooser items.
void setItemSizeCustom(int newSize)
Set the size (height) in pixels used when KisGradientChooser::ItemSize_Custom is used as the item siz...
ViewMode viewMode() const
Tell if the gradient preset chooser is showing the items as a grid of icons or as a list.
void resourceSelected(KoResourceSP resource)
Emitted when a resource was selected.
KisGradientChooser * q
KisResourceItemChooser * itemChooser
@ ViewMode_List
Show the items as a list.
@ ViewMode_Icon
Show the items as a grid of icons.
QWidget * containerSliderItemSizeCustom
QToolButton * buttonAddGradient
void setNameLabelVisible(bool newNameLabelVisible)
Set if the label showing the gradient name is visible.
void setPopupWidget(QWidget *widget)
static bool addResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource, QString storageLocation="")
static bool updateResourceWithUserInput(QWidget *widgetParent, KoResourceSP resource)
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:354
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
void cancelClicked()
void setDefaultButton(ButtonCode id)
Definition KoDialog.cpp:302
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
void okClicked()
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
QIcon loadIcon(const QString &name)
const QString Gradients
static KoColorSpaceRegistry * instance()