diff options
author | cerf <delorme.hugues@gmail.com> | 2011-05-31 08:31:25 +0000 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@nokia.com> | 2011-05-31 10:44:47 +0200 |
commit | 05c0c2f4d80f05717e19560d280b95fe187d59af (patch) | |
tree | e050b027265212915c108d1d121276701ef8284a /src/plugins/vcsbase | |
parent | 6adf2c82a4e5716a8814dc59e5b537999cf42ff9 (diff) | |
download | qt-creator-05c0c2f4d80f05717e19560d280b95fe187d59af.tar.gz |
vcsbase: simplify mapping of toggle buttons in EditorParameterWidget
Change-Id: I9fee337731999f9ed4820cd2b449e1d3db661f65
Merge-request: 331
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
Reviewed-on: http://codereview.qt.nokia.com/254
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/plugins/vcsbase')
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp | 109 | ||||
-rw-r--r-- | src/plugins/vcsbase/vcsbaseeditorparameterwidget.h | 27 |
2 files changed, 62 insertions, 74 deletions
diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp index 35e9ab1fb7..3acf13fedc 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.cpp @@ -38,58 +38,6 @@ #include <QtCore/QDebug> namespace VCSBase { -namespace Internal { - -/*! - \class VCSBase::Internal::VCSBaseEditorParameterToggleButton - - \brief ToggleButton to be inserted into VCSBase::VCSBaseEditorParameterWidget - - Inserts a single option into the argument list depending on whether it is checked. -*/ - -class VCSBaseEditorParameterToggleButton : public QToolButton -{ - Q_OBJECT -public: - explicit VCSBaseEditorParameterToggleButton(QWidget *parent = 0); - - void applyToArguments(QStringList *w) const; - void setFromArguments(const QStringList &a); - - void setOption(const QString &o) { m_option = o; } - QString option() const { return m_option; } - -signals: - void changed(); - -private: - QString m_option; -}; - -VCSBaseEditorParameterToggleButton::VCSBaseEditorParameterToggleButton(QWidget *parent) : - QToolButton(parent) -{ - setCheckable(true); - connect(this, SIGNAL(toggled(bool)), this, SIGNAL(changed())); -} - -void VCSBaseEditorParameterToggleButton::applyToArguments(QStringList *a) const -{ - if (isChecked()) { - if (!a->contains(m_option)) - a->append(m_option); - } else { - a->removeAll(m_option); - } -} - -void VCSBaseEditorParameterToggleButton::setFromArguments(const QStringList &a) -{ - setChecked(a.contains(m_option)); -} - -} // namespace Internal class VCSBaseEditorParameterWidgetPrivate { @@ -98,7 +46,7 @@ public: QStringList m_baseArguments; QHBoxLayout *m_layout; - QList<Internal::VCSBaseEditorParameterToggleButton *> m_toggles; + QList<VCSBaseEditorParameterWidget::OptionMapping> m_optionMappings; }; /*! @@ -138,33 +86,34 @@ void VCSBaseEditorParameterWidget::setBaseArguments(const QStringList &b) QStringList VCSBaseEditorParameterWidget::arguments() const { // Compile effective arguments - QStringList args = d->m_baseArguments; - foreach (const Internal::VCSBaseEditorParameterToggleButton *tb, d->m_toggles) - tb->applyToArguments(&args); + QStringList args = baseArguments(); + foreach (const OptionMapping &mapping, optionMappings()) + args += argumentsForOption(mapping); return args; } -void VCSBaseEditorParameterWidget::addToggleButton(const QString &option, - const QString &label, - const QString &toolTip) +QToolButton *VCSBaseEditorParameterWidget::addToggleButton(const QString &option, + const QString &label, + const QString &toolTip) { - Internal::VCSBaseEditorParameterToggleButton *tb = new Internal::VCSBaseEditorParameterToggleButton; - tb->setOption(option); + QToolButton *tb = new QToolButton; tb->setText(label); tb->setToolTip(toolTip); - connect(tb, SIGNAL(changed()), this, SIGNAL(argumentsChanged())); + tb->setCheckable(true); + connect(tb, SIGNAL(toggled(bool)), this, SIGNAL(argumentsChanged())); d->m_layout->addWidget(tb); - d->m_toggles.append(tb); + d->m_optionMappings.append(OptionMapping(option, tb)); + return tb; } -void VCSBaseEditorParameterWidget::addIgnoreWhiteSpaceButton(const QString &option) +QToolButton *VCSBaseEditorParameterWidget::addIgnoreWhiteSpaceButton(const QString &option) { - addToggleButton(option, msgIgnoreWhiteSpaceLabel(), msgIgnoreWhiteSpaceToolTip()); + return addToggleButton(option, msgIgnoreWhiteSpaceLabel(), msgIgnoreWhiteSpaceToolTip()); } -void VCSBaseEditorParameterWidget::addIgnoreBlankLinesButton(const QString &option) +QToolButton *VCSBaseEditorParameterWidget::addIgnoreBlankLinesButton(const QString &option) { - addToggleButton(option, msgIgnoreBlankLinesLabel(), msgIgnoreBlankLinesToolTip()); + return addToggleButton(option, msgIgnoreBlankLinesLabel(), msgIgnoreBlankLinesToolTip()); } QString VCSBaseEditorParameterWidget::msgIgnoreWhiteSpaceLabel() @@ -196,6 +145,28 @@ void VCSBaseEditorParameterWidget::handleArgumentsChanged() executeCommand(); } -} // namespace VCSBase +VCSBaseEditorParameterWidget::OptionMapping::OptionMapping() : + widget(0) +{ +} + +VCSBaseEditorParameterWidget::OptionMapping::OptionMapping(const QString &optName, QWidget *w) : + optionName(optName), widget(w) +{ +} -#include "vcsbaseeditorparameterwidget.moc" +const QList<VCSBaseEditorParameterWidget::OptionMapping> &VCSBaseEditorParameterWidget::optionMappings() const +{ + return d->m_optionMappings; +} + +QStringList VCSBaseEditorParameterWidget::argumentsForOption(const OptionMapping &mapping) const +{ + QStringList args; + const QToolButton *tb = qobject_cast<const QToolButton *>(mapping.widget); + if (tb != 0 && tb->isChecked()) + args += mapping.optionName; + return args; +} + +} // namespace VCSBase diff --git a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h index 29f2289854..90d4b4e2e8 100644 --- a/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h +++ b/src/plugins/vcsbase/vcsbaseeditorparameterwidget.h @@ -38,6 +38,10 @@ #include <QtGui/QWidget> #include <QtCore/QStringList> +QT_BEGIN_NAMESPACE +class QToolButton; +QT_END_NAMESPACE + namespace VCSBase { class VCSBaseEditorParameterWidgetPrivate; @@ -52,13 +56,13 @@ public: QStringList baseArguments() const; void setBaseArguments(const QStringList &); - void addToggleButton(const QString &option, const QString &label, - const QString &tooltip = QString()); - void addIgnoreWhiteSpaceButton(const QString &option); - void addIgnoreBlankLinesButton(const QString &option); + QToolButton *addToggleButton(const QString &option, const QString &label, + const QString &tooltip = QString()); + QToolButton *addIgnoreWhiteSpaceButton(const QString &option); + QToolButton *addIgnoreBlankLinesButton(const QString &option); // Return the effective arguments according to setting. - QStringList arguments() const; + virtual QStringList arguments() const; // Standard texts static QString msgIgnoreWhiteSpaceLabel(); @@ -74,7 +78,20 @@ signals: // Trigger a re-run to show changed output according to new argument list. void argumentsChanged(); +protected: + struct OptionMapping + { + OptionMapping(); + OptionMapping(const QString &optName, QWidget *w); + QString optionName; + QWidget *widget; + }; + + const QList<OptionMapping> &optionMappings() const; + virtual QStringList argumentsForOption(const OptionMapping &mapping) const; + private: + friend class VCSBaseEditorParameterWidgetPrivate; QScopedPointer<VCSBaseEditorParameterWidgetPrivate> d; }; |