Merge remote branch 'origin/2.1'

Conflicts:
	share/qtcreator/templates/mobileapp/app.pro
	share/qtcreator/templates/qmlapp/app.pro
	src/plugins/cpptools/cpptools.pro
This commit is contained in:
dt
2010-10-04 16:07:46 +02:00
386 changed files with 12674 additions and 4573 deletions

View File

@@ -14,6 +14,9 @@ General
Editing Editing
C++ Support C++ Support
* Added semantic highlighting of types, virtual methods, locals, statics and
member variables (only enabled when running against Qt 4.7.1 and up, for
performance reasons)
* Add new %FILENAME%, %CLASS% placeholders to license template * Add new %FILENAME%, %CLASS% placeholders to license template
Project Support Project Support

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -1818,21 +1818,7 @@
You use wizards to create and import several types of projects and files, such You use wizards to create and import several types of projects and files, such
as Qt GUI or console applications and Qt Quick applications. as Qt GUI or console applications and Qt Quick applications.
You can also use You can use wizards also to add individual files to your projects.
wizards to add individual files to your projects. For example, you can create
the following types of files:
\list
\o Qt resource files, which allow you to store binary files in the
application executable
\o \QD forms and Qt QML files, which specify parts of application user
interfaces
\o C++ class, source, or header files
\endlist
The wizards prompt you to enter the settings needed The wizards prompt you to enter the settings needed
for that particular type of project and create the necessary files for you. for that particular type of project and create the necessary files for you.
@@ -1863,6 +1849,14 @@
path. path.
\image qtcreator-intro-and-location.png \image qtcreator-intro-and-location.png
\o Select the Qt versions to use as build targets for your project, and click
\gui{Next}.
\image qtcreator-new-project-qt-versions.png "Target setting dialog"
\note If you have only one Qt version installed, this dialog is skipped.
\o Specify the name of the class you want to create and using the \o Specify the name of the class you want to create and using the
drop-down menu select its base class type. drop-down menu select its base class type.
@@ -1878,10 +1872,43 @@
\image qtcreator-new-project-summary.png \image qtcreator-new-project-summary.png
\endlist \endlist
\section1 Adding Files to Projects
You can create the following types of files:
\list
\o Qt resource files, which allow you to store binary files in the
application executable
\o \QD forms and Qt QML files, which specify parts of application user
interfaces
\o C++ class, source, or header files
\o Text files
\endlist
\section2 Creating C++ Classes
The \gui {C++ Class Wizard} allows you to create a C++ header and source file for
a new class that you can add to a C++ project. Specify the class name, base
class, and header and source files for the class.
The wizard supports namespaces. To use a namespace, enter a qualified
class name in the \gui {Class name} field. For example:
MyNamespace::MySubNamespace::MyClass.
\image qtcreator-cpp-class-wizard.png "Enter Class Name dialog"
The names of the header and source file are based on the class name. To change the
default suffix of a file, click \gui Configure.
You can create your own project and class wizards. For more information, You can create your own project and class wizards. For more information,
see \l{Adding New Custom Wizards}. see \l{Adding New Custom Wizards}.
\section1 Displaying Additional File Types in Projects Pane \section2 Displaying Additional File Types in Projects Pane
Qt Creator determines whether to display files from the project folder Qt Creator determines whether to display files from the project folder
in the \gui Projects pane depending on the file type (.pro, .pri, .cpp, in the \gui Projects pane depending on the file type (.pro, .pri, .cpp,
@@ -1900,6 +1927,35 @@
This also makes the files available in the \gui Locator. This also makes the files available in the \gui Locator.
\section1 Adding Subprojects to Projects
When you create a new project, you can add it to another project as a subproject
in the \gui{Project Management} dialog. However, you first have to edit the
.pro file of the parent project to specify that qmake uses the \c subdirs template
to build the project.
The \c subdirs template creates a Makefile for building subprojects. They can be
located either in subdirectories of the project directory or in any other directory.
The location of the targets is specified using the SUBDIRS variable. If the project file
has the same name as the directory, you can just specify the directory name. If the project
name and directory name are different, you must specify the project file name (.pro).
For more information on the SUBDIRS variable, see the
\l{http://doc.qt.nokia.com/4.7/qmake-variable-reference.html#subdirs}{qmake Variable Reference}.
For example, the following code specifies that plugin_coreplugin/plugin_coreplugin.pro
and mylogin.pro belong to the project:
\code
TEMPLATE = subdirs
SUBDIRS = plugin_coreplugin \
../another/plugin/myplugin.pro
\endcode
To specify dependencies, use the \gui{Add Library} wizard. For more information,
see \l{Adding Libraries to qmake Projects}.
*/ */
@@ -2966,7 +3022,7 @@
\note Shadow building is not supported by the Symbian build system. \note Shadow building is not supported by the Symbian build system.
Also, shadow building on Windows is not supported for Maemo. Also, shadow building on Windows is not supported for Maemo.
If you only build for one target platform, you can deselect If you only build for one target platform, you can deselect
the \gui{Shadow Build} checkbox. the \gui{Shadow build} checkbox.
\endlist \endlist
\endlist \endlist
@@ -2979,6 +3035,23 @@
\image qtcreator-build-steps.png "Build steps" \image qtcreator-build-steps.png "Build steps"
\section2 Adding Custom Build Steps
To add custom steps to the build settings, select \gui {Add Build Step >
Custom Process Step}.
By default, custom steps are disabled. To activate a custom step, select
the \gui{Enable custom process step} check-box.
\image qtcreator-build-steps-custom.png "Custom Process Step"
You can use any environment variables as values in the fields. For a list
of variable names, click \gui {Build Environment > Details}. You can specify
variables as ${VARNAME} or %VARNAME%. For example, ${BUILDDIR} or %BUILDDIR%.
\note Qt Creator sets SOURCEDIR and BUILDDIR as part of the build environment.
For more information, see \l{Build Environment}.
\section1 Clean Steps \section1 Clean Steps
You can use the cleaning process to remove intermediate files. This process You can use the cleaning process to remove intermediate files. This process
@@ -2990,10 +3063,10 @@
You can define the cleaning steps for your builds in the \gui{Clean Steps}: You can define the cleaning steps for your builds in the \gui{Clean Steps}:
\list \list
\o To add a clean step using make or a custom process, click \o To add a clean step using make or a custom process, click
\gui{Add clean step} and select the type of step you want to add. \gui{Add Clean Step} and select the type of step you want to add.
By default, custom steps are disabled. Activate custom steps by By default, custom steps are disabled. To activate a custom step,
checking the \gui{Enable custom process step} check-box. select the \gui{Enable custom process step} check-box.
\o To remove a clean step, click \gui{Remove Item}. \o To remove a clean step, click \gui{Remove Item}.
\o To change the order of steps, click \o To change the order of steps, click
\inlineimage qtcreator-movestep.png \inlineimage qtcreator-movestep.png
@@ -3010,6 +3083,8 @@
variables or add, reset and unset new variables based on your project variables or add, reset and unset new variables based on your project
requirements. requirements.
\image qtcreator-build-environment.png "Build Environment"
*/ */
@@ -4610,17 +4685,21 @@
\title Managing Sessions \title Managing Sessions
When you exit Qt Creator, a snapshot of your current workspace is stored When you exit Qt Creator, a snapshot of your current workspace is stored
as a session. as a \e session. A session is an arbitrary collection of:
A session is a collection of:
\list \list
\o Open projects with their dependencies \o Open projects with their dependencies (including SUBDIRS projects)
\o Open editors \o Open editors
\o Breakpoints and watches \o Breakpoints and watches
\o Bookmarks \o Bookmarks
\endlist \endlist
If you work on a project and need to switch to another project for a A session is personal, that is, not meant to be shared. It is not
supposed to reflect the project structure. It contains personal data, such as
bookmarks and breakpoints that are usually not of interest to other developers
working on the same projects.
For example, if you work on a project and need to switch to another project for a
while, you can save your workspace as a session. This makes it easier while, you can save your workspace as a session. This makes it easier
to return to working on the first project later. to return to working on the first project later.

View File

@@ -31,6 +31,26 @@ defineReplace(qtLibraryName) {
return($$RET) return($$RET)
} }
defineTest(minQtVersion) {
maj = $$1
min = $$2
patch = $$3
isEqual(QT_MAJOR_VERSION, $$maj) {
isEqual(QT_MINOR_VERSION, $$min) {
isEqual(QT_PATCH_VERSION, $$patch) {
return(true)
}
greaterThan(QT_PATCH_VERSION, $$patch) {
return(true)
}
}
greaterThan(QT_MINOR_VERSION, $$min) {
return(true)
}
}
return(false)
}
# For use in custom compilers which just copy files # For use in custom compilers which just copy files
win32:i_flag = i win32:i_flag = i
defineReplace(stripSrcDir) { defineReplace(stripSrcDir) {

View File

@@ -693,7 +693,8 @@ def makeValue(type, init):
type = stripClassTag(type) type = stripClassTag(type)
if type.find(":") >= 0: if type.find(":") >= 0:
type = "'" + type + "'" type = "'" + type + "'"
gdb.execute("set $d = (%s*)malloc(sizeof(%s))" % (type, type)) # Avoid malloc symbol clash with QVector
gdb.execute("set $d = (%s*)calloc(sizeof(%s), 1)" % (type, type))
gdb.execute("set *$d = {%s}" % init) gdb.execute("set *$d = {%s}" % init)
value = parseAndEvaluate("$d").dereference() value = parseAndEvaluate("$d").dereference()
#warn(" TYPE: %s" % value.type) #warn(" TYPE: %s" % value.type)

View File

@@ -723,7 +723,8 @@ def qdump__QObject(d, item):
if d.isExpandedIName(item.iname + ".properties"): if d.isExpandedIName(item.iname + ".properties"):
# FIXME: Make this global. Don't leak. # FIXME: Make this global. Don't leak.
variant = "'%sQVariant'" % d.ns variant = "'%sQVariant'" % d.ns
gdb.execute("set $d = (%s*)malloc(sizeof(%s))" % (variant, variant)) # Avoid malloc symbol clash with QVector
gdb.execute("set $d = (%s*)calloc(sizeof(%s), 1)" % (variant, variant))
gdb.execute("set $d.d.is_shared = 0") gdb.execute("set $d.d.is_shared = 0")
with Children(d, [propertyCount, 500]): with Children(d, [propertyCount, 500]):
@@ -769,7 +770,8 @@ def qdump__QObject(d, item):
# % (d.ns, item.value.address, propertyName) # % (d.ns, item.value.address, propertyName)
#exp = '"((\'%sQObject\'*)%s)"' % (d.ns, item.value.address,) #exp = '"((\'%sQObject\'*)%s)"' % (d.ns, item.value.address,)
#warn("EXPRESSION: %s" % exp) #warn("EXPRESSION: %s" % exp)
value = call(item.value, 'property("%s")' % propertyName) value = call(item.value, 'property(%s)'
% cleanAddress(metaStringData + metaData[offset]))
value1 = value["d"] value1 = value["d"]
#warn(" CODE: %s" % value1["type"]) #warn(" CODE: %s" % value1["type"])
# Type 1 and 2 are bool and int. Try to save a few cycles in this case: # Type 1 and 2 are bool and int. Try to save a few cycles in this case:

View File

@@ -1,2 +0,0 @@
This is Creator's default directory for syntax highlight definitions.
You can download them through the Generic Highlighter options dialog.

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module> <module>
<type name="QmlProject.Project"> <type name="QmlProject.Project">
<exports>
<export module="QmlProject" version="1.0" type="Project"/>
</exports>
<property name="sourceDirectory" type="string"/> <property name="sourceDirectory" type="string"/>
<property name="importPaths" type="string" isList="true"/> <property name="importPaths" type="string" isList="true"/>
<property name="content" type="QmlProjectItem" isList="true"/> <property name="content" type="QmlProjectItem" isList="true"/>
@@ -14,14 +17,26 @@
<property name="files" type="string" isList="true"/> <property name="files" type="string" isList="true"/>
</type> </type>
<type name="QmlProject.QmlFiles" extends="FileFilterBaseItem"> <type name="QmlProject.QmlFiles" extends="FileFilterBaseItem">
<exports>
<export module="QmlProject" version="1.0" type="QmlFiles"/>
</exports>
</type> </type>
<type name="QmlProject.JavaScriptFiles" extends="FileFilterBaseItem"> <type name="QmlProject.JavaScriptFiles" extends="FileFilterBaseItem">
<exports>
<export module="QmlProject" version="1.0" type="JavaScriptFiles"/>
</exports>
<property name="filter" type="string"/> <property name="filter" type="string"/>
</type> </type>
<type name="QmlProject.ImageFiles" extends="FileFilterBaseItem"> <type name="QmlProject.ImageFiles" extends="FileFilterBaseItem">
<exports>
<export module="QmlProject" version="1.0" type="ImageFiles"/>
</exports>
<property name="filter" type="string"/> <property name="filter" type="string"/>
</type> </type>
<type name="QmlProject.CssFiles" extends="FileFilterBaseItem"> <type name="QmlProject.CssFiles" extends="FileFilterBaseItem">
<exports>
<export module="QmlProject" version="1.0" type="CssFiles"/>
</exports>
<property name="filter" type="string"/> <property name="filter" type="string"/>
</type> </type>
</module> </module>

View File

@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module> <module>
<type name="QDeclarativeViewer.Screen"> <type name="QDeclarativeViewer.Screen">
<exports>
<export module="QDeclarativeViewer" version="1.0" type="Screen"/>
</exports>
<enum name="Orientation"> <enum name="Orientation">
<enumerator name="UnknownOrientation" value="0"/> <enumerator name="UnknownOrientation" value="0"/>
<enumerator name="Portrait" value="1"/> <enumerator name="Portrait" value="1"/>

View File

@@ -15,15 +15,15 @@
#include <QtDeclarative/private/qdeclarativeopenmetaobject_p.h> #include <QtDeclarative/private/qdeclarativeopenmetaobject_p.h>
#include <QtDeclarative/QDeclarativeView> #include <QtDeclarative/QDeclarativeView>
static QHash<QByteArray, const QDeclarativeType *> qmlTypeByCppName; static QHash<QByteArray, QList<const QDeclarativeType *> > qmlTypesByCppName;
static QHash<QByteArray, QByteArray> cppToQml; static QHash<QByteArray, QByteArray> cppToId;
QByteArray convertToQmlType(const QByteArray &cppName) QByteArray convertToId(const QByteArray &cppName)
{ {
QByteArray qmlName = cppToQml.value(cppName, cppName); QByteArray idName = cppToId.value(cppName, cppName);
qmlName.replace("::", "."); idName.replace("::", ".");
qmlName.replace("/", "."); idName.replace("/", ".");
return qmlName; return idName;
} }
void erasure(QByteArray *typeName, bool *isList, bool *isPointer) void erasure(QByteArray *typeName, bool *isList, bool *isPointer)
@@ -41,7 +41,7 @@ void erasure(QByteArray *typeName, bool *isList, bool *isPointer)
erasure(typeName, isList, isPointer); erasure(typeName, isList, isPointer);
} }
*typeName = convertToQmlType(*typeName); *typeName = convertToId(*typeName);
} }
void processMetaObject(const QMetaObject *meta, QSet<const QMetaObject *> *metas) void processMetaObject(const QMetaObject *meta, QSet<const QMetaObject *> *metas)
@@ -132,7 +132,7 @@ void dump(const QMetaMethod &meth, QXmlStreamWriter *xml)
attributes.append(QXmlStreamAttribute("name", name)); attributes.append(QXmlStreamAttribute("name", name));
const QString typeName = convertToQmlType(meth.typeName()); const QString typeName = convertToId(meth.typeName());
if (! typeName.isEmpty()) if (! typeName.isEmpty())
attributes.append(QXmlStreamAttribute("type", typeName)); attributes.append(QXmlStreamAttribute("type", typeName));
@@ -187,16 +187,12 @@ public:
void dump(const QMetaObject *meta, QXmlStreamWriter *xml) void dump(const QMetaObject *meta, QXmlStreamWriter *xml)
{ {
QByteArray qmlTypeName = convertToQmlType(meta->className()); QByteArray id = convertToId(meta->className());
xml->writeStartElement("type"); xml->writeStartElement("type");
QXmlStreamAttributes attributes; QXmlStreamAttributes attributes;
attributes.append(QXmlStreamAttribute("name", qmlTypeName)); attributes.append(QXmlStreamAttribute("name", id));
if (const QDeclarativeType *qmlTy = qmlTypeByCppName.value(meta->className())) {
attributes.append(QXmlStreamAttribute("version", QString("%1.%2").arg(qmlTy->majorVersion()).arg(qmlTy->minorVersion())));
}
for (int index = meta->classInfoCount() - 1 ; index >= 0 ; --index) { for (int index = meta->classInfoCount() - 1 ; index >= 0 ; --index) {
QMetaClassInfo classInfo = meta->classInfo(index); QMetaClassInfo classInfo = meta->classInfo(index);
@@ -206,16 +202,31 @@ void dump(const QMetaObject *meta, QXmlStreamWriter *xml)
} }
} }
QString version;
if (meta->superClass()) if (meta->superClass())
attributes.append(QXmlStreamAttribute("extends", convertToQmlType(meta->superClass()->className()))); attributes.append(QXmlStreamAttribute("extends", convertToId(meta->superClass()->className())));
if (! version.isEmpty())
attributes.append(QXmlStreamAttribute("version", version));
xml->writeAttributes(attributes); xml->writeAttributes(attributes);
QList<const QDeclarativeType *> qmlTypes = qmlTypesByCppName.value(id);
if (!qmlTypes.isEmpty()) {
xml->writeStartElement("exports");
foreach (const QDeclarativeType *qmlTy, qmlTypes) {
QXmlStreamAttributes moduleAttributes;
const QString qmlTyName = qmlTy->qmlTypeName();
int slashIdx = qmlTyName.lastIndexOf(QLatin1Char('/'));
if (slashIdx == -1)
continue;
const QString moduleName = qmlTyName.left(slashIdx);
const QString typeName = qmlTyName.mid(slashIdx + 1);
moduleAttributes.append(QXmlStreamAttribute("module", moduleName));
moduleAttributes.append(QXmlStreamAttribute("version", QString("%1.%2").arg(qmlTy->majorVersion()).arg(qmlTy->minorVersion())));
moduleAttributes.append(QXmlStreamAttribute("type", typeName));
xml->writeEmptyElement("export");
xml->writeAttributes(moduleAttributes);
}
xml->writeEndElement();
}
for (int index = meta->enumeratorOffset(); index < meta->enumeratorCount(); ++index) for (int index = meta->enumeratorOffset(); index < meta->enumeratorCount(); ++index)
dump(meta->enumerator(index), xml); dump(meta->enumerator(index), xml);
@@ -234,7 +245,7 @@ void writeEasingCurve(QXmlStreamWriter *xml)
{ {
QXmlStreamAttributes attributes; QXmlStreamAttributes attributes;
attributes.append(QXmlStreamAttribute("name", "QEasingCurve")); attributes.append(QXmlStreamAttribute("name", "QEasingCurve"));
attributes.append(QXmlStreamAttribute("extends", "Qt.Easing")); attributes.append(QXmlStreamAttribute("extends", "QDeclarativeEasingValueType"));
xml->writeAttributes(attributes); xml->writeAttributes(attributes);
} }
@@ -262,8 +273,22 @@ int main(int argc, char *argv[])
if (!pluginImportPath.isEmpty()) if (!pluginImportPath.isEmpty())
engine->addImportPath(pluginImportPath); engine->addImportPath(pluginImportPath);
bool hasQtQuickModule = false;
{
QByteArray code = "import QtQuick 1.0; Item {}";
QDeclarativeComponent c(engine);
c.setData(code, QUrl("xxx"));
c.create();
if (c.errors().isEmpty()) {
hasQtQuickModule = true;
}
}
QByteArray importCode; QByteArray importCode;
importCode += "import Qt 4.7;\n"; importCode += "import Qt 4.7;\n";
if (hasQtQuickModule) {
importCode += "import QtQuick 1.0;\n";
}
if (pluginImportName.isEmpty()) { if (pluginImportName.isEmpty()) {
importCode += "import Qt.labs.particles 4.7;\n"; importCode += "import Qt.labs.particles 4.7;\n";
importCode += "import Qt.labs.gestures 4.7;\n"; importCode += "import Qt.labs.gestures 4.7;\n";
@@ -284,25 +309,25 @@ int main(int argc, char *argv[])
qDebug() << c.errorString(); qDebug() << c.errorString();
} }
cppToQml.insert("QString", "string"); cppToId.insert("QString", "string");
cppToQml.insert("QDeclarativeEasingValueType::Type", "Type"); cppToId.insert("QDeclarativeEasingValueType::Type", "Type");
QSet<const QMetaObject *> metas; QSet<const QMetaObject *> metas;
metas.insert(FriendlyQObject::qtMeta()); metas.insert(FriendlyQObject::qtMeta());
QMultiHash<QByteArray, QByteArray> extensions; QHash<QByteArray, QSet<QByteArray> > extensions;
foreach (const QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) { foreach (const QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) {
qmlTypeByCppName.insert(ty->metaObject()->className(), ty); qmlTypesByCppName[ty->metaObject()->className()].append(ty);
if (ty->isExtendedType()) { if (ty->isExtendedType()) {
extensions.insert(ty->typeName(), ty->metaObject()->className()); extensions[ty->typeName()].insert(ty->metaObject()->className());
} else { } else {
cppToQml.insert(ty->metaObject()->className(), ty->qmlTypeName()); cppToId.insert(ty->metaObject()->className(), ty->metaObject()->className());
} }
processDeclarativeType(ty, &metas); processDeclarativeType(ty, &metas);
} }
// Adjust qml names of extended objects. // Adjust ids of extended objects.
// The chain ends up being: // The chain ends up being:
// __extended__.originalname - the base object // __extended__.originalname - the base object
// __extension_0_.originalname - first extension // __extension_0_.originalname - first extension
@@ -310,14 +335,19 @@ int main(int argc, char *argv[])
// __extension_n-2_.originalname - second to last extension // __extension_n-2_.originalname - second to last extension
// originalname - last extension // originalname - last extension
foreach (const QByteArray &extendedCpp, extensions.keys()) { foreach (const QByteArray &extendedCpp, extensions.keys()) {
const QByteArray extendedQml = cppToQml.value(extendedCpp); const QByteArray extendedId = cppToId.value(extendedCpp);
cppToQml.insert(extendedCpp, "__extended__." + extendedQml); cppToId.insert(extendedCpp, "__extended__." + extendedId);
QList<QByteArray> extensionCppNames = extensions.values(extendedCpp); QSet<QByteArray> extensionCppNames = extensions.value(extendedCpp);
for (int i = 0; i < extensionCppNames.size() - 1; ++i) { int c = 0;
QByteArray adjustedName = QString("__extension__%1.%2").arg(QString::number(i), QString(extendedQml)).toAscii(); foreach (const QByteArray &extensionCppName, extensionCppNames) {
cppToQml.insert(extensionCppNames.value(i), adjustedName); if (c != extensionCppNames.size() - 1) {
QByteArray adjustedName = QString("__extension__%1.%2").arg(QString::number(c), QString(extendedId)).toAscii();
cppToId.insert(extensionCppName, adjustedName);
} else {
cppToId.insert(extensionCppName, extendedId);
}
++c;
} }
cppToQml.insert(extensionCppNames.last(), extendedQml);
} }
foreach (const QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) { foreach (const QDeclarativeType *ty, QDeclarativeMetaType::qmlTypes()) {
@@ -350,13 +380,13 @@ int main(int argc, char *argv[])
QMap<QString, const QMetaObject *> nameToMeta; QMap<QString, const QMetaObject *> nameToMeta;
foreach (const QMetaObject *meta, metas) { foreach (const QMetaObject *meta, metas) {
nameToMeta.insert(convertToQmlType(meta->className()), meta); nameToMeta.insert(convertToId(meta->className()), meta);
} }
foreach (const QMetaObject *meta, nameToMeta) { foreach (const QMetaObject *meta, nameToMeta) {
dump(meta, &xml); dump(meta, &xml);
} }
// define QEasingCurve as an extension of Qt.Easing // define QEasingCurve as an extension of QDeclarativeEasingValueType
writeEasingCurve(&xml); writeEasingCurve(&xml);
xml.writeEndElement(); xml.writeEndElement();

View File

@@ -29,7 +29,7 @@
#include "abstractformeditortool.h" #include "abstractformeditortool.h"
#include "qdeclarativeviewobserver.h" #include "qdeclarativeviewobserver.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include <QDeclarativeEngine> #include <QDeclarativeEngine>

View File

@@ -28,7 +28,7 @@
**************************************************************************/ **************************************************************************/
#include "rubberbandselectionmanipulator.h" #include "rubberbandselectionmanipulator.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include <QDebug> #include <QDebug>

View File

@@ -28,7 +28,7 @@
**************************************************************************/ **************************************************************************/
#include "selectionindicator.h" #include "selectionindicator.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include "qmlobserverconstants.h" #include "qmlobserverconstants.h"
#include <QPen> #include <QPen>
@@ -97,11 +97,11 @@ void SelectionIndicator::setItems(const QList<QWeakPointer<QGraphicsObject> > &i
// set selections to also all children if they are not editor items // set selections to also all children if they are not editor items
foreach (QWeakPointer<QGraphicsObject> obj, itemList) { foreach (QWeakPointer<QGraphicsObject> object, itemList) {
if (obj.isNull()) if (object.isNull())
continue; continue;
QGraphicsItem *item = obj.data(); QGraphicsItem *item = object.data();
QGraphicsPolygonItem *newSelectionIndicatorGraphicsItem = new QGraphicsPolygonItem(m_layerItem.data()); QGraphicsPolygonItem *newSelectionIndicatorGraphicsItem = new QGraphicsPolygonItem(m_layerItem.data());
if (!m_indicatorShapeHash.contains(item)) { if (!m_indicatorShapeHash.contains(item)) {

View File

@@ -31,7 +31,7 @@
#include "layeritem.h" #include "layeritem.h"
//#include "resizehandleitem.h" //#include "resizehandleitem.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include <QDeclarativeEngine> #include <QDeclarativeEngine>

View File

@@ -29,7 +29,7 @@
#include "singleselectionmanipulator.h" #include "singleselectionmanipulator.h"
#include "qdeclarativeviewobserver.h" #include "qdeclarativeviewobserver.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include <QtDebug> #include <QtDebug>
namespace QmlJSDebugger { namespace QmlJSDebugger {

View File

@@ -1,5 +1,5 @@
#include "subcomponenteditortool.h" #include "subcomponenteditortool.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include "subcomponentmasklayeritem.h" #include "subcomponentmasklayeritem.h"
#include "layeritem.h" #include "layeritem.h"

View File

@@ -1,5 +1,5 @@
#include "zoomtool.h" #include "zoomtool.h"
#include "qdeclarativeviewobserver_p.h" #include "../qdeclarativeviewobserver_p.h"
#include <QMouseEvent> #include <QMouseEvent>
#include <QWheelEvent> #include <QWheelEvent>

View File

@@ -57,9 +57,10 @@
#include <QtScript/QScriptValue> #include <QtScript/QScriptValue>
#include <QtCore/QEventLoop> #include <QtCore/QEventLoop>
#include <QtCore/QSet> #include <QtCore/QSet>
#include <private/qdeclarativedebugservice_p.h>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include "qt_private/qdeclarativedebugservice_p.h"
#include "qmljsdebugger_global.h" #include "qmljsdebugger_global.h"
QT_FORWARD_DECLARE_CLASS(QScriptContext); QT_FORWARD_DECLARE_CLASS(QScriptContext);
@@ -103,7 +104,7 @@ public:
const QVariant &argument = QVariant()); const QVariant &argument = QVariant());
void messageReceived(const QByteArray &); void messageReceived(const QByteArray &);
void enabledChanged(bool); void statusChanged(Status status);
public slots: public slots:
// void pauses(); // void pauses();

View File

@@ -42,7 +42,7 @@
#ifndef QDECLARATIVEDESIGNDEBUGSERVER_H #ifndef QDECLARATIVEDESIGNDEBUGSERVER_H
#define QDECLARATIVEDESIGNDEBUGSERVER_H #define QDECLARATIVEDESIGNDEBUGSERVER_H
#include <private/qdeclarativedebugservice_p.h> #include "qt_private/qdeclarativedebugservice_p.h"
#include "qmlobserverconstants.h" #include "qmlobserverconstants.h"
#include "qmljsdebugger_global.h" #include "qmljsdebugger_global.h"
@@ -70,6 +70,8 @@ public:
void reloaded(); void reloaded();
QString idStringForObject(QObject *obj) const; QString idStringForObject(QObject *obj) const;
void sendMessage(const QByteArray &message);
public Q_SLOTS: public Q_SLOTS:
void selectedColorChanged(const QColor &color); void selectedColorChanged(const QColor &color);
void contextPathUpdated(const QStringList &contextPath); void contextPathUpdated(const QStringList &contextPath);
@@ -98,7 +100,7 @@ Q_SIGNALS:
void clearComponentCacheRequested(); void clearComponentCacheRequested();
protected: protected:
virtual void enabledChanged(bool enabled); virtual void statusChanged(Status status);
virtual void messageReceived(const QByteArray &); virtual void messageReceived(const QByteArray &);
private: private:

View File

@@ -0,0 +1,67 @@
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QDECLARATIVEDEBUGHELPER_P_H
#define QDECLARATIVEDEBUGHELPER_P_H
#include <QtCore/qglobal.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
class QScriptEngine;
class QDeclarativeEngine;
// Helper methods to access private API through a stable interface
// This is used in the qmljsdebugger library of QtCreator.
class Q_DECLARATIVE_EXPORT QDeclarativeDebugHelper
{
public:
static QScriptEngine *getScriptEngine(QDeclarativeEngine *engine);
static void setAnimationSlowDownFactor(qreal factor);
};
QT_END_NAMESPACE
QT_END_HEADER
#endif // QDECLARATIVEDEBUGHELPER_P_H

View File

@@ -0,0 +1,92 @@
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**
**
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QDECLARATIVEDEBUGSERVICE_H
#define QDECLARATIVEDEBUGSERVICE_H
#include <QtCore/qobject.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeDebugServicePrivate;
class Q_DECLARATIVE_EXPORT QDeclarativeDebugService : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeDebugService)
Q_DISABLE_COPY(QDeclarativeDebugService)
public:
explicit QDeclarativeDebugService(const QString &, QObject *parent = 0);
~QDeclarativeDebugService();
QString name() const;
enum Status { NotConnected, Unavailable, Enabled };
Status status() const;
void sendMessage(const QByteArray &);
static int idForObject(QObject *);
static QObject *objectForId(int);
static QString objectToString(QObject *obj);
static bool isDebuggingEnabled();
static bool hasDebuggingClient();
protected:
virtual void statusChanged(Status);
virtual void messageReceived(const QByteArray &);
private:
friend class QDeclarativeDebugServer;
};
QT_END_NAMESPACE
QT_END_HEADER
#endif // QDECLARATIVEDEBUGSERVICE_H

View File

@@ -40,6 +40,7 @@
****************************************************************************/ ****************************************************************************/
#include "jsdebuggeragent.h" #include "jsdebuggeragent.h"
#include "qt_private/qdeclarativedebughelper_p.h"
#include <QtCore/qcoreapplication.h> #include <QtCore/qcoreapplication.h>
#include <QtCore/qset.h> #include <QtCore/qset.h>
@@ -49,7 +50,6 @@
#include <QtCore/QUrl> #include <QtCore/QUrl>
#include <QtCore/QDateTime> #include <QtCore/QDateTime>
#include <QtScript/qscriptvalueiterator.h> #include <QtScript/qscriptvalueiterator.h>
#include <private/qdeclarativeengine_p.h>
namespace QmlJSDebugger { namespace QmlJSDebugger {
@@ -193,7 +193,7 @@ JSDebuggerAgent::JSDebuggerAgent(QScriptEngine *engine)
JSDebuggerAgent::JSDebuggerAgent(QDeclarativeEngine *engine) JSDebuggerAgent::JSDebuggerAgent(QDeclarativeEngine *engine)
: QDeclarativeDebugService("JSDebugger") : QDeclarativeDebugService("JSDebugger")
, QScriptEngineAgent(QDeclarativeEnginePrivate::getScriptEngine(engine)) , QScriptEngineAgent(QDeclarativeDebugHelper::getScriptEngine(engine))
, state(NoState) , state(NoState)
{} {}
@@ -511,9 +511,9 @@ void JSDebuggerAgent::continueExec()
loop.quit(); loop.quit();
} }
void JSDebuggerAgent::enabledChanged(bool on) void JSDebuggerAgent::statusChanged(Status status)
{ {
engine()->setAgent(on ? this : 0); engine()->setAgent((status == QDeclarativeDebugService::Enabled) ? this : 0);
} }
} // namespace QmlJSDebugger } // namespace QmlJSDebugger

View File

@@ -1,17 +0,0 @@
# Try to find location of Qt private headers (see README)
isEmpty(QT_PRIVATE_HEADERS) {
QT_PRIVATE_HEADERS = $$[QT_INSTALL_HEADERS]
}
INCLUDEPATH += \
$${QT_PRIVATE_HEADERS} \
$${QT_PRIVATE_HEADERS}/QtCore \
$${QT_PRIVATE_HEADERS}/QtGui \
$${QT_PRIVATE_HEADERS}/QtScript \
$${QT_PRIVATE_HEADERS}/QtDeclarative
DEPENDPATH += \
$${QT_PRIVATE_HEADERS} \
$${QT_PRIVATE_HEADERS}/QtCore \
$${QT_PRIVATE_HEADERS}/QtGui \
$${QT_PRIVATE_HEADERS}/QtScript \
$${QT_PRIVATE_HEADERS}/QtDeclarative

View File

@@ -60,9 +60,9 @@ QDeclarativeObserverService *QDeclarativeObserverService::instance()
return serviceInstance(); return serviceInstance();
} }
void QDeclarativeObserverService::enabledChanged(bool enabled) void QDeclarativeObserverService::statusChanged(Status status)
{ {
emit debuggingClientChanged(enabled); emit debuggingClientChanged((status == Enabled));
} }
void QDeclarativeObserverService::messageReceived(const QByteArray &message) void QDeclarativeObserverService::messageReceived(const QByteArray &message)
@@ -236,4 +236,12 @@ QString QDeclarativeObserverService::idStringForObject(QObject *obj) const
return idString; return idString;
} }
void QDeclarativeObserverService::sendMessage(const QByteArray &message)
{
if (status() != Enabled)
return;
QDeclarativeDebugService::sendMessage(message);
}
} // namespace QmlJSDebugger } // namespace QmlJSDebugger

View File

@@ -39,6 +39,8 @@
#include "qmltoolbar.h" #include "qmltoolbar.h"
#include "jsdebuggeragent.h" #include "jsdebuggeragent.h"
#include "qt_private/qdeclarativedebughelper_p.h"
#include <QDeclarativeItem> #include <QDeclarativeItem>
#include <QDeclarativeEngine> #include <QDeclarativeEngine>
#include <QDeclarativeContext> #include <QDeclarativeContext>
@@ -47,10 +49,7 @@
#include <QMouseEvent> #include <QMouseEvent>
#include <QGraphicsObject> #include <QGraphicsObject>
#include <QApplication> #include <QApplication>
#include <QAbstractAnimation> #include <QAbstractAnimation>
#include <private/qdeclarativeengine_p.h>
#include <private/qabstractanimation_p.h>
namespace QmlJSDebugger { namespace QmlJSDebugger {
@@ -118,9 +117,6 @@ QDeclarativeViewObserver::QDeclarativeViewObserver(QDeclarativeView *view, QObje
data->createToolbar(); data->createToolbar();
data->_q_changeToSingleSelectTool(); data->_q_changeToSingleSelectTool();
// always start debug mode - that's what this design view is for.
setDebugMode(true);
} }
QDeclarativeViewObserver::~QDeclarativeViewObserver() QDeclarativeViewObserver::~QDeclarativeViewObserver()
@@ -626,11 +622,13 @@ void QDeclarativeViewObserver::continueExecution(qreal slowdownFactor)
data->slowdownFactor = slowdownFactor; data->slowdownFactor = slowdownFactor;
static const qreal animSpeedSnapDelta = 0.01f; static const qreal animSpeedSnapDelta = 0.01f;
bool useStandardSpeed = (qAbs(1.0f - data->slowdownFactor) < animSpeedSnapDelta);
QUnifiedTimer *timer = QUnifiedTimer::instance(); qreal slowDownFactor = data->slowdownFactor;
timer->setSlowdownFactor(data->slowdownFactor); if (qAbs(1.0f - slowDownFactor) < animSpeedSnapDelta) {
timer->setSlowModeEnabled(!useStandardSpeed); slowDownFactor = 1.0f;
}
QDeclarativeDebugHelper::setAnimationSlowDownFactor(slowDownFactor);
data->executionPaused = false; data->executionPaused = false;
emit executionStarted(data->slowdownFactor); emit executionStarted(data->slowdownFactor);
@@ -639,9 +637,7 @@ void QDeclarativeViewObserver::continueExecution(qreal slowdownFactor)
void QDeclarativeViewObserver::pauseExecution() void QDeclarativeViewObserver::pauseExecution()
{ {
QUnifiedTimer *timer = QUnifiedTimer::instance(); QDeclarativeDebugHelper::setAnimationSlowDownFactor(0.0f);
timer->setSlowdownFactor(0);
timer->setSlowModeEnabled(true);
data->executionPaused = true; data->executionPaused = true;
emit executionPaused(); emit executionPaused();
@@ -796,7 +792,7 @@ void QDeclarativeViewObserverPrivate::createToolbar()
void QDeclarativeViewObserver::setDebugMode(bool isDebugMode) void QDeclarativeViewObserver::setDebugMode(bool isDebugMode)
{ {
if (isDebugMode && !data->jsDebuggerAgent) if (isDebugMode && !data->jsDebuggerAgent)
data->jsDebuggerAgent = new JSDebuggerAgent(QDeclarativeEnginePrivate::getScriptEngine(data->view->engine())); data->jsDebuggerAgent = new JSDebuggerAgent(data->view->engine());
} }
} //namespace QmlJSDebugger } //namespace QmlJSDebugger

View File

@@ -27,8 +27,8 @@
** **
**************************************************************************/ **************************************************************************/
#ifndef QDECLARATIVEDESIGNVIEW_P_H #ifndef QDECLARATIVEVIEWOBSERVER_P_H
#define QDECLARATIVEDESIGNVIEW_P_H #define QDECLARATIVEVIEWOBSERVER_P_H
#include <QWeakPointer> #include <QWeakPointer>
#include <QPointF> #include <QPointF>
@@ -138,4 +138,4 @@ public:
} // namespace QmlJSDebugger } // namespace QmlJSDebugger
#endif // QDECLARATIVEDESIGNVIEW_P_H #endif // QDECLARATIVEVIEWOBSERVER_P_H

View File

@@ -1,6 +1,6 @@
QT += declarative script QT += declarative script
INCLUDEPATH += $$PWD $$PWD/include editor INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD $$PWD/include editor DEPENDPATH += $$PWD $$PWD/include editor $$PWD/qt-private
contains(CONFIG, dll) { contains(CONFIG, dll) {
DEFINES += BUILD_QMLJSDEBUGGER_LIB DEFINES += BUILD_QMLJSDEBUGGER_LIB
@@ -8,28 +8,28 @@ contains(CONFIG, dll) {
DEFINES += BUILD_QMLJSDEBUGGER_STATIC_LIB DEFINES += BUILD_QMLJSDEBUGGER_STATIC_LIB
} }
include($$PWD/private_headers.pri)
## Input ## Input
HEADERS += \ HEADERS += \
$$PWD/include/jsdebuggeragent.h \ include/jsdebuggeragent.h \
$$PWD/include/qmljsdebugger_global.h include/qmljsdebugger_global.h \
include/qt_private/qdeclarativedebughelper_p.h \
include/qt_private/qdeclarativedebugservice_p.h
SOURCES += \ SOURCES += \
$$PWD/jsdebuggeragent.cpp jsdebuggeragent.cpp
contains(DEFINES, QMLOBSERVER) { contains(DEFINES, QMLOBSERVER) {
include($$PWD/editor/editor.pri) include($$PWD/editor/editor.pri)
HEADERS += \ HEADERS += \
$$PWD/include/qdeclarativeviewobserver.h \ include/qdeclarativeviewobserver.h \
$$PWD/include/qdeclarativeobserverservice.h \ include/qdeclarativeobserverservice.h \
$$PWD/include/qmlobserverconstants.h \ include/qmlobserverconstants.h \
$$PWD/qdeclarativeviewobserver_p.h qdeclarativeviewobserver_p.h
SOURCES += \ SOURCES += \
$$PWD/qdeclarativeviewobserver.cpp \ qdeclarativeviewobserver.cpp \
$$PWD/qdeclarativeobserverservice.cpp qdeclarativeobserverservice.cpp
} }
OTHER_FILES += $$PWD/qmljsdebugger.pri OTHER_FILES += qmljsdebugger.pri

View File

@@ -16,8 +16,6 @@ exists($$PWD/qmljsdebugger/qmljsdebugger-lib.pri) {
include($$PWD/../qmljsdebugger/qmljsdebugger-lib.pri) include($$PWD/../qmljsdebugger/qmljsdebugger-lib.pri)
} }
DESTDIR = $$IDE_BIN_PATH
mac { mac {
QMAKE_INFO_PLIST=Info_mac.plist QMAKE_INFO_PLIST=Info_mac.plist
TARGET=QMLObserver TARGET=QMLObserver

View File

@@ -80,6 +80,8 @@ QWidget { //This is a special doubleSpinBox that does color coding for states
decimals: 1; decimals: 1;
keyboardTracking: false; keyboardTracking: false;
enabled: !backendValue.isBound && doubleSpinBox.enabled; enabled: !backendValue.isBound && doubleSpinBox.enabled;
minimum: -1000
maximum: 1000
property bool readingFromBackend: false; property bool readingFromBackend: false;
property real valueFromBackend: doubleSpinBox.backendValue.value; property real valueFromBackend: doubleSpinBox.backendValue.value;

View File

@@ -17,8 +17,7 @@ QScrollArea {
rightMargin: 0; rightMargin: 0;
spacing: 0; spacing: 0;
Visibility {} Transformation {}
Transformation {}
QScrollArea { QScrollArea {
} }

View File

@@ -9,8 +9,8 @@ QWidget {
property variant caption; property variant caption;
property variant maximumValue: 99 property variant maximumValue: 1000
property variant minimumValue: 0 property variant minimumValue: -1000
property variant step: 1 property variant step: 1
property bool slider: true property bool slider: true
property alias alignment: label.alignment property alias alignment: label.alignment

View File

@@ -13,10 +13,28 @@ PropertyFrame {
leftMargin: 0; leftMargin: 0;
rightMargin: 0; rightMargin: 0;
spacing: 0; spacing: 0;
Type {
}
Geometry {
}
Visibility {
}
HorizontalWhiteLine {
maximumHeight: 4;
styleSheet: "QLineEdit {border: 2px solid #707070; min-height: 0px; max-height: 0px;}";
}
Switches { Switches {
} }
HorizontalWhiteLine { HorizontalWhiteLine {
} }
ScrollArea { ScrollArea {
styleSheetFile: ":/qmldesigner/scrollbar.css"; styleSheetFile: ":/qmldesigner/scrollbar.css";
widgetResizable: true; widgetResizable: true;
@@ -35,8 +53,6 @@ PropertyFrame {
leftMargin: 0; leftMargin: 0;
rightMargin: 0; rightMargin: 0;
spacing: 0; spacing: 0;
Type {
}
WidgetLoader { WidgetLoader {
id: specificsOne; id: specificsOne;

View File

@@ -15,10 +15,7 @@ QScrollArea {
bottomMargin: 0; bottomMargin: 0;
leftMargin: 0; leftMargin: 0;
rightMargin: 0; rightMargin: 0;
spacing: 0 spacing: 0;
Geometry {
}
Layout { Layout {
id: layoutBox; id: layoutBox;

View File

@@ -35,8 +35,8 @@ QFrame {
id: layoutMode; id: layoutMode;
checkable: true; checkable: true;
checked: false; checked: false;
toolTip: qsTr("layout and geometry"); toolTip: qsTr("layout");
text: qsTr("Geometry"); text: qsTr("Layout");
onClicked: { onClicked: {
extendedMode.checked = false; extendedMode.checked = false;
standardMode.checked = false; standardMode.checked = false;

Some files were not shown because too many files have changed in this diff Show More