Merge remote-tracking branch 'origin/2.7'

Conflicts:
	qtcreator.pri
	qtcreator.qbs
	share/qtcreator/qml/qmlpuppet/interfaces/interfaces.pri
	share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstancesignalspy.cpp
	share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h
	share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/objectnodeinstance.h
	src/plugins/debugger/debuggerplugin.cpp
	src/plugins/qmldesigner/components/componentcore/modelnodecontextmenu_helper.cpp
	src/plugins/qmldesigner/components/debugview/debugview.cpp
	src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp
	src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h
	src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
	src/plugins/qmldesigner/components/integration/stackedutilitypanelcontroller.h
	src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp
	src/plugins/qmldesigner/components/navigator/navigatorview.cpp
	src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
	src/plugins/qmldesigner/components/stateseditor/stateseditorview.cpp
	src/plugins/qmldesigner/designercore/include/abstractview.h
	src/plugins/qmldesigner/designercore/include/qmldesignercorelib_global.h
	src/plugins/qmldesigner/designercore/include/rewriterview.h
	src/plugins/qmldesigner/designercore/metainfo/metainforeader.cpp
	src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp
	src/plugins/qmldesigner/designercore/model/abstractview.cpp
	src/plugins/qmldesigner/designmodewidget.cpp

Change-Id: I9d8126e88397c02a87b5e4ab4da44e2bc7089134
This commit is contained in:
Eike Ziller
2013-03-26 13:09:43 +01:00
70 changed files with 1407 additions and 232 deletions
+13 -16
View File
@@ -25,33 +25,30 @@
\title Setting Up a Qbs Project
The Qt Build Suite (Qbs) and the Qbs plugin are still experimental, and
therefore, you must first build them from sources. You can use the Qbs
plugin only with a \QC instance you also built from sources by using the
same tool chain as for building Qbs and the Qbs plugin.
therefore, you must first enable the plugin manually. If you build \QC
yourself from our git repository, you also need to fetch the Qbs submodule to
get Qbs support. See \l{Enabling the Qbs Plugin} below.
To use Qbs to build a project, you must create a .qbs file for the project.
For more information, see the
\l{http://doc-snapshot.qt-project.org/qbs/index.html}{Qbs Manual}.
\section1 Building the Qbs Plugin
\section1 Enabling the Qbs Plugin
To build the Qbs plugin and to enable it in \QC:
If you use a \QC binary release, you need to enable the plugin by
selecting \gui Help > \gui {About Plugins} > \gui {Build Systems}
> \gui {QbsProjectManager} and restarting \QC.
To build the Qbs plugin yourself from the \QC git repository:
\list 1
\li Clone the Qbs repository and build Qbs.
\li Fetch the Qbs submodule in your \QC git checkout with
\c {git submodule update --init}.
\li Set values for the environment variables that specify the Qbs source
directory (QBS_SOURCE_DIR) and build directory (QBS_BUILD_DIR).
\li Run qmake on \QC and build \QC again.
\li To build the Qbs plugin that is located in the
\c {src\plugins\qbsprojectmanager} directory in the \QC source
directory, clone the \QC repository and build \QC.
\li To enable the plugin, select \gui Help > \gui {About Plugins} >
\gui {Build Systems} > \gui {QbsProjectManager}.
\li To use the plugin, restart \QC.
\li Enable the Qbs plugin as described above.
\endlist
+1 -1
View File
@@ -1974,7 +1974,7 @@ class PlainDumper:
self.printer = printer
def __call__(self, d, value):
printer = self.printer.invoke(value)
printer = self.printer.gen_printer(value)
lister = getattr(printer, "children", None)
children = [] if lister is None else list(lister())
d.putType(self.printer.name)
@@ -22,7 +22,23 @@ for(deploymentfolder, DEPLOYMENTFOLDERS) {
MAINPROFILEPWD = $$PWD
android {
android-no-sdk {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
$$itemfiles = $$eval($${deploymentfolder}.source)
itempath = $${item}.path
$$itempath = /data/user/qt/$$eval($${deploymentfolder}.target)
export($$itemfiles)
export($$itempath)
INSTALLS += $$item
}
target.path = /data/user/qt
export(target.path)
INSTALLS += target
} else:android {
for(deploymentfolder, DEPLOYMENTFOLDERS) {
item = item$${deploymentfolder}
itemfiles = $${item}.files
+22 -20
View File
@@ -903,11 +903,6 @@ This option is useful when you want to try your application on devices which don
<translation>Выбор и установка Ministro - общесистемных динамических библиотек Qt.
Может потребоваться при установке приложений на устройства, которые
не имеют доступа к Android Market (например, эмулятор Android).</translation>
</message>
<message>
<source>Edit Rules File</source>
<translation>Изменить файл
правил</translation>
</message>
<message>
<source>Install Ministro, system-wide Qt shared libraries installer</source>
@@ -4667,10 +4662,6 @@ p, li { white-space: pre-wrap; }
<source>&lt;System Language&gt;</source>
<translation>&lt;Системный&gt;</translation>
</message>
<message>
<source>Done</source>
<translation>Выполнено</translation>
</message>
<message>
<source>Restart required</source>
<translation>Требуется перезапуск</translation>
@@ -4757,12 +4748,12 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<source>Reset warnings</source>
<translation>Сброс предупреждений</translation>
<comment>Button text</comment>
<translation>Вернуть предупреждения</translation>
</message>
<message>
<source>Reset warnings</source>
<comment>Button text</comment>
<translation>Сбросить предупреждения</translation>
<source>Re-enable all warnings which were suppressed using &quot;Don&apos;t show again&quot; button (e.g. missing highlighter).</source>
<translation>Вернуть все предупреждения, отключённые кнопкой «Больше не показывать».</translation>
</message>
</context>
<context>
@@ -21666,15 +21657,15 @@ Do you want to ignore them?</source>
</message>
<message>
<source>debug</source>
<translation type="unfinished">отладка</translation>
<translation>отладка</translation>
</message>
<message>
<source>release</source>
<translation type="unfinished">выпуск</translation>
<translation>выпуск</translation>
</message>
<message>
<source>unknown</source>
<translation type="unfinished">неизвестно</translation>
<translation>неизвестно</translation>
</message>
<message>
<source>Failed to Open Project</source>
@@ -22672,7 +22663,7 @@ Remote stderr was: %1</source>
<name>QmlDesigner::Internal::MetaInfoPrivate</name>
<message>
<source>Invalid meta info</source>
<translation type="unfinished">Неверная мета-информация</translation>
<translation>Неверная мета-информация</translation>
</message>
</context>
<context>
@@ -24828,6 +24819,17 @@ Please use the stop button instead.</source>
<translation>Запустить</translation>
</message>
</context>
<context>
<name>QmlProjectManager::QmlApplicationWizardDialog</name>
<message>
<source>Creates a Qt Quick 1 UI project with a single QML file that contains the main view.&amp;lt;br/&amp;gt;You can review Qt Quick 1 UI projects in the QML Viewer and you need not build them. You do not need to have the development environment installed on your computer to create and run this type of projects.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Requires &amp;lt;b&amp;gt;Qt 4.8&amp;lt;/b&amp;gt; or newer.</source>
<translation>Создание проекта Qt Quick 1 с одним файлом QML, содержащим главный интерфейс.&amp;lt;br/&amp;gt; Проверять проекты Qt Quick 1 можно без пересборки в QML Viewer. Для создания и запуска этого типа проектов не требуется интегрированная среда разработки. &amp;lt;b/r&amp;gt;&amp;lt;br/&amp;gt;Требуется &amp;lt;b&amp;gt;Qt 4.8&amp;lt;/b&amp;gt; или выше.</translation>
</message>
<message>
<source>Creates a Qt Quick 2 UI project with a single QML file that contains the main view.&amp;lt;br/&amp;gt;You can review Qt Quick 2 UI projects in the QML Scene and you need not build them. You do not need to have the development environment installed on your computer to create and run this type of projects.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Requires &amp;lt;b&amp;gt;Qt 5.0&amp;lt;/b&amp;gt; or newer.</source>
<translation>Создание проекта Qt Quick 2 с одним файлом QML, содержащим главный интерфейс.&amp;lt;br/&amp;gt; Проверять проекты Qt Quick 2 можно без пересборки в QML Scene. Для создания и запуска этого типа проектов не требуется интегрированная среда разработки. &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;Требуется &amp;lt;b&amp;gt;Qt 5.0&amp;lt;/b&amp;gt; или выше.</translation>
</message>
</context>
<context>
<name>QmlProjectManager::QmlProject</name>
<message>
@@ -24937,7 +24939,7 @@ To compile QML Observer, go to the Qt Versions page, select the current Qt versi
</message>
<message>
<source>Assets</source>
<translation type="unfinished">Ресурсы</translation>
<translation>Ресурсы</translation>
</message>
<message>
<source>XML Source</source>
@@ -25905,7 +25907,7 @@ Do you want to add it to the project?</source>
</message>
<message>
<source>BlackBerry Signing Authority</source>
<translation type="unfinished">Центр подписывания BlackBerry</translation>
<translation>Центр подписывания BlackBerry</translation>
</message>
<message>
<source>Registered: Yes</source>
@@ -29899,7 +29901,7 @@ with a password, which you can enter below.</source>
<name>SubComponentManager::parseDirectory</name>
<message>
<source>Invalid meta info</source>
<translation type="unfinished">Неверная мета-информация</translation>
<translation>Неверная мета-информация</translation>
</message>
</context>
<context>
+2
View File
@@ -106,6 +106,7 @@ QList<LookupItem> TypeOfExpression::operator()(ExpressionAST *expression,
m_scope = scope;
m_documents.append(document);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot);
m_lookupContext.setBindings(m_bindings);
m_lookupContext.setExpandTemplates(m_expandTemplates);
@@ -127,6 +128,7 @@ QList<LookupItem> TypeOfExpression::reference(ExpressionAST *expression,
m_scope = scope;
m_documents.append(document);
m_lookupContext = LookupContext(document, m_thisDocument, m_snapshot);
m_lookupContext.setBindings(m_bindings);
m_lookupContext.setExpandTemplates(m_expandTemplates);
+5
View File
@@ -142,6 +142,11 @@ private:
mutable QSharedPointer<Environment> m_environment;
bool m_expandTemplates;
// FIXME: This is a temporary hack to avoid dangling pointers.
// Keep the expression documents and thus all the symbols and
// their types alive until they are not needed any more.
QList<Document::Ptr> m_documents;
};
ExpressionAST CPLUSPLUS_EXPORT *extractExpressionAST(Document::Ptr doc);
+6 -5
View File
@@ -57,11 +57,12 @@ QtcLibrary {
result.push("botan-1.10")
if (qbs.targetOS === "windows")
result.push("advapi32", "user32")
else {
result.push("rt")
if (qbs.targetOS === "linux" || qbs.targetOS === "mac")
result.push("dl")
}
else if (qbs.targetOS === "linux")
result.push("rt", "dl");
else if (qbs.targetOS === "mac")
result.push("dl");
else if (qbs.targetPlatform.indexOf("unix") !== -1)
result.push("rt");
return result
}
property var botanDefines: {
+6 -2
View File
@@ -210,7 +210,8 @@ void ConsoleProcess::stop()
bool ConsoleProcess::isRunning() const
{
return d->m_process.state() != QProcess::NotRunning;
return d->m_process.state() != QProcess::NotRunning
|| (d->m_stubSocket && d->m_stubSocket->isOpen());
}
QString ConsoleProcess::stubServerListen()
@@ -242,8 +243,11 @@ QString ConsoleProcess::stubServerListen()
void ConsoleProcess::stubServerShutdown()
{
if (d->m_stubSocket)
if (d->m_stubSocket) {
readStubOutput(); // we could get the shutdown signal before emptying the buffer
d->m_stubSocket->disconnect(); // avoid getting queued readyRead signals
d->m_stubSocket->deleteLater(); // we might be called from the disconnected signal of m_stubSocket
}
d->m_stubSocket = 0;
if (d->m_stubServer.isListening()) {
d->m_stubServer.close();
@@ -210,6 +210,11 @@ void AndroidDeployStep::setDeployQASIPackagePath(const QString &package)
void AndroidDeployStep::setUseLocalQtLibs(bool useLocal)
{
m_useLocalQtLibs = useLocal;
// ### Passes -1 for API level, which means it won't work with setups that require
// library selection based on API level. Use the old approach (command line argument)
// in these cases.
AndroidManager::setUseLocalLibs(target(), useLocal, -1);
}
bool AndroidDeployStep::runCommand(QProcess *buildProc,
+74 -3
View File
@@ -223,6 +223,16 @@ bool AndroidManager::setVersionName(ProjectExplorer::Target *target, const QStri
return saveManifest(target, doc);
}
bool AndroidManager::ensureIconAttribute(ProjectExplorer::Target *target)
{
QDomDocument doc;
if (!openManifest(target, doc))
return false;
QDomElement applicationElem = doc.documentElement().firstChildElement(QLatin1String("application"));
applicationElem.setAttribute(QLatin1String("android:icon"), QLatin1String("@drawable/icon"));
return saveManifest(target, doc);
}
QString AndroidManager::targetSDK(ProjectExplorer::Target *target)
{
if (!createAndroidTemplatesIfNecessary(target))
@@ -251,7 +261,8 @@ QIcon AndroidManager::highDpiIcon(ProjectExplorer::Target *target)
bool AndroidManager::setHighDpiIcon(ProjectExplorer::Target *target, const QString &iconFilePath)
{
return setIcon(target, HighDPI, iconFilePath);
return ensureIconAttribute(target) &&
setIcon(target, HighDPI, iconFilePath);
}
QIcon AndroidManager::mediumDpiIcon(ProjectExplorer::Target *target)
@@ -261,7 +272,8 @@ QIcon AndroidManager::mediumDpiIcon(ProjectExplorer::Target *target)
bool AndroidManager::setMediumDpiIcon(ProjectExplorer::Target *target, const QString &iconFilePath)
{
return setIcon(target, MediumDPI, iconFilePath);
return ensureIconAttribute(target) &&
setIcon(target, MediumDPI, iconFilePath);
}
QIcon AndroidManager::lowDpiIcon(ProjectExplorer::Target *target)
@@ -271,7 +283,8 @@ QIcon AndroidManager::lowDpiIcon(ProjectExplorer::Target *target)
bool AndroidManager::setLowDpiIcon(ProjectExplorer::Target *target, const QString &iconFilePath)
{
return setIcon(target, LowDPI, iconFilePath);
return ensureIconAttribute(target) &&
setIcon(target, LowDPI, iconFilePath);
}
Utils::FileName AndroidManager::dirPath(ProjectExplorer::Target *target)
@@ -348,6 +361,62 @@ QString AndroidManager::targetApplication(ProjectExplorer::Target *target)
return QString();
}
bool AndroidManager::setUseLocalLibs(ProjectExplorer::Target *target, bool useLocalLibs, int deviceAPILevel)
{
// For Qt 4, the "use local libs" options is handled by passing command line arguments to the
// app, so no need to alter the AndroidManifest.xml
QtSupport::BaseQtVersion *baseQtVersion = QtSupport::QtKitInformation::qtVersion(target->kit());
if (baseQtVersion == 0 || baseQtVersion->qtVersion() < QtSupport::QtVersionNumber(5,0,0))
return true;
QDomDocument doc;
if (!openManifest(target, doc))
return false;
QDomElement metadataElem = doc.documentElement().firstChildElement(QLatin1String("application")).firstChildElement(QLatin1String("activity")).firstChildElement(QLatin1String("meta-data"));
QString localLibs;
QString localJars;
QString staticInitClasses;
if (useLocalLibs) {
localLibs = loadLocalLibs(target, deviceAPILevel);
localJars = loadLocalJars(target, deviceAPILevel);
staticInitClasses = loadLocalJarsInitClasses(target, deviceAPILevel);
}
bool changedManifest = false;
while (!metadataElem.isNull()) {
if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.use_local_qt_libs")) {
if (metadataElem.attribute(QLatin1String("android:value")).toInt() != useLocalLibs) {
metadataElem.setAttribute(QLatin1String("android:value"), int(useLocalLibs));
changedManifest = true;
}
} else if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.load_local_libs")) {
if (metadataElem.attribute(QLatin1String("android:value")) != localLibs) {
metadataElem.setAttribute(QLatin1String("android:value"), localLibs);
changedManifest = true;
}
} else if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.load_local_jars")) {
if (metadataElem.attribute(QLatin1String("android:value")) != localJars) {
metadataElem.setAttribute(QLatin1String("android:value"), localJars);
changedManifest = true;
}
} else if (metadataElem.attribute(QLatin1String("android:name")) == QLatin1String("android.app.static_init_classes")) {
if (metadataElem.attribute(QLatin1String("android:value")) != staticInitClasses) {
metadataElem.setAttribute(QLatin1String("android:value"), staticInitClasses);
changedManifest = true;
}
}
metadataElem = metadataElem.nextSiblingElement(QLatin1String("meta-data"));
}
if (changedManifest)
return saveManifest(target, doc);
else
return true;
}
bool AndroidManager::setTargetApplication(ProjectExplorer::Target *target, const QString &name)
{
QDomDocument doc;
@@ -905,6 +974,8 @@ bool AndroidManager::setIcon(ProjectExplorer::Target *target, IconType type, con
const QString path = iconPath(target, type);
QFile::remove(path);
QDir dir;
dir.mkpath(QFileInfo(path).absolutePath());
return QFile::copy(iconFileName, path);
}
+3
View File
@@ -78,12 +78,15 @@ public:
static bool setMediumDpiIcon(ProjectExplorer::Target *target, const QString &iconFilePath);
static QIcon lowDpiIcon(ProjectExplorer::Target *target);
static bool setLowDpiIcon(ProjectExplorer::Target *target, const QString &iconFilePath);
static bool ensureIconAttribute(ProjectExplorer::Target *target);
static QStringList availableTargetApplications(ProjectExplorer::Target *target);
static QString targetApplication(ProjectExplorer::Target *target);
static bool setTargetApplication(ProjectExplorer::Target *target, const QString &name);
static QString targetApplicationPath(ProjectExplorer::Target *target);
static bool setUseLocalLibs(ProjectExplorer::Target *target, bool useLocalLibs, int deviceAPILevel);
static QString targetSDK(ProjectExplorer::Target *target);
static bool setTargetSDK(ProjectExplorer::Target *target, const QString &sdk);
@@ -32,6 +32,8 @@
#include "androidconfigurations.h"
#include "androidcreatekeystorecertificate.h"
#include "androidmanager.h"
#include "androiddeploystep.h"
#include "androidglobal.h"
#include "ui_androidpackagecreationwidget.h"
#include <projectexplorer/project.h>
@@ -375,11 +377,25 @@ void AndroidPackageCreationWidget::setTarget(const QString &target)
void AndroidPackageCreationWidget::setQtLibs(QModelIndex, QModelIndex)
{
AndroidManager::setQtLibs(m_step->target(), m_qtLibsModel->checkedItems());
AndroidDeployStep * const deployStep = AndroidGlobal::buildStep<AndroidDeployStep>(m_step->target()->activeDeployConfiguration());
if (deployStep->useLocalQtLibs()) {
// ### Passes -1 for API level, which means it won't work with setups that require
// library selection based on API level. Use the old approach (command line argument)
// in these cases.
AndroidManager::setUseLocalLibs(m_step->target(), true, -1);
}
}
void AndroidPackageCreationWidget::setPrebundledLibs(QModelIndex, QModelIndex)
{
AndroidManager::setPrebundledLibs(m_step->target(), m_prebundledLibs->checkedItems());
AndroidDeployStep * const deployStep = AndroidGlobal::buildStep<AndroidDeployStep>(m_step->target()->activeDeployConfiguration());
if (deployStep->useLocalQtLibs()) {
// ### Passes -1 for API level, which means it won't work with setups that require
// library selection based on API level. Use the old approach (command line argument)
// in these cases.
AndroidManager::setUseLocalLibs(m_step->target(), true, -1);
}
}
void AndroidPackageCreationWidget::prebundledLibSelected(const QModelIndex &index)
+12 -1
View File
@@ -42,6 +42,7 @@
#include <qtsupport/qtsupportconstants.h>
#include <qtsupport/qtversionmanager.h>
#include <projectexplorer/target.h>
#include <projectexplorer/kit.h>
#include <projectexplorer/projectexplorer.h>
@@ -115,8 +116,18 @@ void AndroidQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils::En
if (!qt4pro || !qt4pro->activeTarget()
|| QtSupport::QtKitInformation::qtVersion(k)->type() != QLatin1String(Constants::ANDROIDQT))
return;
Target *target = qt4pro->activeTarget();
if (DeviceTypeKitInformation::deviceTypeId(target->kit()) != Constants::ANDROID_DEVICE_TYPE)
return;
if (AndroidConfigurations::instance().config().ndkLocation.isEmpty()
|| AndroidConfigurations::instance().config().sdkLocation.isEmpty())
return;
if (AndroidConfigurations::instance().sdkTargets().isEmpty())
return;
env.set(QLatin1String("ANDROID_NDK_PLATFORM"),
AndroidConfigurations::instance().bestMatch(AndroidManager::targetSDK(qt4pro->activeTarget())));
AndroidConfigurations::instance().bestMatch(AndroidManager::targetSDK(target)));
}
@@ -241,7 +241,7 @@ bool AndroidSettingsWidget::checkNDK(const Utils::FileName &location)
QSet<ProjectExplorer::Abi::Architecture> qtVersionsForArch;
foreach (QtSupport::BaseQtVersion *qtVersion, QtSupport::QtVersionManager::instance()->versions()) {
if (qtVersion->type() != QLatin1String(Constants::ANDROIDQT))
if (qtVersion->type() != QLatin1String(Constants::ANDROIDQT) || qtVersion->qtAbis().isEmpty())
continue;
qtVersionsForArch.insert(qtVersion->qtAbis().first().architecture());
}
+7 -5
View File
@@ -607,13 +607,15 @@ ClearCaseSubmitEditor *ClearCasePlugin::openClearCaseSubmitEditor(const QString
void ClearCasePlugin::updateStatusActions()
{
FileStatus fileStatus = FileStatus::Unknown;
bool hasFile = currentState().hasFile();
QString fileName = currentState().relativeCurrentFile();
if (hasFile) {
QString fileName = currentState().relativeCurrentFile();
fileStatus = m_statusMap->value(fileName, FileStatus(FileStatus::Unknown));
FileStatus fileStatus = m_statusMap->value(fileName, FileStatus(FileStatus::Unknown));
if (ClearCase::Constants::debug)
qDebug() << Q_FUNC_INFO << fileName << ", status = " << fileStatus.status;
if (ClearCase::Constants::debug)
qDebug() << Q_FUNC_INFO << fileName << ", status = " << fileStatus.status;
}
m_checkOutAction->setEnabled(hasFile && (fileStatus.status & (FileStatus::CheckedIn | FileStatus::Hijacked)));
m_undoCheckOutAction->setEnabled(hasFile && (fileStatus.status & FileStatus::CheckedOut));
@@ -352,6 +352,7 @@ bool CMakeProject::parseCMakeLists()
QByteArray allDefines;
allDefines.append(tc->predefinedMacros(cxxflags));
allDefines.append(cbpparser.defines());
QStringList allFrameworkPaths;
QList<ProjectExplorer::HeaderPath> allHeaderPaths;
@@ -1215,8 +1216,18 @@ void CMakeCbpParser::parseAdd()
QString compilerOption = addAttributes.value(QLatin1String("option")).toString();
// defining multiple times a macro to the same value makes no sense
if (!compilerOption.isEmpty() && !m_compilerOptions.contains(compilerOption))
if (!compilerOption.isEmpty() && !m_compilerOptions.contains(compilerOption)) {
m_compilerOptions.append(compilerOption);
int macroNameIndex = compilerOption.indexOf(QLatin1String("-D")) + 2;
if (macroNameIndex != 1) {
int assignIndex = compilerOption.indexOf(QLatin1Char('='), macroNameIndex);
if (assignIndex != -1)
compilerOption[assignIndex] = ' ';
m_defines.append("#define ");
m_defines.append(compilerOption.mid(macroNameIndex).toUtf8());
m_defines.append('\n');
}
}
while (!atEnd()) {
readNext();
@@ -1314,6 +1325,11 @@ QStringList CMakeCbpParser::includeFiles()
return m_includeFiles;
}
QByteArray CMakeCbpParser::defines() const
{
return m_defines;
}
QList<CMakeBuildTarget> CMakeCbpParser::buildTargets()
{
return m_buildTargets;
@@ -162,6 +162,7 @@ public:
QList<ProjectExplorer::FileNode *> cmakeFileList();
QStringList includeFiles();
QList<CMakeBuildTarget> buildTargets();
QByteArray defines() const;
QString projectName() const;
QString compilerName() const;
bool hasCMakeFiles();
@@ -188,6 +189,7 @@ private:
bool m_parsingCmakeUnit;
QStringList m_includeFiles;
QStringList m_compilerOptions;
QByteArray m_defines;
CMakeBuildTarget m_buildTarget;
QList<CMakeBuildTarget> m_buildTargets;
+1 -1
View File
@@ -81,7 +81,7 @@ MakeStep::MakeStep(BuildStepList *bsl, MakeStep *bs) :
AbstractProcessStep(bsl, bs),
m_clean(bs->m_clean),
m_buildTargets(bs->m_buildTargets),
m_additionalArguments(Utils::QtcProcess::joinArgs(bs->m_buildTargets))
m_additionalArguments(bs->m_additionalArguments)
{
ctor();
}
+5 -1
View File
@@ -31,6 +31,8 @@ QtcPlugin {
]
}
cpp.frameworks: qbs.targetOS === "mac" ? ["AppKit"] : undefined
files: [
"basefilewizard.cpp",
"basefilewizard.h",
@@ -234,8 +236,10 @@ QtcPlugin {
}
Group {
condition: qbs.targetOS == "macx"
condition: qbs.targetOS == "mac"
files: [
"macfullscreen.h",
"macfullscreen.mm",
"progressmanager/progressmanager_mac.mm",
]
}
+7 -8
View File
@@ -226,16 +226,18 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setWindowTitle(tr("Start Debugger"));
d->kitChooser = new KitChooser(this);
d->kitChooser->populate();
d->serverPortLabel = new QLabel(tr("Server port:"), this);
d->serverPortSpinBox = new QSpinBox(this);
d->serverPortSpinBox->setRange(1, 65535);
d->localExecutablePathChooser = new PathChooser(this);
d->localExecutablePathChooser->setExpectedKind(PathChooser::File);
d->localExecutablePathChooser->setPromptDialogTitle(tr("Select Executable"));
d->localExecutablePathChooser->lineEdit()->setHistoryCompleter(QLatin1String("LocalExecutable"));
d->serverPortSpinBox = new QSpinBox(this);
d->serverPortSpinBox->setRange(1, 65535);
d->serverPortLabel = new QLabel(tr("Server port:"), this);
d->arguments = new FancyLineEdit(this);
d->arguments->setHistoryCompleter(QLatin1String("CommandlineArguments"));
@@ -246,9 +248,6 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
d->runInTerminalCheckBox = new QCheckBox(this);
d->kitChooser = new KitChooser(this);
d->kitChooser->populate();
d->breakAtMainCheckBox = new QCheckBox(this);
d->breakAtMainCheckBox->setText(QString());
@@ -156,6 +156,9 @@ unsigned int DebuggerKitInformation::priority() const
DebuggerKitInformation::DebuggerItem DebuggerKitInformation::autoDetectItem(const Kit *k)
{
if (DebuggerKitInformation::isValidDebugger(k))
return DebuggerKitInformation::debuggerItem(k);
DebuggerItem result;
const ToolChain *tc = ToolChainKitInformation::toolChain(k);
Abi abi = Abi::hostAbi();
@@ -201,8 +204,7 @@ DebuggerKitInformation::DebuggerItem DebuggerKitInformation::autoDetectItem(cons
void DebuggerKitInformation::setup(Kit *k)
{
QTC_ASSERT(ToolChainManager::instance()->isLoaded(), return);
if (!isValidDebugger(k))
setDebuggerItem(k, autoDetectItem(k));
setDebuggerItem(k, autoDetectItem(k));
}
// Check the configuration errors and return a flag mask. Provide a quick check and
+3 -1
View File
@@ -1589,7 +1589,9 @@ void DebuggerPluginPrivate::attachCore()
{
AttachCoreDialog dlg(mainWindow());
dlg.setKitId(Id::fromSetting(configValue(_("LastExternalKit"))));
const QString lastExternalKit = configValue(_("LastExternalKit")).toString();
if (!lastExternalKit.isEmpty())
dlg.setKitId(Id::fromString(lastExternalKit));
dlg.setLocalExecutableFile(configValue(_("LastExternalExecutableFile")).toString());
dlg.setLocalCoreFile(configValue(_("LastLocalCoreFile")).toString());
dlg.setRemoteCoreFile(configValue(_("LastRemoteCoreFile")).toString());
+4 -4
View File
@@ -234,14 +234,14 @@ AttachCoreDialog::AttachCoreDialog(QWidget *parent)
d->forceLocalLabel->setText(tr("Use local core file:"));
d->forceLocalLabel->setBuddy(d->forceLocalCheckBox);
d->localCoreFileName = new PathChooser(this);
d->localCoreFileName->setExpectedKind(PathChooser::File);
d->localCoreFileName->setPromptDialogTitle(tr("Select Core File"));
d->localExecFileName = new PathChooser(this);
d->localExecFileName->setExpectedKind(PathChooser::File);
d->localExecFileName->setPromptDialogTitle(tr("Select Executable"));
d->localCoreFileName = new PathChooser(this);
d->localCoreFileName->setExpectedKind(PathChooser::File);
d->localCoreFileName->setPromptDialogTitle(tr("Select Core File"));
d->overrideStartScriptFileName = new PathChooser(this);
d->overrideStartScriptFileName->setExpectedKind(PathChooser::File);
d->overrideStartScriptFileName->setPromptDialogTitle(tr("Select Startup Script"));
+5
View File
@@ -5577,6 +5577,11 @@ void FakeVimHandler::Private::handleExCommand(const QString &line0)
}
lastCommand = line;
}
// if the last command closed the editor, we would crash here (:vs and then :on)
if (!(m_textedit || m_plaintextedit))
return;
endEditBlock();
resetCommandMode();
+21 -7
View File
@@ -285,6 +285,14 @@ void FindToolBar::installEventFilters()
}
}
bool FindToolBar::shouldSetFocusOnKeyEvent(QKeyEvent *event)
{
return event->key() == Qt::Key_Escape && !event->modifiers()
&& !m_findCompleter->popup()->isVisible()
&& !m_replaceCompleter->popup()->isVisible()
&& m_currentDocumentFind->isEnabled();
}
bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
@@ -315,13 +323,9 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
}
} else if (obj == this && event->type() == QEvent::ShortcutOverride) {
QKeyEvent *ke = static_cast<QKeyEvent *>(event);
if (ke->key() == Qt::Key_Escape && !ke->modifiers()
&& !m_findCompleter->popup()->isVisible()
&& !m_replaceCompleter->popup()->isVisible()) {
if (setFocusToCurrentFindSupport()) {
event->accept();
return true;
}
if (shouldSetFocusOnKeyEvent(ke)) {
event->accept();
return true;
} else if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) {
event->accept();
return true;
@@ -334,6 +338,16 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event)
return Utils::StyledBar::eventFilter(obj, event);
}
void FindToolBar::keyPressEvent(QKeyEvent *event)
{
if (shouldSetFocusOnKeyEvent(event)) {
if (setFocusToCurrentFindSupport())
event->accept();
return;
}
return Utils::StyledBar::keyPressEvent(event);
}
void FindToolBar::adaptToCandidate()
{
updateFindAction();
+3
View File
@@ -97,6 +97,7 @@ private slots:
protected:
bool focusNextPrevChild(bool next);
void keyPressEvent(QKeyEvent *event);
private:
void installEventFilters();
@@ -115,6 +116,8 @@ private:
void updateIcons();
void updateFlagMenus();
bool shouldSetFocusOnKeyEvent(QKeyEvent *event);
FindPlugin *m_plugin;
CurrentDocumentFind *m_currentDocumentFind;
Ui::FindWidget m_ui;
+5 -2
View File
@@ -1999,8 +1999,11 @@ bool GitClient::getCommitData(const QString &workingDirectory,
commitData->panelData.author = readConfigValue(workingDirectory, QLatin1String("user.name"));
commitData->panelData.email = readConfigValue(workingDirectory, QLatin1String("user.email"));
// Commit: Get the commit template
QString templateFilename = QDir(gitDir).absoluteFilePath(QLatin1String("MERGE_MSG"));
if (!QFileInfo(templateFilename).isFile())
QDir gitDirectory(gitDir);
QString templateFilename = gitDirectory.absoluteFilePath(QLatin1String("MERGE_MSG"));
if (!QFile::exists(templateFilename))
templateFilename = gitDirectory.absoluteFilePath(QLatin1String("SQUASH_MSG"));
if (!QFile::exists(templateFilename))
templateFilename = readConfigValue(workingDirectory, QLatin1String("commit.template"));
if (!templateFilename.isEmpty()) {
// Make relative to repository
+1 -3
View File
@@ -1001,10 +1001,8 @@ void GitPlugin::pull()
}
GitClient::StashGuard stashGuard(topLevel, QLatin1String("Pull"));
if (stashGuard.stashingFailed(false))
if (stashGuard.stashingFailed(false) || (rebase && (stashGuard.result() == GitClient::NotStashed)))
return;
if (rebase && (stashGuard.result() == GitClient::NotStashed))
m_gitClient->synchronousCheckoutFiles(topLevel);
if (!m_gitClient->synchronousPull(topLevel, rebase))
stashGuard.preventPop();
}
@@ -199,6 +199,10 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
connect(&proxyModel, SIGNAL(layoutChanged()), SLOT(handleProcessListUpdated()));
connect(buttonBox, SIGNAL(accepted()), q, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), q, SLOT(reject()));
QWidget::setTabOrder(kitChooser, processFilterLineEdit);
QWidget::setTabOrder(processFilterLineEdit, procView);
QWidget::setTabOrder(procView, buttonBox);
}
void DeviceProcessesDialogPrivate::setDevice(const IDevice::ConstPtr &device)
+7 -2
View File
@@ -31,6 +31,7 @@
#include "qbsproject.h"
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <qbs.h>
@@ -86,7 +87,10 @@ public:
if (child->isFile())
return;
node->name = node->name + QLatin1Char('/') + child->name;
if (!Utils::HostOsInfo::isWindowsHost() || !node->name.isEmpty())
node->name = node->name + QLatin1Char('/') + child->name;
else
node->name = child->name;
node->children = child->children;
foreach (FileTreeNode *tmpChild, node->children)
@@ -108,7 +112,8 @@ public:
QString p = name;
FileTreeNode *node = parent;
while (node) {
p = node->name + QLatin1Char('/') + p;
if (!Utils::HostOsInfo::isWindowsHost() || !node->name.isEmpty())
p = node->name + QLatin1Char('/') + p;
node = node->parent;
}
return p;
@@ -249,7 +249,7 @@ void DebugView::rewriterEndTransaction()
WidgetInfo DebugView::widgetInfo()
{
return createWidgetInfo(m_debugViewWidget.data(), QLatin1String("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View"));
return createWidgetInfo(m_debugViewWidget.data(), 0, QLatin1String("DebugView"), WidgetInfo::LeftPane, 0, tr("Debug View"));
}
bool DebugView::hasWidget() const
@@ -277,7 +277,7 @@ void FormEditorView::bindingPropertiesChanged(const QList<BindingProperty>& prop
WidgetInfo FormEditorView::widgetInfo()
{
return createWidgetInfo(m_formEditorWidget.data(), "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"));
return createWidgetInfo(m_formEditorWidget.data(), 0, "FormEditor", WidgetInfo::CentralPane, 0, tr("Form Editor"));
}
FormEditorWidget *FormEditorView::formEditorWidget()
@@ -73,7 +73,7 @@ public:
void updateMoveManipulator();
void beginWithPoint(const QPointF &beginPoint);
void beginWithPoint(const QPointF &beginPoint) QTC_OVERRIDE;
void clear() QTC_OVERRIDE;
@@ -53,7 +53,11 @@ WidgetInfo ItemLibraryView::widgetInfo()
if (m_widget.isNull())
m_widget = new ItemLibraryWidget;
return createWidgetInfo(m_widget.data(), QLatin1String("Library"), WidgetInfo::LeftPane, 0);
return createWidgetInfo(m_widget.data(),
new WidgetInfo::ToolBarWidgetDefaultFactory<ItemLibraryWidget>(m_widget.data()),
QLatin1String("Library"),
WidgetInfo::LeftPane,
0);
}
void ItemLibraryView::modelAttached(Model *model)
@@ -106,7 +106,11 @@ bool NavigatorView::hasWidget() const
WidgetInfo NavigatorView::widgetInfo()
{
return createWidgetInfo(m_widget.data(), QLatin1String("Navigator"), WidgetInfo::LeftPane, 0);
return createWidgetInfo(m_widget.data(),
new WidgetInfo::ToolBarWidgetDefaultFactory<NavigatorWidget>(m_widget.data()),
QLatin1String("Navigator"),
WidgetInfo::LeftPane,
0);
}
void NavigatorView::modelAttached(Model *model)
@@ -968,7 +968,7 @@ bool PropertyEditor::hasWidget() const
WidgetInfo PropertyEditor::widgetInfo()
{
return createWidgetInfo(m_stackedWidget, QLatin1String("Properties"), WidgetInfo::RightPane, 0);
return createWidgetInfo(m_stackedWidget, 0, QLatin1String("Properties"), WidgetInfo::RightPane, 0);
}
void PropertyEditor::actualStateChanged(const ModelNode &node)
@@ -62,7 +62,7 @@ StatesEditorView::StatesEditorView(QObject *parent) :
WidgetInfo StatesEditorView::widgetInfo()
{
return createWidgetInfo(m_statesEditorWidget.data(), "StatesEditor", WidgetInfo::TopPane, 0, tr("States Editor"));
return createWidgetInfo(m_statesEditorWidget.data(), 0, "StatesEditor", WidgetInfo::TopPane, 0, tr("States Editor"));
}
void StatesEditorView::removeState(int nodeId)
@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
@@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
@@ -42,6 +42,7 @@
QT_BEGIN_NAMESPACE
class QStyle;
class QToolButton;
QT_END_NAMESPACE
namespace QmlDesigner {
@@ -58,7 +59,32 @@ class QmlModelView;
class NodeInstanceView;
class RewriterView;
struct WidgetInfo {
class WidgetInfo {
public:
class ToolBarWidgetFactoryInterface {
public:
ToolBarWidgetFactoryInterface()
{}
virtual QList<QToolButton*> createToolBarWidgets() = 0;
};
template <class T>
class ToolBarWidgetDefaultFactory : public ToolBarWidgetFactoryInterface {
public:
ToolBarWidgetDefaultFactory(T *t ) : m_t(t)
{}
QList<QToolButton*> createToolBarWidgets()
{
return m_t->createToolBarWidgets();
}
private:
T * m_t;
};
enum PlacementHint {
NoPane,
LeftPane,
@@ -68,14 +94,20 @@ struct WidgetInfo {
CentralPane // not used
};
WidgetInfo()
: widget(0),
toolBarWidgetFactory(0)
{
}
QString uniqueId;
QString tabName;
QWidget *widget;
int placementPriority;
PlacementHint placementHint;
ToolBarWidgetFactoryInterface *toolBarWidgetFactory;
};
class QMLDESIGNERCORE_EXPORT AbstractView : public QObject
{
Q_OBJECT
@@ -205,6 +237,7 @@ protected:
void setModel(Model * model);
void removeModel();
static WidgetInfo createWidgetInfo(QWidget *widget = 0,
WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory = 0,
const QString &uniqueId = QString(),
WidgetInfo::PlacementHint placementHint = WidgetInfo::NoPane,
int placementPriority = 0,
@@ -119,6 +119,7 @@ void AbstractView::removeModel()
}
WidgetInfo AbstractView::createWidgetInfo(QWidget *widget,
WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory,
const QString &uniqueId,
WidgetInfo::PlacementHint placementHint,
int placementPriority,
@@ -127,6 +128,7 @@ WidgetInfo AbstractView::createWidgetInfo(QWidget *widget,
WidgetInfo widgetInfo;
widgetInfo.widget = widget;
widgetInfo.toolBarWidgetFactory = toolBarWidgetFactory;
widgetInfo.uniqueId = uniqueId;
widgetInfo.placementHint = placementHint;
widgetInfo.placementPriority = placementPriority;
@@ -30,13 +30,15 @@
#ifndef REWRITERTRANSACTION_H
#define REWRITERTRANSACTION_H
#include <qmldesignercorelib_global.h>
#include <QWeakPointer>
namespace QmlDesigner {
class AbstractView;
class RewriterTransaction
class QMLDESIGNERCORE_EXPORT RewriterTransaction
{
public:
RewriterTransaction();
+21 -11
View File
@@ -148,25 +148,35 @@ QList<QToolButton *> ItemLibrarySideBarItem::createToolBarWidgets()
return qobject_cast<ItemLibraryWidget*>(widget())->createToolBarWidgets();
}
class NavigatorSideBarItem : public Core::SideBarItem
class DesignerSideBarItem : public Core::SideBarItem
{
public:
explicit NavigatorSideBarItem(QWidget *widget, const QString &id);
virtual ~NavigatorSideBarItem();
explicit DesignerSideBarItem(QWidget *widget, WidgetInfo::ToolBarWidgetFactoryInterface *createToolBarWidgets, const QString &id);
virtual ~DesignerSideBarItem();
virtual QList<QToolButton *> createToolBarWidgets();
private:
WidgetInfo::ToolBarWidgetFactoryInterface *m_toolBarWidgetFactory;
};
NavigatorSideBarItem::NavigatorSideBarItem(QWidget *widget, const QString &id) : Core::SideBarItem(widget, id) {}
NavigatorSideBarItem::~NavigatorSideBarItem()
DesignerSideBarItem::DesignerSideBarItem(QWidget *widget, WidgetInfo::ToolBarWidgetFactoryInterface *toolBarWidgetFactory, const QString &id)
: Core::SideBarItem(widget, id) , m_toolBarWidgetFactory(toolBarWidgetFactory)
{
}
QList<QToolButton *> NavigatorSideBarItem::createToolBarWidgets()
DesignerSideBarItem::~DesignerSideBarItem()
{
return qobject_cast<NavigatorWidget*>(widget())->createToolBarWidgets();
delete m_toolBarWidgetFactory;
}
QList<QToolButton *> DesignerSideBarItem::createToolBarWidgets()
{
if (m_toolBarWidgetFactory)
return m_toolBarWidgetFactory->createToolBarWidgets();
return QList<QToolButton *>();
}
void DocumentWarningWidget::goToError()
@@ -356,13 +366,13 @@ void DesignModeWidget::setup()
foreach (const WidgetInfo &widgetInfo, viewManager().widgetInfos()) {
if (widgetInfo.placementHint == widgetInfo.LeftPane) {
Core::SideBarItem *sideBarItem = new NavigatorSideBarItem(widgetInfo.widget, widgetInfo.uniqueId);
Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
sideBarItems.append(sideBarItem);
leftSideBarItems.append(sideBarItem);
}
if (widgetInfo.placementHint == widgetInfo.RightPane) {
Core::SideBarItem *sideBarItem = new NavigatorSideBarItem(widgetInfo.widget, widgetInfo.uniqueId);
Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
sideBarItems.append(sideBarItem);
rightSideBarItems.append(sideBarItem);
}
+21 -13
View File
@@ -32,6 +32,7 @@
#include "bardescriptordocument.h"
#include "qnxconstants.h"
#include "bardescriptoreditor.h"
#include "bardescriptoreditorwidget.h"
#include "bardescriptordocumentnodehandlers.h"
@@ -185,24 +186,31 @@ void BarDescriptorDocument::rename(const QString &newName)
QString BarDescriptorDocument::xmlSource() const
{
QDomDocument doc;
doc.appendChild(doc.createProcessingInstruction(QLatin1String("xml"), QLatin1String("version='1.0' encoding='") + QLatin1String(codec()->name()) + QLatin1String("' standalone='no'")));
BarDescriptorEditor *editor = qobject_cast<BarDescriptorEditor*>(m_editorWidget->editor());
QTC_ASSERT(editor, return QString());
// QNX
QDomElement rootElem = doc.createElement(QLatin1String("qnx"));
rootElem.setAttribute(QLatin1String("xmlns"), QLatin1String("http://www.qnx.com/schemas/application/1.0"));
if (editor->activePage() == BarDescriptorEditor::Source) {
return m_editorWidget->xmlSource();
} else {
QDomDocument doc;
doc.appendChild(doc.createProcessingInstruction(QLatin1String("xml"), QLatin1String("version='1.0' encoding='") + QLatin1String(codec()->name()) + QLatin1String("' standalone='no'")));
QMap<int, BarDescriptorDocumentAbstractNodeHandler*> nodeHandlerMap;
foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, m_nodeHandlers)
nodeHandlerMap.insertMulti(nodeHandler->order(), nodeHandler);
// QNX
QDomElement rootElem = doc.createElement(QLatin1String("qnx"));
rootElem.setAttribute(QLatin1String("xmlns"), QLatin1String("http://www.qnx.com/schemas/application/1.0"));
QList<BarDescriptorDocumentAbstractNodeHandler*> nodeHandlers = nodeHandlerMap.values();
foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, nodeHandlers)
rootElem.appendChild(nodeHandler->toNode(doc));
QMap<int, BarDescriptorDocumentAbstractNodeHandler*> nodeHandlerMap;
foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, m_nodeHandlers)
nodeHandlerMap.insertMulti(nodeHandler->order(), nodeHandler);
doc.appendChild(rootElem);
QList<BarDescriptorDocumentAbstractNodeHandler*> nodeHandlers = nodeHandlerMap.values();
foreach (BarDescriptorDocumentAbstractNodeHandler *nodeHandler, nodeHandlers)
rootElem.appendChild(nodeHandler->toNode(doc));
return doc.toString(4);
doc.appendChild(rootElem);
return doc.toString(4);
}
}
bool BarDescriptorDocument::loadContent(const QString &xmlSource, QString *errorMessage, int *errorLine)
+8
View File
@@ -151,6 +151,14 @@ QWidget *BarDescriptorEditor::toolBar()
return m_toolBar;
}
BarDescriptorEditor::EditorPage BarDescriptorEditor::activePage() const
{
BarDescriptorEditorWidget *editorWidget = qobject_cast<BarDescriptorEditorWidget *>(widget());
QTC_ASSERT(editorWidget, return static_cast<EditorPage>(-1));
return static_cast<EditorPage>(editorWidget->currentIndex());
}
void BarDescriptorEditor::changeEditorPage(QAction *action)
{
setActivePage(static_cast<EditorPage>(action->data().toInt()));
+9 -7
View File
@@ -54,6 +54,13 @@ class BarDescriptorEditor : public Core::IEditor
{
Q_OBJECT
public:
enum EditorPage {
General = 0,
Application,
Assets,
Source
};
explicit BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget);
bool createNew(const QString &contents = QString());
@@ -73,17 +80,12 @@ public:
QWidget *toolBar();
EditorPage activePage() const;
private slots:
void changeEditorPage(QAction *action);
private:
enum EditorPage {
General = 0,
Application,
Assets,
Source
};
ProjectExplorer::TaskHub *taskHub();
void setActivePage(EditorPage page);
@@ -358,6 +358,7 @@ ProjectExplorer::Kit *BlackBerryConfiguration::createKit(QnxArchitecture arch, Q
kit->setDisplayName(tr("BlackBerry 10 (%1)").arg(m_config.targetName));
}
kit->setIconPath(QLatin1String(Constants::QNX_BB_CATEGORY_ICON));
ProjectExplorer::DeviceTypeKitInformation::setDeviceTypeId(kit, Constants::QNX_BB_OS_TYPE);
ProjectExplorer::SysRootKitInformation::setSysRoot(kit, m_config.sysRoot);
@@ -102,17 +102,17 @@ bool BlackBerryCreatePackageStep::init()
}
foreach (const BarPackageDeployInformation &info, packagesToDeploy) {
if (info.appDescriptorPath.isEmpty()) {
if (info.appDescriptorPath().isEmpty()) {
raiseError(tr("Application descriptor file not specified, please check deployment settings"));
return false;
}
if (info.packagePath.isEmpty()) {
if (info.packagePath().isEmpty()) {
raiseError(tr("No package specified, please check deployment settings"));
return false;
}
const QString buildDir = target()->activeBuildConfiguration()->buildDirectory();
const QString buildDir = QFileInfo(info.packagePath()).absolutePath();
QDir dir(buildDir);
if (!dir.exists()) {
if (!dir.mkpath(buildDir)) {
@@ -122,7 +122,7 @@ bool BlackBerryCreatePackageStep::init()
}
const QString preparedFilePath = buildDir + QLatin1String("/bar-descriptor-") + project()->displayName() + QLatin1String("-qtc-generated.xml");
if (!prepareAppDescriptorFile(info.appDescriptorPath, preparedFilePath))
if (!prepareAppDescriptorFile(info.appDescriptorPath(), preparedFilePath))
// If there is an error, prepareAppDescriptorFile() will raise it
return false;
@@ -131,7 +131,7 @@ bool BlackBerryCreatePackageStep::init()
args << QLatin1String("-devMode");
if (!debugToken().isEmpty())
args << QLatin1String("-debugToken") << QnxUtils::addQuotes(QDir::toNativeSeparators(debugToken()));
args << QLatin1String("-package") << QnxUtils::addQuotes(QDir::toNativeSeparators(info.packagePath));
args << QLatin1String("-package") << QnxUtils::addQuotes(QDir::toNativeSeparators(info.packagePath()));
args << QnxUtils::addQuotes(QDir::toNativeSeparators(preparedFilePath));
addCommand(packageCmd, args);
}
+43 -13
View File
@@ -50,8 +50,28 @@ const char ENABLED_KEY[] = "Qnx.BlackBerry.DeployInformation.Enabled";
const char APPDESCRIPTOR_KEY[] = "Qnx.BlackBerry.DeployInformation.AppDescriptor";
const char PACKAGE_KEY[] = "Qnx.BlackBerry.DeployInformation.Package";
const char PROFILE_KEY[] = "Qnx.BlackBerry.DeployInformation.ProFile";
const char TARGET_KEY[] = "Qnx.BlackBerry.DeployInformation.Target";
const char SOURCE_KEY[] = "Qnx.BlackBerry.DeployInformation.Source";
}
QString BarPackageDeployInformation::appDescriptorPath() const
{
if (userAppDescriptorPath.isEmpty())
return sourceDir + QLatin1String("/bar-descriptor.xml");
return userAppDescriptorPath;
}
QString BarPackageDeployInformation::packagePath() const
{
if (userPackagePath.isEmpty())
return buildDir + QLatin1String("/") + targetName + QLatin1String(".bar");
return userPackagePath;
}
// ----------------------------------------------------------------------------
BlackBerryDeployInformation::BlackBerryDeployInformation(ProjectExplorer::Target *target)
: QAbstractTableModel(target)
, m_target(target)
@@ -89,9 +109,9 @@ QVariant BlackBerryDeployInformation::data(const QModelIndex &index, int role) c
return di.enabled ? Qt::Checked : Qt::Unchecked;
} else if (role == Qt::DisplayRole || role == Qt::EditRole) {
if (index.column() == AppDescriptorColumn)
return di.appDescriptorPath;
return QDir::toNativeSeparators(di.appDescriptorPath());
else if (index.column() == PackageColumn)
return di.packagePath;
return QDir::toNativeSeparators(di.packagePath());
}
return QVariant();
@@ -126,9 +146,9 @@ bool BlackBerryDeployInformation::setData(const QModelIndex &index, const QVaria
di.enabled = static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked;
} else if (role == Qt::EditRole) {
if (index.column() == AppDescriptorColumn)
di.appDescriptorPath = value.toString();
di.userAppDescriptorPath = value.toString();
else if (index.column() == PackageColumn)
di.packagePath = value.toString();
di.userPackagePath = value.toString();
}
emit dataChanged(index, index);
@@ -173,9 +193,11 @@ QVariantMap BlackBerryDeployInformation::toMap() const
QVariantMap deployInfoMap;
deployInfoMap[QLatin1String(ENABLED_KEY)] = deployInfo.enabled;
deployInfoMap[QLatin1String(APPDESCRIPTOR_KEY)] = deployInfo.appDescriptorPath;
deployInfoMap[QLatin1String(PACKAGE_KEY)] = deployInfo.packagePath;
deployInfoMap[QLatin1String(APPDESCRIPTOR_KEY)] = deployInfo.userAppDescriptorPath;
deployInfoMap[QLatin1String(PACKAGE_KEY)] = deployInfo.userPackagePath;
deployInfoMap[QLatin1String(PROFILE_KEY)] = deployInfo.proFilePath;
deployInfoMap[QLatin1String(TARGET_KEY)] = deployInfo.targetName;
deployInfoMap[QLatin1String(SOURCE_KEY)] = deployInfo.sourceDir;
outerMap[QString::fromLatin1(DEPLOYINFO_KEY).arg(i)] = deployInfoMap;
}
@@ -196,8 +218,13 @@ void BlackBerryDeployInformation::fromMap(const QVariantMap &map)
const QString appDescriptorPath = innerMap.value(QLatin1String(APPDESCRIPTOR_KEY)).toString();
const QString packagePath = innerMap.value(QLatin1String(PACKAGE_KEY)).toString();
const QString proFilePath = innerMap.value(QLatin1String(PROFILE_KEY)).toString();
const QString targetName = innerMap.value(QLatin1String(TARGET_KEY)).toString();
const QString sourceDir = innerMap.value(QLatin1String(SOURCE_KEY)).toString();
m_deployInformation << BarPackageDeployInformation(enabled, appDescriptorPath, packagePath, proFilePath);
BarPackageDeployInformation deployInformation(enabled, proFilePath, sourceDir, m_target->activeBuildConfiguration()->buildDirectory(), targetName);
deployInformation.userAppDescriptorPath = appDescriptorPath;
deployInformation.userPackagePath = packagePath;
m_deployInformation << deployInformation;
}
endResetModel();
@@ -216,8 +243,13 @@ void BlackBerryDeployInformation::updateModel()
foreach (Qt4ProjectManager::Qt4ProFileNode *node, appNodes) {
bool nodeFound = false;
for (int i = 0; i < m_deployInformation.size(); ++i) {
if (m_deployInformation[i].proFilePath == node->path()) {
keep << m_deployInformation[i];
if (m_deployInformation[i].proFilePath == node->path()
&& (!m_deployInformation[i].userAppDescriptorPath.isEmpty()
|| !m_deployInformation[i].userPackagePath.isEmpty())) {
BarPackageDeployInformation deployInformation = m_deployInformation[i];
// In case the user resets the bar package path (or if it is empty already), we need the current build dir
deployInformation.buildDir = m_target->activeBuildConfiguration()->buildDirectory();
keep << deployInformation;
nodeFound = true;
break;
}
@@ -270,9 +302,7 @@ BarPackageDeployInformation BlackBerryDeployInformation::deployInformationFromNo
Qt4ProjectManager::TargetInformation ti = node->targetInformation();
QFileInfo fi(node->path());
const QString appDescriptorPath = QDir::toNativeSeparators(fi.absolutePath() + QLatin1String("/bar-descriptor.xml"));
QString buildDir = m_target->activeBuildConfiguration()->buildDirectory();
QString barPackagePath = QDir::toNativeSeparators(buildDir + QLatin1Char('/') + ti.target + QLatin1String(".bar"));
const QString buildDir = m_target->activeBuildConfiguration()->buildDirectory();
return BarPackageDeployInformation(true, appDescriptorPath, barPackagePath, node->path());
return BarPackageDeployInformation(true, node->path(), fi.absolutePath(), buildDir, ti.target);
}
+14 -5
View File
@@ -47,18 +47,27 @@ namespace Internal {
class BarPackageDeployInformation {
public:
BarPackageDeployInformation(bool enabled, QString appDescriptorPath, QString packagePath, QString proFilePath)
BarPackageDeployInformation(bool enabled, const QString &proFilePath, const QString &sourceDir,
const QString &buildDir, const QString &targetName)
: enabled(enabled)
, appDescriptorPath(appDescriptorPath)
, packagePath(packagePath)
, proFilePath(proFilePath)
, sourceDir(sourceDir)
, buildDir(buildDir)
, targetName(targetName)
{
}
QString appDescriptorPath() const;
QString packagePath() const;
bool enabled;
QString appDescriptorPath;
QString packagePath;
QString proFilePath;
QString sourceDir;
QString buildDir;
QString targetName;
QString userAppDescriptorPath;
QString userPackagePath;
};
class BlackBerryDeployInformation : public QAbstractTableModel
+3 -3
View File
@@ -115,7 +115,7 @@ bool BlackBerryDeployStep::init()
args << QLatin1String("-device") << deviceHost();
if (!password().isEmpty())
args << QLatin1String("-password") << password();
args << QnxUtils::addQuotes(QDir::toNativeSeparators(info.packagePath));
args << QnxUtils::addQuotes(QDir::toNativeSeparators(info.packagePath()));
addCommand(deployCmd, args);
}
@@ -130,8 +130,8 @@ void BlackBerryDeployStep::run(QFutureInterface<bool> &fi)
QList<BarPackageDeployInformation> packagesToDeploy = deployConfig->deploymentInfo()->enabledPackages();
foreach (const BarPackageDeployInformation &info, packagesToDeploy) {
if (!QFileInfo(info.packagePath).exists()) {
raiseError(tr("Package '%1' does not exist. Create the package first.").arg(info.packagePath));
if (!QFileInfo(info.packagePath()).exists()) {
raiseError(tr("Package '%1' does not exist. Create the package first.").arg(info.packagePath()));
fi.reportResult(false);
return;
}
@@ -41,6 +41,7 @@
#include <QProgressDialog>
#include <QMessageBox>
#include <QAbstractButton>
using namespace ProjectExplorer;
using namespace Qnx::Internal;
@@ -60,10 +61,12 @@ BlackBerryDeviceConfigurationWidget::BlackBerryDeviceConfigurationWidget(const I
connect(ui->debugToken, SIGNAL(changed(QString)), this, SLOT(updateUploadButton()));
connect(ui->debugToken, SIGNAL(editingFinished()), this, SLOT(debugTokenEditingFinished()));
connect(ui->debugToken, SIGNAL(browsingFinished()), this, SLOT(debugTokenEditingFinished()));
connect(ui->requestButton, SIGNAL(clicked()), this, SLOT(requestDebugToken()));
connect(ui->uploadButton, SIGNAL(clicked()), this, SLOT(uploadDebugToken()));
connect(uploader, SIGNAL(finished(int)), this, SLOT(uploadFinished(int)));
ui->debugToken->addButton(tr("Request"), this, SLOT(requestDebugToken()));
ui->debugToken->addButton(tr("Upload"), this, SLOT(uploadDebugToken()));
uploadButton = ui->debugToken->buttonAtIndex(2);
initGui();
}
@@ -127,7 +130,7 @@ void BlackBerryDeviceConfigurationWidget::uploadDebugToken()
void BlackBerryDeviceConfigurationWidget::updateUploadButton()
{
ui->uploadButton->setEnabled(!ui->debugToken->path().isEmpty());
uploadButton->setEnabled(!ui->debugToken->path().isEmpty());
}
void BlackBerryDeviceConfigurationWidget::uploadFinished(int status)
@@ -38,6 +38,7 @@
QT_BEGIN_NAMESPACE
class QProgressDialog;
class QAbstractButton;
QT_END_NAMESPACE
namespace Qnx {
@@ -76,6 +77,7 @@ private:
BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
Ui::BlackBerryDeviceConfigurationWidget *ui;
QAbstractButton *uploadButton;
QProgressDialog *progressDialog;
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>334</width>
<height>109</height>
<height>131</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
@@ -67,25 +67,7 @@
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="Utils::PathChooser" name="debugToken" native="true"/>
</item>
<item>
<widget class="QPushButton" name="requestButton">
<property name="text">
<string>Request</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="uploadButton">
<property name="text">
<string>Upload</string>
</property>
</widget>
</item>
</layout>
<widget class="Utils::PathChooser" name="debugToken" native="true"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="keyLabel">
+1 -1
View File
@@ -1,6 +1,6 @@
/**************************************************************************
**
** Copyright (C) 2011 - 2012 Research In Motion
** Copyright (C) 2011 - 2013 Research In Motion
**
** Contact: Research In Motion (blackberry-qt@qnx.com)
** Contact: KDAB (info@kdab.com)
@@ -104,7 +104,7 @@ QString BlackBerryRunConfiguration::barPackage() const
QList<BarPackageDeployInformation> packages = dc->deploymentInfo()->enabledPackages();
foreach (const BarPackageDeployInformation package, packages) {
if (package.proFilePath == proFilePath())
return package.packagePath;
return package.packagePath();
}
return QString();
}
+2 -6
View File
@@ -103,12 +103,8 @@ void QnxAbstractQtVersion::addToEnvironment(const ProjectExplorer::Kit *k, Utils
Utils::Environment QnxAbstractQtVersion::qmakeRunEnvironment() const
{
if (!m_environmentUpToDate && !sdkPath().isEmpty())
{
// TODO: return Utils::Environment instead(?)
m_envMap = QnxUtils::parseEnvironmentFile(QnxUtils::envFilePath(sdkPath()));
m_environmentUpToDate = true;
}
if (!sdkPath().isEmpty())
updateEnvironment();
Utils::Environment env = Utils::Environment::systemEnvironment();
QnxUtils::prependQnxMapToEnvironment(m_envMap, env);
@@ -57,7 +57,7 @@ const QString AbstractMobileApp::ProFileComment(QLatin1String("#"));
const QString AbstractMobileApp::DeploymentPriFileName(QLatin1String("deployment.pri"));
const QString AbstractMobileApp::FileChecksum(QLatin1String("checksum"));
const QString AbstractMobileApp::FileStubVersion(QLatin1String("version"));
const int AbstractMobileApp::StubVersion = 8;
const int AbstractMobileApp::StubVersion = 9;
AbstractMobileApp::AbstractMobileApp()
: QObject()
@@ -139,7 +139,7 @@ public:
const Use use = future.resultAt(i);
// When adding tests, you may want to uncomment the
// following line in order to print out all found uses.
// qDebug() << QTest::toString(use);
qDebug() << QTest::toString(use);
actualUses.append(use);
}
@@ -178,6 +178,7 @@ private slots:
void test_checksymbols_NestedClassOfEnclosingTemplateUse();
void test_checksymbols_QTCREATORBUG8890_danglingPointer();
void test_checksymbols_QTCREATORBUG8974_danglingPointer();
};
void tst_CheckSymbols::test_checksymbols_TypeUse()
@@ -492,8 +493,745 @@ void tst_CheckSymbols::test_checksymbols_QTCREATORBUG8890_danglingPointer()
;
TestData::check(source, expectedUses);
}
}
// TODO: This is a good candidate for a performance test.
void tst_CheckSymbols::test_checksymbols_QTCREATORBUG8974_danglingPointer()
{
const QByteArray source =
"template <class T>\n"
"class Singleton\n"
"{\n"
"public:\n"
" static T& instance() {}\n"
"};\n"
"\n"
"void bar() {}\n"
"\n"
"void foo()\n"
"{\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
" Singleton<INIManager>::instance().bar();\n"
"};\n"
;
const QList<Use> expectedUses = QList<Use>()
<< Use(1, 17, 1, SemanticInfo::TypeUse)
<< Use(2, 7, 9, SemanticInfo::TypeUse)
<< Use(5, 12, 1, SemanticInfo::TypeUse)
<< Use(5, 15, 8, SemanticInfo::FunctionUse)
<< Use(8, 6, 3, SemanticInfo::FunctionUse)
<< Use(10, 6, 3, SemanticInfo::FunctionUse)
<< Use(12, 5, 9, SemanticInfo::TypeUse)
<< Use(12, 28, 8, SemanticInfo::FunctionUse)
<< Use(13, 5, 9, SemanticInfo::TypeUse)
<< Use(13, 28, 8, SemanticInfo::FunctionUse)
<< Use(14, 5, 9, SemanticInfo::TypeUse)
<< Use(14, 28, 8, SemanticInfo::FunctionUse)
<< Use(15, 5, 9, SemanticInfo::TypeUse)
<< Use(15, 28, 8, SemanticInfo::FunctionUse)
<< Use(16, 5, 9, SemanticInfo::TypeUse)
<< Use(16, 28, 8, SemanticInfo::FunctionUse)
<< Use(17, 5, 9, SemanticInfo::TypeUse)
<< Use(17, 28, 8, SemanticInfo::FunctionUse)
<< Use(18, 5, 9, SemanticInfo::TypeUse)
<< Use(18, 28, 8, SemanticInfo::FunctionUse)
<< Use(19, 5, 9, SemanticInfo::TypeUse)
<< Use(19, 28, 8, SemanticInfo::FunctionUse)
<< Use(20, 5, 9, SemanticInfo::TypeUse)
<< Use(20, 28, 8, SemanticInfo::FunctionUse)
<< Use(21, 5, 9, SemanticInfo::TypeUse)
<< Use(21, 28, 8, SemanticInfo::FunctionUse)
<< Use(22, 5, 9, SemanticInfo::TypeUse)
<< Use(22, 28, 8, SemanticInfo::FunctionUse)
<< Use(23, 5, 9, SemanticInfo::TypeUse)
<< Use(23, 28, 8, SemanticInfo::FunctionUse)
<< Use(24, 5, 9, SemanticInfo::TypeUse)
<< Use(24, 28, 8, SemanticInfo::FunctionUse)
<< Use(25, 5, 9, SemanticInfo::TypeUse)
<< Use(25, 28, 8, SemanticInfo::FunctionUse)
<< Use(26, 5, 9, SemanticInfo::TypeUse)
<< Use(26, 28, 8, SemanticInfo::FunctionUse)
<< Use(27, 5, 9, SemanticInfo::TypeUse)
<< Use(27, 28, 8, SemanticInfo::FunctionUse)
<< Use(28, 5, 9, SemanticInfo::TypeUse)
<< Use(28, 28, 8, SemanticInfo::FunctionUse)
<< Use(29, 5, 9, SemanticInfo::TypeUse)
<< Use(29, 28, 8, SemanticInfo::FunctionUse)
<< Use(30, 5, 9, SemanticInfo::TypeUse)
<< Use(30, 28, 8, SemanticInfo::FunctionUse)
<< Use(31, 5, 9, SemanticInfo::TypeUse)
<< Use(31, 28, 8, SemanticInfo::FunctionUse)
<< Use(32, 5, 9, SemanticInfo::TypeUse)
<< Use(32, 28, 8, SemanticInfo::FunctionUse)
<< Use(33, 5, 9, SemanticInfo::TypeUse)
<< Use(33, 28, 8, SemanticInfo::FunctionUse)
<< Use(34, 5, 9, SemanticInfo::TypeUse)
<< Use(34, 28, 8, SemanticInfo::FunctionUse)
<< Use(35, 5, 9, SemanticInfo::TypeUse)
<< Use(35, 28, 8, SemanticInfo::FunctionUse)
<< Use(36, 5, 9, SemanticInfo::TypeUse)
<< Use(36, 28, 8, SemanticInfo::FunctionUse)
<< Use(37, 5, 9, SemanticInfo::TypeUse)
<< Use(37, 28, 8, SemanticInfo::FunctionUse)
<< Use(38, 5, 9, SemanticInfo::TypeUse)
<< Use(38, 28, 8, SemanticInfo::FunctionUse)
<< Use(39, 5, 9, SemanticInfo::TypeUse)
<< Use(39, 28, 8, SemanticInfo::FunctionUse)
<< Use(40, 5, 9, SemanticInfo::TypeUse)
<< Use(40, 28, 8, SemanticInfo::FunctionUse)
<< Use(41, 5, 9, SemanticInfo::TypeUse)
<< Use(41, 28, 8, SemanticInfo::FunctionUse)
<< Use(42, 5, 9, SemanticInfo::TypeUse)
<< Use(42, 28, 8, SemanticInfo::FunctionUse)
<< Use(43, 5, 9, SemanticInfo::TypeUse)
<< Use(43, 28, 8, SemanticInfo::FunctionUse)
<< Use(44, 5, 9, SemanticInfo::TypeUse)
<< Use(44, 28, 8, SemanticInfo::FunctionUse)
<< Use(45, 5, 9, SemanticInfo::TypeUse)
<< Use(45, 28, 8, SemanticInfo::FunctionUse)
<< Use(46, 5, 9, SemanticInfo::TypeUse)
<< Use(46, 28, 8, SemanticInfo::FunctionUse)
<< Use(47, 5, 9, SemanticInfo::TypeUse)
<< Use(47, 28, 8, SemanticInfo::FunctionUse)
<< Use(48, 5, 9, SemanticInfo::TypeUse)
<< Use(48, 28, 8, SemanticInfo::FunctionUse)
<< Use(49, 5, 9, SemanticInfo::TypeUse)
<< Use(49, 28, 8, SemanticInfo::FunctionUse)
<< Use(50, 5, 9, SemanticInfo::TypeUse)
<< Use(50, 28, 8, SemanticInfo::FunctionUse)
<< Use(51, 5, 9, SemanticInfo::TypeUse)
<< Use(51, 28, 8, SemanticInfo::FunctionUse)
<< Use(52, 5, 9, SemanticInfo::TypeUse)
<< Use(52, 28, 8, SemanticInfo::FunctionUse)
<< Use(53, 5, 9, SemanticInfo::TypeUse)
<< Use(53, 28, 8, SemanticInfo::FunctionUse)
<< Use(54, 5, 9, SemanticInfo::TypeUse)
<< Use(54, 28, 8, SemanticInfo::FunctionUse)
<< Use(55, 5, 9, SemanticInfo::TypeUse)
<< Use(55, 28, 8, SemanticInfo::FunctionUse)
<< Use(56, 5, 9, SemanticInfo::TypeUse)
<< Use(56, 28, 8, SemanticInfo::FunctionUse)
<< Use(57, 5, 9, SemanticInfo::TypeUse)
<< Use(57, 28, 8, SemanticInfo::FunctionUse)
<< Use(58, 5, 9, SemanticInfo::TypeUse)
<< Use(58, 28, 8, SemanticInfo::FunctionUse)
<< Use(59, 5, 9, SemanticInfo::TypeUse)
<< Use(59, 28, 8, SemanticInfo::FunctionUse)
<< Use(60, 5, 9, SemanticInfo::TypeUse)
<< Use(60, 28, 8, SemanticInfo::FunctionUse)
<< Use(61, 5, 9, SemanticInfo::TypeUse)
<< Use(61, 28, 8, SemanticInfo::FunctionUse)
<< Use(62, 5, 9, SemanticInfo::TypeUse)
<< Use(62, 28, 8, SemanticInfo::FunctionUse)
<< Use(63, 5, 9, SemanticInfo::TypeUse)
<< Use(63, 28, 8, SemanticInfo::FunctionUse)
<< Use(64, 5, 9, SemanticInfo::TypeUse)
<< Use(64, 28, 8, SemanticInfo::FunctionUse)
<< Use(65, 5, 9, SemanticInfo::TypeUse)
<< Use(65, 28, 8, SemanticInfo::FunctionUse)
<< Use(66, 5, 9, SemanticInfo::TypeUse)
<< Use(66, 28, 8, SemanticInfo::FunctionUse)
<< Use(67, 5, 9, SemanticInfo::TypeUse)
<< Use(67, 28, 8, SemanticInfo::FunctionUse)
<< Use(68, 5, 9, SemanticInfo::TypeUse)
<< Use(68, 28, 8, SemanticInfo::FunctionUse)
<< Use(69, 5, 9, SemanticInfo::TypeUse)
<< Use(69, 28, 8, SemanticInfo::FunctionUse)
<< Use(70, 5, 9, SemanticInfo::TypeUse)
<< Use(70, 28, 8, SemanticInfo::FunctionUse)
<< Use(71, 5, 9, SemanticInfo::TypeUse)
<< Use(71, 28, 8, SemanticInfo::FunctionUse)
<< Use(72, 5, 9, SemanticInfo::TypeUse)
<< Use(72, 28, 8, SemanticInfo::FunctionUse)
<< Use(73, 5, 9, SemanticInfo::TypeUse)
<< Use(73, 28, 8, SemanticInfo::FunctionUse)
<< Use(74, 5, 9, SemanticInfo::TypeUse)
<< Use(74, 28, 8, SemanticInfo::FunctionUse)
<< Use(75, 5, 9, SemanticInfo::TypeUse)
<< Use(75, 28, 8, SemanticInfo::FunctionUse)
<< Use(76, 5, 9, SemanticInfo::TypeUse)
<< Use(76, 28, 8, SemanticInfo::FunctionUse)
<< Use(77, 5, 9, SemanticInfo::TypeUse)
<< Use(77, 28, 8, SemanticInfo::FunctionUse)
<< Use(78, 5, 9, SemanticInfo::TypeUse)
<< Use(78, 28, 8, SemanticInfo::FunctionUse)
<< Use(79, 5, 9, SemanticInfo::TypeUse)
<< Use(79, 28, 8, SemanticInfo::FunctionUse)
<< Use(80, 5, 9, SemanticInfo::TypeUse)
<< Use(80, 28, 8, SemanticInfo::FunctionUse)
<< Use(81, 5, 9, SemanticInfo::TypeUse)
<< Use(81, 28, 8, SemanticInfo::FunctionUse)
<< Use(82, 5, 9, SemanticInfo::TypeUse)
<< Use(82, 28, 8, SemanticInfo::FunctionUse)
<< Use(83, 5, 9, SemanticInfo::TypeUse)
<< Use(83, 28, 8, SemanticInfo::FunctionUse)
<< Use(84, 5, 9, SemanticInfo::TypeUse)
<< Use(84, 28, 8, SemanticInfo::FunctionUse)
<< Use(85, 5, 9, SemanticInfo::TypeUse)
<< Use(85, 28, 8, SemanticInfo::FunctionUse)
<< Use(86, 5, 9, SemanticInfo::TypeUse)
<< Use(86, 28, 8, SemanticInfo::FunctionUse)
<< Use(87, 5, 9, SemanticInfo::TypeUse)
<< Use(87, 28, 8, SemanticInfo::FunctionUse)
<< Use(88, 5, 9, SemanticInfo::TypeUse)
<< Use(88, 28, 8, SemanticInfo::FunctionUse)
<< Use(89, 5, 9, SemanticInfo::TypeUse)
<< Use(89, 28, 8, SemanticInfo::FunctionUse)
<< Use(90, 5, 9, SemanticInfo::TypeUse)
<< Use(90, 28, 8, SemanticInfo::FunctionUse)
<< Use(91, 5, 9, SemanticInfo::TypeUse)
<< Use(91, 28, 8, SemanticInfo::FunctionUse)
<< Use(92, 5, 9, SemanticInfo::TypeUse)
<< Use(92, 28, 8, SemanticInfo::FunctionUse)
<< Use(93, 5, 9, SemanticInfo::TypeUse)
<< Use(93, 28, 8, SemanticInfo::FunctionUse)
<< Use(94, 5, 9, SemanticInfo::TypeUse)
<< Use(94, 28, 8, SemanticInfo::FunctionUse)
<< Use(95, 5, 9, SemanticInfo::TypeUse)
<< Use(95, 28, 8, SemanticInfo::FunctionUse)
<< Use(96, 5, 9, SemanticInfo::TypeUse)
<< Use(96, 28, 8, SemanticInfo::FunctionUse)
<< Use(97, 5, 9, SemanticInfo::TypeUse)
<< Use(97, 28, 8, SemanticInfo::FunctionUse)
<< Use(98, 5, 9, SemanticInfo::TypeUse)
<< Use(98, 28, 8, SemanticInfo::FunctionUse)
<< Use(99, 5, 9, SemanticInfo::TypeUse)
<< Use(99, 28, 8, SemanticInfo::FunctionUse)
<< Use(100, 5, 9, SemanticInfo::TypeUse)
<< Use(100, 28, 8, SemanticInfo::FunctionUse)
<< Use(101, 5, 9, SemanticInfo::TypeUse)
<< Use(101, 28, 8, SemanticInfo::FunctionUse)
<< Use(102, 5, 9, SemanticInfo::TypeUse)
<< Use(102, 28, 8, SemanticInfo::FunctionUse)
<< Use(103, 5, 9, SemanticInfo::TypeUse)
<< Use(103, 28, 8, SemanticInfo::FunctionUse)
<< Use(104, 5, 9, SemanticInfo::TypeUse)
<< Use(104, 28, 8, SemanticInfo::FunctionUse)
<< Use(105, 5, 9, SemanticInfo::TypeUse)
<< Use(105, 28, 8, SemanticInfo::FunctionUse)
<< Use(106, 5, 9, SemanticInfo::TypeUse)
<< Use(106, 28, 8, SemanticInfo::FunctionUse)
<< Use(107, 5, 9, SemanticInfo::TypeUse)
<< Use(107, 28, 8, SemanticInfo::FunctionUse)
<< Use(108, 5, 9, SemanticInfo::TypeUse)
<< Use(108, 28, 8, SemanticInfo::FunctionUse)
<< Use(109, 5, 9, SemanticInfo::TypeUse)
<< Use(109, 28, 8, SemanticInfo::FunctionUse)
<< Use(110, 5, 9, SemanticInfo::TypeUse)
<< Use(110, 28, 8, SemanticInfo::FunctionUse)
<< Use(111, 5, 9, SemanticInfo::TypeUse)
<< Use(111, 28, 8, SemanticInfo::FunctionUse)
<< Use(112, 5, 9, SemanticInfo::TypeUse)
<< Use(112, 28, 8, SemanticInfo::FunctionUse)
<< Use(113, 5, 9, SemanticInfo::TypeUse)
<< Use(113, 28, 8, SemanticInfo::FunctionUse)
<< Use(114, 5, 9, SemanticInfo::TypeUse)
<< Use(114, 28, 8, SemanticInfo::FunctionUse)
<< Use(115, 5, 9, SemanticInfo::TypeUse)
<< Use(115, 28, 8, SemanticInfo::FunctionUse)
<< Use(116, 5, 9, SemanticInfo::TypeUse)
<< Use(116, 28, 8, SemanticInfo::FunctionUse)
<< Use(117, 5, 9, SemanticInfo::TypeUse)
<< Use(117, 28, 8, SemanticInfo::FunctionUse)
<< Use(118, 5, 9, SemanticInfo::TypeUse)
<< Use(118, 28, 8, SemanticInfo::FunctionUse)
<< Use(119, 5, 9, SemanticInfo::TypeUse)
<< Use(119, 28, 8, SemanticInfo::FunctionUse)
<< Use(120, 5, 9, SemanticInfo::TypeUse)
<< Use(120, 28, 8, SemanticInfo::FunctionUse)
<< Use(121, 5, 9, SemanticInfo::TypeUse)
<< Use(121, 28, 8, SemanticInfo::FunctionUse)
<< Use(122, 5, 9, SemanticInfo::TypeUse)
<< Use(122, 28, 8, SemanticInfo::FunctionUse)
<< Use(123, 5, 9, SemanticInfo::TypeUse)
<< Use(123, 28, 8, SemanticInfo::FunctionUse)
<< Use(124, 5, 9, SemanticInfo::TypeUse)
<< Use(124, 28, 8, SemanticInfo::FunctionUse)
<< Use(125, 5, 9, SemanticInfo::TypeUse)
<< Use(125, 28, 8, SemanticInfo::FunctionUse)
<< Use(126, 5, 9, SemanticInfo::TypeUse)
<< Use(126, 28, 8, SemanticInfo::FunctionUse)
<< Use(127, 5, 9, SemanticInfo::TypeUse)
<< Use(127, 28, 8, SemanticInfo::FunctionUse)
<< Use(128, 5, 9, SemanticInfo::TypeUse)
<< Use(128, 28, 8, SemanticInfo::FunctionUse)
<< Use(129, 5, 9, SemanticInfo::TypeUse)
<< Use(129, 28, 8, SemanticInfo::FunctionUse)
<< Use(130, 5, 9, SemanticInfo::TypeUse)
<< Use(130, 28, 8, SemanticInfo::FunctionUse)
<< Use(131, 5, 9, SemanticInfo::TypeUse)
<< Use(131, 28, 8, SemanticInfo::FunctionUse)
<< Use(132, 5, 9, SemanticInfo::TypeUse)
<< Use(132, 28, 8, SemanticInfo::FunctionUse)
<< Use(133, 5, 9, SemanticInfo::TypeUse)
<< Use(133, 28, 8, SemanticInfo::FunctionUse)
<< Use(134, 5, 9, SemanticInfo::TypeUse)
<< Use(134, 28, 8, SemanticInfo::FunctionUse)
<< Use(135, 5, 9, SemanticInfo::TypeUse)
<< Use(135, 28, 8, SemanticInfo::FunctionUse)
<< Use(136, 5, 9, SemanticInfo::TypeUse)
<< Use(136, 28, 8, SemanticInfo::FunctionUse)
<< Use(137, 5, 9, SemanticInfo::TypeUse)
<< Use(137, 28, 8, SemanticInfo::FunctionUse)
<< Use(138, 5, 9, SemanticInfo::TypeUse)
<< Use(138, 28, 8, SemanticInfo::FunctionUse)
<< Use(139, 5, 9, SemanticInfo::TypeUse)
<< Use(139, 28, 8, SemanticInfo::FunctionUse)
<< Use(140, 5, 9, SemanticInfo::TypeUse)
<< Use(140, 28, 8, SemanticInfo::FunctionUse)
<< Use(141, 5, 9, SemanticInfo::TypeUse)
<< Use(141, 28, 8, SemanticInfo::FunctionUse)
<< Use(142, 5, 9, SemanticInfo::TypeUse)
<< Use(142, 28, 8, SemanticInfo::FunctionUse)
<< Use(143, 5, 9, SemanticInfo::TypeUse)
<< Use(143, 28, 8, SemanticInfo::FunctionUse)
<< Use(144, 5, 9, SemanticInfo::TypeUse)
<< Use(144, 28, 8, SemanticInfo::FunctionUse)
<< Use(145, 5, 9, SemanticInfo::TypeUse)
<< Use(145, 28, 8, SemanticInfo::FunctionUse)
<< Use(146, 5, 9, SemanticInfo::TypeUse)
<< Use(146, 28, 8, SemanticInfo::FunctionUse)
<< Use(147, 5, 9, SemanticInfo::TypeUse)
<< Use(147, 28, 8, SemanticInfo::FunctionUse)
<< Use(148, 5, 9, SemanticInfo::TypeUse)
<< Use(148, 28, 8, SemanticInfo::FunctionUse)
<< Use(149, 5, 9, SemanticInfo::TypeUse)
<< Use(149, 28, 8, SemanticInfo::FunctionUse)
<< Use(150, 5, 9, SemanticInfo::TypeUse)
<< Use(150, 28, 8, SemanticInfo::FunctionUse)
<< Use(151, 5, 9, SemanticInfo::TypeUse)
<< Use(151, 28, 8, SemanticInfo::FunctionUse)
<< Use(152, 5, 9, SemanticInfo::TypeUse)
<< Use(152, 28, 8, SemanticInfo::FunctionUse)
<< Use(153, 5, 9, SemanticInfo::TypeUse)
<< Use(153, 28, 8, SemanticInfo::FunctionUse)
<< Use(154, 5, 9, SemanticInfo::TypeUse)
<< Use(154, 28, 8, SemanticInfo::FunctionUse)
<< Use(155, 5, 9, SemanticInfo::TypeUse)
<< Use(155, 28, 8, SemanticInfo::FunctionUse)
<< Use(156, 5, 9, SemanticInfo::TypeUse)
<< Use(156, 28, 8, SemanticInfo::FunctionUse)
<< Use(157, 5, 9, SemanticInfo::TypeUse)
<< Use(157, 28, 8, SemanticInfo::FunctionUse)
<< Use(158, 5, 9, SemanticInfo::TypeUse)
<< Use(158, 28, 8, SemanticInfo::FunctionUse)
<< Use(159, 5, 9, SemanticInfo::TypeUse)
<< Use(159, 28, 8, SemanticInfo::FunctionUse)
<< Use(160, 5, 9, SemanticInfo::TypeUse)
<< Use(160, 28, 8, SemanticInfo::FunctionUse)
<< Use(161, 5, 9, SemanticInfo::TypeUse)
<< Use(161, 28, 8, SemanticInfo::FunctionUse)
<< Use(162, 5, 9, SemanticInfo::TypeUse)
<< Use(162, 28, 8, SemanticInfo::FunctionUse)
<< Use(163, 5, 9, SemanticInfo::TypeUse)
<< Use(163, 28, 8, SemanticInfo::FunctionUse)
<< Use(164, 5, 9, SemanticInfo::TypeUse)
<< Use(164, 28, 8, SemanticInfo::FunctionUse)
<< Use(165, 5, 9, SemanticInfo::TypeUse)
<< Use(165, 28, 8, SemanticInfo::FunctionUse)
<< Use(166, 5, 9, SemanticInfo::TypeUse)
<< Use(166, 28, 8, SemanticInfo::FunctionUse)
<< Use(167, 5, 9, SemanticInfo::TypeUse)
<< Use(167, 28, 8, SemanticInfo::FunctionUse)
<< Use(168, 5, 9, SemanticInfo::TypeUse)
<< Use(168, 28, 8, SemanticInfo::FunctionUse)
<< Use(169, 5, 9, SemanticInfo::TypeUse)
<< Use(169, 28, 8, SemanticInfo::FunctionUse)
<< Use(170, 5, 9, SemanticInfo::TypeUse)
<< Use(170, 28, 8, SemanticInfo::FunctionUse)
<< Use(171, 5, 9, SemanticInfo::TypeUse)
<< Use(171, 28, 8, SemanticInfo::FunctionUse)
<< Use(172, 5, 9, SemanticInfo::TypeUse)
<< Use(172, 28, 8, SemanticInfo::FunctionUse)
<< Use(173, 5, 9, SemanticInfo::TypeUse)
<< Use(173, 28, 8, SemanticInfo::FunctionUse)
<< Use(174, 5, 9, SemanticInfo::TypeUse)
<< Use(174, 28, 8, SemanticInfo::FunctionUse)
<< Use(175, 5, 9, SemanticInfo::TypeUse)
<< Use(175, 28, 8, SemanticInfo::FunctionUse)
<< Use(176, 5, 9, SemanticInfo::TypeUse)
<< Use(176, 28, 8, SemanticInfo::FunctionUse)
<< Use(177, 5, 9, SemanticInfo::TypeUse)
<< Use(177, 28, 8, SemanticInfo::FunctionUse)
<< Use(178, 5, 9, SemanticInfo::TypeUse)
<< Use(178, 28, 8, SemanticInfo::FunctionUse)
<< Use(179, 5, 9, SemanticInfo::TypeUse)
<< Use(179, 28, 8, SemanticInfo::FunctionUse)
<< Use(180, 5, 9, SemanticInfo::TypeUse)
<< Use(180, 28, 8, SemanticInfo::FunctionUse)
<< Use(181, 5, 9, SemanticInfo::TypeUse)
<< Use(181, 28, 8, SemanticInfo::FunctionUse)
<< Use(182, 5, 9, SemanticInfo::TypeUse)
<< Use(182, 28, 8, SemanticInfo::FunctionUse)
<< Use(183, 5, 9, SemanticInfo::TypeUse)
<< Use(183, 28, 8, SemanticInfo::FunctionUse)
<< Use(184, 5, 9, SemanticInfo::TypeUse)
<< Use(184, 28, 8, SemanticInfo::FunctionUse)
<< Use(185, 5, 9, SemanticInfo::TypeUse)
<< Use(185, 28, 8, SemanticInfo::FunctionUse)
<< Use(186, 5, 9, SemanticInfo::TypeUse)
<< Use(186, 28, 8, SemanticInfo::FunctionUse)
<< Use(187, 5, 9, SemanticInfo::TypeUse)
<< Use(187, 28, 8, SemanticInfo::FunctionUse)
<< Use(188, 5, 9, SemanticInfo::TypeUse)
<< Use(188, 28, 8, SemanticInfo::FunctionUse)
<< Use(189, 5, 9, SemanticInfo::TypeUse)
<< Use(189, 28, 8, SemanticInfo::FunctionUse)
<< Use(190, 5, 9, SemanticInfo::TypeUse)
<< Use(190, 28, 8, SemanticInfo::FunctionUse)
<< Use(191, 5, 9, SemanticInfo::TypeUse)
<< Use(191, 28, 8, SemanticInfo::FunctionUse)
<< Use(192, 5, 9, SemanticInfo::TypeUse)
<< Use(192, 28, 8, SemanticInfo::FunctionUse)
<< Use(193, 5, 9, SemanticInfo::TypeUse)
<< Use(193, 28, 8, SemanticInfo::FunctionUse)
<< Use(194, 5, 9, SemanticInfo::TypeUse)
<< Use(194, 28, 8, SemanticInfo::FunctionUse)
<< Use(195, 5, 9, SemanticInfo::TypeUse)
<< Use(195, 28, 8, SemanticInfo::FunctionUse)
<< Use(196, 5, 9, SemanticInfo::TypeUse)
<< Use(196, 28, 8, SemanticInfo::FunctionUse)
<< Use(197, 5, 9, SemanticInfo::TypeUse)
<< Use(197, 28, 8, SemanticInfo::FunctionUse)
<< Use(198, 5, 9, SemanticInfo::TypeUse)
<< Use(198, 28, 8, SemanticInfo::FunctionUse)
<< Use(199, 5, 9, SemanticInfo::TypeUse)
<< Use(199, 28, 8, SemanticInfo::FunctionUse)
<< Use(200, 5, 9, SemanticInfo::TypeUse)
<< Use(200, 28, 8, SemanticInfo::FunctionUse)
<< Use(201, 5, 9, SemanticInfo::TypeUse)
<< Use(201, 28, 8, SemanticInfo::FunctionUse)
<< Use(202, 5, 9, SemanticInfo::TypeUse)
<< Use(202, 28, 8, SemanticInfo::FunctionUse)
<< Use(203, 5, 9, SemanticInfo::TypeUse)
<< Use(203, 28, 8, SemanticInfo::FunctionUse)
<< Use(204, 5, 9, SemanticInfo::TypeUse)
<< Use(204, 28, 8, SemanticInfo::FunctionUse)
<< Use(205, 5, 9, SemanticInfo::TypeUse)
<< Use(205, 28, 8, SemanticInfo::FunctionUse)
<< Use(206, 5, 9, SemanticInfo::TypeUse)
<< Use(206, 28, 8, SemanticInfo::FunctionUse)
<< Use(207, 5, 9, SemanticInfo::TypeUse)
<< Use(207, 28, 8, SemanticInfo::FunctionUse)
<< Use(208, 5, 9, SemanticInfo::TypeUse)
<< Use(208, 28, 8, SemanticInfo::FunctionUse)
<< Use(209, 5, 9, SemanticInfo::TypeUse)
<< Use(209, 28, 8, SemanticInfo::FunctionUse)
<< Use(210, 5, 9, SemanticInfo::TypeUse)
<< Use(210, 28, 8, SemanticInfo::FunctionUse)
<< Use(211, 5, 9, SemanticInfo::TypeUse)
<< Use(211, 28, 8, SemanticInfo::FunctionUse)
<< Use(212, 5, 9, SemanticInfo::TypeUse)
<< Use(212, 28, 8, SemanticInfo::FunctionUse)
<< Use(213, 5, 9, SemanticInfo::TypeUse)
<< Use(213, 28, 8, SemanticInfo::FunctionUse)
<< Use(214, 5, 9, SemanticInfo::TypeUse)
<< Use(214, 28, 8, SemanticInfo::FunctionUse)
<< Use(215, 5, 9, SemanticInfo::TypeUse)
<< Use(215, 28, 8, SemanticInfo::FunctionUse)
<< Use(216, 5, 9, SemanticInfo::TypeUse)
<< Use(216, 28, 8, SemanticInfo::FunctionUse)
<< Use(217, 5, 9, SemanticInfo::TypeUse)
<< Use(217, 28, 8, SemanticInfo::FunctionUse)
<< Use(218, 5, 9, SemanticInfo::TypeUse)
<< Use(218, 28, 8, SemanticInfo::FunctionUse)
<< Use(219, 5, 9, SemanticInfo::TypeUse)
<< Use(219, 28, 8, SemanticInfo::FunctionUse)
<< Use(220, 5, 9, SemanticInfo::TypeUse)
<< Use(220, 28, 8, SemanticInfo::FunctionUse)
<< Use(221, 5, 9, SemanticInfo::TypeUse)
<< Use(221, 28, 8, SemanticInfo::FunctionUse)
<< Use(222, 5, 9, SemanticInfo::TypeUse)
<< Use(222, 28, 8, SemanticInfo::FunctionUse)
<< Use(223, 5, 9, SemanticInfo::TypeUse)
<< Use(223, 28, 8, SemanticInfo::FunctionUse)
<< Use(224, 5, 9, SemanticInfo::TypeUse)
<< Use(224, 28, 8, SemanticInfo::FunctionUse)
<< Use(225, 5, 9, SemanticInfo::TypeUse)
<< Use(225, 28, 8, SemanticInfo::FunctionUse)
<< Use(226, 5, 9, SemanticInfo::TypeUse)
<< Use(226, 28, 8, SemanticInfo::FunctionUse)
<< Use(227, 5, 9, SemanticInfo::TypeUse)
<< Use(227, 28, 8, SemanticInfo::FunctionUse)
<< Use(228, 5, 9, SemanticInfo::TypeUse)
<< Use(228, 28, 8, SemanticInfo::FunctionUse)
<< Use(229, 5, 9, SemanticInfo::TypeUse)
<< Use(229, 28, 8, SemanticInfo::FunctionUse)
<< Use(230, 5, 9, SemanticInfo::TypeUse)
<< Use(230, 28, 8, SemanticInfo::FunctionUse)
<< Use(231, 5, 9, SemanticInfo::TypeUse)
<< Use(231, 28, 8, SemanticInfo::FunctionUse)
<< Use(232, 5, 9, SemanticInfo::TypeUse)
<< Use(232, 28, 8, SemanticInfo::FunctionUse)
<< Use(233, 5, 9, SemanticInfo::TypeUse)
<< Use(233, 28, 8, SemanticInfo::FunctionUse)
<< Use(234, 5, 9, SemanticInfo::TypeUse)
<< Use(234, 28, 8, SemanticInfo::FunctionUse)
<< Use(235, 5, 9, SemanticInfo::TypeUse)
<< Use(235, 28, 8, SemanticInfo::FunctionUse)
<< Use(236, 5, 9, SemanticInfo::TypeUse)
<< Use(236, 28, 8, SemanticInfo::FunctionUse)
<< Use(237, 5, 9, SemanticInfo::TypeUse)
<< Use(237, 28, 8, SemanticInfo::FunctionUse)
<< Use(238, 5, 9, SemanticInfo::TypeUse)
<< Use(238, 28, 8, SemanticInfo::FunctionUse)
<< Use(239, 5, 9, SemanticInfo::TypeUse)
<< Use(239, 28, 8, SemanticInfo::FunctionUse)
<< Use(240, 5, 9, SemanticInfo::TypeUse)
<< Use(240, 28, 8, SemanticInfo::FunctionUse)
<< Use(241, 5, 9, SemanticInfo::TypeUse)
<< Use(241, 28, 8, SemanticInfo::FunctionUse)
<< Use(242, 5, 9, SemanticInfo::TypeUse)
<< Use(242, 28, 8, SemanticInfo::FunctionUse)
<< Use(243, 5, 9, SemanticInfo::TypeUse)
<< Use(243, 28, 8, SemanticInfo::FunctionUse)
<< Use(244, 5, 9, SemanticInfo::TypeUse)
<< Use(244, 28, 8, SemanticInfo::FunctionUse)
<< Use(245, 5, 9, SemanticInfo::TypeUse)
<< Use(245, 28, 8, SemanticInfo::FunctionUse)
<< Use(246, 5, 9, SemanticInfo::TypeUse)
<< Use(246, 28, 8, SemanticInfo::FunctionUse)
<< Use(247, 5, 9, SemanticInfo::TypeUse)
<< Use(247, 28, 8, SemanticInfo::FunctionUse)
;
TestData::check(source, expectedUses);
}
QTEST_APPLESS_MAIN(tst_CheckSymbols)
#include "tst_checksymbols.moc"
+12
View File
@@ -2,8 +2,12 @@
:*Qt Creator.Clear_QToolButton {text='Clear' type='QToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.Continue_Core::Internal::FancyToolButton {text='Continue' type='Core::Internal::FancyToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.DoubleTabWidget_ProjectExplorer::Internal::DoubleTabWidget {name='ProjectExplorer__Internal__DoubleTabWidget' type='ProjectExplorer::Internal::DoubleTabWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='DoubleTabWidget'}
:*Qt Creator.Events_QDockWidget {name='QmlProfilerEventsViewDockWidget' type='QDockWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Events'}
:*Qt Creator.Events_QTabBar {aboveWidget=':*Qt Creator.Events_QDockWidget' type='QTabBar' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.Find_Find::Internal::FindToolBar {name='Find__Internal__FindWidget' type='Find::Internal::FindToolBar' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Find'}
:*Qt Creator.Interrupt_Core::Internal::FancyToolButton {text='Interrupt' type='Core::Internal::FancyToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.JavaScript_QDockWidget {name='QmlProfilerV8ProfileViewDockWidget' type='QDockWidget' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='JavaScript'}
:*Qt Creator.JavaScript_QTabBar {aboveWidget=':*Qt Creator.JavaScript_QDockWidget' type='QTabBar' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.Start Debugging_Core::Internal::FancyToolButton {text='Start Debugging' type='Core::Internal::FancyToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator.findEdit_Utils::FilterLineEdit {name='findEdit' type='Utils::FilterLineEdit' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:*Qt Creator_Core::Internal::FancyToolButton {occurrence='3' type='Core::Internal::FancyToolButton' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
@@ -19,6 +23,9 @@
:Add Bookmark_BookmarkDialog {name='BookmarkDialog' type='BookmarkDialog' visible='1' windowTitle='Add Bookmark'}
:Add to Version Control.No_QPushButton {text='No' type='QPushButton' unnamed='1' visible='1' window=':Add to Version Control_QMessageBox'}
:Add to Version Control_QMessageBox {text~='Add the file.*to version control (.*)?' type='QMessageBox' unnamed='1' visible='1'}
:Analyzer Toolbar.AnalyzerManagerToolBox_QComboBox {container=':Qt Creator.Analyzer Toolbar_QDockWidget' name='AnalyzerManagerToolBox' type='QComboBox' visible='1'}
:Analyzer Toolbar.Elapsed:_QLabel {container=':Qt Creator.Analyzer Toolbar_QDockWidget' text~='Elapsed: \\\\d+.\\\\d s' type='QLabel' unnamed='1' visible='1'}
:Analyzer Toolbar.Start_QToolButton {container=':Qt Creator.Analyzer Toolbar_QDockWidget' text='Start' type='QToolButton' unnamed='1' visible='1'}
:Behavior.Autocomplete common prefix_QCheckBox {container=':CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox' name='partiallyComplete' text='Autocomplete common prefix' type='QCheckBox' visible='1'}
:Behavior.completionTrigger_QComboBox {container=':CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox' name='completionTrigger' type='QComboBox' visible='1'}
:Breakpoints_Debugger::Internal::BreakTreeView {container=':DebugModeWidget.Breakpoints_QDockWidget' type='Debugger::Internal::BreakTreeView' unnamed='1' visible='1'}
@@ -44,6 +51,7 @@
:Dialog.componentNameEdit_QLineEdit {name='componentNameEdit' type='Utils::ClassNameValidatingLineEdit' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}
:Dialog_QmlJSEditor::Internal::ComponentNameDialog {name='QmlJSEditor__Internal__ComponentNameDialog' type='QmlJSEditor::Internal::ComponentNameDialog' visible='1' windowTitle='Move Component into Separate File'}
:Edit Environment_ProjectExplorer::EnvironmentItemsDialog {type='ProjectExplorer::EnvironmentItemsDialog' unnamed='1' visible='1' windowTitle='Edit Environment'}
:Events.QmlProfilerEventsTable_QmlProfiler::Internal::QmlProfilerEventsMainView {container=':*Qt Creator.Events_QDockWidget' name='QmlProfilerEventsTable' type='QmlProfiler::Internal::QmlProfilerEventsMainView' visible='1'}
:Failed to start application_QMessageBox {type='QMessageBox' unnamed='1' visible='1' windowTitle='Failed to start application'}
:File has been removed.Close_QPushButton {text='Close' type='QPushButton' unnamed='1' visible='1' window=':File has been removed_QMessageBox'}
:File has been removed.Save_QPushButton {text='Save' type='QPushButton' unnamed='1' visible='1' window=':File has been removed_QMessageBox'}
@@ -52,6 +60,10 @@
:Generator:_QComboBox {buddy=':CMake Wizard.Generator:_QLabel' type='QComboBox' unnamed='1' visible='1'}
:Hits_QCLuceneResultWidget {aboveWidget=':Hits_QLabel' type='QCLuceneResultWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:Hits_QLabel {text~='\\\\d+ - \\\\d+ of \\\\d+ Hits' type='QLabel' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:Installed Plugins.Close_QPushButton {text='Close' type='QPushButton' unnamed='1' visible='1' window=':Installed Plugins_Core::Internal::PluginDialog'}
:Installed Plugins.categoryWidget_QTreeWidget {name='categoryWidget' type='QTreeWidget' visible='1' window=':Installed Plugins_Core::Internal::PluginDialog'}
:Installed Plugins_Core::Internal::PluginDialog {type='Core::Internal::PluginDialog' unnamed='1' visible='1' windowTitle='Installed Plugins'}
:JavaScript.QmlProfilerV8ProfileTable_QmlProfiler::Internal::QmlProfilerEventsMainView {container=':*Qt Creator.JavaScript_QDockWidget' name='QmlProfilerV8ProfileTable' type='QmlProfiler::Internal::QmlProfilerEventsMainView' visible='1'}
:Kits_Or_Compilers_QTreeView {container=':qt_tabwidget_stackedwidget_QWidget' type='QTreeView' unnamed='1' visible='1'}
:Kits_QtVersion_QComboBox {container=':qt_tabwidget_stackedwidget_QWidget' occurrence='4' type='QComboBox' unnamed='1' visible='1'}
:New.frame_QFrame {name='frame' type='QFrame' visible='1' window=':New_Core::Internal::NewDialog'}
+2 -2
View File
@@ -274,8 +274,8 @@ def invokeContextMenuItem(editorArea, command1, command2 = None):
ctxtMenu = openContextMenuOnTextCursorPosition(editorArea)
activateItem(waitForObjectItem(objectMap.realName(ctxtMenu), command1, 2000))
if command2:
activateItem(waitForObjectItem("{type='QMenu' visible='1' window=%s}"
% objectMap.realName(ctxtMenu), command2, 2000))
activateItem(waitForObjectItem("{title='%s' type='QMenu' visible='1' window=%s}"
% (command1, objectMap.realName(ctxtMenu)), command2, 2000))
# this function invokes the "Find Usages" item from context menu
# param editor an editor object
+2 -4
View File
@@ -207,10 +207,8 @@ def createNewQtQuickApplication(workingDir, projectName = None, templateFile = N
targets=QtQuickConstants.desktopTargetClasses(), qtQuickVersion=1,
fromWelcome=False):
if templateFile:
if qtQuickVersion == 2:
test.fatal('There is no wizard "Qt Quick 2 Application (from Existing QML File)"',
'This is a script error. Using Qt Quick 1 instead.')
available = __createProjectOrFileSelectType__(" Applications", "Qt Quick 1 Application (from Existing QML File)", fromWelcome)
available = __createProjectOrFileSelectType__(" Applications", "Qt Quick %d Application (from Existing QML File)"
% qtQuickVersion, fromWelcome)
else:
available = __createProjectOrFileSelectType__(" Applications", "Qt Quick %d Application (Built-in Types)"
% qtQuickVersion, fromWelcome)
+29 -12
View File
@@ -107,7 +107,7 @@ def __removeTestingDir__():
devicesXML = os.path.join(tmpSettingsDir, "QtProject", "qtcreator", "devices.xml")
lastMTime = os.path.getmtime(devicesXML)
testingDir = os.path.dirname(os.path.dirname(tmpSettingsDir))
testingDir = os.path.dirname(tmpSettingsDir)
waitForCleanShutdown()
waitFor('os.path.getmtime(devicesXML) > lastMTime', 5000)
waitFor('__removeIt__(testingDir)', 2000)
@@ -191,26 +191,44 @@ def substituteUnchosenTargetABIs(settingsDir):
os.remove(origToolchains)
test.log("Substituted unchosen ABIs inside toolchains.xml...")
def copySettingsToTmpDir():
global tmpSettingsDir
global SettingsPath
tmpSettingsDir = tempDir()
tmpSettingsDir = os.path.abspath(tmpSettingsDir + "/settings")
shutil.copytree(cwd, tmpSettingsDir)
def copySettingsToTmpDir(destination=None, omitFiles=[]):
global tmpSettingsDir, SettingsPath, origSettingsDir
if destination:
destination = os.path.abspath(destination)
if not os.path.exists(destination):
os.makedirs(destination)
elif os.path.isfile(destination):
test.warning("Provided destination for settings exists as file.",
"Creating another folder for being able to execute tests.")
destination = tempDir()
else:
destination = tempDir()
tmpSettingsDir = destination
pathLen = len(origSettingsDir) + 1
for r,d,f in os.walk(origSettingsDir):
currentPath = os.path.join(tmpSettingsDir, r[pathLen:])
for dd in d:
folder = os.path.join(currentPath, dd)
if not os.path.exists(folder):
os.makedirs(folder)
for ff in f:
if not ff in omitFiles:
shutil.copy(os.path.join(r, ff), currentPath)
if platform.system() in ('Linux', 'Darwin'):
substituteTildeWithinToolchains(tmpSettingsDir)
substituteUnchosenTargetABIs(tmpSettingsDir)
SettingsPath = ' -settingspath "%s"' % tmpSettingsDir
# current dir is directory holding qtcreator.py
origSettingsDir = os.path.abspath(os.path.join(os.getcwd(), "..", "..", "settings"))
if platform.system() in ('Windows', 'Microsoft'):
sdkPath = "C:\\QtSDK"
cwd = os.getcwd() # current dir is directory holding qtcreator.py
cwd+="\\..\\..\\settings\\windows"
origSettingsDir = os.path.join(origSettingsDir, "windows")
defaultQtVersion = "Qt 4.7.4 for Desktop - MinGW 4.4 (Qt SDK)"
else:
sdkPath = os.path.expanduser("~/QtSDK")
cwd = os.getcwd() # current dir is directory holding qtcreator.py
cwd+="/../../settings/unix"
origSettingsDir = os.path.join(origSettingsDir, "unix")
defaultQtVersion = "Desktop Qt 4.7.4 for GCC (Qt SDK)"
srcPath = os.getenv("SYSTEST_SRCPATH", sdkPath + "/src")
@@ -218,7 +236,6 @@ overrideStartApplication()
# the following only doesn't work if the test ends in an exception
if os.getenv("SYSTEST_NOSETTINGSPATH") != "1":
cwd = os.path.abspath(cwd)
copySettingsToTmpDir()
atexit.register(__removeTestingDir__)
+16 -2
View File
@@ -147,11 +147,24 @@ def waitForSignal(object, signal, timeout=30000):
beforeCount = signalObjects[realName]
waitFor("signalObjects[realName] > beforeCount", timeout)
handledSignal = {}
def prepareForSignal(object, signal):
global signalObjects
global handledSignal
overrideInstallLazySignalHandler()
realName = objectMap.realName(object)
# test.log("waitForSignal: "+realName)
if realName in handledSignal.keys():
if handledSignal[realName] != signal:
# The current implementation does not support this.
# When an object has two different handled signals, waitForSignal() will only wait
# for the first of them to be emitted.
test.warning("You are trying to handle two different signals from the same object.",
"Adding %s to object %s, which already has handled signal %s. "
"This can lead to unexpected results." % (signal, realName, handledSignal[realName]))
else:
handledSignal[realName] = signal
if not (realName in signalObjects):
signalObjects[realName] = 0
installLazySignalHandler(object, signal, "__callbackFunction__")
@@ -229,10 +242,11 @@ def selectFromFileDialog(fileName, waitForFile=False):
waitForObject("{name='QFileDialog' type='QFileDialog' visible='1'}")
pathLine = waitForObject("{name='fileNameEdit' type='QLineEdit' visible='1'}")
replaceEditorContent(pathLine, pName)
clickButton(findObject("{text='Open' type='QPushButton'}"))
clickButton(waitForObject("{text='Open' type='QPushButton'}"))
waitFor("str(pathLine.text)==''")
snooze(1)
replaceEditorContent(pathLine, fName)
clickButton(findObject("{text='Open' type='QPushButton'}"))
clickButton(waitForObject("{text='Open' type='QPushButton'}"))
if waitForFile:
fileCombo = waitForObject(":Qt Creator_FilenameQComboBox")
if not waitFor("str(fileCombo.currentText) in fileName", 5000):
+11 -7
View File
@@ -3,13 +3,18 @@ source("../../shared/suites_qtta.py")
# test bookmark functionality
def renameBookmarkFolder(view, item, newName):
openItemContextMenu(view, item, 5, 5, 0)
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1' "
"window=':Add Bookmark_BookmarkDialog'}", "Rename Folder"))
invokeContextMenuItemOnBookmarkFolder(view, item, "Rename Folder")
replaceEditorContent(waitForObject(":Add Bookmark.treeView_QExpandingLineEdit"), newName)
type(waitForObject(":Add Bookmark.treeView_QExpandingLineEdit"), "<Return>")
return
def invokeContextMenuItemOnBookmarkFolder(view, item, menuItem):
aboveWidget = "{name='line' type='QFrame' visible='1' window=':Add Bookmark_BookmarkDialog'}"
mouseClick(waitForObjectItem(view, item), 5, 5, 0, Qt.LeftButton)
openItemContextMenu(view, item, 5, 5, 0)
activateItem(waitForObject("{aboveWidget=%s type='QMenu' unnamed='1' visible='1' "
"window=':Add Bookmark_BookmarkDialog'}" % aboveWidget), menuItem)
def getQModelIndexStr(textProperty, container):
if (container.startswith(":")):
container = "'%s'" % container
@@ -84,11 +89,10 @@ def main():
# delete previously created directory
clickButton(waitForObject(":Qt Creator.Add Bookmark_QToolButton"))
clickButton(waitForObject(":Add Bookmark.ExpandBookmarksList_QToolButton"))
openItemContextMenu(waitForObject(":Add Bookmark.treeView_QTreeView"), "Sample.Folder 1", 5, 5, 0)
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1' "
"window=':Add Bookmark_BookmarkDialog'}", "Delete Folder"))
invokeContextMenuItemOnBookmarkFolder(":Add Bookmark.treeView_QTreeView", "Sample.Folder 1",
"Delete Folder")
clickButton(waitForObject("{container=':Add Bookmark.treeView_QTreeView' text='Yes' "
"type='QPushButton' unnamed='1' visible='1'}"))#:treeView.Yes_QPushButton"))
"type='QPushButton' unnamed='1' visible='1'}"))
# close bookmarks
clickButton(waitForObject(":Add Bookmark.OK_QPushButton"))
# choose bookmarks from command combobox
+1 -1
View File
@@ -7,6 +7,6 @@ HOOK_SUB_PROCESSES=false
IMPLICITAUTSTART=0
LANGUAGE=Python
OBJECTMAP=../objects.map
TEST_CASES=tst_build_new_project tst_cli_output_console tst_simple_debug
TEST_CASES=tst_build_new_project tst_cli_output_console tst_simple_analyze tst_simple_debug
VERSION=2
WRAPPERS=Qt
@@ -0,0 +1,83 @@
source("../../shared/qtcreator.py")
workingDir = None
def main():
global workingDir
startApplication("qtcreator" + SettingsPath)
targets = [QtQuickConstants.Targets.DESKTOP_474_GCC]
if platform.system() in ('Windows', 'Microsoft'):
targets.append(QtQuickConstants.Targets.DESKTOP_474_MSVC2008)
# using a temporary directory won't mess up a potentially existing
workingDir = tempDir()
checkedTargets, projectName = createNewQtQuickApplication(workingDir)
editor = waitForObject(":Qt Creator_QmlJSEditor::QmlJSTextEditorWidget")
if placeCursorToLine(editor, "MouseArea.*", True):
type(editor, '<Up>')
type(editor, '<Return>')
typeLines(editor, ['Timer {',
'interval: 2000',
'repeat: true',
'running: true',
'onTriggered: {',
'var i;',
'for (i = 1; i < 2500; ++i) {',
'var j = i * i;',
'console.log(j);'])
invokeMenuItem("File", "Save All")
availableConfigs = iterateBuildConfigs(len(checkedTargets), "Debug")
if not availableConfigs:
test.fatal("Haven't found a suitable Qt version (need Qt 4.7.4) - leaving without debugging.")
for kit, config in availableConfigs:
test.log("Selecting '%s' as build config" % config)
selectBuildConfig(len(checkedTargets), kit, config)
verifyBuildConfig(len(checkedTargets), kit, True, enableQmlDebug=True)
# explicitly build before start debugging for adding the executable as allowed program to WinFW
invokeMenuItem("Build", "Rebuild All")
waitForSignal("{type='ProjectExplorer::BuildManager' unnamed='1'}",
"buildQueueFinished(bool)")
if not checkCompile():
test.fatal("Compile had errors... Skipping current build config")
continue
allowAppThroughWinFW(workingDir, projectName, False)
switchViewTo(ViewConstants.ANALYZE)
selectFromCombo(":Analyzer Toolbar.AnalyzerManagerToolBox_QComboBox", "QML Profiler")
clickButton(waitForObject(":Analyzer Toolbar.Start_QToolButton"))
stopButton = waitForObject(":Qt Creator.Stop_QToolButton")
elapsedLabel = waitForObject(":Analyzer Toolbar.Elapsed:_QLabel", 3000)
waitFor('"Elapsed: 5" in str(elapsedLabel.text)', 20000)
clickButton(stopButton)
if safeClickTab("JavaScript"):
model = waitForObject(":JavaScript.QmlProfilerV8ProfileTable_QmlProfiler::"
"Internal::QmlProfilerEventsMainView").model()
test.compare(model.rowCount(), 1) # Could change, see QTCREATORBUG-8994
test.compare([str(model.index(0, column).data()) for column in range(6)],
['<program>', '100.00 %', '0.000 \xc2\xb5s', '0.00 %', '0.000 \xc2\xb5s', 'Main Program'])
if safeClickTab("Events"):
model = waitForObject(":Events.QmlProfilerEventsTable_QmlProfiler::"
"Internal::QmlProfilerEventsMainView").model()
test.compare(model.rowCount(), 2) # Only two lines with Qt 4.7, more with Qt 4.8
test.compare(dumpItems(model, column=0), ['<program>', 'main.qml:14'])
test.compare(dumpItems(model, column=1), ['Binding', 'Signal'])
test.compare(dumpItems(model, column=2), ['100.00 %', '100.00 %'])
test.compare(dumpItems(model, column=4), ['1', '2'])
test.compare(dumpItems(model, column=9), ['Main Program', 'triggered(): { var i; for (i = 1; i < 2500; ++i) '
'{ var j = i * i; console.log(j); } }'])
for i in [3, 5, 6, 7]:
for item in dumpItems(model, column=i):
test.verify(item.endswith(' ms'))
test.verify(str(model.index(0, 8).data()).endswith(' ms'))
test.xverify(str(model.index(1, 8).data()).endswith(' ms')) # QTCREATORBUG-8996
deleteAppFromWinFW(workingDir, projectName, False)
invokeMenuItem("File", "Exit")
def safeClickTab(tab):
for bar in [":*Qt Creator.JavaScript_QTabBar",
":*Qt Creator.Events_QTabBar"]:
try:
clickTab(waitForObject(bar, 1000), tab)
return True
except:
pass
test.fail("Tab %s is not being shown." % tab)
return False
@@ -3,7 +3,7 @@ source("../../shared/qtcreator.py")
import re
def main():
global textChanged
global tmpSettingsDir
sourceExample = os.path.abspath(sdkPath + "/Examples/4.7/declarative/text/textselection")
qmlFile = os.path.join("qml", "textselection.qml")
if not neededFilePresent(os.path.join(sourceExample, qmlFile)):
@@ -15,7 +15,19 @@ def main():
overrideInstallLazySignalHandler()
installLazySignalHandler(":frame.templateDescription_QTextBrowser",
"textChanged()","__handleTextChanged__")
kits = getConfiguredKits()
performTest(templateDir, qmlFile, True)
enableMaddePlugin()
invokeMenuItem("File", "Exit")
waitForCleanShutdown()
copySettingsToTmpDir(tmpSettingsDir, ['QtCreator.ini'])
overrideStartApplication()
startApplication("qtcreator" + SettingsPath)
performTest(templateDir, qmlFile, False)
invokeMenuItem("File", "Exit")
def performTest(templateDir, qmlFile, isMaddeDisabled):
global textChanged
kits = getConfiguredKits(isMaddeDisabled)
test.log("Collecting potential project types...")
availableProjectTypes = []
invokeMenuItem("File", "New File or Project...")
@@ -26,13 +38,15 @@ def main():
comboBox = findObject("{name='comboBox' type='QComboBox' visible='1' "
"window=':New_Core::Internal::NewDialog'}")
targets = zip(*kits.values())[0]
if (QtQuickConstants.getStringForTarget(QtQuickConstants.Targets.MAEMO5) not in targets
and QtQuickConstants.getStringForTarget(QtQuickConstants.Targets.HARMATTAN) not in targets):
test.compare(comboBox.currentText, "Desktop Templates")
test.verify(not comboBox.enabled, "Verifying whether combobox is disabled.")
else:
maddeTargets = QtQuickConstants.getTargetsAsStrings([QtQuickConstants.Targets.MAEMO5,
QtQuickConstants.Targets.HARMATTAN])
maddeInTargets = len(set(targets) & set(maddeTargets)) > 0
test.compare(comboBox.enabled, maddeInTargets, "Verifying whether combox is enabled.")
test.compare(maddeInTargets, not isMaddeDisabled, "Verifying if kits are configured.")
if maddeInTargets:
test.compare(comboBox.currentText, "All Templates")
test.verify(comboBox.enabled, "Verifying whether combobox is enabled.")
else:
test.compare(comboBox.currentText, "Desktop Templates")
for category in [item.replace(".", "\\.") for item in dumpItems(catModel, projects)]:
# skip non-configurable
if "Import" in category:
@@ -106,7 +120,17 @@ def main():
test.fail("Found unexpected additional kit(s) %s on 'Kit Selection' page."
% str(availableCheckboxes))
clickButton(waitForObject("{text='Cancel' type='QPushButton' unnamed='1' visible='1'}"))
invokeMenuItem("File", "Exit")
def enableMaddePlugin():
invokeMenuItem("Help", "About Plugins...")
pluginsTW = waitForObject(":Installed Plugins.categoryWidget_QTreeWidget")
devSupport = ("{container=':Installed Plugins.categoryWidget_QTreeWidget' "
"column='0' text='Device Support' type='QModelIndex'}")
# children position + 1 because children will be counted beginning with 0
maddePos = dumpItems(pluginsTW.model(), waitForObject(devSupport)).index('Madde') + 1
mouseClick(waitForObject("{column='1' container=%s text='' type='QModelIndex' "
"occurrence='%d'}" % (devSupport, maddePos)), 5, 5, 0, Qt.LeftButton)
clickButton(":Installed Plugins.Close_QPushButton")
def __handleTextChanged__(object):
global textChanged
@@ -20,10 +20,7 @@ def main():
overrideStartApplication()
startApplication("qtcreator" + SettingsPath)
try:
if languageName == "Chinese (China)" and platform.system() == 'Darwin':
invokeMenuItem("文件(F)", "退出")
else:
invokeMenuItem(testData.field(lang, "File"), testData.field(lang, "Exit"))
invokeMenuItem(testData.field(lang, "File"), testData.field(lang, "Exit"))
test.passes("Creator was running in %s translation." % languageName)
except:
test.fail("Creator seems to be missing %s translation" % languageName)