diff --git a/dist/changes-4.2.2.md b/dist/changes-4.2.2.md index 842274a885f..89325072e59 100644 --- a/dist/changes-4.2.2.md +++ b/dist/changes-4.2.2.md @@ -7,6 +7,14 @@ you can check out from the public Git repository. For example: git clone git://code.qt.io/qt-creator/qt-creator.git git log --cherry-pick --pretty=oneline v4.2.1..v4.2.2 +All Projects + +* Fixed available kits after selecting Qt 5.8 as minimal required version + in wizard (QTCREATORBUG-17574) +* Fixed that `Run in terminal` was sometimes ignored (QTCREATORBUG-17608) +* Fixed that `This file is not part of any project` was shown in editor after + adding new file to project (QTCREATORBUG-17743) + Qt Support * Fixed ABI detection of static Qt builds @@ -14,6 +22,18 @@ Qt Support Qbs Projects * Fixed duplicate include paths (QTCREATORBUG-17381) +* Fixed that generated object files where shown in Locator and Advanced Search + (QTCREATORBUG-17382) + +C++ Support + +* Fixed that inline namespaces were used in generated code (QTCREATORBUG-16086) + +Debugging + +* GDB + * Fixed performance regression when resolving enum names + (QTCREATORBUG-17598) Version Control Systems @@ -23,3 +43,20 @@ Version Control Systems when using `git grep` * Fixed discarding changes before performing other actions (such as Pull) (QTCREATORBUG-17156) + +Platform Specific + +Android + +* Fixed that installing package with lower version number than already installed + package silently failed (QTCREATORBUG-17789) +* Fixed crash when re-running application after stopping it (QTCREATORBUG-17691) + +iOS + +* Fixed running applications on devices with iOS 10.1 and later + (QTCREATORBUG-17818) + +BareMetal + +* Fixed debugging with OpenOCD in TCP/IP mode on Windows (QTCREATORBUG-17765) diff --git a/doc/config/qt-defines.qdocconf b/doc/config/qt-defines.qdocconf index cde37a1c03f..b8daa054972 100644 --- a/doc/config/qt-defines.qdocconf +++ b/doc/config/qt-defines.qdocconf @@ -10,7 +10,6 @@ defines = Q_QDOC \ Q_BYTE_ORDER \ QT_DEPRECATED \ Q_NO_USING_KEYWORD \ - __cplusplus \ - $QTC_LICENSE_TYPE + __cplusplus versionsym = QT_VERSION_STR diff --git a/doc/config/qtcreator-developer.qdocconf b/doc/config/qtcreator-developer.qdocconf index c674b129d15..8f251a0d03f 100644 --- a/doc/config/qtcreator-developer.qdocconf +++ b/doc/config/qtcreator-developer.qdocconf @@ -38,27 +38,26 @@ sourcedirs = . \ headers.fileextensions = "*.h" sources.fileextensions = "*.cpp *.qdoc" -imagedirs = $SRCDIR/api/images $SRCDIR/images $SRCDIR/templates/images -outputdir = $OUTDIR -exampledirs = $SRCDIR/api/examples +imagedirs = ../api/images ../images ../templates/images +exampledirs = ../api/examples -indexes += $QDOC_INDEX_DIR/qtwidgets/qtwidgets.index \ - $QDOC_INDEX_DIR/qtcore/qtcore.index \ - $QDOC_INDEX_DIR/qtqml/qtqml.index \ - $QDOC_INDEX_DIR/qtquick/qtquick.index \ - $QDOC_INDEX_DIR/qmake/qmake.index \ - $QDOC_INDEX_DIR/qtdesigner/qtdesigner.index \ - $QDOC_INDEX_DIR/qtdoc/qtdoc.index \ - $QDOC_INDEX_DIR/qtgui/qtgui.index \ - $QDOC_INDEX_DIR/qthelp/qthelp.index \ - $QDOC_INDEX_DIR/qtquickcontrols/qtquickcontrols.index \ - $QDOC_INDEX_DIR/qtquicklayouts/qtquicklayouts.index \ - $QDOC_INDEX_DIR/qtlinguist/qtlinguist.index \ - $QDOC_INDEX_DIR/qtscript/qtscript.index \ - $QDOC_INDEX_DIR/qtsensors/qtsensors.index \ - $QDOC_INDEX_DIR/qtuitools/qtuitools.index \ - $QDOC_INDEX_DIR/qtwebkit/qtwebkit.index \ - $QDOC_INDEX_DIR/qtxml/qtxml.index +depends += qtwidgets \ + qtcore \ + qtqml \ + qtquick \ + qmake \ + qtdesigner \ + qtdoc \ + qtgui \ + qthelp \ + qtquickcontrols \ + qtquicklayouts \ + qtlinguist \ + qtscript \ + qtsensors \ + qtuitools \ + qtwebkit \ + qtxml include(macros.qdocconf) include(qt-cpp-ignore.qdocconf) diff --git a/doc/config/qtcreator-project.qdocconf b/doc/config/qtcreator-project.qdocconf index 947a500950d..f439b3a7b6c 100644 --- a/doc/config/qtcreator-project.qdocconf +++ b/doc/config/qtcreator-project.qdocconf @@ -3,51 +3,49 @@ description = "Qt Creator Manual" url = http://doc.qt.io/qtcreator headerdirs = -sourcedirs = $SRCDIR/src -imagedirs = $SRCDIR/images \ - $SRCDIR/templates/images \ - $SRCDIR/../src/libs/qmleditorwidgets/images \ - $SRCDIR/../src/libs/utils/images \ - $SRCDIR/../src/plugins/android/images \ - $SRCDIR/../src/plugins/autotest/images \ - $SRCDIR/../src/plugins/classview/images \ - $SRCDIR/../src/plugins/coreplugin/images \ - $SRCDIR/../src/plugins/debugger/images \ - $SRCDIR/../src/plugins/diffeditor/images \ - $SRCDIR/../src/plugins/help/images \ - $SRCDIR/../src/plugins/projectexplorer/images \ - $SRCDIR/../src/plugins/qmldesigner/components/formeditor \ - $SRCDIR/../src/plugins/qmldesigner/components/navigator \ - $SRCDIR/../src/plugins/scxmleditor/common/images \ - $SRCDIR/../src/plugins/texteditor/images +sourcedirs = ../src +imagedirs = ../images \ + ../templates/images \ + ../../src/libs/qmleditorwidgets/images \ + ../../src/libs/utils/images \ + ../../src/plugins/android/images \ + ../../src/plugins/autotest/images \ + ../../src/plugins/classview/images \ + ../../src/plugins/coreplugin/images \ + ../../src/plugins/debugger/images \ + ../../src/plugins/diffeditor/images \ + ../../src/plugins/help/images \ + ../../src/plugins/projectexplorer/images \ + ../../src/plugins/qmldesigner/components/formeditor \ + ../../src/plugins/qmldesigner/components/navigator \ + ../../src/plugins/scxmleditor/common/images \ + ../../src/plugins/texteditor/images -outputdir = $OUTDIR -exampledirs = $SRCDIR/examples +exampledirs = ../examples examples.fileextensions += *.qml *.svg HTML.extraimages = images/commercial.png qhp.QtCreator.extraFiles = images/commercial.png - -indexes += $QDOC_INDEX_DIR/qtwidgets/qtwidgets.index \ - $QDOC_INDEX_DIR/qtcore/qtcore.index \ - $QDOC_INDEX_DIR/qtqml/qtqml.index \ - $QDOC_INDEX_DIR/qtquick/qtquick.index \ - $QDOC_INDEX_DIR/qmake/qmake.index \ - $QDOC_INDEX_DIR/qtdesigner/qtdesigner.index \ - $QDOC_INDEX_DIR/qtdoc/qtdoc.index \ - $QDOC_INDEX_DIR/qtgui/qtgui.index \ - $QDOC_INDEX_DIR/qthelp/qthelp.index \ - $QDOC_INDEX_DIR/qtquickcontrols/qtquickcontrols.index \ - $QDOC_INDEX_DIR/qtquickcontrols2/qtquickcontrols2.index \ - $QDOC_INDEX_DIR/qtquickextras/qtquickextras.index \ - $QDOC_INDEX_DIR/qtlinguist/qtlinguist.index \ - $QDOC_INDEX_DIR/qtscript/qtscript.index \ - $QDOC_INDEX_DIR/qtscxml/qtscxml.index \ - $QDOC_INDEX_DIR/qtsensors/qtsensors.index \ - $QDOC_INDEX_DIR/qttestlib/qttestlib.index \ - $QDOC_INDEX_DIR/qtuitools/qtuitools.index \ - $QDOC_INDEX_DIR/qtxml/qtxml.index +depends += qtwidgets \ + qtcore \ + qtqml \ + qtquick \ + qmake \ + qtdesigner \ + qtdoc \ + qtgui \ + qthelp \ + qtquickcontrols \ + qtquickcontrols2 \ + qtquickextras \ + qtlinguist \ + qtscript \ + qtscxml \ + qtsensors \ + qttestlib \ + qtuitools \ + qtxml include(macros.qdocconf) include(qt-cpp-ignore.qdocconf) @@ -67,7 +65,7 @@ qhp.QtCreator.indexRoot = qhp.QtCreator.subprojects = manual qhp.QtCreator.subprojects.manual.title = Qt Creator Manual -qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator Manual +qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator TOC qhp.QtCreator.subprojects.manual.type = manual # Doxygen compatibility commands diff --git a/doc/doc.pri b/doc/doc.pri index 207788a0f17..1364a1a5381 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -1,89 +1,9 @@ -HELPGENERATOR = $$shell_path($$[QT_INSTALL_BINS]/qhelpgenerator) -platform minimal -QDOC_BIN = $$shell_path($$[QT_INSTALL_BINS]/qdoc) -QDOC_GLOBAL = QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS/src] QDOC_INDEX_DIR=$$[QT_INSTALL_DOCS] -COMPAT = +build_online_docs: \ + QTC_DOCS = $$PWD/qtcreator-online.qdocconf $$PWD/api/qtcreator-dev-online.qdocconf +else: \ + QTC_DOCS = $$PWD/qtcreator.qdocconf $$PWD/api/qtcreator-dev.qdocconf -VERSION_TAG = $$replace(QTCREATOR_VERSION, "[-.]", ) - -isEmpty(LICENSE_TYPE):LICENSE_TYPE=opensource - -# unset the installdir for qdoc, so we force generation -# of URLs for the links to the Qt documentation -QMAKE_DOCS_INSTALLDIR = - -defineReplace(cmdEnv) { - !equals(QMAKE_DIR_SEP, /): 1 ~= s,^(.*)$,(set \\1) &&,g - return("$$1") -} - -defineReplace(qdoc) { - return("$$cmdEnv(SRCDIR=$$PWD OUTDIR=$$1 QTC_VERSION=$$QTCREATOR_VERSION QTC_VERSION_TAG=$$VERSION_TAG QTC_LICENSE_TYPE=$$LICENSE_TYPE $$QDOC_GLOBAL) $$QDOC_BIN") -} - -QHP_FILE = $$OUT_PWD/doc/html/qtcreator.qhp -QCH_FILE = $$IDE_DOC_PATH/qtcreator.qch - -HELP_DEP_FILES = $$PWD/src/qtcreator.qdoc \ - $$PWD/config/macros.qdocconf \ - $$PWD/config/qt-cpp-ignore.qdocconf \ - $$PWD/config/qt-defines.qdocconf - -html_docs.commands = $$qdoc($$OUT_PWD/doc/html) $$PWD/qtcreator.qdocconf -html_docs.depends += $$HELP_DEP_FILES -html_docs.files = $$QHP_FILE - -html_docs_online.commands = $$qdoc($$OUT_PWD/doc/html) $$PWD/qtcreator-online.qdocconf -html_docs_online.depends += $$HELP_DEP_FILES - -qch_docs.commands = $$HELPGENERATOR -o \"$$QCH_FILE\" $$QHP_FILE -qch_docs.depends += html_docs - -DEV_QHP_FILE = $$OUT_PWD/doc/html-dev/qtcreator-dev.qhp -DEV_QCH_FILE = $$IDE_DOC_PATH/qtcreator-dev.qch - -DEV_HELP_DEP_FILES = \ - $$PWD/api/qtcreator-api.qdoc \ - $$PWD/api/coding-style.qdoc \ - $$PWD/api/external-tool-spec.qdoc \ - $$PWD/api/qtcreator-dev.qdoc \ - $$PWD/api/qtcreator-dev-wizards.qdoc \ - $$PWD/api/creating-plugins.qdoc \ - $$PWD/api/getting-and-building.qdoc \ - $$PWD/api/first-plugin.qdoc \ - $$PWD/api/plugin-metadata.qdoc \ - $$PWD/api/plugin-lifecycle.qdoc \ - $$PWD/api/pluginmanager.qdoc \ - $$PWD/api/qtcreator-documentation.qdoc \ - $$PWD/api/qtcreator-ui-text.qdoc \ - $$PWD/api/qtcreator-dev.qdocconf - -dev_html_docs.commands = $$qdoc($$OUT_PWD/doc/html-dev) $$PWD/api/qtcreator-dev.qdocconf -dev_html_docs.depends += $$DEV_HELP_DEP_FILES - -dev_html_docs_online.commands = $$qdoc($$OUT_PWD/doc/html-dev) $$PWD/api/qtcreator-dev-online.qdocconf -dev_html_docs_online.depends += $$DEV_HELP_DEP_FILES - -dev_qch_docs.commands = $$HELPGENERATOR -o \"$$DEV_QCH_FILE\" $$DEV_QHP_FILE -dev_qch_docs.depends += dev_html_docs - -inst_qch_docs.files = $$QCH_FILE -inst_qch_docs.path = $$INSTALL_DOC_PATH -inst_qch_docs.CONFIG += no_check_exist no_default_install -INSTALLS += inst_qch_docs - -inst_dev_qch_docs.files = $$DEV_QCH_FILE -inst_dev_qch_docs.path = $$INSTALL_DOC_PATH -inst_dev_qch_docs.CONFIG += no_check_exist no_default_install -INSTALLS += inst_dev_qch_docs - -install_docs.depends = install_inst_qch_docs install_inst_dev_qch_docs -QMAKE_EXTRA_TARGETS += install_docs - -docs_online.depends = html_docs_online dev_html_docs_online -docs.depends = qch_docs dev_qch_docs -QMAKE_EXTRA_TARGETS += html_docs dev_html_docs html_docs_online dev_html_docs_online qch_docs dev_qch_docs docs docs_online - -DISTFILES = $$HELP_DEP_FILES $$DEV_HELP_DEP_FILES +include(../docs.pri) fixnavi.commands = \ cd $$shell_path($$PWD) && \ diff --git a/doc/fixnavi.pl b/doc/fixnavi.pl index e800a34f00f..1ddbd4fe1ba 100755 --- a/doc/fixnavi.pl +++ b/doc/fixnavi.pl @@ -74,8 +74,6 @@ for my $file (@files) { $inif = 0; $skipping = 0; $define_skip = ""; - } elsif (keys(%title2page) == 1 && /^\h*\\section1 Table Of Contents/) { - $havetoc = 1; } elsif ($havetoc && /^\h*\\list/) { $intoc++; } elsif ($intoc) { @@ -110,7 +108,11 @@ for my $file (@files) { } $title2type{$1} = $curtype; $title2page{$1} = $curpage; - $doctitle = $1 if (!$doctitle); + if ($1 eq "Qt Creator TOC") { + $havetoc = 1; + } elsif (!$doctitle) { + $doctitle = $1; + } $curpage = ""; $inhdr = 0; } diff --git a/doc/src/qtcreator-toc.qdoc b/doc/src/qtcreator-toc.qdoc new file mode 100644 index 00000000000..6329e57a3e6 --- /dev/null +++ b/doc/src/qtcreator-toc.qdoc @@ -0,0 +1,216 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Creator documentation. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** +****************************************************************************/ + + +/*! + \contentspage {Qt Creator} + \page qtcreator-toc.html + + \title Qt Creator TOC + + This file is used only for generating the TOC for the help file to be + displayed in the Qt Creator Help mode Contents view. + + \list + \li \l{Getting Started} + \list + \li \l{IDE Overview} + \li \l{User Interface} + \li \l{Configuring Qt Creator} + \li \l{Building and Running an Example} + \li \l{Tutorials} + \list + \li \l{Creating a Qt Quick Application} + \li \l{Creating a Qt Widget Based Application} + \li \l{Creating a Mobile Application} + \endlist + \endlist + \li \l{Managing Projects} + \list + \li \l{Creating Projects} + \list + \li \l{Opening Projects} + \li \l{Adding Libraries to Projects} + \li \l{Adding New Custom Wizards} + \list + \li \l{Adding JSON-Based Wizards} + \li \l{Adding XML-Based Wizards} + \endlist + \endlist + \li \l{Using Version Control Systems} + \list + \li \l{Using Bazaar} + \li \l{Using ClearCase} + \li \l{Using CVS} + \li \l{Using Git} + \li \l{Using Mercurial} + \li \l{Using Perforce} + \li \l{Using Subversion} + \endlist + \li \l{Configuring Projects} + \list + \li \l{Adding Kits} + \li \l{Adding Qt Versions} + \li \l{Adding Compilers} + \li \l{Adding Debuggers} + \li \l{Specifying Build Settings} + \li \l{Specifying Run Settings} + \li \l{Specifying Editor Settings} + \li \l{Specifying Code Style Settings} + \li \l{Specifying Dependencies} + \li \l{Sharing Project Settings} + \endlist + \li \l{Managing Sessions} + \endlist + \li \l{Designing User Interfaces} + \list + \li \l{Developing Qt Quick Applications} + \list + \li \l {Creating Qt Quick Projects} + \li \l {Qt Quick UI Forms} + \li \l {Using Qt Quick Designer} + \li \l {Editing PathView Properties} + \li \l {Adding Connections} + \li \l {Creating Components} + \li \l {Creating Buttons} + \li \l {Creating Scalable Buttons and Borders} + \li \l {Creating Screens} + \li \l {Browsing ISO 7000 Icons} + \li \l {Exporting Designs from Graphics Software} + \li \l {Using QML Modules with Plugins} + \endlist + \li \l{Developing Widget Based Applications} + \list + \li \l{Adding Qt Designer Plugins} + \endlist + \li \l{Optimizing Applications for Mobile Devices} + \endlist + \li \l{Coding} + \list + \li \l{Writing Code} + \list + \li \l{Working in Edit Mode} + \li \l{Semantic Highlighting} + \li \l{Checking Code Syntax} + \li \l{Completing Code} + \li \l{Indenting Text or Code} + \li \l{Using Qt Quick Toolbars} + \li \l{Pasting and Fetching Code Snippets} + \li \l{Using Text Editing Macros} + \li \l{Comparing Files} + \li \l{Parsing C++ Files with the Clang Code Model} + \endlist + \li \l{Finding} + \list + \li \l{Finding and Replacing} + \li \l{Searching with the Locator} + \endlist + \li \l{Refactoring} + \li \l{Beautifying Source Code} + \li \l{Configuring the Editor} + \list + \li \l{Specifying Text Editor Settings} + \li \l{Using FakeVim Mode} + \endlist + \li \l{Editing MIME Types} + \li \l{Modeling} + \li \l{Editing State Charts} + + \endlist + \li \l{Building and Running} + \list + \li \l{Building for Multiple Platforms} + \li \l{Running on Multiple Platforms} + \li \l{Deploying to Mobile Devices} + \list + \li \l{Deploying Applications to Android Devices} + \li \l{Deploying Applications to Embedded Linux Devices} + \li \l{Deploying Applications to QNX Neutrino Devices} + \endlist + \li \l{Connecting Mobile Devices} + \list + \li \l{Connecting Android Devices} + \li \l{Connecting Bare Metal Devices} + \li \l{Connecting Embedded Linux Devices} + \li \l{Connecting iOS Devices} + \li \l{Connecting QNX Devices} + \li \l{Connecting Windows Runtime Devices} + \endlist + \li \l{Customizing the Build Process} + \endlist + \li \l{Testing} + \list + \li \l{Debugging} + \list + \li \l{Setting Up Debugger} + \li \l{Launching the Debugger} + \li \l{Interacting with the Debugger} + \li \l{Using Debugging Helpers} + \li \l{Debugging Qt Quick Projects} + \li \l{Debugging a C++ Example Application} + \li \l{Debugging a Qt Quick Example Application} + \li \l{Troubleshooting Debugger} + \endlist + \li \l{Analyzing Code} + \list + \li \l{Profiling QML Applications} + \li \l{Using Valgrind Code Analysis Tools} + \list + \li \l{Detecting Memory Leaks} + \li \l{Profiling Function Execution} + \li \l{Running Valgrind Tools on External Applications} + \endlist + \li \l{Using Clang Static Analyzer} + \li \l{Analyzing CPU Usage} + \endlist + \li \l{Running Autotests} + \endlist + \li \l{Advanced Use} + \list + \li \l{Supported Platforms} + \li \l{Using Other Build Systems} + \list + \li \l{Setting Up CMake} + \li \l{Setting Up Qbs} + \li \l{Setting Up an Autotools Project} + \li \l{Setting Up a Generic Project} + \endlist + \li \l{Using Command Line Options} + \li \l{Keyboard Shortcuts} + \li \l{Using External Tools} + \li \l{Showing Task List Files in Issues Pane} + \endlist + \li \l{Getting Help} + \list + \li \l{Using the Help Mode} + \li \l{FAQ} + \li \l{Tips and Tricks} + \li \l{Known Issues} + \li \l{Glossary} + \li \l{Technical Support} + \li \l{Acknowledgements} + \endlist + \endlist +*/ diff --git a/doc/src/qtcreator.qdoc b/doc/src/qtcreator.qdoc index a571a88db54..2468f745bd6 100644 --- a/doc/src/qtcreator.qdoc +++ b/doc/src/qtcreator.qdoc @@ -132,189 +132,4 @@ \l{http://lists.qt-project.org/mailman/listinfo/} {lists.qt-project.org Mailing Lists}. \endtable - - \omit - \section1 Table Of Contents - - \list - \li \l{Getting Started} - \list - \li \l{IDE Overview} - \li \l{User Interface} - \li \l{Configuring Qt Creator} - \li \l{Building and Running an Example} - \li \l{Tutorials} - \list - \li \l{Creating a Qt Quick Application} - \li \l{Creating a Qt Widget Based Application} - \li \l{Creating a Mobile Application} - \endlist - \endlist - \li \l{Managing Projects} - \list - \li \l{Creating Projects} - \list - \li \l{Opening Projects} - \li \l{Adding Libraries to Projects} - \li \l{Adding New Custom Wizards} - \list - \li \l{Adding JSON-Based Wizards} - \li \l{Adding XML-Based Wizards} - \endlist - \endlist - \li \l{Using Version Control Systems} - \list - \li \l{Using Bazaar} - \li \l{Using ClearCase} - \li \l{Using CVS} - \li \l{Using Git} - \li \l{Using Mercurial} - \li \l{Using Perforce} - \li \l{Using Subversion} - \endlist - \li \l{Configuring Projects} - \list - \li \l{Adding Kits} - \li \l{Adding Qt Versions} - \li \l{Adding Compilers} - \li \l{Adding Debuggers} - \li \l{Specifying Build Settings} - \li \l{Specifying Run Settings} - \li \l{Specifying Editor Settings} - \li \l{Specifying Code Style Settings} - \li \l{Specifying Dependencies} - \li \l{Sharing Project Settings} - \endlist - \li \l{Managing Sessions} - \endlist - \li \l{Designing User Interfaces} - \list - \li \l{Developing Qt Quick Applications} - \list - \li \l {Creating Qt Quick Projects} - \li \l {Qt Quick UI Forms} - \li \l {Using Qt Quick Designer} - \li \l {Editing PathView Properties} - \li \l {Adding Connections} - \li \l {Creating Components} - \li \l {Creating Buttons} - \li \l {Creating Scalable Buttons and Borders} - \li \l {Creating Screens} - \li \l {Browsing ISO 7000 Icons} - \li \l {Exporting Designs from Graphics Software} - \li \l {Using QML Modules with Plugins} - \endlist - \li \l{Developing Widget Based Applications} - \list - \li \l{Adding Qt Designer Plugins} - \endlist - \li \l{Optimizing Applications for Mobile Devices} - \endlist - \li \l{Coding} - \list - \li \l{Writing Code} - \list - \li \l{Working in Edit Mode} - \li \l{Semantic Highlighting} - \li \l{Checking Code Syntax} - \li \l{Completing Code} - \li \l{Indenting Text or Code} - \li \l{Using Qt Quick Toolbars} - \li \l{Pasting and Fetching Code Snippets} - \li \l{Using Text Editing Macros} - \li \l{Comparing Files} - \li \l{Parsing C++ Files with the Clang Code Model} - \endlist - \li \l{Finding} - \list - \li \l{Finding and Replacing} - \li \l{Searching with the Locator} - \endlist - \li \l{Refactoring} - \li \l{Beautifying Source Code} - \li \l{Configuring the Editor} - \list - \li \l{Specifying Text Editor Settings} - \li \l{Using FakeVim Mode} - \endlist - \li \l{Editing MIME Types} - \li \l{Modeling} - \li \l{Editing State Charts} - - \endlist - \li \l{Building and Running} - \list - \li \l{Building for Multiple Platforms} - \li \l{Running on Multiple Platforms} - \li \l{Deploying to Mobile Devices} - \list - \li \l{Deploying Applications to Android Devices} - \li \l{Deploying Applications to Embedded Linux Devices} - \li \l{Deploying Applications to QNX Neutrino Devices} - \endlist - \li \l{Connecting Mobile Devices} - \list - \li \l{Connecting Android Devices} - \li \l{Connecting Bare Metal Devices} - \li \l{Connecting Embedded Linux Devices} - \li \l{Connecting iOS Devices} - \li \l{Connecting QNX Devices} - \li \l{Connecting Windows Runtime Devices} - \endlist - \li \l{Customizing the Build Process} - \endlist - \li \l{Testing} - \list - \li \l{Debugging} - \list - \li \l{Setting Up Debugger} - \li \l{Launching the Debugger} - \li \l{Interacting with the Debugger} - \li \l{Using Debugging Helpers} - \li \l{Debugging Qt Quick Projects} - \li \l{Debugging a C++ Example Application} - \li \l{Debugging a Qt Quick Example Application} - \li \l{Troubleshooting Debugger} - \endlist - \li \l{Analyzing Code} - \list - \li \l{Profiling QML Applications} - \li \l{Using Valgrind Code Analysis Tools} - \list - \li \l{Detecting Memory Leaks} - \li \l{Profiling Function Execution} - \li \l{Running Valgrind Tools on External Applications} - \endlist - \li \l{Using Clang Static Analyzer} - \li \l{Analyzing CPU Usage} - \endlist - \li \l{Running Autotests} - \endlist - \li \l{Advanced Use} - \list - \li \l{Supported Platforms} - \li \l{Using Other Build Systems} - \list - \li \l{Setting Up CMake} - \li \l{Setting Up Qbs} - \li \l{Setting Up an Autotools Project} - \li \l{Setting Up a Generic Project} - \endlist - \li \l{Using Command Line Options} - \li \l{Keyboard Shortcuts} - \li \l{Using External Tools} - \li \l{Showing Task List Files in Issues Pane} - \endlist - \li \l{Getting Help} - \list - \li \l{Using the Help Mode} - \li \l{FAQ} - \li \l{Tips and Tricks} - \li \l{Known Issues} - \li \l{Glossary} - \li \l{Technical Support} - \li \l{Acknowledgements} - \endlist - \endlist - \endomit */ diff --git a/docs.pri b/docs.pri new file mode 100644 index 00000000000..68c6d414500 --- /dev/null +++ b/docs.pri @@ -0,0 +1,54 @@ +# adapted from qt_docs.prf + +isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!") + +qtcver.name = QTC_VERSION +qtcver.value = $$VERSION +qtcvertag.name = QTC_VERSION_TAG +qtcvertag.value = $$replace(qtcver.value, \.,) +qtdocs.name = QT_INSTALL_DOCS +qtdocs.value = $$[QT_INSTALL_DOCS/src] +qdocindex.name = QDOC_INDEX_DIR +qdocindex.value = $$[QT_INSTALL_DOCS] +qtcdocsdir.name = QTC_DOCS_DIR +qtcdocsdir.value = $$IDE_SOURCE_TREE/doc +QT_TOOL_ENV = qtcver qtcvertag qtdocs qdocindex qtcdocsdir +qtPrepareTool(QDOC, qdoc) +QT_TOOL_ENV = + +!build_online_docs: qtPrepareTool(QHELPGENERATOR, qhelpgenerator) + +QTC_DOCS_BASE_OUTDIR = $$OUT_PWD/doc +DOC_INDEXES = -indexdir $$shell_quote($$[QT_INSTALL_DOCS]) \ + -indexdir $$shell_quote($$IDE_BUILD_TREE/doc) + +for (qtc_doc, QTC_DOCS) { + !exists($$qtc_doc): error("Cannot find documentation specification file $$qtc_doc") + QTC_DOCS_TARGET = $$replace(qtc_doc, ^(.*/)?(.*)\\.qdocconf$, \\2) + QTC_DOCS_TARGETDIR = $$QTC_DOCS_TARGET + QTC_DOCS_OUTPUTDIR = $$QTC_DOCS_BASE_OUTDIR/$$QTC_DOCS_TARGETDIR + + !isEmpty(html_docs.commands): html_docs.commands += && + html_docs.commands += $$QDOC -outputdir $$shell_quote($$QTC_DOCS_OUTPUTDIR) $$qtc_doc $$DOC_INDEXES + + !build_online_docs { + !isEmpty(qch_docs.commands): qch_docs.commands += && + qch_docs.commands += $$QHELPGENERATOR $$shell_quote($$QTC_DOCS_OUTPUTDIR/$${QTC_DOCS_TARGET}.qhp) -o $$shell_quote($$IDE_DOC_PATH/$${QTC_DOCS_TARGET}.qch) + + inst_qch_docs.files += $$IDE_DOC_PATH/$${QTC_DOCS_TARGET}.qch + } +} + +!build_online_docs { + qch_docs.depends = html_docs + inst_qch_docs.path = $$INSTALL_DOC_PATH + inst_qch_docs.CONFIG += no_check_exist no_default_install no_build + install_docs.depends = install_inst_qch_docs + docs.depends = qch_docs + INSTALLS += inst_qch_docs + QMAKE_EXTRA_TARGETS += qch_docs install_docs +} else { + docs.depends = html_docs +} + +QMAKE_EXTRA_TARGETS += html_docs docs diff --git a/qbs/imports/QtcDocumentation.qbs b/qbs/imports/QtcDocumentation.qbs index 8fbbcaf795c..f1f2d74edbe 100644 --- a/qbs/imports/QtcDocumentation.qbs +++ b/qbs/imports/QtcDocumentation.qbs @@ -19,7 +19,6 @@ Product { property string versionTag: qtc.qtcreator_version.replace(/\.|-/g, "") Qt.core.qdocEnvironment: [ - "QTC_LICENSE_TYPE=" + project.licenseType, "QTC_VERSION=" + qtc.qtcreator_version, "QTC_VERSION_TAG=" + qtc.qtcreator_version, "SRCDIR=" + sourceDirectory, diff --git a/qtcreator.qbs b/qtcreator.qbs index f01ad640242..f28ba82a1aa 100644 --- a/qtcreator.qbs +++ b/qtcreator.qbs @@ -6,7 +6,6 @@ Project { name: "Qt Creator" minimumQbsVersion: "1.6.0" property bool withAutotests: qbs.buildVariant === "debug" - property string licenseType: "opensource" property path ide_source_tree: path property pathList additionalPlugins: [] property pathList additionalLibs: [] diff --git a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp index 60e169d4bf0..9c5ff7bc254 100644 --- a/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp +++ b/src/libs/qtcreatorcdbext/symbolgroupvalue.cpp @@ -2427,15 +2427,17 @@ static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str, std::st int status = 0; int tiVersion = QtInfo::qtTypeInfoVersion(v.context()); if (tiVersion > 10) { + const ULONG64 address = + SymbolGroupValue::isPointerType(v.type()) ? v.pointerValue() : v.address(); const ULONG64 data = SymbolGroupValue::readUnsignedValue( - v.context().dataspaces, v.address(), 8, 0); + v.context().dataspaces, address, 8, 0); status = data & 0xFF; ULONG64 timeZone = 0; if (status & 0x01) { msecs = data >> 8; spec = (status & 0x30) >> 4; } else { - ULONG64 addr = SymbolGroupValue::readPointerValue(v.context().dataspaces, v.address()); + ULONG64 addr = SymbolGroupValue::readPointerValue(v.context().dataspaces, address); msecs = SymbolGroupValue::readSignedValue(v.context().dataspaces, addr, 8, 0); addr += 8 /*int64*/; @@ -3222,7 +3224,7 @@ unsigned dumpSimpleType(SymbolGroupNode *n, const SymbolGroupValueContext &ctx, break; } } - if (rc != SymbolGroupNode::SimpleDumperFailed && SymbolGroupValue::isPointerType(v.type())) + if (rc != SymbolGroupNode::SimpleDumperFailed && SymbolGroupValue::isPointerType(v.type()) && encoding->empty()) str << L" @" << std::showbase << std::hex << v.pointerValue() << std::dec << std::noshowbase; if (rc == SymbolGroupNode::SimpleDumperOk) diff --git a/src/plugins/beautifier/artisticstyle/artisticstyle.cpp b/src/plugins/beautifier/artisticstyle/artisticstyle.cpp index 7cac510c11e..3a347478387 100644 --- a/src/plugins/beautifier/artisticstyle/artisticstyle.cpp +++ b/src/plugins/beautifier/artisticstyle/artisticstyle.cpp @@ -160,10 +160,13 @@ Command ArtisticStyle::command(const QString &cfgFile) const command.addOption("-q"); command.addOption("--options=" + cfgFile); - if (m_settings->version() > ArtisticStyleSettings::Version_2_03) { + const int version = m_settings->version(); + if (version > ArtisticStyleSettings::Version_2_03) { command.setProcessing(Command::PipeProcessing); - command.setPipeAddsNewline(true); + if (version == ArtisticStyleSettings::Version_2_04) + command.setPipeAddsNewline(true); command.setReturnsCRLF(Utils::HostOsInfo::isWindowsHost()); + command.addOption("-z2"); } else { command.addOption("%file"); } diff --git a/src/plugins/beautifier/artisticstyle/artisticstylesettings.h b/src/plugins/beautifier/artisticstyle/artisticstylesettings.h index 6ae9d9a37b4..3f5cd4cc17a 100644 --- a/src/plugins/beautifier/artisticstyle/artisticstylesettings.h +++ b/src/plugins/beautifier/artisticstyle/artisticstylesettings.h @@ -40,7 +40,8 @@ class ArtisticStyleSettings : public AbstractSettings public: enum ArtisticStyleVersion { - Version_2_03 = 203 + Version_2_03 = 203, + Version_2_04 = 204 }; ArtisticStyleSettings(); diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 17b3e7ff707..6770149edb9 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -574,15 +574,32 @@ void QmlEngine::notifyEngineRemoteSetupFinished(const RemoteSetupResult &result) if (result.qmlServerPort.isValid()) runParameters().qmlServer.port = result.qmlServerPort; - notifyEngineSetupOk(); + switch (state()) { + case InferiorSetupOk: + // FIXME: This is not a legal transition, but we need to + // get to EngineSetupOk somehow from InferiorSetupOk. + // fallthrough. QTCREATORBUG-14089. + case EngineSetupRequested: + notifyEngineSetupOk(); + break; + case EngineSetupOk: + case EngineRunRequested: + // QTCREATORBUG-17718: On Android while doing debugging in mixed mode, the QML debug engine + // sometimes reports EngineSetupOK after the EngineRunRequested thus overwriting the state + // which eventually results into app to waiting for the QML engine connection. + // Skipping the EngineSetupOK in aforementioned case. + // Nothing to do here. The setup is already done. + break; + default: + QTC_ASSERT(false, qDebug() << "Unexpected state" << state()); + } // The remote setup can take while especialy with mixed debugging. // Just waiting for 8 seconds is not enough. Increase the timeout // to 60 s // In case we get an output the d->outputParser will start the connection. d->noDebugOutputTimer.setInterval(60000); - } - else { + } else { if (isMasterEngine()) QMessageBox::critical(ICore::dialogParent(), tr("Failed to start application"), tr("Application startup failed: %1").arg(result.reason)); diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 55976d218c0..29c4fd0f243 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -728,16 +728,13 @@ void GitClient::requestReload(const QString &documentId, const QString &source, IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); QTC_ASSERT(document, return); - DiffEditorController *controller = DiffEditorController::controller(document); - if (!controller) { - controller = factory(document); - QTC_ASSERT(controller, return); + DiffEditorController *controller = factory(document); + QTC_ASSERT(controller, return); - connect(controller, &DiffEditorController::chunkActionsRequested, - this, &GitClient::slotChunkActionsRequested, Qt::DirectConnection); - connect(controller, &DiffEditorController::requestInformationForCommit, - this, &GitClient::branchesForCommit); - } + connect(controller, &DiffEditorController::chunkActionsRequested, + this, &GitClient::slotChunkActionsRequested, Qt::DirectConnection); + connect(controller, &DiffEditorController::requestInformationForCommit, + this, &GitClient::branchesForCommit); VcsBasePlugin::setSource(document, sourceCopy); EditorManager::activateEditorForDocument(document); diff --git a/src/tools/iostool/iosdevicemanager.cpp b/src/tools/iostool/iosdevicemanager.cpp index ceec6c1778a..dddd2287fe0 100644 --- a/src/tools/iostool/iosdevicemanager.cpp +++ b/src/tools/iostool/iosdevicemanager.cpp @@ -151,6 +151,8 @@ typedef int (MDEV_API *AMDeviceSecureInstallApplicationPtr)(int, AMDeviceRef, CF namespace Ios { namespace Internal { +static const am_res_t kAMDMobileImageMounterImageMountFailed = 0xe8000076; + class MobileDeviceLib { public : MobileDeviceLib(); @@ -1033,12 +1035,13 @@ bool CommandSession::mountDeveloperDiskImage() { if (connectDevice()) { CFStringRef cfImgPath = imagePath.toCFString(); - if (am_res_t result = lib()->deviceMountImage(device, cfImgPath, options, &mountCallback, 0)) { + am_res_t result = lib()->deviceMountImage(device, cfImgPath, options, &mountCallback, 0); + if (result == 0 || result == kAMDMobileImageMounterImageMountFailed) { + // Mounting succeeded or developer image already installed + success = true; + } else { addError(QString::fromLatin1("Mount Developer Disk Image \"%1\" failed, AMDeviceMountImage returned %2 (0x%3)") .arg(imagePath).arg(mobileDeviceErrorString(lib(), result)).arg(QString::number(result, 16))); - } else { - // Mounting succeeded. - success = true; } CFRelease(cfImgPath); disconnectDevice(); diff --git a/tests/system/objects.map b/tests/system/objects.map index f6e87325076..edca350ceca 100644 --- a/tests/system/objects.map +++ b/tests/system/objects.map @@ -110,6 +110,7 @@ :New.templateCategoryView_QTreeView {name='templateCategoryView' type='QTreeView' visible='1' window=':New_Core::Internal::NewDialog'} :New_Core::Internal::NewDialog {name='Core__Internal__NewDialog' type='Core::Internal::NewDialog' visible='1' windowTitle?='New*'} :Next_QPushButton {text~='(Next.*|Continue)' type='QPushButton' visible='1'} +:No valid kits found._QLabel {text?='*No valid kits found.*' type='QLabel' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'} :OpenDocuments_Widget {type='Core::Internal::OpenEditorsWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Open Documents'} :Options.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} :Options.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} @@ -176,6 +177,7 @@ :QtSupport__Internal__QtVersionManager.errorLabel.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='errorLabel' type='QLabel' visible='1'} :QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'} :QtVersionLabel_KitPage {container=':qt_tabwidget_stackedwidget_QWidget' text='Qt version:' type='QLabel' unnamed='1' visible='1'} +:Remove_QPushButton {container=':qt_tabwidget_stackedwidget_QScrollArea' text='Remove' type='QPushButton' unnamed='1' visible='1'} :Restart required.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Restart required_QMessageBox'} :Restart required_QMessageBox {text='The language change will take effect after a restart of Qt Creator.' type='QMessageBox' unnamed='1' visible='1'} :Revert to Saved.Proceed_QPushButton {text='Proceed' type='QPushButton' unnamed='1' visible='1' window=':Revert to Saved_QMessageBox'} diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index f2e7fcb9961..0cc851960b8 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -28,7 +28,7 @@ import operator # for easier re-usage (because Python hasn't an enum type) class Targets: - ALL_TARGETS = map(lambda x: 2 ** x , range(6)) + ALL_TARGETS = tuple(map(lambda x: 2 ** x , range(6))) (DESKTOP_474_GCC, DESKTOP_480_DEFAULT, @@ -37,11 +37,20 @@ class Targets: DESKTOP_541_GCC, DESKTOP_561_DEFAULT) = ALL_TARGETS + @staticmethod + def availableTargetClasses(): + availableTargets = list(Targets.ALL_TARGETS) + if platform.system() in ('Windows', 'Microsoft'): + availableTargets.remove(Targets.EMBEDDED_LINUX) + elif platform.system() == 'Darwin': + availableTargets.remove(Targets.DESKTOP_541_GCC) + return availableTargets + @staticmethod def desktopTargetClasses(): - desktopTargets = (sum(Targets.ALL_TARGETS) & ~Targets.EMBEDDED_LINUX) - if platform.system() == 'Darwin': - desktopTargets &= ~Targets.DESKTOP_541_GCC + desktopTargets = Targets.availableTargetClasses() + if Targets.EMBEDDED_LINUX in desktopTargets: + desktopTargets.remove(Targets.EMBEDDED_LINUX) return desktopTargets @staticmethod @@ -79,14 +88,6 @@ class Targets: test.fatal("You've passed at least one unknown target!") return result - @staticmethod - def intToArray(targets): - return filter(lambda x: x & targets, Targets.ALL_TARGETS) - - @staticmethod - def arrayToInt(targetArr): - return reduce(operator.or_, targetArr, 0) - @staticmethod def getDefaultKit(): return Targets.DESKTOP_531_DEFAULT diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index ec216a8b977..5caf3ee6019 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -72,8 +72,8 @@ def openCmakeProject(projectPath, buildDir): invokeMenuItem("File", "Open File or Project...") selectFromFileDialog(projectPath) - __chooseTargets__(0) # uncheck all - __chooseTargets__(Targets.DESKTOP_480_DEFAULT, additionalFunc=additionalFunction) + __chooseTargets__([]) # uncheck all + __chooseTargets__([Targets.DESKTOP_480_DEFAULT], additionalFunc=additionalFunction) clickButton(waitForObject(":Qt Creator.Configure Project_QPushButton")) return True @@ -344,7 +344,7 @@ def createEmptyQtProject(workingDir=None, projectName=None, targets=Targets.desk __createProjectHandleLastPage__() return projectName, checkedTargets -def createNewNonQtProject(workingDir=None, projectName=None, target=Targets.DESKTOP_474_GCC, +def createNewNonQtProject(workingDir=None, projectName=None, target=[Targets.DESKTOP_474_GCC], plainC=False, cmake=False, qbs=False): if plainC: template = "Plain C Application" @@ -373,7 +373,7 @@ def createNewNonQtProject(workingDir=None, projectName=None, target=Targets.DESK return projectName def createNewCPPLib(projectDir = None, projectName = None, className = None, fromWelcome = False, - target = Targets.DESKTOP_474_GCC, isStatic = False, modules = ["QtCore"]): + target = [Targets.DESKTOP_474_GCC], isStatic = False, modules = ["QtCore"]): available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True) if isStatic: libType = LibType.STATIC @@ -391,7 +391,7 @@ def createNewCPPLib(projectDir = None, projectName = None, className = None, fro return checkedTargets, projectName, className def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWelcome=False, - target=Targets.DESKTOP_474_GCC, baseClass="QGenericPlugin"): + target=[Targets.DESKTOP_474_GCC], baseClass="QGenericPlugin"): available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True) if projectDir == None: projectDir = tempDir() @@ -403,25 +403,21 @@ def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWel __createProjectHandleLastPage__() return checkedTargets, projectName, className -# parameter target can be an OR'd value of Targets +# parameter target can be a list of Targets # parameter availableTargets should be the result of __createProjectOrFileSelectType__() # or use None as a fallback # parameter additionalFunc function to be executed inside the detailed view of each chosen kit # if present, 'Details' button will be clicked, function will be executed, # 'Details' button will be clicked again -def __chooseTargets__(targets=Targets.DESKTOP_474_GCC, availableTargets=None, additionalFunc=None): +def __chooseTargets__(targets=[Targets.DESKTOP_474_GCC], availableTargets=None, additionalFunc=None): if availableTargets != None: available = availableTargets else: # following targets depend on the build environment - added for further/later tests - available = list(Targets.ALL_TARGETS) - if platform.system() in ('Windows', 'Microsoft'): - available.remove(Targets.EMBEDDED_LINUX) - elif platform.system() == 'Darwin': - available.remove(Targets.DESKTOP_541_GCC) + available = Targets.availableTargetClasses() checkedTargets = [] for current in available: - mustCheck = targets & current == current + mustCheck = current in targets try: ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current), mustCheck, 3000) @@ -660,10 +656,7 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False): if platform.system() != 'Darwin': result.append(Targets.DESKTOP_541_GCC) elif 'Platform independent' in text: - result = list(Targets.ALL_TARGETS) - result.remove(Targets.EMBEDDED_LINUX) - if platform.system() == 'Darwin': - result.remove(Targets.DESKTOP_541_GCC) + result = Targets.desktopTargetClasses() else: test.warning("Returning None (__getSupportedPlatforms__())", "Parsed text: '%s'" % text) diff --git a/tests/system/suite_APTW/tst_APTW03/test.py b/tests/system/suite_APTW/tst_APTW03/test.py index 36053d2709a..1b8090fcdce 100644 --- a/tests/system/suite_APTW/tst_APTW03/test.py +++ b/tests/system/suite_APTW/tst_APTW03/test.py @@ -80,7 +80,8 @@ def main(): checkSimpleCppLib("SampleApp2", True) # Qt Plugin needs Qt4.8 for QGenericPlugin which is tested by default - targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC + targets = Targets.desktopTargetClasses() + targets.remove(Targets.DESKTOP_474_GCC) checkedTargets, projectName, className = createNewQtPlugin(tempDir(), "SampleApp3", "MyPlugin", target=targets) virtualFunctionsAdded = False diff --git a/tests/system/suite_CCOM/tst_CCOM01/test.py b/tests/system/suite_CCOM/tst_CCOM01/test.py index d5859c69b59..99d1d33f76e 100755 --- a/tests/system/suite_CCOM/tst_CCOM01/test.py +++ b/tests/system/suite_CCOM/tst_CCOM01/test.py @@ -40,7 +40,9 @@ def main(): if not startedWithoutPluginError(): return # open example project, supports only Qt 5 - targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC & ~Targets.DESKTOP_480_DEFAULT + targets = Targets.desktopTargetClasses() + targets.remove(Targets.DESKTOP_474_GCC) + targets.remove(Targets.DESKTOP_480_DEFAULT) checkedTargets = openQmakeProject(examplePath, targets) # build and wait until finished - on all build configurations availableConfigs = iterateBuildConfigs(len(checkedTargets)) diff --git a/tests/system/suite_CSUP/tst_CSUP06/test.py b/tests/system/suite_CSUP/tst_CSUP06/test.py index d721790e7e7..06855371994 100644 --- a/tests/system/suite_CSUP/tst_CSUP06/test.py +++ b/tests/system/suite_CSUP/tst_CSUP06/test.py @@ -174,7 +174,7 @@ def main(): for useClang in [False, True]: if not startCreator(useClang): continue - openQmakeProject(examplePath, Targets.DESKTOP_531_DEFAULT) + openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT]) checkCodeModelSettings(useClang) if not openDocument("cplusplus-tools.Sources.main\\.cpp"): earlyExit("Failed to open main.cpp.") diff --git a/tests/system/suite_HELP/tst_HELP06/test.py b/tests/system/suite_HELP/tst_HELP06/test.py index ba9941a289f..610ebc23fdf 100755 --- a/tests/system/suite_HELP/tst_HELP06/test.py +++ b/tests/system/suite_HELP/tst_HELP06/test.py @@ -53,11 +53,18 @@ def main(): switchViewTo(ViewConstants.HELP) manualQModelIndex = getQModelIndexStr("text?='Qt Creator Manual *'", ":Qt Creator_QHelpContentWidget") - doubleClick(waitForObject(manualQModelIndex), 5, 5, 0, Qt.LeftButton) + manualQMIObj = waitForObject(manualQModelIndex) + doubleClick(manualQMIObj, 5, 5, 0, Qt.LeftButton) + if not waitFor("not manualQMIObj.collapsed", 2000): + test.warning("It takes more than two seconds to expand the help content tree.") mouseClick(waitForObject(getQModelIndexStr("text='Building and Running an Example'", manualQModelIndex)), 5, 5, 0, Qt.LeftButton) helpSelector = waitForObject(":Qt Creator_HelpSelector_QComboBox") - waitFor("str(helpSelector.currentText).startswith('Building and Running an Example')", 10000) + pageOpened = "str(helpSelector.currentText).startswith('Building and Running an Example')" + if not waitFor(pageOpened, 10000): + test.fatal("Help page is not opened after ten seconds. Giving up.") + invokeMenuItem("File", "Exit") + return # open bookmarks window clickButton(waitForObject(":Qt Creator.Add Bookmark_QToolButton")) clickButton(waitForObject(":Add Bookmark.ExpandBookmarksList_QToolButton")) diff --git a/tests/system/suite_QMLS/tst_QMLS03/test.py b/tests/system/suite_QMLS/tst_QMLS03/test.py index 9c07a844bc6..3682816da52 100644 --- a/tests/system/suite_QMLS/tst_QMLS03/test.py +++ b/tests/system/suite_QMLS/tst_QMLS03/test.py @@ -80,7 +80,7 @@ def main(): if not startedWithoutPluginError(): return # open example project - openQmakeProject(examplePath, Targets.DESKTOP_531_DEFAULT) + openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT]) # open qml file openDocument("animation.Resources.animation\\.qrc./animation.basics.color-animation\\.qml") # get editor diff --git a/tests/system/suite_debugger/tst_debug_empty_main/test.py b/tests/system/suite_debugger/tst_debug_empty_main/test.py index 39b9ed30188..524499c8162 100644 --- a/tests/system/suite_debugger/tst_debug_empty_main/test.py +++ b/tests/system/suite_debugger/tst_debug_empty_main/test.py @@ -58,13 +58,12 @@ def main(): performDebugging(projectName, checkedTargets) invokeMenuItem("File", "Close All Projects and Editors") # C/C++ - targets = Targets.intToArray(Targets.desktopTargetClasses()) for name,isC in {"C":True, "CPP":False}.items(): for singleTarget in targets: workingDir = tempDir() qtVersion = re.search("\d{3}", Targets.getStringForTarget(singleTarget)).group() projectName = createNewNonQtProject(workingDir, "Sample%s%s" % (name, qtVersion), - singleTarget, isC) + [singleTarget], isC) if projectName == None: test.fail("Failed to create Sample%s%s" % (name, qtVersion), "Target: %s, plainC: %s" % (Targets.getStringForTargt(singleTarget), isC)) diff --git a/tests/system/suite_debugger/tst_simple_debug/test.py b/tests/system/suite_debugger/tst_simple_debug/test.py index 14c250acad2..f20069cd2a7 100644 --- a/tests/system/suite_debugger/tst_simple_debug/test.py +++ b/tests/system/suite_debugger/tst_simple_debug/test.py @@ -30,7 +30,8 @@ def main(): if not startedWithoutPluginError(): return # Requires Qt 4.8 - targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC + targets = Targets.desktopTargetClasses() + targets.remove(Targets.DESKTOP_474_GCC) # using a temporary directory won't mess up a potentially existing workingDir = tempDir() checkedTargets, projectName = createNewQtQuickApplication(workingDir, targets=targets) diff --git a/tests/system/suite_editors/tst_qml_editor/test.py b/tests/system/suite_editors/tst_qml_editor/test.py index b751121a5e0..8854035e6a9 100644 --- a/tests/system/suite_editors/tst_qml_editor/test.py +++ b/tests/system/suite_editors/tst_qml_editor/test.py @@ -37,7 +37,7 @@ def main(): # add docs to have the correct tool tips addHelpDocumentation([os.path.join(Qt5Path.docsPath(target), "qtquick.qch")]) templateDir = prepareTemplate(sourceExample, "/../../helper") - openQmakeProject(os.path.join(templateDir, proFile), target) + openQmakeProject(os.path.join(templateDir, proFile), [target]) openDocument("focus.QML.qml" + os.sep + "focus.focus\\.qml") testRenameId() testFindUsages() diff --git a/tests/system/suite_general/suite.conf b/tests/system/suite_general/suite.conf index 5ce92f3b6a8..f6429d5bb55 100644 --- a/tests/system/suite_general/suite.conf +++ b/tests/system/suite_general/suite.conf @@ -7,6 +7,6 @@ HOOK_SUB_PROCESSES=false IMPLICITAUTSTART=0 LANGUAGE=Python OBJECTMAP=../objects.map -TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_custom_wizard_check tst_default_settings tst_installed_languages tst_new_class tst_opencreator_qbs tst_openqt_creator tst_rename_file tst_save_before_build tst_session_handling tst_tasks_handling +TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_custom_wizard_check tst_default_settings tst_installed_languages tst_new_class tst_opencreator_qbs tst_openqt_creator tst_remove_kits tst_rename_file tst_save_before_build tst_session_handling tst_tasks_handling VERSION=2 WRAPPERS=Qt diff --git a/tests/system/suite_general/tst_build_speedcrunch/test.py b/tests/system/suite_general/tst_build_speedcrunch/test.py index 7d6c30227cb..d66524001ca 100644 --- a/tests/system/suite_general/tst_build_speedcrunch/test.py +++ b/tests/system/suite_general/tst_build_speedcrunch/test.py @@ -42,7 +42,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - checkedTargets = openQmakeProject(SpeedCrunchPath, Targets.DESKTOP_480_DEFAULT) + checkedTargets = openQmakeProject(SpeedCrunchPath, [Targets.DESKTOP_480_DEFAULT]) progressBarWait(30000) fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton") diff --git a/tests/system/suite_general/tst_openqt_creator/test.py b/tests/system/suite_general/tst_openqt_creator/test.py index 5722a3fe46c..8f838bd4e27 100644 --- a/tests/system/suite_general/tst_openqt_creator/test.py +++ b/tests/system/suite_general/tst_openqt_creator/test.py @@ -36,12 +36,12 @@ def main(): return runButton = findObject(':*Qt Creator.Run_Core::Internal::FancyToolButton') - openQmakeProject(pathSpeedcrunch, Targets.DESKTOP_480_DEFAULT) + openQmakeProject(pathSpeedcrunch, [Targets.DESKTOP_480_DEFAULT]) # Wait for parsing to complete waitFor("runButton.enabled", 30000) # Starting before opening, because this is where Creator froze (QTCREATORBUG-10733) startopening = datetime.utcnow() - openQmakeProject(pathCreator, Targets.DESKTOP_561_DEFAULT) + openQmakeProject(pathCreator, [Targets.DESKTOP_561_DEFAULT]) # Wait for parsing to complete startreading = datetime.utcnow() waitFor("runButton.enabled", 300000) diff --git a/tests/system/suite_general/tst_remove_kits/test.py b/tests/system/suite_general/tst_remove_kits/test.py new file mode 100644 index 00000000000..98590d674a4 --- /dev/null +++ b/tests/system/suite_general/tst_remove_kits/test.py @@ -0,0 +1,64 @@ +############################################################################ +# +# Copyright (C) 2017 The Qt Company Ltd. +# Contact: https://www.qt.io/licensing/ +# +# This file is part of Qt Creator. +# +# Commercial License Usage +# Licensees holding valid commercial Qt licenses may use this file in +# accordance with the commercial license agreement provided with the +# Software or, alternatively, in accordance with the terms contained in +# a written agreement between you and The Qt Company. For licensing terms +# and conditions see https://www.qt.io/terms-conditions. For further +# information use the contact form at https://www.qt.io/contact-us. +# +# GNU General Public License Usage +# Alternatively, this file may be used under the terms of the GNU +# General Public License version 3 as published by the Free Software +# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +# included in the packaging of this file. Please review the following +# information to ensure the GNU General Public License requirements will +# be met: https://www.gnu.org/licenses/gpl-3.0.html. +# +############################################################################ + +source("../../shared/qtcreator.py") + +def verifyProjectsMode(expectedKits): + treeView = waitForObject(":Projects.ProjectNavigationTreeView") + bAndRIndex = getQModelIndexStr("text='Build & Run'", + ":Projects.ProjectNavigationTreeView") + test.compare(len(dumpItems(treeView.model(), waitForObject(bAndRIndex))), + len(expectedKits), "Verify number of listed kits.") + test.compare(set(dumpItems(treeView.model(), waitForObject(bAndRIndex))), + set(expectedKits), "Verify if expected kits are listed.") + hasKits = len(expectedKits) > 0 + test.verify(checkIfObjectExists(":scrollArea.Edit build configuration:_QLabel", hasKits), + "Verify if build settings are being displayed.") + test.verify(checkIfObjectExists(":No valid kits found._QLabel", not hasKits), + "Verify if Creator reports missing kits.") + +kitNameTemplate = "Manual.%s" + +def __removeKit__(kit, kitName): + global kitNameTemplate + if kitName == Targets.getStringForTarget(Targets.getDefaultKit()): + # The following kits will be the default kit at that time + kitNameTemplate += " (default)" + item = kitNameTemplate % kitName + waitForObjectItem(":BuildAndRun_QTreeView", item) + clickItem(":BuildAndRun_QTreeView", item, 5, 5, 0, Qt.LeftButton) + clickButton(waitForObject(":Remove_QPushButton")) + +def main(): + startApplication("qtcreator" + SettingsPath) + if not startedWithoutPluginError(): + return + createProject_Qt_Console(tempDir(), "SquishProject") + switchViewTo(ViewConstants.PROJECTS) + verifyProjectsMode(Targets.getTargetsAsStrings(Targets.availableTargetClasses())) + iterateKits(True, False, __removeKit__) + clickButton(waitForObject(":Options.OK_QPushButton")) + verifyProjectsMode([]) + invokeMenuItem("File", "Exit") diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py index aac2a425211..19cbfbaa186 100644 --- a/tests/system/suite_general/tst_session_handling/test.py +++ b/tests/system/suite_general/tst_session_handling/test.py @@ -39,7 +39,7 @@ def main(): "Verifying window title contains created session name.") checkWelcomePage(sessionName, True) for project in projects: - openQmakeProject(project, Targets.DESKTOP_531_DEFAULT) + openQmakeProject(project, [Targets.DESKTOP_531_DEFAULT]) progressBarWait(20000) checkNavigator(52, "Verifying whether all projects have been opened.") openDocument("animation.Resources.animation\\.qrc./animation.basics.animators\\.qml") diff --git a/tests/system/suite_qtquick/tst_qml_outline/test.py b/tests/system/suite_qtquick/tst_qml_outline/test.py index e837f523463..383d8296f73 100644 --- a/tests/system/suite_qtquick/tst_qml_outline/test.py +++ b/tests/system/suite_qtquick/tst_qml_outline/test.py @@ -39,7 +39,7 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - openQmakeProject(os.path.join(templateDir, proFile), Targets.DESKTOP_531_DEFAULT) + openQmakeProject(os.path.join(templateDir, proFile), [Targets.DESKTOP_531_DEFAULT]) qmlFiles = [treebase + "focus\\.qml", treebase + "Core.ListMenu\\.qml"] checkOutlineFor(qmlFiles) testModify() diff --git a/tests/system/suite_qtquick/tst_qtquick_creation/test.py b/tests/system/suite_qtquick/tst_qtquick_creation/test.py index c2d349c13b5..72ab1e10494 100644 --- a/tests/system/suite_qtquick/tst_qtquick_creation/test.py +++ b/tests/system/suite_qtquick/tst_qtquick_creation/test.py @@ -36,10 +36,10 @@ def main(): for qtVersion, controls in available: if qtVersion == "5.3": - targ = Targets.DESKTOP_531_DEFAULT + targ = [Targets.DESKTOP_531_DEFAULT] quick = "2.3" else: - targ = Targets.DESKTOP_541_GCC + targ = [Targets.DESKTOP_541_GCC] quick = "2.4" # using a temporary directory won't mess up a potentially existing workingDir = tempDir() diff --git a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py index 99cccb8cd24..a93d9a25ffa 100644 --- a/tests/system/suite_qtquick/tst_qtquick_creation4/test.py +++ b/tests/system/suite_qtquick/tst_qtquick_creation4/test.py @@ -29,8 +29,8 @@ def main(): startApplication("qtcreator" + SettingsPath) if not startedWithoutPluginError(): return - for targ, quickVer in [[Targets.DESKTOP_480_DEFAULT, 1], [Targets.DESKTOP_561_DEFAULT, 2], - [Targets.DESKTOP_531_DEFAULT, 2]]: + for targ, quickVer in [[[Targets.DESKTOP_480_DEFAULT], 1], [[Targets.DESKTOP_561_DEFAULT], 2], + [[Targets.DESKTOP_531_DEFAULT], 2]]: # using a temporary directory won't mess up a potentially existing createNewQmlExtension(tempDir(), targ, quickVer) # wait for parsing to complete