From 31ac8bd293cb51311b4bac1456ce8fec9b55ec51 Mon Sep 17 00:00:00 2001 From: cerf Date: Tue, 31 May 2011 08:31:26 +0000 Subject: [PATCH] vcsbase: support of combo boxes in EditorParameterWidget VCSBaseEditorParameterWidget supports "choice-based" options through mapping of QComboBox. Change-Id: I46e1205e1b6f56b16782d9f0d81ec6f1d4961f1a Merge-request: 331 Reviewed-by: Tobias Hunger Reviewed-on: http://codereview.qt.nokia.com/255 Reviewed-by: Qt Sanity Bot --- .../vcsbase/vcsbaseeditorparameterwidget.cpp | 71 +++++++++++++++++-- .../vcsbase/vcsbaseeditorparameterwidget.h | 14 ++++ 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp index 3acf13fedcd..22004e94cbb 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp @@ -32,6 +32,7 @@ #include "vcsbaseeditorparameterwidget.h" +#include #include #include @@ -39,14 +40,27 @@ namespace VCSBase { +VCSBaseEditorParameterWidget::ComboBoxItem::ComboBoxItem() +{ +} + +VCSBaseEditorParameterWidget::ComboBoxItem::ComboBoxItem(const QString &text, + const QVariant &val) : + displayText(text), + value(val) +{ +} + class VCSBaseEditorParameterWidgetPrivate { public: - VCSBaseEditorParameterWidgetPrivate() : m_layout(0) {} + VCSBaseEditorParameterWidgetPrivate() : + m_layout(0), m_comboBoxOptionTemplate(QLatin1String("%1=%2")) {} QStringList m_baseArguments; QHBoxLayout *m_layout; QList m_optionMappings; + QStringList m_comboBoxOptionTemplate; }; /*! @@ -116,6 +130,42 @@ QToolButton *VCSBaseEditorParameterWidget::addIgnoreBlankLinesButton(const QStri return addToggleButton(option, msgIgnoreBlankLinesLabel(), msgIgnoreBlankLinesToolTip()); } +QComboBox *VCSBaseEditorParameterWidget::addComboBox(const QString &option, + const QList &items) +{ + QComboBox *cb = new QComboBox; + foreach (const ComboBoxItem &item, items) + cb->addItem(item.displayText, item.value); + connect(cb, SIGNAL(currentIndexChanged(int)), this, SIGNAL(argumentsChanged())); + d->m_layout->addWidget(cb); + d->m_optionMappings.append(OptionMapping(option, cb)); + return cb; +} + +/*! + \brief This property holds the format (template) of assignable command line + options (like --file= for example) + + The option's name and its actual value are specified with place markers + within the template : + \li %{option} for the option + \li %{value} for the actual value + + \code + QStringList("%{option}=%{value}"); // eg --file=a.out + QStringList() << "%{option}" << "%{value}"; // eg --file a.out (two distinct arguments) + \endcode +*/ +QStringList VCSBaseEditorParameterWidget::comboBoxOptionTemplate() const +{ + return d->m_comboBoxOptionTemplate; +} + +void VCSBaseEditorParameterWidget::setComboBoxOptionTemplate(const QStringList &optTemplate) const +{ + d->m_comboBoxOptionTemplate = optTemplate; +} + QString VCSBaseEditorParameterWidget::msgIgnoreWhiteSpaceLabel() { return tr("Ignore whitespace"); @@ -162,11 +212,24 @@ const QList &VCSBaseEditorParameter QStringList VCSBaseEditorParameterWidget::argumentsForOption(const OptionMapping &mapping) const { - QStringList args; const QToolButton *tb = qobject_cast(mapping.widget); if (tb != 0 && tb->isChecked()) - args += mapping.optionName; - return args; + return QStringList(mapping.optionName); + + const QComboBox *cb = qobject_cast(mapping.widget); + if (cb != 0) { + const QString value = cb->itemData(cb->currentIndex()).toString(); + QStringList args; + foreach (const QString &t, d->m_comboBoxOptionTemplate) { + QString a = t; + a.replace(QLatin1String("%{option}"), mapping.optionName); + a.replace(QLatin1String("%{value}"), value); + args += a; + } + return args; + } + + return QStringList(); } } // namespace VCSBase diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h index 90d4b4e2e8b..3541b1f0bbc 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h @@ -37,8 +37,10 @@ #include #include +#include QT_BEGIN_NAMESPACE +class QComboBox; class QToolButton; QT_END_NAMESPACE @@ -50,6 +52,14 @@ class VCSBASE_EXPORT VCSBaseEditorParameterWidget : public QWidget { Q_OBJECT public: + struct ComboBoxItem + { + ComboBoxItem(); + ComboBoxItem(const QString &text, const QVariant &val); + QString displayText; + QVariant value; + }; + explicit VCSBaseEditorParameterWidget(QWidget *parent = 0); ~VCSBaseEditorParameterWidget(); @@ -60,6 +70,10 @@ public: const QString &tooltip = QString()); QToolButton *addIgnoreWhiteSpaceButton(const QString &option); QToolButton *addIgnoreBlankLinesButton(const QString &option); + QComboBox *addComboBox(const QString &option, const QList &items); + + QStringList comboBoxOptionTemplate() const; + void setComboBoxOptionTemplate(const QStringList &optTemplate) const; // Return the effective arguments according to setting. virtual QStringList arguments() const;