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 }