File indexing completed on 2024-05-12 16:02:28
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Boudewijn Rempt <boud@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "KisDialogStateSaver.h" 0007 0008 #include <ksharedconfig.h> 0009 #include <kconfiggroup.h> 0010 0011 #include <QDebug> 0012 #include <QCheckBox> 0013 #include <QComboBox> 0014 #include <QLineEdit> 0015 #include <QTextEdit> 0016 #include <QAbstractSlider> 0017 #include <QSpinBox> 0018 #include <QDoubleSpinBox> 0019 #include <QGroupBox> 0020 #include <QRadioButton> 0021 0022 #include "kis_int_parse_spin_box.h" 0023 #include "kis_double_parse_spin_box.h" 0024 #include "kis_double_parse_unit_spin_box.h" 0025 #include "kis_slider_spin_box.h" 0026 0027 0028 void KisDialogStateSaver::saveState(QWidget *parent, const QString &dialogName) 0029 { 0030 Q_ASSERT(parent); 0031 Q_ASSERT(!dialogName.isEmpty()); 0032 0033 KConfigGroup group(KSharedConfig::openConfig(), dialogName); 0034 Q_FOREACH(QWidget *widget, parent->findChildren<QWidget*>(QString())) { 0035 0036 if (!widget->objectName().isEmpty() ) { 0037 if (qobject_cast<KisIntParseSpinBox*>(widget)) { 0038 group.writeEntry(widget->objectName(), qobject_cast<KisIntParseSpinBox*>(widget)->value()); 0039 } 0040 else if (qobject_cast<KisDoubleParseSpinBox*>(widget)) { 0041 group.writeEntry(widget->objectName(), qobject_cast<KisDoubleParseSpinBox*>(widget)->value()); 0042 } 0043 else if (qobject_cast<KisDoubleParseUnitSpinBox*>(widget)) { 0044 // XXX: also save the unit 0045 group.writeEntry(widget->objectName(), qobject_cast<KisDoubleParseUnitSpinBox*>(widget)->value()); 0046 } 0047 else if (qobject_cast<QCheckBox*>(widget)) { 0048 group.writeEntry(widget->objectName(), qobject_cast<const QCheckBox*>(widget)->isChecked()); 0049 } 0050 else if (qobject_cast<QComboBox*>(widget)) { 0051 group.writeEntry(widget->objectName(), qobject_cast<QComboBox*>(widget)->currentIndex()); 0052 } 0053 else if (qobject_cast<QLineEdit*>(widget)) { 0054 group.writeEntry(widget->objectName(), qobject_cast<QLineEdit*>(widget)->text()); 0055 } 0056 else if (qobject_cast<QTextEdit*>(widget)) { 0057 group.writeEntry(widget->objectName(), qobject_cast<QTextEdit *>(widget)->toPlainText()); 0058 } 0059 else if (qobject_cast<QAbstractSlider*>(widget)) { 0060 group.writeEntry(widget->objectName(), qobject_cast<QAbstractSlider*>(widget)->value()); 0061 } 0062 else if (qobject_cast<QSpinBox*>(widget)) { 0063 group.writeEntry(widget->objectName(), qobject_cast<QSpinBox*>(widget)->value()); 0064 } 0065 else if (qobject_cast<QDoubleSpinBox*>(widget)) { 0066 group.writeEntry(widget->objectName(), qobject_cast<QDoubleSpinBox*>(widget)->value()); 0067 } 0068 else if (qobject_cast<QRadioButton*>(widget)) { 0069 group.writeEntry(widget->objectName(), qobject_cast<QRadioButton*>(widget)->isChecked()); 0070 } 0071 else if (qobject_cast<KisSliderSpinBox*>(widget)){ 0072 group.writeEntry(widget->objectName(), qobject_cast<KisSliderSpinBox*>(widget)->value()); 0073 } 0074 0075 else { 0076 //qWarning() << "Cannot save state for object" << widget; 0077 } 0078 } 0079 else { 0080 qWarning() << "Dialog" << dialogName << "has a widget without an objectname:" << widget; 0081 } 0082 0083 } 0084 } 0085 0086 void KisDialogStateSaver::restoreState(QWidget *parent, const QString &dialogName, const QMap<QString, QVariant> &defaults) 0087 { 0088 Q_ASSERT(parent); 0089 Q_ASSERT(!dialogName.isEmpty()); 0090 0091 KConfigGroup group( KSharedConfig::openConfig(), dialogName); 0092 0093 Q_FOREACH(QWidget *widget, parent->findChildren<QWidget*>(QString())) { 0094 0095 if (!widget->objectName().isEmpty()) { 0096 0097 QString widgetName = widget->objectName(); 0098 0099 QVariant defaultValue; 0100 if (defaults.contains(widgetName)) { 0101 defaultValue = defaults[widgetName]; 0102 } 0103 0104 if (qobject_cast<KisIntParseSpinBox*>(widget)) { 0105 if (defaultValue.isValid()) { 0106 qobject_cast<KisIntParseSpinBox*>(widget)->setValue(defaultValue.toInt()); 0107 } 0108 else { 0109 qobject_cast<KisIntParseSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<KisIntParseSpinBox*>(widget)->value())); 0110 } 0111 } 0112 else if (qobject_cast<KisDoubleParseSpinBox*>(widget)) { 0113 if (defaultValue.isValid()) { 0114 qobject_cast<KisDoubleParseSpinBox*>(widget)->setValue(defaultValue.toInt()); 0115 } 0116 else { 0117 qobject_cast<KisDoubleParseSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<KisDoubleParseSpinBox*>(widget)->value())); 0118 } 0119 } 0120 else if (qobject_cast<KisDoubleParseUnitSpinBox*>(widget)) { 0121 if (defaultValue.isValid()) { 0122 qobject_cast<KisDoubleParseUnitSpinBox*>(widget)->setValue(defaultValue.toInt()); 0123 } 0124 else { 0125 qobject_cast<KisDoubleParseUnitSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<KisDoubleParseUnitSpinBox*>(widget)->value())); 0126 } 0127 } 0128 else if (qobject_cast<QCheckBox*>(widget)) { 0129 if (defaultValue.isValid()) { 0130 qobject_cast<QCheckBox*>(widget)->setChecked(defaultValue.toBool()); 0131 } 0132 else { 0133 qobject_cast<QCheckBox*>(widget)->setChecked(group.readEntry<bool>(widgetName, qobject_cast<QCheckBox*>(widget)->isChecked())); 0134 } 0135 } 0136 else if (qobject_cast<QComboBox*>(widget)) { 0137 if (defaultValue.isValid()) { 0138 qobject_cast<QComboBox*>(widget)->setCurrentIndex(defaultValue.toInt()); 0139 } 0140 else { 0141 qobject_cast<QComboBox*>(widget)->setCurrentIndex(group.readEntry<int>(widgetName, qobject_cast<QComboBox*>(widget)->currentIndex())); 0142 } 0143 } 0144 else if (qobject_cast<QLineEdit*>(widget)) { 0145 if (defaultValue.isValid()) { 0146 qobject_cast<QLineEdit*>(widget)->setText(defaultValue.toString()); 0147 } 0148 else { 0149 qobject_cast<QLineEdit*>(widget)->setText(group.readEntry<QString>(widgetName, qobject_cast<QLineEdit*>(widget)->text())); 0150 } 0151 } 0152 else if (qobject_cast<QTextEdit *>(widget)) { 0153 if (defaultValue.isValid()) { 0154 qobject_cast<QTextEdit *>(widget)->setPlainText(defaultValue.toString()); 0155 } else { 0156 qobject_cast<QTextEdit *>(widget)->setPlainText(group.readEntry<QString>(widgetName, qobject_cast<QTextEdit *>(widget)->toPlainText())); 0157 } 0158 } 0159 else if (qobject_cast<QAbstractSlider*>(widget)) { 0160 if (defaultValue.isValid()) { 0161 qobject_cast<QAbstractSlider*>(widget)->setValue(defaultValue.toInt()); 0162 } 0163 else { 0164 qobject_cast<QAbstractSlider*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<QAbstractSlider*>(widget)->value())); 0165 } 0166 } 0167 else if (qobject_cast<QSpinBox*>(widget)) { 0168 if (defaultValue.isValid()) { 0169 qobject_cast<QSpinBox*>(widget)->setValue(defaultValue.toInt()); 0170 } 0171 else { 0172 qobject_cast<QSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<QSpinBox*>(widget)->value())); 0173 } 0174 } 0175 else if (qobject_cast<QDoubleSpinBox*>(widget)) { 0176 if (defaultValue.isValid()) { 0177 qobject_cast<QDoubleSpinBox*>(widget)->setValue(defaultValue.toDouble()); 0178 } 0179 else { 0180 qobject_cast<QDoubleSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<QDoubleSpinBox*>(widget)->value())); 0181 } 0182 } 0183 else if (qobject_cast<QRadioButton*>(widget)) { 0184 if (defaultValue.isValid()) { 0185 qobject_cast<QRadioButton*>(widget)->setChecked(defaultValue.toBool()); 0186 } 0187 else { 0188 qobject_cast<QRadioButton*>(widget)->setChecked(group.readEntry<bool>(widgetName, qobject_cast<QRadioButton*>(widget)->isChecked())); 0189 } 0190 } 0191 else if (qobject_cast<KisSliderSpinBox*>(widget)) { 0192 if (defaultValue.isValid()) { 0193 qobject_cast<KisSliderSpinBox*>(widget)->setValue(defaultValue.toInt()); 0194 } 0195 else { 0196 qobject_cast<KisSliderSpinBox*>(widget)->setValue(group.readEntry<int>(widgetName, qobject_cast<KisSliderSpinBox*>(widget)->value())); 0197 } 0198 } 0199 0200 else { 0201 //qWarning() << "Cannot restore state for object" << widget; 0202 } 0203 } 0204 else { 0205 qWarning() << "Dialog" << dialogName << "has a widget without an object name:" << widget; 0206 } 0207 } 0208 }