/* * Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "settingswidget.h" #include #include #include #include #include #include #include #include #include #include #include #include "../widgets/coloredit.h" #include "../utils.h" #include "../iconsmanager.h" SettingsWidget::SettingsWidget(const QString &name, const QString &group, QWidget *parent): QWidget(parent), mSettingsChanged(false), mName(name), mGroup(group) { } void SettingsWidget::init() { connect(pIconsManager,&IconsManager::actionIconsUpdated, this, &SettingsWidget::onUpdateIcons); onUpdateIcons(); load(); connectInputs(); } void SettingsWidget::load() { try { doLoad(); clearSettingsChanged(); } catch (FileError & e) { QMessageBox::warning(nullptr, tr("Load Error"), e.reason()); } } void SettingsWidget::save() { try { doSave(); clearSettingsChanged(); } catch (FileError & e) { QMessageBox::warning(nullptr, tr("Save Error"), e.reason()); } } void SettingsWidget::connectAbstractItemView(QAbstractItemView *pView) { connect(pView->model(),&QAbstractItemModel::rowsInserted,this,&SettingsWidget::setSettingsChanged); connect(pView->model(),&QAbstractItemModel::rowsMoved,this,&SettingsWidget::setSettingsChanged); connect(pView->model(),&QAbstractItemModel::rowsRemoved,this,&SettingsWidget::setSettingsChanged); connect(pView->model(),&QAbstractItemModel::dataChanged,this,&SettingsWidget::setSettingsChanged); connect(pView->model(),&QAbstractItemModel::modelReset,this,&SettingsWidget::setSettingsChanged); } void SettingsWidget::disconnectAbstractItemView(QAbstractItemView *pView) { disconnect(pView->model(),&QAbstractItemModel::rowsInserted,this,&SettingsWidget::setSettingsChanged); disconnect(pView->model(),&QAbstractItemModel::rowsMoved,this,&SettingsWidget::setSettingsChanged); disconnect(pView->model(),&QAbstractItemModel::rowsRemoved,this,&SettingsWidget::setSettingsChanged); disconnect(pView->model(),&QAbstractItemModel::dataChanged,this,&SettingsWidget::setSettingsChanged); disconnect(pView->model(),&QAbstractItemModel::modelReset,this,&SettingsWidget::setSettingsChanged); } void SettingsWidget::updateIcons(const QSize &) { } void SettingsWidget::connectInputs() { for (QLineEdit* p:findChildren()) { connect(p, &QLineEdit::textChanged, this, &SettingsWidget::setSettingsChanged); } for (QCheckBox* p:findChildren()) { connect(p, &QCheckBox::toggled, this, &SettingsWidget::setSettingsChanged); } for (QRadioButton* p:findChildren()) { connect(p, &QRadioButton::toggled, this, &SettingsWidget::setSettingsChanged); } for (QPlainTextEdit* p:findChildren()) { connect(p, &QPlainTextEdit::textChanged, this, &SettingsWidget::setSettingsChanged); } for (QSpinBox* p:findChildren()) { connect(p, QOverload::of(&QSpinBox::valueChanged), this, &SettingsWidget::setSettingsChanged); } for (ColorEdit* p:findChildren()) { connect(p, &ColorEdit::colorChanged, this, &SettingsWidget::setSettingsChanged); } for (QComboBox* p: findChildren()) { connect(p, QOverload::of(&QComboBox::currentIndexChanged) ,this, &SettingsWidget::setSettingsChanged); } for (QAbstractItemView* p: findChildren()) { connectAbstractItemView(p); } for (QListWidget* p:findChildren()) { connect(p, QOverload::of(&QListWidget::currentRowChanged) ,this, &SettingsWidget::setSettingsChanged); } for (QGroupBox* p: findChildren()) { connect(p, &QGroupBox::toggled,this, &SettingsWidget::setSettingsChanged); } } void SettingsWidget::disconnectInputs() { for (QLineEdit* p:findChildren()) { disconnect(p, &QLineEdit::textChanged, this, &SettingsWidget::setSettingsChanged); } for (QCheckBox* p:findChildren()) { disconnect(p, &QCheckBox::stateChanged, this, &SettingsWidget::setSettingsChanged); } for (QRadioButton* p:findChildren()) { disconnect(p, &QRadioButton::toggled, this, &SettingsWidget::setSettingsChanged); } for (QPlainTextEdit* p:findChildren()) { disconnect(p, &QPlainTextEdit::textChanged, this, &SettingsWidget::setSettingsChanged); } for (QSpinBox* p:findChildren()) { disconnect(p, QOverload::of(&QSpinBox::valueChanged), this, &SettingsWidget::setSettingsChanged); } for (ColorEdit* p:findChildren()) { disconnect(p, &ColorEdit::colorChanged, this, &SettingsWidget::setSettingsChanged); } for (QComboBox* p: findChildren()) { disconnect(p, QOverload::of(&QComboBox::currentIndexChanged) ,this, &SettingsWidget::setSettingsChanged); } for (QAbstractItemView* p: findChildren()) { disconnectAbstractItemView(p); } for (QListWidget* p:findChildren()) { disconnect(p, QOverload::of(&QListWidget::currentRowChanged) ,this, &SettingsWidget::setSettingsChanged); } for (QGroupBox* p: findChildren()) { disconnect(p, &QGroupBox::toggled,this, &SettingsWidget::setSettingsChanged); } } const QString &SettingsWidget::group() { return mGroup; } const QString &SettingsWidget::name() { return mName; } bool SettingsWidget::isSettingsChanged() { return mSettingsChanged; } void SettingsWidget::setSettingsChanged() { mSettingsChanged = true; emit settingsChanged(true); } void SettingsWidget::clearSettingsChanged() { mSettingsChanged = false; emit settingsChanged(false); } void SettingsWidget::onUpdateIcons() { updateIcons(pIconsManager->actionIconSize()); }