ProjectExplorer: Consider build environment

... in "Open Terminal Here" action in the build configuration.

Change-Id: I0b1b15d4f1097cf48eb5a977f2ca5951b2f78377
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2020-11-09 15:57:47 +01:00
parent 6813d14872
commit ad48f2639c
8 changed files with 39 additions and 4 deletions

View File

@@ -278,6 +278,7 @@ public:
FilePath m_baseFileName; FilePath m_baseFileName;
StringAspect::ValueAcceptor m_valueAcceptor; StringAspect::ValueAcceptor m_valueAcceptor;
FancyLineEdit::ValidationFunction m_validator; FancyLineEdit::ValidationFunction m_validator;
std::function<void()> m_openTerminal;
bool m_readOnly = false; bool m_readOnly = false;
bool m_undoRedoEnabled = false; bool m_undoRedoEnabled = false;
@@ -613,6 +614,13 @@ void StringAspect::setValidationFunction(const FancyLineEdit::ValidationFunction
d->m_lineEditDisplay->setValidationFunction(d->m_validator); d->m_lineEditDisplay->setValidationFunction(d->m_validator);
} }
void StringAspect::setOpenTerminalHandler(const std::function<void ()> &openTerminal)
{
d->m_openTerminal = openTerminal;
if (d->m_pathChooserDisplay)
d->m_pathChooserDisplay->setOpenTerminalHandler(openTerminal);
}
void StringAspect::validateInput() void StringAspect::validateInput()
{ {
if (d->m_pathChooserDisplay) if (d->m_pathChooserDisplay)
@@ -667,6 +675,7 @@ void StringAspect::addToLayout(LayoutBuilder &builder)
this, &StringAspect::setValue); this, &StringAspect::setValue);
builder.addItem(d->m_pathChooserDisplay.data()); builder.addItem(d->m_pathChooserDisplay.data());
d->m_pathChooserDisplay->setFileDialogOnly(d->m_fileDialogOnly); d->m_pathChooserDisplay->setFileDialogOnly(d->m_fileDialogOnly);
d->m_pathChooserDisplay->setOpenTerminalHandler(d->m_openTerminal);
break; break;
case LineEditDisplay: case LineEditDisplay:
d->m_lineEditDisplay = new FancyLineEdit; d->m_lineEditDisplay = new FancyLineEdit;

View File

@@ -32,6 +32,7 @@
#include "optional.h" #include "optional.h"
#include "pathchooser.h" #include "pathchooser.h"
#include <functional>
#include <memory> #include <memory>
namespace Utils { namespace Utils {
@@ -235,6 +236,7 @@ public:
void setUndoRedoEnabled(bool readOnly); void setUndoRedoEnabled(bool readOnly);
void setMacroExpanderProvider(const Utils::MacroExpanderProvider &expanderProvider); void setMacroExpanderProvider(const Utils::MacroExpanderProvider &expanderProvider);
void setValidationFunction(const Utils::FancyLineEdit::ValidationFunction &validator); void setValidationFunction(const Utils::FancyLineEdit::ValidationFunction &validator);
void setOpenTerminalHandler(const std::function<void()> &openTerminal);
void validateInput(); void validateInput();

View File

@@ -195,6 +195,7 @@ public:
BinaryVersionToolTipEventFilter *m_binaryVersionToolTipEventFilter = nullptr; BinaryVersionToolTipEventFilter *m_binaryVersionToolTipEventFilter = nullptr;
QList<QAbstractButton *> m_buttons; QList<QAbstractButton *> m_buttons;
MacroExpander *m_macroExpander = globalMacroExpander(); MacroExpander *m_macroExpander = globalMacroExpander();
std::function<void()> m_openTerminal;
bool m_isReadOnly = false; bool m_isReadOnly = false;
bool m_isFileDialogOnly = false; bool m_isFileDialogOnly = false;
@@ -522,6 +523,16 @@ void PathChooser::setAboutToShowContextMenuHandler(PathChooser::AboutToShowConte
s_aboutToShowContextMenuHandler = handler; s_aboutToShowContextMenuHandler = handler;
} }
void PathChooser::setOpenTerminalHandler(const std::function<void ()> &openTerminal)
{
d->m_openTerminal = openTerminal;
}
std::function<void()> PathChooser::openTerminalHandler() const
{
return d->m_openTerminal;
}
void PathChooser::setDefaultValue(const QString &defaultValue) void PathChooser::setDefaultValue(const QString &defaultValue)
{ {
d->m_defaultValue = defaultValue; d->m_defaultValue = defaultValue;

View File

@@ -148,6 +148,9 @@ public:
using AboutToShowContextMenuHandler = std::function<void (PathChooser *, QMenu *)>; using AboutToShowContextMenuHandler = std::function<void (PathChooser *, QMenu *)>;
static void setAboutToShowContextMenuHandler(AboutToShowContextMenuHandler handler); static void setAboutToShowContextMenuHandler(AboutToShowContextMenuHandler handler);
void setOpenTerminalHandler(const std::function<void()> &openTerminal);
std::function<void()> openTerminalHandler() const;
// Deprecated. Use filePath().toString() or better suitable conversions. // Deprecated. Use filePath().toString() or better suitable conversions.
QString path() const { return filePath().toString(); } QString path() const { return filePath().toString(); }
// Deprecated. Use filePath() // Deprecated. Use filePath()

View File

@@ -285,7 +285,10 @@ void CorePlugin::addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QM
auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalHereAction(), menu); auto *showInTerminal = new QAction(Core::FileUtils::msgTerminalHereAction(), menu);
connect(showInTerminal, &QAction::triggered, pathChooser, [pathChooser]() { connect(showInTerminal, &QAction::triggered, pathChooser, [pathChooser]() {
Core::FileUtils::openTerminal(pathChooser->filePath().toString()); if (pathChooser->openTerminalHandler())
pathChooser->openTerminalHandler()();
else
FileUtils::openTerminal(pathChooser->filePath().toString());
}); });
menu->insertAction(firstAction, showInTerminal); menu->insertAction(firstAction, showInTerminal);

View File

@@ -25,9 +25,12 @@
#include "buildaspects.h" #include "buildaspects.h"
#include "buildconfiguration.h"
#include "buildpropertiessettings.h" #include "buildpropertiessettings.h"
#include "projectexplorer.h" #include "projectexplorer.h"
#include <coreplugin/fileutils.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/infolabel.h> #include <utils/infolabel.h>
#include <utils/layoutbuilder.h> #include <utils/layoutbuilder.h>
@@ -47,12 +50,15 @@ public:
QPointer<InfoLabel> problemLabel; QPointer<InfoLabel> problemLabel;
}; };
BuildDirectoryAspect::BuildDirectoryAspect() : d(new Private) BuildDirectoryAspect::BuildDirectoryAspect(const BuildConfiguration *bc) : d(new Private)
{ {
setSettingsKey("ProjectExplorer.BuildConfiguration.BuildDirectory"); setSettingsKey("ProjectExplorer.BuildConfiguration.BuildDirectory");
setLabelText(tr("Build directory:")); setLabelText(tr("Build directory:"));
setDisplayStyle(PathChooserDisplay); setDisplayStyle(PathChooserDisplay);
setExpectedKind(Utils::PathChooser::Directory); setExpectedKind(Utils::PathChooser::Directory);
setOpenTerminalHandler([this, bc] {
Core::FileUtils::openTerminal(value(), bc->environment());
});
} }
BuildDirectoryAspect::~BuildDirectoryAspect() BuildDirectoryAspect::~BuildDirectoryAspect()

View File

@@ -32,12 +32,13 @@
namespace Utils { class FilePath; } namespace Utils { class FilePath; }
namespace ProjectExplorer { namespace ProjectExplorer {
class BuildConfiguration;
class PROJECTEXPLORER_EXPORT BuildDirectoryAspect : public Utils::StringAspect class PROJECTEXPLORER_EXPORT BuildDirectoryAspect : public Utils::StringAspect
{ {
Q_OBJECT Q_OBJECT
public: public:
BuildDirectoryAspect(); explicit BuildDirectoryAspect(const BuildConfiguration *bc);
~BuildDirectoryAspect() override; ~BuildDirectoryAspect() override;
void allowInSourceBuilds(const Utils::FilePath &sourceDir); void allowInSourceBuilds(const Utils::FilePath &sourceDir);

View File

@@ -197,7 +197,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Utils::Id id)
connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged, connect(ProjectTree::instance(), &ProjectTree::currentProjectChanged,
this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged); this, &BuildConfiguration::updateCacheAndEmitEnvironmentChanged);
d->m_buildDirectoryAspect = addAspect<BuildDirectoryAspect>(); d->m_buildDirectoryAspect = addAspect<BuildDirectoryAspect>(this);
d->m_buildDirectoryAspect->setBaseFileName(target->project()->projectDirectory()); d->m_buildDirectoryAspect->setBaseFileName(target->project()->projectDirectory());
d->m_buildDirectoryAspect->setEnvironment(environment()); d->m_buildDirectoryAspect->setEnvironment(environment());
d->m_buildDirectoryAspect->setMacroExpanderProvider([this] { return macroExpander(); }); d->m_buildDirectoryAspect->setMacroExpanderProvider([this] { return macroExpander(); });