From 85cc1afe547ae6381dd9b63a42b27b461562dcdf Mon Sep 17 00:00:00 2001 From: cerf Date: Fri, 10 Jun 2011 10:40:42 +0200 Subject: [PATCH] vcsbase: auto load/save settings in EditorParameterWidget Change-Id: If99006d418d8e3878677518a1bc0997bdfef38c6 Merge-request: 341 Reviewed-by: Tobias Hunger Reviewed-on: http://codereview.qt.nokia.com/444 Reviewed-by: Qt Sanity Bot --- .../vcsbase/vcsbaseeditorparameterwidget.cpp | 93 +++++++++++++++++++++- src/plugins/vcsbase/vcsbaseeditorparameterwidget.h | 4 + 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp index 0d16a5de55..abc8222afd 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp @@ -40,6 +40,41 @@ namespace VCSBase { +namespace Internal { + +struct SettingMappingData +{ + enum Type + { + Invalid, + Bool, + String + }; + + SettingMappingData() : boolSetting(0), stringSetting(0) + { } + + SettingMappingData(bool *setting) : boolSetting(setting), stringSetting(0) + { } + + SettingMappingData(QString *setting) : boolSetting(0), stringSetting(setting) + { } + + Type type() const + { + if (boolSetting) + return Bool; + if (stringSetting) + return String; + return Invalid; + } + + bool *boolSetting; + QString *stringSetting; +}; + +} // namespace Internal + VCSBaseEditorParameterWidget::ComboBoxItem::ComboBoxItem() { } @@ -61,6 +96,7 @@ public: QStringList m_baseArguments; QHBoxLayout *m_layout; QList m_optionMappings; + QHash m_settingMapping; QStringList m_comboBoxOptionTemplate; }; @@ -133,6 +169,32 @@ QComboBox *VCSBaseEditorParameterWidget::addComboBox(const QString &option, return cb; } +void VCSBaseEditorParameterWidget::mapSetting(QToolButton *button, bool *setting) +{ + if (!d->m_settingMapping.contains(button) && button) { + d->m_settingMapping.insert(button, Internal::SettingMappingData(setting)); + if (setting) { + button->blockSignals(true); + button->setChecked(*setting); + button->blockSignals(false); + } + } +} + +void VCSBaseEditorParameterWidget::mapSetting(QComboBox *comboBox, QString *setting) +{ + if (!d->m_settingMapping.contains(comboBox) && comboBox) { + d->m_settingMapping.insert(comboBox, Internal::SettingMappingData(setting)); + if (setting) { + comboBox->blockSignals(true); + const int itemIndex = comboBox->findData(*setting); + if (itemIndex != -1) + comboBox->setCurrentIndex(itemIndex); + comboBox->blockSignals(false); + } + } +} + /*! \brief This property holds the format (template) of assignable command line options (like --file= for example) @@ -163,6 +225,7 @@ void VCSBaseEditorParameterWidget::executeCommand() void VCSBaseEditorParameterWidget::handleArgumentsChanged() { + updateMappedSettings(); executeCommand(); } @@ -184,11 +247,11 @@ const QList &VCSBaseEditorParameter QStringList VCSBaseEditorParameterWidget::argumentsForOption(const OptionMapping &mapping) const { const QToolButton *tb = qobject_cast(mapping.widget); - if (tb != 0 && tb->isChecked()) + if (tb && tb->isChecked()) return QStringList(mapping.optionName); const QComboBox *cb = qobject_cast(mapping.widget); - if (cb != 0) { + if (cb) { const QString value = cb->itemData(cb->currentIndex()).toString(); QStringList args; foreach (const QString &t, d->m_comboBoxOptionTemplate) { @@ -203,4 +266,30 @@ QStringList VCSBaseEditorParameterWidget::argumentsForOption(const OptionMapping return QStringList(); } +void VCSBaseEditorParameterWidget::updateMappedSettings() +{ + foreach (const OptionMapping &optMapping, d->m_optionMappings) { + if (d->m_settingMapping.contains(optMapping.widget)) { + Internal::SettingMappingData& settingData = d->m_settingMapping[optMapping.widget]; + switch (settingData.type()) { + case Internal::SettingMappingData::Bool : + { + const QToolButton *tb = qobject_cast(optMapping.widget); + if (tb) + *settingData.boolSetting = tb->isChecked(); + break; + } + case Internal::SettingMappingData::String : + { + const QComboBox *cb = qobject_cast(optMapping.widget); + if (cb && cb->currentIndex() != -1) + *settingData.stringSetting = cb->itemData(cb->currentIndex()).toString(); + break; + } + case Internal::SettingMappingData::Invalid : break; + } // end switch () + } + } +} + } // namespace VCSBase diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h index 0a041f61fe..df031df2bf 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h @@ -70,6 +70,9 @@ public: const QString &tooltip = QString()); QComboBox *addComboBox(const QString &option, const QList &items); + void mapSetting(QToolButton *button, bool *setting); + void mapSetting(QComboBox *comboBox, QString *setting); + QStringList comboBoxOptionTemplate() const; void setComboBoxOptionTemplate(const QStringList &optTemplate) const; @@ -95,6 +98,7 @@ protected: const QList &optionMappings() const; virtual QStringList argumentsForOption(const OptionMapping &mapping) const; + void updateMappedSettings(); private: friend class VCSBaseEditorParameterWidgetPrivate; -- 2.11.0