Merge remote-tracking branch 'origin/4.14'

Change-Id: I9d1931b7862f4541ac7a064ff987128afd835cbe
This commit is contained in:
Eike Ziller
2020-12-07 12:29:44 +01:00
34 changed files with 499 additions and 265 deletions

View File

@@ -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()

View File

@@ -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);

View File

@@ -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,

View File

@@ -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()

View File

@@ -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";

View File

@@ -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);

View File

@@ -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 *)

View File

@@ -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();
}
};

View File

@@ -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)

View File

@@ -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

View File

@@ -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()

View File

@@ -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);

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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 {