forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.5'
Conflicts: src/plugins/qmlprofiler/qmlprofilerclientmanager.cpp Change-Id: I726babe61e28db14d06a6a1a5c570e148745b458
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 27 KiB |
@@ -61,6 +61,17 @@
|
||||
|
||||
\endlist
|
||||
|
||||
The \uicontrol {Application Output} pane displays the status of the
|
||||
application while it is running. You can select the \uicontrol Run button
|
||||
in the pane to re-run applications without building them first. This is
|
||||
useful when developing Qt Quick applications, because the QML files are
|
||||
interpreted at runtime. Therefore, the application does not need to be
|
||||
built again if you edited only QML files. This saves time especially if
|
||||
the application contains large image files that would need to be bundled
|
||||
into the resource file before running the application.
|
||||
|
||||
\image qtcreator-application-output.png
|
||||
|
||||
For more information on the options you have, see
|
||||
\l{Specifying Run Settings}.
|
||||
|
||||
|
||||
@@ -2911,7 +2911,7 @@ class DumperBase:
|
||||
def display(self, useHex = 1):
|
||||
if self.type.code == TypeCodeEnum:
|
||||
intval = self.integer()
|
||||
if useHex:
|
||||
if useHex and hasattr(self.type.typeData(), 'enumHexDisplay'):
|
||||
return self.type.typeData().enumHexDisplay(intval, self.laddress)
|
||||
return self.type.typeData().enumDisplay(intval, self.laddress)
|
||||
simple = self.value()
|
||||
|
||||
@@ -209,6 +209,7 @@ PaletteButton=shadowBackground
|
||||
PaletteBrightText=ffff3333
|
||||
PaletteText=text
|
||||
PaletteButtonText=text
|
||||
PaletteButtonTextDisabled=textDisabled
|
||||
PaletteToolTipBase=selectedBackground
|
||||
PaletteHighlight=selectedBackground
|
||||
PaletteDark=shadowBackground
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -331,38 +331,40 @@ static QString firstTestCaseTarget(const TestConfiguration *config)
|
||||
return TestRunner::tr("<unknown>");
|
||||
}
|
||||
|
||||
static bool askUserForRunConfiguration(TestConfiguration *config)
|
||||
static ProjectExplorer::RunConfiguration *getRunConfiguration(const QString &dialogDetail)
|
||||
{
|
||||
using namespace ProjectExplorer;
|
||||
RunConfigurationSelectionDialog dialog(firstTestCaseTarget(config),
|
||||
Core::ICore::dialogParent());
|
||||
const Project *project = SessionManager::startupProject();
|
||||
if (!project)
|
||||
return nullptr;
|
||||
const Target *target = project->activeTarget();
|
||||
if (!target)
|
||||
return nullptr;
|
||||
|
||||
RunConfiguration *runConfig = nullptr;
|
||||
const QList<RunConfiguration *> runConfigurations
|
||||
= Utils::filtered(target->runConfigurations(), [] (const RunConfiguration *rc) {
|
||||
if (!rc->runnable().is<StandardRunnable>())
|
||||
return false;
|
||||
return !rc->runnable().as<StandardRunnable>().executable.isEmpty();
|
||||
});
|
||||
if (runConfigurations.size() == 1)
|
||||
return runConfigurations.first();
|
||||
|
||||
RunConfigurationSelectionDialog dialog(dialogDetail, Core::ICore::dialogParent());
|
||||
if (dialog.exec() == QDialog::Accepted) {
|
||||
const QString dName = dialog.displayName();
|
||||
if (dName.isEmpty())
|
||||
return false;
|
||||
return nullptr;
|
||||
// run configuration has been selected - fill config based on this one..
|
||||
const QString exe = dialog.executable();
|
||||
// paranoia... can the current startup project have changed meanwhile?
|
||||
if (auto project = SessionManager::startupProject()) {
|
||||
if (auto target = project->activeTarget()) {
|
||||
RunConfiguration *runConfig
|
||||
= Utils::findOr(target->runConfigurations(), nullptr,
|
||||
[&dName, &exe] (const RunConfiguration *rc) {
|
||||
runConfig = Utils::findOr(runConfigurations, nullptr, [&dName, &exe] (const RunConfiguration *rc) {
|
||||
if (rc->displayName() != dName)
|
||||
return false;
|
||||
if (!rc->runnable().is<StandardRunnable>())
|
||||
return false;
|
||||
StandardRunnable runnable = rc->runnable().as<StandardRunnable>();
|
||||
return runnable.executable == exe;
|
||||
return rc->runnable().as<StandardRunnable>().executable == exe;
|
||||
});
|
||||
if (runConfig) {
|
||||
config->setOriginalRunConfiguration(runConfig);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return runConfig;
|
||||
}
|
||||
|
||||
void TestRunner::runTests()
|
||||
@@ -370,10 +372,13 @@ void TestRunner::runTests()
|
||||
QList<TestConfiguration *> toBeRemoved;
|
||||
for (TestConfiguration *config : m_selectedTests) {
|
||||
config->completeTestInformation(TestRunMode::Run);
|
||||
if (!config->hasExecutable())
|
||||
if (!askUserForRunConfiguration(config))
|
||||
if (!config->hasExecutable()) {
|
||||
if (auto rc = getRunConfiguration(firstTestCaseTarget(config)))
|
||||
config->setOriginalRunConfiguration(rc);
|
||||
else
|
||||
toBeRemoved.append(config);
|
||||
}
|
||||
}
|
||||
for (TestConfiguration *config : toBeRemoved)
|
||||
m_selectedTests.removeOne(config);
|
||||
qDeleteAll(toBeRemoved);
|
||||
@@ -427,8 +432,8 @@ void TestRunner::debugTests()
|
||||
TestConfiguration *config = m_selectedTests.first();
|
||||
config->completeTestInformation(TestRunMode::Debug);
|
||||
if (!config->hasExecutable()) {
|
||||
if (askUserForRunConfiguration(config))
|
||||
config->completeTestInformation(config->originalRunConfiguration(), TestRunMode::Debug);
|
||||
if (auto *rc = getRunConfiguration(firstTestCaseTarget(config)))
|
||||
config->completeTestInformation(rc, TestRunMode::Debug);
|
||||
}
|
||||
|
||||
if (!config->runConfiguration()) {
|
||||
|
||||
@@ -54,16 +54,16 @@ const char LAST_PLATFORM_KEY[] = "Core/NewDialog/LastPlatform";
|
||||
class WizardFactoryContainer
|
||||
{
|
||||
public:
|
||||
WizardFactoryContainer() : wizard(0), wizardOption(0) {}
|
||||
WizardFactoryContainer() : wizard(nullptr), wizardOption(0) {}
|
||||
WizardFactoryContainer(Core::IWizardFactory *w, int i): wizard(w), wizardOption(i) {}
|
||||
Core::IWizardFactory *wizard;
|
||||
int wizardOption;
|
||||
};
|
||||
|
||||
inline Core::IWizardFactory *factoryOfItem(const QStandardItem *item = 0)
|
||||
inline Core::IWizardFactory *factoryOfItem(const QStandardItem *item = nullptr)
|
||||
{
|
||||
if (!item)
|
||||
return 0;
|
||||
return nullptr;
|
||||
return item->data(Qt::UserRole).value<WizardFactoryContainer>().wizard;
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ class PlatformFilterProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
// Q_OBJECT
|
||||
public:
|
||||
PlatformFilterProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent) {}
|
||||
PlatformFilterProxyModel(QObject *parent = nullptr): QSortFilterProxyModel(parent) {}
|
||||
|
||||
void setPlatform(Core::Id platform)
|
||||
{
|
||||
@@ -99,7 +99,7 @@ class TwoLevelProxyModel : public QAbstractProxyModel
|
||||
{
|
||||
// Q_OBJECT
|
||||
public:
|
||||
TwoLevelProxyModel(QObject *parent = 0): QAbstractProxyModel(parent) {}
|
||||
TwoLevelProxyModel(QObject *parent = nullptr): QAbstractProxyModel(parent) {}
|
||||
|
||||
QModelIndex index(int row, int column, const QModelIndex &parent) const override
|
||||
{
|
||||
@@ -145,7 +145,7 @@ public:
|
||||
class FancyTopLevelDelegate : public QItemDelegate
|
||||
{
|
||||
public:
|
||||
FancyTopLevelDelegate(QObject *parent = 0)
|
||||
FancyTopLevelDelegate(QObject *parent = nullptr)
|
||||
: QItemDelegate(parent) {}
|
||||
|
||||
void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const override
|
||||
@@ -394,7 +394,7 @@ static QIcon iconWithText(const QIcon &icon, const QString &text)
|
||||
void NewDialog::addItem(QStandardItem *topLevelCategoryItem, IWizardFactory *factory)
|
||||
{
|
||||
const QString categoryName = factory->category();
|
||||
QStandardItem *categoryItem = 0;
|
||||
QStandardItem *categoryItem = nullptr;
|
||||
for (int i = 0; i < topLevelCategoryItem->rowCount(); i++) {
|
||||
if (topLevelCategoryItem->child(i, 0)->data(Qt::UserRole) == categoryName)
|
||||
categoryItem = topLevelCategoryItem->child(i, 0);
|
||||
|
||||
@@ -668,11 +668,13 @@ void DebuggerEngine::notifyEngineSetupOk()
|
||||
if (isMasterEngine() && runTool())
|
||||
runTool()->reportStarted();
|
||||
|
||||
setState(InferiorSetupRequested);
|
||||
showMessage("CALL: SETUP INFERIOR");
|
||||
d->m_progress.setProgressValue(250);
|
||||
if (isMasterEngine())
|
||||
if (isMasterEngine()) {
|
||||
// Slaves will get called setupSlaveInferior() below.
|
||||
setState(InferiorSetupRequested);
|
||||
setupInferior();
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerEngine::setupSlaveInferior()
|
||||
|
||||
@@ -457,7 +457,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
break;
|
||||
}
|
||||
case EngineSetupFailed: {
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
notifyEngineSetupFailed();
|
||||
break;
|
||||
}
|
||||
@@ -471,7 +471,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
break;
|
||||
}
|
||||
case InferiorSetupFailed: {
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
notifyInferiorSetupFailed();
|
||||
break;
|
||||
}
|
||||
@@ -484,12 +484,12 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
break;
|
||||
}
|
||||
case EngineRunFailed: {
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
notifyEngineRunFailed();
|
||||
break;
|
||||
}
|
||||
case InferiorUnrunnable: {
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
notifyEngineRunOkAndInferiorUnrunnable();
|
||||
break;
|
||||
}
|
||||
@@ -509,7 +509,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
else
|
||||
QTC_ASSERT(false, qDebug() << state());
|
||||
|
||||
if (qmlEngine()->state() == InferiorStopOk) {
|
||||
if (m_qmlEngine->state() == InferiorStopOk) {
|
||||
// track qml engine again
|
||||
setState(InferiorStopRequested);
|
||||
notifyInferiorStopOk();
|
||||
@@ -518,7 +518,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
break;
|
||||
}
|
||||
case InferiorRunFailed: {
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
notifyInferiorRunFailed();
|
||||
break;
|
||||
}
|
||||
@@ -605,7 +605,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
// might be set by queueShutdownInferior() already
|
||||
CHECK_STATE(InferiorShutdownRequested);
|
||||
}
|
||||
qmlEngine()->quitDebugger();
|
||||
m_qmlEngine->quitDebugger();
|
||||
break;
|
||||
}
|
||||
case InferiorShutdownFailed: {
|
||||
@@ -656,7 +656,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
notifyInferiorStopOk();
|
||||
// otherwise we're probably inside notifyInferiorStopOk already
|
||||
} else {
|
||||
if (m_activeEngine != qmlEngine()) {
|
||||
if (m_activeEngine != m_qmlEngine) {
|
||||
showStatusMessage(tr("QML debugger activated"));
|
||||
setActiveEngine(m_qmlEngine);
|
||||
}
|
||||
@@ -670,7 +670,7 @@ void QmlCppEngine::slaveEngineStateChanged
|
||||
}
|
||||
|
||||
} else if (newState == InferiorRunOk) {
|
||||
if (m_activeEngine == qmlEngine()) {
|
||||
if (m_activeEngine == m_qmlEngine) {
|
||||
CHECK_STATE(InferiorRunRequested);
|
||||
notifyInferiorRunOk();
|
||||
}
|
||||
@@ -700,11 +700,6 @@ void QmlCppEngine::debugLastCommand()
|
||||
m_cppEngine->debugLastCommand();
|
||||
}
|
||||
|
||||
DebuggerEngine *QmlCppEngine::qmlEngine() const
|
||||
{
|
||||
return m_qmlEngine;
|
||||
}
|
||||
|
||||
void QmlCppEngine::setRunTool(DebuggerRunTool *runTool)
|
||||
{
|
||||
DebuggerEngine::setRunTool(runTool);
|
||||
|
||||
@@ -79,7 +79,6 @@ public:
|
||||
const QString &expr, const QVariant &value) override;
|
||||
|
||||
DebuggerEngine *cppEngine() override { return m_cppEngine; }
|
||||
DebuggerEngine *qmlEngine() const;
|
||||
DebuggerEngine *activeEngine() override { return m_activeEngine; }
|
||||
void setRunTool(DebuggerRunTool *runTool) override;
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@
|
||||
# define XSDEBUG(s) qDebug() << s
|
||||
|
||||
#define CB(callback) [this](const QVariantMap &r) { callback(r); }
|
||||
#define CHECK_STATE(s) do { checkState(s, __FILE__, __LINE__); } while (0)
|
||||
|
||||
using namespace Core;
|
||||
using namespace ProjectExplorer;
|
||||
@@ -559,6 +560,7 @@ void QmlEngine::stopApplicationLauncher()
|
||||
|
||||
void QmlEngine::shutdownInferior()
|
||||
{
|
||||
CHECK_STATE(InferiorShutdownRequested);
|
||||
// End session.
|
||||
// { "seq" : <number>,
|
||||
// "type" : "request",
|
||||
@@ -1030,7 +1032,8 @@ void QmlEngine::quitDebugger()
|
||||
{
|
||||
d->automaticConnect = false;
|
||||
d->retryOnConnectFail = false;
|
||||
shutdownInferior();
|
||||
stopApplicationLauncher();
|
||||
closeConnection();
|
||||
}
|
||||
|
||||
void QmlEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
||||
|
||||
@@ -194,6 +194,7 @@ void ProjectImporter::markKitAsTemporary(Kit *k) const
|
||||
|
||||
void ProjectImporter::makePersistent(Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return);
|
||||
if (!k->hasValue(KIT_IS_TEMPORARY))
|
||||
return;
|
||||
|
||||
@@ -231,6 +232,7 @@ void ProjectImporter::makePersistent(Kit *k) const
|
||||
|
||||
void ProjectImporter::cleanupKit(Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return);
|
||||
foreach (const TemporaryInformationHandler &tih, m_temporaryHandlers) {
|
||||
const Core::Id fid = fullId(tih.id);
|
||||
const QVariantList temporaryValues
|
||||
@@ -250,6 +252,7 @@ void ProjectImporter::cleanupKit(Kit *k) const
|
||||
|
||||
void ProjectImporter::addProject(Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return);
|
||||
if (!k->hasValue(KIT_IS_TEMPORARY))
|
||||
return;
|
||||
|
||||
@@ -261,6 +264,7 @@ void ProjectImporter::addProject(Kit *k) const
|
||||
|
||||
void ProjectImporter::removeProject(Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return);
|
||||
if (!k->hasValue(KIT_IS_TEMPORARY))
|
||||
return;
|
||||
|
||||
@@ -278,6 +282,7 @@ void ProjectImporter::removeProject(Kit *k) const
|
||||
|
||||
bool ProjectImporter::isTemporaryKit(Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return false);
|
||||
return k->hasValue(KIT_IS_TEMPORARY);
|
||||
}
|
||||
|
||||
@@ -347,6 +352,7 @@ void ProjectImporter::useTemporaryKitInformation(Core::Id id,
|
||||
|
||||
void ProjectImporter::addTemporaryData(Core::Id id, const QVariant &cleanupData, Kit *k) const
|
||||
{
|
||||
QTC_ASSERT(k, return);
|
||||
QTC_ASSERT(findTemporaryHandler(id), return);
|
||||
const Core::Id fid = fullId(id);
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ void TargetSetupPage::reset()
|
||||
}
|
||||
|
||||
m_widgets.clear();
|
||||
m_firstWidget = 0;
|
||||
m_firstWidget = nullptr;
|
||||
|
||||
m_ui->allKitsCheckBox->setChecked(false);
|
||||
}
|
||||
@@ -407,7 +407,7 @@ void TargetSetupPage::selectAtLeastOneKit()
|
||||
widget->setKitSelected(true);
|
||||
kitSelectionChanged();
|
||||
}
|
||||
m_firstWidget = 0;
|
||||
m_firstWidget = nullptr;
|
||||
}
|
||||
emit completeChanged(); // Is this necessary?
|
||||
}
|
||||
@@ -528,7 +528,7 @@ void TargetSetupPage::removeWidget(Kit *k)
|
||||
if (!widget)
|
||||
return;
|
||||
if (widget == m_firstWidget)
|
||||
m_firstWidget = 0;
|
||||
m_firstWidget = nullptr;
|
||||
widget->deleteLater();
|
||||
m_widgets.remove(k->id());
|
||||
kitSelectionChanged();
|
||||
@@ -537,17 +537,17 @@ void TargetSetupPage::removeWidget(Kit *k)
|
||||
TargetSetupWidget *TargetSetupPage::addWidget(Kit *k)
|
||||
{
|
||||
if (!k || (m_requiredPredicate && !m_requiredPredicate(k)))
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
IBuildConfigurationFactory *factory
|
||||
= IBuildConfigurationFactory::find(k, m_projectPath);
|
||||
if (!factory)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
QList<BuildInfo *> infoList = factory->availableSetups(k, m_projectPath);
|
||||
TargetSetupWidget *widget = infoList.isEmpty() ? nullptr : new TargetSetupWidget(k, m_projectPath, infoList);
|
||||
if (!widget)
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
m_baseLayout->removeWidget(m_importWidget);
|
||||
foreach (QWidget *widget, m_potentialWidgets)
|
||||
@@ -594,7 +594,7 @@ bool TargetSetupPage::setupProject(Project *project)
|
||||
|
||||
toSetUp.clear();
|
||||
|
||||
Target *activeTarget = 0;
|
||||
Target *activeTarget = nullptr;
|
||||
if (m_importer)
|
||||
activeTarget = m_importer->preferredTarget(project->targets());
|
||||
if (activeTarget)
|
||||
|
||||
@@ -51,6 +51,15 @@ QPixmap QmlDesignerIconProvider::requestPixmap(const QString &id, QSize *size, c
|
||||
{
|
||||
Q_UNUSED(requestedSize)
|
||||
|
||||
QPixmap result = getPixmap(id);
|
||||
|
||||
if (size)
|
||||
*size = result.size();
|
||||
return result;
|
||||
}
|
||||
|
||||
QPixmap QmlDesignerIconProvider::getPixmap(const QString &id)
|
||||
{
|
||||
using namespace Utils;
|
||||
|
||||
QPixmap result;
|
||||
@@ -180,8 +189,6 @@ QPixmap QmlDesignerIconProvider::requestPixmap(const QString &id, QSize *size, c
|
||||
else
|
||||
qWarning() << Q_FUNC_INFO << "Image not found:" << id;
|
||||
|
||||
if (size)
|
||||
*size = result.size();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ class QmlDesignerIconProvider : public QQuickImageProvider
|
||||
public:
|
||||
QmlDesignerIconProvider();
|
||||
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override;
|
||||
static QPixmap getPixmap(const QString &id);
|
||||
};
|
||||
|
||||
} // namespace QmlDesigner
|
||||
|
||||
@@ -96,7 +96,7 @@ Theme *Theme::instance()
|
||||
QString Theme::replaceCssColors(const QString &input)
|
||||
{
|
||||
const QMap<QString, QColor> &map = instance()->m_derivedColors;
|
||||
QRegExp rx("creatorTheme\\.(\\w+);");
|
||||
QRegExp rx("creatorTheme\\.(\\w+)");
|
||||
|
||||
int pos = 0;
|
||||
QString output = input;
|
||||
@@ -126,6 +126,16 @@ void Theme::setupTheme(QQmlEngine *engine)
|
||||
engine->addImageProvider(QLatin1String("icons"), new QmlDesignerIconProvider());
|
||||
}
|
||||
|
||||
QColor Theme::getColor(Theme::Color role)
|
||||
{
|
||||
return instance()->color(role);
|
||||
}
|
||||
|
||||
QPixmap Theme::getPixmap(const QString &id)
|
||||
{
|
||||
return QmlDesignerIconProvider::getPixmap(id);
|
||||
}
|
||||
|
||||
QColor Theme::qmlDesignerBackgroundColorDarker() const
|
||||
{
|
||||
return m_derivedColors.value("QmlDesignerBackgroundColorDarker");
|
||||
|
||||
@@ -45,6 +45,8 @@ public:
|
||||
static Theme *instance();
|
||||
static QString replaceCssColors(const QString &input);
|
||||
static void setupTheme(QQmlEngine *engine);
|
||||
static QColor getColor(Color role);
|
||||
static QPixmap getPixmap(const QString &id);
|
||||
|
||||
Q_INVOKABLE QColor qmlDesignerBackgroundColorDarker() const;
|
||||
Q_INVOKABLE QColor qmlDesignerBackgroundColorDarkAlternate() const;
|
||||
@@ -52,7 +54,6 @@ public:
|
||||
Q_INVOKABLE QColor qmlDesignerTabDark() const;
|
||||
Q_INVOKABLE QColor qmlDesignerButtonColor() const;
|
||||
Q_INVOKABLE QColor qmlDesignerBorderColor() const;
|
||||
|
||||
private:
|
||||
Theme(Utils::Theme *originTheme, QObject *parent);
|
||||
QColor evaluateColorAtThemeInstance(const QString &themeColorName);
|
||||
|
||||
@@ -59,6 +59,7 @@ public:
|
||||
|
||||
QList<ModelNode> allTargets() const;
|
||||
QList<QmlTimelineFrames> framesForTarget(const ModelNode &target) const;
|
||||
void destroyFramesForTarget(const ModelNode &target);
|
||||
|
||||
private:
|
||||
void addFramesIfNotExists(const ModelNode &node, const PropertyName &propertyName);
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
#include "bindingproperty.h"
|
||||
#include "nodelistproperty.h"
|
||||
#include "nodeinstanceview.h"
|
||||
|
||||
#include <qmltimelinemutator.h>
|
||||
|
||||
#ifndef QMLDESIGNER_TEST
|
||||
#include <qmldesignerplugin.h>
|
||||
#endif
|
||||
@@ -348,9 +351,17 @@ void QmlObjectNode::destroy()
|
||||
|
||||
removeAliasExports(modelNode());
|
||||
|
||||
foreach (QmlModelStateOperation stateOperation, allAffectingStatesOperations()) {
|
||||
for (QmlModelStateOperation stateOperation : allAffectingStatesOperations()) {
|
||||
stateOperation.modelNode().destroy(); //remove of belonging StatesOperations
|
||||
}
|
||||
|
||||
for (const ModelNode &mutatorNode : view()->allModelNodes()) {
|
||||
if (QmlTimelineMutator::isValidQmlTimelineMutator(mutatorNode)) {
|
||||
QmlTimelineMutator mutator(mutatorNode);
|
||||
mutator.destroyFramesForTarget(modelNode());
|
||||
}
|
||||
}
|
||||
|
||||
removeStateOperationsForChildren(modelNode());
|
||||
modelNode().destroy();
|
||||
}
|
||||
|
||||
@@ -186,6 +186,12 @@ QList<QmlTimelineFrames> QmlTimelineMutator::framesForTarget(const ModelNode &ta
|
||||
return result;
|
||||
}
|
||||
|
||||
void QmlTimelineMutator::destroyFramesForTarget(const ModelNode &target)
|
||||
{
|
||||
for (QmlTimelineFrames frames : framesForTarget(target))
|
||||
frames.destroy();
|
||||
}
|
||||
|
||||
void QmlTimelineMutator::addFramesIfNotExists(const ModelNode &node, const PropertyName &propertyName)
|
||||
{
|
||||
if (!isValid())
|
||||
|
||||
@@ -441,10 +441,22 @@ static QWidget *createbottomSideBarWidget(const QList<WidgetInfo> &widgetInfos)
|
||||
topWidgetInfos.append(widgetInfo);
|
||||
}
|
||||
|
||||
if (topWidgetInfos.count() == 1)
|
||||
return topWidgetInfos.first().widget;
|
||||
else
|
||||
return createWidgetsInTabWidget(topWidgetInfos);
|
||||
QWidget *widget = topWidgetInfos.first().widget;
|
||||
if (topWidgetInfos.count() > 1) {
|
||||
QWidget *background = new QWidget();
|
||||
background->setProperty("designerBackgroundColor", true);
|
||||
|
||||
QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"));
|
||||
sheet.prepend("QWidget[designerBackgroundColor=\"true\"] {background-color: creatorTheme.QmlDesignerBackgroundColorDarkAlternate;}");
|
||||
|
||||
background->setStyleSheet(Theme::replaceCssColors(sheet));
|
||||
background->setLayout(new QVBoxLayout);
|
||||
background->layout()->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
background->layout()->addWidget(createWidgetsInTabWidget(topWidgetInfos));
|
||||
widget = background;
|
||||
}
|
||||
return widget;
|
||||
}
|
||||
|
||||
static Core::MiniSplitter *createCentralSplitter(const QList<WidgetInfo> &widgetInfos)
|
||||
@@ -455,9 +467,6 @@ static Core::MiniSplitter *createCentralSplitter(const QList<WidgetInfo> &widget
|
||||
outputPlaceholderSplitter->setStretchFactor(1, 0);
|
||||
outputPlaceholderSplitter->setOrientation(Qt::Vertical);
|
||||
|
||||
QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"));
|
||||
outputPlaceholderSplitter->setStyleSheet(Theme::replaceCssColors(sheet));
|
||||
|
||||
SwitchSplitTabWidget *switchSplitTabWidget = new SwitchSplitTabWidget();
|
||||
|
||||
foreach (const WidgetInfo &widgetInfo, widgetInfos) {
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
|
||||
#include <QVector>
|
||||
#include <QBoxLayout>
|
||||
#include <QTabWidget>
|
||||
#include <QTabBar>
|
||||
#include <QToolButton>
|
||||
#include <QSplitter>
|
||||
|
||||
@@ -110,6 +110,10 @@ void QmlProfilerClientManager::createClients()
|
||||
m_clientPlugin.data(), [this]() {
|
||||
m_clientPlugin->setRecording(m_profilerState->clientRecording());
|
||||
});
|
||||
QObject::connect(this, &QmlDebug::QmlDebugConnectionManager::connectionClosed,
|
||||
m_clientPlugin.data(), [this]() {
|
||||
m_profilerState->setServerRecording(false);
|
||||
});
|
||||
}
|
||||
|
||||
void QmlProfilerClientManager::destroyClients()
|
||||
|
||||
@@ -430,5 +430,29 @@ void QmlProfilerClientManagerTest::testStopRecording()
|
||||
// Delete while still connected, for added fun
|
||||
}
|
||||
|
||||
void QmlProfilerClientManagerTest::testConnectionDrop()
|
||||
{
|
||||
QUrl socketUrl = Utils::urlFromLocalSocket();
|
||||
QmlProfilerClientManager clientManager;
|
||||
|
||||
{
|
||||
clientManager.setRetryParams(10, 10);
|
||||
clientManager.setProfilerStateManager(&stateManager);
|
||||
clientManager.setModelManager(&modelManager);
|
||||
clientManager.connectToServer(socketUrl);
|
||||
|
||||
QScopedPointer<QLocalSocket> socket(new QLocalSocket(this));
|
||||
socket->connectToServer(socketUrl.path());
|
||||
QVERIFY(socket->isOpen());
|
||||
fakeDebugServer(socket.data());
|
||||
|
||||
// Fake a trace. We want to test that this is reset when the connection drops.
|
||||
stateManager.setServerRecording(true);
|
||||
QTRY_VERIFY(clientManager.isConnected());
|
||||
}
|
||||
|
||||
QTRY_VERIFY(!stateManager.serverRecording());
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace QmlProfiler
|
||||
|
||||
@@ -54,6 +54,7 @@ private slots:
|
||||
|
||||
void testInvalidData();
|
||||
void testStopRecording();
|
||||
void testConnectionDrop();
|
||||
|
||||
private:
|
||||
QmlProfilerClientManager clientManager;
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
#include <QMetaEnum>
|
||||
#include <QPointer>
|
||||
#include <QProcessEnvironment>
|
||||
#include <QTimer>
|
||||
#include <QtPlugin>
|
||||
@@ -68,7 +69,7 @@ public:
|
||||
{ }
|
||||
|
||||
QString m_maintenanceTool;
|
||||
ShellCommand *m_checkUpdatesCommand = 0;
|
||||
QPointer<ShellCommand> m_checkUpdatesCommand;
|
||||
QString m_collectedOutput;
|
||||
QTimer *m_checkUpdatesTimer = 0;
|
||||
|
||||
|
||||
Submodule src/shared/qbs updated: 47e4f740ca...4d4cb193e4
@@ -6925,7 +6925,7 @@ void tst_Dumpers::dumper_data()
|
||||
"{\n"
|
||||
" char *first;\n"
|
||||
" const char *second = \"second\";\n"
|
||||
" const char third[6] = {'t','h','i','r','d','\0'};\n"
|
||||
" const char third[6] = {'t','h','i','r','d','\\0'};\n"
|
||||
" QtcDumperTest_String()\n"
|
||||
" {\n"
|
||||
" first = new char[6];\n"
|
||||
|
||||
@@ -54,7 +54,7 @@ Fourth - you'll have to provide some additional repositories (and for the hookin
|
||||
These additional repositories are located inside ~/squish-data or C:\Users\<user>\squish-data (depending on the OS you're on).
|
||||
You can also just provide them inside a different folder and specify the folder with the environment variable SYSTEST_SRCPATH.
|
||||
This folder must contain the following:
|
||||
* a QtCreator repository (or source copy) of tag v4.2.2 named 'creator' including the submodule src/shared/qbs
|
||||
* a QtCreator repository (or source copy) of tag v4.4.1 named 'creator' including the submodule src/shared/qbs
|
||||
* a subfolder called 'creator-test-data'
|
||||
* a speedcrunch 0.11 repository (or source copy) inside 'creator-test-data' named 'speedcrunch'
|
||||
* additional Squish versions for hooking into subprocesses inside different folders inside 'creator-test-data' following the information below
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -66,8 +66,8 @@ def main():
|
||||
generalMessages = str(waitForObject(":Qt Creator_Core::OutputWindow").plainText)
|
||||
test.compare(generalMessages.count("Project MESSAGE: Cannot build Qt Creator with Qt version 5.3.1."), 1,
|
||||
"Warning about outdated Qt shown?")
|
||||
test.compare(generalMessages.count("Project ERROR: Use at least Qt 5.6.0."), 1,
|
||||
"Minimum Qt version shown?")
|
||||
test.compare(generalMessages.count("Project ERROR: Use at least Qt 5.6.2."), 2,
|
||||
"Minimum Qt version shown (once when parsing with default kit, once with selected)?")
|
||||
|
||||
# Verify that qmljs.g is in the project even when we don't know where (QTCREATORBUG-17609)
|
||||
selectFromLocator("p qmljs.g", "qmljs.g")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user