forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: dist/gdb/Makefile.osx src/libs/qmldebug/qmldebug.qbs src/plugins/android/androidsettingswidget.cpp Change-Id: I85627130b575f7d08f416dea52031fa72019b217
This commit is contained in:
2
dist/gdb/Makefile.linux
vendored
2
dist/gdb/Makefile.linux
vendored
@@ -1,6 +1,6 @@
|
|||||||
broot=${PWD}
|
broot=${PWD}
|
||||||
source=${broot}/source
|
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
|
staging=${broot}/staging
|
||||||
pyversion=2.7
|
pyversion=2.7
|
||||||
expatversion=2.0.1
|
expatversion=2.0.1
|
||||||
|
2
dist/gdb/Makefile.mingw
vendored
2
dist/gdb/Makefile.mingw
vendored
@@ -1,6 +1,6 @@
|
|||||||
broot=${PWD}
|
broot=${PWD}
|
||||||
source=${broot}/source
|
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
|
staging=${broot}/staging
|
||||||
pyversion=2.7
|
pyversion=2.7
|
||||||
pydir=${broot}/python
|
pydir=${broot}/python
|
||||||
|
2
dist/gdb/Makefile.osx
vendored
2
dist/gdb/Makefile.osx
vendored
@@ -1,6 +1,6 @@
|
|||||||
broot=${PWD}
|
broot=${PWD}
|
||||||
source=${broot}/source
|
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
|
staging=${broot}/staging
|
||||||
pyversion=2.7
|
pyversion=2.7
|
||||||
expatversion=2.0.1
|
expatversion=2.0.1
|
||||||
|
24
dist/installer/ifw/config/config.xml.in
vendored
Normal file
24
dist/installer/ifw/config/config.xml.in
vendored
Normal file
@@ -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>
|
BIN
dist/installer/ifw/config/logo.png
vendored
Normal file
BIN
dist/installer/ifw/config/logo.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
dist/installer/ifw/config/watermark.png
vendored
Normal file
BIN
dist/installer/ifw/config/watermark.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
155
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
vendored
Normal file
155
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/installscript.qs
vendored
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
504
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
vendored
Normal file
504
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/license.txt
vendored
Normal file
@@ -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!
|
||||||
|
|
||||||
|
|
15
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
vendored
Normal file
15
dist/installer/ifw/packages/org.qtproject.qtcreator.application/meta/package.xml.in
vendored
Normal file
@@ -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>
|
9
dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
vendored
Normal file
9
dist/installer/ifw/packages/org.qtproject.qtcreator/meta/package.xml.in
vendored
Normal file
@@ -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>
|
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 42 KiB |
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 42 KiB |
@@ -41,6 +41,10 @@
|
|||||||
\o Bazaar
|
\o Bazaar
|
||||||
\o \l{http://bazaar.canonical.com/}
|
\o \l{http://bazaar.canonical.com/}
|
||||||
\o \QC 2.2 and later
|
\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
|
\row
|
||||||
\o CVS
|
\o CVS
|
||||||
\o \l{http://www.cvshome.org}
|
\o \l{http://www.cvshome.org}
|
||||||
@@ -304,7 +308,45 @@
|
|||||||
|
|
||||||
\endtable
|
\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.
|
CVS is an open source version control system.
|
||||||
|
|
||||||
|
@@ -116,9 +116,10 @@
|
|||||||
|
|
||||||
\o Qt Quick Application (Built-in Elements)
|
\o Qt Quick Application (Built-in Elements)
|
||||||
|
|
||||||
Use built-in QML elements to design Qt Quick based user
|
Use built-in QML elements to design user interfaces based on
|
||||||
interfaces with a custom look and feel and QML and C++ code to
|
Qt Quick 1 (Qt 4.7.1, or later) or Qt Quick 2 (Qt 5) with a
|
||||||
implement the application logic
|
custom look and feel and QML and C++ code to implement the
|
||||||
|
application logic
|
||||||
|
|
||||||
\o Qt Quick Application for MeeGo Harmattan
|
\o Qt Quick Application for MeeGo Harmattan
|
||||||
|
|
||||||
|
@@ -50,6 +50,14 @@
|
|||||||
custom look and feel, whereas the components provide the look and
|
custom look and feel, whereas the components provide the look and
|
||||||
feel for a particular platform.
|
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
|
\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
|
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
|
projects in the QML Viewer and you need not build them. You do not
|
||||||
@@ -68,16 +76,6 @@
|
|||||||
|
|
||||||
\endlist
|
\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
|
\section1 Creating Qt Quick UI Projects
|
||||||
|
|
||||||
\list 1
|
\list 1
|
||||||
|
@@ -27,6 +27,7 @@ PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
|
|||||||
macx {
|
macx {
|
||||||
APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
|
APPBUNDLE = "$$OUT_PWD/bin/Qt Creator.app"
|
||||||
BINDIST_SOURCE = "$$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}\"
|
deployqt.commands = $$PWD/scripts/deployqtHelper_mac.sh \"$${APPBUNDLE}\"
|
||||||
codesign.commands = codesign -s \"$(SIGNING_IDENTITY)\" \"$${APPBUNDLE}\"
|
codesign.commands = codesign -s \"$(SIGNING_IDENTITY)\" \"$${APPBUNDLE}\"
|
||||||
dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-$${PATTERN}.dmg
|
dmg.commands = $$PWD/scripts/makedmg.sh $$OUT_PWD/bin qt-creator-$${PATTERN}.dmg
|
||||||
@@ -34,6 +35,7 @@ macx {
|
|||||||
QMAKE_EXTRA_TARGETS += codesign dmg
|
QMAKE_EXTRA_TARGETS += codesign dmg
|
||||||
} else {
|
} else {
|
||||||
BINDIST_SOURCE = "$(INSTALL_ROOT)$$QTC_PREFIX"
|
BINDIST_SOURCE = "$(INSTALL_ROOT)$$QTC_PREFIX"
|
||||||
|
BINDIST_INSTALLER_SOURCE = "$$BINDIST_SOURCE/*"
|
||||||
deployqt.commands = $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX\"
|
deployqt.commands = $$PWD/scripts/deployqt.py -i \"$(INSTALL_ROOT)$$QTC_PREFIX\"
|
||||||
deployqt.depends = install
|
deployqt.depends = install
|
||||||
win32 {
|
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.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 {
|
win32 {
|
||||||
deployqt.commands ~= s,/,\\\\,g
|
deployqt.commands ~= s,/,\\\\,g
|
||||||
bindist.commands ~= s,/,\\\\,g
|
bindist.commands ~= s,/,\\\\,g
|
||||||
|
bindist_installer.commands ~= s,/,\\\\,g
|
||||||
|
installer.commands ~= s,/,\\\\,g
|
||||||
}
|
}
|
||||||
|
|
||||||
bindist.depends = deployqt
|
QMAKE_EXTRA_TARGETS += deployqt bindist bindist_installer installer
|
||||||
|
|
||||||
QMAKE_EXTRA_TARGETS += deployqt bindist
|
|
||||||
|
132
scripts/packageIfw.py
Executable file
132
scripts/packageIfw.py
Executable file
@@ -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()
|
@@ -7416,10 +7416,6 @@ Fehler: %2</translation>
|
|||||||
<source>Run</source>
|
<source>Run</source>
|
||||||
<translation>Ausführen</translation>
|
<translation>Ausführen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>No executable</source>
|
|
||||||
<translation>Keine ausführbare Datei</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ProjectExplorer::Internal::ProcessStep</name>
|
<name>ProjectExplorer::Internal::ProcessStep</name>
|
||||||
@@ -12253,10 +12249,6 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
|
|||||||
<source>There are no changes to commit.</source>
|
<source>There are no changes to commit.</source>
|
||||||
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
|
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Unable to create an editor for the commit.</source>
|
<source>Unable to create an editor for the commit.</source>
|
||||||
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
|
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
|
||||||
@@ -13279,6 +13271,14 @@ Sie können die Änderungen in einem Stash ablegen oder zurücksetzen.</translat
|
|||||||
<source>File '%1' does not exist or is not readable.</source>
|
<source>File '%1' does not exist or is not readable.</source>
|
||||||
<translation>Die Datei '%1' existiert nicht oder ist nicht lesbar.</translation>
|
<translation>Die Datei '%1' existiert nicht oder ist nicht lesbar.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Device type is not desktop.</source>
|
||||||
|
<translation>Der Gerätetyp ist nicht "Desktop".</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No Qt version set in kit.</source>
|
||||||
|
<translation>Im Kit ist keine Qt-Version gesetzt.</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QmlProjectManager::Internal::QmlProjectApplicationWizardDialog</name>
|
<name>QmlProjectManager::Internal::QmlProjectApplicationWizardDialog</name>
|
||||||
@@ -13570,6 +13570,10 @@ Erfordert <b>Qt 4.7.4</b> oder neuer.</translation>
|
|||||||
<source>Evaluating</source>
|
<source>Evaluating</source>
|
||||||
<translation>Auswertung</translation>
|
<translation>Auswertung</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No Qt version set in kit.</source>
|
||||||
|
<translation>Im Kit ist keine Qt-Version gesetzt.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The .pro file '%1' does not exist.</source>
|
<source>The .pro file '%1' does not exist.</source>
|
||||||
<translation>Die .pro-Datei '%1' existiert nicht.</translation>
|
<translation>Die .pro-Datei '%1' existiert nicht.</translation>
|
||||||
@@ -18813,10 +18817,6 @@ Lokale Pull-Operationen werden nicht auf den Master-Branch angewandt.</translati
|
|||||||
<source>There are no changes to commit.</source>
|
<source>There are no changes to commit.</source>
|
||||||
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
|
<translation>Es sind keine ausstehenden Änderungen vorhanden.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Unable to create an editor for the commit.</source>
|
<source>Unable to create an editor for the commit.</source>
|
||||||
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
|
<translation>Es konnte kein Editor für die Abgabe angelegt werden.</translation>
|
||||||
@@ -19730,6 +19730,10 @@ Fehler: %2</translation>
|
|||||||
<source>Kit Selection</source>
|
<source>Kit Selection</source>
|
||||||
<translation>Kit-Auswahl</translation>
|
<translation>Kit-Auswahl</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>%1 - temporary</source>
|
||||||
|
<translation>%1 - temporär</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Qt Creator can use the following kits for project <b>%1</b>:</source>
|
<source>Qt Creator can use the following kits for project <b>%1</b>:</source>
|
||||||
<comment>%1: Project name</comment>
|
<comment>%1: Project name</comment>
|
||||||
@@ -20245,7 +20249,7 @@ Bei vollständiger Cache-Simulation werden weitere Ereigniszähler aktiviert:
|
|||||||
<translation>Globale Bus-Ereignisse aufnehmen</translation>
|
<translation>Globale Bus-Ereignisse aufnehmen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Visualisation: Minimum event cost:</source>
|
<source>Visualization: Minimum event cost:</source>
|
||||||
<translation>Minimale Ereigniskosten für Visualisierung:</translation>
|
<translation>Minimale Ereigniskosten für Visualisierung:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@@ -21327,10 +21331,22 @@ Bitte verwenden Sie den Stop-Button.</translation>
|
|||||||
<source>Debugging Helper Build Log for '%1'</source>
|
<source>Debugging Helper Build Log for '%1'</source>
|
||||||
<translation>Erstellungsprotokoll der Ausgabe-Hilfsbibliothek für '%1'</translation>
|
<translation>Erstellungsprotokoll der Ausgabe-Hilfsbibliothek für '%1'</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Select a qmake executable</source>
|
<source>Select a qmake executable</source>
|
||||||
<translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
|
<translation>Wählen Sie die ausführbare qmake-Datei aus</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>This Qt version was already registered as "%1".</source>
|
||||||
|
<translation>Diese Qt-Version ist bereits unter "%1" registriert.</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Helpers: None available</source>
|
<source>Helpers: None available</source>
|
||||||
<translation>Hilfskomponenten: Keine verfügbar</translation>
|
<translation>Hilfskomponenten: Keine verfügbar</translation>
|
||||||
@@ -26030,11 +26046,11 @@ should a repository require SSH-authentication (see documentation on SSH and the
|
|||||||
<translation>IDE-Überblick</translation>
|
<translation>IDE-Überblick</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<translation>Um herauszufinden, um welche Art von integrierter Entwicklungsumgebung es sich bei Qt Creator handelt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
<translation>Um sich mit den Teilen der Benutzeroberfläche von Qt Creator vertraut zu machen und ihre Bedienung zu erlernen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@@ -26815,8 +26831,8 @@ Möchten Sie es beenden?</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>QmlProfiler::Internal::QmlProfilerEventsWidget</name>
|
<name>QmlProfiler::Internal::QmlProfilerEventsWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Trace information from the v8 JavaScript engine. Available only in Qt5 based applications</source>
|
<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>
|
<translation>Trace-Information vom v8 JavaScript-Engine. Nur in Qt-5 basierten Anwendungen verfügbar.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Copy Row</source>
|
<source>Copy Row</source>
|
||||||
@@ -26898,13 +26914,13 @@ Möchten Sie es beenden?</translation>
|
|||||||
<translation>Das Binding wird von der optimierten Engine ausgewertet.</translation>
|
<translation>Das Binding wird von der optimierten Engine ausgewertet.</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
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>
|
<translation>Das Binding ist nicht optimiert (d.h., es hat Seiteneffekte oder Zuweisungen, Referenzen zu Elementen in anderen Dateien, Schleifen, etc.)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Binding loop detected</source>
|
<source>Binding loop detected.</source>
|
||||||
<translation>Endlosschleife bei Binding festgestellt</translation>
|
<translation>Endlosschleife bei Binding festgestellt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message utf8="true">
|
<message utf8="true">
|
||||||
<source> µs</source>
|
<source> µs</source>
|
||||||
@@ -26942,8 +26958,8 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<context>
|
<context>
|
||||||
<name>QmlProfiler::Internal::QmlProfilerEventsParentsAndChildrenView</name>
|
<name>QmlProfiler::Internal::QmlProfilerEventsParentsAndChildrenView</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Part of binding loop</source>
|
<source>Part of binding loop.</source>
|
||||||
<translation>Teil der Binding-Endlosschleife</translation>
|
<translation>Teil der Binding-Schleife.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Callee</source>
|
<source>Callee</source>
|
||||||
@@ -27035,28 +27051,28 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<translation>AvahiZConfLib c konnte die native Bibliothek '%1' nicht laden: %2</translation>
|
<translation>AvahiZConfLib c konnte die native Bibliothek '%1' nicht laden: %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 could not create a client (probably the daemon is not running)</source>
|
<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>
|
<translation>%1 konnte keinen Client erzeugen (möglicherweise läuft kein Hintergrundprozess).</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>cAvahiClient, server collision</source>
|
<source>cAvahiClient, server collision.</source>
|
||||||
<translation>cAvahiClient, Server-Kollision</translation>
|
<translation>cAvahiClient, Server-Kollision.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>cAvahiClient, some kind of error happened on the client side</source>
|
<source>cAvahiClient, an error occurred on the client side.</source>
|
||||||
<translation>cAvahiClient, client-seitiger Fehler</translation>
|
<translation>cAvahiClient, client-seitiger Fehler.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>cAvahiClient, still connecting, no server available</source>
|
<source>cAvahiClient, still connecting, no server available.</source>
|
||||||
<translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar</translation>
|
<translation>cAvahiClient, versuche Verbindung herzustellen, es ist kein Server verfügbar.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>unexpected state %1 in cAvahiClientReply</source>
|
<source>Unexpected state %1 in cAvahiClientReply.</source>
|
||||||
<translation>unerwarteter Status %1 in cAvahiClientReply</translation>
|
<translation>Unerwarteter Status %1 in cAvahiClientReply.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>unexpected state %1 in cAvahiBrowseReply</source>
|
<source>Unexpected state %1 in cAvahiBrowseReply.</source>
|
||||||
<translation>unerwarteter Status %1 in cAvahiBrowseReply</translation>
|
<translation>Unerwarteter Status %1 in cAvahiBrowseReply.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 failed to kill other daemons with '%2'.</source>
|
<source>%1 failed to kill other daemons with '%2'.</source>
|
||||||
@@ -27168,8 +27184,8 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<context>
|
<context>
|
||||||
<name>Debugger::Internal::QmlV8DebuggerClient</name>
|
<name>Debugger::Internal::QmlV8DebuggerClient</name>
|
||||||
<message>
|
<message>
|
||||||
<source>anonymous function</source>
|
<source>Anonymous Function</source>
|
||||||
<translation>anonyme Funktion</translation>
|
<translation>Anonyme Funktion</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -27179,7 +27195,7 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<translation>Offene Dokumente</translation>
|
<translation>Offene Dokumente</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open Documents:</source>
|
<source>Open documents:</source>
|
||||||
<translation>Offene Dokumente:</translation>
|
<translation>Offene Dokumente:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@@ -27422,6 +27438,10 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>BinEditorDocument</name>
|
<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>
|
<message>
|
||||||
<source>Cannot open %1: %2</source>
|
<source>Cannot open %1: %2</source>
|
||||||
<translation>Die Datei %1 kann nicht geöffnet werden: %2</translation>
|
<translation>Die Datei %1 kann nicht geöffnet werden: %2</translation>
|
||||||
@@ -27687,25 +27707,25 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<translation>Name der privaten Schlüsseldatei auswählen</translation>
|
<translation>Name der privaten Schlüsseldatei auswählen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failure To Save Key File</source>
|
<source>Cannot Save Key File</source>
|
||||||
<translation>Fehler beim Speichern der Schlüsseldatei</translation>
|
<translation>Schlüsseldatei kann nicht gespeichert werden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cannot Save Private Key File</source>
|
||||||
|
<translation>Die private Schlüsseldatei kann nicht gespeichert werden</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Cannot Save Public Key File</source>
|
||||||
|
<translation>Öffentliche Schlüsseldatei kann nicht gespeichert werden</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to create directory: '%1'.</source>
|
<source>Failed to create directory: '%1'.</source>
|
||||||
<translation>Der Ordner '%1' konnte nicht erstellt werden.</translation>
|
<translation>Der Ordner '%1' konnte nicht erstellt werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Saving Private Key File failed</source>
|
|
||||||
<translation>Das Speichern des privaten Schlüssels schlug fehl</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>The private key file could not be saved: %1</source>
|
<source>The private key file could not be saved: %1</source>
|
||||||
<translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
|
<translation>Die private Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Saving Public Key File failed</source>
|
|
||||||
<translation>Das Speichern des öffentlichen Schlüssels schlug fehl</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>The public key file could not be saved: %1</source>
|
<source>The public key file could not be saved: %1</source>
|
||||||
<translation>Die öffentliche Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
|
<translation>Die öffentliche Schlüsseldatei konnte nicht gespeichert werden: %1</translation>
|
||||||
@@ -27788,14 +27808,6 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<source>Organization (e.g. KDE):</source>
|
<source>Organization (e.g. KDE):</source>
|
||||||
<translation>Organisation (z.B. KDE):</translation>
|
<translation>Organisation (z.B. KDE):</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>City or Locality:</source>
|
|
||||||
<translation>Stadt:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>State or Province:</source>
|
|
||||||
<translation>Staat oder Provinz:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Two-letter country code for this unit (e.g. RO):</source>
|
<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>
|
<translation>Länderkennung für die Einheit (2 Buchstaben, z.B. RO):</translation>
|
||||||
@@ -27812,6 +27824,14 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<source>Certificate Distinguished Names</source>
|
<source>Certificate Distinguished Names</source>
|
||||||
<translation>Namen des Zertifikats</translation>
|
<translation>Namen des Zertifikats</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>AndroidDeployStepWidget</name>
|
<name>AndroidDeployStepWidget</name>
|
||||||
@@ -27819,18 +27839,6 @@ references to elements in other files, loops, etc.)</source>
|
|||||||
<source>Form</source>
|
<source>Form</source>
|
||||||
<translation>Form</translation>
|
<translation>Form</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Choose and install Ministro system wide Qt shared libraries.
|
<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't have Android Market (e.g. Android Emulator).</source>
|
This option is useful when you want to try your application on devices which don't have Android Market (e.g. Android Emulator).</source>
|
||||||
@@ -27859,6 +27867,18 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
|
|||||||
<source>Use local Qt libraries</source>
|
<source>Use local Qt libraries</source>
|
||||||
<translation>Lokale Qt-Bibliotheken ausliefern</translation>
|
<translation>Lokale Qt-Bibliotheken ausliefern</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>AndroidPackageCreationWidget</name>
|
<name>AndroidPackageCreationWidget</name>
|
||||||
@@ -28022,30 +28042,14 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
|
|||||||
<source>Android NDK location:</source>
|
<source>Android NDK location:</source>
|
||||||
<translation>Android-NDK:</translation>
|
<translation>Android-NDK:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Android NDK toolchain version:</source>
|
|
||||||
<translation>Toolchain-Version des Android NDK:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Ant location:</source>
|
<source>Ant location:</source>
|
||||||
<translation>ant:</translation>
|
<translation>ant:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>arm GDB location:</source>
|
|
||||||
<translation>arm GDB:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>arm GDBserver location:</source>
|
|
||||||
<translation>arm GDBserver:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>x86 GDB location:</source>
|
<source>x86 GDB location:</source>
|
||||||
<translation>x86 GDB:</translation>
|
<translation>x86 GDB:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>x86 GDBserver location:</source>
|
|
||||||
<translation>x86 GDBserver:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>OpenJDK location:</source>
|
<source>OpenJDK location:</source>
|
||||||
<translation>OpenJDK:</translation>
|
<translation>OpenJDK:</translation>
|
||||||
@@ -28078,6 +28082,22 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
|
|||||||
<source>Remove</source>
|
<source>Remove</source>
|
||||||
<translation>Entfernen</translation>
|
<translation>Entfernen</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Core::RemoveFileDialog</name>
|
<name>Core::RemoveFileDialog</name>
|
||||||
@@ -28403,8 +28423,8 @@ Sie müssen für die Plattform kompiliert vorliegen</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>QSsh::Internal::SftpChannelPrivate</name>
|
<name>QSsh::Internal::SftpChannelPrivate</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Server could not start sftp subsystem.</source>
|
<source>Server could not start SFTP subsystem.</source>
|
||||||
<translation>Der Server konnte das sftp-Subsystem nicht starten.</translation>
|
<translation>Der Server konnte das SFTP-Subsystem nicht starten.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unexpected packet of type %1.</source>
|
<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>
|
<source>Botan library exception: %1</source>
|
||||||
<translation>Ausnahmefehler in der Botan-Bibliothek: %1</translation>
|
<translation>Ausnahmefehler in der Botan-Bibliothek: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message numerus="yes">
|
||||||
<source>Invalid protocol version: Expected '2.0', got '%1'.</source>
|
<source>Server identification string is %n characters long, but the maximum allowed length is 255.</source>
|
||||||
<translation>Die Versionen des Protokolls stimmen nicht überein: Erwartet '2.0', erhalten %1.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Invalid server id '%1'.</source>
|
<source>Server identification string contains illegal NUL character.</source>
|
||||||
<translation>Ungültige Server-Kennzeichnung '%1'.</translation>
|
<translation>Die Zeichenkette zur Identifikation des Servers enthält ein unzulässiges NUL-Zeichen.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Server Identification string '%1' is invalid.</source>
|
||||||
|
<translation>Die Zeichenkette '%1' zur Identifikation des Servers ist ungültig.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Server protocol version is '%1', but needs to be 2.0 or 1.99.</source>
|
||||||
|
<translation>Die Version des Serverprotokolls ist '%1', 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>
|
||||||
<message>
|
<message>
|
||||||
<source>Unexpected packet of type %1.</source>
|
<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>
|
<translation>Fehler beim Erstellen von AVD</translation>
|
||||||
</message>
|
</message>
|
||||||
<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>
|
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.
|
<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>
|
Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translation>
|
||||||
@@ -28720,13 +28759,21 @@ Bitte installieren Sie ein Android-SDK der API-Version %1 oder neuer.</translati
|
|||||||
<source>Exit code: %1</source>
|
<source>Exit code: %1</source>
|
||||||
<translation>Rückgabewert: %1</translation>
|
<translation>Rückgabewert: %1</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Qt Android smart installer installation failed</source>
|
<source>Qt Android smart installer installation failed</source>
|
||||||
<translation>Die Installation des Qt-Android-Smart-Installers schlug fehl</translation>
|
<translation>Die Installation des Qt-Android-Smart-Installers schlug fehl</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Package installation failed</source>
|
<source>Package installation failed.</source>
|
||||||
<translation>Die Installation des Pakets schlug fehl</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Installing package onto %1.</source>
|
<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>
|
<source>Clean old Qt libraries</source>
|
||||||
<translation>Alte Qt-Bibliotheken bereinigen</translation>
|
<translation>Alte Qt-Bibliotheken bereinigen</translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidDeployStepFactory</name>
|
<name>Android::Internal::AndroidDeployStepFactory</name>
|
||||||
<message>
|
<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>
|
<translation>Deployment auf Android-Gerät oder Emulator</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@@ -28925,8 +28964,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. "org
|
|||||||
<translation>Wählen Sie ein Symbol für hohe DPI-Werte aus</translation>
|
<translation>Wählen Sie ein Symbol für hohe DPI-Werte aus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>png images (*.png)</source>
|
<source>PNG images (*.png)</source>
|
||||||
<translation>png-Dateien (*.png)</translation>
|
<translation>PNG-Dateien (*.png)</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>< Type or choose a permission ></source>
|
||||||
|
<translation>< Geben Sie eine Berechtigung ein oder wählen Sie eine aus ></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Choose Medium DPI Icon</source>
|
<source>Choose Medium DPI Icon</source>
|
||||||
@@ -28936,10 +28979,6 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. "org
|
|||||||
<source>Choose Low DPI Icon</source>
|
<source>Choose Low DPI Icon</source>
|
||||||
<translation>Wählen Sie ein Symbol für geringe DPI-Werte aus</translation>
|
<translation>Wählen Sie ein Symbol für geringe DPI-Werte aus</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>< type or choose a permission ></source>
|
|
||||||
<translation>< Geben Sie eine Berechtigung ein oder wählen Sie eine aus ></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source><b>Package configurations</b></source>
|
<source><b>Package configurations</b></source>
|
||||||
<translation><b>Paket-Konfigurationen</b></translation>
|
<translation><b>Paket-Konfigurationen</b></translation>
|
||||||
@@ -28970,15 +29009,15 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. "org
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidRunControl</name>
|
<name>Android::Internal::AndroidRunControl</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Starting remote process...</source>
|
<source>Starting remote process.</source>
|
||||||
<translation>Starte entfernten Prozess...</translation>
|
<translation>Starte entfernten Prozess.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidRunControlFactory</name>
|
<name>Android::Internal::AndroidRunControlFactory</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Run on Android device/emulator</source>
|
<source>Run on Android device or emulator.</source>
|
||||||
<translation>Ausführung auf Android-Gerät oder Emulator</translation>
|
<translation>Ausführung auf Android-Gerät oder Emulator.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -28986,46 +29025,46 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. "org
|
|||||||
<message>
|
<message>
|
||||||
<source>
|
<source>
|
||||||
|
|
||||||
'%1' died</source>
|
'%1' died.</source>
|
||||||
<translation>
|
<translation>
|
||||||
|
|
||||||
'%1' beendet</translation>
|
'%1' beendet.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to forward C++ debugging ports. Reason: %1</source>
|
<source>Failed to forward C++ debugging ports. Reason: %1.</source>
|
||||||
<translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
|
<translation>Die C++-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to forward C++ debugging ports</source>
|
<source>Failed to forward C++ debugging ports.</source>
|
||||||
<translation>C++-Debuggerports konnten nicht übermittelt werden</translation>
|
<translation>C++-Debuggerports konnten nicht übermittelt werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to forward QML debugging ports. Reason: %1</source>
|
<source>Failed to forward QML debugging ports. Reason: %1.</source>
|
||||||
<translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1</translation>
|
<translation>Die QML-Debuggerports konnten nicht übermittelt werden. Grund: %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to forward QML debugging ports</source>
|
<source>Failed to forward QML debugging ports.</source>
|
||||||
<translation>QML-Debuggerports konnten nicht übermittelt werden</translation>
|
<translation>QML-Debuggerports konnten nicht übermittelt werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to start the activity. Reason: %1</source>
|
<source>Failed to start the activity. Reason: %1.</source>
|
||||||
<translation>Die Aktivität konnte nicht gestartet werden: Grund: %1</translation>
|
<translation>Die Aktivität konnte nicht gestartet werden: Grund: %1.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unable to start '%1'</source>
|
<source>Unable to start '%1'.</source>
|
||||||
<translation>'%1' konnte nicht gestartet werden</translation>
|
<translation>'%1' konnte nicht gestartet werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Cannot find %1 process</source>
|
<source>Cannot find %1 process.</source>
|
||||||
<translation>Der Prozess '%1' konnte nicht gefunden werden</translation>
|
<translation>Der Prozess %1 konnte nicht gefunden werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>
|
<source>
|
||||||
|
|
||||||
'%1' killed</source>
|
'%1' killed.</source>
|
||||||
<translation>
|
<translation>
|
||||||
|
|
||||||
'%1' abgebrochen</translation>
|
'%1' abgebrochen.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -29042,12 +29081,12 @@ Bitte wählen Sie einen gültigen Paketnamen für Ihre Anwendung (z.B. "org
|
|||||||
<translation>Android-SDK-Ordner</translation>
|
<translation>Android-SDK-Ordner</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>"%1" doesn't seem to be an Android SDK top folder</source>
|
<source>"%1" does not seem to be an Android SDK top folder.</source>
|
||||||
<translation>"%1" ist offenbar kein Android-SDK-Ordner</translation>
|
<translation>"%1" ist offenbar kein Android-SDK-Ordner.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>"%1" doesn't seem to be an Android NDK top folder</source>
|
<source>"%1" does not seem to be an Android NDK top folder.</source>
|
||||||
<translation>"%1" ist offenbar kein Android-NDK-Ordner</translation>
|
<translation>"%1" ist offenbar kein Android-NDK-Ordner.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select Android SDK folder</source>
|
<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>
|
<translation>Fehler: (%1) %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>disconnected.
|
<source>Disconnected.
|
||||||
|
|
||||||
</source>
|
</source>
|
||||||
<translation>getrennt.
|
<translation>Getrennt.
|
||||||
|
|
||||||
</translation>
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>resolving host...</source>
|
<source>Resolving host.</source>
|
||||||
<translation>Hostname wird aufgelöst...</translation>
|
<translation>Hostname wird aufgelöst.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>connecting to debug server...</source>
|
<source>Connecting to debug server.</source>
|
||||||
<translation>Verbinde zum Debug-Server...</translation>
|
<translation>Verbinde zum Debug-Server.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>connected.
|
<source>Connected.
|
||||||
</source>
|
</source>
|
||||||
<translation>verbunden.
|
<translation>Verbunden.
|
||||||
</translation>
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>closing...</source>
|
<source>Closing.</source>
|
||||||
<translation>schließe Verbindung...</translation>
|
<translation>Schließe Verbindung.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Debugger::Internal::QmlInspectorAgent</name>
|
<name>Debugger::Internal::QmlInspectorAgent</name>
|
||||||
<message>
|
<message>
|
||||||
<source> success : </source>
|
<source>Success: </source>
|
||||||
<translation> Erfolg : </translation>
|
<translation>Erfolg: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>properties</source>
|
<source>Properties</source>
|
||||||
<translation>Eigenschaften</translation>
|
<translation>Eigenschaften</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@@ -30063,8 +30102,8 @@ nicht konfiguriert ist.</translation>
|
|||||||
<translation>Gerrit...</translation>
|
<translation>Gerrit...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>git is not available.</source>
|
<source>Git is not available.</source>
|
||||||
<translation>git ist nicht verfügbar.</translation>
|
<translation>Git ist nicht verfügbar.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Enter Local Repository for '%1' (%2)</source>
|
<source>Enter Local Repository for '%1' (%2)</source>
|
||||||
@@ -30243,7 +30282,7 @@ Möchten Sie sie zum Projekt hinzufügen?</html></translation>
|
|||||||
<translation>Der Typ des Geräts, auf dem die Anwendung laufen soll.</translation>
|
<translation>Der Typ des Geräts, auf dem die Anwendung laufen soll.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Device Type:</source>
|
<source>Device type:</source>
|
||||||
<translation>Gerätetyp:</translation>
|
<translation>Gerätetyp:</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
@@ -30746,8 +30785,16 @@ Soll es noch einmal versucht werden?</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>QtSupport::CustomExecutableRunConfiguration</name>
|
<name>QtSupport::CustomExecutableRunConfiguration</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not find the executable, please specify one.</source>
|
<source>No executable.</source>
|
||||||
<translation>Es konnte keine ausführbare Datei gefunden werden; bitte geben Sie eine an.</translation>
|
<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>
|
||||||
<message>
|
<message>
|
||||||
<source>Clean Environment</source>
|
<source>Clean Environment</source>
|
||||||
@@ -30914,8 +30961,8 @@ Soll es noch einmal versucht werden?</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AndroidQtVersion</name>
|
<name>Android::Internal::AndroidQtVersion</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to detect the ABI(s) used by the Qt version.</source>
|
<source>Failed to detect the ABIs used by the Qt version.</source>
|
||||||
<translation>Es konnten keine ABI(s)für diese Qt-Version bestimmt werden.</translation>
|
<translation>Die von der Qt-Version verwendeten ABIs konnten nicht bestimmt werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Android</source>
|
<source>Android</source>
|
||||||
@@ -31224,10 +31271,6 @@ Fehlerausgabe: %1</translation>
|
|||||||
<source>Check Out</source>
|
<source>Check Out</source>
|
||||||
<translation>Check Out</translation>
|
<translation>Check Out</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>&Checkout Comment:</source>
|
|
||||||
<translation>&Checkout-Kommentar:</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>&Reserved</source>
|
<source>&Reserved</source>
|
||||||
<translation>&Reserviert</translation>
|
<translation>&Reserviert</translation>
|
||||||
@@ -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>
|
<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 &hijacked verwenden</translation>
|
<translation>Datei &hijacked verwenden</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Checkout comment:</source>
|
||||||
|
<translation>&Checkout-Kommentar:</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ClearCase::Internal::SettingsPage</name>
|
<name>ClearCase::Internal::SettingsPage</name>
|
||||||
@@ -31351,15 +31398,6 @@ Fehlerausgabe: %1</translation>
|
|||||||
<source>&Loaded Version</source>
|
<source>&Loaded Version</source>
|
||||||
<translation>Ge&ladene Version</translation>
|
<translation>Ge&ladene Version</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Version after &update</source>
|
<source>Version after &update</source>
|
||||||
<translation>Version nach &Aktualisierung</translation>
|
<translation>Version nach &Aktualisierung</translation>
|
||||||
@@ -31368,6 +31406,15 @@ Fehlerausgabe: %1</translation>
|
|||||||
<source><html><head/><body><p><b>NOTE: You will not be able to check in this file without merging the changes (not supported by the plugin)</b></p></body></html></source>
|
<source><html><head/><body><p><b>NOTE: You will not be able to check in this file without merging the changes (not supported by the plugin)</b></p></body></html></source>
|
||||||
<translation><html><head/><body><p><b>Hinweis: Diese Datei kann nicht ohne Mergen der Änderungen eingecheckt werden (durch das Plugin nicht unterstützt)</b></p></body></html></translation>
|
<translation><html><head/><body><p><b>Hinweis: Diese Datei kann nicht ohne Mergen der Änderungen eingecheckt werden (durch das Plugin nicht unterstützt)</b></p></body></html></translation>
|
||||||
</message>
|
</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>
|
||||||
<context>
|
<context>
|
||||||
<name>Android::Internal::AvdModel</name>
|
<name>Android::Internal::AvdModel</name>
|
||||||
@@ -31388,7 +31435,7 @@ Fehlerausgabe: %1</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>ClearCase::Internal::ActivitySelector</name>
|
<name>ClearCase::Internal::ActivitySelector</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Select &Activity:</source>
|
<source>Select &activity:</source>
|
||||||
<translation>Aktivität &auswählen:</translation>
|
<translation>Aktivität &auswählen:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@@ -31629,10 +31676,26 @@ Fehlerausgabe: %1</translation>
|
|||||||
<source>File is already checked out.</source>
|
<source>File is already checked out.</source>
|
||||||
<translation>Die Datei ist bereits ausgecheckt.</translation>
|
<translation>Die Datei ist bereits ausgecheckt.</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>This operation is irreversible. Are you sure?</source>
|
<source>This operation is irreversible. Are you sure?</source>
|
||||||
<translation>Dieser Vorgang kann nicht rückgängig gemacht werden. Sind Sie sicher?</translation>
|
<translation>Dieser Vorgang kann nicht rückgängig gemacht werden. Sind Sie sicher?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ClearCase Remove File %1</source>
|
||||||
|
<translation>ClearCase Datei %1 löschen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>ClearCase Rename File %1 -> %2</source>
|
||||||
|
<translation>ClearCase Datei %1 -> %2 umbenennen</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Do you want to undo hijack of '%1'?</source>
|
<source>Do you want to undo hijack of '%1'?</source>
|
||||||
<translation>Möchten Sie den Hijack von "%1" rückgängig machen?</translation>
|
<translation>Möchten Sie den Hijack von "%1" rückgängig machen?</translation>
|
||||||
@@ -31669,22 +31732,6 @@ Fehlerausgabe: %1</translation>
|
|||||||
<source>Enter &comment:</source>
|
<source>Enter &comment:</source>
|
||||||
<translation>&Kommentar eingeben:</translation>
|
<translation>&Kommentar eingeben:</translation>
|
||||||
</message>
|
</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>
|
<message>
|
||||||
<source>Activity Headline</source>
|
<source>Activity Headline</source>
|
||||||
<translation>Titel der Aktivität</translation>
|
<translation>Titel der Aktivität</translation>
|
||||||
@@ -31747,7 +31794,7 @@ Fehlerausgabe: %1</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Server port:</source>
|
<source>Server port:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation>Server-Port:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select Working Directory</source>
|
<source>Select Working Directory</source>
|
||||||
@@ -31996,27 +32043,26 @@ Fehlerausgabe: %1</translation>
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Debugger::Internal::DebuggerKitConfigWidget</name>
|
<name>Debugger::Internal::DebuggerKitConfigWidget</name>
|
||||||
|
<message>
|
||||||
|
<source>Manage...</source>
|
||||||
|
<translation>Verwalten...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The debugger to use for this kit.</source>
|
<source>The debugger to use for this kit.</source>
|
||||||
<translation>Der für dieses Kit zu verwendende Debugger.</translation>
|
<translation>Der für dieses Kit zu verwendende Debugger.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html></source>
|
<source>Auto-detect</source>
|
||||||
<extracomment>Label text for path configuration. %2 is "x-bit version".</extracomment>
|
|
||||||
<translation><html><body><p>Geben Sie den Pfad zu der ausführbaren Datei des <a href="%1">Windows Console Debuggers</a> (%2) an.</p></body></html></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>Auto detect</source>
|
|
||||||
<translation>Automatisch bestimmen</translation>
|
<translation>Automatisch bestimmen</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Edit...</source>
|
||||||
|
<translation>Bearbeiten...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Debugger for "%1"</source>
|
||||||
|
<translation>Debugger für "%1"</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Debugger:</source>
|
<source>Debugger:</source>
|
||||||
<translation>Debugger:</translation>
|
<translation>Debugger:</translation>
|
||||||
@@ -32041,8 +32087,12 @@ Fehlerausgabe: %1</translation>
|
|||||||
<translation>Der Pfad zum Debugger muss als absoluter Pfad angegeben werden (%1).</translation>
|
<translation>Der Pfad zum Debugger muss als absoluter Pfad angegeben werden (%1).</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 using '%2'</source>
|
<source>%1 <None></source>
|
||||||
<translation>%1 unter Verwendung von '%2'</translation>
|
<translation>%1 <keine></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>%1 using "%2"</source>
|
||||||
|
<translation>%1 unter Verwendung von "%2"</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Debugger</source>
|
<source>Debugger</source>
|
||||||
@@ -32187,8 +32237,12 @@ Fehlerausgabe: %1</translation>
|
|||||||
<context>
|
<context>
|
||||||
<name>ProjectExplorer::Internal::KitManagerConfigWidget</name>
|
<name>ProjectExplorer::Internal::KitManagerConfigWidget</name>
|
||||||
<message>
|
<message>
|
||||||
<source>Kits</source>
|
<source>Name:</source>
|
||||||
<translation>Kits</translation>
|
<translation>Name:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Kit name and icon.</source>
|
||||||
|
<translation>Kit-Name und Symbol.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select Icon</source>
|
<source>Select Icon</source>
|
||||||
@@ -32314,4 +32368,42 @@ Fehlerausgabe: %1</translation>
|
|||||||
<translation>Keine</translation>
|
<translation>Keine</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>Debugger::Internal::DebuggerKitConfigDialog</name>
|
||||||
|
<message>
|
||||||
|
<source>&Engine:</source>
|
||||||
|
<translation>&Engine:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>&Binary:</source>
|
||||||
|
<translation>&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><html><body><p>Specify the path to the <a href="%1">Windows Console Debugger executable</a> (%2) here.</p></body></html></source>
|
||||||
|
<extracomment>Label text for path configuration. %2 is "x-bit version".</extracomment>
|
||||||
|
<translation><html><body><p>Geben Sie den Pfad zu der ausführbaren Datei des <a href="%1">Windows Console Debuggers</a> (%2) an.</p></body></html></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>
|
</TS>
|
||||||
|
@@ -219,7 +219,7 @@ int main(int argc, char **argv)
|
|||||||
setrlimit(RLIMIT_NOFILE, &rl);
|
setrlimit(RLIMIT_NOFILE, &rl);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
|
||||||
// QML is unusable with the xlib backend
|
// QML is unusable with the xlib backend
|
||||||
QApplication::setGraphicsSystem("raster");
|
QApplication::setGraphicsSystem("raster");
|
||||||
#endif
|
#endif
|
||||||
|
@@ -395,7 +395,8 @@ FullySpecifiedType UseMinimalNames::apply(const Name *name, Rewrite *rewrite) co
|
|||||||
SubstitutionEnvironment *env = rewrite->env;
|
SubstitutionEnvironment *env = rewrite->env;
|
||||||
Scope *scope = env->scope();
|
Scope *scope = env->scope();
|
||||||
|
|
||||||
if (name->isTemplateNameId())
|
if (name->isTemplateNameId() ||
|
||||||
|
(name->isQualifiedNameId() && name->asQualifiedNameId()->name()->isTemplateNameId()))
|
||||||
return FullySpecifiedType();
|
return FullySpecifiedType();
|
||||||
|
|
||||||
if (! scope)
|
if (! scope)
|
||||||
|
@@ -708,11 +708,22 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
|
|||||||
if (!referenceClass)
|
if (!referenceClass)
|
||||||
return reference;
|
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();
|
QSet<ClassOrNamespace *> knownUsings = reference->usings().toSet();
|
||||||
|
|
||||||
// If we are dealling with a template type, more work is required, since we need to
|
// If we are dealling with a template type, more work is required, since we need to
|
||||||
// construct all instantiation data.
|
// construct all instantiation data.
|
||||||
if (const TemplateNameId *templId = name->asTemplateNameId()) {
|
if (templId) {
|
||||||
|
_alreadyConsideredTemplates.insert(templId);
|
||||||
ClassOrNamespace *instantiation = _factory->allocClassOrNamespace(reference);
|
ClassOrNamespace *instantiation = _factory->allocClassOrNamespace(reference);
|
||||||
instantiation->_templateId = templId;
|
instantiation->_templateId = templId;
|
||||||
instantiation->_instantiationOrigin = origin;
|
instantiation->_instantiationOrigin = origin;
|
||||||
@@ -786,18 +797,41 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_alreadyConsideredTemplates.clear(templId);
|
||||||
return instantiation;
|
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.
|
// Find the missing bases for regular (non-template) types.
|
||||||
// Ex.: class A : public B<Some>::Type {};
|
// Ex.: class A : public B<Some>::Type {};
|
||||||
foreach (const Name *baseName, allBases) {
|
foreach (const Name *baseName, allBases) {
|
||||||
ClassOrNamespace *binding = this;
|
ClassOrNamespace *binding = this;
|
||||||
if (const QualifiedNameId *qBaseName = baseName->asQualifiedNameId()) {
|
if (const QualifiedNameId *qBaseName = baseName->asQualifiedNameId()) {
|
||||||
|
QList<const Name *> fullyQualifiedNameForBaseClass;
|
||||||
|
addNames(baseName, &fullyQualifiedNameForBaseClass);
|
||||||
|
if (compareFullyQualifiedName(fullyQualifiedNameForReferenceClass,
|
||||||
|
fullyQualifiedNameForBaseClass)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (const Name *qualification = qBaseName->base())
|
if (const Name *qualification = qBaseName->base())
|
||||||
binding = lookupType(qualification);
|
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();
|
baseName = qBaseName->name();
|
||||||
}
|
}
|
||||||
|
else if (compareName(name, baseName)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (binding) {
|
if (binding) {
|
||||||
ClassOrNamespace * baseBinding = binding->lookupType(baseName);
|
ClassOrNamespace * baseBinding = binding->lookupType(baseName);
|
||||||
@@ -806,7 +840,7 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_alreadyConsideredClasses.clear(referenceClass);
|
||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,6 +45,33 @@
|
|||||||
namespace CPlusPlus {
|
namespace CPlusPlus {
|
||||||
|
|
||||||
class CreateBindings;
|
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
|
class CPLUSPLUS_EXPORT ClassOrNamespace
|
||||||
{
|
{
|
||||||
@@ -112,6 +139,9 @@ private:
|
|||||||
const TemplateNameId *_templateId;
|
const TemplateNameId *_templateId;
|
||||||
ClassOrNamespace *_instantiationOrigin;
|
ClassOrNamespace *_instantiationOrigin;
|
||||||
|
|
||||||
|
AlreadyConsideredClassContainer<Class> _alreadyConsideredClasses;
|
||||||
|
AlreadyConsideredClassContainer<TemplateNameId> _alreadyConsideredTemplates;
|
||||||
|
|
||||||
friend class CreateBindings;
|
friend class CreateBindings;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -76,8 +76,8 @@ void BaseEngineDebugClient::decode(QDataStream &ds,
|
|||||||
QmlObjectData data;
|
QmlObjectData data;
|
||||||
ds >> data;
|
ds >> data;
|
||||||
int parentId = -1;
|
int parentId = -1;
|
||||||
if (objectName() == QLatin1String("QmlDebugger") &&
|
// qt > 4.8.3
|
||||||
serviceVersion() >= Constants::CURRENT_SUPPORTED_VERSION )
|
if (objectName() != QLatin1String(Constants::QDECLARATIVE_ENGINE))
|
||||||
ds >> parentId;
|
ds >> parentId;
|
||||||
o.m_debugId = data.objectId;
|
o.m_debugId = data.objectId;
|
||||||
o.m_className = data.objectType;
|
o.m_className = data.objectType;
|
||||||
@@ -184,19 +184,15 @@ void BaseEngineDebugClient::messageReceived(const QByteArray &data)
|
|||||||
QDataStream ds(data);
|
QDataStream ds(data);
|
||||||
int queryId;
|
int queryId;
|
||||||
QByteArray type;
|
QByteArray type;
|
||||||
ds >> type;
|
ds >> type >> queryId;
|
||||||
|
|
||||||
if (type == "OBJECT_CREATED") {
|
if (type == "OBJECT_CREATED") {
|
||||||
int engineId;
|
int engineId;
|
||||||
int objectId;
|
int objectId;
|
||||||
ds >> engineId >> objectId;
|
int parentId;
|
||||||
emit newObject(engineId, objectId, -1);
|
ds >> engineId >> objectId >> parentId;
|
||||||
return;
|
emit newObject(engineId, objectId, parentId);
|
||||||
}
|
} else if (type == "LIST_ENGINES_R") {
|
||||||
|
|
||||||
ds >> queryId;
|
|
||||||
|
|
||||||
if (type == "LIST_ENGINES_R") {
|
|
||||||
int count;
|
int count;
|
||||||
ds >> count;
|
ds >> count;
|
||||||
QList<EngineReference> engines;
|
QList<EngineReference> engines;
|
||||||
@@ -398,7 +394,7 @@ quint32 BaseEngineDebugClient::setBindingForObject(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
|
ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
|
||||||
<< bindingExpression << isLiteralValue << source << line;
|
<< bindingExpression << isLiteralValue << source << line;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
@@ -414,7 +410,7 @@ quint32 BaseEngineDebugClient::resetBindingForObject(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
|
ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
@@ -429,7 +425,7 @@ quint32 BaseEngineDebugClient::setMethodBody(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("SET_METHOD_BODY") << objectDebugId
|
ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
|
||||||
<< methodName << methodBody;
|
<< methodName << methodBody;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
|
@@ -27,18 +27,18 @@
|
|||||||
**
|
**
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
#include "qmlenginedebugclient.h"
|
#include "declarativeenginedebugclient.h"
|
||||||
#include "qmldebugconstants.h"
|
#include "qmldebugconstants.h"
|
||||||
|
|
||||||
namespace QmlDebug {
|
namespace QmlDebug {
|
||||||
|
|
||||||
QmlEngineDebugClient::QmlEngineDebugClient(
|
DeclarativeEngineDebugClient::DeclarativeEngineDebugClient(
|
||||||
QmlDebugConnection *connection)
|
QmlDebugConnection *connection)
|
||||||
: BaseEngineDebugClient(QLatin1String(Constants::QML_DEBUGGER), connection)
|
: BaseEngineDebugClient(QLatin1String(Constants::QDECLARATIVE_ENGINE), connection)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
quint32 QmlEngineDebugClient::setBindingForObject(
|
quint32 DeclarativeEngineDebugClient::setBindingForObject(
|
||||||
int objectDebugId,
|
int objectDebugId,
|
||||||
const QString &propertyName,
|
const QString &propertyName,
|
||||||
const QVariant &bindingExpression,
|
const QVariant &bindingExpression,
|
||||||
@@ -50,14 +50,14 @@ quint32 QmlEngineDebugClient::setBindingForObject(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("SET_BINDING") << id << objectDebugId << propertyName
|
ds << QByteArray("SET_BINDING") << objectDebugId << propertyName
|
||||||
<< bindingExpression << isLiteralValue << source << line;
|
<< bindingExpression << isLiteralValue << source << line;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint32 QmlEngineDebugClient::resetBindingForObject(
|
quint32 DeclarativeEngineDebugClient::resetBindingForObject(
|
||||||
int objectDebugId,
|
int objectDebugId,
|
||||||
const QString &propertyName)
|
const QString &propertyName)
|
||||||
{
|
{
|
||||||
@@ -66,13 +66,13 @@ quint32 QmlEngineDebugClient::resetBindingForObject(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("RESET_BINDING") << id << objectDebugId << propertyName;
|
ds << QByteArray("RESET_BINDING") << objectDebugId << propertyName;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint32 QmlEngineDebugClient::setMethodBody(
|
quint32 DeclarativeEngineDebugClient::setMethodBody(
|
||||||
int objectDebugId, const QString &methodName,
|
int objectDebugId, const QString &methodName,
|
||||||
const QString &methodBody)
|
const QString &methodBody)
|
||||||
{
|
{
|
||||||
@@ -81,26 +81,24 @@ quint32 QmlEngineDebugClient::setMethodBody(
|
|||||||
id = getId();
|
id = getId();
|
||||||
QByteArray message;
|
QByteArray message;
|
||||||
QDataStream ds(&message, QIODevice::WriteOnly);
|
QDataStream ds(&message, QIODevice::WriteOnly);
|
||||||
ds << QByteArray("SET_METHOD_BODY") << id << objectDebugId
|
ds << QByteArray("SET_METHOD_BODY") << objectDebugId
|
||||||
<< methodName << methodBody;
|
<< methodName << methodBody;
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlEngineDebugClient::messageReceived(const QByteArray &data)
|
void DeclarativeEngineDebugClient::messageReceived(const QByteArray &data)
|
||||||
{
|
{
|
||||||
QDataStream ds(data);
|
QDataStream ds(data);
|
||||||
int queryId;
|
|
||||||
QByteArray type;
|
QByteArray type;
|
||||||
ds >> type >> queryId;
|
ds >> type;
|
||||||
|
|
||||||
if (type == "OBJECT_CREATED") {
|
if (type == "OBJECT_CREATED") {
|
||||||
int engineId;
|
int engineId;
|
||||||
int objectId;
|
int objectId;
|
||||||
int parentId;
|
ds >> engineId >> objectId;
|
||||||
ds >> engineId >> objectId >> parentId;
|
emit newObject(engineId, objectId, -1);
|
||||||
emit newObject(engineId, objectId, parentId);
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
BaseEngineDebugClient::messageReceived(data);
|
BaseEngineDebugClient::messageReceived(data);
|
@@ -40,10 +40,18 @@ class QMLDEBUG_EXPORT DeclarativeEngineDebugClient : public BaseEngineDebugClien
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
DeclarativeEngineDebugClient(QmlDebugConnection *conn)
|
explicit DeclarativeEngineDebugClient(QmlDebugConnection *conn);
|
||||||
: BaseEngineDebugClient(QLatin1String("QDeclarativeEngine"), 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
|
} // namespace QmlDebug
|
||||||
|
51
src/libs/qmldebug/declarativeenginedebugclientv2.h
Normal file
51
src/libs/qmldebug/declarativeenginedebugclientv2.h
Normal file
@@ -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
|
@@ -55,30 +55,17 @@ void QDebugMessageClient::messageReceived(const QByteArray &data)
|
|||||||
ds >> command;
|
ds >> command;
|
||||||
|
|
||||||
if (command == "MESSAGE") {
|
if (command == "MESSAGE") {
|
||||||
if (serviceVersion() == 1.0) {
|
int type;
|
||||||
QByteArray messagePacket;
|
int line;
|
||||||
ds >> messagePacket;
|
QByteArray debugMessage;
|
||||||
|
QByteArray file;
|
||||||
QByteArray debugMessage;
|
QByteArray function;
|
||||||
int type;
|
ds >> type >> debugMessage >> file >> line >> function;
|
||||||
QDataStream ms(messagePacket);
|
QDebugContextInfo info;
|
||||||
ms >> type >> debugMessage;
|
info.line = line;
|
||||||
QDebugContextInfo info;
|
info.file = QString::fromUtf8(file);
|
||||||
emit message(QtMsgType(type), QString::fromUtf8(debugMessage.data()),
|
info.function = QString::fromUtf8(function);
|
||||||
info);
|
emit message(QtMsgType(type), QString::fromUtf8(debugMessage), 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ HEADERS += \
|
|||||||
$$PWD/qmldebugclient.h \
|
$$PWD/qmldebugclient.h \
|
||||||
$$PWD/baseenginedebugclient.h \
|
$$PWD/baseenginedebugclient.h \
|
||||||
$$PWD/declarativeenginedebugclient.h \
|
$$PWD/declarativeenginedebugclient.h \
|
||||||
|
$$PWD/declarativeenginedebugclientv2.h \
|
||||||
$$PWD/qmloutputparser.h \
|
$$PWD/qmloutputparser.h \
|
||||||
$$PWD/qmldebug_global.h \
|
$$PWD/qmldebug_global.h \
|
||||||
$$PWD/qmlprofilereventtypes.h \
|
$$PWD/qmlprofilereventtypes.h \
|
||||||
@@ -32,8 +33,8 @@ SOURCES += \
|
|||||||
$$PWD/qpacketprotocol.cpp \
|
$$PWD/qpacketprotocol.cpp \
|
||||||
$$PWD/qv8profilerclient.cpp \
|
$$PWD/qv8profilerclient.cpp \
|
||||||
$$PWD/qdebugmessageclient.cpp \
|
$$PWD/qdebugmessageclient.cpp \
|
||||||
$$PWD/qmlenginedebugclient.cpp \
|
|
||||||
$$PWD/basetoolsclient.cpp \
|
$$PWD/basetoolsclient.cpp \
|
||||||
$$PWD/declarativetoolsclient.cpp \
|
$$PWD/declarativetoolsclient.cpp \
|
||||||
$$PWD/qmltoolsclient.cpp
|
$$PWD/qmltoolsclient.cpp \
|
||||||
|
$$PWD/declarativeenginedebugclient.cpp
|
||||||
|
|
||||||
|
@@ -20,7 +20,9 @@ QtcLibrary {
|
|||||||
"baseenginedebugclient.h",
|
"baseenginedebugclient.h",
|
||||||
"basetoolsclient.cpp",
|
"basetoolsclient.cpp",
|
||||||
"basetoolsclient.h",
|
"basetoolsclient.h",
|
||||||
|
"declarativeenginedebugclient.cpp",
|
||||||
"declarativeenginedebugclient.h",
|
"declarativeenginedebugclient.h",
|
||||||
|
"declarativeenginedebugclientv2.h",
|
||||||
"declarativetoolsclient.cpp",
|
"declarativetoolsclient.cpp",
|
||||||
"declarativetoolsclient.h",
|
"declarativetoolsclient.h",
|
||||||
"qdebugmessageclient.cpp",
|
"qdebugmessageclient.cpp",
|
||||||
|
@@ -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_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 STR_CONNECTION_ESTABLISHED[] = "Connection established";
|
||||||
|
|
||||||
const char QML_DEBUGGER[] = "QmlDebugger";
|
const char QDECLARATIVE_ENGINE[] = "QDeclarativeEngine";
|
||||||
const float CURRENT_SUPPORTED_VERSION = 2.0;
|
|
||||||
|
|
||||||
} // namespace Constants
|
} // namespace Constants
|
||||||
} // namespace QmlDebug
|
} // namespace QmlDebug
|
||||||
|
@@ -40,18 +40,10 @@ class QMLDEBUG_EXPORT QmlEngineDebugClient : public BaseEngineDebugClient
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit QmlEngineDebugClient(QmlDebugConnection *conn);
|
explicit QmlEngineDebugClient(QmlDebugConnection *conn)
|
||||||
|
: BaseEngineDebugClient(QLatin1String("QmlDebugger"), 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
|
} // namespace QmlDebug
|
||||||
|
@@ -272,7 +272,7 @@ void SftpChannelPrivate::handleChannelFailure()
|
|||||||
throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR,
|
throw SSH_SERVER_EXCEPTION(SSH_DISCONNECT_PROTOCOL_ERROR,
|
||||||
"Unexpected SSH_MSG_CHANNEL_FAILURE packet.");
|
"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();
|
closeChannel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -365,8 +365,8 @@ void SshConnectionPrivate::handleServerId()
|
|||||||
if (newLinePos > 255 - 1) {
|
if (newLinePos > 255 - 1) {
|
||||||
throw SshServerException(SSH_DISCONNECT_PROTOCOL_ERROR,
|
throw SshServerException(SSH_DISCONNECT_PROTOCOL_ERROR,
|
||||||
"Identification string too long.",
|
"Identification string too long.",
|
||||||
tr("Server identification string is %1 characters long, but the maximum "
|
tr("Server identification string is %n characters long, but the maximum "
|
||||||
"allowed length is 255.").arg(newLinePos + 1));
|
"allowed length is 255.", 0, newLinePos + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool hasCarriageReturn = m_incomingData.at(newLinePos - 1) == '\r';
|
const bool hasCarriageReturn = m_incomingData.at(newLinePos - 1) == '\r';
|
||||||
|
@@ -106,7 +106,7 @@ void SshKeyCreationDialog::saveKeys()
|
|||||||
{
|
{
|
||||||
const QString parentDir = QFileInfo(privateKeyFilePath()).dir().path();
|
const QString parentDir = QFileInfo(privateKeyFilePath()).dir().path();
|
||||||
if (!QDir::root().mkpath(parentDir)) {
|
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));
|
tr("Failed to create directory: '%1'.").arg(parentDir));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ void SshKeyCreationDialog::saveKeys()
|
|||||||
QFile privateKeyFile(privateKeyFilePath());
|
QFile privateKeyFile(privateKeyFilePath());
|
||||||
if (!privateKeyFile.open(QIODevice::WriteOnly)
|
if (!privateKeyFile.open(QIODevice::WriteOnly)
|
||||||
|| !privateKeyFile.write(m_keyGenerator->privateKey())) {
|
|| !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()));
|
tr("The private key file could not be saved: %1").arg(privateKeyFile.errorString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ void SshKeyCreationDialog::saveKeys()
|
|||||||
QFile publicKeyFile(publicKeyFilePath());
|
QFile publicKeyFile(publicKeyFilePath());
|
||||||
if (!publicKeyFile.open(QIODevice::WriteOnly)
|
if (!publicKeyFile.open(QIODevice::WriteOnly)
|
||||||
|| !publicKeyFile.write(m_keyGenerator->publicKey())) {
|
|| !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()));
|
tr("The public key file could not be saved: %1").arg(publicKeyFile.errorString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -346,7 +346,7 @@ public:
|
|||||||
if (m_simplePollFree)
|
if (m_simplePollFree)
|
||||||
m_simplePollFree(connection->simple_poll);
|
m_simplePollFree(connection->simple_poll);
|
||||||
delete connection;
|
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;
|
return kDNSServiceErr_Unknown;
|
||||||
}
|
}
|
||||||
*sdRef = reinterpret_cast<ConnectionRef>(connection);
|
*sdRef = reinterpret_cast<ConnectionRef>(connection);
|
||||||
@@ -472,16 +472,16 @@ extern "C" void cAvahiClientReply (AvahiClient * /*s*/, AvahiClientState state,
|
|||||||
break;
|
break;
|
||||||
case (AVAHI_CLIENT_S_COLLISION):
|
case (AVAHI_CLIENT_S_COLLISION):
|
||||||
/* Server state: COLLISION */
|
/* Server state: COLLISION */
|
||||||
lib->setError(true, ZConfLib::tr("cAvahiClient, server collision"));
|
lib->setError(true, ZConfLib::tr("cAvahiClient, server collision."));
|
||||||
break;
|
break;
|
||||||
case (AVAHI_CLIENT_FAILURE):
|
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;
|
break;
|
||||||
case (AVAHI_CLIENT_CONNECTING):
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
lib->setError(true, ZConfLib::tr("unexpected state %1 in cAvahiClientReply")
|
lib->setError(true, ZConfLib::tr("Unexpected state %1 in cAvahiClientReply.")
|
||||||
.arg(state));
|
.arg(state));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -532,7 +532,7 @@ extern "C" void cAvahiBrowseReply(
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
browser->mainConnection->lib->setError(true, ZConfLib::tr(
|
browser->mainConnection->lib->setError(true, ZConfLib::tr(
|
||||||
"unexpected state %1 in cAvahiBrowseReply")
|
"Unexpected state %1 in cAvahiBrowseReply.")
|
||||||
.arg(event));
|
.arg(event));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1849,7 +1849,7 @@ void MainConnection::createConnection()
|
|||||||
if (m_nErrs > lib->maxErrors() || !lib->isOk()) {
|
if (m_nErrs > lib->maxErrors() || !lib->isOk()) {
|
||||||
abortLib();
|
abortLib();
|
||||||
} else if (lib->tryStartDaemon(this)) {
|
} 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()));
|
.arg(lib->name()));
|
||||||
} else {
|
} else {
|
||||||
appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 failed because no daemon is running.")
|
appendError(ErrorMessage::WarningLevel, tr("Zeroconf using %1 failed because no daemon is running.")
|
||||||
@@ -1863,7 +1863,7 @@ void MainConnection::createConnection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (status() < Stopping) {
|
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,
|
appendError(ErrorMessage::NoteLevel,
|
||||||
tr("MainConnection could successfully create a connection using %1.")
|
tr("MainConnection could successfully create a connection using %1.")
|
||||||
.arg(lib->name()));
|
.arg(lib->name()));
|
||||||
|
@@ -439,7 +439,7 @@ bool AndroidConfigurations::createAVD(int minApiLevel) const
|
|||||||
avdDialog.targetComboBox->setModel(&model);
|
avdDialog.targetComboBox->setModel(&model);
|
||||||
if (!model.rowCount()) {
|
if (!model.rowCount()) {
|
||||||
QMessageBox::critical(0, tr("Error Creating AVD"),
|
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.").
|
"Please install an SDK of at least API version %1.").
|
||||||
arg(minApiLevel));
|
arg(minApiLevel));
|
||||||
return false;
|
return false;
|
||||||
|
@@ -248,7 +248,7 @@
|
|||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>City or Locality:</string>
|
<string>City or locality:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>State or Province:</string>
|
<string>State or province:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
@@ -255,7 +255,7 @@ bool AndroidDeployStep::deployPackage()
|
|||||||
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
|
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
|
||||||
<< QLatin1String("shell") << QLatin1String("rm") << QLatin1String("-r") << QLatin1String("/data/local/qt"));
|
<< 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;
|
const QString tempPath = QDir::tempPath() + QLatin1String("/android_qt_libs_") + m_packageName;
|
||||||
AndroidPackageCreationStep::removeDirectory(tempPath);
|
AndroidPackageCreationStep::removeDirectory(tempPath);
|
||||||
QStringList stripFiles;
|
QStringList stripFiles;
|
||||||
@@ -299,13 +299,13 @@ bool AndroidDeployStep::deployPackage()
|
|||||||
|
|
||||||
if (!runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
|
if (!runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
|
||||||
QStringList() << QLatin1String("-s") << m_deviceSerialNumber << QLatin1String("install") << package)) {
|
QStringList() << QLatin1String("-s") << m_deviceSerialNumber << QLatin1String("install") << package)) {
|
||||||
raiseError(tr("Package installation failed"));
|
raiseError(tr("Package installation failed."));
|
||||||
disconnect(deployProc, 0, this, 0);
|
disconnect(deployProc, 0, this, 0);
|
||||||
deployProc->deleteLater();
|
deployProc->deleteLater();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
writeOutput(tr("Pulling files necessary for debugging"));
|
writeOutput(tr("Pulling files necessary for debugging."));
|
||||||
runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
|
runCommand(deployProc, AndroidConfigurations::instance().adbToolPath().toString(),
|
||||||
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
|
QStringList() << QLatin1String("-s") << m_deviceSerialNumber
|
||||||
<< QLatin1String("pull") << QLatin1String("/system/bin/app_process")
|
<< QLatin1String("pull") << QLatin1String("/system/bin/app_process")
|
||||||
|
@@ -65,7 +65,7 @@ QList<Core::Id> AndroidDeployStepFactory::availableCreationIds(BuildStepList *pa
|
|||||||
QString AndroidDeployStepFactory::displayNameForId(const Core::Id id) const
|
QString AndroidDeployStepFactory::displayNameForId(const Core::Id id) const
|
||||||
{
|
{
|
||||||
if (id == AndroidDeployStep::Id)
|
if (id == AndroidDeployStep::Id)
|
||||||
return tr("Deploy to Android device/emulator");
|
return tr("Deploy to Android device or emulator");
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@ You must have Qt libraries compiled for that platform</string>
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="editRulesFilePushButton">
|
<widget class="QPushButton" name="editRulesFilePushButton">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Edit rules file</string>
|
<string>Edit Rules File</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
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>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Install Ministro system wide Qt shared libraries installer</string>
|
<string>Install Ministro, system-wide Qt shared libraries installer</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -84,7 +84,7 @@ This option is useful when you want to try your application on devices which don
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Choose apk</string>
|
<string>Choose APK</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@@ -403,7 +403,7 @@ void AndroidPackageCreationWidget::prebundledLibMoveDown()
|
|||||||
|
|
||||||
void AndroidPackageCreationWidget::setHDPIIcon()
|
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())
|
if (!file.length())
|
||||||
return;
|
return;
|
||||||
AndroidManager::setHighDpiIcon(m_step->target(), file);
|
AndroidManager::setHighDpiIcon(m_step->target(), file);
|
||||||
@@ -412,7 +412,7 @@ void AndroidPackageCreationWidget::setHDPIIcon()
|
|||||||
|
|
||||||
void AndroidPackageCreationWidget::setMDPIIcon()
|
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())
|
if (!file.length())
|
||||||
return;
|
return;
|
||||||
AndroidManager::setMediumDpiIcon(m_step->target(), file);
|
AndroidManager::setMediumDpiIcon(m_step->target(), file);
|
||||||
@@ -421,7 +421,7 @@ void AndroidPackageCreationWidget::setMDPIIcon()
|
|||||||
|
|
||||||
void AndroidPackageCreationWidget::setLDPIIcon()
|
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())
|
if (!file.length())
|
||||||
return;
|
return;
|
||||||
AndroidManager::setLowDpiIcon(m_step->target(), file);
|
AndroidManager::setLowDpiIcon(m_step->target(), file);
|
||||||
@@ -438,8 +438,8 @@ void AndroidPackageCreationWidget::permissionActivated(QModelIndex index)
|
|||||||
void AndroidPackageCreationWidget::addPermission()
|
void AndroidPackageCreationWidget::addPermission()
|
||||||
{
|
{
|
||||||
setEnabledSaveDiscardButtons(true);
|
setEnabledSaveDiscardButtons(true);
|
||||||
m_ui->permissionsListView->setCurrentIndex(m_permissionsModel->addPermission(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->lineEdit()->setText(tr("< Type or choose a permission >"));
|
||||||
m_ui->permissionsComboBox->setFocus();
|
m_ui->permissionsComboBox->setFocus();
|
||||||
m_ui->removePermissionButton->setEnabled(m_permissionsModel->permissions().size());
|
m_ui->removePermissionButton->setEnabled(m_permissionsModel->permissions().size());
|
||||||
}
|
}
|
||||||
|
@@ -69,7 +69,7 @@ QString AndroidQtVersion::invalidReason() const
|
|||||||
{
|
{
|
||||||
QString tmp = BaseQtVersion::invalidReason();
|
QString tmp = BaseQtVersion::invalidReason();
|
||||||
if (tmp.isEmpty() && qtAbis().isEmpty())
|
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;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -66,7 +66,7 @@ void AndroidRunControl::start()
|
|||||||
SLOT(handleRemoteOutput(QByteArray)));
|
SLOT(handleRemoteOutput(QByteArray)));
|
||||||
connect(m_runner, SIGNAL(remoteProcessFinished(QString)),
|
connect(m_runner, SIGNAL(remoteProcessFinished(QString)),
|
||||||
SLOT(handleRemoteProcessFinished(QString)));
|
SLOT(handleRemoteProcessFinished(QString)));
|
||||||
appendMessage(tr("Starting remote process..."), Utils::NormalMessageFormat);
|
appendMessage(tr("Starting remote process."), Utils::NormalMessageFormat);
|
||||||
m_runner->start();
|
m_runner->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -184,7 +184,7 @@ RunControl *AndroidRunControlFactory::create(RunConfiguration *runConfig,
|
|||||||
|
|
||||||
QString AndroidRunControlFactory::displayName() const
|
QString AndroidRunControlFactory::displayName() const
|
||||||
{
|
{
|
||||||
return tr("Run on Android device/emulator");
|
return tr("Run on Android device or emulator.");
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -96,7 +96,7 @@ void AndroidRunner::checkPID()
|
|||||||
|
|
||||||
if (-1 != m_processPID && pid == -1) {
|
if (-1 != m_processPID && pid == -1) {
|
||||||
m_processPID = -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;
|
return;
|
||||||
}
|
}
|
||||||
m_processPID = pid;
|
m_processPID = pid;
|
||||||
@@ -151,11 +151,11 @@ void AndroidRunner::asyncStart()
|
|||||||
<< QString::fromLatin1("localfilesystem:/data/data/%1/debug-socket").arg(m_packageName);
|
<< QString::fromLatin1("localfilesystem:/data/data/%1/debug-socket").arg(m_packageName);
|
||||||
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
|
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
|
||||||
if (!adbStarProc.waitForStarted()) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (!adbStarProc.waitForFinished(-1)) {
|
if (!adbStarProc.waitForFinished(-1)) {
|
||||||
emit remoteProcessFinished(tr("Failed to forward C++ debugging ports"));
|
emit remoteProcessFinished(tr("Failed to forward C++ debugging ports."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
extraParams = QLatin1String("-e native_debug true -e gdbserver_socket +debug-socket");
|
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
|
<< QLatin1String("forward") << port << port; // currently forward to same port on device and host
|
||||||
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
|
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
|
||||||
if (!adbStarProc.waitForStarted()) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (!adbStarProc.waitForFinished(-1)) {
|
if (!adbStarProc.waitForFinished(-1)) {
|
||||||
emit remoteProcessFinished(tr("Failed to forward QML debugging ports"));
|
emit remoteProcessFinished(tr("Failed to forward QML debugging ports."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
extraParams+=QString::fromLatin1(" -e qml_debug true -e qmljsdebugger port:%1")
|
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);
|
adbStarProc.start(AndroidConfigurations::instance().adbToolPath().toString(), arguments);
|
||||||
if (!adbStarProc.waitForStarted()) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (!adbStarProc.waitForFinished(-1)) {
|
if (!adbStarProc.waitForFinished(-1)) {
|
||||||
adbStarProc.terminate();
|
adbStarProc.terminate();
|
||||||
emit remoteProcessFinished(tr("Unable to start '%1'").arg(m_packageName));
|
emit remoteProcessFinished(tr("Unable to start '%1'.").arg(m_packageName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QTime startTime = QTime::currentTime();
|
QTime startTime = QTime::currentTime();
|
||||||
@@ -209,7 +209,7 @@ void AndroidRunner::asyncStart()
|
|||||||
checkPID();
|
checkPID();
|
||||||
}
|
}
|
||||||
if (m_processPID == -1) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ void AndroidRunner::stop()
|
|||||||
void AndroidRunner::asyncStop()
|
void AndroidRunner::asyncStop()
|
||||||
{
|
{
|
||||||
killPID();
|
killPID();
|
||||||
emit remoteProcessFinished(tr("\n\n'%1' killed").arg(m_packageName));
|
emit remoteProcessFinished(tr("\n\n'%1' killed.").arg(m_packageName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidRunner::logcatReadStandardError()
|
void AndroidRunner::logcatReadStandardError()
|
||||||
|
@@ -195,7 +195,7 @@ bool AndroidSettingsWidget::checkSDK(const Utils::FileName &location)
|
|||||||
|| (!androidExe.appendPath(QLatin1String("/tools/android" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()
|
|| (!androidExe.appendPath(QLatin1String("/tools/android" QTC_HOST_EXE_SUFFIX)).toFileInfo().exists()
|
||||||
&& !androidBat.appendPath(QLatin1String("/tools/android" ANDROID_BAT_SUFFIX)).toFileInfo().exists())
|
&& !androidBat.appendPath(QLatin1String("/tools/android" ANDROID_BAT_SUFFIX)).toFileInfo().exists())
|
||||||
|| !emulator.appendPath(QLatin1String("/tools/emulator" QTC_HOST_EXE_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 false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -216,7 +216,7 @@ bool AndroidSettingsWidget::checkNDK(const Utils::FileName &location)
|
|||||||
if (!platformPath.appendPath(QLatin1String("platforms")).toFileInfo().exists()
|
if (!platformPath.appendPath(QLatin1String("platforms")).toFileInfo().exists()
|
||||||
|| !toolChainPath.appendPath(QLatin1String("toolchains")).toFileInfo().exists()
|
|| !toolChainPath.appendPath(QLatin1String("toolchains")).toFileInfo().exists()
|
||||||
|| !sourcesPath.appendPath(QLatin1String("sources/cxx-stl")).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;
|
return false;
|
||||||
}
|
}
|
||||||
m_androidConfig.ndkLocation = location;
|
m_androidConfig.ndkLocation = location;
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="NDKToolchainVersionLabel">
|
<widget class="QLabel" name="NDKToolchainVersionLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Android NDK toolchain version:</string>
|
<string>Android NDK tool chain version:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
<item row="4" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="GdbLocationLabel">
|
<widget class="QLabel" name="GdbLocationLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>arm GDB location:</string>
|
<string>ARM GDB location:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="GdbserverLocationLabel">
|
<widget class="QLabel" name="GdbserverLocationLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>arm GDBserver location:</string>
|
<string>ARM GDB server location:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
<item row="7" column="0">
|
<item row="7" column="0">
|
||||||
<widget class="QLabel" name="GdbserverLocationLabelx86">
|
<widget class="QLabel" name="GdbserverLocationLabelx86">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>x86 GDBserver location:</string>
|
<string>x86 GDB server location:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
@@ -224,7 +224,7 @@ public:
|
|||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
quint64 size = static_cast<quint64>(file.size());
|
quint64 size = static_cast<quint64>(file.size());
|
||||||
if (size == 0) {
|
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)
|
if (errorString)
|
||||||
*errorString = msg;
|
*errorString = msg;
|
||||||
else
|
else
|
||||||
|
@@ -54,7 +54,7 @@ ActivitySelector::ActivitySelector(QWidget *parent) :
|
|||||||
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
|
QHBoxLayout *hboxLayout = new QHBoxLayout(this);
|
||||||
hboxLayout->setContentsMargins(0, 0, 0, 0);
|
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);
|
lblActivity->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
|
||||||
hboxLayout->addWidget(lblActivity);
|
hboxLayout->addWidget(lblActivity);
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="lblComment">
|
<widget class="QLabel" name="lblComment">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Checkout Comment:</string>
|
<string>&Checkout comment:</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy">
|
<property name="buddy">
|
||||||
<cstring>txtComment</cstring>
|
<cstring>txtComment</cstring>
|
||||||
|
@@ -49,7 +49,7 @@
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="loadedCreatedByHeaderLabel">
|
<widget class="QLabel" name="loadedCreatedByHeaderLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Created By:</string>
|
<string>Created by:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="loadedCreatedOnHeaderLabel">
|
<widget class="QLabel" name="loadedCreatedOnHeaderLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Created On:</string>
|
<string>Created on:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="updatedCreatedByHeaderLabel">
|
<widget class="QLabel" name="updatedCreatedByHeaderLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Created By:</string>
|
<string>Created by:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="updatedCreatedOnHeaderLabel">
|
<widget class="QLabel" name="updatedCreatedOnHeaderLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string extracomment="Date">Created On:</string>
|
<string extracomment="Date">Created on:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@@ -88,7 +88,7 @@ void IDocument::setRestoredFrom(const QString &name)
|
|||||||
m_restored = true;
|
m_restored = true;
|
||||||
InfoBarEntry info(QLatin1String(kRestoredAutoSave),
|
InfoBarEntry info(QLatin1String(kRestoredAutoSave),
|
||||||
tr("File was restored from auto-saved copy. "
|
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);
|
infoBar()->addInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -186,7 +186,7 @@ MainWindow::MainWindow() :
|
|||||||
QCoreApplication::setApplicationVersion(QLatin1String(Core::Constants::IDE_VERSION_LONG));
|
QCoreApplication::setApplicationVersion(QLatin1String(Core::Constants::IDE_VERSION_LONG));
|
||||||
QCoreApplication::setOrganizationName(QLatin1String(Constants::IDE_SETTINGSVARIANT_STR));
|
QCoreApplication::setOrganizationName(QLatin1String(Constants::IDE_SETTINGSVARIANT_STR));
|
||||||
QString baseName = QApplication::style()->objectName();
|
QString baseName = QApplication::style()->objectName();
|
||||||
#ifdef Q_WS_X11
|
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
|
||||||
if (baseName == QLatin1String("windows")) {
|
if (baseName == QLatin1String("windows")) {
|
||||||
// Sometimes we get the standard windows 95 style as a fallback
|
// Sometimes we get the standard windows 95 style as a fallback
|
||||||
// e.g. if we are running on a KDE4 desktop
|
// e.g. if we are running on a KDE4 desktop
|
||||||
|
@@ -124,7 +124,6 @@ private:
|
|||||||
// CppTypeHierarchyWidget
|
// CppTypeHierarchyWidget
|
||||||
CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
|
CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
|
||||||
QWidget(0),
|
QWidget(0),
|
||||||
m_cppEditor(0),
|
|
||||||
m_treeView(0),
|
m_treeView(0),
|
||||||
m_model(0),
|
m_model(0),
|
||||||
m_delegate(0)
|
m_delegate(0)
|
||||||
@@ -133,9 +132,7 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
|
|||||||
layout->setMargin(0);
|
layout->setMargin(0);
|
||||||
layout->setSpacing(0);
|
layout->setSpacing(0);
|
||||||
|
|
||||||
if (CPPEditor *cppEditor = qobject_cast<CPPEditor *>(editor)) {
|
if (qobject_cast<CPPEditor *>(editor)) {
|
||||||
m_cppEditor = static_cast<CPPEditorWidget *>(cppEditor->widget());
|
|
||||||
|
|
||||||
m_inspectedClass = new CppClassLabel(this);
|
m_inspectedClass = new CppClassLabel(this);
|
||||||
m_inspectedClass->setMargin(5);
|
m_inspectedClass->setMargin(5);
|
||||||
layout->addWidget(m_inspectedClass);
|
layout->addWidget(m_inspectedClass);
|
||||||
@@ -165,27 +162,18 @@ CppTypeHierarchyWidget::CppTypeHierarchyWidget(Core::IEditor *editor) :
|
|||||||
CppTypeHierarchyWidget::~CppTypeHierarchyWidget()
|
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()
|
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;
|
return;
|
||||||
|
|
||||||
m_model->clear();
|
m_model->clear();
|
||||||
|
|
||||||
CppElementEvaluator evaluator(m_cppEditor);
|
CppElementEvaluator evaluator(widget);
|
||||||
evaluator.setLookupBaseClasses(true);
|
evaluator.setLookupBaseClasses(true);
|
||||||
evaluator.setLookupDerivedClasses(true);
|
evaluator.setLookupDerivedClasses(true);
|
||||||
evaluator.execute();
|
evaluator.execute();
|
||||||
@@ -218,7 +206,13 @@ void CppTypeHierarchyWidget::buildHierarchy(const CppClass &cppClass, QStandardI
|
|||||||
|
|
||||||
void CppTypeHierarchyWidget::onItemClicked(const QModelIndex &index)
|
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
|
// CppTypeHierarchyStackedWidget
|
||||||
@@ -227,9 +221,6 @@ CppTypeHierarchyStackedWidget::CppTypeHierarchyStackedWidget(QWidget *parent) :
|
|||||||
m_typeHiearchyWidgetInstance(new CppTypeHierarchyWidget(Core::EditorManager::currentEditor()))
|
m_typeHiearchyWidgetInstance(new CppTypeHierarchyWidget(Core::EditorManager::currentEditor()))
|
||||||
{
|
{
|
||||||
addWidget(m_typeHiearchyWidgetInstance);
|
addWidget(m_typeHiearchyWidgetInstance);
|
||||||
|
|
||||||
connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
|
|
||||||
this, SLOT(editorChanged(Core::IEditor*)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
|
CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
|
||||||
@@ -237,17 +228,6 @@ CppTypeHierarchyStackedWidget::~CppTypeHierarchyStackedWidget()
|
|||||||
delete m_typeHiearchyWidgetInstance;
|
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::CppTypeHierarchyFactory()
|
CppTypeHierarchyFactory::CppTypeHierarchyFactory()
|
||||||
{}
|
{}
|
||||||
|
@@ -69,8 +69,6 @@ public:
|
|||||||
CppTypeHierarchyWidget(Core::IEditor *editor);
|
CppTypeHierarchyWidget(Core::IEditor *editor);
|
||||||
virtual ~CppTypeHierarchyWidget();
|
virtual ~CppTypeHierarchyWidget();
|
||||||
|
|
||||||
bool handleEditorChange(Core::IEditor *editor);
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void perform();
|
void perform();
|
||||||
|
|
||||||
@@ -97,9 +95,6 @@ public:
|
|||||||
CppTypeHierarchyStackedWidget(QWidget *parent = 0);
|
CppTypeHierarchyStackedWidget(QWidget *parent = 0);
|
||||||
virtual ~CppTypeHierarchyStackedWidget();
|
virtual ~CppTypeHierarchyStackedWidget();
|
||||||
|
|
||||||
public slots:
|
|
||||||
void editorChanged(Core::IEditor* editor);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CppTypeHierarchyWidget *m_typeHiearchyWidgetInstance;
|
CppTypeHierarchyWidget *m_typeHiearchyWidgetInstance;
|
||||||
};
|
};
|
||||||
|
@@ -231,7 +231,7 @@ void CppToolsPlugin::test_completion_template_1()
|
|||||||
QVERIFY(!completions.contains("func"));
|
QVERIFY(!completions.contains("func"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppToolsPlugin::test_completion_template_as_base()
|
void CppToolsPlugin::test_completion()
|
||||||
{
|
{
|
||||||
QFETCH(QByteArray, code);
|
QFETCH(QByteArray, code);
|
||||||
QFETCH(QStringList, expectedCompletions);
|
QFETCH(QStringList, expectedCompletions);
|
||||||
@@ -253,6 +253,11 @@ void CppToolsPlugin::test_completion_template_as_base()
|
|||||||
QCOMPARE(actualCompletions, expectedCompletions);
|
QCOMPARE(actualCompletions, expectedCompletions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CppToolsPlugin::test_completion_template_as_base()
|
||||||
|
{
|
||||||
|
test_completion();
|
||||||
|
}
|
||||||
|
|
||||||
void CppToolsPlugin::test_completion_template_as_base_data()
|
void CppToolsPlugin::test_completion_template_as_base_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QByteArray>("code");
|
QTest::addColumn<QByteArray>("code");
|
||||||
@@ -399,3 +404,391 @@ void CppToolsPlugin::test_completion_template_as_base_data()
|
|||||||
completions.append("otherMember");
|
completions.append("otherMember");
|
||||||
QTest::newRow("case: base as template name in non-template") << code << completions;
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
|
@@ -77,6 +77,7 @@ private slots:
|
|||||||
void switchHeaderSource();
|
void switchHeaderSource();
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
|
|
||||||
// codegen tests
|
// codegen tests
|
||||||
void test_codegen_public_in_empty_class();
|
void test_codegen_public_in_empty_class();
|
||||||
void test_codegen_public_in_nonempty_class();
|
void test_codegen_public_in_nonempty_class();
|
||||||
@@ -95,6 +96,15 @@ private slots:
|
|||||||
void test_completion_template_1();
|
void test_completion_template_1();
|
||||||
void test_completion_template_as_base();
|
void test_completion_template_as_base();
|
||||||
void test_completion_template_as_base_data();
|
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
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -62,7 +62,7 @@ class DebuggerKitConfigWidget : public ProjectExplorer::KitConfigWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DebuggerKitConfigWidget(ProjectExplorer::Kit *p,
|
DebuggerKitConfigWidget(ProjectExplorer::Kit *k,
|
||||||
const DebuggerKitInformation *ki,
|
const DebuggerKitInformation *ki,
|
||||||
QWidget *parent = 0);
|
QWidget *parent = 0);
|
||||||
|
|
||||||
|
@@ -296,8 +296,27 @@ DebuggerKitInformation::DebuggerItem DebuggerKitInformation::variantToItem(const
|
|||||||
}
|
}
|
||||||
QTC_ASSERT(v.type() == QVariant::Map, return result);
|
QTC_ASSERT(v.type() == QVariant::Map, return result);
|
||||||
const QVariantMap vmap = v.toMap();
|
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());
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -77,13 +77,13 @@ public:
|
|||||||
static DebuggerItem debuggerItem(const ProjectExplorer::Kit *k);
|
static DebuggerItem debuggerItem(const ProjectExplorer::Kit *k);
|
||||||
static void setDebuggerItem(ProjectExplorer::Kit *k, const DebuggerItem &item);
|
static void setDebuggerItem(ProjectExplorer::Kit *k, const DebuggerItem &item);
|
||||||
|
|
||||||
static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *p)
|
static Utils::FileName debuggerCommand(const ProjectExplorer::Kit *k)
|
||||||
{ return debuggerItem(p).binary; }
|
{ 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)
|
static DebuggerEngineType engineType(const ProjectExplorer::Kit *k)
|
||||||
{ return debuggerItem(p).engineType; }
|
{ return debuggerItem(k).engineType; }
|
||||||
|
|
||||||
static void setEngineType(ProjectExplorer::Kit *k, DebuggerEngineType type);
|
static void setEngineType(ProjectExplorer::Kit *k, DebuggerEngineType type);
|
||||||
|
|
||||||
|
@@ -691,9 +691,7 @@ void DebuggerToolTipWidget::copy()
|
|||||||
{
|
{
|
||||||
const QString clipboardText = clipboardContents();
|
const QString clipboardText = clipboardContents();
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
#ifdef Q_WS_X11
|
|
||||||
clipboard->setText(clipboardText, QClipboard::Selection);
|
clipboard->setText(clipboardText, QClipboard::Selection);
|
||||||
#endif
|
|
||||||
clipboard->setText(clipboardText, QClipboard::Clipboard);
|
clipboard->setText(clipboardText, QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -221,7 +221,7 @@ public:
|
|||||||
QAction *createAction(QObject *parent) const
|
QAction *createAction(QObject *parent) const
|
||||||
{
|
{
|
||||||
QAction *action = new QAction(DebuggerPlugin::tr("Install &Debug Information"), parent);
|
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;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@ QString GdbEngine::errorMessage(QProcess::ProcessError error)
|
|||||||
switch (error) {
|
switch (error) {
|
||||||
case QProcess::FailedToStart:
|
case QProcess::FailedToStart:
|
||||||
return tr("The gdb process failed to start. Either the "
|
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")
|
"permissions to invoke the program.\n%2")
|
||||||
.arg(m_gdb, gdbProc()->errorString());
|
.arg(m_gdb, gdbProc()->errorString());
|
||||||
case QProcess::Crashed:
|
case QProcess::Crashed:
|
||||||
@@ -1053,7 +1053,7 @@ void GdbEngine::commandTimeout()
|
|||||||
"to a command within %n second(s). This could mean it is stuck "
|
"to a command within %n second(s). This could mean it is stuck "
|
||||||
"in an endless loop or taking longer than expected to perform "
|
"in an endless loop or taking longer than expected to perform "
|
||||||
"the operation.\nYou can choose between waiting "
|
"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,
|
QMessageBox *mb = showMessageBox(QMessageBox::Critical,
|
||||||
tr("GDB not responding"), msg,
|
tr("GDB not responding"), msg,
|
||||||
QMessageBox::Ok | QMessageBox::Cancel);
|
QMessageBox::Ok | QMessageBox::Cancel);
|
||||||
@@ -2095,7 +2095,7 @@ int GdbEngine::currentFrame() const
|
|||||||
|
|
||||||
static QString msgNoGdbBinaryForToolChain(const Abi &tc)
|
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());
|
.arg(tc.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -80,12 +80,12 @@ QVariant ModulesModel::headerData(int section,
|
|||||||
{
|
{
|
||||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
||||||
static QString headers[] = {
|
static QString headers[] = {
|
||||||
ModulesHandler::tr("Module name") + QLatin1String(" "),
|
ModulesHandler::tr("Module Name") + QLatin1String(" "),
|
||||||
ModulesHandler::tr("Module path") + QLatin1String(" "),
|
ModulesHandler::tr("Module Path") + QLatin1String(" "),
|
||||||
ModulesHandler::tr("Symbols read") + QLatin1String(" "),
|
ModulesHandler::tr("Symbols Read") + QLatin1String(" "),
|
||||||
ModulesHandler::tr("Symbols type") + QLatin1String(" "),
|
ModulesHandler::tr("Symbols Type") + QLatin1String(" "),
|
||||||
ModulesHandler::tr("Start address") + QLatin1String(" "),
|
ModulesHandler::tr("Start Address") + QLatin1String(" "),
|
||||||
ModulesHandler::tr("End address") + QLatin1String(" ")
|
ModulesHandler::tr("End Address") + QLatin1String(" ")
|
||||||
};
|
};
|
||||||
return headers[section];
|
return headers[section];
|
||||||
}
|
}
|
||||||
@@ -123,22 +123,22 @@ QVariant ModulesModel::data(const QModelIndex &index, int role) const
|
|||||||
case 2:
|
case 2:
|
||||||
if (role == Qt::DisplayRole)
|
if (role == Qt::DisplayRole)
|
||||||
switch (module.symbolsRead) {
|
switch (module.symbolsRead) {
|
||||||
case Module::UnknownReadState: return ModulesHandler::tr("unknown");
|
case Module::UnknownReadState: return ModulesHandler::tr("Unknown");
|
||||||
case Module::ReadFailed: return ModulesHandler::tr("no");
|
case Module::ReadFailed: return ModulesHandler::tr("No");
|
||||||
case Module::ReadOk: return ModulesHandler::tr("yes");
|
case Module::ReadOk: return ModulesHandler::tr("Yes");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (role == Qt::DisplayRole)
|
if (role == Qt::DisplayRole)
|
||||||
switch (module.elfData.symbolsType) {
|
switch (module.elfData.symbolsType) {
|
||||||
case UnknownSymbols:
|
case UnknownSymbols:
|
||||||
return ModulesHandler::tr("unknown");
|
return ModulesHandler::tr("Unknown");
|
||||||
case NoSymbols:
|
case NoSymbols:
|
||||||
return ModulesHandler::tr("none");
|
return ModulesHandler::tr("None");
|
||||||
case PlainSymbols:
|
case PlainSymbols:
|
||||||
return ModulesHandler::tr("plain");
|
return ModulesHandler::tr("Plain");
|
||||||
case FastSymbols:
|
case FastSymbols:
|
||||||
return ModulesHandler::tr("fast");
|
return ModulesHandler::tr("Fast");
|
||||||
case LinkedSymbols:
|
case LinkedSymbols:
|
||||||
return ModulesHandler::tr("debuglnk");
|
return ModulesHandler::tr("debuglnk");
|
||||||
case BuildIdSymbols:
|
case BuildIdSymbols:
|
||||||
|
@@ -144,20 +144,20 @@ void QmlAdapter::connectionStateChanged()
|
|||||||
switch (m_conn->state()) {
|
switch (m_conn->state()) {
|
||||||
case QAbstractSocket::UnconnectedState:
|
case QAbstractSocket::UnconnectedState:
|
||||||
{
|
{
|
||||||
showConnectionStatusMessage(tr("disconnected.\n\n"));
|
showConnectionStatusMessage(tr("Disconnected.\n\n"));
|
||||||
emit disconnected();
|
emit disconnected();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QAbstractSocket::HostLookupState:
|
case QAbstractSocket::HostLookupState:
|
||||||
showConnectionStatusMessage(tr("resolving host..."));
|
showConnectionStatusMessage(tr("Resolving host."));
|
||||||
break;
|
break;
|
||||||
case QAbstractSocket::ConnectingState:
|
case QAbstractSocket::ConnectingState:
|
||||||
showConnectionStatusMessage(tr("connecting to debug server..."));
|
showConnectionStatusMessage(tr("Connecting to debug server."));
|
||||||
break;
|
break;
|
||||||
case QAbstractSocket::ConnectedState:
|
case QAbstractSocket::ConnectedState:
|
||||||
{
|
{
|
||||||
showConnectionStatusMessage(tr("connected.\n"));
|
showConnectionStatusMessage(tr("Connected.\n"));
|
||||||
|
|
||||||
m_connectionTimer.stop();
|
m_connectionTimer.stop();
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ void QmlAdapter::connectionStateChanged()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QAbstractSocket::ClosingState:
|
case QAbstractSocket::ClosingState:
|
||||||
showConnectionStatusMessage(tr("closing..."));
|
showConnectionStatusMessage(tr("Closing."));
|
||||||
break;
|
break;
|
||||||
case QAbstractSocket::BoundState:
|
case QAbstractSocket::BoundState:
|
||||||
case QAbstractSocket::ListeningState:
|
case QAbstractSocket::ListeningState:
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
#include <coreplugin/editormanager/ieditor.h>
|
#include <coreplugin/editormanager/ieditor.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <qmldebug/declarativeenginedebugclient.h>
|
#include <qmldebug/declarativeenginedebugclient.h>
|
||||||
|
#include <qmldebug/declarativeenginedebugclientv2.h>
|
||||||
#include <qmldebug/declarativetoolsclient.h>
|
#include <qmldebug/declarativetoolsclient.h>
|
||||||
#include <qmldebug/qmlenginedebugclient.h>
|
#include <qmldebug/qmlenginedebugclient.h>
|
||||||
#include <qmldebug/qmltoolsclient.h>
|
#include <qmldebug/qmltoolsclient.h>
|
||||||
@@ -96,13 +97,23 @@ QmlInspectorAdapter::QmlInspectorAdapter(QmlAdapter *debugAdapter,
|
|||||||
connect(engineClient2, SIGNAL(newStatus(QmlDebug::ClientStatus)),
|
connect(engineClient2, SIGNAL(newStatus(QmlDebug::ClientStatus)),
|
||||||
this, SLOT(engineClientStatusChanged(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(engineClient1->name(), engineClient1);
|
||||||
m_engineClients.insert(engineClient2->name(), engineClient2);
|
m_engineClients.insert(engineClient2->name(), engineClient2);
|
||||||
|
m_engineClients.insert(engineClient3->name(), engineClient3);
|
||||||
|
|
||||||
if (engineClient1->status() == QmlDebug::Enabled)
|
if (engineClient1->status() == QmlDebug::Enabled)
|
||||||
setActiveEngineClient(engineClient1);
|
setActiveEngineClient(engineClient1);
|
||||||
if (engineClient2->status() == QmlDebug::Enabled)
|
if (engineClient2->status() == QmlDebug::Enabled)
|
||||||
setActiveEngineClient(engineClient2);
|
setActiveEngineClient(engineClient2);
|
||||||
|
if (engineClient3->status() == QmlDebug::Enabled)
|
||||||
|
setActiveEngineClient(engineClient3);
|
||||||
|
|
||||||
DeclarativeToolsClient *toolsClient1 = new DeclarativeToolsClient(connection);
|
DeclarativeToolsClient *toolsClient1 = new DeclarativeToolsClient(connection);
|
||||||
connect(toolsClient1, SIGNAL(newStatus(QmlDebug::ClientStatus)),
|
connect(toolsClient1, SIGNAL(newStatus(QmlDebug::ClientStatus)),
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
|
|
||||||
using namespace QmlDebug;
|
using namespace QmlDebug;
|
||||||
|
using namespace QmlDebug::Constants;
|
||||||
|
|
||||||
namespace Debugger {
|
namespace Debugger {
|
||||||
namespace Internal {
|
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)
|
void QmlInspectorAgent::updateWatchData(const WatchData &data)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
@@ -104,6 +116,15 @@ void QmlInspectorAgent::updateWatchData(const WatchData &data)
|
|||||||
|
|
||||||
if (data.id && !m_fetchDataIds.contains(data.id)) {
|
if (data.id && !m_fetchDataIds.contains(data.id)) {
|
||||||
// objects
|
// 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;
|
m_fetchDataIds << data.id;
|
||||||
fetchObject(data.id);
|
fetchObject(data.id);
|
||||||
}
|
}
|
||||||
@@ -424,7 +445,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
|
|||||||
} else if (type == "SET_BINDING_R"
|
} else if (type == "SET_BINDING_R"
|
||||||
|| type == "RESET_BINDING_R"
|
|| type == "RESET_BINDING_R"
|
||||||
|| type == "SET_METHOD_BODY_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');
|
msg += value.toBool() ? QLatin1Char('1') : QLatin1Char('0');
|
||||||
if (!value.toBool())
|
if (!value.toBool())
|
||||||
emit automaticUpdateFailed();
|
emit automaticUpdateFailed();
|
||||||
@@ -440,10 +461,10 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
|
|||||||
foreach (QVariant var, objList) {
|
foreach (QVariant var, objList) {
|
||||||
// TODO: check which among the list is the actual
|
// TODO: check which among the list is the actual
|
||||||
// object that needs to be selected.
|
// object that needs to be selected.
|
||||||
objectTreeFetched(qvariant_cast<ObjectReference>(var));
|
insertObjectInTree(qvariant_cast<ObjectReference>(var));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
objectTreeFetched(qvariant_cast<ObjectReference>(value));
|
insertObjectInTree(qvariant_cast<ObjectReference>(value));
|
||||||
}
|
}
|
||||||
} else if (queryId == m_engineQueryId) {
|
} else if (queryId == m_engineQueryId) {
|
||||||
m_engineQueryId = 0;
|
m_engineQueryId = 0;
|
||||||
@@ -455,7 +476,7 @@ void QmlInspectorAgent::onResult(quint32 queryId, const QVariant &value,
|
|||||||
} else if (queryId == m_rootContextQueryId) {
|
} else if (queryId == m_rootContextQueryId) {
|
||||||
m_rootContextQueryId = 0;
|
m_rootContextQueryId = 0;
|
||||||
clearObjectTree();
|
clearObjectTree();
|
||||||
fetchObjectsInContextRecursive(qvariant_cast<ContextReference>(value));
|
updateObjectTree(qvariant_cast<ContextReference>(value));
|
||||||
} else {
|
} else {
|
||||||
emit expressionResult(queryId, value);
|
emit expressionResult(queryId, value);
|
||||||
}
|
}
|
||||||
@@ -476,7 +497,7 @@ void QmlInspectorAgent::newObject(int engineId, int objectId, int /*parentId*/)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_newObjectsCreated = true;
|
m_newObjectsCreated = true;
|
||||||
if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
|
if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
|
||||||
fetchObject(objectId);
|
fetchObject(objectId);
|
||||||
else
|
else
|
||||||
m_delayQueryTimer.start();
|
m_delayQueryTimer.start();
|
||||||
@@ -583,8 +604,7 @@ void QmlInspectorAgent::fetchContextObjectsForLocation(const QString &file,
|
|||||||
m_objectTreeQueryIds << queryId;
|
m_objectTreeQueryIds << queryId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch the root objects from the context + any child contexts
|
void QmlInspectorAgent::updateObjectTree(const ContextReference &context)
|
||||||
void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &context)
|
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug() << __FUNCTION__ << '(' << context << ')';
|
qDebug() << __FUNCTION__ << '(' << context << ')';
|
||||||
@@ -593,22 +613,14 @@ void QmlInspectorAgent::fetchObjectsInContextRecursive(const ContextReference &c
|
|||||||
|| !debuggerCore()->boolSetting(ShowQmlObjectTree))
|
|| !debuggerCore()->boolSetting(ShowQmlObjectTree))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (const ObjectReference & obj, context.objects()) {
|
foreach (const ObjectReference & obj, context.objects())
|
||||||
using namespace QmlDebug::Constants;
|
insertObjectInTree(obj);
|
||||||
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 ContextReference &child, context.contexts())
|
foreach (const ContextReference &child, context.contexts())
|
||||||
fetchObjectsInContextRecursive(child);
|
updateObjectTree(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
|
void QmlInspectorAgent::insertObjectInTree(const ObjectReference &object)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug() << __FUNCTION__ << '(' << object << ')';
|
qDebug() << __FUNCTION__ << '(' << object << ')';
|
||||||
@@ -628,8 +640,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
|
|||||||
ObjectReference last;
|
ObjectReference last;
|
||||||
QStack<QmlDebug::ObjectReference> stack;
|
QStack<QmlDebug::ObjectReference> stack;
|
||||||
|
|
||||||
// 4.x
|
// qt <= 4.8.3
|
||||||
if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
|
if (m_newObjectsCreated && m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
|
||||||
// We need to reverse the stack as the root objects
|
// We need to reverse the stack as the root objects
|
||||||
// are pushed to the bottom since they are fetched first.
|
// are pushed to the bottom since they are fetched first.
|
||||||
// The child objects need to placed in the correct position and therefore
|
// 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();
|
int parentId = last.parentId();
|
||||||
QByteArray parentIname;
|
QByteArray parentIname;
|
||||||
|
|
||||||
// 4.x
|
// qt <= 4.8.3
|
||||||
if (m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
|
if (m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
|
||||||
QHashIterator<int, QList<int> > i(m_debugIdChildIds);
|
QHashIterator<int, QList<int> > i(m_debugIdChildIds);
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
i.next();
|
i.next();
|
||||||
@@ -662,8 +674,8 @@ void QmlInspectorAgent::objectTreeFetched(const ObjectReference &object)
|
|||||||
fetchObject(parentId);
|
fetchObject(parentId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 5.x
|
// qt > 4.8.3
|
||||||
if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER)
|
if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE)
|
||||||
&& m_newObjectsCreated && parentIname.isEmpty()) {
|
&& m_newObjectsCreated && parentIname.isEmpty()) {
|
||||||
if (watchData.count())
|
if (watchData.count())
|
||||||
break;
|
break;
|
||||||
@@ -735,13 +747,14 @@ void QmlInspectorAgent::buildDebugIdHashRecursive(const ObjectReference &ref)
|
|||||||
m_debugIdHash[file][location].append(ref.debugId());
|
m_debugIdHash[file][location].append(ref.debugId());
|
||||||
m_debugIdLocations.insert(ref.debugId(), FileReference(filePath, lineNum, colNum));
|
m_debugIdLocations.insert(ref.debugId(), FileReference(filePath, lineNum, colNum));
|
||||||
|
|
||||||
// 4.x
|
// qt <= 4.8.3
|
||||||
if (m_newObjectsCreated && m_engineClient->objectName() != QLatin1String(QmlDebug::Constants::QML_DEBUGGER)) {
|
if (m_newObjectsCreated
|
||||||
QList<int> childIds;
|
&& m_engineClient->objectName() == QLatin1String(QDECLARATIVE_ENGINE)) {
|
||||||
|
QList<int> childIds = m_debugIdChildIds.value(ref.debugId());
|
||||||
foreach (const ObjectReference &c, ref.children()) {
|
foreach (const ObjectReference &c, ref.children()) {
|
||||||
childIds << c.debugId();
|
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
|
// to look up correct insertion places later
|
||||||
m_debugIdChildIds.insert(ref.debugId(), childIds);
|
m_debugIdChildIds.insert(ref.debugId(), childIds);
|
||||||
}
|
}
|
||||||
@@ -814,7 +827,7 @@ QList<WatchData> QmlInspectorAgent::buildWatchData(const ObjectReference &obj,
|
|||||||
WatchData propertiesWatch;
|
WatchData propertiesWatch;
|
||||||
propertiesWatch.id = objDebugId;
|
propertiesWatch.id = objDebugId;
|
||||||
propertiesWatch.exp = "";
|
propertiesWatch.exp = "";
|
||||||
propertiesWatch.name = tr("properties");
|
propertiesWatch.name = tr("Properties");
|
||||||
propertiesWatch.iname = objIname + ".[properties]";
|
propertiesWatch.iname = objIname + ".[properties]";
|
||||||
propertiesWatch.type = "";
|
propertiesWatch.type = "";
|
||||||
propertiesWatch.value = _("list");
|
propertiesWatch.value = _("list");
|
||||||
@@ -867,18 +880,18 @@ bool QmlInspectorAgent::isConnected() const
|
|||||||
void QmlInspectorAgent::clearObjectTree()
|
void QmlInspectorAgent::clearObjectTree()
|
||||||
{
|
{
|
||||||
// clear view
|
// clear view
|
||||||
m_debuggerEngine->watchHandler()->removeChildren("inspect");
|
m_debuggerEngine->watchHandler()->cleanup();
|
||||||
|
|
||||||
m_objectTreeQueryIds.clear();
|
m_objectTreeQueryIds.clear();
|
||||||
|
m_fetchDataIds.clear();
|
||||||
int old_count = m_debugIdHash.count();
|
int old_count = m_debugIdHash.count();
|
||||||
m_debugIdHash.clear();
|
m_debugIdHash.clear();
|
||||||
m_debugIdHash.reserve(old_count + 1);
|
m_debugIdHash.reserve(old_count + 1);
|
||||||
m_debugIdToIname.clear();
|
m_debugIdToIname.clear();
|
||||||
m_debugIdChildIds.clear();
|
m_debugIdChildIds.clear();
|
||||||
m_objectStack.clear();
|
m_objectStack.clear();
|
||||||
// reset only for 5.x.
|
// reset only for qt > 4.8.3.
|
||||||
if (m_engineClient->objectName() == QLatin1String(QmlDebug::Constants::QML_DEBUGGER))
|
if (m_engineClient->objectName() != QLatin1String(QDECLARATIVE_ENGINE))
|
||||||
m_newObjectsCreated = false;
|
m_newObjectsCreated = false;
|
||||||
|
|
||||||
removeAllObjectWatches();
|
removeAllObjectWatches();
|
||||||
|
@@ -110,9 +110,9 @@ private slots:
|
|||||||
void onValueChanged(int debugId, const QByteArray &propertyName, const QVariant &value);
|
void onValueChanged(int debugId, const QByteArray &propertyName, const QVariant &value);
|
||||||
|
|
||||||
private:
|
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);
|
void buildDebugIdHashRecursive(const QmlDebug::ObjectReference &ref);
|
||||||
QList<WatchData> buildWatchData(const QmlDebug::ObjectReference &obj,
|
QList<WatchData> buildWatchData(const QmlDebug::ObjectReference &obj,
|
||||||
|
@@ -978,8 +978,6 @@ QmlV8DebuggerClient::~QmlV8DebuggerClient()
|
|||||||
|
|
||||||
void QmlV8DebuggerClient::startSession()
|
void QmlV8DebuggerClient::startSession()
|
||||||
{
|
{
|
||||||
//Supports v2.0 and above
|
|
||||||
QTC_ASSERT(serviceVersion() >= CURRENT_SUPPORTED_VERSION, return);
|
|
||||||
flushSendBuffer();
|
flushSendBuffer();
|
||||||
d->connect();
|
d->connect();
|
||||||
//Query for the V8 version. This is
|
//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);
|
QmlV8ObjectData objectData = d->extractData(body.value(_("func")), refsVal);
|
||||||
QString functionName = objectData.value.toString();
|
QString functionName = objectData.value.toString();
|
||||||
if (functionName.isEmpty())
|
if (functionName.isEmpty())
|
||||||
functionName = tr("anonymous function");
|
functionName = tr("Anonymous Function");
|
||||||
stackFrame.function = functionName;
|
stackFrame.function = functionName;
|
||||||
|
|
||||||
objectData = d->extractData(body.value(_("script")), refsVal);
|
objectData = d->extractData(body.value(_("script")), refsVal);
|
||||||
|
@@ -34,7 +34,6 @@
|
|||||||
namespace Debugger {
|
namespace Debugger {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
const float CURRENT_SUPPORTED_VERSION = 2.0;
|
|
||||||
const char V8REQUEST[] = "v8request";
|
const char V8REQUEST[] = "v8request";
|
||||||
const char V8MESSAGE[] = "v8message";
|
const char V8MESSAGE[] = "v8message";
|
||||||
const char BREAKONSIGNAL[] = "breakonsignal";
|
const char BREAKONSIGNAL[] = "breakonsignal";
|
||||||
|
@@ -60,8 +60,8 @@ QVariant SourceFilesHandler::headerData(int section,
|
|||||||
{
|
{
|
||||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
|
||||||
static QString headers[] = {
|
static QString headers[] = {
|
||||||
tr("Internal name") + QLatin1String(" "),
|
tr("Internal Name") + QLatin1String(" "),
|
||||||
tr("Full name") + QLatin1String(" "),
|
tr("Full Name") + QLatin1String(" "),
|
||||||
};
|
};
|
||||||
return headers[section];
|
return headers[section];
|
||||||
}
|
}
|
||||||
|
@@ -225,9 +225,7 @@ void StackTreeView::copyContentsToClipboard()
|
|||||||
str += QLatin1Char('\n');
|
str += QLatin1Char('\n');
|
||||||
}
|
}
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
# ifdef Q_WS_X11
|
|
||||||
clipboard->setText(str, QClipboard::Selection);
|
clipboard->setText(str, QClipboard::Selection);
|
||||||
# endif
|
|
||||||
clipboard->setText(str, QClipboard::Clipboard);
|
clipboard->setText(str, QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -600,9 +600,7 @@ static QString removeWatchActionText(QString exp)
|
|||||||
static void copyToClipboard(const QString &clipboardText)
|
static void copyToClipboard(const QString &clipboardText)
|
||||||
{
|
{
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
#ifdef Q_WS_X11
|
|
||||||
clipboard->setText(clipboardText, QClipboard::Selection);
|
clipboard->setText(clipboardText, QClipboard::Selection);
|
||||||
#endif
|
|
||||||
clipboard->setText(clipboardText, QClipboard::Clipboard);
|
clipboard->setText(clipboardText, QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -387,7 +387,7 @@ QString GerritPlugin::gitBinary()
|
|||||||
bool ok;
|
bool ok;
|
||||||
const QString git = Git::Internal::GitPlugin::instance()->gitClient()->gitBinaryPath(&ok);
|
const QString git = Git::Internal::GitPlugin::instance()->gitClient()->gitBinaryPath(&ok);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("git is not available."));
|
VcsBase::VcsBaseOutputWindow::instance()->appendError(tr("Git is not available."));
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
return git;
|
return git;
|
||||||
|
@@ -102,7 +102,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
|
|||||||
m_deviceManager(DeviceManager::cloneInstance()),
|
m_deviceManager(DeviceManager::cloneInstance()),
|
||||||
m_deviceManagerModel(new DeviceManagerModel(m_deviceManager, this)),
|
m_deviceManagerModel(new DeviceManagerModel(m_deviceManager, this)),
|
||||||
m_nameValidator(new NameValidator(m_deviceManager, this)),
|
m_nameValidator(new NameValidator(m_deviceManager, this)),
|
||||||
m_saveSettingsRequested(false),
|
|
||||||
m_additionalActionsMapper(new QSignalMapper(this)),
|
m_additionalActionsMapper(new QSignalMapper(this)),
|
||||||
m_configWidget(0)
|
m_configWidget(0)
|
||||||
{
|
{
|
||||||
@@ -115,11 +114,6 @@ DeviceSettingsWidget::DeviceSettingsWidget(QWidget *parent)
|
|||||||
|
|
||||||
DeviceSettingsWidget::~DeviceSettingsWidget()
|
DeviceSettingsWidget::~DeviceSettingsWidget()
|
||||||
{
|
{
|
||||||
if (m_saveSettingsRequested) {
|
|
||||||
Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey),
|
|
||||||
currentIndex());
|
|
||||||
DeviceManager::replaceInstance();
|
|
||||||
}
|
|
||||||
DeviceManager::removeClonedInstance();
|
DeviceManager::removeClonedInstance();
|
||||||
delete m_configWidget;
|
delete m_configWidget;
|
||||||
delete m_ui;
|
delete m_ui;
|
||||||
@@ -237,10 +231,17 @@ void DeviceSettingsWidget::fillInValues()
|
|||||||
m_ui->nameLineEdit->setText(current->displayName());
|
m_ui->nameLineEdit->setText(current->displayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeviceSettingsWidget::updateDeviceFromUi()
|
||||||
|
{
|
||||||
|
deviceNameEditingFinished();
|
||||||
|
if (m_configWidget)
|
||||||
|
m_configWidget->updateDeviceFromUi();
|
||||||
|
}
|
||||||
|
|
||||||
void DeviceSettingsWidget::saveSettings()
|
void DeviceSettingsWidget::saveSettings()
|
||||||
{
|
{
|
||||||
// We must defer this step because of a stupid bug on MacOS. See QTCREATORBUG-1675.
|
Core::ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey), currentIndex());
|
||||||
m_saveSettingsRequested = true;
|
DeviceManager::replaceInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeviceSettingsWidget::currentIndex() const
|
int DeviceSettingsWidget::currentIndex() const
|
||||||
@@ -329,12 +330,14 @@ void DeviceSettingsWidget::handleAdditionalActionRequest(int actionId)
|
|||||||
{
|
{
|
||||||
const IDevice::ConstPtr device = m_deviceManager->find(currentDevice()->id());
|
const IDevice::ConstPtr device = m_deviceManager->find(currentDevice()->id());
|
||||||
QTC_ASSERT(device, return);
|
QTC_ASSERT(device, return);
|
||||||
|
updateDeviceFromUi();
|
||||||
device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this);
|
device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceSettingsWidget::handleProcessListRequested()
|
void DeviceSettingsWidget::handleProcessListRequested()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
|
QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
|
||||||
|
updateDeviceFromUi();
|
||||||
DeviceProcessesDialog dlg;
|
DeviceProcessesDialog dlg;
|
||||||
dlg.addCloseButton();
|
dlg.addCloseButton();
|
||||||
dlg.setDevice(currentDevice());
|
dlg.setDevice(currentDevice());
|
||||||
|
@@ -81,12 +81,12 @@ private:
|
|||||||
void clearDetails();
|
void clearDetails();
|
||||||
QString parseTestOutput();
|
QString parseTestOutput();
|
||||||
void fillInValues();
|
void fillInValues();
|
||||||
|
void updateDeviceFromUi();
|
||||||
|
|
||||||
Ui::DeviceSettingsWidget *m_ui;
|
Ui::DeviceSettingsWidget *m_ui;
|
||||||
DeviceManager * const m_deviceManager;
|
DeviceManager * const m_deviceManager;
|
||||||
DeviceManagerModel * const m_deviceManagerModel;
|
DeviceManagerModel * const m_deviceManagerModel;
|
||||||
NameValidator * const m_nameValidator;
|
NameValidator * const m_nameValidator;
|
||||||
bool m_saveSettingsRequested;
|
|
||||||
QList<QPushButton *> m_additionalActionButtons;
|
QList<QPushButton *> m_additionalActionButtons;
|
||||||
QSignalMapper * const m_additionalActionsMapper;
|
QSignalMapper * const m_additionalActionsMapper;
|
||||||
IDeviceWidget *m_configWidget;
|
IDeviceWidget *m_configWidget;
|
||||||
|
@@ -50,6 +50,18 @@ namespace ProjectExplorer {
|
|||||||
class PROJECTEXPLORER_EXPORT IDeviceWidget : public QWidget
|
class PROJECTEXPLORER_EXPORT IDeviceWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
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:
|
protected:
|
||||||
IDeviceWidget(const IDevice::Ptr &device, QWidget *parent = 0)
|
IDeviceWidget(const IDevice::Ptr &device, QWidget *parent = 0)
|
||||||
|
@@ -78,9 +78,9 @@ public:
|
|||||||
SysRootMatcher(const Utils::FileName &fn) : m_sysroot(fn)
|
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:
|
private:
|
||||||
@@ -125,9 +125,9 @@ public:
|
|||||||
ToolChainMatcher(const ToolChain *tc) : m_tc(tc)
|
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:
|
private:
|
||||||
@@ -166,9 +166,9 @@ public:
|
|||||||
DeviceTypeMatcher(const Core::Id t) : m_type(t)
|
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())
|
if (!deviceType.isValid())
|
||||||
return false;
|
return false;
|
||||||
return deviceType == m_type;
|
return deviceType == m_type;
|
||||||
@@ -214,9 +214,9 @@ public:
|
|||||||
DeviceMatcher(Core::Id id) : m_devId(id)
|
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:
|
private:
|
||||||
|
@@ -165,7 +165,7 @@ bool ToolChainInformationConfigWidget::isDirty() const
|
|||||||
{
|
{
|
||||||
ToolChain *tc = ToolChainKitInformation::toolChain(m_kit);
|
ToolChain *tc = ToolChainKitInformation::toolChain(m_kit);
|
||||||
return (m_comboBox->itemData(m_comboBox->currentIndex()).toString())
|
return (m_comboBox->itemData(m_comboBox->currentIndex()).toString())
|
||||||
== (tc ? tc->id() : QString());
|
!= (tc ? tc->id() : QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolChainInformationConfigWidget::makeReadOnly()
|
void ToolChainInformationConfigWidget::makeReadOnly()
|
||||||
@@ -308,6 +308,9 @@ DeviceInformationConfigWidget::DeviceInformationConfigWidget(Kit *k, QWidget *pa
|
|||||||
m_comboBox(new QComboBox), m_manageButton(new QPushButton(this)),
|
m_comboBox(new QComboBox), m_manageButton(new QPushButton(this)),
|
||||||
m_model(new DeviceManagerModel(DeviceManager::instance()))
|
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."));
|
setToolTip(tr("The device to run the applications on."));
|
||||||
|
|
||||||
QHBoxLayout *layout = new QHBoxLayout(this);
|
QHBoxLayout *layout = new QHBoxLayout(this);
|
||||||
@@ -368,5 +371,15 @@ void DeviceInformationConfigWidget::manageDevices()
|
|||||||
QLatin1String(ProjectExplorer::Constants::DEVICE_SETTINGS_PAGE_ID));
|
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 Internal
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
@@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
#include "kitconfigwidget.h"
|
#include "kitconfigwidget.h"
|
||||||
|
|
||||||
|
#include <coreplugin/id.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
@@ -148,6 +150,8 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void manageDevices();
|
void manageDevices();
|
||||||
|
void modelAboutToReset();
|
||||||
|
void modelReset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_isReadOnly;
|
bool m_isReadOnly;
|
||||||
@@ -155,6 +159,7 @@ private:
|
|||||||
QComboBox *m_comboBox;
|
QComboBox *m_comboBox;
|
||||||
QPushButton *m_manageButton;
|
QPushButton *m_manageButton;
|
||||||
DeviceManagerModel *m_model;
|
DeviceManagerModel *m_model;
|
||||||
|
Core::Id m_selectedId;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -284,14 +284,18 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName)
|
|||||||
KitList result;
|
KitList result;
|
||||||
|
|
||||||
PersistentSettingsReader reader;
|
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;
|
return result;
|
||||||
|
}
|
||||||
QVariantMap data = reader.restoreValues();
|
QVariantMap data = reader.restoreValues();
|
||||||
|
|
||||||
// Check version:
|
// Check version:
|
||||||
int version = data.value(QLatin1String(KIT_FILE_VERSION_KEY), 0).toInt();
|
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;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
const int count = data.value(QLatin1String(KIT_COUNT_KEY), 0).toInt();
|
const int count = data.value(QLatin1String(KIT_COUNT_KEY), 0).toInt();
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
|
@@ -266,7 +266,7 @@ void KitModel::setDirty()
|
|||||||
KitConfigWidget *w = qobject_cast<KitConfigWidget *>(sender());
|
KitConfigWidget *w = qobject_cast<KitConfigWidget *>(sender());
|
||||||
foreach (KitNode *n, m_manualRoot->childNodes) {
|
foreach (KitNode *n, m_manualRoot->childNodes) {
|
||||||
if (n->widget == w) {
|
if (n->widget == w) {
|
||||||
n->changed = true;
|
n->changed = n->widget->isDirty();
|
||||||
emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex())));
|
emit dataChanged(index(n, 0), index(n, columnCount(QModelIndex())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -266,7 +266,7 @@ Target *Project::restoreTarget(const QVariantMap &data)
|
|||||||
|
|
||||||
Kit *k = KitManager::instance()->find(id);
|
Kit *k = KitManager::instance()->find(id);
|
||||||
if (!k) {
|
if (!k) {
|
||||||
qWarning("Warning: No profile '%s' found. Continuing.", qPrintable(id.toString()));
|
qWarning("Warning: No kit '%s' found. Continuing.", qPrintable(id.toString()));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -188,6 +188,7 @@ void Target::handleKitUpdates(Kit *k)
|
|||||||
setDisplayName(k->displayName());
|
setDisplayName(k->displayName());
|
||||||
setIcon(k->icon());
|
setIcon(k->icon());
|
||||||
updateDefaultDeployConfigurations();
|
updateDefaultDeployConfigurations();
|
||||||
|
updateDeviceState(); // in case the device changed...
|
||||||
emit kitChanged();
|
emit kitChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@ class PROJECTEXPLORER_EXPORT Target : public ProjectConfiguration
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Target(Project *parent, Kit *p);
|
Target(Project *parent, Kit *k);
|
||||||
~Target();
|
~Target();
|
||||||
|
|
||||||
Project *project() const;
|
Project *project() const;
|
||||||
|
@@ -184,7 +184,7 @@ void QmlProfilerEventsWidget::switchToV8View()
|
|||||||
d->m_eventTree->setViewType(QmlProfilerEventsMainView::V8ProfileView);
|
d->m_eventTree->setViewType(QmlProfilerEventsMainView::V8ProfileView);
|
||||||
d->m_eventParents->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ParentsView);
|
d->m_eventParents->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ParentsView);
|
||||||
d->m_eventChildren->setViewType(QmlProfilerEventsParentsAndChildrenView::V8ChildrenView);
|
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()
|
void QmlProfilerEventsWidget::clear()
|
||||||
@@ -614,7 +614,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
|
|||||||
typeString = typeString + tr(" (Opt)");
|
typeString = typeString + tr(" (Opt)");
|
||||||
toolTipText = tr("Binding is evaluated by the optimized engine.");
|
toolTipText = tr("Binding is evaluated by the optimized engine.");
|
||||||
} else if (binding->bindingType == (int)V8Binding) {
|
} 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.)");
|
"references to elements in other files, loops, etc.)");
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -681,7 +681,7 @@ void QmlProfilerEventsMainView::QmlProfilerEventsMainViewPrivate::buildModelFrom
|
|||||||
if (binding->isBindingLoop)
|
if (binding->isBindingLoop)
|
||||||
foreach (QStandardItem *item, newRow) {
|
foreach (QStandardItem *item, newRow) {
|
||||||
item->setBackground(colors()->bindingLoopBackground);
|
item->setBackground(colors()->bindingLoopBackground);
|
||||||
item->setToolTip(tr("Binding loop detected"));
|
item->setToolTip(tr("Binding loop detected."));
|
||||||
}
|
}
|
||||||
|
|
||||||
// append
|
// append
|
||||||
@@ -921,9 +921,7 @@ void QmlProfilerEventsMainView::copyTableToClipboard() const
|
|||||||
str += d->textForItem(d->m_model->item(i));
|
str += d->textForItem(d->m_model->item(i));
|
||||||
}
|
}
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
# ifdef Q_WS_X11
|
|
||||||
clipboard->setText(str, QClipboard::Selection);
|
clipboard->setText(str, QClipboard::Selection);
|
||||||
# endif
|
|
||||||
clipboard->setText(str, QClipboard::Clipboard);
|
clipboard->setText(str, QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -933,9 +931,7 @@ void QmlProfilerEventsMainView::copyRowToClipboard() const
|
|||||||
str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
|
str = d->textForItem(d->m_model->itemFromIndex(selectedItem()), false);
|
||||||
|
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
# ifdef Q_WS_X11
|
|
||||||
clipboard->setText(str, QClipboard::Selection);
|
clipboard->setText(str, QClipboard::Selection);
|
||||||
# endif
|
|
||||||
clipboard->setText(str, QClipboard::Clipboard);
|
clipboard->setText(str, QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1041,7 +1037,7 @@ void QmlProfilerEventsParentsAndChildrenView::rebuildTree(void *profilerDataMode
|
|||||||
if (event->inLoopPath)
|
if (event->inLoopPath)
|
||||||
foreach (QStandardItem *item, newRow) {
|
foreach (QStandardItem *item, newRow) {
|
||||||
item->setBackground(colors()->bindingLoopBackground);
|
item->setBackground(colors()->bindingLoopBackground);
|
||||||
item->setToolTip(tr("Part of binding loop"));
|
item->setToolTip(tr("Part of binding loop."));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QV8EventSub *event = v8List->at(index);
|
QV8EventSub *event = v8List->at(index);
|
||||||
|
@@ -93,6 +93,14 @@ void BlackBerryDeviceConfigurationWidget::debugTokenEditingFinished()
|
|||||||
deviceConfiguration()->setDebugToken(ui->debugToken->path());
|
deviceConfiguration()->setDebugToken(ui->debugToken->path());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BlackBerryDeviceConfigurationWidget::updateDeviceFromUi()
|
||||||
|
{
|
||||||
|
hostNameEditingFinished();
|
||||||
|
passwordEditingFinished();
|
||||||
|
keyFileEditingFinished();
|
||||||
|
debugTokenEditingFinished();
|
||||||
|
}
|
||||||
|
|
||||||
void BlackBerryDeviceConfigurationWidget::initGui()
|
void BlackBerryDeviceConfigurationWidget::initGui()
|
||||||
{
|
{
|
||||||
ui->debugToken->setExpectedKind(Utils::PathChooser::File);
|
ui->debugToken->setExpectedKind(Utils::PathChooser::File);
|
||||||
|
@@ -62,6 +62,7 @@ private slots:
|
|||||||
void debugTokenEditingFinished();
|
void debugTokenEditingFinished();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void updateDeviceFromUi();
|
||||||
void initGui();
|
void initGui();
|
||||||
|
|
||||||
BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
|
BlackBerryDeviceConfiguration::Ptr deviceConfiguration() const;
|
||||||
|
@@ -230,7 +230,8 @@ void Qt4TargetSetupWidget::manageKit()
|
|||||||
|
|
||||||
page->showKit(m_kit);
|
page->showKit(m_kit);
|
||||||
Core::ICore::showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
|
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)
|
void Qt4TargetSetupWidget::setProFilePath(const QString &proFilePath)
|
||||||
|
@@ -511,20 +511,25 @@ void TargetSetupPage::setupImports()
|
|||||||
if (!m_importSearch || m_proFilePath.isEmpty())
|
if (!m_importSearch || m_proFilePath.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QString sourceDir = QFileInfo(m_proFilePath).absolutePath();
|
QFileInfo pfi(m_proFilePath);
|
||||||
import(Utils::FileName::fromString(sourceDir), true);
|
const QString prefix = pfi.baseName();
|
||||||
|
QStringList toImport;
|
||||||
|
toImport << pfi.absolutePath();
|
||||||
|
|
||||||
QList<ProjectExplorer::Kit *> kitList = ProjectExplorer::KitManager::instance()->kits();
|
QList<ProjectExplorer::Kit *> kitList = ProjectExplorer::KitManager::instance()->kits();
|
||||||
foreach (ProjectExplorer::Kit *k, kitList) {
|
foreach (ProjectExplorer::Kit *k, kitList) {
|
||||||
QFileInfo fi(Qt4Project::shadowBuildDirectory(m_proFilePath, k, QString()));
|
QFileInfo fi(Qt4Project::shadowBuildDirectory(m_proFilePath, k, QString()));
|
||||||
const QString baseDir = fi.absolutePath();
|
const QString baseDir = fi.absolutePath();
|
||||||
const QString prefix = fi.baseName();
|
|
||||||
|
|
||||||
foreach (const QString &dir, QDir(baseDir).entryList()) {
|
foreach (const QString &dir, QDir(baseDir).entryList()) {
|
||||||
if (dir.startsWith(prefix))
|
const QString path = baseDir + QLatin1Char('/') + dir;
|
||||||
import(Utils::FileName::fromString(baseDir + QLatin1Char('/') + dir), true);
|
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)
|
void TargetSetupPage::handleKitAddition(ProjectExplorer::Kit *k)
|
||||||
@@ -609,7 +614,8 @@ void TargetSetupPage::updateVisibility()
|
|||||||
void TargetSetupPage::openOptions()
|
void TargetSetupPage::openOptions()
|
||||||
{
|
{
|
||||||
Core::ICore::instance()->showOptionsDialog(QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY),
|
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)
|
void TargetSetupPage::removeWidget(ProjectExplorer::Kit *k)
|
||||||
|
@@ -635,7 +635,7 @@ void QtOptionsPageWidget::addQtDir()
|
|||||||
{
|
{
|
||||||
Utils::FileName qtVersion = Utils::FileName::fromString(
|
Utils::FileName qtVersion = Utils::FileName::fromString(
|
||||||
QFileInfo(QFileDialog::getOpenFileName(this,
|
QFileInfo(QFileDialog::getOpenFileName(this,
|
||||||
tr("Select a qmake executable"),
|
tr("Select a qmake Executable"),
|
||||||
QString(),
|
QString(),
|
||||||
filterForQmakeFileDialog(),
|
filterForQmakeFileDialog(),
|
||||||
0,
|
0,
|
||||||
@@ -645,7 +645,7 @@ void QtOptionsPageWidget::addQtDir()
|
|||||||
BaseQtVersion *version = QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion);
|
BaseQtVersion *version = QtVersionManager::instance()->qtVersionForQMakeBinary(qtVersion);
|
||||||
if (version) {
|
if (version) {
|
||||||
// Already exist
|
// 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\".")
|
tr("This Qt version was already registered as \"%1\".")
|
||||||
.arg(version->displayName()));
|
.arg(version->displayName()));
|
||||||
return;
|
return;
|
||||||
|
@@ -151,6 +151,17 @@ void GenericLinuxDeviceConfigurationWidget::createNewKey()
|
|||||||
setPrivateKey(dialog.privateKeyFilePath());
|
setPrivateKey(dialog.privateKeyFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GenericLinuxDeviceConfigurationWidget::updateDeviceFromUi()
|
||||||
|
{
|
||||||
|
hostNameEditingFinished();
|
||||||
|
sshPortEditingFinished();
|
||||||
|
timeoutEditingFinished();
|
||||||
|
userNameEditingFinished();
|
||||||
|
passwordEditingFinished();
|
||||||
|
keyFileEditingFinished();
|
||||||
|
handleFreePortsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel()
|
void GenericLinuxDeviceConfigurationWidget::updatePortsWarningLabel()
|
||||||
{
|
{
|
||||||
m_ui->portsWarningLabel->setVisible(!device()->freePorts().hasMore());
|
m_ui->portsWarningLabel->setVisible(!device()->freePorts().hasMore());
|
||||||
|
@@ -64,6 +64,7 @@ private slots:
|
|||||||
void createNewKey();
|
void createNewKey();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void updateDeviceFromUi();
|
||||||
void updatePortsWarningLabel();
|
void updatePortsWarningLabel();
|
||||||
void initGui();
|
void initGui();
|
||||||
|
|
||||||
|
@@ -252,6 +252,7 @@ public:
|
|||||||
QPointer<GenericProposalInfoFrame> m_infoFrame;
|
QPointer<GenericProposalInfoFrame> m_infoFrame;
|
||||||
QTimer m_infoTimer;
|
QTimer m_infoTimer;
|
||||||
CodeAssistant *m_assistant;
|
CodeAssistant *m_assistant;
|
||||||
|
bool m_autoWidth;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handleActivation(const QModelIndex &modelIndex);
|
void handleActivation(const QModelIndex &modelIndex);
|
||||||
@@ -266,6 +267,7 @@ GenericProposalWidgetPrivate::GenericProposalWidgetPrivate(QWidget *completionWi
|
|||||||
, m_explicitlySelected(false)
|
, m_explicitlySelected(false)
|
||||||
, m_justInvoked(false)
|
, m_justInvoked(false)
|
||||||
, m_assistant(0)
|
, m_assistant(0)
|
||||||
|
, m_autoWidth(true)
|
||||||
{
|
{
|
||||||
connect(m_completionListView, SIGNAL(activated(QModelIndex)),
|
connect(m_completionListView, SIGNAL(activated(QModelIndex)),
|
||||||
this, SLOT(handleActivation(QModelIndex)));
|
this, SLOT(handleActivation(QModelIndex)));
|
||||||
@@ -330,6 +332,10 @@ GenericProposalWidget::GenericProposalWidget()
|
|||||||
d->m_completionListView->setMinimumSize(1, 1);
|
d->m_completionListView->setMinimumSize(1, 1);
|
||||||
connect(d->m_completionListView->verticalScrollBar(), SIGNAL(valueChanged(int)),
|
connect(d->m_completionListView->verticalScrollBar(), SIGNAL(valueChanged(int)),
|
||||||
this, SLOT(updatePositionAndSize()));
|
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);
|
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||||
layout->setMargin(0);
|
layout->setMargin(0);
|
||||||
@@ -494,6 +500,9 @@ bool GenericProposalWidget::updateAndCheck(const QString &prefix)
|
|||||||
|
|
||||||
void GenericProposalWidget::updatePositionAndSize()
|
void GenericProposalWidget::updatePositionAndSize()
|
||||||
{
|
{
|
||||||
|
if (!d->m_autoWidth)
|
||||||
|
return;
|
||||||
|
|
||||||
const QSize &shint = d->m_completionListView->calculateSize();
|
const QSize &shint = d->m_completionListView->calculateSize();
|
||||||
const int fw = frameWidth();
|
const int fw = frameWidth();
|
||||||
const int width = shint.width() + fw * 2 + 30;
|
const int width = shint.width() + fw * 2 + 30;
|
||||||
@@ -514,6 +523,17 @@ void GenericProposalWidget::updatePositionAndSize()
|
|||||||
setGeometry(pos.x(), pos.y(), width, height);
|
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)
|
bool GenericProposalWidget::eventFilter(QObject *o, QEvent *e)
|
||||||
{
|
{
|
||||||
if (e->type() == QEvent::FocusOut) {
|
if (e->type() == QEvent::FocusOut) {
|
||||||
|
@@ -65,6 +65,8 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updatePositionAndSize();
|
void updatePositionAndSize();
|
||||||
|
void turnOffAutoWidth();
|
||||||
|
void turnOnAutoWidth();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool eventFilter(QObject *o, QEvent *e);
|
virtual bool eventFilter(QObject *o, QEvent *e);
|
||||||
|
@@ -89,7 +89,7 @@ QVariant FindInOpenFiles::additionalParameters() const
|
|||||||
|
|
||||||
QString FindInOpenFiles::label() const
|
QString FindInOpenFiles::label() const
|
||||||
{
|
{
|
||||||
return tr("Open Documents:");
|
return tr("Open documents:");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString FindInOpenFiles::toolTip() const
|
QString FindInOpenFiles::toolTip() const
|
||||||
|
@@ -55,15 +55,13 @@ static const bool DEFAULT_ANTIALIAS = true;
|
|||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
enum { DEFAULT_FONT_SIZE = 12 };
|
enum { DEFAULT_FONT_SIZE = 12 };
|
||||||
static const char *DEFAULT_FONT_FAMILY = "Monaco";
|
static const char *DEFAULT_FONT_FAMILY = "Monaco";
|
||||||
#else
|
#elif defined(Q_OS_UNIX)
|
||||||
#ifdef Q_WS_X11
|
|
||||||
enum { DEFAULT_FONT_SIZE = 9 };
|
enum { DEFAULT_FONT_SIZE = 9 };
|
||||||
static const char *DEFAULT_FONT_FAMILY = "Monospace";
|
static const char *DEFAULT_FONT_FAMILY = "Monospace";
|
||||||
#else
|
#else
|
||||||
enum { DEFAULT_FONT_SIZE = 10 };
|
enum { DEFAULT_FONT_SIZE = 10 };
|
||||||
static const char *DEFAULT_FONT_FAMILY = "Courier";
|
static const char *DEFAULT_FONT_FAMILY = "Courier";
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
namespace TextEditor {
|
namespace TextEditor {
|
||||||
|
@@ -510,8 +510,8 @@ void UrlTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(type);
|
Q_UNUSED(type);
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(createOpenUrlAction(tr("Open URL in browser...")));
|
menu->addAction(createOpenUrlAction(tr("Open URL in Browser...")));
|
||||||
menu->addAction(createCopyUrlAction(tr("Copy URL location")));
|
menu->addAction(createCopyUrlAction(tr("Copy URL Location")));
|
||||||
}
|
}
|
||||||
|
|
||||||
QString UrlTextCursorHandler::currentContents() const
|
QString UrlTextCursorHandler::currentContents() const
|
||||||
@@ -575,8 +575,8 @@ void EmailTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType type
|
|||||||
{
|
{
|
||||||
Q_UNUSED(type);
|
Q_UNUSED(type);
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(createOpenUrlAction(tr("Send email to...")));
|
menu->addAction(createOpenUrlAction(tr("Send Email To...")));
|
||||||
menu->addAction(createCopyUrlAction(tr("Copy email address")));
|
menu->addAction(createCopyUrlAction(tr("Copy Email Address")));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmailTextCursorHandler::slotOpenUrl()
|
void EmailTextCursorHandler::slotOpenUrl()
|
||||||
|
@@ -119,6 +119,7 @@ Add a Kit using the newly set up tool chain and Qt version:
|
|||||||
Tricky parts:
|
Tricky parts:
|
||||||
- debuggerengine is the integer used in the enum Debugger::DebuggerEngineType
|
- debuggerengine is the integer used in the enum Debugger::DebuggerEngineType
|
||||||
The most important type is 1 for GDB.
|
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()
|
- devicetype is the string returned IDevice::type()
|
||||||
|
|
||||||
|
@@ -113,7 +113,7 @@ bool AddKeysOperation::test() const
|
|||||||
data.append(KeyValuePair(QLatin1String("newsub/1/2.1/3/qbytearray"), QString::fromLatin1("QByteArray:test array.")));
|
data.append(KeyValuePair(QLatin1String("newsub/1/2.1/3/qbytearray"), QString::fromLatin1("QByteArray:test array.")));
|
||||||
|
|
||||||
QVariantMap result = addKeys(testMap, data);
|
QVariantMap result = addKeys(testMap, data);
|
||||||
if (!result.count() == 8)
|
if (result.count() != 8)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// subkeys:
|
// subkeys:
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user