Merge remote-tracking branch 'origin/3.1'
Conflicts: qtcreator.pri qtcreator.qbs Change-Id: I5b27eba0a9536d3e6867577ebf2b59d58a13b827
118
dist/changes-3.1.0
vendored
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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="What’s 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>
|
||||||
|
|||||||
|
After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 9.1 KiB |
BIN
share/qtcreator/welcomescreen/widgets/images/icons/ddays13.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
@@ -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")))
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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*)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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&);
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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: []
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||