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