Merge remote-tracking branch 'origin/3.1'

Conflicts:
	qtcreator.pri
	qtcreator.qbs

Change-Id: I5b27eba0a9536d3e6867577ebf2b59d58a13b827
This commit is contained in:
Eike Ziller
2014-03-04 14:04:07 +01:00
72 changed files with 499 additions and 246 deletions

118
dist/changes-3.1.0 vendored
View File

@@ -7,28 +7,35 @@ list of changes, see the Git log for the Qt Creator sources that
you can check out from the public Git repository. For example: you can check out from the public Git repository. For example:
git clone git://gitorious.org/qt-creator/qt-creator.git git clone git://gitorious.org/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline origin/3.0..origin/master git log --cherry-pick --pretty=oneline origin/3.0..origin/3.1
General General
* Added support for "~" as an alias for the user's home directory in the directory in file
system search (QTCREATORBUG-7753)
* Added Beautifier plugin that allows to fix coding style of files with external coding
style tools (Artistic Style, Clang-format, Uncrustify) (QTCREATORBUG-7489)
Editing Editing
* Added File > Reload * Added File > Reload for files that are open and unmodified in Qt Creator but might be
different on disk
* Added option to not hide the mouse cursor while typing (QTCREATORBUG-3584)
* Made visible margin configurable per project * Made visible margin configurable per project
* Fixed reloading contents in binary editor (QTCREATORBUG-6275)
* Fixed names and saving of custom locator filters (QTCREATORBUG-11051)
Managing and Building Projects Managing and Building Projects
* Re-added option to import existing builds even after project configuration (QTCREATORBUG-7836)
Compilers * Fixed that compiler output in issues list was not using monospace font (QTCREATORBUG-11345)
Devices
QMake Projects QMake Projects
* Added context menu item "Add Existing Directory" that adds all * Added context menu item "Add Existing Directory" that adds all
files from a directory (QTCREATORBUG-9081) files from a directory (QTCREATORBUG-9081)
* Added support for QMAKE_EXTRA_COMPILERS (QTCREATORBUG-11212)
CMake Projects * Fixed issues with absolute paths in TARGET
Qbs Projects Qbs Projects
* Added option for building with --check-timestamps * Added option for building with --check-timestamps
* Fixed that compiler flags were not set (QBS-481)
Generic Projects Generic Projects
* Added context menu item "Add Existing Directory" that adds all * Added context menu item "Add Existing Directory" that adds all
@@ -38,42 +45,51 @@ Generic Projects
Debugging Debugging
* Removed support for GDB without Python * Removed support for GDB without Python
* Added context menu item for saving backtrace as tasks-file * Added context menu item for saving backtrace as tasks-file
* GDB * GDB, LLDB
* Added pretty printer for std::unordered_set
* Fixed various pretty printers
* CDB * CDB
* Added pretty printer for std::complex and C++11 std::array * Added pretty printer for std::complex and C++11 std::array
* LLDB * LLDB
* QML * Fixed that debugging was not possible with MallocScribble environment variable set
(QTCREATORBUG-11371)
Analyzer * Fixed "Jump to Line", "Run to Line" and "Jump to Address"
QML Profiler QML Profiler
* Improved performance (QTCREATORBUG-10950) * Improved performance (QTCREATORBUG-10950)
* Improved layout of details views * Improved layout of details views
* Added JavaScript calls in Events view and Timeline view
* Fixed opening files from JavaScript profiling output (QTCREATORBUG-11094) * Fixed opening files from JavaScript profiling output (QTCREATORBUG-11094)
C++ Support C++ Support
* Added code model inspector * Added code model inspector
* Added experimental support for Clang-based code model * Added experimental support for Clang-based code model
* Added support for multiline strings and comments (QTCREATORBUG-662)
* Fixed parsing of ??< ??> ??( ??) trigraphs (QTCREATORBUG-2474) * Fixed parsing of ??< ??> ??( ??) trigraphs (QTCREATORBUG-2474)
* Fixed adding definition for function with rvalue-reference * Fixed adding definition for function with rvalue-reference
(QTCREATORBUG-10555) (QTCREATORBUG-10555)
* Fixed semantic highlighting after "Save as" * Fixed semantic highlighting after "Save as"
* Fixed syntax highlighting of multiline strings and comments (QTCREATORBUG-662) * Fixed syntax highlighting of multiline strings and comments (QTCREATORBUG-662)
* Fixed that symbol dropdown was jumping to the wrong editor (QTCREATORBUG-11157)
* Fixed highlighting when #undef is used (QTCREATORBUG-10454)
* Improved the Insert Virtual Functions refactoring action: * Improved the Insert Virtual Functions refactoring action:
* Check only pure virtual functions by default * Check only pure virtual functions by default
* Display all overrides of a function * Display all overrides of a function
* Do not include final functions * Do not include final functions
Python Support QML Support
* Simplified Qt Quick Application templates (QTCREATORBUG-11264)
GLSL Support * Improved performance when using split views
Qt Quick Designer Qt Quick Designer
* Fixed selecting overlapping items with same z-value (QTCREATORBUG-11066) * Fixed selecting overlapping items with same z-value (QTCREATORBUG-11066)
* Fixed setting text alignment (QTCREATORBUG-11054) * Fixed setting text alignment (QTCREATORBUG-11054)
* Fixed crash with anchors (QTCREATORBUG-11138) * Fixed crash with anchors (QTCREATORBUG-11138)
* Fixed issue with warning text not being readable (QTCREATORBUG-9603)
Diff Viewer Diff Viewer
* Fixed display of inserted lines at end of file (QTCREATORBUG-11281)
* Fixed handling of whitespace changes (QTCREATORBUG-11002)
Version Control Systems Version Control Systems
* Git * Git
@@ -81,20 +97,25 @@ Version Control Systems
* Enabled option to push commit directly after fixup * Enabled option to push commit directly after fixup
* Enabled choosing non-fast-forward merge when fast-forward is applicable * Enabled choosing non-fast-forward merge when fast-forward is applicable
* Added completion in change selection dialog * Added completion in change selection dialog
* Fixed freeze after resolving conflict with cherry-pick or revert
* Added support for local branch selection in the Push to Gerrit dialog
* ClearCase * ClearCase
* Improved performance of indexing dynamic views * Improved performance of indexing dynamic views
* Added warning when editing Derived Objects * Added warning when editing Derived Objects
* Bazaar * Bazaar
* Added support for uncommit command * Added support for uncommit command
* Mercurial
* Added current branch to project and window title
FakeVim FakeVim
* Added "gj", "gk", "g0", "g^" and "g$" commands * Added "gj", "gk", "g0", "g^" and "g$" commands
* Added toggle ("!") and print ("?") options to "set" command
* Added support for relative line numbering
* Made dot command work for letter case commands in visual mode * Made dot command work for letter case commands in visual mode
* Fixed backward incremental search (QTCREATORBUG-7251)
Platform Specific Platform Specific
Linux
Qt Support Qt Support
* Custom wizards now use class "qmakeproject" instead of "qt4project" * Custom wizards now use class "qmakeproject" instead of "qt4project"
@@ -104,16 +125,73 @@ QNX
(QTCREATORBUG-9673, QTCREATORBUG-9001) (QTCREATORBUG-9673, QTCREATORBUG-9001)
* Added line and column information to text based BAR descriptor editor * Added line and column information to text based BAR descriptor editor
(QTCREATORBUG-10395) (QTCREATORBUG-10395)
* Added simple management of user debug tokens
* Added simple management of runtime configurations
* Added support for attaching debugger to running applications
* Fixed several issues with certificate password dialog in BlackBerry * Fixed several issues with certificate password dialog in BlackBerry
options (QTCREATORBUG-10948) options (QTCREATORBUG-10948)
Android Android
* Made it possible to cancel waiting for an AVD to boot up * Made it possible to cancel waiting for an AVD to boot up
* Added download buttons for Android toolkit parts to Options page
* Added warning for invalid JDK setting (QTCREATORBUG-11218)
* Added minimal support for editing Java, with indentation of blocks and keyword completion
(QTCREATORBUG-11220)
* Added Java file wizard (QTCREATORBUG-11220)
* Fixed opening Java files from error messages (QTCREATORBUG-10904) * Fixed opening Java files from error messages (QTCREATORBUG-10904)
* Fixed colors in AndroidManifest editor (QTCREATORBUG-10597)
* Fixed modified state of AndroidManifest editor (QTCREATORBUG-11163)
* Fixed apply-behavior of Android Options page (QTCREATORBUG-7724)
* Fixed that Qt Creator restart was required after configuring Android SDK (QTCREATORBUG-10936)
Remote Linux iOS
* Added check for already running application on device
Bare Metal * Added automatic detection that developer mode becomes activated on connected device
Credits for these changes go to: Credits for these changes go to:
Alessandro Portale
Alexander Kondratskiy
Andre Hartmann
Andre Pönitz
Aurindam Jana
Christian Kandeler
Christian Stenger
Daniel Teske
David Kaspar
David Schulz
Eike Ziller
El Mehdi Fekari
Erik Verbruggen
Falko Arps
Fawzi Mohamed
Frantisek Vacek
Frederik Gladhorn
Friedemann Kleint
Hugues Delorme
Jarek Kobus
Jörg Bornemann
Kai Köhne
Knut Petter Svendsen
Leena Miettinen
Leo Lei
Lukas Holecek
Lorenz Haas
Marco Bubke
Martin Bohacek
Nikolai Kosjar
Orgad Shaneh
Oswald Buddenhagen
Pawel Faron
Petar Perisin
Povilas Kanapickas
Przemyslaw Gorszkowski
Rafael Roquetto
Robert Löhning
Sebastian Paluchiewicz
Takumi Asaki
Thiago Macieira
Thomas Hartmann
Tobias Hunger
Tobias Nätterlund
Ulf Hermann

View File

@@ -43,8 +43,9 @@ exists(src/shared/qbs/qbs.pro) {
system("echo QBS_LIB_INSTALL_DIR = $${QTC_PREFIX}/$${IDE_LIBRARY_BASENAME}/qtcreator >> $$qmake_cache") system("echo QBS_LIB_INSTALL_DIR = $${QTC_PREFIX}/$${IDE_LIBRARY_BASENAME}/qtcreator >> $$qmake_cache")
system("echo QBS_RESOURCES_BUILD_DIR = $${maybe_backslash}\"$${IDE_DATA_PATH}/qbs$${maybe_backslash}\" >> $$qmake_cache") system("echo QBS_RESOURCES_BUILD_DIR = $${maybe_backslash}\"$${IDE_DATA_PATH}/qbs$${maybe_backslash}\" >> $$qmake_cache")
system("echo QBS_RESOURCES_INSTALL_DIR = $${QTC_PREFIX}/share/qtcreator/qbs >> $$qmake_cache") system("echo QBS_RESOURCES_INSTALL_DIR = $${QTC_PREFIX}/share/qtcreator/qbs >> $$qmake_cache")
system("echo QBS_PLUGINS_BUILD_DIR = $${maybe_backslash}\"$${IDE_BUILD_TREE}/lib/qtcreator/$${maybe_backslash}\" >> $$qmake_cache") system("echo QBS_PLUGINS_BUILD_DIR = $${maybe_backslash}\"$${IDE_BUILD_TREE}/$${IDE_LIBRARY_BASENAME}/qtcreator/$${maybe_backslash}\" >> $$qmake_cache")
system("echo QBS_PLUGINS_INSTALL_DIR = $${QTC_PREFIX}/lib/qtcreator >> $$qmake_cache") system("echo QBS_PLUGINS_INSTALL_DIR = $${QTC_PREFIX}/$${IDE_LIBRARY_BASENAME}/qtcreator >> $$qmake_cache")
system("echo QBS_LIBRARY_DIRNAME = $${IDE_LIBRARY_BASENAME} >> $$qmake_cache")
system("echo CONFIG += qbs_no_dev_install >> $$qmake_cache") system("echo CONFIG += qbs_no_dev_install >> $$qmake_cache")
} }

View File

@@ -16,19 +16,20 @@ Project {
property pathList additionalPlugins: [] property pathList additionalPlugins: []
property pathList additionalLibs: [] property pathList additionalLibs: []
property pathList additionalTools: [] property pathList additionalTools: []
property string libDirName: "lib"
property string ide_library_path: { property string ide_library_path: {
if (qbs.targetOS.contains("osx")) if (qbs.targetOS.contains("osx"))
return ide_app_target + ".app/Contents/PlugIns" return ide_app_target + ".app/Contents/PlugIns"
else if (qbs.targetOS.contains("windows")) else if (qbs.targetOS.contains("windows"))
return ide_app_path return ide_app_path
else else
return "lib/qtcreator" return libDirName + "/qtcreator"
} }
property string ide_plugin_path: { property string ide_plugin_path: {
if (qbs.targetOS.contains("osx")) if (qbs.targetOS.contains("osx"))
return ide_library_path return ide_library_path
else if (qbs.targetOS.contains("windows")) else if (qbs.targetOS.contains("windows"))
return "lib/qtcreator/plugins" return libDirName + "/qtcreator/plugins"
else else
return ide_library_path + "/plugins" return ide_library_path + "/plugins"
} }
@@ -47,7 +48,7 @@ Project {
property bool testsEnabled: qbs.getenv("TEST") || qbs.buildVariant === "debug" property bool testsEnabled: qbs.getenv("TEST") || qbs.buildVariant === "debug"
property stringList generalDefines: [ property stringList generalDefines: [
"QT_CREATOR", "QT_CREATOR",
'IDE_LIBRARY_BASENAME="lib"', 'IDE_LIBRARY_BASENAME="' + libDirName + '"',
"QT_DISABLE_DEPRECATED_BEFORE=0x040900", "QT_DISABLE_DEPRECATED_BEFORE=0x040900",
"QT_NO_CAST_TO_ASCII", "QT_NO_CAST_TO_ASCII",
"QT_NO_CAST_FROM_ASCII" "QT_NO_CAST_FROM_ASCII"

View File

@@ -990,10 +990,7 @@ class DumperBase:
self.putCallItem(name, qobject, "property", '"' + name + '"') self.putCallItem(name, qobject, "property", '"' + name + '"')
# Dynamic properties. # Dynamic properties.
if extraData == 0: if extraData:
self.putItemCount(0)
self.putNumChild(0)
else:
propertyNames = extraData + ptrSize propertyNames = extraData + ptrSize
propertyValues = extraData + 2 * ptrSize propertyValues = extraData + 2 * ptrSize

View File

@@ -1742,7 +1742,7 @@ class Dumper(DumperBase):
# See http://sourceware.org/bugzilla/show_bug.cgi?id=11912 # See http://sourceware.org/bugzilla/show_bug.cgi?id=11912
exp = "(class '%s'*)0" % ts exp = "(class '%s'*)0" % ts
try: try:
type = parseAndEvaluate(exp).type.target() type = self.parseAndEvaluate(exp).type.target()
except: except:
# Can throw "RuntimeError: No type named class Foo." # Can throw "RuntimeError: No type named class Foo."
pass pass

View File

@@ -4,4 +4,9 @@ CppApplication {
type: "application" // To suppress bundle generation on Mac type: "application" // To suppress bundle generation on Mac
consoleApplication: true consoleApplication: true
files: "main.c" files: "main.c"
Group { // Properties for the produced executable
fileTagsFilter: product.type
qbs.install: true
}
} }

View File

@@ -4,4 +4,9 @@ CppApplication {
type: "application" // To suppress bundle generation on Mac type: "application" // To suppress bundle generation on Mac
consoleApplication: true consoleApplication: true
files: "main.cpp" files: "main.cpp"
Group { // Properties for the produced executable
fileTagsFilter: product.type
qbs.install: true
}
} }

View File

@@ -2,52 +2,124 @@
<instructionals module="Qt"> <instructionals module="Qt">
<tutorials> <tutorials>
<tutorial imageUrl="images/icons/buildrun.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-build-example-application.html" projectPath="" name="Building and Running an Example Application"> <tutorial imageUrl="images/icons/buildrun.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-build-example-application.html" projectPath="" name="Building and Running an Example Application">
<description><![CDATA[You can test that your installation is successful by opening an existing example application project.]]></description> <description><![CDATA[Testing that your installation is successful by opening an existing example application project.]]></description>
<tags>qt creator,build,compile</tags> <tags>qt creator,build,compile</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/qwidget.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-writing-program.html" projectPath="" name="Creating a Qt Widget Based Application"> <tutorial imageUrl="images/icons/qwidget.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-writing-program.html" projectPath="" name="Creating a Qt Widget Based Application">
<description><![CDATA[This tutorial describes how to use Qt Creator to create a small Qt application, Text Finder.]]></description> <description><![CDATA[Using Qt Creator to create a small Qt application, Text Finder.]]></description>
<tags>qt,c++,text,qt designer,qt creator</tags> <tags>qt creator,qt designer,widgets,c++,text</tags>
</tutorial>
<tutorial imageUrl="images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/gettingstartedqt.html" projectPath="" name="Getting Started Programming with Qt Widgets">
<description><![CDATA[Developing Qt applications using C++ and the Qt Widgets module.]]></description>
<tags>qt,qt creator,qt designer,widgets,c++</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/qtquick.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-qml-application.html" projectPath="" name="Creating a Qt Quick Application"> <tutorial imageUrl="images/icons/qtquick.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-qml-application.html" projectPath="" name="Creating a Qt Quick Application">
<description><![CDATA[This tutorial uses basic elements and illustrates basic concepts of Qt Quick.]]></description> <description><![CDATA[Using basic QML elements and learning about basic concepts of Qt Quick.]]></description>
<tags>qt quick,qml,states,transitions,visual designer,qt creator</tags> <tags>qt creator,qt quick designer,qt quick,qml,states,transitions</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/ddays09.png" difficulty="" projectPath="" name="Qt Creator Bootcamp" isVideo="true" videoUrl="http://developer.qt.nokia.com/videos/watch/qt_creator_bootcamp" videoLength="58:29"> <tutorial imageUrl="images/icons/androidapp.png" difficulty="" docUrl="qthelp://org.qt-project.qtcreator/doc/creator-android-app-tutorial.html" projectPath="" name="Creating an Android Application">
<description><![CDATA[All you need to start with Qt Creator - a cross-platform IDE Are you developing cross-platform applications with Qt, but are missing a cross-platform development environment?]]></description> <description><![CDATA[Developing Qt Quick applications for Android devices using Qt Quick Controls.]]></description>
<tags>qt sdk,qt creator</tags> <tags>qt creator,qt quick designer,qml,android</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/ddays11.png" difficulty="" projectPath="" name="Qt Quick - Rapid User Interface Prototyping" isVideo="true" videoUrl="http://qt-project.org/videos/watch/using-qt-quick-for-rapid-ui-prototyping-and-development" videoLength="55:47"> <tutorial imageUrl="images/icons/tutorialicon.png" difficulty="" docUrl="qthelp://org.qt-project.qtdoc/qtdoc/gettingstartedqml.html" projectPath="" name="Getting Started Programming with Qt Quick">
<description><![CDATA[Skip Flash & PhotoShop. Go straight to Qt Quick! Creating an application with a great user experience is a challenge. Traditionally a lot of effort goes into upfront design where tools such as Flash or PhotoShop are used to prototype ideas.]]></description> <description><![CDATA[Developing Qt Quick applications using QML and C++.]]></description>
<tags>qt quick,qml,qt sdk,qt creator</tags> <tags>qt quick,qml,c++</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays10.png" difficulty="" projectPath="" name="Meet Qt Quick" isVideo="true" videoUrl="http://developer.qt.nokia.com/videos/watch/meet_qt_quick" videoLength="1:08:24">
<description><![CDATA[The fundamental elements behind Qt Quick and how to quickly create fluid, animated user interfaces! Qt Quick is a set of technologies that makes it easier for developers and designers to create modern and attractive UIs.]]></description>
<tags>qt quick, qml</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays11.png" difficulty="" projectPath="" name="Whats new in QtQuick 2.0" isVideo="true" videoUrl="http://qt-project.org/videos/watch/whats-new-in-qtquick-2.0" videoLength="46:10">
<description><![CDATA[Qt Quick 1.0 brought a suite of technologies to make it easy for designers and developers to easily create fluid animated interfaces. QtQuick 2.0 takes this further with the introduction of a built-in Scene Graph rendering system and more.]]></description>
<tags>qt quick, qml</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays11.png" difficulty="" projectPath="" name="Qt Quick Best Practices and Design Patterns" isVideo="true" videoUrl="http://qt-project.org/videos/watch/qt-quick-best-practices-and-design-patterns" videoLength="48:51">
<description><![CDATA[This talk discusses various QML best practices and design patterns for building powerful and scalable Qt Quick applications with QML and C++ code.]]></description>
<tags>qt quick, qml</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays12.png" difficulty="" projectPath="" name="What is New in QtWebKit in 5.0" isVideo="true" videoUrl="http://www.youtube.com/watch?v=xEuapSGxaeU" videoLength="1:01:55">
<description><![CDATA[The web platform continues to evolve at breakneck speed. With our WebKit port to Qt 5 we are bringing these latest web technologies to the Qt world.]]></description>
<tags>qt, webkit</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/ddays12.png" difficulty="" projectPath="" name="Qt Creator 101" isVideo="true" videoUrl="http://www.youtube.com/watch?v=s7PgHmuFaGY" videoLength="55:38"> <tutorial imageUrl="images/icons/ddays12.png" difficulty="" projectPath="" name="Qt Creator 101" isVideo="true" videoUrl="http://www.youtube.com/watch?v=s7PgHmuFaGY" videoLength="55:38">
<description><![CDATA[The presentation provides a short introduction into Qt Creator, demonstrates targeting different environments from within the IDE and highlights new features found in Qt Creator 2.6.]]></description> <description><![CDATA[Getting started with using Qt Creator for cross-platform development.]]></description>
<tags>qt creator</tags> <tags>qt creator</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/ddays12.png" difficulty="" projectPath="" name="Qt 5 Roadmap" isVideo="true" videoUrl="http://www.youtube.com/watch?v=3QgG9oYhH-c" videoLength="1:01:43"> <tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Extending Qt Creator Without Writing Code" isVideo="true" videoUrl="http://www.youtube.com/watch?v=DP0lMoLVneY" videoLength="59:49">
<description><![CDATA[Qt 5.0 is a major step forward for Qt. It includes many new features and forms a great basis for the years to come. The talk gives an overview over these, as well as an outlook towards upcoming Qt release.]]></description> <description><![CDATA[Customizing Qt Creator to fit your own or your customers' purposes.]]></description>
<tags>qt 5, qt</tags> <tags>qt creator,configuration</tags>
</tutorial> </tutorial>
<tutorial imageUrl="images/icons/ddays12.png" difficulty="" projectPath="" name="QML Coding, Performance and Debugging: Usage of Tools" isVideo="true" videoUrl="http://www.youtube.com/watch?v=mPXn6L2Wftc" videoLength="53:52"> <tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt Creator Plugin Development" isVideo="true" videoUrl="http://www.youtube.com/watch?v=6AEYgVPjl-s" videoLength="59:49">
<description><![CDATA[The presentation shows the usage of the various QtQuick tools. The Editor provides code navigation, code completion and validation and context help, among other features.]]></description> <description><![CDATA[Adding plugins to Qt Creator.]]></description>
<tags>qt quick, qml, qt creator</tags> <tags>qt creator,plugins</tags>
</tutorial> </tutorial>
</tutorials> <tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Targeting Multiple Mobile Platforms with Qt Creator" isVideo="true" videoUrl="http://www.youtube.com/watch?v=jDRup5z2qz0" videoLength="52:38">
<description><![CDATA[Using Qt Creator to develop a cross-platform application for mobile devices and other small devices.]]></description>
<tags>qt creator,qt quick,qml,c++,android,blackberry,sailfishos</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Step by Step Qt on Android Tutorial" isVideo="true" videoUrl="http://www.youtube.com/watch?v=yhdi6JONtQo" videoLength="1:02:30">
<description><![CDATA[Using Qt Creator to develop a Qt Quick application for Android devices.]]></description>
<tags>qt creator,qt quick,qml,android</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt for iOS" isVideo="true" videoUrl="http://www.youtube.com/watch?v=HNQpJG2F6ow" videoLength="1:00:48">
<description><![CDATA[Using Qt Creator to develop a Qt Quick application for iOS that uses sensors and the native camera on the device.]]></description>
<tags>qt creator,qt quick,ios,sensors,camera</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt Creator for BareMetal Development" isVideo="true" videoUrl="http://www.youtube.com/watch?v=hrKz63Q_Rf0" videoLength="9:35">
<description><![CDATA[Using Qt Creator to develop for BareMetal devices.]]></description>
<tags>qt creator,baremetal</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt on WinRT" isVideo="true" videoUrl="http://www.youtube.com/watch?v=NubVGd_LcxQ" videoLength="50:01">
<description><![CDATA[Learning about the experimental Qt on Windows Runtime port.]]></description>
<tags>qt,winrt</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Developing Embedded Linux Applications with Qt" isVideo="true" videoUrl="http://www.youtube.com/watch?v=lyQVw1RtaH4" videoLength="53:27">
<description><![CDATA[Getting started with developing Qt applications for embedded Linux devices.]]></description>
<tags>qt, embedded</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Introduction to Qt Quick Controls" isVideo="true" videoUrl="http://www.youtube.com/watch?v=JLLIYysXsj8" videoLength="57:34">
<description><![CDATA[Using Qt Quick Controls, a set of UI elements, to create user interfaces using Qt Quick 2.]]></description>
<tags>qt quick,controls</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Adaptable UIs with Qt Quick" isVideo="true" videoUrl="http://www.youtube.com/watch?v=7zlvbHow9Gw" videoLength="46:16">
<description><![CDATA[Implementing adaptable Qt QUick UIs using layouts, bindings, file selectors, and loaders.]]></description>
<tags>qt quick,layouts,bindings</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt Quick and Input Events (Touch, Mouse, Keyboard)" isVideo="true" videoUrl="http://www.youtube.com/watch?v=yTsCkfTAl1s" videoLength="1:07:05">
<description><![CDATA[Handling user input with Qt Quick.]]></description>
<tags>qt quick,qml,input</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Building 3D OpenGL Scenes with Qt 5 and QML" isVideo="true" videoUrl="http://www.youtube.com/watch?v=29wCpA0DBZI" videoLength="52:38">
<description><![CDATA[Using QQuickWindow's OpenGL context to render 3D objects.]]></description>
<tags>qt quick,qml,3d</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Integrating Qt Quick with 3D renderers" isVideo="true" videoUrl="http://www.youtube.com/watch?v=BfIaTccy6HQ" videoLength="1:00:04">
<description><![CDATA[Integrating Qt Quick with other 3D scene rendering models.]]></description>
<tags>qt quick,qt,scenegraph,3d</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Qt 5.2's QML Engine in Depth" isVideo="true" videoUrl="http://www.youtube.com/watch?v=QdyRZApt5ww" videoLength="52:35">
<description><![CDATA[Learning about data types in JavaScript and QML, the old and new Qt architecture, and future optimizations to Qt.]]></description>
<tags>qt,qml,data types</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="QML Tricks and Treats" isVideo="true" videoUrl="http://www.youtube.com/watch?v=JNDFUHOoPSM" videoLength="56:20">
<description><![CDATA[Structuring an application that combines QML and C++ code, looking up QML language scope and names, creating custom views, handling user input, and styling applications.]]></description>
<tags>qt quick,qml,c++,build,compile,input,styling</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Speeding up Your Qt App with New QtNetwork Features" isVideo="true" videoUrl="http://www.youtube.com/watch?v=OM9BgcXr9ys" videoLength="49:10">
<description><![CDATA[Making applications load network data faster.]]></description>
<tags>qt quick,qml,network</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Introducing QtWebEngine" isVideo="true" videoUrl="http://www.youtube.com/watch?v=Pc5zKGmeYN0" videoLength="1:03:06">
<description><![CDATA[Introduces the Qt Web Engine technology preview for desktop and embedded platforms.]]></description>
<tags>qt,web engine</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="QmlWeb - Running Qt Quick Applications on the Web" isVideo="true" videoUrl="http://www.youtube.com/watch?v=Ea8Maw4FTw8" videoLength="57:05">
<description><![CDATA[Taking QML to the web.]]></description>
<tags>qml,qt quick,web</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Signals and Slots in Qt 5" isVideo="true" videoUrl="http://www.youtube.com/watch?v=pwNd8gq6PZY" videoLength="55:30">
<description><![CDATA[Learning about the signal and slot syntax in Qt 5.]]></description>
<tags>qt,signals,slots</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="KDE Frameworks 5: Qt Add-ons Overview" isVideo="true" videoUrl="http://www.youtube.com/watch?v=P5RP46ZUk6s" videoLength="53:27">
<description><![CDATA[Using Qt add-ons for data compression, plotting with axis, multithreaded tasks, configuration, modeling items, and core tasks.]]></description>
<tags>qt,add-ons,compression,plotting,configuration</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Applied Type Erasure in Qt 5" isVideo="true" videoUrl="http://www.youtube.com/watch?v=MOzQX4C29os" videoLength="45:46">
<description><![CDATA[Learning about type erasure based on QVariant and the capabilities introduced in Qt 5.2.]]></description>
<tags>qt,data types</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Analysing & Solving Qt UI Performance Problems on Embedded Hardware" isVideo="true" videoUrl="http://www.youtube.com/watch?v=TI_LJkQtZtA" videoLength="50:57">
<description><![CDATA[Using trace viewing and analysis and profiling tools to solve typical Qt UI performance problems on embedded devices.]]></description>
<tags>qt quick,qml,qt creator,qml profiler,embedded</tags>
</tutorial>
<tutorial imageUrl="images/icons/ddays13.png" difficulty="" projectPath="" name="Take Your Apps on the Road — an Automotive 101 for Developers" isVideo="true" videoUrl="http://www.youtube.com/watch?v=Hq8XkUtyjsA" videoLength="1:02:36">
<description><![CDATA[Developing applications for the automotive industry.]]></description>
<tags>qt quick,qml,automotive</tags>
</tutorial>
</tutorials>
</instructionals> </instructionals>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -5,7 +5,7 @@ Application {
consoleApplication: qbs.debugInformation consoleApplication: qbs.debugInformation
cpp.rpaths: qbs.targetOS.contains("osx") ? ["@executable_path/.."] cpp.rpaths: qbs.targetOS.contains("osx") ? ["@executable_path/.."]
: ["$ORIGIN/../lib/qtcreator"] : ["$ORIGIN/../" + project.libDirName + "/qtcreator"]
cpp.defines: project.generalDefines cpp.defines: project.generalDefines
cpp.linkerFlags: { cpp.linkerFlags: {
if (qbs.buildVariant == "release" && (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("mingw"))) if (qbs.buildVariant == "release" && (qbs.toolchain.contains("gcc") || qbs.toolchain.contains("mingw")))

View File

@@ -93,7 +93,8 @@ void FileWidget::comboBoxChanged()
void FileWidget::onButtonReleased() void FileWidget::onButtonReleased()
{ {
QString newFile = QFileDialog::getOpenFileName(0, tr("Open File"), m_path.toLocalFile(), m_filter); QString newFile = QFileDialog::getOpenFileName(this, tr("Open File"),
m_path.toLocalFile(), m_filter);
if (!newFile.isEmpty()) if (!newFile.isEmpty())
setFileNameStr(newFile); setFileNameStr(newFile);
} }

View File

@@ -71,9 +71,8 @@ public:
void killProcess(); void killProcess();
void killStub(); void killStub();
#ifdef Q_OS_WIN
qint64 applicationMainThreadID() const; qint64 applicationMainThreadID() const;
#else #ifndef Q_OS_WIN
void detachStub(); void detachStub();
#endif #endif

View File

@@ -32,6 +32,7 @@
#include "qtcprocess.h" #include "qtcprocess.h"
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
#include <QCoreApplication> #include <QCoreApplication>
#include <QTimer> #include <QTimer>
@@ -64,6 +65,12 @@ ConsoleProcess::ConsoleProcess(QObject *parent) :
d->m_process.setProcessChannelMode(QProcess::ForwardedChannels); d->m_process.setProcessChannelMode(QProcess::ForwardedChannels);
} }
qint64 ConsoleProcess::applicationMainThreadID() const
{
QTC_CHECK(false);
return -1;
}
void ConsoleProcess::setSettings(QSettings *settings) void ConsoleProcess::setSettings(QSettings *settings)
{ {
d->m_settings = settings; d->m_settings = settings;

View File

@@ -342,7 +342,7 @@ namespace Utils {
namespace Internal { namespace Internal {
QString matchCaseReplacement(const QString &originalText, const QString &replaceText) QString matchCaseReplacement(const QString &originalText, const QString &replaceText)
{ {
if (originalText.isEmpty()) if (originalText.isEmpty() || replaceText.isEmpty())
return replaceText; return replaceText;
//Now proceed with actual case matching //Now proceed with actual case matching

View File

@@ -160,10 +160,10 @@ void AndroidRunner::checkPID()
if (m_wasStarted) { if (m_wasStarted) {
m_wasStarted = false; m_wasStarted = false;
m_checkPIDTimer.stop(); m_checkPIDTimer.stop();
emit remoteProcessFinished(tr("\n\n'%1' died.").arg(m_packageName)); emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" died.").arg(m_packageName));
} else { } else {
if (++m_tries > 3) if (++m_tries > 3)
emit remoteProcessFinished(tr("\n\nUnable to start '%1'").arg(m_packageName)); emit remoteProcessFinished(QLatin1String("\n\n") + tr("Unable to start \"%1\"").arg(m_packageName));
} }
} else if (!m_wasStarted){ } else if (!m_wasStarted){
if (m_useCppDebugger) { if (m_useCppDebugger) {
@@ -343,7 +343,7 @@ void AndroidRunner::stop()
m_tries = 0; m_tries = 0;
if (m_processPID != -1) { if (m_processPID != -1) {
forceStop(); forceStop();
emit remoteProcessFinished(tr("\n\n'%1' terminated.").arg(m_packageName)); emit remoteProcessFinished(QLatin1String("\n\n") + tr("\"%1\" terminated.").arg(m_packageName));
} }
//QObject::disconnect(&m_adbLogcatProcess, 0, this, 0); //QObject::disconnect(&m_adbLogcatProcess, 0, this, 0);
m_adbLogcatProcess.kill(); m_adbLogcatProcess.kill();

View File

@@ -37,6 +37,7 @@
#include <utils/environment.h> #include <utils/environment.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
#include <utils/pathchooser.h>
#include <projectexplorer/toolchainmanager.h> #include <projectexplorer/toolchainmanager.h>
#include <projectexplorer/kitmanager.h> #include <projectexplorer/kitmanager.h>
#include <projectexplorer/kitinformation.h> #include <projectexplorer/kitinformation.h>
@@ -136,6 +137,11 @@ AndroidSettingsWidget::AndroidSettingsWidget(QWidget *parent)
m_ui->downloadAntToolButton->setVisible(Utils::HostOsInfo::isWindowsHost()); m_ui->downloadAntToolButton->setVisible(Utils::HostOsInfo::isWindowsHost());
m_ui->downloadOpenJDKToolButton->setVisible(Utils::HostOsInfo::isWindowsHost()); m_ui->downloadOpenJDKToolButton->setVisible(Utils::HostOsInfo::isWindowsHost());
m_ui->SDKLocationPushButton->setText(Utils::PathChooser::browseButtonLabel());
m_ui->NDKLocationPushButton->setText(Utils::PathChooser::browseButtonLabel());
m_ui->AntLocationPushButton->setText(Utils::PathChooser::browseButtonLabel());
m_ui->OpenJDKLocationPushButton->setText(Utils::PathChooser::browseButtonLabel());
check(All); check(All);
applyToUi(All); applyToUi(All);
} }

View File

@@ -100,8 +100,8 @@ bool BeautifierPlugin::initialize(const QStringList &arguments, QString *errorSt
void BeautifierPlugin::extensionsInitialized() void BeautifierPlugin::extensionsInitialized()
{ {
if (const Core::EditorManager *editorManager = Core::EditorManager::instance()) { if (const Core::EditorManager *editorManager = Core::EditorManager::instance()) {
connect(editorManager, SIGNAL(currentEditorChanged(Core::IEditor *)), connect(editorManager, SIGNAL(currentEditorChanged(Core::IEditor*)),
this, SLOT(updateActions(Core::IEditor *))); this, SLOT(updateActions(Core::IEditor*)));
} }
} }

View File

@@ -1173,9 +1173,8 @@ void ClangCompletionAssistProcessor::completeIncludePath(const QString &realPath
const QStringList &suffixes) const QStringList &suffixes)
{ {
QDirIterator i(realPath, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot); QDirIterator i(realPath, QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
const QString hint = //: Parent folder for proposed #include completion
QObject::tr("Location: ", "Parent folder for proposed #include completion") const QString hint = tr("Location: %1").arg(QDir::toNativeSeparators(QDir::cleanPath(realPath)));
+ QDir::cleanPath(realPath);
while (i.hasNext()) { while (i.hasNext()) {
const QString fileName = i.next(); const QString fileName = i.next();
const QFileInfo fileInfo = i.fileInfo(); const QFileInfo fileInfo = i.fileInfo();

View File

@@ -43,6 +43,7 @@
#include <QStringList> #include <QStringList>
#include <QTextCursor> #include <QTextCursor>
#include <QCoreApplication>
namespace ClangCodeModel { namespace ClangCodeModel {
@@ -104,6 +105,8 @@ private:
class CLANG_EXPORT ClangCompletionAssistProcessor : public TextEditor::IAssistProcessor class CLANG_EXPORT ClangCompletionAssistProcessor : public TextEditor::IAssistProcessor
{ {
Q_DECLARE_TR_FUNCTIONS(ClangCodeModel::Internal::ClangCompletionAssistProcessor)
public: public:
ClangCompletionAssistProcessor(); ClangCompletionAssistProcessor();
virtual ~ClangCompletionAssistProcessor(); virtual ~ClangCompletionAssistProcessor();

View File

@@ -53,7 +53,8 @@ QString ModelManagerSupport::id() const
QString ModelManagerSupport::displayName() const QString ModelManagerSupport::displayName() const
{ {
return QCoreApplication::translate("ModelManagerSupport::displayName", //: Display name
return QCoreApplication::translate("ClangCodeModel::Internal::ModelManagerSupport",
"Clang"); "Clang");
} }

View File

@@ -48,8 +48,7 @@ QString ClangProjectSettingsPanelFactory::id() const
QString ClangProjectSettingsPanelFactory::displayName() const QString ClangProjectSettingsPanelFactory::displayName() const
{ {
return QCoreApplication::translate("ClangProjectSettingsPropertiesPage", return ClangProjectSettingsWidget::tr("Clang Settings");
"Clang Settings");
} }
int ClangProjectSettingsPanelFactory::priority() const int ClangProjectSettingsPanelFactory::priority() const
@@ -67,9 +66,7 @@ bool ClangProjectSettingsPanelFactory::supports(Project *project)
PropertiesPanel *ClangProjectSettingsPanelFactory::createPanel(Project *project) PropertiesPanel *ClangProjectSettingsPanelFactory::createPanel(Project *project)
{ {
PropertiesPanel *panel = new PropertiesPanel; PropertiesPanel *panel = new PropertiesPanel;
panel->setDisplayName(QCoreApplication::translate( panel->setDisplayName(ClangProjectSettingsWidget::tr("Clang Settings"));
"ClangProjectSettingsPropertiesPage",
"Clang Settings"));
panel->setWidget(new ClangProjectSettingsWidget(project)); panel->setWidget(new ClangProjectSettingsWidget(project));
return panel; return panel;
} }

View File

@@ -96,7 +96,8 @@ void CompletionProposalsBuilder::operator ()(const CXCompletionResult &cxResult)
if (m_resultAvailability == CodeCompletionResult::Deprecated) { if (m_resultAvailability == CodeCompletionResult::Deprecated) {
m_comment += QLatin1String("<b>@note</b> "); m_comment += QLatin1String("<b>@note</b> ");
m_comment += QCoreApplication::translate("deprecated C++ symbol", "Is deprecated"); //: deprecated C++ symbol
m_comment += tr("Is deprecated");
} }
m_hint = QLatin1String("<p>"); m_hint = QLatin1String("<p>");
@@ -675,9 +676,9 @@ void CompletionProposalsBuilder::concatSlotSignalSignature(const CXCompletionStr
const QString parent = Internal::getQString(clang_getCompletionParent(cxString, NULL)); const QString parent = Internal::getQString(clang_getCompletionParent(cxString, NULL));
if (m_resultKind == CodeCompletionResult::SlotCompletionKind) if (m_resultKind == CodeCompletionResult::SlotCompletionKind)
m_hint += QObject::tr("Slot of %1, returns %2").arg(parent).arg(resultType); m_hint += tr("Slot of %1, returns %2").arg(parent, resultType);
else else
m_hint += QObject::tr("Signal of %1, returns %2").arg(parent).arg(resultType); m_hint += tr("Signal of %1, returns %2").arg(parent, resultType);
} }
/** /**

View File

@@ -34,10 +34,14 @@
#include "clang_global.h" #include "clang_global.h"
#include <clang-c/Index.h> #include <clang-c/Index.h>
#include <QCoreApplication>
namespace ClangCodeModel { namespace ClangCodeModel {
class CLANG_EXPORT CompletionProposalsBuilder class CLANG_EXPORT CompletionProposalsBuilder
{ {
Q_DECLARE_TR_FUNCTIONS(ClangCodeModel::CompletionProposalsBuilder)
public: public:
CompletionProposalsBuilder(QList<CodeCompletionResult> &results, quint64 contexts, bool isSignalSlotCompletion); CompletionProposalsBuilder(QList<CodeCompletionResult> &results, quint64 contexts, bool isSignalSlotCompletion);
void operator ()(const CXCompletionResult &cxResult); void operator ()(const CXCompletionResult &cxResult);

View File

@@ -52,11 +52,11 @@ const QString Diagnostic::severityAsString() const
return QString(); return QString();
static QStringList strs = QStringList() static QStringList strs = QStringList()
<< QCoreApplication::translate("Diagnostic", "ignored") << QCoreApplication::translate("ClangCodeModel::Diagnostic", "ignored")
<< QCoreApplication::translate("Diagnostic", "note") << QCoreApplication::translate("ClangCodeModel::Diagnostic", "note")
<< QCoreApplication::translate("Diagnostic", "warning") << QCoreApplication::translate("ClangCodeModel::Diagnostic", "warning")
<< QCoreApplication::translate("Diagnostic", "error") << QCoreApplication::translate("ClangCodeModel::Diagnostic", "error")
<< QCoreApplication::translate("Diagnostic", "fatal") << QCoreApplication::translate("ClangCodeModel::Diagnostic", "fatal")
; ;
return strs.at(m_severity); return strs.at(m_severity);

View File

@@ -232,7 +232,8 @@ void ReadOnlyFilesDialog::promptFailWarning(const QStringList &files, ReadOnlyRe
} else { } else {
title = tr("Could Not Change Permissions on Some Files"); title = tr("Could Not Change Permissions on Some Files");
message = d->failWarning; message = d->failWarning;
message += tr("\nSee details for a complete list of files."); message += QLatin1Char('\n');
message += tr("See details for a complete list of files.");
details = files.join(QLatin1String("\n")); details = files.join(QLatin1String("\n"));
} }
QMessageBox msgBox(QMessageBox::Warning, title, message); QMessageBox msgBox(QMessageBox::Warning, title, message);

View File

@@ -349,7 +349,6 @@ void MainWindow::extensionsInitialized()
updateContext(); updateContext();
emit m_coreImpl->coreAboutToOpen(); emit m_coreImpl->coreAboutToOpen();
show();
// Delay restoreWindowState, since it is overridden by LayoutRequest event // Delay restoreWindowState, since it is overridden by LayoutRequest event
QTimer::singleShot(0, this, SLOT(restoreWindowState())); QTimer::singleShot(0, this, SLOT(restoreWindowState()));
QTimer::singleShot(0, m_coreImpl, SIGNAL(coreOpened())); QTimer::singleShot(0, m_coreImpl, SIGNAL(coreOpened()));
@@ -1270,4 +1269,5 @@ void MainWindow::restoreWindowState()
resize(1008, 700); // size without window decoration resize(1008, 700); // size without window decoration
restoreState(m_settings->value(QLatin1String(windowStateKey)).toByteArray()); restoreState(m_settings->value(QLatin1String(windowStateKey)).toByteArray());
m_settings->endGroup(); m_settings->endGroup();
show();
} }

View File

@@ -12,9 +12,9 @@ QtcTool {
Depends { name: "CppTools" } Depends { name: "CppTools" }
cpp.rpaths: [ cpp.rpaths: [
"$ORIGIN/../lib/qtcreator", "$ORIGIN/../" + project.libDirName + "/qtcreator",
"$ORIGIN/../lib/qtcreator/plugins", "$ORIGIN/../" + project.libDirName + "/qtcreator/plugins",
"$ORIGIN/../lib/qtcreator/plugins/QtProject" "$ORIGIN/../" + project.libDirName + "/qtcreator/plugins/QtProject"
] ]
Group { Group {

View File

@@ -224,10 +224,13 @@ void CppHighlighter::highlightBlock(const QString &text)
if (text.length() > lastTokenEnd) if (text.length() > lastTokenEnd)
highlightLine(text, lastTokenEnd, text.length() - lastTokenEnd, formatForCategory(CppVisualWhitespace)); highlightLine(text, lastTokenEnd, text.length() - lastTokenEnd, formatForCategory(CppVisualWhitespace));
if (!initialLexerState && lexerState && !tokens.isEmpty() && tokens.last().isComment()) { if (!initialLexerState && lexerState && !tokens.isEmpty()) {
parentheses.append(Parenthesis(Parenthesis::Opened, QLatin1Char('+'), const Token &lastToken = tokens.last();
tokens.last().begin())); if (lastToken.is(T_COMMENT) || lastToken.is(T_DOXY_COMMENT)) {
++braceDepth; parentheses.append(Parenthesis(Parenthesis::Opened, QLatin1Char('+'),
lastToken.begin()));
++braceDepth;
}
} }
BaseTextDocumentLayout::setParentheses(currentBlock(), parentheses); BaseTextDocumentLayout::setParentheses(currentBlock(), parentheses);

View File

@@ -1804,7 +1804,7 @@ void DebuggerEngine::checkForReleaseBuild(const DebuggerStartParameters &sp)
foreach (const QByteArray &name, interesting) { foreach (const QByteArray &name, interesting) {
const QString found = seen.contains(name) ? tr("Found.") : tr("Not found."); const QString found = seen.contains(name) ? tr("Found.") : tr("Not found.");
detailedWarning.append(tr("\nSection %1: %2").arg(_(name)).arg(found)); detailedWarning.append(QLatin1Char('\n') + tr("Section %1: %2").arg(_(name)).arg(found));
} }
break; break;
} }

View File

@@ -41,6 +41,8 @@
#include <QMessageBox> #include <QMessageBox>
using namespace Utils;
namespace Debugger { namespace Debugger {
namespace Internal { namespace Internal {
@@ -120,12 +122,11 @@ void GdbTermEngine::setupInferior()
{ {
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state()); QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
const qint64 attachedPID = m_stubProc.applicationPID(); const qint64 attachedPID = m_stubProc.applicationPID();
#ifdef Q_OS_WIN
const qint64 attachedMainThreadID = m_stubProc.applicationMainThreadID(); const qint64 attachedMainThreadID = m_stubProc.applicationMainThreadID();
showMessage(QString::fromLatin1("Attaching to %1 (%2)").arg(attachedPID).arg(attachedMainThreadID), LogMisc); const QString msg = (attachedMainThreadID != -1)
#else ? QString::fromLatin1("Attaching to %1 (%2)").arg(attachedPID).arg(attachedMainThreadID)
showMessage(QString::fromLatin1("Attaching to %1").arg(attachedPID), LogMisc); : QString::fromLatin1("Attaching to %1").arg(attachedPID);
#endif showMessage(msg, LogMisc);
notifyInferiorPid(attachedPID); notifyInferiorPid(attachedPID);
postCommand("attach " + QByteArray::number(attachedPID), postCommand("attach " + QByteArray::number(attachedPID),
CB(handleStubAttached)); CB(handleStubAttached));
@@ -143,11 +144,7 @@ void GdbTermEngine::handleStubAttached(const GdbResponse &response)
} else { } else {
QString errorMessage; QString errorMessage;
// Resume thread that was suspended by console stub process (see stub code). // Resume thread that was suspended by console stub process (see stub code).
#ifdef Q_OS_WIN
const qint64 mainThreadId = m_stubProc.applicationMainThreadID(); const qint64 mainThreadId = m_stubProc.applicationMainThreadID();
#else
const qint64 mainThreadId = -1;
#endif
if (winResumeThread(mainThreadId, &errorMessage)) { if (winResumeThread(mainThreadId, &errorMessage)) {
showMessage(QString::fromLatin1("Inferior attached, thread %1 resumed"). showMessage(QString::fromLatin1("Inferior attached, thread %1 resumed").
arg(mainThreadId), LogMisc); arg(mainThreadId), LogMisc);

View File

@@ -2876,8 +2876,8 @@ QString GitClient::extendedShowDescription(const QString &workingDirectory, cons
// If there are more than 20 branches, list first 10 followed by a hint // If there are more than 20 branches, list first 10 followed by a hint
if (branchCount > 20) { if (branchCount > 20) {
const int leave = 10; const int leave = 10;
//: Displayed after the untranslated message "Branches: branch1, branch2 'and %1 more'" in git show. //: Displayed after the untranslated message "Branches: branch1, branch2 'and %n more'" in git show.
moreBranches = QLatin1Char(' ') + tr("and %1 more", 0, branchCount - leave); moreBranches = QLatin1Char(' ') + tr("and %n more", 0, branchCount - leave);
branches.erase(branches.begin() + leave, branches.end()); branches.erase(branches.begin() + leave, branches.end());
} }
if (!branches.isEmpty()) { if (!branches.isEmpty()) {

View File

@@ -868,9 +868,12 @@ void HelpPlugin::activateContext()
links = HelpManager::linksForIdentifier(m_idFromContext); links = HelpManager::linksForIdentifier(m_idFromContext);
if (links.isEmpty()) { if (links.isEmpty()) {
// Maybe this is already an URL... // Maybe this is already an URL...
QUrl url(m_idFromContext); // Require protocol specifier, otherwise most strings would be 'local file names'
if (url.isValid()) if (m_idFromContext.contains(QLatin1Char(':'))) {
links.insert(m_idFromContext, m_idFromContext); QUrl url(m_idFromContext);
if (url.isValid())
links.insert(m_idFromContext, m_idFromContext);
}
} }
} }

View File

@@ -1,4 +1,4 @@
<plugin name=\"Ios\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\" experimental=\"true\"> <plugin name=\"Ios\" version=\"$$QTCREATOR_VERSION\" compatVersion=\"$$QTCREATOR_VERSION\">
<vendor>Digia Plc</vendor> <vendor>Digia Plc</vendor>
<copyright>(C) 2014 Digia Plc</copyright> <copyright>(C) 2014 Digia Plc</copyright>
<platform>Mac OS.*</platform> <platform>Mac OS.*</platform>

View File

@@ -170,7 +170,8 @@ void DeviceUsedPortsGatherer::handleProcessClosed(int exitStatus)
if (!errMsg.isEmpty()) { if (!errMsg.isEmpty()) {
if (!d->remoteStderr.isEmpty()) { if (!d->remoteStderr.isEmpty()) {
errMsg += tr("\nRemote error output was: %1") errMsg += QLatin1Char('\n');
errMsg += tr("Remote error output was: %1")
.arg(QString::fromUtf8(d->remoteStderr)); .arg(QString::fromUtf8(d->remoteStderr));
} }
emit error(errMsg); emit error(errMsg);

View File

@@ -118,7 +118,7 @@ void SshDeviceProcessList::handleProcessError(const QString &errorMessage)
QString fullMessage = errorMessage; QString fullMessage = errorMessage;
const QByteArray remoteStderr = d->process.readAllStandardError(); const QByteArray remoteStderr = d->process.readAllStandardError();
if (!remoteStderr.isEmpty()) if (!remoteStderr.isEmpty())
fullMessage += tr("\nRemote stderr was: %1").arg(QString::fromUtf8(remoteStderr)); fullMessage += QLatin1Char('\n') + tr("Remote stderr was: %1").arg(QString::fromUtf8(remoteStderr));
reportError(fullMessage); reportError(fullMessage);
} }

View File

@@ -41,7 +41,8 @@ using namespace ProjectExplorer;
namespace { namespace {
// optional full path, make executable name, optional exe extension, optional number in square brackets, colon space // optional full path, make executable name, optional exe extension, optional number in square brackets, colon space
const char * const MAKE_PATTERN("^(([A-Za-z]:)?[/\\\\][^:]*[/\\\\])?(mingw(32|64)-|g)?make(.exe)?(\\[\\d+\\])?:\\s"); const char * const MAKEEXEC_PATTERN("^(.*[/\\\\])?(mingw(32|64)-|g)?make(.exe)?(\\[\\d+\\])?:\\s");
const char * const MAKEFILE_PATTERN("^((.*[/\\\\])?[Mm]akefile(\\.[a-zA-Z]+)?):(\\d+):\\s");
} }
GnuMakeParser::GnuMakeParser() : GnuMakeParser::GnuMakeParser() :
@@ -49,16 +50,16 @@ GnuMakeParser::GnuMakeParser() :
m_fatalErrorCount(0) m_fatalErrorCount(0)
{ {
setObjectName(QLatin1String("GnuMakeParser")); setObjectName(QLatin1String("GnuMakeParser"));
m_makeDir.setPattern(QLatin1String(MAKE_PATTERN) + m_makeDir.setPattern(QLatin1String(MAKEEXEC_PATTERN) +
QLatin1String("(\\w+) directory .(.+).$")); QLatin1String("(\\w+) directory .(.+).$"));
m_makeDir.setMinimal(true); m_makeDir.setMinimal(true);
QTC_CHECK(m_makeDir.isValid()); QTC_CHECK(m_makeDir.isValid());
m_makeLine.setPattern(QLatin1String(MAKE_PATTERN) + QLatin1String("(\\*\\*\\*\\s)?(.*)$")); m_makeLine.setPattern(QLatin1String(MAKEEXEC_PATTERN) + QLatin1String("(.*)$"));
m_makeLine.setMinimal(true); m_makeLine.setMinimal(true);
QTC_CHECK(m_makeLine.isValid()); QTC_CHECK(m_makeLine.isValid());
m_makefileError.setPattern(QLatin1String("^(.*):(\\d+):\\s\\*\\*\\*\\s(.*)$")); m_errorInMakefile.setPattern(QLatin1String(MAKEFILE_PATTERN) + QLatin1String("(.*)$"));
m_makefileError.setMinimal(true); m_errorInMakefile.setMinimal(true);
QTC_CHECK(m_makefileError.isValid()); QTC_CHECK(m_errorInMakefile.isValid());
} }
void GnuMakeParser::setWorkingDirectory(const QString &workingDirectory) void GnuMakeParser::setWorkingDirectory(const QString &workingDirectory)
@@ -77,48 +78,68 @@ void GnuMakeParser::stdOutput(const QString &line)
const QString lne = rightTrimmed(line); const QString lne = rightTrimmed(line);
if (m_makeDir.indexIn(lne) > -1) { if (m_makeDir.indexIn(lne) > -1) {
if (m_makeDir.cap(7) == QLatin1String("Leaving")) if (m_makeDir.cap(6) == QLatin1String("Leaving"))
removeDirectory(m_makeDir.cap(8)); removeDirectory(m_makeDir.cap(7));
else else
addDirectory(m_makeDir.cap(8)); addDirectory(m_makeDir.cap(7));
return; return;
} }
IOutputParser::stdOutput(line); IOutputParser::stdOutput(line);
} }
class Result {
public:
Result() : isFatal(false), type(Task::Error) { }
QString description;
bool isFatal;
Task::TaskType type;
};
static Result parseDescription(const QString &description)
{
Result result;
if (description.startsWith(QLatin1String("warning: "), Qt::CaseInsensitive)) {
result.description = description.mid(9);
result.type = Task::Warning;
result.isFatal = false;
} else if (description.startsWith(QLatin1String("*** "))) {
result.description = description.mid(4);
result.type = Task::Error;
result.isFatal = true;
} else {
result.description = description;
result.type = Task::Error;
result.isFatal = false;
}
return result;
}
void GnuMakeParser::stdError(const QString &line) void GnuMakeParser::stdError(const QString &line)
{ {
const QString lne = rightTrimmed(line); const QString lne = rightTrimmed(line);
if (m_makefileError.indexIn(lne) > -1) { if (m_errorInMakefile.indexIn(lne) > -1) {
++m_fatalErrorCount; Result res = parseDescription(m_errorInMakefile.cap(5));
if (res.isFatal)
++m_fatalErrorCount;
if (!m_suppressIssues) { if (!m_suppressIssues) {
m_suppressIssues = true; taskAdded(Task(res.type, res.description,
emit addTask(Task(Task::Error, Utils::FileName::fromUserInput(m_errorInMakefile.cap(1)) /* filename */,
m_makefileError.cap(3), m_errorInMakefile.cap(4).toInt(), /* line */
Utils::FileName::fromUserInput(m_makefileError.cap(1)), Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)));
m_makefileError.cap(2).toInt(),
Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)));
} }
return; return;
} }
if (m_makeLine.indexIn(lne) > -1) { if (m_makeLine.indexIn(lne) > -1) {
if (!m_makeLine.cap(7).isEmpty()) Result res = parseDescription(m_makeLine.cap(6));
if (res.isFatal)
++m_fatalErrorCount; ++m_fatalErrorCount;
if (!m_suppressIssues) { if (!m_suppressIssues) {
m_suppressIssues = true; taskAdded(Task(res.type, res.description,
QString description = m_makeLine.cap(8); Utils::FileName() /* filename */, -1, /* line */
Task::TaskType type = Task::Error; Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)));
if (description.startsWith(QLatin1String("warning: "), Qt::CaseInsensitive)) {
description = description.mid(9);
type = Task::Warning;
}
emit addTask(Task(type, description,
Utils::FileName() /* filename */,
-1, /* line */
Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)));
} }
return; return;
} }
@@ -368,6 +389,18 @@ void ProjectExplorerPlugin::testGnuMakeParserParsing_data()
Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM))) Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)))
<< QString() << QString()
<< QStringList(); << QStringList();
QTest::newRow("warning in Makefile")
<< QStringList()
<< QString::fromLatin1("Makefile:794: warning: overriding commands for target `xxxx.app/Contents/Info.plist'")
<< OutputParserTester::STDERR
<< QString() << QString()
<< (QList<Task>()
<< Task(Task::Warning,
QString::fromLatin1("overriding commands for target `xxxx.app/Contents/Info.plist'"),
Utils::FileName::fromString(QLatin1String("Makefile")), 794,
Core::Id(Constants::TASK_CATEGORY_BUILDSYSTEM)))
<< QString()
<< QStringList();
} }
void ProjectExplorerPlugin::testGnuMakeParserParsing() void ProjectExplorerPlugin::testGnuMakeParserParsing()

View File

@@ -62,7 +62,8 @@ private:
QRegExp m_makeDir; QRegExp m_makeDir;
QRegExp m_makeLine; QRegExp m_makeLine;
QRegExp m_makefileError; QRegExp m_threeStarError;
QRegExp m_errorInMakefile;
QStringList m_directories; QStringList m_directories;

View File

@@ -230,7 +230,7 @@ struct ProjectExplorerPluginPrivate {
Internal::AppOutputPane *m_outputPane; Internal::AppOutputPane *m_outputPane;
QList<QPair<QString, QString> > m_recentProjects; // pair of filename, displayname QList<QPair<QString, QString> > m_recentProjects; // pair of filename, displayname
static const int m_maxRecentProjects = 7; static const int m_maxRecentProjects = 25;
QString m_lastOpenDirectory; QString m_lastOpenDirectory;
RunConfiguration *m_delayedRunConfiguration; RunConfiguration *m_delayedRunConfiguration;
@@ -2938,7 +2938,9 @@ void ProjectExplorerPlugin::removeFile()
return; return;
} }
DocumentManager::expectFileChange(filePath);
Core::FileUtils::removeFile(filePath, deleteFile); Core::FileUtils::removeFile(filePath, deleteFile);
DocumentManager::unexpectFileChange(filePath);
} }
} }

View File

@@ -136,13 +136,17 @@ bool sortNodes(Node *n1, Node *n2)
// must be file nodes // must be file nodes
{ {
int result = caseFriendlyCompare(n1->displayName(), n2->displayName());
if (result != 0)
return result < 0;
const QString filePath1 = n1->path(); const QString filePath1 = n1->path();
const QString filePath2 = n2->path(); const QString filePath2 = n2->path();
const QString fileName1 = QFileInfo(filePath1).fileName(); const QString fileName1 = QFileInfo(filePath1).fileName();
const QString fileName2 = QFileInfo(filePath2).fileName(); const QString fileName2 = QFileInfo(filePath2).fileName();
int result = caseFriendlyCompare(fileName1, fileName2); result = caseFriendlyCompare(fileName1, fileName2);
if (result != 0) { if (result != 0) {
return result < 0; // sort by filename return result < 0; // sort by filename
} else { } else {

View File

@@ -36,6 +36,7 @@
#include "ui_qbsbuildstepconfigwidget.h" #include "ui_qbsbuildstepconfigwidget.h"
#include <coreplugin/icore.h>
#include <projectexplorer/buildsteplist.h> #include <projectexplorer/buildsteplist.h>
#include <projectexplorer/kit.h> #include <projectexplorer/kit.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
@@ -234,16 +235,26 @@ QVariantMap QbsBuildStep::toMap() const
void QbsBuildStep::buildingDone(bool success) void QbsBuildStep::buildingDone(bool success)
{ {
m_lastWasSuccess = success;
// Report errors: // Report errors:
foreach (const qbs::ErrorItem &item, m_job->error().items()) foreach (const qbs::ErrorItem &item, m_job->error().items())
createTaskAndOutput(ProjectExplorer::Task::Error, item.description(), createTaskAndOutput(ProjectExplorer::Task::Error, item.description(),
item.codeLocation().fileName(), item.codeLocation().line()); item.codeLocation().fileName(), item.codeLocation().line());
// Building can uncover additional target artifacts. QbsProject *pro = static_cast<QbsProject *>(project());
static_cast<QbsProject *>(project())->parseCurrentBuildConfiguration(true); connect(pro, SIGNAL(projectParsingDone(bool)), this, SLOT(reparsingDone()));
// Building can uncover additional target artifacts.
// Wait for reparsing to finish, since before that our run configurations may not be valid.
pro->parseCurrentBuildConfiguration(true);
}
void QbsBuildStep::reparsingDone()
{
disconnect(static_cast<QbsProject *>(project()), SIGNAL(projectParsingDone(bool)),
this, SLOT(reparsingDone()));
QTC_ASSERT(m_fi, return); QTC_ASSERT(m_fi, return);
m_fi->reportResult(success); m_fi->reportResult(m_lastWasSuccess);
m_fi = 0; // do not delete, it is not ours m_fi = 0; // do not delete, it is not ours
m_job->deleteLater(); m_job->deleteLater();
m_job = 0; m_job = 0;
@@ -421,6 +432,8 @@ void QbsBuildStepConfigWidget::updateState()
m_ui->buildVariantComboBox->setCurrentIndex(idx); m_ui->buildVariantComboBox->setCurrentIndex(idx);
QString command = QLatin1String("qbs build "); QString command = QLatin1String("qbs build ");
command += QString::fromLatin1("--settings-dir ")
+ QDir::toNativeSeparators(Core::ICore::userResourcePath()) + QLatin1String(" ");
if (m_step->dryRun()) if (m_step->dryRun())
command += QLatin1String("--dry-run "); command += QLatin1String("--dry-run ");
if (m_step->keepGoing()) if (m_step->keepGoing())

View File

@@ -80,6 +80,7 @@ signals:
private slots: private slots:
void buildingDone(bool success); void buildingDone(bool success);
void reparsingDone();
void handleTaskStarted(const QString &desciption, int max); void handleTaskStarted(const QString &desciption, int max);
void handleProgress(int value); void handleProgress(int value);
void handleCommandDescriptionReport(const QString &highlight, const QString &message); void handleCommandDescriptionReport(const QString &highlight, const QString &message);
@@ -108,6 +109,7 @@ private:
QFutureInterface<bool> *m_fi; QFutureInterface<bool> *m_fi;
qbs::BuildJob *m_job; qbs::BuildJob *m_job;
int m_progressBase; int m_progressBase;
bool m_lastWasSuccess;
ProjectExplorer::IOutputParser *m_parser; ProjectExplorer::IOutputParser *m_parser;
friend class QbsBuildStepConfigWidget; friend class QbsBuildStepConfigWidget;

View File

@@ -35,6 +35,7 @@
#include "ui_qbsinstallstepconfigwidget.h" #include "ui_qbsinstallstepconfigwidget.h"
#include <coreplugin/icore.h>
#include <projectexplorer/buildsteplist.h> #include <projectexplorer/buildsteplist.h>
#include <projectexplorer/deployconfiguration.h> #include <projectexplorer/deployconfiguration.h>
#include <projectexplorer/kit.h> #include <projectexplorer/kit.h>
@@ -312,6 +313,8 @@ void QbsInstallStepConfigWidget::updateState()
m_ui->installRootChooser->setBaseDirectory(data.buildDirectory()); m_ui->installRootChooser->setBaseDirectory(data.buildDirectory());
QString command = QLatin1String("qbs install "); QString command = QLatin1String("qbs install ");
command += QString::fromLatin1("--settings-dir ")
+ QDir::toNativeSeparators(Core::ICore::userResourcePath()) + QLatin1String(" ");
if (m_step->dryRun()) if (m_step->dryRun())
command += QLatin1String("--dry-run "); command += QLatin1String("--dry-run ");
if (m_step->keepGoing()) if (m_step->keepGoing())

View File

@@ -362,6 +362,12 @@ void QbsProject::buildConfigurationChanged(BuildConfiguration *bc)
void QbsProject::startParsing() void QbsProject::startParsing()
{ {
// Qbs does update the build graph during the build. So we cannot
// start to parse while a build is running or we will lose information.
// Just return since the qbsbuildstep will trigger a reparse after the build.
if (ProjectExplorer::BuildManager::isBuilding(this))
return;
parseCurrentBuildConfiguration(false); parseCurrentBuildConfiguration(false);
} }
@@ -383,12 +389,6 @@ void QbsProject::parseCurrentBuildConfiguration(bool force)
if (!m_forceParsing) if (!m_forceParsing)
m_forceParsing = force; m_forceParsing = force;
// Qbs does update the build graph during the build. So we cannot
// start to parse while a build is running or we will lose information.
// Just return since the qbsbuildstep will trigger a reparse after the build.
if (ProjectExplorer::BuildManager::isBuilding(this))
return;
if (!activeTarget()) if (!activeTarget())
return; return;
QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration()); QbsBuildConfiguration *bc = qobject_cast<QbsBuildConfiguration *>(activeTarget()->activeBuildConfiguration());
@@ -727,7 +727,7 @@ QString QbsProject::pluginsBaseDirectory() const
if (!qbsInstallDir.isEmpty()) if (!qbsInstallDir.isEmpty())
return qbsInstallDir + QLatin1String("/lib/"); return qbsInstallDir + QLatin1String("/lib/");
return QDir::cleanPath(QCoreApplication::applicationDirPath() return QDir::cleanPath(QCoreApplication::applicationDirPath()
+ QLatin1String("/../lib/qtcreator")); + QLatin1String("/../" IDE_LIBRARY_BASENAME "/qtcreator"));
} }
} // namespace Internal } // namespace Internal

View File

@@ -476,8 +476,14 @@ void QbsProjectManagerPlugin::buildProducts(QbsProject *project, const QStringLi
void QbsProjectManagerPlugin::reparseCurrentProject() void QbsProjectManagerPlugin::reparseCurrentProject()
{ {
if (m_currentProject) if (!m_currentProject || BuildManager::isBuilding(m_currentProject)) {
m_currentProject->parseCurrentBuildConfiguration(true); // Qbs does update the build graph during the build. So we cannot
// start to parse while a build is running or we will lose information.
// Just return since the qbsbuildstep will trigger a reparse after the build.
return;
}
m_currentProject->parseCurrentBuildConfiguration(true);
} }
} // namespace Internal } // namespace Internal

View File

@@ -141,6 +141,9 @@ void QbsRunConfiguration::ctor()
connect(target(), SIGNAL(activeDeployConfigurationChanged(ProjectExplorer::DeployConfiguration*)), connect(target(), SIGNAL(activeDeployConfigurationChanged(ProjectExplorer::DeployConfiguration*)),
this, SLOT(installStepChanged())); this, SLOT(installStepChanged()));
installStepChanged(); installStepChanged();
if (isConsoleApplication())
m_runMode = Console;
} }
QWidget *QbsRunConfiguration::createConfigurationWidget() QWidget *QbsRunConfiguration::createConfigurationWidget()
@@ -206,13 +209,10 @@ QString QbsRunConfiguration::executable() const
ProjectExplorer::LocalApplicationRunConfiguration::RunMode QbsRunConfiguration::runMode() const ProjectExplorer::LocalApplicationRunConfiguration::RunMode QbsRunConfiguration::runMode() const
{ {
if (forcedGuiMode())
return LocalApplicationRunConfiguration::Gui;
return m_runMode; return m_runMode;
} }
bool QbsRunConfiguration::forcedGuiMode() const bool QbsRunConfiguration::isConsoleApplication() const
{ {
QbsProject *pro = static_cast<QbsProject *>(target()->project()); QbsProject *pro = static_cast<QbsProject *>(target()->project());
const qbs::ProductData product = findProduct(pro->qbsProjectData(), m_qbsProduct); const qbs::ProductData product = findProduct(pro->qbsProjectData(), m_qbsProduct);
@@ -358,6 +358,7 @@ QbsRunConfigurationWidget::QbsRunConfigurationWidget(QbsRunConfiguration *rc, QW
m_executableLineEdit = new QLineEdit(this); m_executableLineEdit = new QLineEdit(this);
m_executableLineEdit->setEnabled(false); m_executableLineEdit->setEnabled(false);
m_executableLineEdit->setPlaceholderText(tr("<unknown>"));
toplayout->addRow(tr("Executable:"), m_executableLineEdit); toplayout->addRow(tr("Executable:"), m_executableLineEdit);
QLabel *argumentsLabel = new QLabel(tr("Arguments:"), this); QLabel *argumentsLabel = new QLabel(tr("Arguments:"), this);
@@ -388,8 +389,6 @@ QbsRunConfigurationWidget::QbsRunConfigurationWidget(QbsRunConfiguration *rc, QW
QHBoxLayout *innerBox = new QHBoxLayout(); QHBoxLayout *innerBox = new QHBoxLayout();
m_useTerminalCheck = new QCheckBox(tr("Run in terminal"), this); m_useTerminalCheck = new QCheckBox(tr("Run in terminal"), this);
m_useTerminalCheck->setChecked(m_rc->runMode() == ProjectExplorer::LocalApplicationRunConfiguration::Console);
m_useTerminalCheck->setVisible(!m_rc->forcedGuiMode());
innerBox->addWidget(m_useTerminalCheck); innerBox->addWidget(m_useTerminalCheck);
innerBox->addStretch(); innerBox->addStretch();
@@ -436,6 +435,8 @@ void QbsRunConfigurationWidget::runConfigurationEnabledChange()
m_disabledIcon->setVisible(!enabled); m_disabledIcon->setVisible(!enabled);
m_disabledReason->setVisible(!enabled); m_disabledReason->setVisible(!enabled);
m_disabledReason->setText(m_rc->disabledReason()); m_disabledReason->setText(m_rc->disabledReason());
m_useTerminalCheck->setChecked(m_rc->runMode() == ProjectExplorer::LocalApplicationRunConfiguration::Console);
targetInformationHasChanged(); targetInformationHasChanged();
} }
@@ -495,10 +496,8 @@ void QbsRunConfigurationWidget::commandLineArgumentsChanged(const QString &args)
void QbsRunConfigurationWidget::runModeChanged(ProjectExplorer::LocalApplicationRunConfiguration::RunMode runMode) void QbsRunConfigurationWidget::runModeChanged(ProjectExplorer::LocalApplicationRunConfiguration::RunMode runMode)
{ {
if (!m_ignoreChange) { if (!m_ignoreChange)
m_useTerminalCheck->setVisible(!m_rc->forcedGuiMode());
m_useTerminalCheck->setChecked(runMode == ProjectExplorer::LocalApplicationRunConfiguration::Console); m_useTerminalCheck->setChecked(runMode == ProjectExplorer::LocalApplicationRunConfiguration::Console);
}
} }
// -------------------------------------------------------------------- // --------------------------------------------------------------------
@@ -564,10 +563,11 @@ QList<Core::Id> QbsRunConfigurationFactory::availableCreationIds(ProjectExplorer
if (!project || !project->qbsProject().isValid()) if (!project || !project->qbsProject().isValid())
return result; return result;
foreach (const qbs::ProductData &product, project->qbsProjectData().allProducts()) { // Create one RC per product. There is no information on what those products actually
if (!project->qbsProject().targetExecutable(product, qbs::InstallOptions()).isEmpty()) // are or whether they are going to get installed before a project is built.
result << Core::Id::fromString(QString::fromLatin1(QBS_RC_PREFIX) + product.name()); foreach (const qbs::ProductData &product, project->qbsProjectData().allProducts())
} result << Core::Id::fromString(QString::fromLatin1(QBS_RC_PREFIX) + product.name());
return result; return result;
} }

View File

@@ -78,7 +78,6 @@ public:
QString executable() const; QString executable() const;
RunMode runMode() const; RunMode runMode() const;
bool forcedGuiMode() const;
QString workingDirectory() const; QString workingDirectory() const;
QString commandLineArguments() const; QString commandLineArguments() const;
@@ -91,6 +90,7 @@ public:
void addToBaseEnvironment(Utils::Environment &env) const; void addToBaseEnvironment(Utils::Environment &env) const;
QString qbsProduct() const; QString qbsProduct() const;
bool isConsoleApplication() const;
signals: signals:
void commandLineArgumentsChanged(const QString&); void commandLineArgumentsChanged(const QString&);

View File

@@ -12,6 +12,7 @@ QTC_PLUGIN_DEPENDS += \
INCLUDEPATH *= \ INCLUDEPATH *= \
$$PWD \ $$PWD \
$$PWD/../../../share/qtcreator/qml/qmlpuppet/interfaces \ $$PWD/../../../share/qtcreator/qml/qmlpuppet/interfaces \
$$PWD/../../../share/qtcreator/qml/qmlpuppet/types \
$$PWD/designercore \ $$PWD/designercore \
$$PWD/designercore/include \ $$PWD/designercore/include \
$$PWD/components/componentcore \ $$PWD/components/componentcore \

View File

@@ -37,7 +37,7 @@
#include <qmljs/qmljsdocument.h> #include <qmljs/qmljsdocument.h>
#include <qmljs/qmljspropertyreader.h> #include <qmljs/qmljspropertyreader.h>
#include <qmljs/qmljsrewriter.h> #include <qmljs/qmljsrewriter.h>
#include <qmljs/qmljsindenter.h> #include <qmljstools/qmljsindenter.h>
#include <qmljs/qmljscontext.h> #include <qmljs/qmljscontext.h>
#include <qmljs/qmljsbind.h> #include <qmljs/qmljsbind.h>
#include <qmljs/qmljsscopebuilder.h> #include <qmljs/qmljsscopebuilder.h>
@@ -327,24 +327,7 @@ void QuickToolBar::setProperty(const QString &propertyName, const QVariant &valu
m_editor->convertPosition(changeSetPos, &line, &column); //get line m_editor->convertPosition(changeSetPos, &line, &column); //get line
m_editor->convertPosition(changeSetPos + changeSetLength, &endLine, &column); //get line m_editor->convertPosition(changeSetPos + changeSetLength, &endLine, &column); //get line
if (line > 0) { indentLines(line, endLine);
TextEditor::TabSettings ts = m_editor->baseTextDocument()->tabSettings();
QmlJSIndenter indenter;
indenter.setTabSize(ts.m_tabSize);
indenter.setIndentSize(ts.m_indentSize);
for (int i=line;i<=endLine;i++) {
QTextBlock start = m_editor->baseTextDocument()->document()->findBlockByNumber(i);
QTextBlock end = m_editor->baseTextDocument()->document()->findBlockByNumber(i);
if (end.isValid()) {
const int indent = indenter.indentForBottomLine(m_editor->baseTextDocument()
->document()->begin(),
end.next(), QChar::Null);
ts.indentLine(start, indent);
}
}
}
tc.endEditBlock(); tc.endEditBlock();
} }
} }
@@ -439,6 +422,21 @@ void QuickToolBar::onEnabledChanged(bool b)
settings.set(); settings.set();
} }
void QuickToolBar::indentLines(int startLine, int endLine)
{
if (startLine > 0) {
TextEditor::TabSettings tabSettings = m_editor->baseTextDocument()->tabSettings();
for (int i = startLine; i <= endLine; i++) {
QTextBlock start = m_editor->editorWidget()->document()->findBlockByNumber(i);
if (start.isValid()) {
QmlJSEditor::Internal::Indenter indenterMy;
indenterMy.indentBlock(m_editor->editorWidget()->document(), start, QChar::Null, tabSettings);
}
}
}
}
ContextPaneWidget* QuickToolBar::contextWidget() ContextPaneWidget* QuickToolBar::contextWidget()
{ {
if (m_widget.isNull()) { //lazily recreate widget if (m_widget.isNull()) { //lazily recreate widget

View File

@@ -62,6 +62,8 @@ public slots:
void onEnabledChanged(bool); void onEnabledChanged(bool);
private: private:
void indentLines(int startLine, int endLine);
QmlEditorWidgets::ContextPaneWidget* contextWidget(); QmlEditorWidgets::ContextPaneWidget* contextWidget();
QPointer<QmlEditorWidgets::ContextPaneWidget> m_widget; QPointer<QmlEditorWidgets::ContextPaneWidget> m_widget;
QmlJS::Document::Ptr m_doc; QmlJS::Document::Ptr m_doc;

View File

@@ -146,8 +146,8 @@ void BlackBerryCheckDeviceStatusStep::checkDeviceInfo(int status)
} }
bool ok = true; bool ok = true;
if (deviceRuntimeVersion.toString() != apiLevelVersion.toString()) { if (apiLevelVersion > deviceRuntimeVersion) {
raiseError(tr("The device runtime version (%1) does not match API level version (%2)") raiseError(tr("The device runtime version (%1) is inferior to the API level version (%2)")
.arg(deviceRuntimeVersion.toString(), apiLevelVersion.toString())); .arg(deviceRuntimeVersion.toString(), apiLevelVersion.toString()));
QMetaObject::invokeMethod(this, "handleVersionMismatch", Qt::BlockingQueuedConnection, QMetaObject::invokeMethod(this, "handleVersionMismatch", Qt::BlockingQueuedConnection,

View File

@@ -19,7 +19,7 @@
<item> <item>
<widget class="QRadioButton" name="apiLevelButton"> <widget class="QRadioButton" name="apiLevelButton">
<property name="text"> <property name="text">
<string>Install Api Level</string> <string>Install API Level</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -398,23 +398,23 @@ BlackBerryInstallWizardProcessPage::~BlackBerryInstallWizardProcessPage()
delete m_ui; delete m_ui;
} }
void BlackBerryInstallWizardProcessPage::initializePage() static QString msgTarget(BlackBerryInstallerDataHandler::Target t)
{ {
QString target; switch (t) {
switch (m_data.installTarget) {
case BlackBerryInstallerDataHandler::ApiLevel: case BlackBerryInstallerDataHandler::ApiLevel:
target = tr("API level version: "); return BlackBerryInstallWizardProcessPage::tr("API level");
break;
case BlackBerryInstallerDataHandler::Simulator: case BlackBerryInstallerDataHandler::Simulator:
target = tr("simulator version: "); return BlackBerryInstallWizardProcessPage::tr("simulator");
break;
case BlackBerryInstallerDataHandler::Runtime: case BlackBerryInstallerDataHandler::Runtime:
target = tr("runtime version: "); return BlackBerryInstallWizardProcessPage::tr("runtime");
break;
default: default:
break; break;
} }
return QString();
}
void BlackBerryInstallWizardProcessPage::initializePage()
{
if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) { if (m_data.mode == BlackBerryInstallerDataHandler::UninstallMode) {
if (m_data.version.isEmpty()) { if (m_data.version.isEmpty()) {
wizard()->next(); wizard()->next();
@@ -429,9 +429,11 @@ void BlackBerryInstallWizardProcessPage::initializePage()
} }
} }
m_ui->label->setText(tr("Uninstalling ") + target + m_data.version); m_ui->label->setText(tr("Uninstalling %1 version: %2")
.arg(msgTarget(m_data.installTarget), m_data.version));
} else { } else {
m_ui->label->setText(tr("Installing ") + target + m_data.version); m_ui->label->setText(tr("Installing %1 version: %2")
.arg(msgTarget(m_data.installTarget), m_data.version));
} }
// m_targetProcess could be running // m_targetProcess could be running
if (m_targetProcess->state() == QProcess::Running) { if (m_targetProcess->state() == QProcess::Running) {
@@ -542,30 +544,17 @@ void BlackBerryInstallWizardFinalPage::initializePage()
} }
QString message; QString message;
QString target; const QString target = msgTarget(m_data.installTarget);
switch (m_data.installTarget) {
case BlackBerryInstallerDataHandler::ApiLevel:
target = tr("API level version: ");
break;
case BlackBerryInstallerDataHandler::Simulator:
target = tr("simulator version: ");
break;
case BlackBerryInstallerDataHandler::Runtime:
target = tr("runtime version: ");
break;
default:
break;
}
if (m_data.exitCode == 0 && m_data.exitStatus == QProcess::NormalExit) { if (m_data.exitCode == 0 && m_data.exitStatus == QProcess::NormalExit) {
message = m_data.mode == BlackBerryInstallerDataHandler::UninstallMode ? message = m_data.mode == BlackBerryInstallerDataHandler::UninstallMode ?
tr("Finished uninstalling %1:\n %2").arg(target, m_data.version) : tr("Finished uninstalling %1 version:\n %2").arg(target, m_data.version) :
tr("Finished installing %1:\n %2").arg(target, m_data.version); tr("Finished installing %1 version:\n %2").arg(target, m_data.version);
emit done(); emit done();
} else { } else {
message = m_data.mode == BlackBerryInstallerDataHandler::UninstallMode ? message = m_data.mode == BlackBerryInstallerDataHandler::UninstallMode ?
tr("An error has occurred while uninstalling %1:\n %2").arg(target, m_data.version) : tr("An error has occurred while uninstalling %1 version:\n %2").arg(target, m_data.version) :
tr("An error has occurred while installing %1:\n %2").arg(target, m_data.version); tr("An error has occurred while installing %1 version:\n %2").arg(target, m_data.version);
} }
label->setText(message); label->setText(message);
} }

View File

@@ -338,7 +338,7 @@ void BlackBerryKeysWidget::requestFinished(int status)
default: default:
m_utils.clearCertificatePassword(); m_utils.clearCertificatePassword();
m_utils.clearCskPassword(); m_utils.clearCskPassword();
errorString += tr("An unknwon error has occurred."); errorString += tr("An unknown error has occurred.");
break; break;
} }

View File

@@ -73,7 +73,7 @@ BlackBerryNDKSettingsWidget::BlackBerryNDKSettingsWidget(QWidget *parent) :
m_ui->ndksTreeWidget->setColumnCount(1); m_ui->ndksTreeWidget->setColumnCount(1);
m_apiLevels = new QTreeWidgetItem(m_ui->ndksTreeWidget); m_apiLevels = new QTreeWidgetItem(m_ui->ndksTreeWidget);
m_apiLevels->setText(0, tr("Api Levels")); m_apiLevels->setText(0, tr("API Levels"));
m_runtimes = new QTreeWidgetItem(m_ui->ndksTreeWidget); m_runtimes = new QTreeWidgetItem(m_ui->ndksTreeWidget);
m_runtimes->setText(0, tr("Runtimes")); m_runtimes->setText(0, tr("Runtimes"));
@@ -181,7 +181,7 @@ void BlackBerryNDKSettingsWidget::updateConfigurationList()
item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon); item->setIcon(0, config->isValid() ? QIcon() : invalidConfigIcon);
// TODO: Do the same if qmake, qcc, debugger are no longer detected... // TODO: Do the same if qmake, qcc, debugger are no longer detected...
if (!config->isValid()) { if (!config->isValid()) {
QString toolTip = tr("Invalid target %1: ").arg(config->targetName()); QString toolTip = tr("Invalid target %1:").arg(config->targetName());
if (config->isAutoDetected() && !config->autoDetectionSource().toFileInfo().exists()) if (config->isAutoDetected() && !config->autoDetectionSource().toFileInfo().exists())
toolTip += QLatin1Char('\n') + tr("- Target no longer installed."); toolTip += QLatin1Char('\n') + tr("- Target no longer installed.");
@@ -322,7 +322,7 @@ void BlackBerryNDKSettingsWidget::updateUi(QTreeWidgetItem *item)
item->setFont(0, font); item->setFont(0, font);
m_ui->activateNdkTargetButton->setEnabled(!contains); m_ui->activateNdkTargetButton->setEnabled(!contains);
m_ui->deactivateNdkTargetButton->setEnabled(contains && m_activatedApiLevel.size() > 1); m_ui->deactivateNdkTargetButton->setEnabled(contains);
// Disable remove button for auto detected pre-10.2 NDKs (uninstall wizard doesn't handle them) // Disable remove button for auto detected pre-10.2 NDKs (uninstall wizard doesn't handle them)
m_ui->removeConfigButton->setEnabled(!(config->isAutoDetected() m_ui->removeConfigButton->setEnabled(!(config->isAutoDetected()
&& QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty())); && QnxUtils::sdkInstallerPath(config->ndkPath()).isEmpty()));

View File

@@ -35,6 +35,7 @@
#include <QVariantMap> #include <QVariantMap>
#include <QFileInfo> #include <QFileInfo>
#include <QCoreApplication>
namespace Qnx { namespace Qnx {
namespace Internal { namespace Internal {
@@ -54,7 +55,7 @@ BlackBerryRuntimeConfiguration::BlackBerryRuntimeConfiguration(
m_version = BlackBerryVersionNumber::fromFileName(QFileInfo(path).baseName(), m_version = BlackBerryVersionNumber::fromFileName(QFileInfo(path).baseName(),
QRegExp(QLatin1String("^runtime_(.*)$"))); QRegExp(QLatin1String("^runtime_(.*)$")));
m_displayName = QObject::tr("Runtime ") + m_version.toString(); m_displayName = QCoreApplication::translate("Qnx::Internal::BlackBerryRuntimeConfiguration", "Runtime %1").arg(m_version.toString());
} }
BlackBerryRuntimeConfiguration::BlackBerryRuntimeConfiguration(const QVariantMap &data) BlackBerryRuntimeConfiguration::BlackBerryRuntimeConfiguration(const QVariantMap &data)

View File

@@ -314,10 +314,11 @@ void AbstractRemoteLinuxDeployService::handleConnectionFailure()
break; break;
case Connecting: { case Connecting: {
QString errorMsg = tr("Could not connect to host: %1").arg(d->connection->errorString()); QString errorMsg = tr("Could not connect to host: %1").arg(d->connection->errorString());
errorMsg += QLatin1Char('\n');
if (deviceConfiguration()->machineType() == IDevice::Emulator) if (deviceConfiguration()->machineType() == IDevice::Emulator)
errorMsg += tr("\nDid the emulator fail to start?"); errorMsg += tr("Did the emulator fail to start?");
else else
errorMsg += tr("\nIs the device connected and set up for network access?"); errorMsg += tr("Is the device connected and set up for network access?");
emit errorMessage(errorMsg); emit errorMessage(errorMsg);
setFinished(); setFinished();
break; break;

View File

@@ -101,7 +101,7 @@ void RemoteLinuxEnvironmentReader::remoteProcessFinished()
const QString remoteStderr const QString remoteStderr
= QString::fromUtf8(m_deviceProcess->readAllStandardError()).trimmed(); = QString::fromUtf8(m_deviceProcess->readAllStandardError()).trimmed();
if (!remoteStderr.isEmpty()) if (!remoteStderr.isEmpty())
errorMessage += tr("\nRemote stderr was: '%1'").arg(remoteStderr); errorMessage += QLatin1Char('\n') + tr("Remote stderr was: \"%1\"").arg(remoteStderr);
emit error(errorMessage); emit error(errorMessage);
} else { } else {
QString remoteOutput = QString::fromUtf8(m_deviceProcess->readAllStandardOutput()); QString remoteOutput = QString::fromUtf8(m_deviceProcess->readAllStandardOutput());

View File

@@ -73,7 +73,7 @@ CodecSelector::CodecSelector(QWidget *parent, BaseTextDocument *doc)
m_label = new QLabel(this); m_label = new QLabel(this);
QString decodingErrorHint; QString decodingErrorHint;
if (m_hasDecodingError) if (m_hasDecodingError)
decodingErrorHint = tr("\nThe following encodings are likely to fit:"); decodingErrorHint = QLatin1Char('\n') + tr("The following encodings are likely to fit:");
m_label->setText(tr("Select encoding for \"%1\".%2").arg(QFileInfo(doc->filePath()).fileName()).arg(decodingErrorHint)); m_label->setText(tr("Select encoding for \"%1\".%2").arg(QFileInfo(doc->filePath()).fileName()).arg(decodingErrorHint));
m_listWidget = new CodecListWidget(this); m_listWidget = new CodecListWidget(this);

View File

@@ -467,7 +467,7 @@ void Manager::downloadDefinitionsFinished()
else else
text = tr("Error downloading one or more definitions."); text = tr("Error downloading one or more definitions.");
if (writeError) if (writeError)
text.append(tr("\nPlease check the directory's access rights.")); text.append(QLatin1Char('\n') + tr("Please check the directory's access rights."));
QMessageBox::critical(0, tr("Download Error"), text); QMessageBox::critical(0, tr("Download Error"), text);
} }

View File

@@ -303,6 +303,7 @@ static QString wrappedText(const QTextEdit *e)
const QString block = cursor.block().text(); const QString block = cursor.block().text();
if (block.startsWith(QLatin1Char('\t'))) { // Don't wrap if (block.startsWith(QLatin1Char('\t'))) { // Don't wrap
rc += block + newLine; rc += block + newLine;
cursor.movePosition(QTextCursor::EndOfBlock);
} else { } else {
forever { forever {
cursor.select(QTextCursor::LineUnderCursor); cursor.select(QTextCursor::LineUnderCursor);

View File

@@ -27,7 +27,7 @@ Project {
property path libRPaths: qbs.targetOS.contains("osx") property path libRPaths: qbs.targetOS.contains("osx")
? ["@loader_path/.."] : ["$ORIGIN/.."] ? ["@loader_path/.."] : ["$ORIGIN/.."]
property path resourcesInstallDir: project.ide_data_path + "/qbs" property path resourcesInstallDir: project.ide_data_path + "/qbs"
property string pluginsInstallDir: "lib/qtcreator" property string pluginsInstallDir: project.libDirName + "/qtcreator"
references: [ references: [
qbsBaseDir + "/src/lib/libs.qbs", qbsBaseDir + "/src/lib/libs.qbs",

View File

@@ -21,7 +21,8 @@ CppApplication {
// absolute paths to resources in the build directory. // absolute paths to resources in the build directory.
// cpp.rpaths: qbs.targetOS.contains("osx") // cpp.rpaths: qbs.targetOS.contains("osx")
// ? ["@executable_path/.."] // ? ["@executable_path/.."]
// : ["$ORIGIN/../lib/qtcreator", "$ORIGIN/../lib/qtcreator/plugins/QtProject"] // : ["$ORIGIN/../" + project.libDirName + "/qtcreator",
// "$ORIGIN/../" project.libDirName + "/qtcreator/plugins/QtProject"]
// Group { // Group {
// fileTagsFilter: product.type // fileTagsFilter: product.type
// qbs.install: true // qbs.install: true

View File

@@ -11,8 +11,8 @@ DynamicLibrary {
targetName: QtcFunctions.qtLibraryName(qbs, name.split('_')[1]) targetName: QtcFunctions.qtLibraryName(qbs, name.split('_')[1])
destinationDirectory: FileInfo.relativePath(project.ide_source_tree, sourceDirectory) destinationDirectory: FileInfo.relativePath(project.ide_source_tree, sourceDirectory)
cpp.rpaths: [ cpp.rpaths: [
buildDirectory + "/lib/qtcreator", buildDirectory + "/" + project.libDirName + "/qtcreator",
buildDirectory + "/lib/qtcreator/plugins/QtProject" buildDirectory + "/" + project.libDirName + "/qtcreator/plugins/QtProject"
].concat(additionalRPaths) ].concat(additionalRPaths)
property pathList filesToCopy property pathList filesToCopy
property pathList additionalRPaths: [] property pathList additionalRPaths: []

View File

@@ -126,10 +126,16 @@ def removeOldBreakpoints():
# param expectedBPOrder holds a list of dicts where the dicts contain always # param expectedBPOrder holds a list of dicts where the dicts contain always
# only 1 key:value pair - the key is the name of the file, the value is # only 1 key:value pair - the key is the name of the file, the value is
# line number where the debugger should stop # line number where the debugger should stop
def doSimpleDebugging(kitCount, currentKit, currentConfigName, pressContinueCount=1, expectedBPOrder=[]): def doSimpleDebugging(kitCount, currentKit, currentConfigName, pressContinueCount=1,
expectedBPOrder=[], enableQml=True):
expectedLabelTexts = ['Stopped\.', 'Stopped at breakpoint \d+ \(\d+\) in thread \d+\.'] expectedLabelTexts = ['Stopped\.', 'Stopped at breakpoint \d+ \(\d+\) in thread \d+\.']
if len(expectedBPOrder) == 0: if len(expectedBPOrder) == 0:
expectedLabelTexts.append("Running\.") expectedLabelTexts.append("Running\.")
switchViewTo(ViewConstants.PROJECTS)
switchToBuildOrRunSettingsFor(kitCount, currentKit, ProjectSettings.RUN)
ensureChecked(waitForObject("{container=':Qt Creator.scrollArea_QScrollArea' text='Enable QML' "
"type='QCheckBox' unnamed='1' visible='1'}"), enableQml)
switchViewTo(ViewConstants.EDIT)
if not __startDebugger__(kitCount, currentKit, currentConfigName): if not __startDebugger__(kitCount, currentKit, currentConfigName):
return False return False
statusLabel = findObject(":Debugger Toolbar.StatusText_Utils::StatusLabel") statusLabel = findObject(":Debugger Toolbar.StatusText_Utils::StatusLabel")

View File

@@ -73,7 +73,7 @@ def main():
continue continue
allowAppThroughWinFW(workingDir, projectName, False) allowAppThroughWinFW(workingDir, projectName, False)
if not doSimpleDebugging(len(checkedTargets), kit, config, if not doSimpleDebugging(len(checkedTargets), kit, config,
2, expectedBreakpointsOrder): len(expectedBreakpointsOrder), expectedBreakpointsOrder):
try: try:
stopB = findObject(':Qt Creator.Stop_QToolButton') stopB = findObject(':Qt Creator.Stop_QToolButton')
if stopB.enabled: if stopB.enabled:
@@ -85,6 +85,12 @@ def main():
ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton") ensureChecked(":Qt Creator_AppOutput_Core::Internal::OutputPaneToggleButton")
clickButton(waitForObject("{type='CloseButton' unnamed='1' visible='1' " clickButton(waitForObject("{type='CloseButton' unnamed='1' visible='1' "
"window=':Qt Creator_Core::Internal::MainWindow'}")) "window=':Qt Creator_Core::Internal::MainWindow'}"))
if platform.system() == 'Darwin' and JIRA.isBugStillOpen(11595):
try:
expectedBreakpointsOrder.remove({os.path.join(workingDir, projectName, "main.cpp"):10})
test.warning("Removed cpp file after first run. (QTCREATORBUG-11595)")
except:
pass
else: else:
test.fatal("Setting breakpoints failed - leaving without testing.") test.fatal("Setting breakpoints failed - leaving without testing.")
invokeMenuItem("File", "Exit") invokeMenuItem("File", "Exit")

View File

@@ -227,6 +227,7 @@ def __getExpectedDebuggers__():
def __getCDB__(): def __getCDB__():
result = [] result = []
possibleLocations = ["C:\\Program Files\\Debugging Tools for Windows (x64)", possibleLocations = ["C:\\Program Files\\Debugging Tools for Windows (x64)",
"C:\\Program Files (x86)\\Debugging Tools for Windows (x86)",
"C:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x86", "C:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x86",
"C:\\Program Files\\Windows Kits\\8.0\\Debuggers\\x86", "C:\\Program Files\\Windows Kits\\8.0\\Debuggers\\x86",
"C:\\Program Files (x86)\\Windows Kits\\8.1\\Debuggers\\x86", "C:\\Program Files (x86)\\Windows Kits\\8.1\\Debuggers\\x86",