File indexing completed on 2024-05-19 04:29:05
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassyqweb.de> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "kis_paintop_options_model.h" 0009 0010 #include <klocalizedstring.h> 0011 0012 0013 KisPaintOpOptionListModel::KisPaintOpOptionListModel(QObject *parent) 0014 : BaseOptionCategorizedListModel(parent) 0015 { 0016 connect(&m_stateSignalsMapper, qOverload<int>(&QSignalMapper::mapped), 0017 this, &KisPaintOpOptionListModel::slotCheckedEnabledStateChanged); 0018 } 0019 0020 QString KisPaintOpOptionListModel::categoryName(KisPaintOpOption::PaintopCategory categoryType) 0021 { 0022 QString category; 0023 switch(categoryType) { 0024 case KisPaintOpOption::GENERAL: 0025 category = i18nc("option category", "General"); 0026 break; 0027 case KisPaintOpOption::COLOR: 0028 category = i18nc("option category", "Color"); 0029 break; 0030 case KisPaintOpOption::TEXTURE: 0031 category = i18nc("option category", "Texture"); 0032 break; 0033 case KisPaintOpOption::FILTER: 0034 category = i18nc("option category", "Filter"); 0035 break; 0036 case KisPaintOpOption::MASKING_BRUSH: 0037 category = i18nc("option category", "Masked Brush"); 0038 break; 0039 }; 0040 return category; 0041 } 0042 0043 void KisPaintOpOptionListModel::addPaintOpOption(KisPaintOpOption *option, int widgetIndex, const QString &label, const QString &category) { 0044 0045 DataItem *item = categoriesMapper()->addEntry(category, KisOptionInfo(option, widgetIndex, label)); 0046 0047 if (option->isCheckable()) { 0048 item->setCheckable(true); 0049 item->setChecked(option->isChecked()); 0050 connect(option, &KisPaintOpOption::sigCheckedChanged, 0051 &m_stateSignalsMapper, qOverload<>(&QSignalMapper::map)); 0052 } 0053 0054 item->setEnabled(option->isEnabled()); 0055 connect(option, &KisPaintOpOption::sigEnabledChanged, 0056 &m_stateSignalsMapper, qOverload<>(&QSignalMapper::map)); 0057 m_stateSignalsMapper.setMapping(option, categoriesMapper()->rowFromItem(item)); 0058 0059 categoriesMapper()->expandAllCategories(); 0060 } 0061 0062 QVariant KisPaintOpOptionListModel::data(const QModelIndex& idx, int role) const 0063 { 0064 return BaseOptionCategorizedListModel::data(idx, role); 0065 } 0066 0067 bool KisPaintOpOptionListModel::setData(const QModelIndex& idx, const QVariant& value, int role) 0068 { 0069 if (!idx.isValid()) return false; 0070 0071 DataItem *item = categoriesMapper()->itemFromRow(idx.row()); 0072 Q_ASSERT(item); 0073 0074 if (role == Qt::CheckStateRole && item->isCheckable()) { 0075 item->data()->option->setChecked(value.toInt() == Qt::Checked); 0076 } 0077 0078 return BaseOptionCategorizedListModel::setData(idx, value, role); 0079 } 0080 0081 bool operator==(const KisOptionInfo& a, const KisOptionInfo& b) 0082 { 0083 if (a.index != b.index) return false; 0084 if (a.option->objectName() == b.option->objectName()) 0085 if (a.option->category() != b.option->category()) return false; 0086 if (a.option->isCheckable() != b.option->isCheckable()) return false; 0087 if (a.option->isChecked() != b.option->isChecked()) return false; 0088 return true; 0089 } 0090 void KisPaintOpOptionListModel::signalDataChanged(const QModelIndex& index) 0091 { 0092 emit dataChanged(index,index); 0093 } 0094 0095 void KisPaintOpOptionListModel::slotCheckedEnabledStateChanged(int row) 0096 { 0097 QModelIndex idx(index(row)); 0098 0099 DataItem *item = categoriesMapper()->itemFromRow(row); 0100 KIS_SAFE_ASSERT_RECOVER_RETURN(item); 0101 0102 if (item->data()->option->isEnabled() != item->isEnabled()) { 0103 item->setEnabled(item->data()->option->isEnabled()); 0104 } 0105 0106 if (item->data()->option->isChecked() != item->isChecked()) { 0107 item->setChecked(item->data()->option->isChecked()); 0108 } 0109 0110 emit dataChanged(idx, idx); 0111 }