forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.14'
Change-Id: I9d1931b7862f4541ac7a064ff987128afd835cbe
This commit is contained in:
@@ -115,8 +115,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
++row;
|
||||
|
||||
auto qmlDebugAspect = bc->aspect<QtSupport::QmlDebuggingAspect>();
|
||||
connect(qmlDebugAspect, &QtSupport::QmlDebuggingAspect::changed,
|
||||
this, [this]() { handleQmlDebugCxxFlags(); });
|
||||
connect(qmlDebugAspect, &QtSupport::QmlDebuggingAspect::changed, this, [this]() {
|
||||
updateButtonState();
|
||||
});
|
||||
auto widget = new QWidget;
|
||||
LayoutBuilder builder(widget);
|
||||
qmlDebugAspect->addToLayout(builder);
|
||||
@@ -259,7 +260,6 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
|
||||
m_configView->setEnabled(true);
|
||||
stretcher->stretch();
|
||||
updateButtonState();
|
||||
handleQmlDebugCxxFlags();
|
||||
m_showProgressTimer.stop();
|
||||
m_progressIndicator->hide();
|
||||
});
|
||||
@@ -360,43 +360,44 @@ void CMakeBuildSettingsWidget::setWarning(const QString &message)
|
||||
void CMakeBuildSettingsWidget::updateButtonState()
|
||||
{
|
||||
const bool isParsing = m_buildConfiguration->buildSystem()->isParsing();
|
||||
const bool hasChanges = m_configModel->hasChanges();
|
||||
m_resetButton->setEnabled(hasChanges && !isParsing);
|
||||
m_reconfigureButton->setEnabled((hasChanges || m_configModel->hasCMakeChanges()) && !isParsing);
|
||||
|
||||
// Update extra data in buildconfiguration
|
||||
const QList<ConfigModel::DataItem> changes = m_configModel->configurationForCMake();
|
||||
|
||||
const CMakeConfig configChanges = Utils::transform(changes, [](const ConfigModel::DataItem &i) {
|
||||
CMakeConfigItem ni;
|
||||
ni.key = i.key.toUtf8();
|
||||
ni.value = i.value.toUtf8();
|
||||
ni.documentation = i.description.toUtf8();
|
||||
ni.isAdvanced = i.isAdvanced;
|
||||
ni.isUnset = i.isUnset;
|
||||
ni.inCMakeCache = i.inCMakeCache;
|
||||
ni.values = i.values;
|
||||
switch (i.type) {
|
||||
case CMakeProjectManager::ConfigModel::DataItem::BOOLEAN:
|
||||
ni.type = CMakeConfigItem::BOOL;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::FILE:
|
||||
ni.type = CMakeConfigItem::FILEPATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::DIRECTORY:
|
||||
ni.type = CMakeConfigItem::PATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::STRING:
|
||||
ni.type = CMakeConfigItem::STRING;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::UNKNOWN:
|
||||
default:
|
||||
ni.type = CMakeConfigItem::INTERNAL;
|
||||
break;
|
||||
}
|
||||
return ni;
|
||||
});
|
||||
const CMakeConfig configChanges
|
||||
= getQmlDebugCxxFlags() + Utils::transform(changes, [](const ConfigModel::DataItem &i) {
|
||||
CMakeConfigItem ni;
|
||||
ni.key = i.key.toUtf8();
|
||||
ni.value = i.value.toUtf8();
|
||||
ni.documentation = i.description.toUtf8();
|
||||
ni.isAdvanced = i.isAdvanced;
|
||||
ni.isUnset = i.isUnset;
|
||||
ni.inCMakeCache = i.inCMakeCache;
|
||||
ni.values = i.values;
|
||||
switch (i.type) {
|
||||
case CMakeProjectManager::ConfigModel::DataItem::BOOLEAN:
|
||||
ni.type = CMakeConfigItem::BOOL;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::FILE:
|
||||
ni.type = CMakeConfigItem::FILEPATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::DIRECTORY:
|
||||
ni.type = CMakeConfigItem::PATH;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::STRING:
|
||||
ni.type = CMakeConfigItem::STRING;
|
||||
break;
|
||||
case CMakeProjectManager::ConfigModel::DataItem::UNKNOWN:
|
||||
default:
|
||||
ni.type = CMakeConfigItem::INTERNAL;
|
||||
break;
|
||||
}
|
||||
return ni;
|
||||
});
|
||||
|
||||
m_resetButton->setEnabled(m_configModel->hasChanges() && !isParsing);
|
||||
m_reconfigureButton->setEnabled((!configChanges.isEmpty() || m_configModel->hasCMakeChanges())
|
||||
&& !isParsing);
|
||||
m_buildConfiguration->setExtraCMakeArguments(
|
||||
Utils::transform(configChanges, [](const CMakeConfigItem &i) { return i.toArgument(); }));
|
||||
}
|
||||
@@ -426,10 +427,12 @@ void CMakeBuildSettingsWidget::updateFromKit()
|
||||
m_configModel->setConfigurationFromKit(configHash);
|
||||
}
|
||||
|
||||
void CMakeBuildSettingsWidget::handleQmlDebugCxxFlags()
|
||||
CMakeConfig CMakeBuildSettingsWidget::getQmlDebugCxxFlags()
|
||||
{
|
||||
bool changed = false;
|
||||
const auto aspect = m_buildConfiguration->aspect<QtSupport::QmlDebuggingAspect>();
|
||||
const TriState qmlDebuggingState = aspect->setting();
|
||||
if (qmlDebuggingState == TriState::Default) // don't touch anything
|
||||
return {};
|
||||
const bool enable = aspect->setting() == TriState::Enabled;
|
||||
|
||||
const CMakeConfig configList = m_buildConfiguration->configurationFromCMake();
|
||||
@@ -446,25 +449,19 @@ void CMakeBuildSettingsWidget::handleQmlDebugCxxFlags()
|
||||
CMakeConfigItem it(item);
|
||||
if (enable) {
|
||||
if (!it.value.contains(qmlDebug)) {
|
||||
it.value = it.value.append(' ').append(qmlDebug);
|
||||
changed = true;
|
||||
it.value = it.value.append(' ').append(qmlDebug).trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
} else {
|
||||
int index = it.value.indexOf(qmlDebug);
|
||||
if (index != -1) {
|
||||
it.value.remove(index, qmlDebug.length());
|
||||
changed = true;
|
||||
it.value = it.value.trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
}
|
||||
it.value = it.value.trimmed();
|
||||
changedConfig.append(it);
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
m_buildConfiguration->setExtraCMakeArguments(
|
||||
Utils::transform(changedConfig,
|
||||
[](const CMakeConfigItem &i) { return i.toArgument(); }));
|
||||
}
|
||||
return changedConfig;
|
||||
}
|
||||
|
||||
void CMakeBuildSettingsWidget::updateSelection()
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cmakeconfigitem.h"
|
||||
|
||||
#include <projectexplorer/namedwidget.h>
|
||||
#include <QTimer>
|
||||
|
||||
@@ -66,7 +68,7 @@ private:
|
||||
void updateButtonState();
|
||||
void updateAdvancedCheckBox();
|
||||
void updateFromKit();
|
||||
void handleQmlDebugCxxFlags();
|
||||
CMakeProjectManager::CMakeConfig getQmlDebugCxxFlags();
|
||||
|
||||
void updateSelection();
|
||||
void setVariableUnsetFlag(bool unsetFlag);
|
||||
|
||||
@@ -287,10 +287,6 @@ void CMakeBuildSystem::triggerParsing()
|
||||
reparseParameters |= REPARSE_FORCE_CMAKE_RUN | REPARSE_FORCE_EXTRA_CONFIGURATION;
|
||||
}
|
||||
|
||||
// Do not add extra args when doing initial configuration
|
||||
if (0 != (reparseParameters & REPARSE_FORCE_INITIAL_CONFIGURATION))
|
||||
reparseParameters = reparseParameters ^ REPARSE_FORCE_EXTRA_CONFIGURATION;
|
||||
|
||||
qCDebug(cmakeBuildSystemLog) << "Asking reader to parse";
|
||||
m_reader.parse(reparseParameters & REPARSE_FORCE_CMAKE_RUN,
|
||||
reparseParameters & REPARSE_FORCE_INITIAL_CONFIGURATION,
|
||||
|
||||
@@ -506,12 +506,11 @@ void McuSupportOptions::registerQchFiles()
|
||||
if (docsDir.isEmpty())
|
||||
return;
|
||||
|
||||
const QStringList qchFiles = {
|
||||
docsDir + "/quickultralite.qch",
|
||||
docsDir + "/quickultralitecmake.qch"
|
||||
};
|
||||
const QFileInfoList qchFiles = QDir(docsDir, "*.qch").entryInfoList();
|
||||
Core::HelpManager::registerDocumentation(
|
||||
Utils::filtered(qchFiles, [](const QString &f) { return QFileInfo::exists(f); } ));
|
||||
Utils::transform<QStringList>(qchFiles, [](const QFileInfo &fi){
|
||||
return fi.absoluteFilePath();
|
||||
}));
|
||||
}
|
||||
|
||||
void McuSupportOptions::registerExamples()
|
||||
|
||||
@@ -159,6 +159,7 @@ const char BUILDSTEPS_DEPLOY[] = "ProjectExplorer.BuildSteps.Deploy";
|
||||
const char C_LANGUAGE_ID[] = "C";
|
||||
const char CXX_LANGUAGE_ID[] = "Cxx";
|
||||
const char QMLJS_LANGUAGE_ID[] = "QMLJS";
|
||||
const char PYTHON_LANGUAGE_ID[] = "Python";
|
||||
|
||||
// ToolChain TypeIds
|
||||
const char CLANG_TOOLCHAIN_TYPEID[] = "ProjectExplorer.ToolChain.Clang";
|
||||
|
||||
@@ -214,7 +214,7 @@ PythonProject::PythonProject(const FilePath &fileName)
|
||||
: Project(Constants::C_PY_MIMETYPE, fileName)
|
||||
{
|
||||
setId(PythonProjectId);
|
||||
setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
|
||||
setProjectLanguages(Context(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID));
|
||||
setDisplayName(fileName.toFileInfo().completeBaseName());
|
||||
|
||||
setNeedsBuildConfigurations(false);
|
||||
|
||||
@@ -656,8 +656,23 @@ void FormEditorFlowActionItem::setDataModelPositionInBaseState(const QPointF &po
|
||||
void FormEditorFlowActionItem::updateGeometry()
|
||||
{
|
||||
FormEditorItem::updateGeometry();
|
||||
//const QPointF pos = qmlItemNode().flowPosition();
|
||||
//setTransform(QTransform::fromTranslate(pos.x(), pos.y()));
|
||||
|
||||
const QPointF pos = qmlItemNode().instancePosition();
|
||||
|
||||
if (pos == m_oldPos)
|
||||
return;
|
||||
|
||||
m_oldPos = pos;
|
||||
|
||||
// Call updateGeometry() on all related transitions
|
||||
QmlFlowItemNode flowItem = QmlFlowActionAreaNode(qmlItemNode()).flowItemParent();
|
||||
if (flowItem.isValid() && flowItem.flowView().isValid()) {
|
||||
const auto nodes = flowItem.flowView().transitions();
|
||||
for (const ModelNode &node : nodes) {
|
||||
if (FormEditorItem *item = scene()->itemForQmlItemNode(node))
|
||||
item->updateGeometry();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FormEditorFlowActionItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "formeditorwidget.h"
|
||||
#include "designeractionmanager.h"
|
||||
#include "designersettings.h"
|
||||
#include "formeditoritem.h"
|
||||
#include "formeditorscene.h"
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "qmldesignericons.h"
|
||||
@@ -208,7 +209,19 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view)
|
||||
|
||||
auto frameAll = [this, zoomOut]() {
|
||||
if (m_graphicsView) {
|
||||
m_graphicsView->frame(m_graphicsView->rootItemRect());
|
||||
QRectF bounds;
|
||||
if (QmlItemNode(m_formEditorView->rootModelNode()).isFlowView()) {
|
||||
for (QGraphicsItem *item : m_formEditorView->scene()->items()) {
|
||||
if (auto *fitem = FormEditorItem::fromQGraphicsItem(item)) {
|
||||
if (!fitem->qmlItemNode().modelNode().isRootNode()
|
||||
&& !fitem->sceneBoundingRect().isNull())
|
||||
bounds |= fitem->sceneBoundingRect();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bounds = m_graphicsView->rootItemRect();
|
||||
}
|
||||
m_graphicsView->frame(bounds);
|
||||
zoomOut();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -63,7 +63,8 @@ static bool itemIsRotatable(const QmlItemNode &qmlItemNode)
|
||||
&& qmlItemNode.instanceIsResizable()
|
||||
&& qmlItemNode.modelIsMovable()
|
||||
&& qmlItemNode.modelIsRotatable()
|
||||
&& !qmlItemNode.instanceIsInLayoutable();
|
||||
&& !qmlItemNode.instanceIsInLayoutable()
|
||||
&& !qmlItemNode.isFlowItem();
|
||||
}
|
||||
|
||||
void RotationIndicator::setItems(const QList<FormEditorItem*> &itemList)
|
||||
|
||||
@@ -38,7 +38,6 @@ ConnectionManagerInterface::Connection::~Connection() = default;
|
||||
ConnectionManagerInterface::Connection::Connection(const QString &name, const QString &mode)
|
||||
: name{name}
|
||||
, mode{mode}
|
||||
, timer{std::make_unique<QTimer>()}
|
||||
{}
|
||||
|
||||
ConnectionManagerInterface::Connection::Connection(Connection &&connection) = default;
|
||||
@@ -49,7 +48,7 @@ void ConnectionManagerInterface::Connection::clear()
|
||||
socket.reset();
|
||||
blockSize = 0;
|
||||
lastReadCommandCounter = 0;
|
||||
timer->stop();
|
||||
timer.reset();
|
||||
}
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
||||
@@ -52,8 +52,10 @@ void InteractiveConnectionManager::setUp(NodeInstanceServerInterface *nodeInstan
|
||||
|
||||
DesignerSettings settings = QmlDesignerPlugin::instance()->settings();
|
||||
int timeOutTime = settings.value(DesignerSettingsKey::PUPPET_KILL_TIMEOUT).toInt();
|
||||
for (Connection &connection : connections())
|
||||
for (Connection &connection : connections()) {
|
||||
connection.timer.reset(new QTimer);
|
||||
connection.timer->setInterval(timeOutTime);
|
||||
}
|
||||
|
||||
if (QmlDesignerPlugin::instance()
|
||||
->settings()
|
||||
|
||||
@@ -159,7 +159,7 @@ bool InternalNode::hasId() const
|
||||
}
|
||||
|
||||
|
||||
uint qHash(const InternalNodePointer& node)
|
||||
Utils::QHashValueType qHash(const InternalNodePointer& node)
|
||||
{
|
||||
if (node.isNull())
|
||||
return ::qHash(-1);
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
#include "internalnodeproperty.h"
|
||||
#include "internalnodeabstractproperty.h"
|
||||
|
||||
#include <utils/porting.h>
|
||||
|
||||
namespace QmlDesigner {
|
||||
|
||||
namespace Internal {
|
||||
@@ -150,7 +152,7 @@ private:
|
||||
int m_nodeSourceType = 0;
|
||||
};
|
||||
|
||||
uint qHash(const InternalNodePointer& node);
|
||||
Utils::QHashValueType qHash(const InternalNodePointer& node);
|
||||
bool operator <(const InternalNodePointer &firstNode, const InternalNodePointer &secondNode);
|
||||
} // Internal
|
||||
} // QtQmlDesigner
|
||||
|
||||
@@ -150,7 +150,7 @@ float QmlPreviewPlugin::zoomFactor()
|
||||
|
||||
void QmlPreviewPlugin::setZoomFactor(float zoomFactor)
|
||||
{
|
||||
if (s_previewPlugin) {
|
||||
if (auto s_previewPlugin = getPreviewPlugin()) {
|
||||
bool hasZoomFactor = s_previewPlugin->setProperty("zoomFactor", zoomFactor);
|
||||
QTC_CHECK(hasZoomFactor);
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <QDirIterator>
|
||||
#include <QFileInfo>
|
||||
#include <QFormLayout>
|
||||
#include <QSet>
|
||||
#include <QTemporaryDir>
|
||||
|
||||
using namespace ProjectExplorer;
|
||||
@@ -182,11 +183,16 @@ void MakeInstallStep::finish(bool success)
|
||||
m_deploymentData.setLocalInstallRoot(installRoot());
|
||||
QDirIterator dit(installRoot().toString(), QDir::Files | QDir::Hidden,
|
||||
QDirIterator::Subdirectories);
|
||||
const auto appFileNames = transform<QSet<QString>>(buildSystem()->applicationTargets(),
|
||||
[](const BuildTargetInfo &appTarget) { return appTarget.targetFilePath.fileName(); });
|
||||
while (dit.hasNext()) {
|
||||
dit.next();
|
||||
const QFileInfo fi = dit.fileInfo();
|
||||
const DeployableFile::Type type = appFileNames.contains(fi.fileName())
|
||||
? DeployableFile::TypeExecutable
|
||||
: DeployableFile::TypeNormal;
|
||||
m_deploymentData.addFile(fi.filePath(),
|
||||
fi.dir().path().mid(installRoot().toString().length()));
|
||||
fi.dir().path().mid(installRoot().toString().length()), type);
|
||||
}
|
||||
buildSystem()->setDeploymentData(m_deploymentData);
|
||||
} else if (m_noInstallTarget && m_isCmakeProject) {
|
||||
|
||||
@@ -640,7 +640,7 @@ void VcsBasePluginPrivate::createRepository()
|
||||
// Find current starting directory
|
||||
QString directory;
|
||||
if (const Project *currentProject = ProjectTree::currentProject())
|
||||
directory = currentProject->projectFilePath().toString();
|
||||
directory = currentProject->projectFilePath().absolutePath().toString();
|
||||
// Prompt for a directory that is not under version control yet
|
||||
QWidget *mw = ICore::dialogParent();
|
||||
do {
|
||||
|
||||
Reference in New Issue
Block a user