diff options
author | hjk <hjk@qt.io> | 2018-04-16 13:28:47 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2018-04-23 10:34:08 +0000 |
commit | 4b9945c32981105bfae3ba59f9565757f0dc7417 (patch) | |
tree | fe74b67d390b0a8cf7bcf60730a1f4bdb11e260c /src/plugins/projectexplorer/runconfigurationaspects.h | |
parent | ef660d8bd03b71dfa51ac08ef72c3ebc1adbbfd7 (diff) |
ProjectExplorer: Rework executable display handling in runconfigs
The basic idea is to provide an easy-to-configure reusable
building block to provide an "Executable" in a run configuration.
This patch here extracts some generic from the previous
ExecutableAspect into a BaseStringAspect and bases the new
ExecutableAspect implementation on it. It also adds the
the ability to make it editable or to manually override an
executable, and adds a SymbolFile aspect for the accompanying
sources of debug information.
Use in RemoteLinux and Qnx for starters and demonstration purposes.
In the end the Qnx runconfiguration widget does not depend on the
RemoteLinux implementation anymore by replacing the previous
code-sharing-by-inheritance by direct (and less) code.
Change-Id: I91b55820455256a8526e39458364b6cb74e63cd7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/runconfigurationaspects.h')
-rw-r--r-- | src/plugins/projectexplorer/runconfigurationaspects.h | 118 |
1 files changed, 90 insertions, 28 deletions
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h index 659c817bc6..628b0c76b7 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.h +++ b/src/plugins/projectexplorer/runconfigurationaspects.h @@ -29,10 +29,12 @@ #include "applicationlauncher.h" #include <utils/fileutils.h> +#include <utils/osspecificaspects.h> QT_BEGIN_NAMESPACE class QCheckBox; class QLabel; +class QLineEdit; class QFormLayout; class QToolButton; QT_END_NAMESPACE @@ -79,7 +81,8 @@ class PROJECTEXPLORER_EXPORT WorkingDirectoryAspect : public IRunConfigurationAs Q_OBJECT public: - explicit WorkingDirectoryAspect(RunConfiguration *runConfig, const QString &settingsKey); + explicit WorkingDirectoryAspect(RunConfiguration *runConfig, + const QString &settingsKey = QString()); void addToMainConfigurationWidget(QWidget *parent, QFormLayout *layout); @@ -107,7 +110,7 @@ class PROJECTEXPLORER_EXPORT ArgumentsAspect : public IRunConfigurationAspect Q_OBJECT public: - explicit ArgumentsAspect(RunConfiguration *runConfig, const QString &settingsKey); + explicit ArgumentsAspect(RunConfiguration *runConfig, const QString &settingsKey = QString()); void addToMainConfigurationWidget(QWidget *parent, QFormLayout *layout); @@ -127,68 +130,127 @@ private: QPointer<Utils::FancyLineEdit> m_chooser; }; -class PROJECTEXPLORER_EXPORT ExecutableAspect : public IRunConfigurationAspect +class PROJECTEXPLORER_EXPORT BaseBoolAspect : public IRunConfigurationAspect { Q_OBJECT public: - ExecutableAspect(RunConfiguration *runConfig, - bool isRemote = false, - const QString &label = QString()); + explicit BaseBoolAspect(RunConfiguration *rc, const QString &settingsKey = QString()); void addToMainConfigurationWidget(QWidget *parent, QFormLayout *layout); - Utils::FileName executable() const; - void setExecutable(const Utils::FileName &executable); + bool value() const; + void setValue(bool val); + + void setLabel(const QString &label); + + void fromMap(const QVariantMap &map) override; + void toMap(QVariantMap &map) const override; + +signals: + void changed(); private: - QString executableText() const; + bool m_value = false; + QString m_label; + QPointer<QCheckBox> m_checkBox; // Owned by RunConfigWidget +}; + +class PROJECTEXPLORER_EXPORT UseLibraryPathsAspect : public BaseBoolAspect +{ + Q_OBJECT - Utils::FileName m_executable; - bool m_isRemote = false; - QString m_labelString; - QPointer<QLabel> m_executableDisplay; +public: + UseLibraryPathsAspect(RunConfiguration *rc, const QString &settingsKey); }; -class PROJECTEXPLORER_EXPORT BaseBoolAspect : public IRunConfigurationAspect +class PROJECTEXPLORER_EXPORT UseDyldSuffixAspect : public BaseBoolAspect { Q_OBJECT public: - BaseBoolAspect(RunConfiguration *rc, const QString &settingsKey); + UseDyldSuffixAspect(RunConfiguration *rc, const QString &settingsKey); +}; + +class PROJECTEXPLORER_EXPORT BaseStringAspect : public IRunConfigurationAspect +{ + Q_OBJECT + +public: + explicit BaseStringAspect(RunConfiguration *rc); void addToMainConfigurationWidget(QWidget *parent, QFormLayout *layout); - bool value() const; - void setValue(bool val); - void setLabel(const QString &label); + QString value() const; + void setValue(const QString &val); -signals: - void changed(); + QString labelText() const; + void setLabelText(const QString &labelText); + + void setDisplayFilter(const std::function<QString (const QString &)> &displayFilter); + void setPlaceHolderText(const QString &placeHolderText); + + bool isChecked() const; + void makeCheckable(const QString &optionalLabel, const QString &optionalBaseKey); + + enum DisplayStyle { LabelDisplay, LineEditDisplay, PathChooserDisplay }; + void setDisplayStyle(DisplayStyle style); -private: void fromMap(const QVariantMap &map) override; void toMap(QVariantMap &map) const override; - bool m_value = false; - QString m_label; - QPointer<QCheckBox> m_checkBox; // Owned by RunConfigWidget + Utils::FileName fileName() const; + void setFileName(const Utils::FileName &val); + +private: + void update(); + + DisplayStyle m_displayStyle = LabelDisplay; + QString m_labelText; + std::function<QString(const QString &)> m_displayFilter; + BaseBoolAspect *m_checker = nullptr; + + QString m_value; + QString m_placeHolderText; + QPointer<QLabel> m_label; + QPointer<QLabel> m_labelDisplay; + QPointer<Utils::FancyLineEdit> m_lineEditDisplay; + QPointer<Utils::PathChooser> m_pathChooserDisplay; }; -class PROJECTEXPLORER_EXPORT UseLibraryPathsAspect : public BaseBoolAspect +class PROJECTEXPLORER_EXPORT ExecutableAspect : public IRunConfigurationAspect { Q_OBJECT public: - UseLibraryPathsAspect(RunConfiguration *rc, const QString &settingsKey); + explicit ExecutableAspect(RunConfiguration *rc); + + Utils::FileName executable() const; + void setExecutable(const Utils::FileName &executable); + + void makeOverridable(const QString &overridingKey, const QString &useOverridableKey); + void addToMainConfigurationWidget(QWidget *parent, QFormLayout *layout); + void setLabelText(const QString &labelText); + void setPlaceHolderText(const QString &placeHolderText); + void setExecutablePathStyle(Utils::OsType osType); + +protected: + void fromMap(const QVariantMap &map) override; + void toMap(QVariantMap &map) const override; + +private: + QString executableText() const; + + BaseStringAspect m_executable; + BaseStringAspect *m_alternativeExecutable = nullptr; }; -class PROJECTEXPLORER_EXPORT UseDyldSuffixAspect : public BaseBoolAspect +class PROJECTEXPLORER_EXPORT SymbolFileAspect : public BaseStringAspect { Q_OBJECT public: - UseDyldSuffixAspect(RunConfiguration *rc, const QString &settingsKey); + SymbolFileAspect(RunConfiguration *rc) : BaseStringAspect(rc) {} }; } // namespace ProjectExplorer |