20
20
#include "kis_paintop_options_widget.h"
21
21
#include "kis_paintop_option.h"
23
#include <QHBoxLayout>
24
#include <QItemDelegate>
26
#include <QHBoxLayout>
29
#include <QStackedWidget>
27
30
#include <QVBoxLayout>
28
#include <QListWidget>
30
#include <QStackedWidget>
31
32
#include <klocale.h>
33
#include <KCategorizedSortFilterProxyModel>
32
35
#include <kis_paintop_preset.h>
36
#include "kis_paintop_options_model.h"
37
#include <kis_categorized_item_delegate.h>
38
#include <qstyleditemdelegate.h>
34
40
class KisPaintOpOptionsWidget::Private
39
45
QList<KisPaintOpOption*> paintOpOptions;
40
QMap<QListWidgetItem*, KisPaintOpOption*> checkBoxMap;
41
QListWidget * optionsList;
46
QListView* optionsList;
47
KisPaintOpOptionsModel* model;
48
KCategorizedSortFilterProxyModel* proxyModel;
42
49
QStackedWidget * optionsStack;
49
56
setObjectName("KisPaintOpPresetsWidget");
50
57
QHBoxLayout * layout = new QHBoxLayout(this);
51
m_d->optionsList = new QListWidget(this);
58
m_d->optionsList = new QListView(this);
59
m_d->model = new KisPaintOpOptionsModel;
60
m_d->proxyModel = new KCategorizedSortFilterProxyModel;
61
m_d->proxyModel->setSourceModel(m_d->model);
62
m_d->proxyModel->setCategorizedModel(true);
63
m_d->proxyModel->setSortRole(KisPaintOpOptionsModel::SortingRole);
64
m_d->optionsList->setModel(m_d->proxyModel);
65
m_d->optionsList->setItemDelegate(new KisCategorizedItemDelegate(new QStyledItemDelegate));
52
66
m_d->optionsList->setFixedWidth(128);
53
67
QSizePolicy policy = QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
54
68
policy.setHorizontalStretch(0);
62
76
layout->addWidget(m_d->optionsStack);
64
78
connect(m_d->optionsList,
65
SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
66
this, SLOT(changePage(QListWidgetItem *, QListWidgetItem*)));
68
connect(m_d->optionsList, SIGNAL(itemChanged(QListWidgetItem*)), SLOT(itemChanged(QListWidgetItem*)));
79
SIGNAL(activated(const QModelIndex&)),
80
this, SLOT(changePage(const QModelIndex&)));
81
connect(m_d->optionsList,
82
SIGNAL(clicked(QModelIndex)),
83
this, SLOT(changePage(const QModelIndex&)));
72
87
KisPaintOpOptionsWidget::~KisPaintOpOptionsWidget()
74
89
qDeleteAll(m_d->paintOpOptions);
78
94
void KisPaintOpOptionsWidget::addPaintOpOption(KisPaintOpOption * option)
80
96
if (!option->configurationPage()) return;
82
m_d->paintOpOptions << option;
98
m_d->model->addPaintOpOption(option, m_d->optionsStack->count());
84
100
connect(option, SIGNAL(sigSettingChanged()), SIGNAL(sigConfigurationItemChanged()));
86
102
m_d->optionsStack->addWidget(option->configurationPage());
88
QListWidgetItem * item = new QListWidgetItem(m_d->optionsList);
89
item->setText(option->label());
90
Qt::ItemFlags flags = item->flags();
91
flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
92
if (option->isCheckable()) {
94
flags |= Qt::ItemIsUserCheckable;
95
item->setCheckState((option->isChecked()) ? Qt::Checked : Qt::Unchecked);
96
m_d->checkBoxMap[item] = option;
98
item->setFlags(flags);
103
m_d->paintOpOptions << option;
104
m_d->proxyModel->sort(0);
101
107
void KisPaintOpOptionsWidget::setConfiguration(const KisPropertiesConfiguration * config)
103
109
Q_ASSERT(!config->getString("paintop").isEmpty());
104
111
foreach(KisPaintOpOption* option, m_d->paintOpOptions) {
105
112
option->readOptionSetting(config);
107
foreach(QListWidgetItem* checkableItem, m_d->checkBoxMap.keys()) {
108
checkableItem->setCheckState((m_d->checkBoxMap[checkableItem]->isChecked()) ? Qt::Checked : Qt::Unchecked);
112
116
void KisPaintOpOptionsWidget::writeConfiguration(KisPropertiesConfiguration *config) const
126
void KisPaintOpOptionsWidget::changePage(QListWidgetItem *current, QListWidgetItem *previous)
129
m_d->optionsStack->setCurrentIndex(m_d->optionsList->row(current));
132
void KisPaintOpOptionsWidget::itemChanged(QListWidgetItem* item)
134
if(m_d->checkBoxMap.contains(item)) {
135
m_d->checkBoxMap[item]->setChecked(item->checkState() == Qt::Checked);
136
emit sigConfigurationItemChanged();
130
void KisPaintOpOptionsWidget::changePage(const QModelIndex& index)
132
m_d->optionsStack->setCurrentIndex( m_d->proxyModel->data(index, KisPaintOpOptionsModel::WidgetIndexRole).toInt());
133
emit sigConfigurationItemChanged();
140
136
#include "kis_paintop_options_widget.moc"