From 61b278fe6eeff0c6d6554c3e0dc9bcfc2a4c8a94 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 16 Mar 2021 07:35:47 +0100 Subject: [PATCH] VCS: Allow VcsBaseEditorConfig to operate on aspects Change-Id: Id7b5b1a1020ea002e631e401c49b8eda6dfb8944 Reviewed-by: Orgad Shaneh --- src/plugins/vcsbase/vcsbaseeditorconfig.cpp | 79 ++++++++++++++++++++- src/plugins/vcsbase/vcsbaseeditorconfig.h | 10 +++ 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/plugins/vcsbase/vcsbaseeditorconfig.cpp b/src/plugins/vcsbase/vcsbaseeditorconfig.cpp index 95a08f72ae2..f4b704b6e9a 100644 --- a/src/plugins/vcsbase/vcsbaseeditorconfig.cpp +++ b/src/plugins/vcsbase/vcsbaseeditorconfig.cpp @@ -25,6 +25,7 @@ #include "vcsbaseeditorconfig.h" +#include #include #include @@ -34,8 +35,9 @@ #include #include -namespace VcsBase { +using namespace Utils; +namespace VcsBase { namespace Internal { class SettingMappingData @@ -46,7 +48,10 @@ public: Invalid, Bool, String, - Int + Int, + AspectBool, + AspectString, + AspectInt }; SettingMappingData() : boolSetting(nullptr) @@ -61,6 +66,15 @@ public: SettingMappingData(int *setting) : intSetting(setting), m_type(Int) { } + SettingMappingData(BoolAspect *setting) : boolAspectSetting(setting), m_type(AspectBool) + { } + + SettingMappingData(StringAspect *setting) : stringAspectSetting(setting), m_type(AspectString) + { } + + SettingMappingData(IntegerAspect *setting) : intAspectSetting(setting), m_type(AspectInt) + { } + Type type() const { return m_type; @@ -70,6 +84,9 @@ public: bool *boolSetting; QString *stringSetting; int *intSetting; + BoolAspect *boolAspectSetting; + StringAspect *stringAspectSetting; + IntegerAspect *intAspectSetting; }; private: @@ -197,6 +214,17 @@ void VcsBaseEditorConfig::mapSetting(QAction *button, bool *setting) } } +void VcsBaseEditorConfig::mapSetting(QAction *button, BoolAspect *setting) +{ + if (!d->m_settingMapping.contains(button) && button) { + d->m_settingMapping.insert(button, Internal::SettingMappingData(setting)); + if (setting) { + QSignalBlocker blocker(button); + button->setChecked(setting->value()); + } + } +} + void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, QString *setting) { if (!d->m_settingMapping.contains(comboBox) && comboBox) { @@ -210,6 +238,19 @@ void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, QString *setting) } } +void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, StringAspect *setting) +{ + if (!d->m_settingMapping.contains(comboBox) && comboBox) { + d->m_settingMapping.insert(comboBox, Internal::SettingMappingData(setting)); + if (setting) { + QSignalBlocker blocker(comboBox); + const int itemIndex = comboBox->findData(setting->value()); + if (itemIndex != -1) + comboBox->setCurrentIndex(itemIndex); + } + } +} + void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, int *setting) { if (d->m_settingMapping.contains(comboBox) || !comboBox) @@ -224,6 +265,20 @@ void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, int *setting) comboBox->setCurrentIndex(*setting); } +void VcsBaseEditorConfig::mapSetting(QComboBox *comboBox, IntegerAspect *setting) +{ + if (d->m_settingMapping.contains(comboBox) || !comboBox) + return; + + d->m_settingMapping.insert(comboBox, Internal::SettingMappingData(setting)); + + if (!setting || setting->value() < 0 || setting->value() >= comboBox->count()) + return; + + QSignalBlocker blocker(comboBox); + comboBox->setCurrentIndex(setting->value()); +} + void VcsBaseEditorConfig::handleArgumentsChanged() { updateMappedSettings(); @@ -287,6 +342,12 @@ void VcsBaseEditorConfig::updateMappedSettings() *settingData.boolSetting = action->isChecked(); break; } + case Internal::SettingMappingData::AspectBool : + { + if (auto action = qobject_cast(optMapping.object)) + settingData.boolAspectSetting->setValue(action->isChecked()); + break; + } case Internal::SettingMappingData::String : { auto cb = qobject_cast(optMapping.object); @@ -294,6 +355,13 @@ void VcsBaseEditorConfig::updateMappedSettings() *settingData.stringSetting = cb->itemData(cb->currentIndex()).toString(); break; } + case Internal::SettingMappingData::AspectString : + { + auto cb = qobject_cast(optMapping.object); + if (cb && cb->currentIndex() != -1) + settingData.stringAspectSetting->setValue(cb->itemData(cb->currentIndex()).toString()); + break; + } case Internal::SettingMappingData::Int: { auto cb = qobject_cast(optMapping.object); @@ -301,6 +369,13 @@ void VcsBaseEditorConfig::updateMappedSettings() *settingData.intSetting = cb->currentIndex(); break; } + case Internal::SettingMappingData::AspectInt: + { + auto cb = qobject_cast(optMapping.object); + if (cb && cb->currentIndex() != -1) + settingData.intAspectSetting->setValue(cb->currentIndex()); + break; + } case Internal::SettingMappingData::Invalid : break; } // end switch () } diff --git a/src/plugins/vcsbase/vcsbaseeditorconfig.h b/src/plugins/vcsbase/vcsbaseeditorconfig.h index 8f1ebaee193..494988eb7ca 100644 --- a/src/plugins/vcsbase/vcsbaseeditorconfig.h +++ b/src/plugins/vcsbase/vcsbaseeditorconfig.h @@ -35,6 +35,12 @@ class QComboBox; class QToolButton; QT_END_NAMESPACE +namespace Utils { +class BoolAspect; +class IntegerAspect; +class StringAspect; +} // Utils + namespace VcsBase { class VcsBaseEditorWidget; @@ -75,6 +81,10 @@ public: void mapSetting(QComboBox *comboBox, QString *setting); void mapSetting(QComboBox *comboBox, int *setting); + void mapSetting(QAction *button, Utils::BoolAspect *setting); + void mapSetting(QComboBox *comboBox, Utils::StringAspect *setting); + void mapSetting(QComboBox *comboBox, Utils::IntegerAspect *setting); + // Return the effective arguments according to setting. virtual QStringList arguments() const;