aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/runconfigurationaspects.h
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-04-16 13:28:47 +0200
committerhjk <hjk@qt.io>2018-04-23 10:34:08 +0000
commit4b9945c32981105bfae3ba59f9565757f0dc7417 (patch)
treefe74b67d390b0a8cf7bcf60730a1f4bdb11e260c /src/plugins/projectexplorer/runconfigurationaspects.h
parentef660d8bd03b71dfa51ac08ef72c3ebc1adbbfd7 (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.h118
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