forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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(); });
|
||||||
|
|||||||
Reference in New Issue
Block a user