aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/gdb/Makefile.linux2
-rw-r--r--dist/gdb/Makefile.mingw2
-rw-r--r--dist/gdb/Makefile.osx2
-rw-r--r--dist/installer/ifw/config/config.xml.in24
-rw-r--r--dist/installer/ifw/config/logo.pngbin0 -> 4256 bytes
-rw-r--r--dist/installer/ifw/config/watermark.pngbin0 -> 12983 bytes
-rw-r--r--dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs155
-rw-r--r--dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt504
-rw-r--r--dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in15
-rw-r--r--dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in9
-rw-r--r--doc/images/qmldesigner-new-project.pngbin20287 -> 42644 bytes
-rw-r--r--doc/images/qtcreator-new-qt-quick-project-wizard.pngbin20073 -> 42874 bytes
-rw-r--r--doc/src/howto/creator-vcs.qdoc44
-rw-r--r--doc/src/projects/creator-projects-creating.qdoc7
-rw-r--r--doc/src/qtquick/qtquick-creating.qdoc18
-rw-r--r--qtcreator.pro15
-rwxr-xr-xscripts/packageIfw.py132
-rw-r--r--share/qtcreator/translations/qtcreator_de.ts490
-rw-r--r--src/app/main.cpp2
-rw-r--r--src/libs/cplusplus/CppRewriter.cpp3
-rw-r--r--src/libs/cplusplus/LookupContext.cpp38
-rw-r--r--src/libs/cplusplus/LookupContext.h30
-rw-r--r--src/libs/qmldebug/baseenginedebugclient.cpp24
-rw-r--r--src/libs/qmldebug/declarativeenginedebugclient.cpp (renamed from src/libs/qmldebug/qmlenginedebugclient.cpp)28
-rw-r--r--src/libs/qmldebug/declarativeenginedebugclient.h16
-rw-r--r--src/libs/qmldebug/declarativeenginedebugclientv2.h51
-rw-r--r--src/libs/qmldebug/qdebugmessageclient.cpp35
-rw-r--r--src/libs/qmldebug/qmldebug-lib.pri5
-rw-r--r--src/libs/qmldebug/qmldebug.qbs2
-rw-r--r--src/libs/qmldebug/qmldebugconstants.h3
-rw-r--r--src/libs/qmldebug/qmlenginedebugclient.h16
-rw-r--r--src/libs/ssh/sftpchannel.cpp2
-rw-r--r--src/libs/ssh/sshconnection.cpp4
-rw-r--r--src/libs/ssh/sshkeycreationdialog.cpp6
-rw-r--r--src/libs/zeroconf/avahiLib.cpp12
-rw-r--r--src/libs/zeroconf/servicebrowser.cpp4
-rw-r--r--src/plugins/android/androidconfigurations.cpp2
-rw-r--r--src/plugins/android/androidcreatekeystorecertificate.ui4
-rw-r--r--src/plugins/android/androiddeploystep.cpp6
-rw-r--r--src/plugins/android/androiddeploystepfactory.cpp2
-rw-r--r--src/plugins/android/androiddeploystepwidget.ui6
-rw-r--r--src/plugins/android/androidpackagecreationwidget.cpp10
-rw-r--r--src/plugins/android/androidqtversion.cpp2
-rw-r--r--src/plugins/android/androidruncontrol.cpp2
-rw-r--r--src/plugins/android/androidrunfactories.cpp2
-rw-r--r--src/plugins/android/androidrunner.cpp18
-rw-r--r--src/plugins/android/androidsettingswidget.cpp4
-rw-r--r--src/plugins/android/androidsettingswidget.ui8
-rw-r--r--src/plugins/bineditor/bineditorplugin.cpp2
-rw-r--r--src/plugins/clearcase/activityselector.cpp2
-rw-r--r--src/plugins/clearcase/checkoutdialog.ui2
-rw-r--r--src/plugins/clearcase/versionselector.ui8
-rw-r--r--src/plugins/coreplugin/idocument.cpp2
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp2
-rw-r--r--src/plugins/cppeditor/cpptypehierarchy.cpp48
-rw-r--r--src/plugins/cppeditor/cpptypehierarchy.h5
-rw-r--r--src/plugins/cpptools/cppcompletion_test.cpp395
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.h10
-rw-r--r--src/plugins/debugger/debuggerkitconfigwidget.h2
-rw-r--r--src/plugins/debugger/debuggerkitinformation.cpp21
-rw-r--r--src/plugins/debugger/debuggerkitinformation.h10
-rw-r--r--src/plugins/debugger/debuggertooltipmanager.cpp2
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp8
-rw-r--r--src/plugins/debugger/moduleshandler.cpp26
-rw-r--r--src/plugins/debugger/qml/qmladapter.cpp10
-rw-r--r--src/plugins/debugger/qml/qmlinspectoradapter.cpp11
-rw-r--r--src/plugins/debugger/qml/qmlinspectoragent.cpp83
-rw-r--r--src/plugins/debugger/qml/qmlinspectoragent.h4
-rw-r--r--src/plugins/debugger/qml/qmlv8debuggerclient.cpp4
-rw-r--r--src/plugins/debugger/qml/qmlv8debuggerclientconstants.h1
-rw-r--r--src/plugins/debugger/sourcefileshandler.cpp4
-rw-r--r--src/plugins/debugger/stackwindow.cpp2
-rw-r--r--src/plugins/debugger/watchwindow.cpp2
-rw-r--r--src/plugins/git/gerrit/gerritplugin.cpp2
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp19
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicesettingswidget.h2
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicewidget.h12
-rw-r--r--src/plugins/projectexplorer/kitinformation.h16
-rw-r--r--src/plugins/projectexplorer/kitinformationconfigwidget.cpp15
-rw-r--r--src/plugins/projectexplorer/kitinformationconfigwidget.h5
-rw-r--r--src/plugins/projectexplorer/kitmanager.cpp8
-rw-r--r--src/plugins/projectexplorer/kitmodel.cpp2
-rw-r--r--src/plugins/projectexplorer/project.cpp2
-rw-r--r--src/plugins/projectexplorer/target.cpp1
-rw-r--r--src/plugins/projectexplorer/target.h2
-rw-r--r--src/plugins/qmlprofiler/qmlprofilereventview.cpp12
-rw-r--r--src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp8
-rw-r--r--src/plugins/qnx/blackberrydeviceconfigurationwidget.h1
-rw-r--r--src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp3
-rw-r--r--src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp18
-rw-r--r--src/plugins/qtsupport/qtoptionspage.cpp4
-rw-r--r--src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp11
-rw-r--r--src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h1
-rw-r--r--src/plugins/texteditor/codeassist/genericproposalwidget.cpp20
-rw-r--r--src/plugins/texteditor/codeassist/genericproposalwidget.h2
-rw-r--r--src/plugins/texteditor/findinopenfiles.cpp2
-rw-r--r--src/plugins/texteditor/fontsettings.cpp4
-rw-r--r--src/plugins/vcsbase/vcsbaseeditor.cpp8
-rw-r--r--src/tools/sdktool/README.txt1
-rw-r--r--src/tools/sdktool/addkeysoperation.cpp2
-rw-r--r--src/tools/sdktool/addkitoperation.cpp16
-rw-r--r--src/tools/sdktool/addkitoperation.h2
-rw-r--r--src/tools/sdktool/addqtoperation.cpp8
-rw-r--r--src/tools/sdktool/addtoolchainoperation.cpp2
-rw-r--r--tests/system/objects.map2
-rw-r--r--tests/system/settings/unix/Nokia/qtcreator/toolchains.xml1
-rw-r--r--tests/system/shared/qtcreator.py65
-rw-r--r--tests/system/suite_editors/suite.conf12
-rw-r--r--tests/system/suite_editors/tst_memberoperator/test.py26
-rw-r--r--tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv23
110 files changed, 2242 insertions, 530 deletions
diff --git a/dist/gdb/Makefile.linux b/dist/gdb/Makefile.linux
index f12d25eaf8..94bf99bca9 100644
--- a/dist/gdb/Makefile.linux
+++ b/dist/gdb/Makefile.linux
@@ -1,6 +1,6 @@
broot=${PWD}
source=${broot}/source
-targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
+targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi
staging=${broot}/staging
pyversion=2.7
expatversion=2.0.1
diff --git a/dist/gdb/Makefile.mingw b/dist/gdb/Makefile.mingw
index 4d36fa67bd..acc8a84173 100644
--- a/dist/gdb/Makefile.mingw
+++ b/dist/gdb/Makefile.mingw
@@ -1,6 +1,6 @@
broot=${PWD}
source=${broot}/source
-targets=arm-none-symbianelf arm-none-linux-gnueabi i686-pc-mingw32
+targets=arm-none-linux-gnueabi i686-pc-mingw32
staging=${broot}/staging
pyversion=2.7
pydir=${broot}/python
diff --git a/dist/gdb/Makefile.osx b/dist/gdb/Makefile.osx
index e73a962434..20517d01ea 100644
--- a/dist/gdb/Makefile.osx
+++ b/dist/gdb/Makefile.osx
@@ -1,6 +1,6 @@
broot=${PWD}
source=${broot}/source
-targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf x86_64-apple-darwin10
+targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi x86_64-apple-darwin10
staging=${broot}/staging
pyversion=2.7
expatversion=2.0.1
diff --git a/dist/installer/ifw/config/config.xml.in b/dist/installer/ifw/config/config.xml.in
new file mode 100644
index 0000000000..39fe7f4f00
--- /dev/null
+++ b/dist/installer/ifw/config/config.xml.in
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<Installer>
+ <Name>Qt Creator</Name>
+ <Version>{version}</Version>
+ <Title>Qt Creator</Title>
+ <MaintenanceTitle>Qt Creator Maintenance</MaintenanceTitle>
+ <Publisher>Qt Project</Publisher>
+ <ProductUrl>http://qt-project.org</ProductUrl>
+
+ <Icon>logo.png</Icon>
+ <Watermark>watermark.png</Watermark>
+ <UninstallerName>QtCreatorUninstaller</UninstallerName>
+ <!-- @homeDir@ and @rootDir@ are some of the supported vars -->
+ <TargetDir>@homeDir@/QtCreator</TargetDir>
+ <AdminTargetDir>/opt/QtCreator</AdminTargetDir>
+
+ <Pages>
+ <Page name="LicenseAgreementPage">
+ <AcceptLicenseLabel>I have read and understood the terms contained in the above license agreements.</AcceptLicenseLabel>
+ <RejectLicenseLabel>I do not accept the terms contained in the above license agreements.</RejectLicenseLabel>
+ </Page>
+ </Pages>
+
+</Installer>
diff --git a/dist/installer/ifw/config/logo.png b/dist/installer/ifw/config/logo.png
new file mode 100644
index 0000000000..d892f85fe2
--- /dev/null
+++ b/dist/installer/ifw/config/logo.png
Binary files differ
diff --git a/dist/installer/ifw/config/watermark.png b/dist/installer/ifw/config/watermark.png
new file mode 100644
index 0000000000..fc44c44f4c
--- /dev/null
+++ b/dist/installer/ifw/config/watermark.png
Binary files differ
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
new file mode 100644
index 0000000000..33436bbbb1
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
@@ -0,0 +1,155 @@
+/* This file is part of the Qt SDK
+
+Copyright (c) 2008-2012 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+
+Contact: Nokia Corporation (qt-info@nokia.com)
+
+GNU Lesser General Public License Usage
+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.
+
+If you have questions regarding the use of this file, please contact Nokia
+at qt-info@nokia.com.
+*/
+
+// constructor
+function Component()
+{
+ installer.finishButtonClicked.connect(this, Component.prototype.installationFinished);
+}
+
+Component.prototype.beginInstallation = function()
+{
+ if ( installer.value("os") === "win" ) {
+ component.setStopProcessForUpdateRequest("@TargetDir@/bin/qtcreator.exe", true);
+ component.setStopProcessForUpdateRequest("@TargetDir@/bin/linguist.exe", true);
+ component.setStopProcessForUpdateRequest("@TargetDir@/bin/qmlviewer.exe", true);
+ }
+}
+
+registerWindowsFileTypeExtensions = function()
+{
+ var headerExtensions = new Array("h", "hh", "hxx", "h++", "hpp", "hpp");
+
+ for (var i = 0; i < headerExtensions.length; ++i) {
+ component.addOperation( "RegisterFileType",
+ headerExtensions[i],
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "C++ Header file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,3");
+ }
+
+ var cppExtensions = new Array("cc", "cxx", "c++", "cp", "cpp");
+
+ for (var i = 0; i < cppExtensions.length; ++i) {
+ component.addOperation( "RegisterFileType",
+ cppExtensions[i],
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "C++ Source file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,2");
+ }
+
+ component.addOperation( "RegisterFileType",
+ "c",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "C Source file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,1");
+ component.addOperation( "RegisterFileType",
+ "ui",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "Qt UI file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,4");
+ component.addOperation( "RegisterFileType",
+ "pro",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "Qt Project file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,5");
+ component.addOperation( "RegisterFileType",
+ "pri",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "Qt Project Include file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,6");
+ component.addOperation( "RegisterFileType",
+ "qs",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "Qt Script file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,0");
+ component.addOperation( "RegisterFileType",
+ "qml",
+ "@TargetDir@\\bin\\qtcreator.exe -client '%1'",
+ "Qt Quick Markup language file",
+ "",
+ "@TargetDir@\\bin\\qtcreator.exe,0");
+}
+
+Component.prototype.createOperations = function()
+{
+ // Call the base createOperations and afterwards set some registry settings
+ component.createOperations();
+ if ( installer.value("os") == "win" )
+ {
+ component.addOperation( "SetPluginPathOnQtCore",
+ "@TargetDir@/bin",
+ "@TargetDir@/plugins");
+ component.addOperation( "SetImportsPathOnQtCore",
+ "@TargetDir@/bin",
+ "@TargetDir@/bin");
+ component.addOperation( "CreateShortcut",
+ "@TargetDir@\\\bin\\qtcreator.exe",
+ "@StartMenuDir@/Qt Creator.lnk",
+ "workingDirectory=@homeDir@" );
+ registerWindowsFileTypeExtensions();
+ }
+ if ( installer.value("os") == "x11" )
+ {
+ component.addOperation( "SetPluginPathOnQtCore",
+ "@TargetDir@/lib/qtcreator",
+ "@TargetDir@/lib/qtcreator/plugins");
+ component.addOperation( "SetImportsPathOnQtCore",
+ "@TargetDir@/lib/qtcreator",
+ "@TargetDir@/bin");
+
+ component.addOperation( "InstallIcons", "@TargetDir@/share/icons" );
+ component.addOperation( "CreateDesktopEntry",
+ "QtProject-qtcreator.desktop",
+ "Type=Application\nExec=@TargetDir@/bin/qtcreator\nPath=@TargetDir@\nName=Qt Creator\nGenericName=The IDE of choice for Qt development.\nGenericName[de]=Die IDE der Wahl zur Qt Entwicklung\nIcon=QtProject-qtcreator\nTerminal=false\nCategories=Development;IDE;Qt;\nMimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;text/x-qml;"
+ );
+ }
+}
+
+Component.prototype.installationFinished = function()
+{
+ try {
+ if (component.installed && installer.isInstaller() && installer.status == QInstaller.Success) {
+ var isLaunchQtCreatorCheckBoxChecked = component.userInterface( "LaunchQtCreatorCheckBoxForm" ).launchQtCreatorCheckBox.checked;
+ if (isLaunchQtCreatorCheckBoxChecked) {
+
+ var qtCreatorBinary = installer.value("TargetDir");
+ if (installer.value("os") == "win")
+ qtCreatorBinary = qtCreatorBinary + "\\bin\\qtcreator.exe";
+ else if (installer.value("os") == "x11")
+ qtCreatorBinary = qtCreatorBinary + "/bin/qtcreator";
+ else if (installer.value("os") == "mac")
+ qtCreatorBinary = "\"" + qtCreatorBinary + "/Qt Creator.app/Contents/MacOS/Qt Creator\"";
+
+ if (installer.executeDetached)
+ installer.executeDetached(qtCreatorBinary);
+ }
+ }
+ } catch(e) {
+ print(e);
+ }
+}
+
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
new file mode 100644
index 0000000000..602bfc9463
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
new file mode 100644
index 0000000000..ed2cf104c9
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<Package>
+ <DisplayName>Qt Creator Application</DisplayName>
+ <Description>The IDE of choice for Qt development.</Description>
+ <Version>{version}</Version>
+ <ReleaseDate>{date}</ReleaseDate>
+ <Name>org.qtproject.qtcreator.application</Name>
+ <Script>installscript.qs</Script>
+ <Licenses>
+ <License name="Qt Creator License" file="license.txt" />
+ </Licenses>
+ <ForcedInstallation>true</ForcedInstallation>
+ <Default>true</Default>
+ <AutoDependOn>org.qtproject.qtcreator</AutoDependOn>
+</Package>
diff --git a/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in b/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
new file mode 100644
index 0000000000..122ca71cad
--- /dev/null
+++ b/dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<Package>
+ <DisplayName>Qt Creator</DisplayName>
+ <Description>Installs the Qt Creator IDE.</Description>
+ <Version>{version}</Version>
+ <ReleaseDate>{date}</ReleaseDate>
+ <Name>org.qtproject.qtcreator</Name>
+ <!-- <Script>installscript.js</Script> -->
+</Package>
diff --git a/doc/images/qmldesigner-new-project.png b/doc/images/qmldesigner-new-project.png
index ac8e4e1505..acbbc37893 100644
--- a/doc/images/qmldesigner-new-project.png
+++ b/doc/images/qmldesigner-new-project.png
Binary files differ
diff --git a/doc/images/qtcreator-new-qt-quick-project-wizard.png b/doc/images/qtcreator-new-qt-quick-project-wizard.png
index 9c318c9390..1bd69f0564 100644
--- a/doc/images/qtcreator-new-qt-quick-project-wizard.png
+++ b/doc/images/qtcreator-new-qt-quick-project-wizard.png
Binary files differ
diff --git a/doc/src/howto/creator-vcs.qdoc b/doc/src/howto/creator-vcs.qdoc
index 337a45ca77..2ec977a992 100644
--- a/doc/src/howto/creator-vcs.qdoc
+++ b/doc/src/howto/creator-vcs.qdoc
@@ -42,6 +42,10 @@
\o \l{http://bazaar.canonical.com/}
\o \QC 2.2 and later
\row
+ \o ClearCase
+ \o \l{http://www-01.ibm.com/software/awdtools/clearcase/}
+ \i Experimental plugin in \QC 2.6
+ \row
\o CVS
\o \l{http://www.cvshome.org}
\i
@@ -304,7 +308,45 @@
\endtable
- \section2 Using Additional CVS Functions
+ \section2 Using Additional ClearCase Functions
+
+ IBM Rational ClearCase is a version control, workspace management, parallel
+ development support, and build automation solution developed by IBM. The
+ ClearCase client plugin is an experimental plugin that you can enable by
+ selecting \gui Help > \gui {About Plugins} > \gui {Version Control} >
+ \gui ClearCase. The ClearCase client plugin is available on Linux and
+ Windows for accessing a ClearCase server.
+
+ The \gui ClearCase submenu contains the following additional items:
+
+ \table
+ \header
+ \o Menu Item
+ \o Description
+ \row
+ \o \gui{Check In}
+ \o Create a permanent new version of the current file or all files
+ in the versioned object base (VOB).
+ \row
+ \o \gui{Check In Activity}
+ \o Check in checked-out versions in the change set of the current
+ Unified Change Management (UCM) activity.
+ \row
+ \o \gui{Check Out}
+ \o Create a writable copy of a branch. If you check out files in a
+ UCM view, they are added to the change set of the UCM activity.
+ \row
+ \o \gui{Undo Check Out}
+ \o Cancel the checkout for a file and delete the checked-out
+ version.
+ \row
+ \o \gui{Undo Hijack}
+ \o Resolve hijacked files. If you change the read-only attribute of
+ a file that is loaded into a snapshot view and modify the file
+ without checking it out, you \e hijack the file.
+ \endtable
+
+\section2 Using Additional CVS Functions
CVS is an open source version control system.
diff --git a/doc/src/projects/creator-projects-creating.qdoc b/doc/src/projects/creator-projects-creating.qdoc
index e28850ea92..211a129df7 100644
--- a/doc/src/projects/creator-projects-creating.qdoc
+++ b/doc/src/projects/creator-projects-creating.qdoc
@@ -116,9 +116,10 @@
\o Qt Quick Application (Built-in Elements)
- Use built-in QML elements to design Qt Quick based user
- interfaces with a custom look and feel and QML and C++ code to
- implement the application logic
+ Use built-in QML elements to design user interfaces based on
+ Qt Quick 1 (Qt 4.7.1, or later) or Qt Quick 2 (Qt 5) with a
+ custom look and feel and QML and C++ code to implement the
+ application logic
\o Qt Quick Application for MeeGo Harmattan
diff --git a/doc/src/qtquick/qtquick-creating.qdoc b/doc/src/qtquick/qtquick-creating.qdoc
index 27d87db53a..80763000a4 100644
--- a/doc/src/qtquick/qtquick-creating.qdoc
+++ b/doc/src/qtquick/qtquick-creating.qdoc
@@ -50,6 +50,14 @@
custom look and feel, whereas the components provide the look and
feel for a particular platform.
+ The Qt Quick 1 Application wizard imports Qt Quick 1.1, and
+ therefore, you can use it without changes to develop for platforms
+ that run Qt 4.7.4 (such as MeeGo). To develop for platforms that run
+ Qt 4.7.3 (such as Maemo), you must change the import statement to
+ import Qt Quick 1.0.
+
+ The Qt Quick 2 Application wizard imports Qt Quick 2.0. Use it to
+ develop for platforms that run Qt 5.
\o \gui {Qt Quick UI} creates a Qt Quick UI project with a single QML
file that contains the main view. You can review Qt Quick UI
projects in the QML Viewer and you need not build them. You do not
@@ -68,16 +76,6 @@
\endlist
- \if defined(qcmanual)
- \note Qt 4.7.3 supports Qt Quick 1.0 and Qt 4.7.4 supports Qt Quick 1.1. The
- application wizards import Qt Quick 1.1, and therefore, you can use them
- without changes if you target only platforms that run Qt 4.7.4 (such as
- MeeGo or the desktop). If you also target platforms that run Qt 4.7.3
- (such as Maemo), you must change the import statement to
- import Qt Quick 1.0.
- \endif
-
-
\section1 Creating Qt Quick UI Projects
\list 1
diff --git a/qtcreator.pro b/qtcreator.pro
index 4720d20b0e..c1e5fa0014 100644
--- a/qtcreator.pro
+++ b/qtcreator.pro
@@ -27,6 +27,7 @@ PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
macx {
APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
BINDIST_SOURCE = "$$OUT_PWD/bin/Qt Creator.app"
+ BINDIST_INSTALLER_SOURCE = $$BINDIST_SOURCE
deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \"$${APPBUNDLE}\"
codesign.commands = codesign -s \"$(SIGNING_IDENTITY)\" \"$${APPBUNDLE}\"
dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-$${PATTERN}.dmg
@@ -34,6 +35,7 @@ macx {
QMAKE_EXTRA_TARGETS += codesign dmg
} else {
BINDIST_SOURCE = "$(INSTALL_ROOT)$$QTC_PREFIX"
+ BINDIST_INSTALLER_SOURCE = "$$BINDIST_SOURCE/*"
deployqt.commands = $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX\"
deployqt.depends = install
win32 {
@@ -43,13 +45,20 @@ macx {
}
}
+INSTALLER_ARCHIVE = $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z
+
+bindist.depends = deployqt
bindist.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}.7z \"$$BINDIST_SOURCE\"
+bindist_installer.depends = deployqt
+bindist_installer.commands = 7z a -mx9 $$OUT_PWD/qt-creator-$${PATTERN}-installer-archive.7z \"$$BINDIST_INSTALLER_SOURCE\"
+installer.depends = bindist_installer
+installer.commands = $$PWD/scripts/packageIfw.py -i \"$(IFW_PATH)\" -v $${QTCREATOR_VERSION} -a \"$$INSTALLER_ARCHIVE\" "qt-creator-$${PATTERN}-installer"
win32 {
deployqt.commands ~= s,/,\\\\,g
bindist.commands ~= s,/,\\\\,g
+ bindist_installer.commands ~= s,/,\\\\,g
+ installer.commands ~= s,/,\\\\,g
}
-bindist.depends = deployqt
-
-QMAKE_EXTRA_TARGETS += deployqt bindist
+QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer installer
diff --git a/scripts/packageIfw.py b/scripts/packageIfw.py
new file mode 100755
index 0000000000..b78cb548f2
--- /dev/null
+++ b/scripts/packageIfw.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+################################################################################
+# Copyright (c) 2011 Nokia Corporation
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of Nokia Corporation, nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+################################################################################
+
+import os
+import sys
+import datetime
+import getopt
+import subprocess
+import fnmatch
+import tempfile
+import shutil
+import inspect
+
+def usage():
+ print 'Usage: %s [-v|--version-string=versionstring] [-i|--installer-path=/path/to/installerfw] [-a|--archive=archive.7z] <outputname>' % os.path.basename(sys.argv[0])
+
+def substitute_file(infile, outfile, substitutions):
+ with open(infile, 'r') as f:
+ template = f.read()
+ with open(outfile, 'w') as f:
+ f.write(template.format(**substitutions))
+
+def ifw_template_dir():
+ script_dir = os.path.dirname(inspect.getfile(inspect.currentframe()))
+ source_dir = os.path.normpath(os.path.join(script_dir, '..'));
+ return os.path.normpath(os.path.join(source_dir, 'dist', 'installer', 'ifw'))
+
+def main():
+ try:
+ opts, args = getopt.gnu_getopt(sys.argv[1:], 'hv:i:a:', ['help', 'version-string=', 'installer-path=', 'archive'])
+ except:
+ usage()
+ sys.exit(2)
+
+ if len(args) < 1:
+ usage()
+ sys.exit(2)
+
+ version = ''
+ ifw_location = ''
+ archive = ''
+ for o, a in opts:
+ if o in ('-h', '--help'):
+ usage()
+ sys.exit(0)
+ if o in ('-v', '--version-string'):
+ version = a
+ if o in ('-i', '--installer-path'):
+ ifw_location = a
+ if o in ('-a', '--archive'):
+ archive = a
+
+ if (version == ''):
+ raise Exception('Version not specified (--version-string)!')
+
+ if (ifw_location == ''):
+ raise Exception('Installer framework location not specified (--installer-path)!')
+
+ if (archive == ''):
+ raise Exception('Archive not specified (--archive)!')
+
+ installer_name = args[0]
+ if sys.platform == 'darwin':
+ installer_name = installer_name + '.dmg'
+
+ try:
+ temp_dir = tempfile.mkdtemp()
+ except:
+ raise Exception('Failed to create a temporary directory!')
+
+ try:
+ substs = {}
+ substs['version'] = version
+ substs['date'] = datetime.date.today().isoformat()
+
+ template_dir = ifw_template_dir()
+ out_config_dir = os.path.join(temp_dir,'config')
+ out_packages_dir = os.path.join(temp_dir, 'packages')
+
+ shutil.copytree(os.path.join(template_dir, 'packages'), os.path.join(temp_dir, 'packages'))
+ shutil.copytree(os.path.join(template_dir, 'config'), os.path.join(temp_dir, 'config'))
+
+ for root, dirnames, filenames in os.walk(out_packages_dir):
+ for template in fnmatch.filter(filenames, '*.in'):
+ substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
+ os.remove(os.path.join(root, template))
+
+ for root, dirnames, filenames in os.walk(out_config_dir):
+ for template in fnmatch.filter(filenames, '*.in'):
+ substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs)
+ os.remove(os.path.join(root, template))
+
+ data_path = os.path.join(out_packages_dir, 'org.qtproject.qtcreator.application', 'data')
+ if not os.path.exists(data_path):
+ os.makedirs(data_path)
+ shutil.copy(archive, data_path)
+
+ ifw_call = [os.path.join(ifw_location, 'bin', 'binarycreator'), '-c', os.path.join(out_config_dir, 'config.xml'), '-p', out_packages_dir, installer_name, '--offline-only' ]
+ subprocess.check_call(ifw_call, stderr=subprocess.STDOUT)
+ finally:
+ print 'Cleaning up...'
+ shutil.rmtree(temp_dir)
+ print 'Done.'
+
+if __name__ == '__main__':
+ main()
diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts
index 8f4b74be11..91a1e313f3 100644
--- a/share/qtcreator/translations/qtcreator_de.ts
+++ b/share/qtcreator/translations/qtcreator_de.ts
@@ -7416,10 +7416,6 @@ Fehler: %2</translation>
<source>Run</source>
<translation>Ausführen</translation>
</message>
- <message>
- <source>No executable</source>
- <translation>Keine ausführbare Datei</translation>
- </message>
</context>
<context>
<name>ProjectExplorer::Internal::ProcessStep</name>
@@ -12254,10 +12250,6 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
</message>
<message>
- <source>Unable to generate a temporary file for the commit editor.</source>
- <translation>Es konnte keine temporäre Datei für die Abgabe angelegt werden.</translation>
- </message>
- <message>
<source>Unable to create an editor for the commit.</source>
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
</message>
@@ -13279,6 +13271,14 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
<source>File &apos;%1&apos; does not exist or is not readable.</source>
<translation>Die Datei &apos;%1&apos; existiert nicht oder ist nicht lesbar.</translation>
</message>
+ <message>
+ <source>Device type is not desktop.</source>
+ <translation>Der Gerätetyp ist nicht &quot;Desktop&quot;.</translation>
+ </message>
+ <message>
+ <source>No Qt version set in kit.</source>
+ <translation>Im Kit ist keine Qt-Version gesetzt.</translation>
+ </message>
</context>
<context>
<name>QmlProjectManager::Internal::QmlProjectApplicationWizardDialog</name>
@@ -13571,6 +13571,10 @@ Erfordert &lt;b&gt;Qt 4.7.4&lt;/b&gt; oder neuer.</translation>
<translation>Auswertung</translation>
</message>
<message>
+ <source>No Qt version set in kit.</source>
+ <translation>Im Kit ist keine Qt-Version gesetzt.</translation>
+ </message>
+ <message>
<source>The .pro file &apos;%1&apos; does not exist.</source>
<translation>Die .pro-Datei &apos;%1&apos; existiert nicht.</translation>
</message>
@@ -18814,10 +18818,6 @@ Lokale Pull-Operationen werden nicht auf den Master-Branch angewandt.</translati
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
</message>
<message>
- <source>Unable to generate a temporary file for the commit editor.</source>
- <translation>Es konnte keine temporäre Datei für die Abgabe angelegt werden.</translation>
- </message>
- <message>
<source>Unable to create an editor for the commit.</source>
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
</message>
@@ -19731,6 +19731,10 @@ Fehler: %2</translation>
<translation>Kit-Auswahl</translation>
</message>
<message>
+ <source>%1 - temporary</source>
+ <translation>%1 - temporär</translation>
+ </message>
+ <message>
<source>Qt Creator can use the following kits for project &lt;b&gt;%1&lt;/b&gt;:</source>
<comment>%1: Project name</comment>
<translation>Qt Creator kann für das Projekt &lt;b&gt;%1&lt;/b&gt; die folgenden Kits verwenden:</translation>
@@ -20245,7 +20249,7 @@ Bei vollständiger Cache-Simulation werden weitere Ereigniszähler aktiviert:
<translation>Globale Bus-Ereignisse aufnehmen</translation>
</message>
<message>
- <source>Visualisation: Minimum event cost:</source>
+ <source>Visualization: Minimum event cost:</source>
<translation>Minimale Ereigniskosten für Visualisierung:</translation>
</message>
</context>
@@ -21328,10 +21332,22 @@ Bitte verwenden Sie den Stop-Button.</translation>
<translation>Erstellungsprotokoll der Ausgabe-Hilfsbibliothek für &apos;%1&apos;</translation>
</message>
<message>
+ <source>Select a qmake Executable</source>
+ <translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
+ </message>
+ <message>
+ <source>Qt Version Already Registered</source>
+ <translation>Qt-Version bereits registriert</translation>
+ </message>
+ <message>
<source>Select a qmake executable</source>
<translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
</message>
<message>
+ <source>This Qt version was already registered as &quot;%1&quot;.</source>
+ <translation>Diese Qt-Version ist bereits unter &quot;%1&quot; registriert.</translation>
+ </message>
+ <message>
<source>Helpers: None available</source>
<translation>Hilfskomponenten: Keine verfügbar</translation>
</message>
@@ -26030,11 +26046,11 @@ should a repository require SSH-authentication (see documentation on SSH and the
<translation>IDE-Ãœberblick</translation>
</message>
<message>
- <source>To find out what kind of integrated enviroment (IDE) Qt Creator is.</source>
+ <source>To find out what kind of integrated environment (IDE) Qt Creator is.</source>
<translation>Um herauszufinden, um welche Art von integrierter Entwicklungsumgebung es sich bei Qt Creator handelt.</translation>
</message>
<message>
- <source>To become familar with the parts of the Qt Creator user interface and to learn how to use them.</source>
+ <source>To become familiar with the parts of the Qt Creator user interface and to learn how to use them.</source>
<translation>Um sich mit den Teilen der Benutzeroberfläche von Qt Creator vertraut zu machen und ihre Bedienung zu erlernen.</translation>
</message>
<message>
@@ -26815,8 +26831,8 @@ Möchten Sie es beenden?</translation>
<context>
<name>QmlProfiler::Internal::QmlProfilerEventsWidget</name>
<message>
- <source>Trace information from the v8 JavaScript engine. Available only in Qt5 based applications</source>
- <translation>Trace-Information vom v8 JavaScript-Engine. Nur in Qt-5 basierten Anwendungen verfügbar</translation>
+ <source>Trace information from the v8 JavaScript engine. Available only in Qt5 based applications.</source>
+ <translation>Trace-Information vom v8 JavaScript-Engine. Nur in Qt-5 basierten Anwendungen verfügbar.</translation>
</message>
<message>
<source>Copy Row</source>
@@ -26898,13 +26914,13 @@ Möchten Sie es beenden?</translation>
<translation>Das Binding wird von der optimierten Engine ausgewertet.</translation>
</message>
<message>
- <source>Binding not optimized (eg. has side effects or assignments,
+ <source>Binding not optimized (e.g. has side effects or assignments,
references to elements in other files, loops, etc.)</source>
<translation>Das Binding ist nicht optimiert (d.h., es hat Seiteneffekte oder Zuweisungen, Referenzen zu Elementen in anderen Dateien, Schleifen, etc.)</translation>
</message>
<message>
- <source>Binding loop detected</source>
- <translation>Endlosschleife bei Binding festgestellt</translation>
+ <source>Binding loop detected.</source>
+ <translation>Endlosschleife bei Binding festgestellt.</translation>
</message>
<message utf8="true">
<source> µs</source>
@@ -26942,8 +26958,8 @@ references to elements in other files, loops, etc.)</source>
<context>
<name>QmlProfiler::Internal::QmlProfilerEventsParentsAndChildrenView</name>
<message>
- <source>Part of binding loop</source>
- <translation>Teil der Binding-Endlosschleife</translation>
+ <source>Part of binding loop.</source>
+ <translation>Teil der Binding-Schleife.</translation>
</message>
<message>
<source>Callee</source>
@@ -27035,28 +27051,28 @@ references to elements in other files, loops, etc.)</source>
<translation>AvahiZConfLib c konnte die native Bibliothek &apos;%1&apos; nicht laden: %2</translation>
</message>
<message>
- <source>%1 could not create a client (probably the daemon is not running)</source>
- <translation>%1 konnte keinen Client erzeugen (möglicherweise läuft kein Hintergrundprozess)</translation>
+ <source>%1 cannot create a client. The daemon is probably not running.</source>
+ <translation>%1 konnte keinen Client erzeugen (möglicherweise läuft kein Hintergrundprozess).</translation>
</message>
<message>
- <source>cAvahiClient, server collision</source>
- <translation>cAvahiClient, Server-Kollision</translation>
+ <source>cAvahiClient, server collision.</source>
+ <translation>cAvahiClient, Server-Kollision.</translation>
</message>
<message>
- <source>cAvahiClient, some kind of error happened on the client side</source>
- <translation>cAvahiClient, client-seitiger Fehler</translation>
+ <source>cAvahiClient, an error occurred on the client side.</source>
+ <translation>cAvahiClient, client-seitiger Fehler.</translation>
</message>
<message>
- <source>cAvahiClient, still connecting, no server available</source>
- <translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar</translation>
+ <source>cAvahiClient, still connecting, no server available.</source>
+ <translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar.</translation>
</message>
<message>
- <source>unexpected state %1 in cAvahiClientReply</source>
- <translation>unerwarteter Status %1 in cAvahiClientReply</translation>
+ <source>Unexpected state %1 in cAvahiClientReply.</source>
+ <translation>Unerwarteter Status %1 in cAvahiClientReply.</translation>
</message>
<message>
- <source>unexpected state %1 in cAvahiBrowseReply</source>
- <translation>unerwarteter Status %1 in cAvahiBrowseReply</translation>
+ <source>Unexpected state %1 in cAvahiBrowseReply.</source>
+ <translation>Unerwarteter Status %1 in cAvahiBrowseReply.</translation>
</message>
<message>
<source>%1 failed to kill other daemons with &apos;%2&apos;.</source>
@@ -27168,8 +27184,8 @@ references to elements in other files, loops, etc.)</source>
<context>
<name>Debugger::Internal::QmlV8DebuggerClient</name>
<message>
- <source>anonymous function</source>
- <translation>anonyme Funktion</translation>
+ <source>Anonymous Function</source>
+ <translation>Anonyme Funktion</translation>
</message>
</context>
<context>
@@ -27179,7 +27195,7 @@ references to elements in other files, loops, etc.)</source>
<translation>Offene Dokumente</translation>
</message>
<message>
- <source>Open Documents:</source>
+ <source>Open documents:</source>
<translation>Offene Dokumente:</translation>
</message>
<message>
@@ -27423,6 +27439,10 @@ references to elements in other files, loops, etc.)</source>
<context>
<name>BinEditorDocument</name>
<message>
+ <source>The Binary Editor can not open empty files.</source>
+ <translation>Der Binäreditor kann keine leeren Dateien öffnen.</translation>
+ </message>
+ <message>
<source>Cannot open %1: %2</source>
<translation>Die Datei %1 kann nicht geöffnet werden: %2</translation>
</message>
@@ -27687,24 +27707,24 @@ references to elements in other files, loops, etc.)</source>
<translation>Name der privaten Schlüsseldatei auswählen</translation>
</message>
<message>
- <source>Failure To Save Key File</source>
- <translation>Fehler beim Speichern der Schlüsseldatei</translation>
+ <source>Cannot Save Key File</source>
+ <translation>Schlüsseldatei kann nicht gespeichert werden</translation>
</message>
<message>
- <source>Failed to create directory: &apos;%1&apos;.</source>
- <translation>Der Ordner &apos;%1&apos; konnte nicht erstellt werden.</translation>
+ <source>Cannot Save Private Key File</source>
+ <translation>Die private Schlüsseldatei kann nicht gespeichert werden</translation>
</message>
<message>
- <source>Saving Private Key File failed</source>
- <translation>Das Speichern des privaten Schlüssels schlug fehl</translation>
+ <source>Cannot Save Public Key File</source>
+ <translation>Öffentliche Schlüsseldatei kann nicht gespeichert werden</translation>
</message>
<message>
- <source>The private key file could not be saved: %1</source>
- <translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
+ <source>Failed to create directory: &apos;%1&apos;.</source>
+ <translation>Der Ordner &apos;%1&apos; konnte nicht erstellt werden.</translation>
</message>
<message>
- <source>Saving Public Key File failed</source>
- <translation>Das Speichern des öffentlichen Schlüssels schlug fehl</translation>
+ <source>The private key file could not be saved: %1</source>
+ <translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
</message>
<message>
<source>The public key file could not be saved: %1</source>
@@ -27789,14 +27809,6 @@ references to elements in other files, loops, etc.)</source>
<translation>Organisation (z.B. KDE):</translation>
</message>
<message>
- <source>City or Locality:</source>
- <translation>Stadt:</translation>
- </message>
- <message>
- <source>State or Province:</source>
- <translation>Staat oder Provinz:</translation>
- </message>
- <message>
<source>Two-letter country code for this unit (e.g. RO):</source>
<translation>Länderkennung für die Einheit (2 Buchstaben, z.B. RO):</translation>
</message>
@@ -27812,6 +27824,14 @@ references to elements in other files, loops, etc.)</source>
<source>Certificate Distinguished Names</source>
<translation>Namen des Zertifikats</translation>
</message>
+ <message>
+ <source>City or locality:</source>
+ <translation>Stadt:</translation>
+ </message>
+ <message>
+ <source>State or province:</source>
+ <translation>Bundesland oder Provinz:</translation>
+ </message>
</context>
<context>
<name>AndroidDeployStepWidget</name>
@@ -27820,18 +27840,6 @@ references to elements in other files, loops, etc.)</source>
<translation>Form</translation>
</message>
<message>
- <source>Edit rules file</source>
- <translation>Regeldatei bearbeiten</translation>
- </message>
- <message>
- <source>Choose apk</source>
- <translation>Apk wählen</translation>
- </message>
- <message>
- <source>Install Ministro system wide Qt shared libraries installer</source>
- <translation>Installiere Ministro system wide Qt shared libraries installer</translation>
- </message>
- <message>
<source>Choose and install Ministro system wide Qt shared libraries.
This option is useful when you want to try your application on devices which don&apos;t have Android Market (e.g. Android Emulator).</source>
<translation>Ministro system wide Qt shared libraries auswählen und installieren.
@@ -27859,6 +27867,18 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<source>Use local Qt libraries</source>
<translation>Lokale Qt-Bibliotheken ausliefern</translation>
</message>
+ <message>
+ <source>Edit Rules File</source>
+ <translation>Regeldatei bearbeiten</translation>
+ </message>
+ <message>
+ <source>Install Ministro, system-wide Qt shared libraries installer</source>
+ <translation>Installiere Ministro (systemweiter Installer für Qt shared libraries)</translation>
+ </message>
+ <message>
+ <source>Choose APK</source>
+ <translation>APK wählen</translation>
+ </message>
</context>
<context>
<name>AndroidPackageCreationWidget</name>
@@ -28023,30 +28043,14 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<translation>Android-NDK:</translation>
</message>
<message>
- <source>Android NDK toolchain version:</source>
- <translation>Toolchain-Version des Android NDK:</translation>
- </message>
- <message>
<source>Ant location:</source>
<translation>ant:</translation>
</message>
<message>
- <source>arm GDB location:</source>
- <translation>arm GDB:</translation>
- </message>
- <message>
- <source>arm GDBserver location:</source>
- <translation>arm GDBserver:</translation>
- </message>
- <message>
<source>x86 GDB location:</source>
<translation>x86 GDB:</translation>
</message>
<message>
- <source>x86 GDBserver location:</source>
- <translation>x86 GDBserver:</translation>
- </message>
- <message>
<source>OpenJDK location:</source>
<translation>OpenJDK:</translation>
</message>
@@ -28078,6 +28082,22 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<source>Remove</source>
<translation>Entfernen</translation>
</message>
+ <message>
+ <source>Android NDK tool chain version:</source>
+ <translation>Toolchain-Version des Android NDK:</translation>
+ </message>
+ <message>
+ <source>ARM GDB location:</source>
+ <translation>ARM GDB:</translation>
+ </message>
+ <message>
+ <source>ARM GDB server location:</source>
+ <translation>ARM GDB-Server:</translation>
+ </message>
+ <message>
+ <source>x86 GDB server location:</source>
+ <translation>x86 GDB-Server:</translation>
+ </message>
</context>
<context>
<name>Core::RemoveFileDialog</name>
@@ -28403,8 +28423,8 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<context>
<name>QSsh::Internal::SftpChannelPrivate</name>
<message>
- <source>Server could not start sftp subsystem.</source>
- <translation>Der Server konnte das sftp-Subsystem nicht starten.</translation>
+ <source>Server could not start SFTP subsystem.</source>
+ <translation>Der Server konnte das SFTP-Subsystem nicht starten.</translation>
</message>
<message>
<source>Unexpected packet of type %1.</source>
@@ -28523,13 +28543,32 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<source>Botan library exception: %1</source>
<translation>Ausnahmefehler in der Botan-Bibliothek: %1</translation>
</message>
+ <message numerus="yes">
+ <source>Server identification string is %n characters long, but the maximum allowed length is 255.</source>
+ <translation>
+ <numerusform>Die Zeichenkette zur Identifikation des Servers ist ein Zeichen lang, die maximal zulässige Länge ist aber 255.</numerusform>
+ <numerusform>Die Zeichenkette zur Identifikation des Servers ist %n Zeichen lang, die maximal zulässige Länge ist aber 255.</numerusform>
+ </translation>
+ </message>
<message>
- <source>Invalid protocol version: Expected &apos;2.0&apos;, got &apos;%1&apos;.</source>
- <translation>Die Versionen des Protokolls stimmen nicht überein: Erwartet &apos;2.0&apos;, erhalten %1.</translation>
+ <source>Server identification string contains illegal NUL character.</source>
+ <translation>Die Zeichenkette zur Identifikation des Servers enthält ein unzulässiges NUL-Zeichen.</translation>
</message>
<message>
- <source>Invalid server id &apos;%1&apos;.</source>
- <translation>Ungültige Server-Kennzeichnung &apos;%1&apos;.</translation>
+ <source>Server Identification string &apos;%1&apos; is invalid.</source>
+ <translation>Die Zeichenkette &apos;%1&apos; zur Identifikation des Servers ist ungültig.</translation>
+ </message>
+ <message>
+ <source>Server protocol version is &apos;%1&apos;, but needs to be 2.0 or 1.99.</source>
+ <translation>Die Version des Serverprotokolls ist &apos;%1&apos;, erforderlich ist jedoch 2.0 oder 1.99.</translation>
+ </message>
+ <message>
+ <source>Server identification string is invalid (missing carriage return).</source>
+ <translation>Die Zeichenkette zur Identifikation des Servers ist ungültig (es fehlt der Zeilenvorschub).</translation>
+ </message>
+ <message>
+ <source>Server reports protocol version 1.99, but sends data before the identification string, which is not allowed.</source>
+ <translation>Der Server gibt Protokollversion 1.99 an, sendet aber Daten vor der Zeichenkette zur Identifikation, was nicht gestattet ist.</translation>
</message>
<message>
<source>Unexpected packet of type %1.</source>
@@ -28631,7 +28670,7 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
<translation>Fehler beim Erstellen von AVD</translation>
</message>
<message>
- <source>Cannot create a new AVD, no sufficiently recent Android SDK available.
+ <source>Cannot create a new AVD. No sufficiently recent Android SDK available.
Please install an SDK of at least API version %1.</source>
<translation>Es konnte kein AVD erzeugt werden, da kein hinreichend aktuelles Android-SDK verfügbar ist.
Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translation>
@@ -28721,12 +28760,20 @@ Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translati
<translation>Rückgabewert: %1</translation>
</message>
<message>
+ <source>Deploy Qt libraries. This may take some time, please wait.</source>
+ <translation>Das Deployment der Qt-Bibliotheken kann einige Zeit dauern, bitte warten Sie.</translation>
+ </message>
+ <message>
<source>Qt Android smart installer installation failed</source>
<translation>Die Installation des Qt-Android-Smart-Installers schlug fehl</translation>
</message>
<message>
- <source>Package installation failed</source>
- <translation>Die Installation des Pakets schlug fehl</translation>
+ <source>Package installation failed.</source>
+ <translation>Die Installation des Pakets schlug fehl.</translation>
+ </message>
+ <message>
+ <source>Pulling files necessary for debugging.</source>
+ <translation>Die für das Debuggen erforderlichen Dateien werden installiert.</translation>
</message>
<message>
<source>Installing package onto %1.</source>
@@ -28736,19 +28783,11 @@ Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translati
<source>Clean old Qt libraries</source>
<translation>Alte Qt-Bibliotheken bereinigen</translation>
</message>
- <message>
- <source>Deploy Qt libraries ... this may take some time, please wait</source>
- <translation>Das Deployment der Qt-Bibliotheken kann einige Zeit dauern, bitte warten Sie</translation>
- </message>
- <message>
- <source>Pulling files necessary for debugging</source>
- <translation>Die für das Debuggen erforderlichen Dateien werden installiert</translation>
- </message>
</context>
<context>
<name>Android::Internal::AndroidDeployStepFactory</name>
<message>
- <source>Deploy to Android device/emulator</source>
+ <source>Deploy to Android device or emulator</source>
<translation>Deployment auf Android-Gerät oder Emulator</translation>
</message>
</context>
@@ -28925,8 +28964,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
<translation>Wählen Sie ein Symbol für hohe DPI-Werte aus</translation>
</message>
<message>
- <source>png images (*.png)</source>
- <translation>png-Dateien (*.png)</translation>
+ <source>PNG images (*.png)</source>
+ <translation>PNG-Dateien (*.png)</translation>
+ </message>
+ <message>
+ <source>&lt; Type or choose a permission &gt;</source>
+ <translation>&lt; Geben Sie eine Berechtigung ein oder wählen Sie eine aus &gt;</translation>
</message>
<message>
<source>Choose Medium DPI Icon</source>
@@ -28937,10 +28980,6 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
<translation>Wählen Sie ein Symbol für geringe DPI-Werte aus</translation>
</message>
<message>
- <source>&lt; type or choose a permission &gt;</source>
- <translation>&lt; Geben Sie eine Berechtigung ein oder wählen Sie eine aus &gt;</translation>
- </message>
- <message>
<source>&lt;b&gt;Package configurations&lt;/b&gt;</source>
<translation>&lt;b&gt;Paket-Konfigurationen&lt;/b&gt;</translation>
</message>
@@ -28970,15 +29009,15 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
<context>
<name>Android::Internal::AndroidRunControl</name>
<message>
- <source>Starting remote process...</source>
- <translation>Starte entfernten Prozess...</translation>
+ <source>Starting remote process.</source>
+ <translation>Starte entfernten Prozess.</translation>
</message>
</context>
<context>
<name>Android::Internal::AndroidRunControlFactory</name>
<message>
- <source>Run on Android device/emulator</source>
- <translation>Ausführung auf Android-Gerät oder Emulator</translation>
+ <source>Run on Android device or emulator.</source>
+ <translation>Ausführung auf Android-Gerät oder Emulator.</translation>
</message>
</context>
<context>
@@ -28986,46 +29025,46 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
<message>
<source>
-&apos;%1&apos; died</source>
+&apos;%1&apos; died.</source>
<translation>
-&apos;%1&apos; beendet</translation>
+&apos;%1&apos; beendet.</translation>
</message>
<message>
- <source>Failed to forward C++ debugging ports. Reason: %1</source>
- <translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
+ <source>Failed to forward C++ debugging ports. Reason: %1.</source>
+ <translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
</message>
<message>
- <source>Failed to forward C++ debugging ports</source>
- <translation>C++-Debuggerports konnten nicht übermittelt werden</translation>
+ <source>Failed to forward C++ debugging ports.</source>
+ <translation>C++-Debuggerports konnten nicht übermittelt werden.</translation>
</message>
<message>
- <source>Failed to forward QML debugging ports. Reason: %1</source>
- <translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
+ <source>Failed to forward QML debugging ports. Reason: %1.</source>
+ <translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
</message>
<message>
- <source>Failed to forward QML debugging ports</source>
- <translation>QML-Debuggerports konnten nicht übermittelt werden</translation>
+ <source>Failed to forward QML debugging ports.</source>
+ <translation>QML-Debuggerports konnten nicht übermittelt werden.</translation>
</message>
<message>
- <source>Failed to start the activity. Reason: %1</source>
- <translation>Die Aktivität konnte nicht gestartet werden: Grund: %1</translation>
+ <source>Failed to start the activity. Reason: %1.</source>
+ <translation>Die Aktivität konnte nicht gestartet werden: Grund: %1.</translation>
</message>
<message>
- <source>Unable to start &apos;%1&apos;</source>
- <translation>&apos;%1&apos; konnte nicht gestartet werden</translation>
+ <source>Unable to start &apos;%1&apos;.</source>
+ <translation>&apos;%1&apos; konnte nicht gestartet werden.</translation>
</message>
<message>
- <source>Cannot find %1 process</source>
- <translation>Der Prozess &apos;%1&apos; konnte nicht gefunden werden</translation>
+ <source>Cannot find %1 process.</source>
+ <translation>Der Prozess %1 konnte nicht gefunden werden.</translation>
</message>
<message>
<source>
-&apos;%1&apos; killed</source>
+&apos;%1&apos; killed.</source>
<translation>
-&apos;%1&apos; abgebrochen</translation>
+&apos;%1&apos; abgebrochen.</translation>
</message>
</context>
<context>
@@ -29042,12 +29081,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. &quot;org
<translation>Android-SDK-Ordner</translation>
</message>
<message>
- <source>&quot;%1&quot; doesn&apos;t seem to be an Android SDK top folder</source>
- <translation>&quot;%1&quot; ist offenbar kein Android-SDK-Ordner</translation>
+ <source>&quot;%1&quot; does not seem to be an Android SDK top folder.</source>
+ <translation>&quot;%1&quot; ist offenbar kein Android-SDK-Ordner.</translation>
</message>
<message>
- <source>&quot;%1&quot; doesn&apos;t seem to be an Android NDK top folder</source>
- <translation>&quot;%1&quot; ist offenbar kein Android-NDK-Ordner</translation>
+ <source>&quot;%1&quot; does not seem to be an Android NDK top folder.</source>
+ <translation>&quot;%1&quot; ist offenbar kein Android-NDK-Ordner.</translation>
</message>
<message>
<source>Select Android SDK folder</source>
@@ -29469,40 +29508,40 @@ Einzelschritt in den Modul und das Setzen von Haltepunkten nach Datei und Zeilen
<translation>Fehler: (%1) %2</translation>
</message>
<message>
- <source>disconnected.
+ <source>Disconnected.
</source>
- <translation>getrennt.
+ <translation>Getrennt.
</translation>
</message>
<message>
- <source>resolving host...</source>
- <translation>Hostname wird aufgelöst...</translation>
+ <source>Resolving host.</source>
+ <translation>Hostname wird aufgelöst.</translation>
</message>
<message>
- <source>connecting to debug server...</source>
- <translation>Verbinde zum Debug-Server...</translation>
+ <source>Connecting to debug server.</source>
+ <translation>Verbinde zum Debug-Server.</translation>
</message>
<message>
- <source>connected.
+ <source>Connected.
</source>
- <translation>verbunden.
+ <translation>Verbunden.
</translation>
</message>
<message>
- <source>closing...</source>
- <translation>schließe Verbindung...</translation>
+ <source>Closing.</source>
+ <translation>Schließe Verbindung.</translation>
</message>
</context>
<context>
<name>Debugger::Internal::QmlInspectorAgent</name>
<message>
- <source> success : </source>
- <translation> Erfolg : </translation>
+ <source>Success: </source>
+ <translation>Erfolg: </translation>
</message>
<message>
- <source>properties</source>
+ <source>Properties</source>
<translation>Eigenschaften</translation>
</message>
</context>
@@ -30063,8 +30102,8 @@ nicht konfiguriert ist.</translation>
<translation>Gerrit...</translation>
</message>
<message>
- <source>git is not available.</source>
- <translation>git ist nicht verfügbar.</translation>
+ <source>Git is not available.</source>
+ <translation>Git ist nicht verfügbar.</translation>
</message>
<message>
<source>Enter Local Repository for &apos;%1&apos; (%2)</source>
@@ -30243,7 +30282,7 @@ Möchten Sie sie zum Projekt hinzufügen?&lt;/html&gt;</translation>
<translation>Der Typ des Geräts, auf dem die Anwendung laufen soll.</translation>
</message>
<message>
- <source>Device Type:</source>
+ <source>Device type:</source>
<translation>Gerätetyp:</translation>
</message>
</context>
@@ -30746,8 +30785,16 @@ Soll es noch einmal versucht werden?</translation>
<context>
<name>QtSupport::CustomExecutableRunConfiguration</name>
<message>
- <source>Could not find the executable, please specify one.</source>
- <translation>Es konnte keine ausführbare Datei gefunden werden; bitte geben Sie eine an.</translation>
+ <source>No executable.</source>
+ <translation>Keine ausführbare Datei.</translation>
+ </message>
+ <message>
+ <source>The executable
+%1
+cannot be found in the path.</source>
+ <translation>Die ausführbare Datei
+%1
+konnte nicht im Pfad gefunden werden.</translation>
</message>
<message>
<source>Clean Environment</source>
@@ -30914,8 +30961,8 @@ Soll es noch einmal versucht werden?</translation>
<context>
<name>Android::Internal::AndroidQtVersion</name>
<message>
- <source>Failed to detect the ABI(s) used by the Qt version.</source>
- <translation>Es konnten keine ABI(s)für diese Qt-Version bestimmt werden.</translation>
+ <source>Failed to detect the ABIs used by the Qt version.</source>
+ <translation>Die von der Qt-Version verwendeten ABIs konnten nicht bestimmt werden.</translation>
</message>
<message>
<source>Android</source>
@@ -31225,10 +31272,6 @@ Fehlerausgabe: %1</translation>
<translation>Check Out</translation>
</message>
<message>
- <source>&amp;Checkout Comment:</source>
- <translation>&amp;Checkout-Kommentar:</translation>
- </message>
- <message>
<source>&amp;Reserved</source>
<translation>&amp;Reserviert</translation>
</message>
@@ -31245,6 +31288,10 @@ Fehlerausgabe: %1</translation>
<extracomment>Hijack: Unset read-only flag without check-out. This is used for local changes which the user does not want to commit.</extracomment>
<translation>Datei &amp;hijacked verwenden</translation>
</message>
+ <message>
+ <source>&amp;Checkout comment:</source>
+ <translation>&amp;Checkout-Kommentar:</translation>
+ </message>
</context>
<context>
<name>ClearCase::Internal::SettingsPage</name>
@@ -31352,15 +31399,6 @@ Fehlerausgabe: %1</translation>
<translation>Ge&amp;ladene Version</translation>
</message>
<message>
- <source>Created By:</source>
- <translation>Erstellt von:</translation>
- </message>
- <message>
- <source>Created On:</source>
- <extracomment>Date</extracomment>
- <translation>Erstellt am:</translation>
- </message>
- <message>
<source>Version after &amp;update</source>
<translation>Version nach &amp;Aktualisierung</translation>
</message>
@@ -31368,6 +31406,15 @@ Fehlerausgabe: %1</translation>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;b&gt;NOTE: You will not be able to check in this file without merging the changes (not supported by the plugin)&lt;/b&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;b&gt;Hinweis: Diese Datei kann nicht ohne Mergen der Änderungen eingecheckt werden (durch das Plugin nicht unterstützt)&lt;/b&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
+ <message>
+ <source>Created by:</source>
+ <translation>Erstellt von:</translation>
+ </message>
+ <message>
+ <source>Created on:</source>
+ <extracomment>Date</extracomment>
+ <translation>Erstellt am:</translation>
+ </message>
</context>
<context>
<name>Android::Internal::AvdModel</name>
@@ -31388,7 +31435,7 @@ Fehlerausgabe: %1</translation>
<context>
<name>ClearCase::Internal::ActivitySelector</name>
<message>
- <source>Select &amp;Activity:</source>
+ <source>Select &amp;activity:</source>
<translation>Aktivität &amp;auswählen:</translation>
</message>
<message>
@@ -31630,10 +31677,26 @@ Fehlerausgabe: %1</translation>
<translation>Die Datei ist bereits ausgecheckt.</translation>
</message>
<message>
+ <source>ClearCase Add File %1</source>
+ <translation>ClearCase Datei %1 hinzufügen</translation>
+ </message>
+ <message>
+ <source>ClearCase Remove Element %1</source>
+ <translation>ClearCase Element %1 entfernen</translation>
+ </message>
+ <message>
<source>This operation is irreversible. Are you sure?</source>
<translation>Dieser Vorgang kann nicht rückgängig gemacht werden. Sind Sie sicher?</translation>
</message>
<message>
+ <source>ClearCase Remove File %1</source>
+ <translation>ClearCase Datei %1 löschen</translation>
+ </message>
+ <message>
+ <source>ClearCase Rename File %1 -&gt; %2</source>
+ <translation>ClearCase Datei %1 -&gt; %2 umbenennen</translation>
+ </message>
+ <message>
<source>Do you want to undo hijack of &apos;%1&apos;?</source>
<translation>Möchten Sie den Hijack von &quot;%1&quot; rückgängig machen?</translation>
</message>
@@ -31670,22 +31733,6 @@ Fehlerausgabe: %1</translation>
<translation>&amp;Kommentar eingeben:</translation>
</message>
<message>
- <source>ClearCase Add File</source>
- <translation>ClearCase Datei hinzufügen</translation>
- </message>
- <message>
- <source>ClearCase Remove Element</source>
- <translation>ClearCase Element entfernen</translation>
- </message>
- <message>
- <source>ClearCase Remove File</source>
- <translation>ClearCase Datei löschen</translation>
- </message>
- <message>
- <source>ClearCase Rename File</source>
- <translation>ClearCase Datei umbenennen</translation>
- </message>
- <message>
<source>Activity Headline</source>
<translation>Titel der Aktivität</translation>
</message>
@@ -31747,7 +31794,7 @@ Fehlerausgabe: %1</translation>
</message>
<message>
<source>Server port:</source>
- <translation type="unfinished"></translation>
+ <translation>Server-Port:</translation>
</message>
<message>
<source>Select Working Directory</source>
@@ -31997,25 +32044,24 @@ Fehlerausgabe: %1</translation>
<context>
<name>Debugger::Internal::DebuggerKitConfigWidget</name>
<message>
- <source>The debugger to use for this kit.</source>
- <translation>Der für dieses Kit zu verwendende Debugger.</translation>
+ <source>Manage...</source>
+ <translation>Verwalten...</translation>
</message>
<message>
- <source>&lt;html&gt;&lt;body&gt;&lt;p&gt;Specify the path to the &lt;a href=&quot;%1&quot;&gt;Windows Console Debugger executable&lt;/a&gt; (%2) here.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <extracomment>Label text for path configuration. %2 is &quot;x-bit version&quot;.</extracomment>
- <translation>&lt;html&gt;&lt;body&gt;&lt;p&gt;Geben Sie den Pfad zu der ausführbaren Datei des &lt;a href=&quot;%1&quot;&gt;Windows Console Debuggers&lt;/a&gt; (%2) an.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ <source>The debugger to use for this kit.</source>
+ <translation>Der für dieses Kit zu verwendende Debugger.</translation>
</message>
<message>
- <source>64-bit version</source>
- <translation>64-bit-Version</translation>
+ <source>Auto-detect</source>
+ <translation>Automatisch bestimmen</translation>
</message>
<message>
- <source>32-bit version</source>
- <translation>32-bit-Version</translation>
+ <source>Edit...</source>
+ <translation>Bearbeiten...</translation>
</message>
<message>
- <source>Auto detect</source>
- <translation>Automatisch bestimmen</translation>
+ <source>Debugger for &quot;%1&quot;</source>
+ <translation>Debugger für &quot;%1&quot;</translation>
</message>
<message>
<source>Debugger:</source>
@@ -32041,8 +32087,12 @@ Fehlerausgabe: %1</translation>
<translation>Der Pfad zum Debugger muss als absoluter Pfad angegeben werden (%1).</translation>
</message>
<message>
- <source>%1 using &apos;%2&apos;</source>
- <translation>%1 unter Verwendung von &apos;%2&apos;</translation>
+ <source>%1 &lt;None&gt;</source>
+ <translation>%1 &lt;keine&gt;</translation>
+ </message>
+ <message>
+ <source>%1 using &quot;%2&quot;</source>
+ <translation>%1 unter Verwendung von &quot;%2&quot;</translation>
</message>
<message>
<source>Debugger</source>
@@ -32187,8 +32237,12 @@ Fehlerausgabe: %1</translation>
<context>
<name>ProjectExplorer::Internal::KitManagerConfigWidget</name>
<message>
- <source>Kits</source>
- <translation>Kits</translation>
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message>
+ <source>Kit name and icon.</source>
+ <translation>Kit-Name und Symbol.</translation>
</message>
<message>
<source>Select Icon</source>
@@ -32314,4 +32368,42 @@ Fehlerausgabe: %1</translation>
<translation>Keine</translation>
</message>
</context>
+<context>
+ <name>Debugger::Internal::DebuggerKitConfigDialog</name>
+ <message>
+ <source>&amp;Engine:</source>
+ <translation>&amp;Engine:</translation>
+ </message>
+ <message>
+ <source>&amp;Binary:</source>
+ <translation>&amp;Ausführbare Datei:</translation>
+ </message>
+ <message>
+ <source>64-bit version</source>
+ <translation>64-bit-Version</translation>
+ </message>
+ <message>
+ <source>32-bit version</source>
+ <translation>32-bit-Version</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;body&gt;&lt;p&gt;Specify the path to the &lt;a href=&quot;%1&quot;&gt;Windows Console Debugger executable&lt;/a&gt; (%2) here.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <extracomment>Label text for path configuration. %2 is &quot;x-bit version&quot;.</extracomment>
+ <translation>&lt;html&gt;&lt;body&gt;&lt;p&gt;Geben Sie den Pfad zu der ausführbaren Datei des &lt;a href=&quot;%1&quot;&gt;Windows Console Debuggers&lt;/a&gt; (%2) an.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>ProjectExplorer::RunConfiguration</name>
+ <message>
+ <source>Unknown error.</source>
+ <translation>Unbekannter Fehler.</translation>
+ </message>
+</context>
+<context>
+ <name>CustomExecutableDialog</name>
+ <message>
+ <source>Could not find the executable, please specify one.</source>
+ <translation>Es konnte keine ausführbare Datei gefunden werden; bitte geben Sie eine an.</translation>
+ </message>
+</context>
</TS>
diff --git a/src/app/main.cpp b/src/app/main.cpp
index e96692b04f..b3cf0c7cd2 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -219,7 +219,7 @@ int main(int argc, char **argv)
setrlimit(RLIMIT_NOFILE, &rl);
#endif
-#ifdef Q_WS_X11
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
// QML is unusable with the xlib backend
QApplication::setGraphicsSystem("raster");
#endif
diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp
index 31eefe8dee..8f8da60218 100644
--- a/src/libs/cplusplus/CppRewriter.cpp
+++ b/src/libs/cplusplus/CppRewriter.cpp
@@ -395,7 +395,8 @@ FullySpecifiedType UseMinimalNames::apply(const Name *name, Rewrite *rewrite) co
SubstitutionEnvironment *env = rewrite->env;
Scope *scope = env->scope();
- if (name->isTemplateNameId())
+ if (name->isTemplateNameId() ||
+ (name->isQualifiedNameId() && name->asQualifiedNameId()->name()->isTemplateNameId()))
return FullySpecifiedType();
if (! scope)
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 8edd3b30ca..3e67564407 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -708,11 +708,22 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
if (!referenceClass)
return reference;
+ const TemplateNameId *templId = name->asTemplateNameId();
+ if (_alreadyConsideredClasses.contains(referenceClass) ||
+ (templId &&
+ _alreadyConsideredTemplates.contains(templId))) {
+ return reference;
+ }
+
+ if (!name->isTemplateNameId())
+ _alreadyConsideredClasses.insert(referenceClass);
+
QSet<ClassOrNamespace *> knownUsings = reference->usings().toSet();
// If we are dealling with a template type, more work is required, since we need to
// construct all instantiation data.
- if (const TemplateNameId *templId = name->asTemplateNameId()) {
+ if (templId) {
+ _alreadyConsideredTemplates.insert(templId);
ClassOrNamespace *instantiation = _factory->allocClassOrNamespace(reference);
instantiation->_templateId = templId;
instantiation->_instantiationOrigin = origin;
@@ -786,18 +797,41 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
}
}
+ _alreadyConsideredTemplates.clear(templId);
return instantiation;
}
+ if (allBases.isEmpty() || allBases.size() == knownUsings.size())
+ return reference;
+
+ QList<const Name *> fullyQualifiedNameForReferenceClass =
+ LookupContext::fullyQualifiedName(referenceClass);
// Find the missing bases for regular (non-template) types.
// Ex.: class A : public B<Some>::Type {};
foreach (const Name *baseName, allBases) {
ClassOrNamespace *binding = this;
if (const QualifiedNameId *qBaseName = baseName->asQualifiedNameId()) {
+ QList<const Name *> fullyQualifiedNameForBaseClass;
+ addNames(baseName, &fullyQualifiedNameForBaseClass);
+ if (compareFullyQualifiedName(fullyQualifiedNameForReferenceClass,
+ fullyQualifiedNameForBaseClass)) {
+ continue;
+ }
+
if (const Name *qualification = qBaseName->base())
binding = lookupType(qualification);
+ else if (binding->parent() != 0)
+ //if this is global identifier we take global namespace
+ //Ex: class A{}; namespace NS { class A: public ::A{}; }
+ binding = binding->globalNamespace();
+ else
+ //if we are in the global scope
+ continue;
baseName = qBaseName->name();
}
+ else if (compareName(name, baseName)) {
+ continue;
+ }
if (binding) {
ClassOrNamespace * baseBinding = binding->lookupType(baseName);
@@ -806,7 +840,7 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
}
}
-
+ _alreadyConsideredClasses.clear(referenceClass);
return reference;
}
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index fef317fd61..6db8b1187d 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -45,6 +45,33 @@
namespace CPlusPlus {
class CreateBindings;
+class Class;
+template<typename T>
+class AlreadyConsideredClassContainer
+{
+public:
+ AlreadyConsideredClassContainer() : _class(0) {}
+ void insert(const T *item)
+ {
+ if (_container.isEmpty())
+ _class = item;
+ _container.insert(item);
+ }
+ bool contains(const T *item)
+ {
+ return _container.contains(item);
+ }
+
+ void clear(const T *item)
+ {
+ if (_class != item)
+ _container.clear();
+ }
+
+private:
+ QSet<const T *> _container;
+ const T * _class;
+};
class CPLUSPLUS_EXPORT ClassOrNamespace
{
@@ -112,6 +139,9 @@ private:
const TemplateNameId *_templateId;
ClassOrNamespace *_instantiationOrigin;
+ AlreadyConsideredClassContainer<Class> _alreadyConsideredClasses;
+ AlreadyConsideredClassContainer<TemplateNameId> _alreadyConsideredTemplates;
+
friend class CreateBindings;
};
diff --git a/src/libs/qmldebug/baseenginedebugclient.cpp b/src/libs/qmldebug/baseenginedebugclient.cpp
index a669d59f6b..15acd7a6c1 100644
--- a/src/libs/qmldebug/baseenginedebugclient.cpp
+++ b/src/libs/qmldebug/baseenginedebugclient.cpp
@@ -76,8 +76,8 @@ void BaseEngineDebugClient::decode(QDataStream &ds,
QmlObjectData data;
ds >> data;
int parentId = -1;
- if (objectName() == QLatin1String("QmlDebugger") &&
- serviceVersion() >= Constants::CURRENT_SUPPORTED_VERSION )
+ // qt > 4.8.3
+ if (objectName() != QLatin1String(Constants::QDECLARATIVE_ENGINE))
ds >> parentId;
o.m_debugId = data.objectId;
o.m_className = data.objectType;
@@ -184,19 +184,15 @@ void BaseEngineDebugClient::messageReceived(const QByteArray &data)
QDataStream ds(data);
int queryId;
QByteArray type;
- ds >> type;
+ ds >> type >> queryId;
if (type == "OBJECT_CREATED") {
int engineId;
int objectId;
- ds >> engineId >> objectId;
- emit newObject(engineId, objectId, -1);
- return;
- }
-
- ds >> queryId;
-
- if (type == "LIST_ENGINES_R") {
+ int parentId;
+ ds >> engineId >> objectId >> parentId;
+ emit newObject(engineId, objectId, parentId);
+ } else if (type == "LIST_ENGINES_R") {
int count;
ds >> count;
QList<EngineReference> engines;
@@ -398,7 +394,7 @@ quint32 BaseEngineDebugClient::setBindingForObject(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
+ ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
<< bindingExpression << isLiteralValue << source << line;
sendMessage(message);
}
@@ -414,7 +410,7 @@ quint32 BaseEngineDebugClient::resetBindingForObject(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
+ ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
sendMessage(message);
}
return id;
@@ -429,7 +425,7 @@ quint32 BaseEngineDebugClient::setMethodBody(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("SET_METHOD_BODY") << objectDebugId
+ ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
<< methodName << methodBody;
sendMessage(message);
}
diff --git a/src/libs/qmldebug/qmlenginedebugclient.cpp b/src/libs/qmldebug/declarativeenginedebugclient.cpp
index 07c69a497c..2a5191e2a1 100644
--- a/src/libs/qmldebug/qmlenginedebugclient.cpp
+++ b/src/libs/qmldebug/declarativeenginedebugclient.cpp
@@ -27,18 +27,18 @@
**
**************************************************************************/
-#include "qmlenginedebugclient.h"
+#include "declarativeenginedebugclient.h"
#include "qmldebugconstants.h"
namespace QmlDebug {
-QmlEngineDebugClient::QmlEngineDebugClient(
+DeclarativeEngineDebugClient::DeclarativeEngineDebugClient(
QmlDebugConnection *connection)
- : BaseEngineDebugClient(QLatin1String(Constants::QML_DEBUGGER), connection)
+ : BaseEngineDebugClient(QLatin1String(Constants::QDECLARATIVE_ENGINE), connection)
{
}
-quint32 QmlEngineDebugClient::setBindingForObject(
+quint32 DeclarativeEngineDebugClient::setBindingForObject(
int objectDebugId,
const QString &propertyName,
const QVariant &bindingExpression,
@@ -50,14 +50,14 @@ quint32 QmlEngineDebugClient::setBindingForObject(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
+ ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
<< bindingExpression << isLiteralValue << source << line;
sendMessage(message);
}
return id;
}
-quint32 QmlEngineDebugClient::resetBindingForObject(
+quint32 DeclarativeEngineDebugClient::resetBindingForObject(
int objectDebugId,
const QString &propertyName)
{
@@ -66,13 +66,13 @@ quint32 QmlEngineDebugClient::resetBindingForObject(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
+ ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
sendMessage(message);
}
return id;
}
-quint32 QmlEngineDebugClient::setMethodBody(
+quint32 DeclarativeEngineDebugClient::setMethodBody(
int objectDebugId, const QString &methodName,
const QString &methodBody)
{
@@ -81,26 +81,24 @@ quint32 QmlEngineDebugClient::setMethodBody(
id = getId();
QByteArray message;
QDataStream ds(&message, QIODevice::WriteOnly);
- ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
+ ds << QByteArray("SET_METHOD_BODY") << objectDebugId
<< methodName << methodBody;
sendMessage(message);
}
return id;
}
-void QmlEngineDebugClient::messageReceived(const QByteArray &data)
+void DeclarativeEngineDebugClient::messageReceived(const QByteArray &data)
{
QDataStream ds(data);
- int queryId;
QByteArray type;
- ds >> type >> queryId;
+ ds >> type;
if (type == "OBJECT_CREATED") {
int engineId;
int objectId;
- int parentId;
- ds >> engineId >> objectId >> parentId;
- emit newObject(engineId, objectId, parentId);
+ ds >> engineId >> objectId;
+ emit newObject(engineId, objectId, -1);
return;
} else {
BaseEngineDebugClient::messageReceived(data);
diff --git a/src/libs/qmldebug/declarativeenginedebugclient.h b/src/libs/qmldebug/declarativeenginedebugclient.h
index 5cfe28279f..2807163ff0 100644
--- a/src/libs/qmldebug/declarativeenginedebugclient.h
+++ b/src/libs/qmldebug/declarativeenginedebugclient.h
@@ -40,10 +40,18 @@ class QMLDEBUG_EXPORT DeclarativeEngineDebugClient : public BaseEngineDebugClien
{
Q_OBJECT
public:
- DeclarativeEngineDebugClient(QmlDebugConnection *conn)
- : BaseEngineDebugClient(QLatin1String("QDeclarativeEngine"), conn)
- {
- }
+ explicit DeclarativeEngineDebugClient(QmlDebugConnection *conn);
+
+ quint32 setBindingForObject(int objectDebugId, const QString &propertyName,
+ const QVariant &bindingExpression,
+ bool isLiteralValue,
+ QString source, int line);
+ quint32 resetBindingForObject(int objectDebugId, const QString &propertyName);
+ quint32 setMethodBody(int objectDebugId, const QString &methodName,
+ const QString &methodBody);
+
+protected:
+ void messageReceived(const QByteArray &data);
};
} // namespace QmlDebug
diff --git a/src/libs/qmldebug/declarativeenginedebugclientv2.h b/src/libs/qmldebug/declarativeenginedebugclientv2.h
new file mode 100644
index 0000000000..6db5743935
--- /dev/null
+++ b/src/libs/qmldebug/declarativeenginedebugclientv2.h
@@ -0,0 +1,51 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: http://www.qt-project.org/
+**
+** GNU Lesser General Public License Usage
+**
+** 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.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**************************************************************************/
+
+#ifndef DECLARATIVEENGINEDEBUGCLIENTV2_H
+#define DECLARATIVEENGINEDEBUGCLIENTV2_H
+
+#include "baseenginedebugclient.h"
+
+namespace QmlDebug {
+
+class QmlDebugConnection;
+
+class QMLDEBUG_EXPORT DeclarativeEngineDebugClientV2 : public BaseEngineDebugClient
+{
+ Q_OBJECT
+public:
+ explicit DeclarativeEngineDebugClientV2(QmlDebugConnection *conn)
+ : BaseEngineDebugClient(QLatin1String("DeclarativeDebugger"), conn)
+ {
+ }
+};
+
+} // namespace QmlDebug
+
+#endif // DECLARATIVEENGINEDEBUGCLIENTV2_H
diff --git a/src/libs/qmldebug/qdebugmessageclient.cpp b/src/libs/qmldebug/qdebugmessageclient.cpp
index c6c6433e67..48ffa89b5b 100644
--- a/src/libs/qmldebug/qdebugmessageclient.cpp
+++ b/src/libs/qmldebug/qdebugmessageclient.cpp
@@ -55,30 +55,17 @@ void QDebugMessageClient::messageReceived(const QByteArray &data)
ds >> command;
if (command == "MESSAGE") {
- if (serviceVersion() == 1.0) {
- QByteArray messagePacket;
- ds >> messagePacket;
-
- QByteArray debugMessage;
- int type;
- QDataStream ms(messagePacket);
- ms >> type >> debugMessage;
- QDebugContextInfo info;
- emit message(QtMsgType(type), QString::fromUtf8(debugMessage.data()),
- info);
- } else {
- int type;
- int line;
- QByteArray debugMessage;
- QByteArray file;
- QByteArray function;
- ds >> type >> debugMessage >> file >> line >> function;
- QDebugContextInfo info;
- info.line = line;
- info.file = QString::fromUtf8(file);
- info.function = QString::fromUtf8(function);
- emit message(QtMsgType(type), QString::fromUtf8(debugMessage), info);
- }
+ int type;
+ int line;
+ QByteArray debugMessage;
+ QByteArray file;
+ QByteArray function;
+ ds >> type >> debugMessage >> file >> line >> function;
+ QDebugContextInfo info;
+ info.line = line;
+ info.file = QString::fromUtf8(file);
+ info.function = QString::fromUtf8(function);
+ emit message(QtMsgType(type), QString::fromUtf8(debugMessage), info);
}
}
diff --git a/src/libs/qmldebug/qmldebug-lib.pri b/src/libs/qmldebug/qmldebug-lib.pri
index a1406ee580..54f09258b0 100644
--- a/src/libs/qmldebug/qmldebug-lib.pri
+++ b/src/libs/qmldebug/qmldebug-lib.pri
@@ -11,6 +11,7 @@ HEADERS += \
$$PWD/qmldebugclient.h \
$$PWD/baseenginedebugclient.h \
$$PWD/declarativeenginedebugclient.h \
+ $$PWD/declarativeenginedebugclientv2.h \
$$PWD/qmloutputparser.h \
$$PWD/qmldebug_global.h \
$$PWD/qmlprofilereventtypes.h \
@@ -32,8 +33,8 @@ SOURCES += \
$$PWD/qpacketprotocol.cpp \
$$PWD/qv8profilerclient.cpp \
$$PWD/qdebugmessageclient.cpp \
- $$PWD/qmlenginedebugclient.cpp \
$$PWD/basetoolsclient.cpp \
$$PWD/declarativetoolsclient.cpp \
- $$PWD/qmltoolsclient.cpp
+ $$PWD/qmltoolsclient.cpp \
+ $$PWD/declarativeenginedebugclient.cpp
diff --git a/src/libs/qmldebug/qmldebug.qbs b/src/libs/qmldebug/qmldebug.qbs
index f3269e3ec2..5b6d5d21cf 100644
--- a/src/libs/qmldebug/qmldebug.qbs
+++ b/src/libs/qmldebug/qmldebug.qbs
@@ -20,7 +20,9 @@ QtcLibrary {
"baseenginedebugclient.h",
"basetoolsclient.cpp",
"basetoolsclient.h",
+ "declarativeenginedebugclient.cpp",
"declarativeenginedebugclient.h",
+ "declarativeenginedebugclientv2.h",
"declarativetoolsclient.cpp",
"declarativetoolsclient.h",
"qdebugmessageclient.cpp",
diff --git a/src/libs/qmldebug/qmldebugconstants.h b/src/libs/qmldebug/qmldebugconstants.h
index 36ccf4fb9e..147d4f62ec 100644
--- a/src/libs/qmldebug/qmldebugconstants.h
+++ b/src/libs/qmldebug/qmldebugconstants.h
@@ -42,8 +42,7 @@ const char STR_IGNORING_DEBUGGER[] = "Ignoring \"-qmljsdebugger=";
const char STR_IGNORING_DEBUGGER2[] = "Ignoring\"-qmljsdebugger="; // There is (was?) a bug in one of the error strings - safest to handle both
const char STR_CONNECTION_ESTABLISHED[] = "Connection established";
-const char QML_DEBUGGER[] = "QmlDebugger";
-const float CURRENT_SUPPORTED_VERSION = 2.0;
+const char QDECLARATIVE_ENGINE[] = "QDeclarativeEngine";
} // namespace Constants
} // namespace QmlDebug
diff --git a/src/libs/qmldebug/qmlenginedebugclient.h b/src/libs/qmldebug/qmlenginedebugclient.h
index eea286b810..7231d65d7d 100644
--- a/src/libs/qmldebug/qmlenginedebugclient.h
+++ b/src/libs/qmldebug/qmlenginedebugclient.h
@@ -40,18 +40,10 @@ class QMLDEBUG_EXPORT QmlEngineDebugClient : public BaseEngineDebugClient
{
Q_OBJECT
public:
- explicit QmlEngineDebugClient(QmlDebugConnection *conn);
-
- quint32 setBindingForObject(int objectDebugId, const QString &propertyName,
- const QVariant &bindingExpression,
- bool isLiteralValue,
- QString source, int line);
- quint32 resetBindingForObject(int objectDebugId, const QString &propertyName);
- quint32 setMethodBody(int objectDebugId, const QString &methodName,
- const QString &methodBody);
-
-protected:
- void messageReceived(const QByteArray &data);
+ explicit QmlEngineDebugClient(QmlDebugConnection *conn)
+ : BaseEngineDebugClient(QLatin1String("QmlDebugger"), conn)
+ {
+ }
};
} // namespace QmlDebug
diff --git a/src/libs/ssh/sftpchannel.cpp b/src/libs/ssh/sftpchannel.cpp
index 152afaa453..bba482ae9d 100644
--- a/src/libs/ssh/sftpchannel.cpp
+++ b/src/libs/ssh/sftpchannel.cpp
@@ -272,7 +272,7 @@ void SftpChannelPrivate::handleChannelFailure()
throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR,
"Unexpected SSH_MSG_CHANNEL_FAILURE packet.");
}
- emit initializationFailed(tr("Server could not start sftp subsystem."));
+ emit initializationFailed(tr("Server could not start SFTP subsystem."));
closeChannel();
}
diff --git a/src/libs/ssh/sshconnection.cpp b/src/libs/ssh/sshconnection.cpp
index e03304ca2e..0498b4f285 100644
--- a/src/libs/ssh/sshconnection.cpp
+++ b/src/libs/ssh/sshconnection.cpp
@@ -365,8 +365,8 @@ void SshConnectionPrivate::handleServerId()
if (newLinePos > 255 - 1) {
throw SshServerException(SSH_DISCONNECT_PROTOCOL_ERROR,
"Identification string too long.",
- tr("Server identification string is %1 characters long, but the maximum "
- "allowed length is 255.").arg(newLinePos + 1));
+ tr("Server identification string is %n characters long, but the maximum "
+ "allowed length is 255.", 0, newLinePos + 1));
}
const bool hasCarriageReturn = m_incomingData.at(newLinePos - 1) == '\r';
diff --git a/src/libs/ssh/sshkeycreationdialog.cpp b/src/libs/ssh/sshkeycreationdialog.cpp
index 287ea8e21a..d3d59a88f0 100644
--- a/src/libs/ssh/sshkeycreationdialog.cpp
+++ b/src/libs/ssh/sshkeycreationdialog.cpp
@@ -106,7 +106,7 @@ void SshKeyCreationDialog::saveKeys()
{
const QString parentDir = QFileInfo(privateKeyFilePath()).dir().path();
if (!QDir::root().mkpath(parentDir)) {
- QMessageBox::critical(this, tr("Failure To Save Key File"),
+ QMessageBox::critical(this, tr("Cannot Save Key File"),
tr("Failed to create directory: '%1'.").arg(parentDir));
return;
}
@@ -114,7 +114,7 @@ void SshKeyCreationDialog::saveKeys()
QFile privateKeyFile(privateKeyFilePath());
if (!privateKeyFile.open(QIODevice::WriteOnly)
|| !privateKeyFile.write(m_keyGenerator->privateKey())) {
- QMessageBox::critical(this, tr("Saving Private Key File failed"),
+ QMessageBox::critical(this, tr("Cannot Save Private Key File"),
tr("The private key file could not be saved: %1").arg(privateKeyFile.errorString()));
return;
}
@@ -123,7 +123,7 @@ void SshKeyCreationDialog::saveKeys()
QFile publicKeyFile(publicKeyFilePath());
if (!publicKeyFile.open(QIODevice::WriteOnly)
|| !publicKeyFile.write(m_keyGenerator->publicKey())) {
- QMessageBox::critical(this, tr("Saving Public Key File failed"),
+ QMessageBox::critical(this, tr("Cannot Save Public Key File"),
tr("The public key file could not be saved: %1").arg(publicKeyFile.errorString()));
return;
}
diff --git a/src/libs/zeroconf/avahiLib.cpp b/src/libs/zeroconf/avahiLib.cpp
index 69b9993781..d23eccc4c4 100644
--- a/src/libs/zeroconf/avahiLib.cpp
+++ b/src/libs/zeroconf/avahiLib.cpp
@@ -346,7 +346,7 @@ public:
if (m_simplePollFree)
m_simplePollFree(connection->simple_poll);
delete connection;
- setError(true, ZConfLib::tr("%1 could not create a client (probably the daemon is not running)").arg(name()));
+ setError(true, ZConfLib::tr("%1 cannot create a client. The daemon is probably not running.").arg(name()));
return kDNSServiceErr_Unknown;
}
*sdRef = reinterpret_cast<ConnectionRef>(connection);
@@ -472,16 +472,16 @@ extern "C" void cAvahiClientReply (AvahiClient * /*s*/, AvahiClientState state,
break;
case (AVAHI_CLIENT_S_COLLISION):
/* Server state: COLLISION */
- lib->setError(true, ZConfLib::tr("cAvahiClient, server collision"));
+ lib->setError(true, ZConfLib::tr("cAvahiClient, server collision."));
break;
case (AVAHI_CLIENT_FAILURE):
- lib->setError(true, ZConfLib::tr("cAvahiClient, some kind of error happened on the client side"));
+ lib->setError(true, ZConfLib::tr("cAvahiClient, an error occurred on the client side."));
break;
case (AVAHI_CLIENT_CONNECTING):
- lib->setError(false, ZConfLib::tr("cAvahiClient, still connecting, no server available"));
+ lib->setError(false, ZConfLib::tr("cAvahiClient, still connecting, no server available."));
break;
default:
- lib->setError(true, ZConfLib::tr("unexpected state %1 in cAvahiClientReply")
+ lib->setError(true, ZConfLib::tr("Unexpected state %1 in cAvahiClientReply.")
.arg(state));
}
}
@@ -532,7 +532,7 @@ extern "C" void cAvahiBrowseReply(
break;
default:
browser->mainConnection->lib->setError(true, ZConfLib::tr(
- "unexpected state %1 in cAvahiBrowseReply")
+ "Unexpected state %1 in cAvahiBrowseReply.")
.arg(event));
}
}
diff --git a/src/libs/zeroconf/servicebrowser.cpp b/src/libs/zeroconf/servicebrowser.cpp
index fff6069df3..9a31075255 100644
--- a/src/libs/zeroconf/servicebrowser.cpp
+++ b/src/libs/zeroconf/servicebrowser.cpp
@@ -1849,7 +1849,7 @@ void MainConnection::createConnection()
if (m_nErrs > lib->maxErrors() || !lib->isOk()) {
abortLib();
} else if (lib->tryStartDaemon(this)) {
- appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 daemon starting seem successful, continuing.")
+ appendError(ErrorMessage::WarningLevel, tr("Starting the Zeroconf daemon using %1 seems successful, continuing.")
.arg(lib->name()));
} else {
appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 failed because no daemon is running.")
@@ -1863,7 +1863,7 @@ void MainConnection::createConnection()
}
}
if (status() < Stopping) {
- startupPhase(zeroConfLibInstance()->nFallbacksTot() + 3, tr("Succeded using %1.").arg(lib->name()));
+ startupPhase(zeroConfLibInstance()->nFallbacksTot() + 3, tr("Succeeded using %1.").arg(lib->name()));
appendError(ErrorMessage::NoteLevel,
tr("MainConnection could successfully create a connection using %1.")
.arg(lib->name()));
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 17e28257a7..c6b9d9dbe4 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -439,7 +439,7 @@ bool AndroidConfigurations::createAVD(int minApiLevel) const
avdDialog.targetComboBox->setModel(&model);
if (!model.rowCount()) {
QMessageBox::critical(0, tr("Error Creating AVD"),
- tr("Cannot create a new AVD, no sufficiently recent Android SDK available.\n"
+ tr("Cannot create a new AVD. No sufficiently recent Android SDK available.\n"
"Please install an SDK of at least API version %1.").
arg(minApiLevel));
return false;
diff --git a/src/plugins/android/androidcreatekeystorecertificate.ui b/src/plugins/android/androidcreatekeystorecertificate.ui
index 553cdba0f6..ed0d4ecf8b 100644
--- a/src/plugins/android/androidcreatekeystorecertificate.ui
+++ b/src/plugins/android/androidcreatekeystorecertificate.ui
@@ -248,7 +248,7 @@
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
- <string>City or Locality:</string>
+ <string>City or locality:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -261,7 +261,7 @@
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
- <string>State or Province:</string>
+ <string>State or province:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
diff --git a/src/plugins/android/androiddeploystep.cpp b/src/plugins/android/androiddeploystep.cpp
index df8fc9867b..a233c625b0 100644
--- a/src/plugins/android/androiddeploystep.cpp
+++ b/src/plugins/android/androiddeploystep.cpp
@@ -255,7 +255,7 @@ bool AndroidDeployStep::deployPackage()
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
<< QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/qt"));
- writeOutput(tr("Deploy Qt libraries ... this may take some time, please wait"));
+ writeOutput(tr("Deploy Qt libraries. This may take some time, please wait."));
const QString tempPath = QDir::tempPath() + QLatin1String("/android_qt_libs_") + m_packageName;
AndroidPackageCreationStep::removeDirectory(tempPath);
QStringList stripFiles;
@@ -299,13 +299,13 @@ bool AndroidDeployStep::deployPackage()
if (!runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
QStringList() << QLatin1String("-s") << m_deviceSerialNumber << QLatin1String("install") << package)) {
- raiseError(tr("Package installation failed"));
+ raiseError(tr("Package installation failed."));
disconnect(deployProc, 0, this, 0);
deployProc->deleteLater();
return false;
}
- writeOutput(tr("Pulling files necessary for debugging"));
+ writeOutput(tr("Pulling files necessary for debugging."));
runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
<< QLatin1String("pull") << QLatin1String("/system/bin/app_process")
diff --git a/src/plugins/android/androiddeploystepfactory.cpp b/src/plugins/android/androiddeploystepfactory.cpp
index e7a6a6e9cd..0ac3502b9b 100644
--- a/src/plugins/android/androiddeploystepfactory.cpp
+++ b/src/plugins/android/androiddeploystepfactory.cpp
@@ -65,7 +65,7 @@ QList<Core::Id> AndroidDeployStepFactory::availableCreationIds(BuildStepList *pa
QString AndroidDeployStepFactory::displayNameForId(const Core::Id id) const
{
if (id == AndroidDeployStep::Id)
- return tr("Deploy to Android device/emulator");
+ return tr("Deploy to Android device or emulator");
return QString();
}
diff --git a/src/plugins/android/androiddeploystepwidget.ui b/src/plugins/android/androiddeploystepwidget.ui
index 50e1eb620d..dd7c51e784 100644
--- a/src/plugins/android/androiddeploystepwidget.ui
+++ b/src/plugins/android/androiddeploystepwidget.ui
@@ -59,7 +59,7 @@ You must have Qt libraries compiled for that platform</string>
<item>
<widget class="QPushButton" name="editRulesFilePushButton">
<property name="text">
- <string>Edit rules file</string>
+ <string>Edit Rules File</string>
</property>
</widget>
</item>
@@ -74,7 +74,7 @@ You must have Qt libraries compiled for that platform</string>
This option is useful when you want to try your application on devices which don't have Android Market (e.g. Android Emulator).</string>
</property>
<property name="text">
- <string>Install Ministro system wide Qt shared libraries installer</string>
+ <string>Install Ministro, system-wide Qt shared libraries installer</string>
</property>
</widget>
</item>
@@ -84,7 +84,7 @@ This option is useful when you want to try your application on devices which don
<bool>false</bool>
</property>
<property name="text">
- <string>Choose apk</string>
+ <string>Choose APK</string>
</property>
</widget>
</item>
diff --git a/src/plugins/android/androidpackagecreationwidget.cpp b/src/plugins/android/androidpackagecreationwidget.cpp
index 61757995fa..8ea43ab17c 100644
--- a/src/plugins/android/androidpackagecreationwidget.cpp
+++ b/src/plugins/android/androidpackagecreationwidget.cpp
@@ -403,7 +403,7 @@ void AndroidPackageCreationWidget::prebundledLibMoveDown()
void AndroidPackageCreationWidget::setHDPIIcon()
{
- QString file = QFileDialog::getOpenFileName(this, tr("Choose High DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+ QString file = QFileDialog::getOpenFileName(this, tr("Choose High DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
if (!file.length())
return;
AndroidManager::setHighDpiIcon(m_step->target(), file);
@@ -412,7 +412,7 @@ void AndroidPackageCreationWidget::setHDPIIcon()
void AndroidPackageCreationWidget::setMDPIIcon()
{
- QString file = QFileDialog::getOpenFileName(this, tr("Choose Medium DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+ QString file = QFileDialog::getOpenFileName(this, tr("Choose Medium DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
if (!file.length())
return;
AndroidManager::setMediumDpiIcon(m_step->target(), file);
@@ -421,7 +421,7 @@ void AndroidPackageCreationWidget::setMDPIIcon()
void AndroidPackageCreationWidget::setLDPIIcon()
{
- QString file = QFileDialog::getOpenFileName(this, tr("Choose Low DPI Icon"), QDir::homePath(), tr("png images (*.png)"));
+ QString file = QFileDialog::getOpenFileName(this, tr("Choose Low DPI Icon"), QDir::homePath(), tr("PNG images (*.png)"));
if (!file.length())
return;
AndroidManager::setLowDpiIcon(m_step->target(), file);
@@ -438,8 +438,8 @@ void AndroidPackageCreationWidget::permissionActivated(QModelIndex index)
void AndroidPackageCreationWidget::addPermission()
{
setEnabledSaveDiscardButtons(true);
- m_ui->permissionsListView->setCurrentIndex(m_permissionsModel->addPermission(tr("< type or choose a permission >")));
- m_ui->permissionsComboBox->lineEdit()->setText(tr("< type or choose a permission >"));
+ m_ui->permissionsListView->setCurrentIndex(m_permissionsModel->addPermission(tr("< Type or choose a permission >")));
+ m_ui->permissionsComboBox->lineEdit()->setText(tr("< Type or choose a permission >"));
m_ui->permissionsComboBox->setFocus();
m_ui->removePermissionButton->setEnabled(m_permissionsModel->permissions().size());
}
diff --git a/src/plugins/android/androidqtversion.cpp b/src/plugins/android/androidqtversion.cpp
index 026c82acea..38a4d25759 100644
--- a/src/plugins/android/androidqtversion.cpp
+++ b/src/plugins/android/androidqtversion.cpp
@@ -69,7 +69,7 @@ QString AndroidQtVersion::invalidReason() const
{
QString tmp = BaseQtVersion::invalidReason();
if (tmp.isEmpty() && qtAbis().isEmpty())
- return tr("Failed to detect the ABI(s) used by the Qt version.");
+ return tr("Failed to detect the ABIs used by the Qt version.");
return tmp;
}
diff --git a/src/plugins/android/androidruncontrol.cpp b/src/plugins/android/androidruncontrol.cpp
index 0597668ebe..a03872fe59 100644
--- a/src/plugins/android/androidruncontrol.cpp
+++ b/src/plugins/android/androidruncontrol.cpp
@@ -66,7 +66,7 @@ void AndroidRunControl::start()
SLOT(handleRemoteOutput(QByteArray)));
connect(m_runner, SIGNAL(remoteProcessFinished(QString)),
SLOT(handleRemoteProcessFinished(QString)));
- appendMessage(tr("Starting remote process..."), Utils::NormalMessageFormat);
+ appendMessage(tr("Starting remote process."), Utils::NormalMessageFormat);
m_runner->start();
}
diff --git a/src/plugins/android/androidrunfactories.cpp b/src/plugins/android/androidrunfactories.cpp
index 206e44d4aa..113cf9b1f9 100644
--- a/src/plugins/android/androidrunfactories.cpp
+++ b/src/plugins/android/androidrunfactories.cpp
@@ -184,7 +184,7 @@ RunControl *AndroidRunControlFactory::create(RunConfiguration *runConfig,
QString AndroidRunControlFactory::displayName() const
{
- return tr("Run on Android device/emulator");
+ return tr("Run on Android device or emulator.");
}
} // namespace Internal
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index c0b67ae198..20a31dfe00 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -96,7 +96,7 @@ void AndroidRunner::checkPID()
if (-1 != m_processPID && pid == -1) {
m_processPID = -1;
- emit remoteProcessFinished(tr("\n\n'%1' died").arg(m_packageName));
+ emit remoteProcessFinished(tr("\n\n'%1' died.").arg(m_packageName));
return;
}
m_processPID = pid;
@@ -151,11 +151,11 @@ void AndroidRunner::asyncStart()
<< QString::fromLatin1("localfilesystem:/data/data/%1/debug-socket").arg(m_packageName);
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
if (!adbStarProc.waitForStarted()) {
- emit remoteProcessFinished(tr("Failed to forward C++ debugging ports. Reason: %1").arg(adbStarProc.errorString()));
+ emit remoteProcessFinished(tr("Failed to forward C++ debugging ports. Reason: %1.").arg(adbStarProc.errorString()));
return;
}
if (!adbStarProc.waitForFinished(-1)) {
- emit remoteProcessFinished(tr("Failed to forward C++ debugging ports"));
+ emit remoteProcessFinished(tr("Failed to forward C++ debugging ports."));
return;
}
extraParams = QLatin1String("-e native_debug true -e gdbserver_socket +debug-socket");
@@ -167,11 +167,11 @@ void AndroidRunner::asyncStart()
<< QLatin1String("forward") << port << port; // currently forward to same port on device and host
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
if (!adbStarProc.waitForStarted()) {
- emit remoteProcessFinished(tr("Failed to forward QML debugging ports. Reason: %1").arg(adbStarProc.errorString()));
+ emit remoteProcessFinished(tr("Failed to forward QML debugging ports. Reason: %1.").arg(adbStarProc.errorString()));
return;
}
if (!adbStarProc.waitForFinished(-1)) {
- emit remoteProcessFinished(tr("Failed to forward QML debugging ports"));
+ emit remoteProcessFinished(tr("Failed to forward QML debugging ports."));
return;
}
extraParams+=QString::fromLatin1(" -e qml_debug true -e qmljsdebugger port:%1")
@@ -196,12 +196,12 @@ void AndroidRunner::asyncStart()
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
if (!adbStarProc.waitForStarted()) {
- emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1").arg(adbStarProc.errorString()));
+ emit remoteProcessFinished(tr("Failed to start the activity. Reason: %1.").arg(adbStarProc.errorString()));
return;
}
if (!adbStarProc.waitForFinished(-1)) {
adbStarProc.terminate();
- emit remoteProcessFinished(tr("Unable to start '%1'").arg(m_packageName));
+ emit remoteProcessFinished(tr("Unable to start '%1'.").arg(m_packageName));
return;
}
QTime startTime = QTime::currentTime();
@@ -209,7 +209,7 @@ void AndroidRunner::asyncStart()
checkPID();
}
if (m_processPID == -1) {
- emit remoteProcessFinished(tr("Cannot find %1 process").arg(m_packageName));
+ emit remoteProcessFinished(tr("Cannot find %1 process.").arg(m_packageName));
return;
}
@@ -246,7 +246,7 @@ void AndroidRunner::stop()
void AndroidRunner::asyncStop()
{
killPID();
- emit remoteProcessFinished(tr("\n\n'%1' killed").arg(m_packageName));
+ emit remoteProcessFinished(tr("\n\n'%1' killed.").arg(m_packageName));
}
void AndroidRunner::logcatReadStandardError()
diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp
index 12366ff9d2..f4dbd73f43 100644
--- a/src/plugins/android/androidsettingswidget.cpp
+++ b/src/plugins/android/androidsettingswidget.cpp
@@ -195,7 +195,7 @@ bool AndroidSettingsWidget::checkSDK(const Utils::FileName &location)
|| (!androidExe.appendPath(QLatin1String("/tools/android" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()
&& !androidBat.appendPath(QLatin1String("/tools/android" ANDROID_BAT_SUFFIX)).toFileInfo().exists())
|| !emulator.appendPath(QLatin1String("/tools/emulator" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()) {
- QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" doesn't seem to be an Android SDK top folder").arg(location.toUserOutput()));
+ QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" does not seem to be an Android SDK top folder.").arg(location.toUserOutput()));
return false;
}
return true;
@@ -216,7 +216,7 @@ bool AndroidSettingsWidget::checkNDK(const Utils::FileName &location)
if (!platformPath.appendPath(QLatin1String("platforms")).toFileInfo().exists()
|| !toolChainPath.appendPath(QLatin1String("toolchains")).toFileInfo().exists()
|| !sourcesPath.appendPath(QLatin1String("sources/cxx-stl")).toFileInfo().exists()) {
- QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" doesn't seem to be an Android NDK top folder").arg(location.toUserOutput()));
+ QMessageBox::critical(this, tr("Android SDK Folder"), tr("\"%1\" does not seem to be an Android NDK top folder.").arg(location.toUserOutput()));
return false;
}
m_androidConfig.ndkLocation = location;
diff --git a/src/plugins/android/androidsettingswidget.ui b/src/plugins/android/androidsettingswidget.ui
index 1e7cba16af..9d1c4f62f4 100644
--- a/src/plugins/android/androidsettingswidget.ui
+++ b/src/plugins/android/androidsettingswidget.ui
@@ -59,7 +59,7 @@
<item row="2" column="0">
<widget class="QLabel" name="NDKToolchainVersionLabel">
<property name="text">
- <string>Android NDK toolchain version:</string>
+ <string>Android NDK tool chain version:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -92,7 +92,7 @@
<item row="4" column="0">
<widget class="QLabel" name="GdbLocationLabel">
<property name="text">
- <string>arm GDB location:</string>
+ <string>ARM GDB location:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -112,7 +112,7 @@
<item row="5" column="0">
<widget class="QLabel" name="GdbserverLocationLabel">
<property name="text">
- <string>arm GDBserver location:</string>
+ <string>ARM GDB server location:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -152,7 +152,7 @@
<item row="7" column="0">
<widget class="QLabel" name="GdbserverLocationLabelx86">
<property name="text">
- <string>x86 GDBserver location:</string>
+ <string>x86 GDB server location:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index ce28543c22..fc75eff62b 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -224,7 +224,7 @@ public:
QFile file(fileName);
quint64 size = static_cast<quint64>(file.size());
if (size == 0) {
- QString msg = tr("The Binary Editor can not open empty files.");
+ QString msg = tr("The Binary Editor cannot open empty files.");
if (errorString)
*errorString = msg;
else
diff --git a/src/plugins/clearcase/activityselector.cpp b/src/plugins/clearcase/activityselector.cpp
index d677881edc..d0fce68010 100644
--- a/src/plugins/clearcase/activityselector.cpp
+++ b/src/plugins/clearcase/activityselector.cpp
@@ -54,7 +54,7 @@ ActivitySelector::ActivitySelector(QWidget *parent) :
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
hboxLayout->setContentsMargins(0, 0, 0, 0);
- QLabel *lblActivity = new QLabel(tr("Select &Activity:"));
+ QLabel *lblActivity = new QLabel(tr("Select &activity:"));
lblActivity->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
hboxLayout->addWidget(lblActivity);
diff --git a/src/plugins/clearcase/checkoutdialog.ui b/src/plugins/clearcase/checkoutdialog.ui
index 73f6a398c5..3af4fa0eeb 100644
--- a/src/plugins/clearcase/checkoutdialog.ui
+++ b/src/plugins/clearcase/checkoutdialog.ui
@@ -24,7 +24,7 @@
<item>
<widget class="QLabel" name="lblComment">
<property name="text">
- <string>&amp;Checkout Comment:</string>
+ <string>&amp;Checkout comment:</string>
</property>
<property name="buddy">
<cstring>txtComment</cstring>
diff --git a/src/plugins/clearcase/versionselector.ui b/src/plugins/clearcase/versionselector.ui
index b120bcf944..d6afca5590 100644
--- a/src/plugins/clearcase/versionselector.ui
+++ b/src/plugins/clearcase/versionselector.ui
@@ -49,7 +49,7 @@
<item row="1" column="0">
<widget class="QLabel" name="loadedCreatedByHeaderLabel">
<property name="text">
- <string>Created By:</string>
+ <string>Created by:</string>
</property>
</widget>
</item>
@@ -63,7 +63,7 @@
<item row="2" column="0">
<widget class="QLabel" name="loadedCreatedOnHeaderLabel">
<property name="text">
- <string>Created On:</string>
+ <string>Created on:</string>
</property>
</widget>
</item>
@@ -91,7 +91,7 @@
<item row="1" column="0">
<widget class="QLabel" name="updatedCreatedByHeaderLabel">
<property name="text">
- <string>Created By:</string>
+ <string>Created by:</string>
</property>
</widget>
</item>
@@ -105,7 +105,7 @@
<item row="2" column="0">
<widget class="QLabel" name="updatedCreatedOnHeaderLabel">
<property name="text">
- <string extracomment="Date">Created On:</string>
+ <string extracomment="Date">Created on:</string>
</property>
</widget>
</item>
diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp
index 2d5e7d3e3c..d79facc78c 100644
--- a/src/plugins/coreplugin/idocument.cpp
+++ b/src/plugins/coreplugin/idocument.cpp
@@ -88,7 +88,7 @@ void IDocument::setRestoredFrom(const QString &name)
m_restored = true;
InfoBarEntry info(QLatin1String(kRestoredAutoSave),
tr("File was restored from auto-saved copy. "
- "Use <i>Save</i> to confirm, or <i>Revert to Saved</i> to discard changes."));
+ "Select Save to confirm or Revert to Saved to discard changes."));
infoBar()->addInfo(info);
}
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index afc34b6ea0..d8420a3e05 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -186,7 +186,7 @@ MainWindow::MainWindow() :
QCoreApplication::setApplicationVersion(QLatin1String(Core::Constants::IDE_VERSION_LONG));
QCoreApplication::setOrganizationName(QLatin1String(Constants::IDE_SETTINGSVARIANT_STR));
QString baseName = QApplication::style()->objectName();
-#ifdef Q_WS_X11
+#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
if (baseName == QLatin1String("windows")) {
// Sometimes we get the standard windows 95 style as a fallback
// e.g. if we are running on a KDE4 desktop
diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp
index 88ca5f8928..d764cce114 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.cpp
+++ b/src/plugins/cppeditor/cpptypehierarchy.cpp
@@ -124,7 +124,6 @@ private:
// CppTypeHierarchyWidget
CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
QWidget(0),
- m_cppEditor(0),
m_treeView(0),
m_model(0),
m_delegate(0)
@@ -133,9 +132,7 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
layout->setMargin(0);
layout->setSpacing(0);
- if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
- m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
-
+ if (qobject_cast<CPPEditor *>(editor)) {
m_inspectedClass = new CppClassLabel(this);
m_inspectedClass->setMargin(5);
layout->addWidget(m_inspectedClass);
@@ -165,27 +162,18 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
{}
-bool CppTypeHierarchyWidget::handleEditorChange(Core::IEditor *editor)
-{
- if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
- if (m_cppEditor) {
- m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
- return true;
- }
- } else if (!m_cppEditor) {
- return true;
- }
- return false;
-}
-
void CppTypeHierarchyWidget::perform()
{
- if (!m_cppEditor)
+ CPPEditor *editor = qobject_cast<CPPEditor *>(Core::EditorManager::instance()->currentEditor());
+ if (!editor)
+ return;
+ CPPEditorWidget *widget = qobject_cast<CPPEditorWidget *>(editor->widget());
+ if (!widget)
return;
m_model->clear();
- CppElementEvaluator evaluator(m_cppEditor);
+ CppElementEvaluator evaluator(widget);
evaluator.setLookupBaseClasses(true);
evaluator.setLookupDerivedClasses(true);
evaluator.execute();
@@ -218,7 +206,13 @@ void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardI
void CppTypeHierarchyWidget::onItemClicked(const QModelIndex &index)
{
- m_cppEditor->openLink(index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>());
+ const TextEditor::BaseTextEditorWidget::Link link
+ = index.data(LinkRole).value<TextEditor::BaseTextEditorWidget::Link>();
+ if (!link.fileName.isEmpty())
+ TextEditor::BaseTextEditorWidget::openEditorAt(link.fileName,
+ link.line,
+ link.column,
+ Constants::CPPEDITOR_ID);
}
// CppTypeHierarchyStackedWidget
@@ -227,9 +221,6 @@ CppTypeHierarchyStackedWidget::CppTypeHierarchyStackedWidget(QWidget *parent) :
m_typeHiearchyWidgetInstance(new CppTypeHierarchyWidget(Core::EditorManager::currentEditor()))
{
addWidget(m_typeHiearchyWidgetInstance);
-
- connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
- this, SLOT(editorChanged(Core::IEditor*)));
}
CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
@@ -237,17 +228,6 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
delete m_typeHiearchyWidgetInstance;
}
-void CppTypeHierarchyStackedWidget::editorChanged(Core::IEditor *editor)
-{
- if (!m_typeHiearchyWidgetInstance->handleEditorChange(editor)) {
- CppTypeHierarchyWidget *replacement = new CppTypeHierarchyWidget(editor);
- removeWidget(m_typeHiearchyWidgetInstance);
- m_typeHiearchyWidgetInstance->deleteLater();
- m_typeHiearchyWidgetInstance = replacement;
- addWidget(m_typeHiearchyWidgetInstance);
- }
-}
-
// CppTypeHierarchyFactory
CppTypeHierarchyFactory::CppTypeHierarchyFactory()
{}
diff --git a/src/plugins/cppeditor/cpptypehierarchy.h b/src/plugins/cppeditor/cpptypehierarchy.h
index 2d862d6904..23acb0e3e5 100644
--- a/src/plugins/cppeditor/cpptypehierarchy.h
+++ b/src/plugins/cppeditor/cpptypehierarchy.h
@@ -69,8 +69,6 @@ public:
CppTypeHierarchyWidget(Core::IEditor *editor);
virtual ~CppTypeHierarchyWidget();
- bool handleEditorChange(Core::IEditor *editor);
-
public slots:
void perform();
@@ -97,9 +95,6 @@ public:
CppTypeHierarchyStackedWidget(QWidget *parent = 0);
virtual ~CppTypeHierarchyStackedWidget();
-public slots:
- void editorChanged(Core::IEditor* editor);
-
private:
CppTypeHierarchyWidget *m_typeHiearchyWidgetInstance;
};
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index a6681bb398..8f0b5ecbe3 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -231,7 +231,7 @@ void CppToolsPlugin::test_completion_template_1()
QVERIFY(!completions.contains("func"));
}
-void CppToolsPlugin::test_completion_template_as_base()
+void CppToolsPlugin::test_completion()
{
QFETCH(QByteArray, code);
QFETCH(QStringList, expectedCompletions);
@@ -253,6 +253,11 @@ void CppToolsPlugin::test_completion_template_as_base()
QCOMPARE(actualCompletions, expectedCompletions);
}
+void CppToolsPlugin::test_completion_template_as_base()
+{
+ test_completion();
+}
+
void CppToolsPlugin::test_completion_template_as_base_data()
{
QTest::addColumn<QByteArray>("code");
@@ -399,3 +404,391 @@ void CppToolsPlugin::test_completion_template_as_base_data()
completions.append("otherMember");
QTest::newRow("case: base as template name in non-template") << code << completions;
}
+
+void CppToolsPlugin::test_completion_use_global_identifier_as_base_class()
+{
+ test_completion();
+}
+
+void CppToolsPlugin::test_completion_use_global_identifier_as_base_class_data()
+{
+ QTest::addColumn<QByteArray>("code");
+ QTest::addColumn<QStringList>("expectedCompletions");
+
+ QByteArray code;
+ QStringList completions;
+
+ code = "\n"
+ "struct Global\n"
+ "{\n"
+ " int int_global;\n"
+ "};\n"
+ "\n"
+ "struct Final : ::Global\n"
+ "{\n"
+ " int int_final;\n"
+ "};\n"
+ "\n"
+ "Final c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_global");
+ completions.append("int_final");
+ completions.append("Final");
+ completions.append("Global");
+ QTest::newRow("case: derived as global and base as global") << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "struct Global\n"
+ "{\n"
+ " int int_global;\n"
+ "};\n"
+ "\n"
+ "namespace NS\n"
+ "{\n"
+ "struct Final : ::Global\n"
+ "{\n"
+ " int int_final;\n"
+ "};\n"
+ "}\n"
+ "\n"
+ "NS::Final c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_global");
+ completions.append("int_final");
+ completions.append("Final");
+ completions.append("Global");
+ QTest::newRow("case: derived is inside namespace, base as global")
+ << code << completions;
+
+ completions.clear();
+
+ //this test does not work due to the bug QTCREATORBUG-7912
+
+
+// code = "\n"
+// "struct Global\n"
+// "{\n"
+// " int int_global;\n"
+// "};\n"
+// "\n"
+// "template <typename T>\n"
+// "struct Enclosing\n"
+// "{\n"
+// "struct Final : ::Global\n"
+// "{\n"
+// " int int_final;\n"
+// "};\n"
+// "}\n"
+// "\n"
+// "Enclosing<int>::Final c;\n"
+// "@\n"
+// "// padding so we get the scope right\n";
+
+// completions.append("int_global");
+// completions.append("int_final");
+// completions.append("Final");
+// completions.append("Global");
+// QTest::newRow("case: derived is enclosed by template, base as global")
+// << code << completions;
+
+// completions.clear();
+}
+
+void CppToolsPlugin::test_completion_base_class_has_name_the_same_as_derived()
+{
+ test_completion();
+}
+
+void CppToolsPlugin::test_completion_base_class_has_name_the_same_as_derived_data()
+{
+ QTest::addColumn<QByteArray>("code");
+ QTest::addColumn<QStringList>("expectedCompletions");
+
+ QByteArray code;
+ QStringList completions;
+
+ code = "\n"
+ "struct A : A\n"
+ "{\n"
+ " int int_a;\n"
+ "};\n"
+ "\n"
+ "A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_a");
+ completions.append("A");
+ QTest::newRow("case: base class is derived class") << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "namespace NS\n"
+ "{\n"
+ "struct A : A\n"
+ "{\n"
+ " int int_a;\n"
+ "};\n"
+ "}\n"
+ "\n"
+ "NS::A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_a");
+ completions.append("A");
+ QTest::newRow("case: base class is derived class. class is in namespace")
+ << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "namespace NS\n"
+ "{\n"
+ "struct A : NS::A\n"
+ "{\n"
+ " int int_a;\n"
+ "};\n"
+ "}\n"
+ "\n"
+ "NS::A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_a");
+ completions.append("A");
+ QTest::newRow("case: base class is derived class. class is in namespace. "
+ "use scope operator for base class") << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "namespace NS1\n"
+ "{\n"
+ "struct A\n"
+ "{\n"
+ " int int_ns1_a;\n"
+ "};\n"
+ "}\n"
+ "namespace NS2\n"
+ "{\n"
+ "struct A : NS1::A\n"
+ "{\n"
+ " int int_ns2_a;\n"
+ "};\n"
+ "}\n"
+ "\n"
+ "NS2::A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_ns1_a");
+ completions.append("int_ns2_a");
+ completions.append("A");
+ QTest::newRow("case: base class has the same name as derived but in different namespace")
+ << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "struct Enclosing\n"
+ "{\n"
+ "struct A\n"
+ "{\n"
+ " int int_enclosing_a;\n"
+ "};\n"
+ "};\n"
+ "namespace NS2\n"
+ "{\n"
+ "struct A : Enclosing::A\n"
+ "{\n"
+ " int int_ns2_a;\n"
+ "};\n"
+ "}\n"
+ "\n"
+ "NS2::A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_enclosing_a");
+ completions.append("int_ns2_a");
+ completions.append("A");
+ QTest::newRow("case: base class has the same name as derived(in namespace) "
+ "but is nested by different class") << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "struct EnclosingBase\n"
+ "{\n"
+ "struct A\n"
+ "{\n"
+ " int int_enclosing_base_a;\n"
+ "};\n"
+ "};\n"
+ "struct EnclosingDerived\n"
+ "{\n"
+ "struct A : EnclosingBase::A\n"
+ "{\n"
+ " int int_enclosing_derived_a;\n"
+ "};\n"
+ "};\n"
+ "\n"
+ "EnclosingDerived::A c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_enclosing_base_a");
+ completions.append("int_enclosing_derived_a");
+ completions.append("A");
+ QTest::newRow("case: base class has the same name as derived(nested) "
+ "but is nested by different class") << code << completions;
+
+ completions.clear();
+
+ code = "\n"
+ "template <typename T>\n"
+ "struct A : A\n"
+ "{\n"
+ " int int_a;\n"
+ "};\n"
+ "\n"
+ "A<int> c;\n"
+ "@\n"
+ "// padding so we get the scope right\n";
+
+ completions.append("int_a");
+ completions.append("A");
+ QTest::newRow("case: base class is derived class. class is a template")
+ << code << completions;
+
+ completions.clear();
+
+}
+
+
+void CppToolsPlugin::test_completion_cyclic_inheritance()
+{
+ test_completion();
+}
+
+void CppToolsPlugin::test_completion_cyclic_inheritance_data()
+{
+ QTest::addColumn<QByteArray>("code");
+ QTest::addColumn<QStringList>("expectedCompletions");
+
+ QByteArray code;
+ QStringList completions;
+
+ code = "\n"
+ "struct B;\n"
+ "struct A : B { int _a; };\n"
+ "struct B : A { int _b; };\n"
+ "\n"
+ "A c;\n"
+ "@\n"
+ ;
+ completions.append("A");
+ completions.append("_a");
+ completions.append("B");
+ completions.append("_b");
+ QTest::newRow("case: direct cyclic inheritance") << code << completions;
+
+ completions.clear();
+ code = "\n"
+ "struct C;\n"
+ "struct A : C { int _a; };\n"
+ "struct B : A { int _b; };\n"
+ "struct C : B { int _c; };\n"
+ "\n"
+ "A c;\n"
+ "@\n"
+ ;
+ completions.append("A");
+ completions.append("_a");
+ completions.append("B");
+ completions.append("_b");
+ completions.append("C");
+ completions.append("_c");
+ QTest::newRow("case: indirect cyclic inheritance") << code << completions;
+
+ completions.clear();
+ code = "\n"
+ "struct B;\n"
+ "struct A : B { int _a; };\n"
+ "struct C { int _c; };\n"
+ "struct B : C, A { int _b; };\n"
+ "\n"
+ "A c;\n"
+ "@\n"
+ ;
+ completions.append("A");
+ completions.append("_a");
+ completions.append("B");
+ completions.append("_b");
+ completions.append("C");
+ completions.append("_c");
+ QTest::newRow("case: indirect cyclic inheritance") << code << completions;
+
+ completions.clear();
+ code = "\n"
+ "template< typename T > struct C;\n"
+ "template< typename T, typename S > struct D : C< S >\n"
+ "{\n"
+ " T _d_t;\n"
+ " S _d_s;\n"
+ "};\n"
+ "template< typename T > struct C : D< T, int >\n"
+ "{\n"
+ " T _c_t;\n"
+ "};\n"
+ "\n"
+ "D<int, float> c;\n"
+ "@\n"
+ ;
+ completions.append("D");
+ completions.append("_d_t");
+ completions.append("_d_s");
+ completions.append("C");
+ completions.append("_c_t");
+ QTest::newRow("case: direct cyclic inheritance with templates")
+ << code << completions;
+
+ completions.clear();
+ code = "\n"
+ "template< typename T > struct C;\n"
+ "template< typename T, typename S > struct D : C< S >\n"
+ "{\n"
+ " T _d_t;\n"
+ " S _d_s;\n"
+ "};\n"
+ "template< typename T > struct B : D< T, int >\n"
+ "{\n"
+ " T _b_t;\n"
+ "};\n"
+ "template< typename T > struct C : B<T>\n"
+ "{\n"
+ " T _c_t;\n"
+ "};\n"
+ "\n"
+ "D<int, float> c;\n"
+ "@\n"
+ ;
+ completions.append("D");
+ completions.append("_d_t");
+ completions.append("_d_s");
+ completions.append("C");
+ completions.append("_c_t");
+ completions.append("B");
+ completions.append("_b_t");
+ QTest::newRow("case: indirect cyclic inheritance with templates")
+ << code << completions;
+
+}
diff --git a/src/plugins/cpptools/cpptoolsplugin.h b/src/plugins/cpptools/cpptoolsplugin.h
index ba88d11896..d84319db03 100644
--- a/src/plugins/cpptools/cpptoolsplugin.h
+++ b/src/plugins/cpptools/cpptoolsplugin.h
@@ -77,6 +77,7 @@ private slots:
void switchHeaderSource();
#ifdef WITH_TESTS
+
// codegen tests
void test_codegen_public_in_empty_class();
void test_codegen_public_in_nonempty_class();
@@ -95,6 +96,15 @@ private slots:
void test_completion_template_1();
void test_completion_template_as_base();
void test_completion_template_as_base_data();
+ void test_completion_use_global_identifier_as_base_class();
+ void test_completion_use_global_identifier_as_base_class_data();
+ void test_completion_base_class_has_name_the_same_as_derived();
+ void test_completion_base_class_has_name_the_same_as_derived_data();
+ void test_completion_cyclic_inheritance();
+ void test_completion_cyclic_inheritance_data();
+
+private:
+ void test_completion();
#endif
private:
diff --git a/src/plugins/debugger/debuggerkitconfigwidget.h b/src/plugins/debugger/debuggerkitconfigwidget.h
index 735d02fd01..3c8658ca30 100644
--- a/src/plugins/debugger/debuggerkitconfigwidget.h
+++ b/src/plugins/debugger/debuggerkitconfigwidget.h
@@ -62,7 +62,7 @@ class DebuggerKitConfigWidget : public ProjectExplorer::KitConfigWidget
Q_OBJECT
public:
- DebuggerKitConfigWidget(ProjectExplorer::Kit *p,
+ DebuggerKitConfigWidget(ProjectExplorer::Kit *k,
const DebuggerKitInformation *ki,
QWidget *parent = 0);
diff --git a/src/plugins/debugger/debuggerkitinformation.cpp b/src/plugins/debugger/debuggerkitinformation.cpp
index 5b86f09c32..f497e2b19e 100644
--- a/src/plugins/debugger/debuggerkitinformation.cpp
+++ b/src/plugins/debugger/debuggerkitinformation.cpp
@@ -296,8 +296,27 @@ DebuggerKitInformation::DebuggerItem DebuggerKitInformation::variantToItem(const
}
QTC_ASSERT(v.type() == QVariant::Map, return result);
const QVariantMap vmap = v.toMap();
- result.binary = Utils::FileName::fromString(vmap.value(QLatin1String(binaryKeyC)).toString());
result.engineType = static_cast<DebuggerEngineType>(vmap.value(QLatin1String(engineTypeKeyC)).toInt());
+ QString binary = vmap.value(QLatin1String(binaryKeyC)).toString();
+ // Check for special 'auto' entry for binary written by the sdktool during
+ // installation. Try to autodetect.
+ if (binary == QLatin1String("auto")) {
+ binary.clear();
+ switch (result.engineType) {
+ case Debugger::GdbEngineType: // Auto-detect system gdb on Unix
+ if (Abi::hostAbi().os() != Abi::WindowsOS)
+ binary = Environment::systemEnvironment().searchInPath(QLatin1String("gdb"));
+ break;
+ case Debugger::CdbEngineType: { // Auto-detect system CDB on Windows.
+ const QPair<QString, QString> cdbs = autoDetectCdbDebugger();
+ binary = cdbs.second.isEmpty() ? cdbs.first : cdbs.second;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ result.binary = Utils::FileName::fromString(binary);
return result;
}
diff --git a/src/plugins/debugger/debuggerkitinformation.h b/src/plugins/debugger/debuggerkitinformation.h
index 93f632be76..3fdfb165e7 100644
--- a/src/plugins/debugger/debuggerkitinformation.h
+++ b/src/plugins/debugger/debuggerkitinformation.h
@@ -77,13 +77,13 @@ public:
static DebuggerItem debuggerItem(const ProjectExplorer::Kit *k);
static void setDebuggerItem(ProjectExplorer::Kit *k, const DebuggerItem &item);
- static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *p)
- { return debuggerItem(p).binary; }
+ static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *k)
+ { return debuggerItem(k).binary; }
- static void setDebuggerCommand(ProjectExplorer::Kit *p, const Utils::FileName &command);
+ static void setDebuggerCommand(ProjectExplorer::Kit *k, const Utils::FileName &command);
- static DebuggerEngineType engineType(const ProjectExplorer::Kit *p)
- { return debuggerItem(p).engineType; }
+ static DebuggerEngineType engineType(const ProjectExplorer::Kit *k)
+ { return debuggerItem(k).engineType; }
static void setEngineType(ProjectExplorer::Kit *k, DebuggerEngineType type);
diff --git a/src/plugins/debugger/debuggertooltipmanager.cpp b/src/plugins/debugger/debuggertooltipmanager.cpp
index d6c956250e..7b03136e47 100644
--- a/src/plugins/debugger/debuggertooltipmanager.cpp
+++ b/src/plugins/debugger/debuggertooltipmanager.cpp
@@ -691,9 +691,7 @@ void DebuggerToolTipWidget::copy()
{
const QString clipboardText = clipboardContents();
QClipboard *clipboard = QApplication::clipboard();
-#ifdef Q_WS_X11
clipboard->setText(clipboardText, QClipboard::Selection);
-#endif
clipboard->setText(clipboardText, QClipboard::Clipboard);
}
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index d96a7e711e..d589d7e68a 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -221,7 +221,7 @@ public:
QAction *createAction(QObject *parent) const
{
QAction *action = new QAction(DebuggerPlugin::tr("Install &Debug Information"), parent);
- action->setToolTip(DebuggerPlugin::tr("This tries to install missing debug information."));
+ action->setToolTip(DebuggerPlugin::tr("Tries to install missing debug information."));
return action;
}
@@ -302,7 +302,7 @@ QString GdbEngine::errorMessage(QProcess::ProcessError error)
switch (error) {
case QProcess::FailedToStart:
return tr("The gdb process failed to start. Either the "
- "invoked program '%1' is missing, or you may have insufficient "
+ "invoked program \"%1\" is missing, or you may have insufficient "
"permissions to invoke the program.\n%2")
.arg(m_gdb, gdbProc()->errorString());
case QProcess::Crashed:
@@ -1053,7 +1053,7 @@ void GdbEngine::commandTimeout()
"to a command within %n second(s). This could mean it is stuck "
"in an endless loop or taking longer than expected to perform "
"the operation.\nYou can choose between waiting "
- "longer or abort debugging.", 0, timeOut / 1000);
+ "longer or aborting debugging.", 0, timeOut / 1000);
QMessageBox *mb = showMessageBox(QMessageBox::Critical,
tr("GDB not responding"), msg,
QMessageBox::Ok | QMessageBox::Cancel);
@@ -2095,7 +2095,7 @@ int GdbEngine::currentFrame() const
static QString msgNoGdbBinaryForToolChain(const Abi &tc)
{
- return GdbEngine::tr("There is no gdb binary available for binaries in format '%1'")
+ return GdbEngine::tr("There is no GDB binary available for binaries in format '%1'")
.arg(tc.toString());
}
diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp
index 10786d29df..890146f051 100644
--- a/src/plugins/debugger/moduleshandler.cpp
+++ b/src/plugins/debugger/moduleshandler.cpp
@@ -80,12 +80,12 @@ QVariant ModulesModel::headerData(int section,
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
static QString headers[] = {
- ModulesHandler::tr("Module name") + QLatin1String(" "),
- ModulesHandler::tr("Module path") + QLatin1String(" "),
- ModulesHandler::tr("Symbols read") + QLatin1String(" "),
- ModulesHandler::tr("Symbols type") + QLatin1String(" "),
- ModulesHandler::tr("Start address") + QLatin1String(" "),
- ModulesHandler::tr("End address") + QLatin1String(" ")
+ ModulesHandler::tr("Module Name") + QLatin1String(" "),
+ ModulesHandler::tr("Module Path") + QLatin1String(" "),
+ ModulesHandler::tr("Symbols Read") + QLatin1String(" "),
+ ModulesHandler::tr("Symbols Type") + QLatin1String(" "),
+ ModulesHandler::tr("Start Address") + QLatin1String(" "),
+ ModulesHandler::tr("End Address") + QLatin1String(" ")
};
return headers[section];
}
@@ -123,22 +123,22 @@ QVariant ModulesModel::data(const QModelIndex &index, int role) const
case 2:
if (role == Qt::DisplayRole)
switch (module.symbolsRead) {
- case Module::UnknownReadState: return ModulesHandler::tr("unknown");
- case Module::ReadFailed: return ModulesHandler::tr("no");
- case Module::ReadOk: return ModulesHandler::tr("yes");
+ case Module::UnknownReadState: return ModulesHandler::tr("Unknown");
+ case Module::ReadFailed: return ModulesHandler::tr("No");
+ case Module::ReadOk: return ModulesHandler::tr("Yes");
}
break;
case 3:
if (role == Qt::DisplayRole)
switch (module.elfData.symbolsType) {
case UnknownSymbols:
- return ModulesHandler::tr("unknown");
+ return ModulesHandler::tr("Unknown");
case NoSymbols:
- return ModulesHandler::tr("none");
+ return ModulesHandler::tr("None");
case PlainSymbols:
- return ModulesHandler::tr("plain");
+ return ModulesHandler::tr("Plain");
case FastSymbols:
- return ModulesHandler::tr("fast");
+ return ModulesHandler::tr("Fast");
case LinkedSymbols:
return ModulesHandler::tr("debuglnk");
case BuildIdSymbols:
diff --git a/src/plugins/debugger/qml/qmladapter.cpp b/src/plugins/debugger/qml/qmladapter.cpp
index 05da501875..eb6747eb01 100644
--- a/src/plugins/debugger/qml/qmladapter.cpp
+++ b/src/plugins/debugger/qml/qmladapter.cpp
@@ -144,20 +144,20 @@ void QmlAdapter::connectionStateChanged()
switch (m_conn->state()) {
case QAbstractSocket::UnconnectedState:
{
- showConnectionStatusMessage(tr("disconnected.\n\n"));
+ showConnectionStatusMessage(tr("Disconnected.\n\n"));
emit disconnected();
break;
}
case QAbstractSocket::HostLookupState:
- showConnectionStatusMessage(tr("resolving host..."));
+ showConnectionStatusMessage(tr("Resolving host."));
break;
case QAbstractSocket::ConnectingState:
- showConnectionStatusMessage(tr("connecting to debug server..."));
+ showConnectionStatusMessage(tr("Connecting to debug server."));
break;
case QAbstractSocket::ConnectedState:
{
- showConnectionStatusMessage(tr("connected.\n"));
+ showConnectionStatusMessage(tr("Connected.\n"));
m_connectionTimer.stop();
@@ -166,7 +166,7 @@ void QmlAdapter::connectionStateChanged()
break;
}
case QAbstractSocket::ClosingState:
- showConnectionStatusMessage(tr("closing..."));
+ showConnectionStatusMessage(tr("Closing."));
break;
case QAbstractSocket::BoundState:
case QAbstractSocket::ListeningState:
diff --git a/src/plugins/debugger/qml/qmlinspectoradapter.cpp b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
index 9528a1d5af..677bbe9997 100644
--- a/src/plugins/debugger/qml/qmlinspectoradapter.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoradapter.cpp
@@ -42,6 +42,7 @@
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/icore.h>
#include <qmldebug/declarativeenginedebugclient.h>
+#include <qmldebug/declarativeenginedebugclientv2.h>
#include <qmldebug/declarativetoolsclient.h>
#include <qmldebug/qmlenginedebugclient.h>
#include <qmldebug/qmltoolsclient.h>
@@ -96,13 +97,23 @@ QmlInspectorAdapter::QmlInspectorAdapter(QmlAdapter *debugAdapter,
connect(engineClient2, SIGNAL(newStatus(QmlDebug::ClientStatus)),
this, SLOT(engineClientStatusChanged(QmlDebug::ClientStatus)));
+ DeclarativeEngineDebugClientV2 *engineClient3
+ = new DeclarativeEngineDebugClientV2(connection);
+ connect(engineClient3, SIGNAL(newStatus(QmlDebug::ClientStatus)),
+ this, SLOT(clientStatusChanged(QmlDebug::ClientStatus)));
+ connect(engineClient3, SIGNAL(newStatus(QmlDebug::ClientStatus)),
+ this, SLOT(engineClientStatusChanged(QmlDebug::ClientStatus)));
+
m_engineClients.insert(engineClient1->name(), engineClient1);
m_engineClients.insert(engineClient2->name(), engineClient2);
+ m_engineClients.insert(engineClient3->name(), engineClient3);
if (engineClient1->status() == QmlDebug::Enabled)
setActiveEngineClient(engineClient1);
if (engineClient2->status() == QmlDebug::Enabled)
setActiveEngineClient(engineClient2);
+ if (engineClient3->status() == QmlDebug::Enabled)
+ setActiveEngineClient(engineClient3);
DeclarativeToolsClient *toolsClient1 = new DeclarativeToolsClient(connection);
connect(toolsClient1, SIGNAL(newStatus(QmlDebug::ClientStatus)),
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.cpp b/src/plugins/debugger/qml/qmlinspectoragent.cpp
index c6fe7cb375..314aae360f 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.cpp
+++ b/src/plugins/debugger/qml/qmlinspectoragent.cpp
@@ -42,6 +42,7 @@
#include <QElapsedTimer>
using namespace QmlDebug;
+using namespace QmlDebug::Constants;
namespace Debugger {
namespace Internal {
@@ -97,6 +98,17 @@ void QmlInspectorAgent::assignValue(const WatchData *data,
}
}
+int parentIdForIname(const QByteArray &iname)
+{
+ // Extract the parent id
+ int lastIndex = iname.lastIndexOf('.');
+ int secondLastIndex = iname.lastIndexOf('.', lastIndex - 1);
+ int parentId = -1;
+ if (secondLastIndex != -1)
+ parentId = iname.mid(secondLastIndex + 1, lastIndex - secondLastIndex - 1).toInt();
+ return parentId;
+}
+
void QmlInspectorAgent::updateWatchData(const WatchData &data)
{
if (debug)
@@ -104,6 +116,15 @@ void QmlInspectorAgent::updateWatchData(const WatchData &data)
if (data.id && !m_fetchDataIds.contains(data.id)) {
// objects
+ using namespace QmlDebug::Constants;
+ if (m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
+ int parentId = parentIdForIname(data.iname);
+ if (parentId != -1) {
+ QList<int> childIds = m_debugIdChildIds.value(parentId);
+ childIds << data.id;
+ m_debugIdChildIds.insert(parentId, childIds);
+ }
+ }
m_fetchDataIds << data.id;
fetchObject(data.id);
}
@@ -424,7 +445,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
} else if (type == "SET_BINDING_R"
|| type == "RESET_BINDING_R"
|| type == "SET_METHOD_BODY_R") {
- QString msg = QLatin1String(type) + tr(" success : ");
+ QString msg = QLatin1String(type) + tr("Success: ");
msg += value.toBool() ? QLatin1Char('1') : QLatin1Char('0');
if (!value.toBool())
emit automaticUpdateFailed();
@@ -440,10 +461,10 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
foreach (QVariant var, objList) {
// TODO: check which among the list is the actual
// object that needs to be selected.
- objectTreeFetched(qvariant_cast<ObjectReference>(var));
+ insertObjectInTree(qvariant_cast<ObjectReference>(var));
}
} else {
- objectTreeFetched(qvariant_cast<ObjectReference>(value));
+ insertObjectInTree(qvariant_cast<ObjectReference>(value));
}
} else if (queryId == m_engineQueryId) {
m_engineQueryId = 0;
@@ -455,7 +476,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
} else if (queryId == m_rootContextQueryId) {
m_rootContextQueryId = 0;
clearObjectTree();
- fetchObjectsInContextRecursive(qvariant_cast<ContextReference>(value));
+ updateObjectTree(qvariant_cast<ContextReference>(value));
} else {
emit expressionResult(queryId, value);
}
@@ -476,7 +497,7 @@ void QmlInspectorAgent::newObject(int engineId, int objectId, int /*parentId*/)
return;
m_newObjectsCreated = true;
- if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
+ if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
fetchObject(objectId);
else
m_delayQueryTimer.start();
@@ -583,8 +604,7 @@ void QmlInspectorAgent::fetchContextObjectsForLocation(const QString &file,
m_objectTreeQueryIds << queryId;
}
-// fetch the root objects from the context + any child contexts
-void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &context)
+void QmlInspectorAgent::updateObjectTree(const ContextReference &context)
{
if (debug)
qDebug() << __FUNCTION__ << '(' << context << ')';
@@ -593,22 +613,14 @@ void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &c
|| !debuggerCore()->boolSetting(ShowQmlObjectTree))
return;
- foreach (const ObjectReference & obj, context.objects()) {
- using namespace QmlDebug::Constants;
- if (m_engineClient->objectName() == QLatin1String(QML_DEBUGGER) &&
- m_engineClient->serviceVersion() >= CURRENT_SUPPORTED_VERSION) {
- //Fetch only root objects
- if (obj.parentId() == -1)
- fetchObject(obj.debugId());
- } else {
- m_objectTreeQueryIds << m_engineClient->queryObjectRecursive(obj.debugId());
- }
- }
+ foreach (const ObjectReference & obj, context.objects())
+ insertObjectInTree(obj);
+
foreach (const ContextReference &child, context.contexts())
- fetchObjectsInContextRecursive(child);
+ updateObjectTree(child);
}
-void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
+void QmlInspectorAgent::insertObjectInTree(const ObjectReference &object)
{
if (debug)
qDebug() << __FUNCTION__ << '(' << object << ')';
@@ -628,8 +640,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
ObjectReference last;
QStack<QmlDebug::ObjectReference> stack;
- // 4.x
- if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
+ // qt <= 4.8.3
+ if (m_newObjectsCreated && m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
// We need to reverse the stack as the root objects
// are pushed to the bottom since they are fetched first.
// The child objects need to placed in the correct position and therefore
@@ -645,8 +657,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
int parentId = last.parentId();
QByteArray parentIname;
- // 4.x
- if (m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
+ // qt <= 4.8.3
+ if (m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
QHashIterator<int, QList<int> > i(m_debugIdChildIds);
while (i.hasNext()) {
i.next();
@@ -662,8 +674,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
fetchObject(parentId);
return;
}
- // 5.x
- if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER)
+ // qt > 4.8.3
+ if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE)
&& m_newObjectsCreated && parentIname.isEmpty()) {
if (watchData.count())
break;
@@ -735,13 +747,14 @@ void QmlInspectorAgent::buildDebugIdHashRecursive(const ObjectReference &ref)
m_debugIdHash[file][location].append(ref.debugId());
m_debugIdLocations.insert(ref.debugId(), FileReference(filePath, lineNum, colNum));
- // 4.x
- if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
- QList<int> childIds;
+ // qt <= 4.8.3
+ if (m_newObjectsCreated
+ && m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
+ QList<int> childIds = m_debugIdChildIds.value(ref.debugId());
foreach (const ObjectReference &c, ref.children()) {
childIds << c.debugId();
}
- // For 4.x, we do not get the parentId. Hence, store the child ids
+ // For qt <= 4.8.3, we do not get the parentId. Hence, store the child ids
// to look up correct insertion places later
m_debugIdChildIds.insert(ref.debugId(), childIds);
}
@@ -814,7 +827,7 @@ QList<WatchData> QmlInspectorAgent::buildWatchData(const ObjectReference &obj,
WatchData propertiesWatch;
propertiesWatch.id = objDebugId;
propertiesWatch.exp = "";
- propertiesWatch.name = tr("properties");
+ propertiesWatch.name = tr("Properties");
propertiesWatch.iname = objIname + ".[properties]";
propertiesWatch.type = "";
propertiesWatch.value = _("list");
@@ -867,18 +880,18 @@ bool QmlInspectorAgent::isConnected() const
void QmlInspectorAgent::clearObjectTree()
{
// clear view
- m_debuggerEngine->watchHandler()->removeChildren("inspect");
+ m_debuggerEngine->watchHandler()->cleanup();
m_objectTreeQueryIds.clear();
-
+ m_fetchDataIds.clear();
int old_count = m_debugIdHash.count();
m_debugIdHash.clear();
m_debugIdHash.reserve(old_count + 1);
m_debugIdToIname.clear();
m_debugIdChildIds.clear();
m_objectStack.clear();
- // reset only for 5.x.
- if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
+ // reset only for qt > 4.8.3.
+ if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
m_newObjectsCreated = false;
removeAllObjectWatches();
diff --git a/src/plugins/debugger/qml/qmlinspectoragent.h b/src/plugins/debugger/qml/qmlinspectoragent.h
index 2d4ad81aef..a289483e79 100644
--- a/src/plugins/debugger/qml/qmlinspectoragent.h
+++ b/src/plugins/debugger/qml/qmlinspectoragent.h
@@ -110,9 +110,9 @@ private slots:
void onValueChanged(int debugId, const QByteArray &propertyName, const QVariant &value);
private:
- void fetchObjectsInContextRecursive(const QmlDebug::ContextReference &context);
+ void updateObjectTree(const QmlDebug::ContextReference &context);
- void objectTreeFetched(const QmlDebug::ObjectReference &result);
+ void insertObjectInTree(const QmlDebug::ObjectReference &result);
void buildDebugIdHashRecursive(const QmlDebug::ObjectReference &ref);
QList<WatchData> buildWatchData(const QmlDebug::ObjectReference &obj,
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
index 1106cb78c9..fcf5b224b1 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
+++ b/src/plugins/debugger/qml/qmlv8debuggerclient.cpp
@@ -978,8 +978,6 @@ QmlV8DebuggerClient::~QmlV8DebuggerClient()
void QmlV8DebuggerClient::startSession()
{
- //Supports v2.0 and above
- QTC_ASSERT(serviceVersion() >= CURRENT_SUPPORTED_VERSION, return);
flushSendBuffer();
d->connect();
//Query for the V8 version. This is
@@ -1635,7 +1633,7 @@ StackFrame QmlV8DebuggerClient::extractStackFrame(const QVariant &bodyVal, const
QmlV8ObjectData objectData = d->extractData(body.value(_("func")), refsVal);
QString functionName = objectData.value.toString();
if (functionName.isEmpty())
- functionName = tr("anonymous function");
+ functionName = tr("Anonymous Function");
stackFrame.function = functionName;
objectData = d->extractData(body.value(_("script")), refsVal);
diff --git a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
index 19935617c2..2f7c8f0ba4 100644
--- a/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
+++ b/src/plugins/debugger/qml/qmlv8debuggerclientconstants.h
@@ -34,7 +34,6 @@
namespace Debugger {
namespace Internal {
-const float CURRENT_SUPPORTED_VERSION = 2.0;
const char V8REQUEST[] = "v8request";
const char V8MESSAGE[] = "v8message";
const char BREAKONSIGNAL[] = "breakonsignal";
diff --git a/src/plugins/debugger/sourcefileshandler.cpp b/src/plugins/debugger/sourcefileshandler.cpp
index 50fb3289dd..cc75808f0f 100644
--- a/src/plugins/debugger/sourcefileshandler.cpp
+++ b/src/plugins/debugger/sourcefileshandler.cpp
@@ -60,8 +60,8 @@ QVariant SourceFilesHandler::headerData(int section,
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
static QString headers[] = {
- tr("Internal name") + QLatin1String(" "),
- tr("Full name") + QLatin1String(" "),
+ tr("Internal Name") + QLatin1String(" "),
+ tr("Full Name") + QLatin1String(" "),
};
return headers[section];
}
diff --git a/src/plugins/debugger/stackwindow.cpp b/src/plugins/debugger/stackwindow.cpp
index 2d6958f4dd..3a2962ddf4 100644
--- a/src/plugins/debugger/stackwindow.cpp
+++ b/src/plugins/debugger/stackwindow.cpp
@@ -225,9 +225,7 @@ void StackTreeView::copyContentsToClipboard()
str += QLatin1Char('\n');
}
QClipboard *clipboard = QApplication::clipboard();
-# ifdef Q_WS_X11
clipboard->setText(str, QClipboard::Selection);
-# endif
clipboard->setText(str, QClipboard::Clipboard);
}
diff --git a/src/plugins/debugger/watchwindow.cpp b/src/plugins/debugger/watchwindow.cpp
index 96d9fc3ece..45cb435b60 100644
--- a/src/plugins/debugger/watchwindow.cpp
+++ b/src/plugins/debugger/watchwindow.cpp
@@ -600,9 +600,7 @@ static QString removeWatchActionText(QString exp)
static void copyToClipboard(const QString &clipboardText)
{
QClipboard *clipboard = QApplication::clipboard();
-#ifdef Q_WS_X11
clipboard->setText(clipboardText, QClipboard::Selection);
-#endif
clipboard->setText(clipboardText, QClipboard::Clipboard);
}
diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp
index c9fa258eb2..e935869d76 100644
--- a/src/plugins/git/gerrit/gerritplugin.cpp
+++ b/src/plugins/git/gerrit/gerritplugin.cpp
@@ -387,7 +387,7 @@ QString GerritPlugin::gitBinary()
bool ok;
const QString git = Git::Internal::GitPlugin::instance()->gitClient()->gitBinaryPath(&ok);
if (!ok) {
- VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("git is not available."));
+ VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("Git is not available."));
return QString();
}
return git;
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
index 1d26187b7c..30d67bd30b 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
@@ -102,7 +102,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
m_deviceManager(DeviceManager::cloneInstance()),
m_deviceManagerModel(new DeviceManagerModel(m_deviceManager, this)),
m_nameValidator(new NameValidator(m_deviceManager, this)),
- m_saveSettingsRequested(false),
m_additionalActionsMapper(new QSignalMapper(this)),
m_configWidget(0)
{
@@ -115,11 +114,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
DeviceSettingsWidget::~DeviceSettingsWidget()
{
- if (m_saveSettingsRequested) {
- Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey),
- currentIndex());
- DeviceManager::replaceInstance();
- }
DeviceManager::removeClonedInstance();
delete m_configWidget;
delete m_ui;
@@ -237,10 +231,17 @@ void DeviceSettingsWidget::fillInValues()
m_ui->nameLineEdit->setText(current->displayName());
}
+void DeviceSettingsWidget::updateDeviceFromUi()
+{
+ deviceNameEditingFinished();
+ if (m_configWidget)
+ m_configWidget->updateDeviceFromUi();
+}
+
void DeviceSettingsWidget::saveSettings()
{
- // We must defer this step because of a stupid bug on MacOS. See QTCREATORBUG-1675.
- m_saveSettingsRequested = true;
+ Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey), currentIndex());
+ DeviceManager::replaceInstance();
}
int DeviceSettingsWidget::currentIndex() const
@@ -329,12 +330,14 @@ void DeviceSettingsWidget::handleAdditionalActionRequest(int actionId)
{
const IDevice::ConstPtr device = m_deviceManager->find(currentDevice()->id());
QTC_ASSERT(device, return);
+ updateDeviceFromUi();
device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this);
}
void DeviceSettingsWidget::handleProcessListRequested()
{
QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
+ updateDeviceFromUi();
DeviceProcessesDialog dlg;
dlg.addCloseButton();
dlg.setDevice(currentDevice());
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
index 177315a959..64a8491e3d 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h
@@ -81,12 +81,12 @@ private:
void clearDetails();
QString parseTestOutput();
void fillInValues();
+ void updateDeviceFromUi();
Ui::DeviceSettingsWidget *m_ui;
DeviceManager * const m_deviceManager;
DeviceManagerModel * const m_deviceManagerModel;
NameValidator * const m_nameValidator;
- bool m_saveSettingsRequested;
QList<QPushButton *> m_additionalActionButtons;
QSignalMapper * const m_additionalActionsMapper;
IDeviceWidget *m_configWidget;
diff --git a/src/plugins/projectexplorer/devicesupport/idevicewidget.h b/src/plugins/projectexplorer/devicesupport/idevicewidget.h
index 0b7ccf363c..5b212efa7c 100644
--- a/src/plugins/projectexplorer/devicesupport/idevicewidget.h
+++ b/src/plugins/projectexplorer/devicesupport/idevicewidget.h
@@ -50,6 +50,18 @@ namespace ProjectExplorer {
class PROJECTEXPLORER_EXPORT IDeviceWidget : public QWidget
{
Q_OBJECT
+public:
+
+ /*!
+ * \brief Ensures that all changes in the UI are propagated to the device object.
+ *
+ * If the device is always updated right when the change happens, the implementation of
+ * this function can be empty. Note, however, that you cannot generally rely on the
+ * QLineEdit::editingFinished() signal being emitted on time if some button in the dialog is
+ * clicked (e.g. "Apply"). So if you have any handlers for line edit changes, they should
+ * probably be called here.
+ */
+ virtual void updateDeviceFromUi() = 0;
protected:
IDeviceWidget(const IDevice::Ptr &device, QWidget *parent = 0)
diff --git a/src/plugins/projectexplorer/kitinformation.h b/src/plugins/projectexplorer/kitinformation.h
index ce6a6749dd..84127020d6 100644
--- a/src/plugins/projectexplorer/kitinformation.h
+++ b/src/plugins/projectexplorer/kitinformation.h
@@ -78,9 +78,9 @@ public:
SysRootMatcher(const Utils::FileName &fn) : m_sysroot(fn)
{ }
- bool matches(const Kit *p) const
+ bool matches(const Kit *k) const
{
- return SysRootKitInformation::sysRoot(p) == m_sysroot;
+ return SysRootKitInformation::sysRoot(k) == m_sysroot;
}
private:
@@ -125,9 +125,9 @@ public:
ToolChainMatcher(const ToolChain *tc) : m_tc(tc)
{ }
- bool matches(const Kit *p) const
+ bool matches(const Kit *k) const
{
- return ToolChainKitInformation::toolChain(p) == m_tc;
+ return ToolChainKitInformation::toolChain(k) == m_tc;
}
private:
@@ -166,9 +166,9 @@ public:
DeviceTypeMatcher(const Core::Id t) : m_type(t)
{ }
- bool matches(const Kit *p) const
+ bool matches(const Kit *k) const
{
- Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(p);
+ Core::Id deviceType = DeviceTypeKitInformation::deviceTypeId(k);
if (!deviceType.isValid())
return false;
return deviceType == m_type;
@@ -214,9 +214,9 @@ public:
DeviceMatcher(Core::Id id) : m_devId(id)
{ }
- bool matches(const Kit *p) const
+ bool matches(const Kit *k) const
{
- return DeviceKitInformation::deviceId(p) == m_devId;
+ return DeviceKitInformation::deviceId(k) == m_devId;
}
private:
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
index da8903581f..7fdfb5cf67 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.cpp
@@ -165,7 +165,7 @@ bool ToolChainInformationConfigWidget::isDirty() const
{
ToolChain *tc = ToolChainKitInformation::toolChain(m_kit);
return (m_comboBox->itemData(m_comboBox->currentIndex()).toString())
- == (tc ? tc->id() : QString());
+ != (tc ? tc->id() : QString());
}
void ToolChainInformationConfigWidget::makeReadOnly()
@@ -308,6 +308,9 @@ DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *k, QWidget *pa
m_comboBox(new QComboBox), m_manageButton(new QPushButton(this)),
m_model(new DeviceManagerModel(DeviceManager::instance()))
{
+ connect(m_model, SIGNAL(modelAboutToBeReset()), SLOT(modelAboutToReset()));
+ connect(m_model, SIGNAL(modelReset()), SLOT(modelReset()));
+
setToolTip(tr("The device to run the applications on."));
QHBoxLayout *layout = new QHBoxLayout(this);
@@ -368,5 +371,15 @@ void DeviceInformationConfigWidget::manageDevices()
QLatin1String(ProjectExplorer::Constants::DEVICE_SETTINGS_PAGE_ID));
}
+void DeviceInformationConfigWidget::modelAboutToReset()
+{
+ m_selectedId = m_model->deviceId(m_comboBox->currentIndex());
+}
+
+void DeviceInformationConfigWidget::modelReset()
+{
+ m_comboBox->setCurrentIndex(m_model->indexForId(m_selectedId));
+}
+
} // namespace Internal
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/kitinformationconfigwidget.h b/src/plugins/projectexplorer/kitinformationconfigwidget.h
index f338b9be4c..632ce87ba5 100644
--- a/src/plugins/projectexplorer/kitinformationconfigwidget.h
+++ b/src/plugins/projectexplorer/kitinformationconfigwidget.h
@@ -33,6 +33,8 @@
#include "kitconfigwidget.h"
+#include <coreplugin/id.h>
+
QT_BEGIN_NAMESPACE
class QComboBox;
class QPushButton;
@@ -148,6 +150,8 @@ public:
private slots:
void manageDevices();
+ void modelAboutToReset();
+ void modelReset();
private:
bool m_isReadOnly;
@@ -155,6 +159,7 @@ private:
QComboBox *m_comboBox;
QPushButton *m_manageButton;
DeviceManagerModel *m_model;
+ Core::Id m_selectedId;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index e90cd6dfe8..b5093acc26 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -284,14 +284,18 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName)
KitList result;
PersistentSettingsReader reader;
- if (!reader.load(fileName))
+ if (!reader.load(fileName)) {
+ qWarning("Warning: Failed to read \"%s\", can not restore kits!", qPrintable(fileName.toUserOutput()));
return result;
+ }
QVariantMap data = reader.restoreValues();
// Check version:
int version = data.value(QLatin1String(KIT_FILE_VERSION_KEY), 0).toInt();
- if (version < 1)
+ if (version < 1) {
+ qWarning("Warning: Kit file version %d not supported, can not restore kits!", version);
return result;
+ }
const int count = data.value(QLatin1String(KIT_COUNT_KEY), 0).toInt();
for (int i = 0; i < count; ++i) {
diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp
index 9e79e4b2ef..cbfc999695 100644
--- a/src/plugins/projectexplorer/kitmodel.cpp
+++ b/src/plugins/projectexplorer/kitmodel.cpp
@@ -266,7 +266,7 @@ void KitModel::setDirty()
KitConfigWidget *w = qobject_cast<KitConfigWidget *>(sender());
foreach (KitNode *n, m_manualRoot->childNodes) {
if (n->widget == w) {
- n->changed = true;
+ n->changed = n->widget->isDirty();
emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex())));
}
}
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index 0f23a403d3..b00c48ba2f 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -266,7 +266,7 @@ Target *Project::restoreTarget(const QVariantMap &data)
Kit *k = KitManager::instance()->find(id);
if (!k) {
- qWarning("Warning: No profile '%s' found. Continuing.", qPrintable(id.toString()));
+ qWarning("Warning: No kit '%s' found. Continuing.", qPrintable(id.toString()));
return 0;
}
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index 92e2e7bdcc..5c3d702b59 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -188,6 +188,7 @@ void Target::handleKitUpdates(Kit *k)
setDisplayName(k->displayName());
setIcon(k->icon());
updateDefaultDeployConfigurations();
+ updateDeviceState(); // in case the device changed...
emit kitChanged();
}
diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h
index 4fb87066a6..f35c5d1d1e 100644
--- a/src/plugins/projectexplorer/target.h
+++ b/src/plugins/projectexplorer/target.h
@@ -59,7 +59,7 @@ class PROJECTEXPLORER_EXPORT Target : public ProjectConfiguration
Q_OBJECT
public:
- Target(Project *parent, Kit *p);
+ Target(Project *parent, Kit *k);
~Target();
Project *project() const;
diff --git a/src/plugins/qmlprofiler/qmlprofilereventview.cpp b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
index 5147bcea08..33d0d14c97 100644
--- a/src/plugins/qmlprofiler/qmlprofilereventview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilereventview.cpp
@@ -184,7 +184,7 @@ void QmlProfilerEventsWidget::switchToV8View()
d->m_eventTree->setViewType(QmlProfilerEventsMainView::V8ProfileView);
d->m_eventParents->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ParentsView);
d->m_eventChildren->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ChildrenView);
- setToolTip(tr("Trace information from the v8 JavaScript engine. Available only in Qt5 based applications"));
+ setToolTip(tr("Trace information from the v8 JavaScript engine. Available only in Qt5 based applications."));
}
void QmlProfilerEventsWidget::clear()
@@ -614,7 +614,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
typeString = typeString + tr(" (Opt)");
toolTipText = tr("Binding is evaluated by the optimized engine.");
} else if (binding->bindingType == (int)V8Binding) {
- toolTipText = tr("Binding not optimized (eg. has side effects or assignments,\n"
+ toolTipText = tr("Binding not optimized (e.g. has side effects or assignments,\n"
"references to elements in other files, loops, etc.)");
}
@@ -681,7 +681,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
if (binding->isBindingLoop)
foreach (QStandardItem *item, newRow) {
item->setBackground(colors()->bindingLoopBackground);
- item->setToolTip(tr("Binding loop detected"));
+ item->setToolTip(tr("Binding loop detected."));
}
// append
@@ -921,9 +921,7 @@ void QmlProfilerEventsMainView::copyTableToClipboard() const
str += d->textForItem(d->m_model->item(i));
}
QClipboard *clipboard = QApplication::clipboard();
-# ifdef Q_WS_X11
clipboard->setText(str, QClipboard::Selection);
-# endif
clipboard->setText(str, QClipboard::Clipboard);
}
@@ -933,9 +931,7 @@ void QmlProfilerEventsMainView::copyRowToClipboard() const
str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
QClipboard *clipboard = QApplication::clipboard();
-# ifdef Q_WS_X11
clipboard->setText(str, QClipboard::Selection);
-# endif
clipboard->setText(str, QClipboard::Clipboard);
}
@@ -1041,7 +1037,7 @@ void QmlProfilerEventsParentsAndChildrenView::rebuildTree(void *profilerDataMode
if (event->inLoopPath)
foreach (QStandardItem *item, newRow) {
item->setBackground(colors()->bindingLoopBackground);
- item->setToolTip(tr("Part of binding loop"));
+ item->setToolTip(tr("Part of binding loop."));
}
} else {
QV8EventSub *event = v8List->at(index);
diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
index c4d94d9023..0cc62a6a69 100644
--- a/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
+++ b/src/plugins/qnx/blackberrydeviceconfigurationwidget.cpp
@@ -93,6 +93,14 @@ void BlackBerryDeviceConfigurationWidget::debugTokenEditingFinished()
deviceConfiguration()->setDebugToken(ui->debugToken->path());
}
+void BlackBerryDeviceConfigurationWidget::updateDeviceFromUi()
+{
+ hostNameEditingFinished();
+ passwordEditingFinished();
+ keyFileEditingFinished();
+ debugTokenEditingFinished();
+}
+
void BlackBerryDeviceConfigurationWidget::initGui()
{
ui->debugToken->setExpectedKind(Utils::PathChooser::File);
diff --git a/src/plugins/qnx/blackberrydeviceconfigurationwidget.h b/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
index 299ec4cc9c..fb8b207dcc 100644
--- a/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
+++ b/src/plugins/qnx/blackberrydeviceconfigurationwidget.h
@@ -62,6 +62,7 @@ private slots:
void debugTokenEditingFinished();
private:
+ void updateDeviceFromUi();
void initGui();
BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
diff --git a/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp b/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
index e5caae7e64..fc61671b0c 100644
--- a/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4targetsetupwidget.cpp
@@ -230,7 +230,8 @@ void Qt4TargetSetupWidget::manageKit()
page->showKit(m_kit);
Core::ICore::showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
- QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID));
+ QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID),
+ this);
}
void Qt4TargetSetupWidget::setProFilePath(const QString &proFilePath)
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index fa822d067f..d8d5abb3b9 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -511,20 +511,25 @@ void TargetSetupPage::setupImports()
if (!m_importSearch || m_proFilePath.isEmpty())
return;
- QString sourceDir = QFileInfo(m_proFilePath).absolutePath();
- import(Utils::FileName::fromString(sourceDir), true);
+ QFileInfo pfi(m_proFilePath);
+ const QString prefix = pfi.baseName();
+ QStringList toImport;
+ toImport << pfi.absolutePath();
QList<ProjectExplorer::Kit *> kitList = ProjectExplorer::KitManager::instance()->kits();
foreach (ProjectExplorer::Kit *k, kitList) {
QFileInfo fi(Qt4Project::shadowBuildDirectory(m_proFilePath, k, QString()));
const QString baseDir = fi.absolutePath();
- const QString prefix = fi.baseName();
foreach (const QString &dir, QDir(baseDir).entryList()) {
- if (dir.startsWith(prefix))
- import(Utils::FileName::fromString(baseDir + QLatin1Char('/') + dir), true);
+ const QString path = baseDir + QLatin1Char('/') + dir;
+ if (dir.startsWith(prefix) && !toImport.contains(path))
+ toImport << path;
+
}
}
+ foreach (const QString &path, toImport)
+ import(Utils::FileName::fromString(path), true);
}
void TargetSetupPage::handleKitAddition(ProjectExplorer::Kit *k)
@@ -609,7 +614,8 @@ void TargetSetupPage::updateVisibility()
void TargetSetupPage::openOptions()
{
Core::ICore::instance()->showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
- QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID));
+ QLatin1String(ProjectExplorer::Constants::KITS_SETTINGS_PAGE_ID),
+ this);
}
void TargetSetupPage::removeWidget(ProjectExplorer::Kit *k)
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index 9dfec0343d..e533246d0f 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -635,7 +635,7 @@ void QtOptionsPageWidget::addQtDir()
{
Utils::FileName qtVersion = Utils::FileName::fromString(
QFileInfo(QFileDialog::getOpenFileName(this,
- tr("Select a qmake executable"),
+ tr("Select a qmake Executable"),
QString(),
filterForQmakeFileDialog(),
0,
@@ -645,7 +645,7 @@ void QtOptionsPageWidget::addQtDir()
BaseQtVersion *version = QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion);
if (version) {
// Already exist
- QMessageBox::warning(this, tr("Qt known"),
+ QMessageBox::warning(this, tr("Qt Version Already Registered"),
tr("This Qt version was already registered as \"%1\".")
.arg(version->displayName()));
return;
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
index b2d87407c2..343c19a8d4 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.cpp
@@ -151,6 +151,17 @@ void GenericLinuxDeviceConfigurationWidget::createNewKey()
setPrivateKey(dialog.privateKeyFilePath());
}
+void GenericLinuxDeviceConfigurationWidget::updateDeviceFromUi()
+{
+ hostNameEditingFinished();
+ sshPortEditingFinished();
+ timeoutEditingFinished();
+ userNameEditingFinished();
+ passwordEditingFinished();
+ keyFileEditingFinished();
+ handleFreePortsChanged();
+}
+
void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel()
{
m_ui->portsWarningLabel->setVisible(!device()->freePorts().hasMore());
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
index 0b996fb1e9..3a0d2f1229 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationwidget.h
@@ -64,6 +64,7 @@ private slots:
void createNewKey();
private:
+ void updateDeviceFromUi();
void updatePortsWarningLabel();
void initGui();
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
index fce4f33299..b97399d7b8 100644
--- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
+++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp
@@ -252,6 +252,7 @@ public:
QPointer<GenericProposalInfoFrame> m_infoFrame;
QTimer m_infoTimer;
CodeAssistant *m_assistant;
+ bool m_autoWidth;
public slots:
void handleActivation(const QModelIndex &modelIndex);
@@ -266,6 +267,7 @@ GenericProposalWidgetPrivate::GenericProposalWidgetPrivate(QWidget *completionWi
, m_explicitlySelected(false)
, m_justInvoked(false)
, m_assistant(0)
+ , m_autoWidth(true)
{
connect(m_completionListView, SIGNAL(activated(QModelIndex)),
this, SLOT(handleActivation(QModelIndex)));
@@ -330,6 +332,10 @@ GenericProposalWidget::GenericProposalWidget()
d->m_completionListView->setMinimumSize(1, 1);
connect(d->m_completionListView->verticalScrollBar(), SIGNAL(valueChanged(int)),
this, SLOT(updatePositionAndSize()));
+ connect(d->m_completionListView->verticalScrollBar(), SIGNAL(sliderPressed()),
+ this, SLOT(turnOffAutoWidth()));
+ connect(d->m_completionListView->verticalScrollBar(), SIGNAL(sliderReleased()),
+ this, SLOT(turnOnAutoWidth()));
QVBoxLayout *layout = new QVBoxLayout(this);
layout->setMargin(0);
@@ -494,6 +500,9 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix)
void GenericProposalWidget::updatePositionAndSize()
{
+ if (!d->m_autoWidth)
+ return;
+
const QSize &shint = d->m_completionListView->calculateSize();
const int fw = frameWidth();
const int width = shint.width() + fw * 2 + 30;
@@ -514,6 +523,17 @@ void GenericProposalWidget::updatePositionAndSize()
setGeometry(pos.x(), pos.y(), width, height);
}
+void GenericProposalWidget::turnOffAutoWidth()
+{
+ d->m_autoWidth = false;
+}
+
+void GenericProposalWidget::turnOnAutoWidth()
+{
+ d->m_autoWidth = true;
+ updatePositionAndSize();
+}
+
bool GenericProposalWidget::eventFilter(QObject *o, QEvent *e)
{
if (e->type() == QEvent::FocusOut) {
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.h b/src/plugins/texteditor/codeassist/genericproposalwidget.h
index 745f7d51bc..77a1688ef3 100644
--- a/src/plugins/texteditor/codeassist/genericproposalwidget.h
+++ b/src/plugins/texteditor/codeassist/genericproposalwidget.h
@@ -65,6 +65,8 @@ private:
private slots:
void updatePositionAndSize();
+ void turnOffAutoWidth();
+ void turnOnAutoWidth();
protected:
virtual bool eventFilter(QObject *o, QEvent *e);
diff --git a/src/plugins/texteditor/findinopenfiles.cpp b/src/plugins/texteditor/findinopenfiles.cpp
index 2c7e942a79..979417f5d4 100644
--- a/src/plugins/texteditor/findinopenfiles.cpp
+++ b/src/plugins/texteditor/findinopenfiles.cpp
@@ -89,7 +89,7 @@ QVariant FindInOpenFiles::additionalParameters() const
QString FindInOpenFiles::label() const
{
- return tr("Open Documents:");
+ return tr("Open documents:");
}
QString FindInOpenFiles::toolTip() const
diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp
index 219fab2a8b..ada0f6fcaf 100644
--- a/src/plugins/texteditor/fontsettings.cpp
+++ b/src/plugins/texteditor/fontsettings.cpp
@@ -55,15 +55,13 @@ static const bool DEFAULT_ANTIALIAS = true;
#ifdef Q_OS_MAC
enum { DEFAULT_FONT_SIZE = 12 };
static const char *DEFAULT_FONT_FAMILY = "Monaco";
-#else
-#ifdef Q_WS_X11
+#elif defined(Q_OS_UNIX)
enum { DEFAULT_FONT_SIZE = 9 };
static const char *DEFAULT_FONT_FAMILY = "Monospace";
#else
enum { DEFAULT_FONT_SIZE = 10 };
static const char *DEFAULT_FONT_FAMILY = "Courier";
#endif
-#endif
} // anonymous namespace
namespace TextEditor {
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 445bf48ac1..4afb3cb954 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -510,8 +510,8 @@ void UrlTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type)
{
Q_UNUSED(type);
menu->addSeparator();
- menu->addAction(createOpenUrlAction(tr("Open URL in browser...")));
- menu->addAction(createCopyUrlAction(tr("Copy URL location")));
+ menu->addAction(createOpenUrlAction(tr("Open URL in Browser...")));
+ menu->addAction(createCopyUrlAction(tr("Copy URL Location")));
}
QString UrlTextCursorHandler::currentContents() const
@@ -575,8 +575,8 @@ void EmailTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type
{
Q_UNUSED(type);
menu->addSeparator();
- menu->addAction(createOpenUrlAction(tr("Send email to...")));
- menu->addAction(createCopyUrlAction(tr("Copy email address")));
+ menu->addAction(createOpenUrlAction(tr("Send Email To...")));
+ menu->addAction(createCopyUrlAction(tr("Copy Email Address")));
}
void EmailTextCursorHandler::slotOpenUrl()
diff --git a/src/tools/sdktool/README.txt b/src/tools/sdktool/README.txt
index be6f2225ff..9e21e73cbb 100644
--- a/src/tools/sdktool/README.txt
+++ b/src/tools/sdktool/README.txt
@@ -119,6 +119,7 @@ Add a Kit using the newly set up tool chain and Qt version:
Tricky parts:
- debuggerengine is the integer used in the enum Debugger::DebuggerEngineType
The most important type is 1 for GDB.
+ - debugger can be a absolute path or the value: 'auto'
- devicetype is the string returned IDevice::type()
diff --git a/src/tools/sdktool/addkeysoperation.cpp b/src/tools/sdktool/addkeysoperation.cpp
index 4cc898088a..f87dcacdcc 100644
--- a/src/tools/sdktool/addkeysoperation.cpp
+++ b/src/tools/sdktool/addkeysoperation.cpp
@@ -113,7 +113,7 @@ bool AddKeysOperation::test() const
data.append(KeyValuePair(QLatin1String("newsub/1/2.1/3/qbytearray"), QString::fromLatin1("QByteArray:test array.")));
QVariantMap result = addKeys(testMap, data);
- if (!result.count() == 8)
+ if (result.count() != 8)
return false;
// subkeys:
diff --git a/src/tools/sdktool/addkitoperation.cpp b/src/tools/sdktool/addkitoperation.cpp
index ba5a05d46f..4fd5104efb 100644
--- a/src/tools/sdktool/addkitoperation.cpp
+++ b/src/tools/sdktool/addkitoperation.cpp
@@ -63,6 +63,12 @@ static char TOOLCHAIN[] = "PE.Profile.ToolChain";
static char MKSPEC[] = "QtPM4.mkSpecInformation";
static char QT[] = "QtSupport.QtInformation";
+AddKitOperation::AddKitOperation()
+ : m_debuggerEngine(0)
+ , m_debugger(QLatin1String("auto"))
+{
+}
+
QString AddKitOperation::name() const
{
return QLatin1String("addKit");
@@ -216,7 +222,7 @@ bool AddKitOperation::test() const
{
QVariantMap map = initializeKits();
- if (!map.count() == 3
+ if (map.count() != 3
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
|| !map.contains(QLatin1String(COUNT))
@@ -231,7 +237,7 @@ bool AddKitOperation::test() const
QLatin1String("{some-tc-id}"), QLatin1String("{some-qt-id}"), QLatin1String("unsupported/mkspec"),
KeyValuePairList() << KeyValuePair(QLatin1String("PE.Profile.Data/extraData"), QVariant(QLatin1String("extraValue"))));
- if (!map.count() == 4
+ if (map.count() != 4
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
|| !map.contains(QLatin1String(COUNT))
@@ -242,7 +248,7 @@ bool AddKitOperation::test() const
return false;
QVariantMap profile0 = map.value(QLatin1String("Profile.0")).toMap();
- if (!profile0.count() == 6
+ if (profile0.count() != 6
|| !profile0.contains(QLatin1String(ID))
|| profile0.value(QLatin1String(ID)).toString() != QLatin1String("testId")
|| !profile0.contains(QLatin1String(DISPLAYNAME))
@@ -266,7 +272,7 @@ bool AddKitOperation::test() const
QLatin1String("Desktop"), QString(),
QLatin1String("{some-tc-id2}"), QLatin1String("{some-qt-id2}"), QLatin1String("unsupported/mkspec2"),
KeyValuePairList() << KeyValuePair(QLatin1String("PE.Profile.Data/extraData"), QVariant(QLatin1String("extraValue2"))));
- if (!map.count() == 5
+ if (map.count() != 5
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
|| !map.contains(QLatin1String(COUNT))
@@ -280,7 +286,7 @@ bool AddKitOperation::test() const
return false;
QVariantMap profile1 = map.value(QLatin1String("Profile.1")).toMap();
- if (!profile1.count() == 6
+ if (profile1.count() != 6
|| !profile1.contains(QLatin1String(ID))
|| profile1.value(QLatin1String(ID)).toString() != QLatin1String("testId2")
|| !profile1.contains(QLatin1String(DISPLAYNAME))
diff --git a/src/tools/sdktool/addkitoperation.h b/src/tools/sdktool/addkitoperation.h
index e526bcb604..e1910674b3 100644
--- a/src/tools/sdktool/addkitoperation.h
+++ b/src/tools/sdktool/addkitoperation.h
@@ -38,6 +38,8 @@
class AddKitOperation : public Operation
{
public:
+ AddKitOperation();
+
QString name() const;
QString helpText() const;
QString argumentsHelpText() const;
diff --git a/src/tools/sdktool/addqtoperation.cpp b/src/tools/sdktool/addqtoperation.cpp
index 7ed44d7754..c643e2a625 100644
--- a/src/tools/sdktool/addqtoperation.cpp
+++ b/src/tools/sdktool/addqtoperation.cpp
@@ -149,14 +149,14 @@ bool AddQtOperation::test() const
QLatin1String("/tmp/test/qmake"),
KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
- if (!map.count() == 2
+ if (map.count() != 2
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
|| !map.contains(QLatin1String("QtVersion.0")))
return false;
QVariantMap version0 = map.value(QLatin1String("QtVersion.0")).toMap();
- if (!version0.count() == 6
+ if (version0.count() != 6
|| !version0.contains(QLatin1String(ID))
|| version0.value(QLatin1String(ID)).toInt() != -1
|| !version0.contains(QLatin1String(DISPLAYNAME))
@@ -184,7 +184,7 @@ bool AddQtOperation::test() const
map = addQt(map, QLatin1String("testId2"), QLatin1String("Test Qt Version"), QLatin1String("testType3"),
QLatin1String("/tmp/test/qmake2"),
KeyValuePairList() << KeyValuePair(QLatin1String("extraData"), QVariant(QLatin1String("extraValue"))));
- if (!map.count() == 3
+ if (map.count() != 3
|| !map.contains(QLatin1String(VERSION))
|| map.value(QLatin1String(VERSION)).toInt() != 1
|| !map.contains(QLatin1String("QtVersion.0"))
@@ -195,7 +195,7 @@ bool AddQtOperation::test() const
return false;
QVariantMap version1 = map.value(QLatin1String("QtVersion.1")).toMap();
- if (!version1.count() == 6
+ if (version1.count() != 6
|| !version1.contains(QLatin1String(ID))
|| version1.value(QLatin1String(ID)).toInt() != -1
|| !version1.contains(QLatin1String(DISPLAYNAME))
diff --git a/src/tools/sdktool/addtoolchainoperation.cpp b/src/tools/sdktool/addtoolchainoperation.cpp
index 01317d7b9a..73acc045f8 100644
--- a/src/tools/sdktool/addtoolchainoperation.cpp
+++ b/src/tools/sdktool/addtoolchainoperation.cpp
@@ -183,7 +183,7 @@ bool AddToolChainOperation::test() const
map = addToolChain(map, QLatin1String("testId2"), QLatin1String("name"), QLatin1String("/tmp/test"),
QLatin1String("test-abi"), QLatin1String("test-abi,test-abi2"),
KeyValuePairList() << KeyValuePair(QLatin1String("ExtraKey"), QVariant(QLatin1String("ExtraValue"))));
- if (!map.value(QLatin1String(COUNT)).toInt() == 2
+ if (map.value(QLatin1String(COUNT)).toInt() != 2
|| !map.contains(QString::fromLatin1(PREFIX) + QLatin1Char('0'))
|| !map.contains(QString::fromLatin1(PREFIX) + QLatin1Char('1')))
return false;
diff --git a/tests/system/objects.map b/tests/system/objects.map
index ce30f1bdaf..98896e6c4f 100644
--- a/tests/system/objects.map
+++ b/tests/system/objects.map
@@ -105,6 +105,8 @@
:QtSupport__Internal__QtVersionManager.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' type='QLabel' unnamed='1' visible='1'}
:QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'}
:QtSupport__Internal__QtVersionManager.qtdirList_QTreeWidget {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qtdirList' type='QTreeWidget' visible='1'}
+:Revert to Saved.Proceed_QPushButton {text='Proceed' type='QPushButton' unnamed='1' visible='1' window=':Revert to Saved_QMessageBox'}
+:Revert to Saved_QMessageBox {text?='You will lose your current changes if you proceed reverting*' type='QMessageBox' unnamed='1' visible='1'}
:Startup.contextHelpComboBox_QComboBox {container=':Form.Startup_QGroupBox' name='contextHelpComboBox' type='QComboBox' visible='1'}
:Symbol Server_Utils::CheckableMessageBox {type='Utils::CheckableMessageBox' unnamed='1' visible='1' windowTitle='Symbol Server'}
:addToVersionControlComboBox_QComboBox {name='addToVersionControlComboBox' type='QComboBox' visible='1'}
diff --git a/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml b/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
index 05a7e5e39b..a2525c73ac 100644
--- a/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
+++ b/tests/system/settings/unix/Nokia/qtcreator/toolchains.xml
@@ -10,6 +10,7 @@
<value type="QString">x86-linux-generic-elf-64bit</value>
<value type="QString">x86-linux-generic-elf-32bit</value>
</valuelist>
+ <value type="QString" key="ProjectExplorer.GccToolChain.TargetAbi">SET_BY_SQUISH</value>
<value type="bool" key="ProjectExplorer.ToolChain.Autodetect">false</value>
<value type="QString" key="ProjectExplorer.ToolChain.DisplayName">GCC</value>
<value type="QString" key="ProjectExplorer.ToolChain.Id">ProjectExplorer.ToolChain.Gcc:{c3f59b87-6997-4bd8-8067-ee04dc536371}</value>
diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py
index 1bb7c5d3fc..6ae6dc9cc4 100644
--- a/tests/system/shared/qtcreator.py
+++ b/tests/system/shared/qtcreator.py
@@ -5,6 +5,7 @@ import glob;
import atexit;
import codecs;
import subprocess;
+import sys
import errno;
from datetime import datetime,timedelta;
@@ -83,6 +84,69 @@ def substituteTildeWithinToolchains(settingsDir):
os.remove(origToolchains)
test.log("Substituted all tildes with '%s' inside toolchains.xml..." % home)
+def __guessABI__(supportedABIs, use64Bit):
+ if use64Bit:
+ searchFor = "64bit"
+ else:
+ searchFor = "32bit"
+ for abi in supportedABIs:
+ if searchFor in abi:
+ return abi
+ if use64Bit:
+ test.log("Supported ABIs do not include an ABI supporting 64bit - trying 32bit now")
+ return __guessABI__(supportedABIs, False)
+ test.fatal('Could not guess ABI!',
+ 'Given ABIs: %s' % str(supportedABIs))
+ return ''
+
+def __is64BitOS__():
+ if platform.system() == 'Darwin':
+ return sys.maxsize > (2 ** 32)
+ if platform.system() in ('Microsoft', 'Windows'):
+ machine = os.getenv("PROCESSOR_ARCHITEW6432", os.getenv("PROCESSOR_ARCHITECTURE"))
+ else:
+ machine = platform.machine()
+ if machine:
+ return '64' in machine
+ else:
+ return False
+
+def substituteUnchosenTargetABIs(settingsDir):
+ class ReadState:
+ NONE = 0
+ READING = 1
+ CLOSED = 2
+
+ on64Bit = __is64BitOS__()
+ toolchains = os.path.join(settingsDir, "Nokia", 'qtcreator', 'toolchains.xml')
+ origToolchains = toolchains + "_orig"
+ os.rename(toolchains, origToolchains)
+ origFile = open(origToolchains, "r")
+ modifiedFile = open(toolchains, "w")
+ supported = []
+ readState = ReadState.NONE
+ for line in origFile:
+ if readState == ReadState.NONE:
+ if "SupportedAbis" in line:
+ supported = []
+ readState = ReadState.READING
+ elif readState == ReadState.READING:
+ if "</valuelist>" in line:
+ readState = ReadState.CLOSED
+ else:
+ supported.append(line.split(">", 1)[1].rsplit("<", 1)[0])
+ elif readState == ReadState.CLOSED:
+ if "SupportedAbis" in line:
+ supported = []
+ readState = ReadState.READING
+ elif "SET_BY_SQUISH" in line:
+ line = line.replace("SET_BY_SQUISH", __guessABI__(supported, on64Bit))
+ modifiedFile.write(line)
+ origFile.close()
+ modifiedFile.close()
+ os.remove(origToolchains)
+ test.log("Substituted unchosen ABIs inside toolchains.xml...")
+
if platform.system() in ('Windows', 'Microsoft'):
sdkPath = "C:\\QtSDK"
cwd = os.getcwd() # current dir is directory holding qtcreator.py
@@ -103,5 +167,6 @@ if os.getenv("SYSTEST_NOSETTINGSPATH") != "1":
shutil.copytree(cwd, tmpSettingsDir)
if platform.system() in ('Linux', 'Darwin'):
substituteTildeWithinToolchains(tmpSettingsDir)
+ substituteUnchosenTargetABIs(tmpSettingsDir)
atexit.register(__removeTmpSettingsDir__)
SettingsPath = ' -settingspath "%s"' % tmpSettingsDir
diff --git a/tests/system/suite_editors/suite.conf b/tests/system/suite_editors/suite.conf
new file mode 100644
index 0000000000..717453e22d
--- /dev/null
+++ b/tests/system/suite_editors/suite.conf
@@ -0,0 +1,12 @@
+AUT=qtcreator
+CLASS=
+CLASSPATH=
+CWD=
+ENVVARS=envvars
+HOOK_SUB_PROCESSES=false
+IMPLICITAUTSTART=0
+LANGUAGE=Python
+OBJECTMAP=../objects.map
+TEST_CASES=tst_memberoperator
+VERSION=2
+WRAPPERS=Qt
diff --git a/tests/system/suite_editors/tst_memberoperator/test.py b/tests/system/suite_editors/tst_memberoperator/test.py
new file mode 100644
index 0000000000..7e329ba900
--- /dev/null
+++ b/tests/system/suite_editors/tst_memberoperator/test.py
@@ -0,0 +1,26 @@
+source("../../shared/qtcreator.py")
+
+def main():
+ startApplication("qtcreator" + SettingsPath)
+ createProject_Qt_Console(tempDir(), "SquishProject")
+ selectFromLocator("main.cpp")
+ cppwindow = waitForObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget")
+
+ for record in testData.dataset("usages.tsv"):
+ include = testData.field(record, "include")
+ if include:
+ placeCursorToLine(cppwindow, "#include <QCoreApplication>")
+ typeLines(cppwindow, ("", "#include " + include))
+ placeCursorToLine(cppwindow, "return a.exec();")
+ typeLines(cppwindow, ("<Up>", testData.field(record, "declaration")))
+ type(cppwindow, testData.field(record, "usage"))
+ waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}",
+ "sourceFilesRefreshed(QStringList)")
+ type(cppwindow, testData.field(record, "operator"))
+ waitForSignal("{type='CppTools::Internal::CppModelManager' unnamed='1'}",
+ "sourceFilesRefreshed(QStringList)")
+ test.compare(str(lineUnderCursor(cppwindow)).strip(), testData.field(record, "expected"))
+ invokeMenuItem("File", 'Revert "main.cpp" to Saved')
+ clickButton(waitForObject(":Revert to Saved.Proceed_QPushButton"))
+
+ invokeMenuItem("File", "Exit")
diff --git a/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv b/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv
new file mode 100644
index 0000000000..a1e21767bf
--- /dev/null
+++ b/tests/system/suite_editors/tst_memberoperator/testdata/usages.tsv
@@ -0,0 +1,23 @@
+"include" "declaration" "usage" "operator" "expected"
+"" "" "syntaxError" "." "syntaxError."
+"" "" "argc" "." "argc."
+"" "" "argv[0]" "." "argv[0]."
+"" "QCoreApplication qa;" "qa" "." "qa."
+"" "QCoreApplication *p;" "p" "." "p->"
+"" "QCoreApplication &ref = a;" "ref" "." "ref."
+"<QPointer>" "QPointer p;" "p" "." "p."
+"<QPointer>" "QPointer *poi;" "poi" "." "poi->"
+"<QPointer>" "QPointer &poi;" "poi" "." "poi."
+"<QPointer>" "QPointer poi[5];" "poi[2]" "." "poi[2]."
+"<QPointer>" "QPointer *poi[5];" "poi[2]" "." "poi[2]->"
+"<memory>" "std::auto_ptr sap;" "sap" "." "sap."
+"<memory>" "std::auto_ptr *sap;" "sap" "." "sap->"
+"<memory>" "std::auto_ptr &sap;" "sap" "." "sap."
+"<memory>" "std::auto_ptr sap[10];" "sap[2]" "." "sap[2]."
+"<memory>" "std::auto_ptr *sap[10];" "sap[2]" "." "sap[2]->"
+"<QVector>" "QVector<QCoreApplication> vec;" "vec" "." "vec."
+"<QVector>" "QVector<QCoreApplication *> vec;" "vec" "." "vec."
+"<QVector>" "QVector<QCoreApplication> *vec;" "vec" "." "vec->"
+"<QVector>" "QVector<QCoreApplication *> *vec;" "vec" "." "vec->"
+"<QVector>" "QVector<QCoreApplication> vec;" "vec[0]" "." "vec[0]."
+"<QVector>" "QVector<QCoreApplication *> vec;" "vec[0]" "." "vec[0]->"