From a99bd10860d4ba904fe57794e5f80e975ce6e1d6 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 19 Oct 2021 15:47:41 +0200 Subject: [PATCH 01/39] Doc: Fix links to QDS tutorial images Change-Id: I31315c9512e9fbad5f7462e5e82ba72666bb5719 Reviewed-by: Johanna Vanhatapio --- doc/qtdesignstudio/examples/doc/loginui1.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/qtdesignstudio/examples/doc/loginui1.qdoc b/doc/qtdesignstudio/examples/doc/loginui1.qdoc index 73bd0ebdf42..e38a6c0aaec 100644 --- a/doc/qtdesignstudio/examples/doc/loginui1.qdoc +++ b/doc/qtdesignstudio/examples/doc/loginui1.qdoc @@ -145,9 +145,9 @@ You can download the logo and the background image from here: \list - \li \l{https://doc.qt.io/qtdesignstudio/images/used-in-examples/loginui1/qt_logo_green_128x128px.png} + \li \l{https://doc.qt.io/qtdesignstudio/images/used-in-examples/loginui1/images/qt_logo_green_128x128px.png} {qt_logo_green_128x128px.png} - \li \l{https://doc.qt.io/qtdesignstudio/images/used-in-examples/loginui1/adventurePage.jpg} + \li \l{https://doc.qt.io/qtdesignstudio/images/used-in-examples/loginui1/images/adventurePage.jpg} {Background image} (\e adventurePage.jpg) Photo by \l{https://unsplash.com/photos/a2MgJdG6UvE} From ec633061d49afb667a710b57fba234f9c58cd2a4 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 20 Oct 2021 13:58:21 +0200 Subject: [PATCH 02/39] ClangTools: Fix fix-it application The logic for applying formatting was completely broken and had obviously never been tested with a formatter that does anything. Fixes: QTCREATORBUG-26420 Change-Id: Iffc1784b225969b86b221afb16c06e8e0d053b91 Reviewed-by: David Schulz --- .../clangfixitsrefactoringchanges.cpp | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/plugins/clangtools/clangfixitsrefactoringchanges.cpp b/src/plugins/clangtools/clangfixitsrefactoringchanges.cpp index e622567dde7..5aaedbf9daa 100644 --- a/src/plugins/clangtools/clangfixitsrefactoringchanges.cpp +++ b/src/plugins/clangtools/clangfixitsrefactoringchanges.cpp @@ -36,11 +36,11 @@ #include #include -#include #include #include #include +#include #include #include @@ -81,39 +81,43 @@ bool FixitsRefactoringFile::apply() ICodeStylePreferencesFactory *factory = TextEditorSettings::codeStyleFactory( CppEditor::Constants::CPP_SETTINGS_ID); - // Apply changes - std::unique_ptr indenter; - QString lastFilename; - ReplacementOperations operationsForFile; + QHash> operationsByFile; - for (int i=0; i < m_replacementOperations.size(); ++i) { + for (int i = 0; i < m_replacementOperations.size(); ++i) { ReplacementOperation &op = *m_replacementOperations[i]; - if (op.apply) { - // Check for permissions - if (!QFileInfo(op.fileName).isWritable()) - return false; // Error file not writable + if (!op.apply) + continue; - qCDebug(fixitsLog) << " " << i << "Applying" << op; + const FilePath filePath = FilePath::fromString(op.fileName); - // Shift subsequent operations that are affected - shiftAffectedReplacements(op, i + 1); + // Check for permissions + if (!filePath.isWritableFile()) + return false; - // Apply - QTextDocument *doc = document(op.fileName); - if (lastFilename != op.fileName) { - if (indenter) - format(*indenter, doc, operationsForFile, i); - operationsForFile.clear(); - indenter = std::unique_ptr(factory->createIndenter(doc)); - indenter->setFileName(Utils::FilePath::fromString(op.fileName)); - } + qCDebug(fixitsLog) << " " << i << "Applying" << op; - QTextCursor cursor(doc); - cursor.setPosition(op.pos); - cursor.setPosition(op.pos + op.length, QTextCursor::KeepAnchor); - cursor.insertText(op.text); - operationsForFile.push_back(&op); - } + // Shift subsequent operations that are affected + shiftAffectedReplacements(op, i + 1); + + // Apply + QTextDocument * const doc = document(op.fileName); + QTextCursor cursor(doc); + cursor.setPosition(op.pos); + cursor.setPosition(op.pos + op.length, QTextCursor::KeepAnchor); + cursor.insertText(op.text); + auto &opsForFile = operationsByFile[filePath]; + opsForFile.first.push_back(&op); + opsForFile.second = i; + } + + // Format + for (auto it = operationsByFile.cbegin(); it != operationsByFile.cend(); ++it) { + QTextDocument * const doc = document(it.key().toString()); + const std::unique_ptr indenter(factory->createIndenter(doc)); + if (!indenter) + continue; + indenter->setFileName(it.key()); + format(*indenter, doc, it.value().first, it.value().second); } // Write file From 0101808407c7215bf24eb8e2947b1ab17fb14e99 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 20 Oct 2021 13:27:01 +0200 Subject: [PATCH 03/39] Refactor HighlightingResultReporter In some unlikely circumstances it may happen that HighlightingResultReporter might be destroyed before returning from the HighlightingResultReporter::start() function. This may lead to undefined behavior. Refactor the HighlightingResultReporter so that instead of using QRunnable subclass we define simple function returning the QFuture object directly. Change-Id: Ib833771a7e46e87c83d10b59ca056a0147fabe88 Reviewed-by: Christian Kandeler --- .../clangeditordocumentprocessor.cpp | 7 +- .../clanghighlightingresultreporter.cpp | 109 ++++++++---------- .../clanghighlightingresultreporter.h | 44 ++----- .../highlightingresultreporter-test.cpp | 34 ++---- 4 files changed, 64 insertions(+), 130 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 94a44085056..2461120d9af 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -37,6 +37,8 @@ #include #include +#include + #include #include #include @@ -271,10 +273,7 @@ void ClangEditorDocumentProcessor::updateHighlighting( emit ifdefedOutBlocksUpdated(documentRevision, skippedPreprocessorBlocks); m_semanticHighlighter.setHighlightingRunner( - [tokenInfos]() { - auto *reporter = new HighlightingResultReporter(tokenInfos); - return reporter->start(); - }); + [tokenInfos]() { return highlightResults(tokenInfos); }); m_semanticHighlighter.run(); } } diff --git a/src/plugins/clangcodemodel/clanghighlightingresultreporter.cpp b/src/plugins/clangcodemodel/clanghighlightingresultreporter.cpp index 03070208ee8..149fb30c8b7 100644 --- a/src/plugins/clangcodemodel/clanghighlightingresultreporter.cpp +++ b/src/plugins/clangcodemodel/clanghighlightingresultreporter.cpp @@ -25,12 +25,13 @@ #include "clanghighlightingresultreporter.h" +#include #include +#include #include +#include #include -#include - namespace { TextEditor::TextStyle toTextStyle(ClangBackEnd::HighlightingType type) @@ -161,78 +162,62 @@ TextEditor::HighlightingResult toHighlightingResult( return result; } -} // anonymous - -namespace ClangCodeModel { -namespace Internal { - -HighlightingResultReporter::HighlightingResultReporter( - const QVector &tokenInfos) - : m_tokenInfos(tokenInfos) +void highlightResultsImpl(QFutureInterface &fi, + const QVector &tokenInfos, + int chunkSize) { - m_chunksToReport.reserve(m_chunkSize + 1); -} - -void HighlightingResultReporter::reportChunkWise( - const TextEditor::HighlightingResult &highlightingResult) -{ - if (m_chunksToReport.size() >= m_chunkSize) { - if (m_flushRequested && highlightingResult.line != m_flushLine) { - reportAndClearCurrentChunks(); - } else if (!m_flushRequested) { - m_flushRequested = true; - m_flushLine = highlightingResult.line; - } - } - - m_chunksToReport.append(highlightingResult); -} - -void HighlightingResultReporter::reportAndClearCurrentChunks() -{ - m_flushRequested = false; - m_flushLine = 0; - - if (!m_chunksToReport.isEmpty()) { - reportResults(m_chunksToReport); - m_chunksToReport.erase(m_chunksToReport.begin(), m_chunksToReport.end()); - } -} - -void HighlightingResultReporter::setChunkSize(int chunkSize) -{ - m_chunkSize = chunkSize; -} - -void HighlightingResultReporter::run() -{ - run_internal(); - reportFinished(); -} - -void HighlightingResultReporter::run_internal() -{ - if (isCanceled()) + if (fi.isCanceled()) return; - using ClangBackEnd::HighlightingType; + QVector chunksToReport; + chunksToReport.reserve(chunkSize + 1); - for (const auto &tokenInfo : qAsConst(m_tokenInfos)) + using ClangBackEnd::HighlightingType; + bool flushRequested = false; + int flushLine = 0; + + auto reportAndClearCurrentChunks = [&] { + flushRequested = false; + flushLine = 0; + + if (!chunksToReport.isEmpty()) { + fi.reportResults(chunksToReport); + chunksToReport.erase(chunksToReport.begin(), chunksToReport.end()); + } + }; + + auto reportChunkWise = [&](const TextEditor::HighlightingResult &highlightingResult) { + if (chunksToReport.size() >= chunkSize) { + if (flushRequested && highlightingResult.line != flushLine) { + reportAndClearCurrentChunks(); + } else if (!flushRequested) { + flushRequested = true; + flushLine = highlightingResult.line; + } + } + + chunksToReport.append(highlightingResult); + }; + + for (const auto &tokenInfo : tokenInfos) reportChunkWise(toHighlightingResult(tokenInfo)); - if (isCanceled()) + if (fi.isCanceled()) return; reportAndClearCurrentChunks(); } -QFuture HighlightingResultReporter::start() +} // anonymous + +namespace ClangCodeModel { +namespace Internal { + +QFuture highlightResults( + const QVector &tokenInfos, + int chunkSize) { - this->setRunnable(this); - this->reportStarted(); - QFuture future = this->future(); - QThreadPool::globalInstance()->start(this, QThread::LowestPriority); - return future; + return Utils::runAsync(highlightResultsImpl, tokenInfos, chunkSize); } } // namespace Internal diff --git a/src/plugins/clangcodemodel/clanghighlightingresultreporter.h b/src/plugins/clangcodemodel/clanghighlightingresultreporter.h index b3755fd264c..4999a7d77f1 100644 --- a/src/plugins/clangcodemodel/clanghighlightingresultreporter.h +++ b/src/plugins/clangcodemodel/clanghighlightingresultreporter.h @@ -25,48 +25,18 @@ #pragma once -#include -#include -#include -#include +#include +#include -#include - -#include +namespace TextEditor { class HighlightingResult; } +namespace ClangBackEnd { class TokenInfoContainer; } namespace ClangCodeModel { namespace Internal { -class HighlightingResultReporter: - public QObject, - public QRunnable, - public QFutureInterface -{ - Q_OBJECT - -public: - HighlightingResultReporter(const QVector &tokenInfos); - - void setChunkSize(int chunkSize); - - QFuture start(); - -private: - void run() override; - void run_internal(); - - void reportChunkWise(const TextEditor::HighlightingResult &highlightingResult); - void reportAndClearCurrentChunks(); - -private: - QVector m_tokenInfos; - QVector m_chunksToReport; - - int m_chunkSize = 100; - - bool m_flushRequested = false; - int m_flushLine = 0; -}; +QFuture highlightResults( + const QVector &tokenInfos, + int chunkSize = 100); } // namespace Internal } // namespace ClangCodeModel diff --git a/tests/unit/unittest/highlightingresultreporter-test.cpp b/tests/unit/unittest/highlightingresultreporter-test.cpp index dd2001e02ff..f7651f5134c 100644 --- a/tests/unit/unittest/highlightingresultreporter-test.cpp +++ b/tests/unit/unittest/highlightingresultreporter-test.cpp @@ -43,7 +43,6 @@ using ClangBackEnd::Document; using ClangBackEnd::Documents; using ClangBackEnd::UnsavedFiles; using ClangBackEnd::ChunksReportedMonitor; -using ClangCodeModel::Internal::HighlightingResultReporter; namespace { @@ -87,9 +86,7 @@ QVector generateTokenInfos(uint count) TEST_F(HighlightingResultReporter, StartAndFinish) { - auto reporter = new ::HighlightingResultReporter(noTokenInfos()); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(noTokenInfos()); future.waitForFinished(); ASSERT_THAT(future.isFinished(), true); @@ -97,9 +94,7 @@ TEST_F(HighlightingResultReporter, StartAndFinish) TEST_F(HighlightingResultReporter, ReportNothingIfNothingToReport) { - auto reporter = new ::HighlightingResultReporter(generateTokenInfos(0)); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(generateTokenInfos(0)); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 0L); @@ -107,10 +102,7 @@ TEST_F(HighlightingResultReporter, ReportNothingIfNothingToReport) TEST_F(HighlightingResultReporter, ReportSingleResultAsOneChunk) { - auto reporter = new ::HighlightingResultReporter(generateTokenInfos(1)); - reporter->setChunkSize(1); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(generateTokenInfos(1), 1); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 1L); @@ -118,11 +110,7 @@ TEST_F(HighlightingResultReporter, ReportSingleResultAsOneChunk) TEST_F(HighlightingResultReporter, ReportRestIfChunkSizeNotReached) { - auto reporter = new ::HighlightingResultReporter(generateTokenInfos(1)); - const int notReachedChunkSize = 100; - reporter->setChunkSize(notReachedChunkSize); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(generateTokenInfos(1), 100); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 1L); @@ -130,10 +118,7 @@ TEST_F(HighlightingResultReporter, ReportRestIfChunkSizeNotReached) TEST_F(HighlightingResultReporter, ReportChunksWithoutRest) { - auto reporter = new ::HighlightingResultReporter(generateTokenInfos(4)); - reporter->setChunkSize(1); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(generateTokenInfos(4), 1); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 2L); @@ -141,10 +126,7 @@ TEST_F(HighlightingResultReporter, ReportChunksWithoutRest) TEST_F(HighlightingResultReporter, ReportSingleChunkAndRest) { - auto reporter = new ::HighlightingResultReporter(generateTokenInfos(5)); - reporter->setChunkSize(2); - - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(generateTokenInfos(5), 2); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 2L); @@ -159,10 +141,8 @@ TEST_F(HighlightingResultReporter, ReportCompleteLines) TokenInfoContainer(1, 2, 1, types), TokenInfoContainer(2, 1, 1, types), }; - auto reporter = new ::HighlightingResultReporter(tokenInfos); - reporter->setChunkSize(1); - auto future = reporter->start(); + auto future = ClangCodeModel::Internal::highlightResults(tokenInfos, 1); ChunksReportedMonitor monitor(future); ASSERT_THAT(monitor.resultsReadyCounter(), 2L); From f40aa23d9315216d06fd8f3e5180432ff8490ea0 Mon Sep 17 00:00:00 2001 From: Johanna Vanhatapio Date: Mon, 18 Oct 2021 10:35:54 +0300 Subject: [PATCH 04/39] Doc: Update the Scene Environment Topic Task-number: QDS-4888 Change-Id: I63d17e02054a2a475e43f1e0ac9c5691422cf703 Reviewed-by: Miikka Heikkinen Reviewed-by: Leena Miettinen --- ...3d-scene-environment-ambient-occlusion.png | Bin 0 -> 11468 bytes ...udio-3d-scene-environment-antialiasing.png | Bin 0 -> 11468 bytes ...tudio-3d-scene-environment-light-probe.png | Bin 0 -> 9907 bytes ...studio-3d-scene-environment-properties.png | Bin 0 -> 15463 bytes .../qtdesignstudio-3d-lights.qdoc | 2 +- .../qtdesignstudio-3d-scene-environment.qdoc | 341 +++++++++++++----- 6 files changed, 251 insertions(+), 92 deletions(-) create mode 100644 doc/qtdesignstudio/images/studio-3d-scene-environment-ambient-occlusion.png create mode 100644 doc/qtdesignstudio/images/studio-3d-scene-environment-antialiasing.png create mode 100644 doc/qtdesignstudio/images/studio-3d-scene-environment-light-probe.png create mode 100644 doc/qtdesignstudio/images/studio-3d-scene-environment-properties.png diff --git a/doc/qtdesignstudio/images/studio-3d-scene-environment-ambient-occlusion.png b/doc/qtdesignstudio/images/studio-3d-scene-environment-ambient-occlusion.png new file mode 100644 index 0000000000000000000000000000000000000000..39a94f812eb8365e373369381f427c64525a5c84 GIT binary patch literal 11468 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

0n3wQAw90i``G@=22*hjV3QBgt$Rlhkb50q{3 zoBIAx;~LGEcijRGl+4Y_<_)sA+>~dTT|2?n;@%xM>1>(&P3u%e)*cbPskSXS;L`8K zO;S@8b6Hr=91huXtnKdB)nRLI?VM9HPsK8Oaj$8gdE|AWP0K%-@obP?pPYBtcS-LG zhb0%;tM%IQ~X$LoxbPpWsA+!-);PH`1Evr|L;8!=c{L!2Hx$iIJ_+)$Ngbpq_FH= z_gfrXwcb7x%v_dCFl(`PxFxWJS5R{a??XNYM*$WTw8LH~QT_`ztEAm#F%CQK1L@b8 z4yH5yI1{DtLx*90Bsa@^)(6JfjSn_6)THSO)QB~lU&GpTp6SEPtqwc3FdWRB!uL)& z_s5}$Od7w;BSPfQsNB9HxM*EBlUmY|p1fJniQd|`+9n%@ED6@;&-PgwZZ)a&+lQr@ zhRw>>CMV<8#z^iH5otcOoN)&GBkMa3vnwRUL*!0An`v`kckLUFT%Tg?oJ`l~%l3v1 zzdj_2XDq&)dFJ{GH{XH@Y&D0(r{^$EYb@Zkt5)`!k+XQc@U0cv=I8G+UP{-TT5#j1 zo~eK8jTuL;XD1!fa!t*>w0URJ-&d0l*A!;%S}(2>Q)}ekwsytY2Jx#?C%iow!JlDX zp1#oH)7J%YFHN_51uortYl_V#o`gfDbJGO+I<85GWF;^^R4SX>nY%IVflj*LY?hTt z>YgimZk5-a6TQ0o%9?4Zaa%OHjZ2~@@1OCej7bpId8U z#g}><-Tc?)O6{)cS&?D4m*;I~*t;$9dr)oFt+l=hbGMvy%71BM*mw5|gOmwxfWm2q z9bL=MCmUzaxu6!gd{cmuyNC%B>#IilB~K(Z_H?VeoeJJ z2ARP+o~PVcZGTs;;5z2`m+xWd((tEJ#>>jPEWTx3PP(v(^Yo*IW-C_BH=L)Zqm$Eq z%!uLPDUcnSxr?@W%`ixOzDX>%YxWk;Nk)D)pED0Xi#Xv>(w$kn?|)!TrD3-4)^Bh4 zR`{CPBwq5hYYCrf7d_J?^U@K<-CF~toq5x89ioHwDyyideCbPNI8^#()$a^3i{-su zcA}e}Zp{dOSoX?nh1b2AOQriJY)$-J_BMFEyYmb)+oJOOyLZluoLwP$%-ucr&!_Ve zafYc^{usBhz4-e{+-vTx#eZ-8Xpz3W$SiJq)1H1E*)3kb)l4^Xp*8H2e#s-_> z+6Gm1H>cf;yw1137jfPYJ$wD5)N6}ZFRwrNb5(I!*5k^xtQC?9_dm?dA<}0bLRcj{V3n3v46%z%hR)doM-h2Ul}#;X65AKX{I0db6-trs(!cpPs1>G)l8xoB1QwEN3nFx=WG*WG@#{p;_XZ+nlrhn@`Hu$BnNJ$q^@fjoKfo-Q6!L6J+6EPwmY zevoj5jbF0#Wc1mxJ0bGB_gT!bnqqKg@$6~Ev0FBjPg~<_x!J5R=i5Vm&7V7OMIC)} zHErn`!$|2j-a#r?8iZd3BsE8uTrOJHeXV~v@9pDTPTFm&*>!Rs-`?9BE~{O5!tWBx z)xx^{#j>xp;%j}rm0nDGZ}wFENk`MI4YfYfHYcBjupi$V$g@i-iQ&>S_B#u~*4Ak0 z+_EuID6akb(8-xO=*GLx2i?DVeMqTKQs1H}RP}k9qHgAA=DZ8Or%&odJ+M7@zy7y% zz@9J1-$icw%^?3(Z^P#wFCI9U>weg|%5%TT+U0srvVH{VmbvD;y*Jx`Z0|nRf4B9b zx-2y==${DNFi$x0^xt1w+0~&-?(Bt|7>CQI8?jT;SUd_q2PE+ zV4~A4fp-j<&X8(|DDmyH_1N*|06S{Pvr@8Iz`gj8V^>%pw`P_TdXZw=@?4(F zQZM~}Pb#*$r0tip#xks~$k+MW)QuUFrcJ%DR4P3;_)59WuE~NQQ#pir><*YEFm6oM zR+(_(4nxPKNqc##BxBl~s#L$6Wzo}K=xy3}Z^W z{%7wcvowe!+H;fNrnuC&wrtEcVA^)_EN8`D^J%xzZ05wznSJ?wS=wqD)5%-bw5*d{ z%xRS^ovp6?=(K>EM2*9_Y0Fh@A70$Ub2)40dPlbFvznAS^It!G@zcjL3+#aVy=vz? zZ`au6yuBjS`NOD%vyJ5wSMs5FJ%b$SW0h;}$0yu2;7GV_kRzQIdBco{?S>i8?Y2m< zZM@Blb!>AICECD9t*p3{wVB=Ms)F(r(FrTrBp0r0@G(8XQOcUK%F%6wwn8wkky9+= z%&ZB5ueeTxH1`CAJ1mn*X<5g>!WenIW@99;krS^0Yl^C=X-UdU`+vWFfABP5J|7gg z*6rolLk++uw*yj7{#r8v=_Efx>J6k75 z&hz3G2CIeJ9EB!qwe&Z>wD!`m2Up69S6-_!{PV-NEQSesFCW$Y*Q(9>F;o<7# zFI9LK{%7;M{e!z}6FZ;U@rGQN%n2PArZ(s*tj;pi73g`ozKU>^?_z?ak~K=r39!_2 z?I*9x%cJZYl9E{%7#J8lUHx3vIVCj3zv}Dg=%`pD_4`?(prGKyRY4mB1qB8B7bYkx zDJjW0A9QnZaj|J@>IJFdu@zM{op&~E_mx-y!HK6^ntHEfRJHeZbcD3(xpsDRbQ}-B zsyk0^nv}1dTsacU}ce0UOLJEhs4XQG&}%NlEFEp-7I4 zi_4K@jT;@9W**+$+;}uf9Ap zV|toV{=+1(zZTQ`=l>SYbvn2HVbSsOWBWdNG{$P~dY%{aZ@KQ~IMHDXg=DJ&3TOJq%Q3Amsq{*yyEIw{dIg+;eUVe)V@;OHT{Zl zzy7nUn%*Z2w72hEb!~sZ>uE{7kNx#+-M9a}yyN{d=^Y=hx&P4l-@oTez4OZ7*8c03 z{;B|3zl`bX%5jVImDw}0JQSzr z$=R(^j%C{R>EW-^l$5)E*O%>EbK}hs>uvhmOTMaI6?3imEz#3#Z}_`@_e$#(;=DZh zht}=x4m=vEl4I@I{j97{WyzzCu5^d_ekQpRjt$y#b?={jcKmMTQnPg4Oo#4iqSwto zDla=;(DpsUC!o+Q^S9Zilz&y1{G+!o2#ow2eSV`7x8hnhqer{UT6X8koGfSv*Nfiw zb6U%sNp?rRrWgDOikr7_o-!-L&p%(@we$Qq|MtsT`~FHt=AA3A7S{c^uV&P+LT|g# zfqL2acWZq2d-cC(>1Ch4Z++K>-MmHS|N7<2Zu!6arMJB(_CS?g{I2_ z70s6MJ?bnBi>oab-uX0)XW3)h#~GXRw2beF?~|UMb4<-WOZGL|seWr;L+w{wxhI(_#tohm}E3Fsfk-o(xe?UsebH-~8 zYxA{*gMuT=BbcwZ*Mi`Q07<>npvZEbm_NHu}a0-olDc1*DzdpIP13ir8BvodjgU_GRp6tT<`ba zBwG4mmU#K6{jd2JXH>Xb?BIMI7=P!Zuj2i>A~W?3hVLHO^h^mkbM1S;6~k9SJx(r1 zly3;%fBrNzSEAhicu`tj(~A$;D{fAU*R9>*Vr=HP<(16ggQmAn9&IfS7IJ)SE%^7K z-zA3c4_o*AzLvu`W5c;ibIW(P7eCnfRYvkI_w7^qGipy9xmELK<+VAx#f-AW6Fwfg z{oP`1{%nV40p_k#_o{Aw)qTUc+V@^xrOw|<)t9aNk9xe8d_Di}{)ku4wk!#I6tgdG zTcgdTj@_wRhMCznN~2P~e*1oW%Wd!S(?O%J90KmHBYu+z1fbx$(AcE#Bai!)p1f4nu9MdtXe zmw|U8IU~9rDb!2Ht*$#}a4;#?JMr?{;*|ng6Fna!=m9!@`d(lAk@>GILfI zmubPurr!MEU0Y8o>u%&%c9)v*PIyUM$x`PdK9|m|h$>LxS3V&Bo@>_TV=?D1Pd;|h zcGHYIJkn_bI%^(W2`Q_!*ipciJ->2Fq_))&D8&RX^yPOl-rl`|7v?!HoU&) z7;{~7a?1aAUwY3az5ICT^vpI?=hBG-2BZo$!KNfq0V zhW=)`CVcckd0I8AdU~CU%aihr>if>0KBghJkNsXvz3@))#AVOIr#}gr5}p%&Yv#=z zi(dzB&x?I^^}D*Y^(4JqXYGj7EQgz(u91t*H2M(sD9rxghJ)rsujAv>D)U^`|9*Ns z`=$0wvv+B1Uw$&1_x$GCZ{NGL-sS1BkSRYH|HlcPdN6T&fwQ=Iy!{`E_$5>K6`Sgp z+E*H$&8+yf(|CuWuXEp~_Zx)E0~LS#dKkRwx7fN>mwr50Q=5AK;Ho7CyGnbOx^7pK ziQhT%%PHQ|#!Jo~u68$A=Xd>4)|+F$?q^19KEH4EjSF*+DJhBj)E(l9i@)5s-_~lz z!DRVGZ(TV|3p~?ucotb7JN#;UW%ezxIjY{T?_TLy89VFo{HSwT>ufg39z0^&t9mQ8 zrL%hz-RMU{UzYlgyGvPj=YP*{u`z}Y*hQ}Ju zi>}=~+_j{3dBLT9a}RG){`q9azaNo)3HEP~X?*`D|MS_2>OXHcs;JfPYxVJFnfrc6 z|20qfkFNqXjQA(TEtj{wt(RWv7;9y=zI9^g)sJ)cu9uN)_lT*U!CuX`q(1qE$@dFW zOS#OQ3XiuXspsbXunS&u_$PCI%#;A;=_)r|E-abXE4upI zTrN|Fm(kNUJf5Xy^6g~G_q^jPh1XC2Epbwl&mj0`-7g_EyB|#Y;&0Q=^~9>ETQiuS zEMETUaLY%Z%G0h@m%PHxcrW-Ld$_aOx}UjPX9r`qYWI^TOI{E) zn31>o-ZPJKHeCB%8oNOv_51l1muIxa@iEORTbzGe;nk6?%4Tm%-TWgwj;(JlS#I?F zWBW<@V)Nwx@6DLH@3Ocr`~2{(YH6SDgRlL!Kis$r+-h02w$nM;& z@cI6K#P8=u9=g`J{o>?Oo0*Ro`~ODFk$7p=6ErzI&!UXwa8g4dlXulgbsYn#%dc8i zT-%YvWT-qVDebTL{Hx2aGWwLOiAB4L%elHNS>>1Wch-9SN8ft*WUXQXR+ zV?Or+?$w?$?K_*MY-97Md~0IdXBAh)_=lSIC|5??i(yph=3`O4DIr8uH3(xo5hRMugXF66Fny=}98QW5*BAD&9>z6x$3{Jy^_)+Ns*i-ZkHF| zQ&I{N-6f)mr9BC4_U)>S$lBul(Pc_rgqYyY8qFIXz2%0@ZF0Kef;;!TB)N&`eDGOO z(pP1J1Mci^gEsvVj9SllaiZdnspSeKb6i~XW@`Utt+jhAVO^_K+k9uKm~`Auow_ug z_iAEsi~6RXT~ThFzfbPu>h1g8oG#8>dT-0VYAIp%mcSW5?D*~X&p6{X)$?iVh41s{ z8z|cKKaS+A`S8M9=d|VSu%pL4U0haOo+_KuRrc}c5%-_xPAfc^)n2*qwvk+Ys_{`f zwr@SB-}IzpIy|>aTr* zx;F{QViQU&rs^mxsWfam-T3x}ViCjp6@EQGvg>EDrfmB9+fv8l)G?{s)1!C&DzMmX z_wlV#flA$Zb56&Sz5B%19(tp4_CNo9m6XS#*QZDCswmdjEcfwapvCt3LNbpVrUZttA>BWA7ICIN|1`oG9Mx{@Sa2O}EMyWgg~Wig}syGtbQa z-MQ5jI)Sn;g*Hs(zrJ2s`E}VYv#+T~)1L1ublNu^3GDJuX<|P=F)I` zxv2TQdildqVw=n#a_}DaN&a;9qC}u`<;T1388bI`UX|XIVOVFS&%3(&_HtEc_y5h? z?W_9~1CQRwb`^SNb?TgNcEoo3N!H7JmefZajpgfq?{#FI>6_tsXTyykv6rbDqm9qIiddt4<(T{1RId>{W!XsD?vOTRk=Hl|?`_4`2 zIj01x&MHLZ%s)5de7)LqQJMbN=O)jUPK;%IcewlKgSq;a2~uym_Dnl=u=vM^ZkMi} z+!nqWUfmh;VipIcTFp0K{&zaF+M2ShsmBg%GdcI(J?GHwo?khJHxKA{LDdv*hh<+}DrF&Fbi258R;XoKPXLaIXBr$Lr;+b{& zm(7_q)9_R9&Dn7^t9t)1pOi88&O5#K?qqiL?~A4tHtn_lKYRKA>V~B2%Y7=|+R0V^ z5Y78kUXXFMWZvKNa%Yao-rT%=!ID_KEsS&!Rc2vpZXJJl-g0SvM>FZEi)7gP%Ha-dY#Jl26;VRMF-O+AaP}(8|>C^v8&ffOshpOC? zjuTJMzPPZkIZtu#fi-838)Yw=y!_pd34d?x-ro(byzeA$S65OJpC37K-G!fdwO9C5*k zrvf)jl=97I6ce1d>cUbD+yfvN&K?e0{IXMHr_2kr@`KVt0st`MD+e&6mzEyhYQa zaw?u~`Z06kp4kx<2hB^{HZvApYQzPTB^wDX{vGh#Jp&$D{-cUaO@#?;JFnXKa5bdGNx*!#ls8+i3Iel@g!ySIJ*joJ;hR=W^fv z-@Qe4;;bY4W%+AunvYkrJuYCm@UZb^&6kXHrt>S(I$s@{Q0L2O^!a4zl|`4E-+wr` zqwGi6LSDg@JN54L^hP>ddl<5*VZyVc5_;_07Pp^Z+_Tuq@X`9enPL-8UVHz1gMy}X zc20cW%U6dVzWH@zd-s8fKWy)-uw4B5D{c$d=E)}i?Q14a=napF&wKgk?7}luM~=Hc zyz@_XzWxozb<%&NzC1W4U3JkyV}9-F{b}!3g~Sy8m8k4(PW9fDX}ZStTc|Zh*8R?9 zyviH}OE*8=ee=%_>-CQ|x|A;QJ`iRXv%jxr&Fz=Bu1pu5J@>gD^MM6re>Fat*B?E0 zc&7-1#ix@?&EB?sUDWu{_eN>C;VO&nmbE*#Wc-Vc_doM@PVc_CI}%+Yf1jEi5-sxa zZL$I1zaww{uYDddv2{Wivt(hc^r5?EeJK_PR?o0W&sh03=Psj~;ue`d;ceSH4{iN_ z{j2_si{d+slZDgHq^ljx#nG)vD{GV>QZ@=_<@z*~SzDC=AZ>-#7^K$$D`PN&Nr{1c0g{&=~^WQ|_l{AoP0fBEnIdt=$=BAUEj6n!KoQMB9=V{9l}^^~8H z=lz}1^I!izHo5+#^XXlTs!!F9`l%n?QE=<6g^XX<9`Em_`YRUInzkK0+kInqDgQp^ z`KgyW+x_iS|w=dE~<@qz!3hb=H8rd@q9Bj+`2kVlKJ)}i~aH&Io}(-+I%#HdH;o3lFilv zySPvMXmfx6t6}fD$+b83NN%Wj__lh^we7wO96K1Fo(p5SxT=_k{d$hNxcE6=PnO>I zE??NKJq@+Bey?Ty-FEVhWgbWQUCSZ*8 zeA=t*7Y!#x->gO%RyrPJzFc*y(DP4UH}O81=ypdpxYP5uy0OsgOHaOCx@~A2_IZB) z^P&SSzV~b^wr9(1^?2yARjzho_tCC;UHPs}Z+FziJ}E0uy6<#1>fW56;&waE8=tA! zrq0-=@49>clcqv;Y3a*^F%Jv3JTf5+`pMrM(UM-x=UBjdq^Q8J%PNQez-A>a* zPc&68d&bHA_+8z&xTLylHg9+V$3jI%3*$|GqSi*nh1dC185qppP0EkCHsf_=)g_Bv z?qZW?Cm!Z$Y85>j`onB#^lY0;Lca})mNdS!bIkGxw{kh7qPo0k)0fNAg_9?L(Y>rz zbJ}E2=L_q`@AChR?f<40N=pA(yZ-6h)yB)Oa``<;Wcd+1p@`x7-sTiN6g=zA7qZP%voZ344^fOAX*AN%FGsp}GFsXb6BJ?zGJ|89@Ld?h|` zR93FCy^*4lw=m(1FHcTw!&7(PJ%9fg_$`?b)@tT+c>1lt(v|PUk57ocT~PD0T1DM$ zg84HxwynNtKQ{(c{n;owQ`%m6@~`FVJ6GROP_UY`;Q`MdDO0sGNs87N#J$TRqm4S= zN${_}|7>k$^pCIeH&vONCTC3-GwIY>zs8cW`+Aaoq}YWW+;f$=EM`q?J{&u{to)A8 znS1^>i6>3Lc&p84rIqLGqQ`$#C}$5B|7Po_PcrXK{iEr>->`4Ltdj5obTP8j~OZmTp(ebmBZWm>Le{%5T-W92H65gNx|Lo;| zxdk`AY6{2g?su1~Yn}Z^Rwl}HZuCVbO28lMo_lhRY+cHV? zv(StB>jjVQoqK#hj(e&44CRcV^T)bEe_QYE+QWMh+Z)mmy_qkbDlEt}|Fw;Gkzb5;(&f1HFDj~C zATRvieHLfPg|?0uIncP#l^5%ku02bhX?pQwaCyy&>8Ix^KD+jEPei%Z;^ldZ1vVV% zd-OQmX=c&y?3~XNe#_*VNk4q}aQZIkqR7vSuKvw8e09NP-VeRMcdoAXm>)QCmh1Qa zxMQ1wFLCU8%y{hipCgRb0)@400vn!|@>O}P5Zr0db<_BBrkdzYy;66VCrT@R8k-5~ zzPNJWU|&4nr0B)fRhki;`&Mz=K2BcwIR3;&+3d)VrxoAGndGj^KOA)VrLk7f<|{uE zl*7&Dnk-p%IXz@a+D@gqJ5eq!F6(&kwI3ILzv0oFzWL=}WhJE`OD?mZ#V-w`1O-=e c#dZmSo66Xx4txIdzjx?1k~GRQLY{sE05R-BF#rGn literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/studio-3d-scene-environment-light-probe.png b/doc/qtdesignstudio/images/studio-3d-scene-environment-light-probe.png new file mode 100644 index 0000000000000000000000000000000000000000..7a062a2a36015a7fdc017c420558df7eec3ab310 GIT binary patch literal 9907 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 aO>%Am`Bcg5kNt@&$JT|4-p@xKVg~^7b*AwE literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/studio-3d-scene-environment-properties.png b/doc/qtdesignstudio/images/studio-3d-scene-environment-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..353e0c35848f7bf0ff1bab20f76c658ec31071d4 GIT binary patch literal 15463 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 G2m=70o~PCT literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc index 8fd1539d51e..b4875eee260 100644 --- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc +++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-lights.qdoc @@ -33,7 +33,7 @@ \title Lights Light components are the primary source of lighting in a \QDS scene. - As a secondary light source, you can use \l{Using Image-based Lighting} + As a secondary light source, you can use \l{Setting the Light Probe} {image-based lighting}. To add light components to your UI, drag-and-drop them from \l Library diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-scene-environment.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-scene-environment.qdoc index 72f0a44b5e7..d738cbe7d33 100644 --- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-scene-environment.qdoc +++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-scene-environment.qdoc @@ -32,123 +32,282 @@ \title Scene Environment - You can use the SceneEnvironment type to specify how the scene is rendered - globally. You can specify settings for antialiasing, scene background, - ambient occlusion, and image based lighting in the \uicontrol Properties - view. + You can use the \uicontrol {Scene Environment} component to specify + how a scene is rendered globally. You can specify settings for antialiasing, + scene background, ambient occlusion, and image-based lighting in the + \l Properties view. The \uicontrol {Scene Environment} component is available + in \l Library > \uicontrol Components > \uicontrol {Qt Quick 3D}. It is + automatically included under the 3D view component in \l{Creating Projects} + {projects created} using the \uicontrol {Qt Quick 3D Application} wizard + template. - \section1 Antialiasing + \note If you select \uicontrol {Qt 5} as the \uicontrol {Target Qt Version} + when \l {Creating Projects}{creating your project}, the available properties + for this component will be slightly different. The properties may also be + situated differently in the \uicontrol Properties view. - You can apply temporal, progressive, or multisample antialiasing to - scenes. Temporal and progressive antialiasing jiggle the camera very - slightly between frames and blend the result of each new frame with - the previous frames, while multisample antialiasing super-samples - the edges of geometry. + \section1 Setting the Scene Environment - Temporal antialiasing finds real details that would otherwise be lost - and has a low impact on performance, but fast-moving objects cause - one-frame ghosting. To enable temporal antialiasing, select the - \uicontrol {Temporal AA} check box. + In the \uicontrol {Scene Environment} section of the \uicontrol Properties + view, you can specify whether and how the background of the scene should be + cleared, specify whether you wish to perform depth-tests on the scene, + apply post-processing effects to the scene, and define how colors are + tonemapped before the scene is rendered. - Progressive antialiasing jiggles the camera after all the content of the - scene has stopped moving. The more frames you accumulate, the better the - result looks. This provides detailed static images with no performance cost, - but does not take effect if any visual changes are occurring. + \image studio-3d-scene-environment-properties.png "The Scene Environment properties" - To apply progressive antialiasing, set the number of frames to use for the - final image in the \uicontrol {Progressive AA} field. Note that at the - value of 8x, progressive antialiasing takes one eighth of a second to finish - rendering at 60 FTPS, which may be noticeable. + The \uicontrol {Clear color} property specifies which color will be used to + clear the background of the scene if \uicontrol {Background mode} is defined + as \uicontrol Color. Use the \l{Picking Colors}{color picker} to select the + color of your choice. - Multisample antialiasing results in smoother silhouettes, but has no effect - on the materials inside geometry. It provides good results on geometry - silhouettes, where aliasing is often most noticeable and works smoothly with - fast animation. However, it can be expensive to use and does not help with - texture or reflection issues. + The \uicontrol {Background mode} property defines whether the background + of the scene should be cleared as well as the manner of clearing it. + Use the dropdown menu to select one of the available modes: + \table + \header + \li Background Mode + \li Description + \row + \li Transparent + \li The scene is cleared to be transparent, which is useful + for rendering 3D content on top of another item. This mode + has no effect when the \uicontrol View3D component is using + \uicontrol Underlay or \uicontrol Overlay as the render mode. + \row + \li Color + \li The scene is cleared with the color specified by the + \uicontrol {Clear color} property. This mode has no effect + when the \uicontrol View3D component is using the + \uicontrol Underlay or \uicontrol Overlay as the render + mode. + \row + \li SkyBox + \li The scene will not be cleared, but instead a + \uicontrol SkyBox or Skydome will be rendered. Define an + image as a \uicontrol SkyBox using the + \uicontrol Image property in the \uicontrol {Light probe} + section (In Qt 5, the \uicontrol {Light Probe} property in + the \uicontrol {Image-Based Lighting} group. + \endtable - To apply multisample antialiasing, set the number of samples to use per - pixel in the \uicontrol {Multisample AA} field. + To leave the scene uncleared, select \uicontrol {Unspecified} as the + \uicontrol {Background mode}. - \section1 Clearing the Scene Background - - To clear the background of the scene to be transparent, select - \uicontrol Transparent in the \uicontrol {Background mode} field. - To clear the background using a color, select \uicontrol Color, - and select the color in the \uicontrol {Clear Color} field. - - To render a Skybox or Skydome instead of clearing the scene, - select \uicontrol SkyBox. You can specify the image to use as - a value of the \l{SceneEnvironment::lightProbe}{lightProbe} - property in \l{Text Editor}. - - To leave the scene uncleared, select \uicontrol {Unspecified}. - - \section1 Performing Depth Tests - - You can perform depth tests to optimize the scene environment. To skip depth - tests, deselect the \uicontrol {Enable depth test} checkbox. Note that + You can perform depth tests to optimize the scene environment. To skip the + depth tests, deselect the \uicontrol {Enable depth test} checkbox. Note that skipping the tests can cause rendering errors. To have the renderer write to the depth buffer as part of the color pass, - deselect the \uicontrol {Enable depth prepass} checkbox. Disable depth - prepass on GPU's that use a tiled rendering architecture. + deselect the \uicontrol {Enable depth prepass} checkbox. Deselecting the + checkbox disables the depth prepass on any GPU that uses tiled rendering + architecture. - \section1 Ambient Occlusion + The \uicontrol Effect property defines a post-processing effect to the + scene. Use the dropdown menu to select one of the effects that will be + applied to the entire scene. The order of the effects is significant since + the result of each effect is fed to the next. + + The \uicontrol {Tonemap mode} property defines how colors are tonemapped + before rendering. Select \uicontrol ToneMapModeLinear to apply linear + tonemapping, which gamma corrects colors and returns them in sRGB color + space. You can also select \uicontrol ToneMapModeAces to apply Academy Color + Encoding System, \uicontrol ToneMapModeHejlDawson to apply the Hejl-Dawson + tonemapping, or \uicontrol ToneMapModeFilmic to apply filmic tonemapping. + \note The \uicontrol {Tonemap mode} property is not available in Qt 5. + + \section1 Applying Antialiasing + + Antialiasing is used to make curved lines smoother on the screen. In the + \uicontrol Antialiasing section of the \uicontrol Properties view, you can + specify the mode and quality of antialiasing and also enable temporal + antialiasing and define its strength. + + \image studio-3d-scene-environment-antialiasing.png "The Antialiasing properties" + + The \uicontrol {Antialiasing mode} property specifies the mode of + antialiasing applied when the scene is rendered. Select one of the following + modes using the dropdown menu: + \table + \header + \li Mode of Antialiasing + \li Description + \row + \li MSAA + \li Applies multisample antialiasing. The scene is rendered in a + higher resolution and then scaled down to actual resolution. + \row + \li NoAA + \li No antialiasing is applied. + \row + \li SSAA + \li Supersample antialiasing is applied. The edges of geometry + are supersampled, resulting in smoother silhouettes. This + technique has no effect on the materials inside geometry. + \row + \li ProgressiveAA + \li Progressive antialiasing is applied. When the content of the + scene has stopped moving, the camera is jiggled very slightly + between frames, and the result of each new frame is blended + with the previous frames. The more frames you accumulate, + the better looking the result. + \endtable + + The \uicontrol {Antialiasing quality} property sets the level of antialiasing + applied to the scene. Define the quality of antialiasing as \uicontrol Medium, + \uicontrol High, or \uicontrol {Very High}. The effect of the selected + \uicontrol {Antialiasing quality} depends on the selected + \uicontrol {Antialiasing mode}, as you can see from the table below. + In the \uicontrol SSAA mode the selected quality affects the supersampling + resolution, in \uicontrol MSAA it determines the number or samples per + pixel, and in \uicontrol ProgressiveAA it defines the number of frames for + final image. + \table + \header + \li Level of Antialiasing + \li Supersampling Resolution used in SSAA + \li Number of samples per pixel in MSAA + \li Number of frames for final image in ProgressiveAA + \row + \li Medium + \li 1.2x + \li 2 + \li 2 + \row + \li High + \li 1.5x + \li 4 + \li 4 + \row + \li Very High + \li 2.0x + \li 8 + \li 8 + \endtable + + \note With \uicontrol {Antialiasing mode} set to \uicontrol NoAA, + \uicontrol {Antialiasing quality} does not affect antialiasing. + + The \uicontrol {Temporal AA} property enables temporal antialiasing. + This means that the camera is jiggled very slightly between frames, and the + result of each new frame is blended with the previous frame. + \note Temporal antialiasing does not have an effect when the \uicontrol MSAA + mode is used. + \note When combined with \uicontrol ProgressiveAA mode, temporal antialising + is used for animations, and \uicontrol ProgressiveAA is used once + animations stop. + + The \uicontrol {Temporal AA strength} property modifies the amount of + temporal movement in antialiasing. This property only has an effect when + the \uicontrol {Temporal AA} property is set to true. + + \note In Qt 5, the antialiasing properties are located in + \uicontrol Properties > \uicontrol {Scene Environment}. + + \section1 Applying Ambient Occlusion Ambient occlusion is a form of approximated global illumination that causes - non-directional self-shadowing where objects are close together. + non-directional self-shadowing where objects are close together. You can + define the \uicontrol Strength, \uicontrol Distance, \uicontrol Softness, + \uicontrol {Sample rate}, and \uicontrol Bias properties in the + \uicontrol {Ambient Occlusion} section of the \uicontrol Properties view. - You can set the strength of the shadows in the \uicontrol {AO strength} - field. A value of 100 causes full darkness shadows, while lower values - cause the shadowing to appear lighter. A value of 0 disables ambient - occlusion entirely, improving performance at a cost to the visual realism - of 3D objects rendered in the scene. All values other than 0 have the same - impact on performance. + \image studio-3d-scene-environment-ambient-occlusion.png "The Ambient Occlusion properties" - To specify roughly how far ambient occlusion shadows spread away from - objects, select the distance in \uicontrol {AO distance} field. Greater - distances cause increasing impact to performance. + You can set the strength of the shadows using the \uicontrol Strength + property, which defines the amount of ambient occlusion applied. A value of + 100 causes full darkness shadows, while lower values cause the shadowing to + appear lighter. A value of 0 disables ambient occlusion entirely, thus + improving performance at a cost to the visual realism of 3D objects rendered + in the scene. All values other than 0 have the same impact on performance. - To prevent components from exhibiting ambient occlusion at close distances, - set the cutoff distance in the \uicontrol {AO bias} field. The higher the - value, the greater the distance that is required between objects before - ambient occlusion occurs. + The \uicontrol Distance property defines roughly how far the ambient occlusion + shadows spread away from objects. Greater distances cause increasing impact + to performance. - \note If you see ambient occlusion shadowing on objects where there should - be no shadowing, increase the value slightly to clip away close results. - - To specify how smooth the edges of the ambient occlusion shading are, set - the softness in the \uicontrol {AO softness} field. To improve smoothness at - the risk of sometimes producing obvious patterned artifacts, you can scatter - the edges of the ambient occlusion shadow bands by selecting the - \uicontrol {AO dither} check box. - - To specify the ambient occlusion quality, at the expense of performance, - select the number of shades of gray to use in the - \uicontrol {AO sample rate} field. + The \uicontrol Softness property specifies how smooth the edges of the + ambient occlusion shading are. The value set for the property must be + between 0.0 and 50.0. To improve smoothness at the risk of sometimes + producing obvious patterned artifacts, you can scatter the edges of the + ambient occlusion shadow bands by selecting the \uicontrol {Dither} check + box. \note Large distances between the clipping planes of your camera may cause problems with ambient occlusion. If you are seeing odd banding in ambient occlusion, try adjusting the value in the \uicontrol {Clip far} field in the \l{Cameras}{scene camera} properties. - \section1 Using Image-based Lighting + The \uicontrol {Sample rate} property specifies the number of shades of gray, + thus defining the quality of ambient occlusion at the expense of performance. - In the material properties, you can specify an image (preferably - a high-dynamic range image) to use to light the scene, either - instead of or in addition to \l{Lights}{scene lights}. In the - \uicontrol {Probe brightness} field, you can modify the amount of - light emitted by the light probe. + The \uicontrol Bias property defines a cutoff distance preventing objects + from exhibiting ambient occlusion at close distances. The higher the + value, the greater the distance required between objects before ambient + occlusion occurs. + \note If you see ambient occlusion shadowing on objects where there should + be no shadowing, increase the value slightly to clip away close results. - To take shortcuts to approximate the light contributes of the light - probe at the expense of quality, select the \uicontrol {Fast IBL} - check box. + \note In Qt 5, some the ambient occlusion properties are named slightly + differently: \uicontrol {AO strength}, \uicontrol {AO distance}, + \uicontrol {AO softness}, \uicontrol {AO dither}, and \uicontrol {AO bias}. - To add darkness (black) to the bottom half of the environment, force - the lighting to come predominantly from the top of the image, and - remove specific reflections from the lower half, increase the value - of the \uicontrol {Probe horizon} field. + \section1 Setting the Light Probe - To specify the image source field of view when using a camera source as - the light probe, set the angle in the \uicontrol {Probe FOV} field. + In the \uicontrol {Light Probe} section of the \uicontrol Properties view, + you can set the \uicontrol Image, \uicontrol Exposure, \uicontrol Horizon, + and \uicontrol Orientation properties for image-based lighting. + + \image studio-3d-scene-environment-light-probe.png "The Light Probe properties" + + The \uicontrol Image property defines an image used to light the scene + instead of or in addition to standard lights. The image is preferably a + high-dynamic range image or a pre-generated cubemap. Pre-baking provides + significant performance improvements at run time because no time is spent on + filtering and mipmap generation. If the source is a .hdr or other image, + the GPU-based pre-processing happens at run time after loading the image + file, which can be potentially time consuming, in particular on embedded and + mobile hardware. Therefore, it is strongly recommended that applications + pre-process .hdr images at latest at build time, as described here. + + \note In Qt 6, using a \uicontrol Texture component with \uicontrol Image > + \uicontrol Source is not supported in combination with this property. + Pre-filtering of all mip levels for dynamic Qt Quick content is typically not + reasonable in practice due to performance implications. In Qt 5, the + \uicontrol Image property is referred to as \uicontrol {Light probe}, which + defines a texture for overriding or setting an image based lighting texture + for use with the skybox of the scene. + + The \uicontrol Exposure property modifies the amount of light emitted by the + light probe. + + When defined with increasing values, the \uicontrol Horizon property adds + darkness (black) to the bottom half of the environment, thus forcing the + lighting to come predominantly from the top of the image (and removing + specific reflections from the lower half). This property is useful for + accounting for a ground plane that would have the effect of obscuring the + reflection of the light probe from the ground. This is necessary because + light probe contributions come directily from the image without consideration + for the content of the scene. You can set the value of the + \uicontrol Horizon property between 0.0 and 1.0. Using the default value of + the property applies the entire light probe without adjustment. + \note The \uicontrol Horizon property only affects materials lighting and + has no effect on the rendering of the sky box. + \note In Qt 5, the \uicontrol Horizon property is referred to as + \uicontrol {Probe horizon}. + + The \uicontrol Orientation property defines the orientation of the light + probe. Orientation is defined in terms of euler angles in degrees over the + x, y, and z axes. + + \section2 Additional Light Probe Properties in Qt 5 + + The \uicontrol {Probe Brightness} property modifies the amount of light + emitted by the light probe. + + When the \uicontrol {Fast IBL} (Fast image-based lighting) property is + enabled, more shortcuts are taken to approximate the light contribution of + the light probe at the expense of quality. + + The value of the \uicontrol {Probe FOV} property sets the angle of the + image source field of view when using a camera source as the IBL probe. */ From ea1655881d078d051049ec40c2562db90056a931 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 20 Oct 2021 12:04:31 +0200 Subject: [PATCH 05/39] CMake build: Force -fPIC for static libraries on UNIX Usually that is done by Qt, but not if reduce_relocations is off. Fixes: QTCREATORBUG-26435 Change-Id: Idd337d59555fd6e732215b9c753820672f63c91f Reviewed-by: Qt CI Bot Reviewed-by: Christophe Giboudeaux Reviewed-by: Cristian Adam --- cmake/QtCreatorAPI.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 4496c17ef52..7484f784502 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -203,6 +203,11 @@ function(add_qtc_library name) set(TEST_DEFINES WITH_TESTS SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}") endif() + if(_arg_STATIC AND UNIX) + # not added by Qt if reduce_relocations is turned off for it + set_target_properties(${name} PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() + extend_qtc_target(${name} INCLUDES ${_arg_INCLUDES} PUBLIC_INCLUDES ${_arg_PUBLIC_INCLUDES} From d7c7089ff3ff2877fe89ac09cc2afa9a3da041c0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 20 Oct 2021 11:41:38 +0200 Subject: [PATCH 06/39] ClangCodeModel: Restart clangd fallback client ... on fallback project part change. Change-Id: Icfc355443b4d6bb3c94eae27c2d23bbd9f681211 Reviewed-by: David Schulz --- .../clangmodelmanagersupport.cpp | 6 +++++ src/plugins/cppeditor/cppmodelmanager.cpp | 24 ++++++++++++------- src/plugins/cppeditor/cppmodelmanager.h | 1 + 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index d1c6b0d0ce3..c06d8a8fff7 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -134,6 +134,12 @@ ClangModelManagerSupport::ClangModelManagerSupport() this, &ClangModelManagerSupport::onProjectPartsUpdated); connect(modelManager, &CppEditor::CppModelManager::projectPartsRemoved, this, &ClangModelManagerSupport::onProjectPartsRemoved); + connect(modelManager, &CppModelManager::fallbackProjectPartUpdated, this, [this] { + if (ClangdClient * const fallbackClient = clientForProject(nullptr)) { + LanguageClientManager::shutdownClient(fallbackClient); + claimNonProjectSources(createClient(nullptr, {})); + } + }); auto *sessionManager = ProjectExplorer::SessionManager::instance(); connect(sessionManager, &ProjectExplorer::SessionManager::projectAdded, diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index 4ddd690b42a..b87e1098da1 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -196,6 +196,7 @@ public: bool m_enableGC; QTimer m_delayedGcTimer; + QTimer m_fallbackProjectPartTimer; // Refactoring using REHash = QMap; @@ -692,12 +693,16 @@ CppModelManager::CppModelManager() connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, this, &CppModelManager::onCoreAboutToClose); - connect(KitManager::instance(), &KitManager::kitsChanged, this, - &CppModelManager::setupFallbackProjectPart); - connect(this, &CppModelManager::projectPartsRemoved, this, - &CppModelManager::setupFallbackProjectPart); - connect(this, &CppModelManager::projectPartsUpdated, this, - &CppModelManager::setupFallbackProjectPart); + d->m_fallbackProjectPartTimer.setSingleShot(true); + d->m_fallbackProjectPartTimer.setInterval(5000); + connect(&d->m_fallbackProjectPartTimer, &QTimer::timeout, + this, &CppModelManager::setupFallbackProjectPart); + connect(KitManager::instance(), &KitManager::kitsChanged, + &d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start)); + connect(this, &CppModelManager::projectPartsRemoved, + &d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start)); + connect(this, &CppModelManager::projectPartsUpdated, + &d->m_fallbackProjectPartTimer, qOverload<>(&QTimer::start)); setupFallbackProjectPart(); qRegisterMetaType("CPlusPlus::Document::Ptr"); @@ -1581,8 +1586,11 @@ void CppModelManager::setupFallbackProjectPart() } const auto part = ProjectPart::create({}, rpp, {}, {}, {}, langExtensions, {}, tcInfo); - QMutexLocker locker(&d->m_fallbackProjectPartMutex); - d->m_fallbackProjectPart = part; + { + QMutexLocker locker(&d->m_fallbackProjectPartMutex); + d->m_fallbackProjectPart = part; + } + emit fallbackProjectPartUpdated(); } void CppModelManager::GC() diff --git a/src/plugins/cppeditor/cppmodelmanager.h b/src/plugins/cppeditor/cppmodelmanager.h index 3a05368e15a..e6dc746a1f1 100644 --- a/src/plugins/cppeditor/cppmodelmanager.h +++ b/src/plugins/cppeditor/cppmodelmanager.h @@ -263,6 +263,7 @@ signals: const QString &sourcePath, const QByteArray &contents); void abstractEditorSupportRemoved(const QString &filePath); + void fallbackProjectPartUpdated(); public slots: void updateModifiedSourceFiles(); From c3cee4041190ddd90c35517e21cddcc53a3b863a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 21 Oct 2021 12:15:57 +0200 Subject: [PATCH 07/39] QmakeProjectManager: Do not leak QmakeEvalResults Fixes: QTCREATORBUG-26326 Change-Id: I2a4abf86e9dd607bf7a0bf0843b0c9bff943d704 Reviewed-by: Qt CI Bot Reviewed-by: Jarek Kobus --- .../qmakeprojectmanager/qmakeparsernodes.cpp | 24 +++++++++---------- .../qmakeprojectmanager/qmakeparsernodes.h | 10 ++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp index b9c048764ed..95b634a8f36 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.cpp @@ -1194,7 +1194,7 @@ QmakeProFile::~QmakeProFile() void QmakeProFile::setupFutureWatcher() { - m_parseFutureWatcher = new QFutureWatcher; + m_parseFutureWatcher = new QFutureWatcher; QObject::connect(m_parseFutureWatcher, &QFutureWatcherBase::finished, [this]() { applyAsyncEvaluate(true); }); @@ -1292,10 +1292,10 @@ void QmakeProFile::asyncUpdate() m_readerExact->setExact(false); m_parseFutureWatcher->waitForFinished(); QmakeEvalInput input = evalInput(); - QFuture future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(), - QThread::LowestPriority, - &QmakeProFile::asyncEvaluate, - this, input); + QFuture future = Utils::runAsync(ProjectExplorerPlugin::sharedThreadPool(), + QThread::LowestPriority, + &QmakeProFile::asyncEvaluate, + this, input); m_parseFutureWatcher->setFuture(future); } @@ -1375,9 +1375,9 @@ static bool evaluateOne(const QmakeEvalInput &input, ProFile *pro, return true; } -QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) +QmakeEvalResultPtr QmakeProFile::evaluate(const QmakeEvalInput &input) { - auto *result = new QmakeEvalResult; + QmakeEvalResultPtr result(new QmakeEvalResult); QtSupport::ProFileReader *exactBuildPassReader = nullptr; QtSupport::ProFileReader *cumulativeBuildPassReader = nullptr; ProFile *pro; @@ -1635,10 +1635,9 @@ QmakeEvalResult *QmakeProFile::evaluate(const QmakeEvalInput &input) return result; } -void QmakeProFile::asyncEvaluate(QFutureInterface &fi, QmakeEvalInput input) +void QmakeProFile::asyncEvaluate(QFutureInterface &fi, QmakeEvalInput input) { - QmakeEvalResult *evalResult = evaluate(input); - fi.reportResult(evalResult); + fi.reportResult(evaluate(input)); } void QmakeProFile::applyAsyncEvaluate(bool apply) @@ -1653,9 +1652,8 @@ bool sortByParserNodes(Node *a, Node *b) return a->filePath() < b->filePath(); } -void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult) +void QmakeProFile::applyEvaluate(const QmakeEvalResultPtr &result) { - QScopedPointer result(evalResult); if (!m_readerExact) return; @@ -1664,7 +1662,7 @@ void QmakeProFile::applyEvaluate(QmakeEvalResult *evalResult) return; } - foreach (const QString &error, evalResult->errors) + foreach (const QString &error, result->errors) QmakeBuildSystem::proFileParseError(error, filePath()); // we are changing what is executed in that case diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 9a4a22690e2..a894a11cc4c 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -116,6 +116,7 @@ namespace Internal { Q_DECLARE_LOGGING_CATEGORY(qmakeNodesLog) class QmakeEvalInput; class QmakeEvalResult; +using QmakeEvalResultPtr = std::shared_ptr; // FIXME: Use unique_ptr once we require Qt 6 class QmakePriFileEvalResult; } // namespace Internal; @@ -358,10 +359,11 @@ private: void setupReader(); Internal::QmakeEvalInput evalInput() const; - static Internal::QmakeEvalResult *evaluate(const Internal::QmakeEvalInput &input); - void applyEvaluate(Internal::QmakeEvalResult *parseResult); + static Internal::QmakeEvalResultPtr evaluate(const Internal::QmakeEvalInput &input); + void applyEvaluate(const Internal::QmakeEvalResultPtr &parseResult); - void asyncEvaluate(QFutureInterface &fi, Internal::QmakeEvalInput input); + void asyncEvaluate(QFutureInterface &fi, + Internal::QmakeEvalInput input); void cleanupProFileReaders(); void updateGeneratedFiles(const Utils::FilePath &buildDir); @@ -400,7 +402,7 @@ private: QMap m_wildcardDirectoryContents; // Async stuff - QFutureWatcher *m_parseFutureWatcher = nullptr; + QFutureWatcher *m_parseFutureWatcher = nullptr; QtSupport::ProFileReader *m_readerExact = nullptr; QtSupport::ProFileReader *m_readerCumulative = nullptr; }; From bd4393a72c4ca82ba21f103e25b4c6a51bac4b97 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 21 Oct 2021 10:42:14 +0200 Subject: [PATCH 08/39] ProjectExplorer: use logging rules for debug output Change-Id: Ia99286182cf75eedab920695f3186ca00100ae73 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/msvctoolchain.cpp | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 691bb82eed4..f2b92c55527 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -67,7 +68,7 @@ static const char varsBatKeyC[] = KEY_ROOT "VarsBat"; static const char varsBatArgKeyC[] = KEY_ROOT "VarsBatArg"; static const char environModsKeyC[] = KEY_ROOT "environmentModifications"; -enum { debug = 0 }; +static Q_LOGGING_CATEGORY(Log, "qtc.projectexplorer.toolchain.msvc", QtWarningMsg); namespace ProjectExplorer { namespace Internal { @@ -754,16 +755,6 @@ void MsvcToolChain::environmentModifications( outEnv.set(envIter.key(), expandedValue); } - if (debug) { - const QStringList newVars = outEnv.toStringList(); - const QStringList oldVars = inEnv.toStringList(); - QDebug nsp = qDebug().nospace(); - foreach (const QString &n, newVars) { - if (!oldVars.contains(n)) - nsp << n << '\n'; - } - } - diff = inEnv.diff(outEnv, true); for (int i = diff.size() - 1; i >= 0; --i) { if (diff.at(i).name.startsWith(QLatin1Char('='))) { // Exclude "=C:", "=EXITCODE" @@ -794,9 +785,16 @@ void MsvcToolChain::updateEnvironmentModifications(Utils::EnvironmentItems modif { Utils::EnvironmentItem::sort(&modifications); if (modifications != m_environmentModifications) { + if (Log().isDebugEnabled()) { + qCDebug(Log) << "Update environment for " << displayName(); + for (const EnvironmentItem &item : qAsConst(modifications)) + qCDebug(Log) << '\t' << item; + } m_environmentModifications = modifications; rescanForCompiler(); toolChainUpdated(); + } else { + qCDebug(Log) << "No updates for " << displayName(); } } @@ -1138,8 +1136,7 @@ void MsvcToolChain::addToEnvironment(Utils::Environment &env) const { // We cache the full environment (incoming + modifications by setup script). if (!m_resultEnvironment.size() || env != m_lastEnvironment) { - if (debug) - qDebug() << "addToEnvironment: " << displayName(); + qCDebug(Log) << "addToEnvironment: " << displayName(); m_lastEnvironment = env; m_resultEnvironment = readEnvironmentSetting(env); } @@ -2103,8 +2100,7 @@ Utils::optional MsvcToolChain::generateEnvironmentSettings(const Utils: cmdPath = env.searchInPath(QLatin1String("cmd.exe")); // Windows SDK setup scripts require command line switches for environment expansion. CommandLine cmd(cmdPath, {"/E:ON", "/V:ON", "/c", saver.filePath().toUserOutput()}); - if (debug) - qDebug() << "readEnvironmentSetting: " << call << cmd.toUserOutput() + qCDebug(Log) << "readEnvironmentSetting: " << call << cmd.toUserOutput() << " Env: " << runEnv.size(); run.setCodec(QTextCodec::codecForName("UTF-8")); run.setCommand(cmd); From 6fd8336b7f9070c834c7cce49df97dae94a041d5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 15 Oct 2021 15:12:03 +0200 Subject: [PATCH 09/39] Wizards: Remove unused QtQuick.Controls-style preview thumbnails These were never used. And updated ones are upcoming with the new QDS application wizards. Change-Id: I998c3c0b8cfa3033d8be46524db3ed978738e729 Reviewed-by: Artem Sokolovskii Reviewed-by: Samuel Ghinet Reviewed-by: Alessandro Portale --- .../wizards/qtquickstyleicons/default.png | Bin 1974 -> 0 bytes .../wizards/qtquickstyleicons/default@2x.png | Bin 4833 -> 0 bytes .../wizards/qtquickstyleicons/material-dark.png | Bin 2495 -> 0 bytes .../qtquickstyleicons/material-dark@2x.png | Bin 6041 -> 0 bytes .../wizards/qtquickstyleicons/material-light.png | Bin 2869 -> 0 bytes .../qtquickstyleicons/material-light@2x.png | Bin 7147 -> 0 bytes .../wizards/qtquickstyleicons/universal-dark.png | Bin 2548 -> 0 bytes .../qtquickstyleicons/universal-dark@2x.png | Bin 5889 -> 0 bytes .../qtquickstyleicons/universal-light.png | Bin 2679 -> 0 bytes .../qtquickstyleicons/universal-light@2x.png | Bin 6195 -> 0 bytes .../jsonwizard/jsonwizard_test.cpp | 4 ++-- src/tools/iconlister/iconlister.cpp | 10 ---------- 12 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/default.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/default@2x.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/material-dark.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/material-dark@2x.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/material-light.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/material-light@2x.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark@2x.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/universal-light.png delete mode 100644 share/qtcreator/templates/wizards/qtquickstyleicons/universal-light@2x.png diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/default.png b/share/qtcreator/templates/wizards/qtquickstyleicons/default.png deleted file mode 100644 index fae98e3c53f5f88f298806ac4704fe3f167814eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1974 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 diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/material-dark.png b/share/qtcreator/templates/wizards/qtquickstyleicons/material-dark.png deleted file mode 100644 index bfea2f1fc159ff2ccda37e1eaf8cd1cd38253975..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2495 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 diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/material-light.png b/share/qtcreator/templates/wizards/qtquickstyleicons/material-light.png deleted file mode 100644 index e6f12fd3dad63b6118cbd8a3e12d802f1e9f45d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2869 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 VmpxtO!@$76;OXk;vd$@?2>|`v<{SV3 diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark.png b/share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark.png deleted file mode 100644 index 3648eb3d6b557b780c1b43c59c1533d4b5907c27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2548 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 W!J~~EoEaDx7(8A5T-G@yGywqkio6B@ diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark@2x.png b/share/qtcreator/templates/wizards/qtquickstyleicons/universal-dark@2x.png deleted file mode 100644 index 854f0d104082d7dd1d0812ede10d7d865f4e3ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5889 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL983%h4E%Q&&Sqc`JK^c#7*cWT?VaD%KIKfu zKmPSsJ7U`9wtLBKGbe$lvss=OgA$b$C$88Letqd9zt*kq99MTLiA?O+A-eD#r|UJ< zSJPM~o=BZE^UTwlZ|xj2Q-p4*^8T)~eLmgp+)T@KtIu`kzE__+8NZDAfc7K(8Wx7Q zjR`Xu76>XwFmQ-52L@+pP0C6a1aEKjba@fG|;J;=>mP3swLz64W;3if9 zohH_XgojtJyjk0?wA@$v;_l|>ud7<({!X92ck=Aw()U;7&i?rCyWs;1k(o3@TDN6pVKECJj6I0%64PVV=f-0Z= zna9$d@X$5u)4L_gM<;PzT2%Xrd)oEog*VGimZhfNzxF>`L3z@rIg>uu6{YOW_t@aD zAs~DM*LPE&4L)k;&6%B!x$%F>zy4*btdNjSQ|oori1qeOt{WUSaENh;9jxL!_$lMk z62|4rZD#G+vAz17?fQDtCf5xYG@7sOs{S%-uI5V5*T>nn7*$sMY}fnq@=QK|*J+(; zmztu}%XPUvt}XSvs9lg%6O?u8Txek3Szoou&woGEE?c(booAQy<)eSs-@dG$bhYow zl`C_-+jhhp|MG>eCvIZRyJv?d6|KG+Q}X}U$+!30epX-I^XbO6^Izo4mcP5X&FIeg z%UA9^-)w0=_uRSD=XY-T{JLRU=+DfTm-B<}{5$j7l6C3RX`3cB?a5Z(cD#?P;_y@E zj~Op7m!ElbWbyR(B2%VC>O6C=G}n{6Z&tp+zqrYDL!3~aOzp;lSy$74*1ril`gF&G zer5C2nR6%c9Ip5zX~FHM^J~f4*W9c}?-qDWJHu)_d$y0-&dcT-k6m5rcHeOakqs3{Y{Uqt@{`o9d>_T?1yJE%Tw$&8oZc% zvikFzQ0=%VsT+qj%(V&Yt}r;m2~~~+kJW~`@Z*gm-T+HmUmlY6Z~R|O7XGnjcZ?XPFwl1 z`Z2$lm)7Zs502eY?{9DV{^;}5Nq^J+JSYoYZuORZ-L43=lLqmgbIddjEZ=)wI{!DT zZ_od&H#ASq`MKWz)(+0FKf5OLzvVZskNS1>#6rcz$!YFCw;Rpe)1I>@Z)(WAxhB~K z*ZJbsMs0ulp|AdahwJXXH!~t^BW$0~Gri4KcXw;WnTEXj+}pcSUvHahCm~wC?119Q zy6VpX`4B${>3Dv-ecS!-*{AouZezY4yV-M7Y^?B;Q2z}+aa+!?etr|l{c#Lq|(X<4_dy@zQ!@_?YpO+XIiU$ zEx3EgIwg9YVx<1x-^uH%mam-kv;Cj(qUX}4$7cK1ESmIQdXlmFNBMg!-3fwg!c`*N z>Td1$o^6+PdC&1RlhZtxsxK@5xJEr<>fHjbY24mfBCF3XFT9>J>F1d{4ac?3Yx55s zWOCNBG}K;@y0-bFL z+3DUw>vxhtm2O`@>Ks&x$hdN_s-)nK_15iq@i)1muWdRo?JL{qD|rEb^2=5}`cyRC zc<#66$N9IGy0@$Ut_qvm>-w%zW95?{JoVefwtsC~= z^0&&de&UKMzN)s;Cj0OPzx~#ca=uafglA32o%|*|{A;%F1`e^f&V-x!YveC1`(~!g zJU#WMN_E+t<#AuxU!T12-hTBeUirQ4dHWtuD6B7caqnLqoqk*O_uAy>dY^*i-{;M} zR7ID#m6pf~S>>&H|2|E8_D|nC-w$Yd_C31TYPYNHe5c^`eT?(#B{$aue|l&f zx&58^)Z4OCi{F2HU3m4|>;yrbJt}hVd#pcr1YLaS`Tp8>oub)|_y0bdux7vBySt0R zHfZUE+qYLmH8)gBK0Pn46Wq-&o;J;Un|5}ST=~(*Zzpk~xzwYwYe@udKO!X7bWWw$+CZ zY*U+j^2x=_kWb9cqLJFaL#0)>$!{~gJ|X9Na8kP8+S^Y$?%k8qJ7_e2#>J)Y9)Hfc zUi+hIuK1_5{mBs%t1IgEm-(ODI%}VC*7MliD(ydyJ?#B_jPLE`xB2&SqfEZ8kZJ~% zx@`}ymR}9s{p8GDu}87rqs}rvo2xy&M=E>ofrOc}e)-w`@z|7J|GjeesgqxwoKv4a z`=0gC=;fAgvto_jz2$iQp{9JhefWlXC9Bl=!n}T~kYn(q9FRMA}$q8Snr{#pwraac4gcDS32D)H;ccY z=c~H?)cx7TL+KwbO=k7;y!QV{?Z0KOr|DZnEc+I(a%anGCGEtc_kR2RekQRe*3~Fv%BP={i@V;`w}YmN!wLt1-M`T`ys==Aa`15(Y?D? zXKtq$&78Hz{HMo8mDgK)o$puOI^4Jh3l_#@SInwd}DUEe=3e2>) z*3G@KIrZ?XsoDGQ&#E%oz2TGkOC6i7JKjs1Zm+(0(5RAi?Y^YRs`}dxB<|j1b>c7Q z{piDw)`#0&PuJfuMQp!L+Mg2>F09bx-haQ^?tIdVhx1PKotM=4KU4i|o2kC>+vB01 zm-p~-ch4~?KfLgbP8{>orlxvc@#Ka(wwvtIaw>l8xVgG)&ff6E^S5`~ zebk!#j-@-n^v8h)b+qQelrKf-Ajx7H-@$l2RIhF2WeD4ekJkxfj?B93IcY_g!*g>TT{moIj z_qZfPY}1eOcY0QTU#gmaUqswmcTfKFvQoc)Cb{?DURFGKF#gN?XK&N&R-TlOZE9m- z=l{9q`t5mF>wY&nH#Il6v;5pzSUvOnW$T254;L23^SpWZw?}i;GubM>zgpjRul20{ z{`U6fV(&YT>f645u3h|WpIP0L5g8OX~of`yxFxNfNX{z!b;x%KXjPNu)7 zyc2!(>HI5aP`y7np>@^!n6=*5k6NEHKb;j^xs!{#RMYwNw3W|S%dD{!S6TUi=b%zV zg>KVR^RUQ}FlSoS}EtHSWs zn_P+!EZqqU4Oy~(_(iH%PMx=ap@`W655 zn@ppurNcXvDJ6fyk{1@dl9h7Zv9uTf59U4LGI@=3VUh}i)?c|{(i-c zRiBLR{s`Tic4~drS;mcCI~TR5uG+Bj$3njM*A_&rzgFEi>D-GCg}yU1?g!Lv3pp8C zl`!qFZV@;%|5eqS5aK|v(xhv1a(Z#S+3b=e_HY6 zh1R*RzS=A|7M?msdGRZ$MTsXOzsg@@pY?fb_J%Z#(`uGeWtQK#yh&ox$CBvCsXJWi z5~b#^N_ze{yn4}(S%((K#JzpLIz;2-nxn>|ll6+Ps$GpY$XvS1E`5Vr=Eum;kla@_ zRUW%$EZW}=Y8@OC*V$j_wd?zj_F0n`UVJ>?lx@zEc(2e&t6O@d%mNu7zA_D)T=udt zb`qEI*US~O6J)IyKMGP^cXj#2UkPg#36-pNnv}D1)^5+AZJ+eBF7bTryQCg0TJBlq zd8sw`)ib>a>%LWIE^J-g_0MguvgnVgYI)c4!#sm_hMleHOX$6_hsRRYvZSov%_nfZ z$Jf~lcYNODS@i0;MJXtK_v%LMJAC!CwCs-f(yGMEH*2{hgUcVNX_w7qI(%o&%A2Y) zP1A$cCU|bjdTcZOf=kue`Nx8|?0{P;%as{k`bALGOh*Jd%@i-2($b>Fp!y>GBa*Xyynm4UrUZDWcPd%@tBlz%VPVrvtqkL6eW+&vb*NH zf$My>!;IOrGb%#(JeSV0-FPp-_0{p+lcr35m-ga%a^Jd}s_onKKxId-QN&d5^_gA! zHN3Cp^r?myFSC2!y5Ekw^rn{Nt>5|P2d#E~eEH|sWXGGYq$j29UOjQ^v+KW)t@H@m zDdxXYRL8k``qhp9xl500N_usz)sMKF{&JOXkyd8sZ0+W{$0Z9qCK;LkpBSik-?^!k zjVtV_kcGE(-ibg^zNGT(|E#fl*C%CPU9xpy?dfdR)m4sJXZ5DW zg#3?MZYi&K(bjoW*3T%*&TvRzcaG z*PjY`p7L91`AP+puk|AK9eygkOmOy;?CDFoVthNwWuV``b)K0?%H|jUm_={D z;+Xc@;^WKvffo9nt?6G2-xe=*Jym#3P-pWqpEZx04phkMO9G4+$2BdtKED0y*#6A4=b=%DHFZXQivR)F;y-JSR=Mww*&pL@a{*`)8{eCh^F5|sj?e4JPu&kSMb5Blo z-Zjl<1BaN@{Rst6TbGx2T}#lta?R9K{d%?jm7Pl0zs}h;W7z|Vxkch@PM5N0hb`k- z`JiWaLhb6?eOAp|GnPG@AF%Uvo^+V3XUO}2@8#8^SL%LP266YTzVhR>6VeQMolO51LKc`EE$_ zoshr6Zr)PSOsfeCn~#fp-`jTOTxvnrr! zeDy^Ae;1|9f)$Og>Q4eU5D+yzXejZZQiKk;?I5Tl0BSpc8VI239%MMA^xl@Ln>~)y~P<2oX&LM zqZp^Vf`F69Az98QhmEHu8*^$ot>x+pSnIX3@cQN*p(~=cZPnfK?L)@aX?d@sR$2GG z`zBGE#ecKxh||IDsz;3z9E>i{JeOBK_vMX6Wr~Ud1-ozGjY>c9=f80JiPP3ID)(33 zpYH!I(*KKgiT`_hUrt+^((jSxp?HKyH~x8%lOIPKDYAy%TLSi+ve_@z2Q;H$pb|t5#_cC zmLhB3E!%!wZ+*qv1Iw+i+Zox~CZD?$&KJMs&a*c2@bwYl*OPWd?cbYpbl3L%Z??%+ zZ>_t%>Yo3sYV(r0mOC{}zB zp3kqV%ZyrZLcR90;pC@gzg4cA%seB@F5f#zZB71*`HM?sbo#@V<=UjZ`c-tAr@k}o z*eUVtIT6$39*M^NSYG_>pD>qk`myZidcWRwg@3y)no*;a7M^!&*Uyq`Q~-{mq-V?Ok2?*p~DUz`?SJ^ORlPObM}bk*M`%;fzl`gl*v zs`I+)J3htT%t*Z^z5HzY{~3#e(yq?iWVNFx;blbTt8U%BO49R0?i?x1e#JZO`0ao9 zd%pSIuelW0y>ac^qW{&GKb{SKnmp~@elDGMX|8H{gSf)b`Q^NQ?w30KO-pVcG%A;^ zwF;EmzOMh&(Y-$xD)zt0G>*R)F0tgw)OG9DYzT=AT=O+}`ri7j{#kQWer@#Uxh6dC z?$&^}&&1>ZTw+&W$2Y++#^Tqz*XRGNOL^D4tFSR{p=-51V>V0Ko2QW6ZAcdv09jI)CeY*3&t8wYj^Der>c}f1Xox-j6dGmCx4p zd=gpJcW2wYO6fKKgyZf072OZ#MNjj zr2c-I<(KEu#mcpJ?jDt!C*;rXA9`rguE~E_GxPfUg=A#2C0@;#+WC6zhMKMCc@Mmr z8!Osd_IB>tdQ*#eayO?)D~fv8{0Y(886p@Rb3My;p@Mvb!~Q?dgL-c`zgo@}pc!Jw zogLlt?A-n^|Il6Csb2N}H=OhiKX=V#%8fQB$91gNI+{}FzS%P0`r?%vmu_9Nd~&Z; znzwCTVt#eG0q^ZRvr)yME-7F3tz4q+bvtV(nUG<+@WX1iqn#{Mko+qr!!_clI#u;EkL&t0dU2A^q;_NxBU-N3pgo+JBU*-DS4Cw@Hp*8ki_xz@6CVT ze=ic=W8&Z9f73QCX4h#A-vd4Qx;nQGiR_znp>p3vY2`1k|1OEsJE;BlukfFiTOCJ) z{Kd=9??|?~ofo&bcyH6RmY3xjNy~Ry{rs_H%ggq|yCxcF9>1y@WcRSwL9N5H@_LWv1lK8yl+Eiq4>&j^(ebbX?Cyb z)-Ml#6nQ%E{&CKx&G*|nQ>WdX@@}z+X`$*h;~M=V>OGTmq{B@_!v6i{>Sx%$Qtfr? zmd)C>F~-MqcChNSN9OHVI=kLuEnj(2(8-{4U+i~z{TG|R(_MJG(@MY3U%r%e{|mXz zfBLxgN2mXdpSOF*E^6MqKKj0z?@ZNCakl%8?3%s(`H}T(%d&U9F-;0wmG)1!I^xz$ z?>k3=nOoDZ9x|SGy=dibHG|jI36?jku9Z6#?b^IK&iH*=R$=!o`wLgiwH+!$FEJ#C~Y&@3u;KX8QJv>$*pKW-z_}w(dm2&bz{|(+^Fm=*i!9_I94C z-#pb%8vE84oCsJkKlrJl7vJpLhqpVqH!rQvaNn>&U+?{_eQ%cS+o4@nb4g?Sn~jzB zS<9#I+?CdHe)qlYHNPHc>6?H5FFWnV$>ct@=kn7E%hr3n((U`}W1aIUuE-`tuTc6g z`@#=t_w|EI4AU+h?>tb%67hN4X`3V8?`anadCr;RvRFlOq4EB0cRm@;mrF(t1`+^gpPbK%-b4K(TiQKy&Iz#ALxteI5c}eCL_u2VACw`~j zKX&Q;*VJwL*|qlkYs$X8@LqR&?_bCGs^o;wL)Jex?fVjSsp;I2rq|BvBC^Ump8lV* zrBe3eXJ1WKb4f1QlD^X8)2{zc@Z9?LPbu?;2G%u#45tNF-xaVs%%PL;vAqtx1bDgu z)Ig$L*`vcG1}dajpf<4RfD1V=mEm$wY1iYw+@95Q`F`KwJ<7nqz~JfX=d#Wzp$PzX CvHy?& diff --git a/share/qtcreator/templates/wizards/qtquickstyleicons/universal-light@2x.png b/share/qtcreator/templates/wizards/qtquickstyleicons/universal-light@2x.png deleted file mode 100644 index 314a98117f00060c885f6d344648214252844920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6195 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 Date: Tue, 19 Oct 2021 13:08:01 +0200 Subject: [PATCH 10/39] Update details about LLVM/Clang in acknowledgments LLVM moved to github a while ago - the old svn repositories are dead. Furthermore, (almost) all of the code is now under the "Apache 2.0 with LLVM Exception" main license (see also https://foundation.llvm.org/docs/relicensing/) Change-Id: I8319f8479357c6182c5bf78b1ee7fe202e666980 Reviewed-by: Eike Ziller --- README.md | 4 ++-- .../src/overview/creator-acknowledgements.qdoc | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ba4f1c30c3b..d7a702f3d7d 100644 --- a/README.md +++ b/README.md @@ -304,8 +304,8 @@ we thank the authors who made this possible: Copyright (C) 2003-2019 LLVM Team - Distributed under the University of Illinois/NCSA Open Source License (NCSA), - see https://github.com/llvm/llvm-project/blob/master/llvm/LICENSE.TXT + Distributed under the Apache 2.0 License with LLVM exceptions, + see https://github.com/llvm/llvm-project/blob/main/clang/LICENSE.TXT With backported/additional patches from https://code.qt.io/clang/llvm-project.git diff --git a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc index 226160d7695..4ec9eb9ea26 100644 --- a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc +++ b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc @@ -372,16 +372,12 @@ \li \b{LLVM/Clang} - \list - \li \l{https://llvm.org/svn/llvm-project/llvm} - \li \l{https://llvm.org/svn/llvm-project/cfe/trunk} - \li \l{https://llvm.org/svn/llvm-project/clang-tools-extra/trunk} - \endlist + \l{https://github.com/llvm/llvm-project/} Copyright (C) 2003-2019 LLVM Team - Distributed under the \l {https://github.com/llvm-mirror/llvm/blob/master/LICENSE.TXT} - {University of Illinois/NCSA Open Source License (NCSA)}. + Distributed under the \l {https://github.com/llvm/llvm-project/blob/main/llvm/LICENSE.TXT} + {Apache 2.0 License with LLVM exceptions}. With backported/additional patches from \list From 75bdc64d44a6b2b657d593b0f22c83f38848214b Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 20 Oct 2021 14:29:38 +0200 Subject: [PATCH 11/39] Doc: Move images that only appear in QDS Manual ...from doc/qtcreator/images to doc/qtdesignstudio/images Change-Id: Iaa49fbb4d620a833edd41b97874aad631b7c25b5 Reviewed-by: Johanna Vanhatapio --- .../images/keyframe_linear_inactive.png | Bin .../images/keyframe_manualbezier_inactive.png | Bin .../images/navigator.png | Bin .../images/qml-shapes-rectangle.png | Bin .../images/qml-shapes.png | Bin .../images/qml-translate.png | Bin .../images/qmldesigner-alignment.png | Bin .../images/qmldesigner-anchor-buttons.png | Bin .../images/qmldesigner-anchors.png | Bin .../images/qmldesigner-binding-editor.png | Bin .../images/qmldesigner-bindings.png | Bin .../images/qmldesigner-boolean-false-blue.png | Bin .../images/qmldesigner-boolean-false.png | Bin .../images/qmldesigner-boolean-true-blue.png | Bin .../images/qmldesigner-boolean-true.png | Bin .../images/qmldesigner-borderimage-bindings.png | Bin .../images/qmldesigner-borderimage-bindings1.png | Bin .../images/qmldesigner-borderimage-states.png | Bin .../images/qmldesigner-borderimage-type.png | Bin .../images/qmldesigner-borderimage.png | Bin .../images/qmldesigner-breadcrumbs.png | Bin .../images/qmldesigner-button.png | Bin .../images/qmldesigner-canvas-color.png | Bin .../images/qmldesigner-connections.png | Bin .../images/qmldesigner-dynamicprops.png | Bin .../images/qmldesigner-editing-components.png | Bin .../images/qmldesigner-element-properties.png | Bin .../images/qmldesigner-element-size.png | Bin .../images/qmldesigner-export-item.png | Bin .../images/qmldesigner-extensions.png | Bin .../images/qmldesigner-form-editor-move-cursor.png | Bin .../images/qmldesigner-form-editor.png | Bin .../images/qmldesigner-implement-signal-handler.png | Bin .../images/qmldesigner-inline-editing.png | Bin .../images/qmldesigner-mcu-support.png | Bin .../images/qmldesigner-merge-with-template.png | Bin .../images/qmldesigner-navigator-arrows.png | Bin .../images/qmldesigner-navigator.png | Bin .../images/qmldesigner-new-project.png | Bin .../qmldesigner-only-select-items-with-content.png | Bin .../images/qmldesigner-pathview-editor.png | Bin .../images/qmldesigner-preview-size.png | Bin .../images/qmldesigner-properties-explicit-base.png | Bin .../qmldesigner-properties-explicit-state1.png | Bin .../images/qmldesigner-properties-view.png | Bin .../images/qmldesigner-qml-components.png | Bin .../images/qmldesigner-screen-design.png | Bin .../images/qmldesigner-set-expression.png | Bin .../images/qmldesigner-snap-margins.png | Bin .../images/qmldesigner-states-when-condition.png | Bin .../images/qmldesigner-states.png | Bin .../images/qmldesigner-text-property-tr.png | Bin .../qmldesigner-transition-editor-startup.png | Bin .../images/qmldesigner-transitions.png | Bin .../images/qmldesigner-tutorial-bindings.png | Bin .../images/qmldesigner-tutorial-connections.png | Bin .../images/qmldesigner-tutorial-easing-curves.png | Bin .../images/qmldesigner-tutorial-page-component.png | Bin .../images/qmldesigner-tutorial-states.png | Bin .../qmldesigner-tutorial-topleftrect-layout.png | Bin .../images/qmldesigner-tutorial-topleftrect.png | Bin .../qmldesigner-tutorial-transition-settings.png | Bin .../images/qmldesigner-tutorial-transitions.png | Bin .../images/qmldesigner-tutorial-ui-ready.png | Bin .../images/qmldesigner-tutorial-user-icon.png | Bin .../images/qmldesigner-tutorial.png | Bin .../images/qmldesigner-zooming.gif | Bin .../images/qtcreator-reset-position-icon.png | Bin .../images/qtcreator-reset-size-icon.png | Bin .../images/qtquick-annotation-editor.png | Bin .../images/qtquick-annotations.png | Bin .../images/qtquick-assets-tab.png | Bin .../images/qtquick-color-animation.gif | Bin .../images/qtquick-components-custom.png | Bin .../images/qtquick-components-tab-add.png | Bin .../images/qtquick-components-tab.png | Bin .../images/qtquick-connection-editor-action.png | Bin .../images/qtquick-connection-editor-assignment.png | Bin .../images/qtquick-custom-properties.png | Bin .../qtquick-designer-abstract-button-properties.png | Bin .../qtquick-designer-animated-image-properties.png | Bin .../qtquick-designer-border-image-properties.png | Bin .../images/qtquick-designer-button-properties.png | Bin .../images/qtquick-designer-button-types.png | Bin .../images/qtquick-designer-color-details.png | Bin .../images/qtquick-designer-color-palette.png | Bin .../images/qtquick-designer-color-picker.png | Bin .../images/qtquick-designer-combobox-properties.png | Bin .../images/qtquick-designer-control-properties.png | Bin .../images/qtquick-designer-dial-properties.png | Bin .../images/qtquick-designer-edit-list-model.png | Bin .../images/qtquick-designer-flickable-geometry.png | Bin .../qtquick-designer-flickable-properties.png | Bin .../images/qtquick-designer-gradient-picker.png | Bin ...qtquick-designer-gradient-properties-conical.png | Bin .../qtquick-designer-gradient-properties-linear.png | Bin .../qtquick-designer-gradient-properties-radial.png | Bin .../images/qtquick-designer-gradient-stops.gif | Bin .../images/qtquick-designer-gradient-types.png | Bin .../images/qtquick-designer-gridview-properties.png | Bin .../images/qtquick-designer-image-properties.png | Bin .../images/qtquick-designer-image-type.png | Bin .../images/qtquick-designer-indicator-types.png | Bin ...quick-designer-listview-highlight-properties.png | Bin .../images/qtquick-designer-listview-preview.png | Bin .../images/qtquick-designer-listview-properties.png | Bin .../images/qtquick-designer-navigator-arrange.gif | Bin .../images/qtquick-designer-navigator-lock.gif | Bin .../images/qtquick-designer-options.png | Bin .../images/qtquick-designer-pathview-properties.png | Bin .../qtquick-designer-progressbar-properties.png | Bin .../images/qtquick-designer-properties-font.png | Bin .../qtquick-designer-qtquickcontrols-types.png | Bin .../qtquick-designer-range-slider-properties.png | Bin .../images/qtquick-designer-rotating-items.png | Bin .../qtquick-designer-round-button-properties.png | Bin .../images/qtquick-designer-scaling-items.png | Bin .../images/qtquick-designer-selector-types.png | Bin .../images/qtquick-designer-stacked-view.png | Bin .../images/qtquick-designer-style-list.png | Bin .../images/qtquick-designer-tabbar-properties.png | Bin .../qtquick-designer-text-edit-properties.png | Bin .../qtquick-designer-text-input-properties.png | Bin .../images/qtquick-designer-text-properties.png | Bin .../images/qtquick-designer-toolbar-properties.png | Bin .../images/qtquick-designer-tumbler-properties.png | Bin .../images/qtquick-item-properties-advanced.png | Bin .../images/qtquick-item-properties-common.png | Bin .../images/qtquick-item-properties-layer.png | Bin .../images/qtquick-layout-grid-properties.png | Bin .../images/qtquick-library-context-menu-hide.png | Bin .../images/qtquick-library-context-menu.png | Bin .../qtquick-mobile-app-tutorial-binding-editor.png | Bin .../qtquick-mobile-app-tutorial-binding-editor1.png | Bin ...qtquick-mobile-app-tutorial-bubble-component.png | Bin ...tquick-mobile-app-tutorial-custom-properties.png | Bin .../images/qtquick-mobile-app-tutorial-image.png | Bin .../qtquick-mobile-app-tutorial-main-view.png | Bin .../images/qtquick-number-animation.gif | Bin .../images/qtquick-positioner-column-properties.png | Bin .../images/qtquick-positioner-flow-properties.png | Bin .../images/qtquick-positioner-grid-properties.png | Bin .../images/qtquick-properties-2D-geometry.png | Bin .../images/qtquick-properties-advanced.png | Bin .../images/qtquick-properties-animation.png | Bin .../images/qtquick-properties-busy-indicator.png | Bin .../images/qtquick-properties-check-box.png | Bin .../images/qtquick-properties-coloranimation.png | Bin .../images/qtquick-properties-font-extras.png | Bin ...quick-properties-mouse-area-accepted-buttons.png | Bin .../images/qtquick-properties-mouse-area-drag.png | Bin .../images/qtquick-properties-mouse-area.png | Bin .../images/qtquick-properties-numberanimation.png | Bin .../images/qtquick-properties-page-indicator.png | Bin .../images/qtquick-properties-propertyaction.png | Bin .../images/qtquick-properties-text-extras.png | Bin .../images/qtquick-properties-text-field.png | Bin .../images/qtquick-properties-text-padding.png | Bin .../images/qtquick-properties-visibility.png | Bin .../images/qtquick-property-action.gif | Bin .../images/qtquick-qml-export-dialog.png | Bin .../images/qtquick-rtf-editor.png | Bin .../images/qtquick-states-binding-editor-not.png | Bin .../images/qtquick-states-binding-editor.png | Bin .../images/qtquick-text-editor.png | Bin .../images/qtquick-text-rtf.gif | Bin .../images/qtquick-transition-editor-settings.png | Bin .../images/qtquick-transition-editor-view.png | Bin .../images/qtquickcontrols2-busyindicator.gif | Bin .../images/qtquickcontrols2-button-flat.gif | Bin .../images/qtquickcontrols2-button-highlighted.gif | Bin .../images/qtquickcontrols2-button.gif | Bin .../images/qtquickcontrols2-checkbox-tristate.gif | Bin .../images/qtquickcontrols2-checkbox.gif | Bin .../images/qtquickcontrols2-checkdelegate.gif | Bin .../images/qtquickcontrols2-combobox.gif | Bin .../images/qtquickcontrols2-delaybutton.gif | Bin .../images/qtquickcontrols2-dial-no-wrap.gif | Bin .../qtquickcontrols2-progressbar-indeterminate.gif | Bin .../images/qtquickcontrols2-progressbar.gif | Bin .../images/qtquickcontrols2-radiobutton.gif | Bin .../images/qtquickcontrols2-radiodelegate.gif | Bin .../images/qtquickcontrols2-rangeslider.gif | Bin .../images/qtquickcontrols2-slider.gif | Bin .../images/qtquickcontrols2-spinbox.png | Bin .../images/qtquickcontrols2-switch.gif | Bin .../images/qtquickcontrols2-switchdelegate.gif | Bin .../images/qtquickcontrols2-tabbar-flickable.png | Bin .../images/qtquickcontrols2-tabbar.gif | Bin .../images/qtquickcontrols2-toolbar.png | Bin .../images/qtquickcontrols2-tumbler-wrap.gif | Bin .../images/studio-curve-editor.png | Bin .../images/studio-easing-curve-editor.png | Bin .../images/studio-edit-keyframe.png | Bin .../images/studio-iso-icon.png | Bin .../images/studio-timeline-empty.png | Bin .../studio-timeline-keyframe-track-colors.png | Bin .../images/studio-timeline-no-tracks.png | Bin .../images/studio-timeline-settings.png | Bin .../images/studio-timeline-with-empty-tracks.png | Bin .../images/studio-timeline-with-tracks.png | Bin .../images/studio-timeline.png | Bin .../images/timeline-rotation-animation.gif | Bin 203 files changed, 0 insertions(+), 0 deletions(-) rename doc/{qtcreator => qtdesignstudio}/images/keyframe_linear_inactive.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/keyframe_manualbezier_inactive.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/navigator.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qml-shapes-rectangle.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qml-shapes.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qml-translate.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-alignment.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-anchor-buttons.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-anchors.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-binding-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-bindings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-boolean-false-blue.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-boolean-false.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-boolean-true-blue.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-boolean-true.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-borderimage-bindings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-borderimage-bindings1.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-borderimage-states.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-borderimage-type.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-borderimage.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-breadcrumbs.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-button.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-canvas-color.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-connections.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-dynamicprops.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-editing-components.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-element-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-element-size.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-export-item.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-extensions.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-form-editor-move-cursor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-form-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-implement-signal-handler.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-inline-editing.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-mcu-support.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-merge-with-template.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-navigator-arrows.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-navigator.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-new-project.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-only-select-items-with-content.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-pathview-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-preview-size.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-properties-explicit-base.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-properties-explicit-state1.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-properties-view.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-qml-components.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-screen-design.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-set-expression.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-snap-margins.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-states-when-condition.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-states.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-text-property-tr.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-transition-editor-startup.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-transitions.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-bindings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-connections.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-easing-curves.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-page-component.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-states.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-topleftrect-layout.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-topleftrect.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-transition-settings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-transitions.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-ui-ready.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial-user-icon.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-tutorial.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qmldesigner-zooming.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtcreator-reset-position-icon.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtcreator-reset-size-icon.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-annotation-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-annotations.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-assets-tab.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-color-animation.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-components-custom.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-components-tab-add.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-components-tab.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-connection-editor-action.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-connection-editor-assignment.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-custom-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-abstract-button-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-animated-image-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-border-image-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-button-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-button-types.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-color-details.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-color-palette.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-color-picker.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-combobox-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-control-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-dial-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-edit-list-model.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-flickable-geometry.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-flickable-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-picker.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-properties-conical.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-properties-linear.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-properties-radial.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-stops.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gradient-types.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-gridview-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-image-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-image-type.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-indicator-types.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-listview-highlight-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-listview-preview.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-listview-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-navigator-arrange.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-navigator-lock.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-options.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-pathview-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-progressbar-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-properties-font.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-qtquickcontrols-types.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-range-slider-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-rotating-items.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-round-button-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-scaling-items.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-selector-types.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-stacked-view.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-style-list.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-tabbar-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-text-edit-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-text-input-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-text-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-toolbar-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-designer-tumbler-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-item-properties-advanced.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-item-properties-common.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-item-properties-layer.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-layout-grid-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-library-context-menu-hide.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-library-context-menu.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-binding-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-binding-editor1.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-bubble-component.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-custom-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-image.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-mobile-app-tutorial-main-view.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-number-animation.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-positioner-column-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-positioner-flow-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-positioner-grid-properties.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-2D-geometry.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-advanced.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-animation.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-busy-indicator.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-check-box.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-coloranimation.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-font-extras.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-mouse-area-accepted-buttons.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-mouse-area-drag.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-mouse-area.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-numberanimation.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-page-indicator.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-propertyaction.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-text-extras.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-text-field.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-text-padding.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-properties-visibility.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-property-action.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-qml-export-dialog.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-rtf-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-states-binding-editor-not.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-states-binding-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-text-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-text-rtf.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-transition-editor-settings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquick-transition-editor-view.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-busyindicator.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-button-flat.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-button-highlighted.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-button.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-checkbox-tristate.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-checkbox.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-checkdelegate.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-combobox.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-delaybutton.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-dial-no-wrap.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-progressbar-indeterminate.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-progressbar.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-radiobutton.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-radiodelegate.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-rangeslider.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-slider.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-spinbox.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-switch.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-switchdelegate.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-tabbar-flickable.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-tabbar.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-toolbar.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/qtquickcontrols2-tumbler-wrap.gif (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-curve-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-easing-curve-editor.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-edit-keyframe.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-iso-icon.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-empty.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-keyframe-track-colors.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-no-tracks.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-settings.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-with-empty-tracks.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline-with-tracks.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/studio-timeline.png (100%) rename doc/{qtcreator => qtdesignstudio}/images/timeline-rotation-animation.gif (100%) diff --git a/doc/qtcreator/images/keyframe_linear_inactive.png b/doc/qtdesignstudio/images/keyframe_linear_inactive.png similarity index 100% rename from doc/qtcreator/images/keyframe_linear_inactive.png rename to doc/qtdesignstudio/images/keyframe_linear_inactive.png diff --git a/doc/qtcreator/images/keyframe_manualbezier_inactive.png b/doc/qtdesignstudio/images/keyframe_manualbezier_inactive.png similarity index 100% rename from doc/qtcreator/images/keyframe_manualbezier_inactive.png rename to doc/qtdesignstudio/images/keyframe_manualbezier_inactive.png diff --git a/doc/qtcreator/images/navigator.png b/doc/qtdesignstudio/images/navigator.png similarity index 100% rename from doc/qtcreator/images/navigator.png rename to doc/qtdesignstudio/images/navigator.png diff --git a/doc/qtcreator/images/qml-shapes-rectangle.png b/doc/qtdesignstudio/images/qml-shapes-rectangle.png similarity index 100% rename from doc/qtcreator/images/qml-shapes-rectangle.png rename to doc/qtdesignstudio/images/qml-shapes-rectangle.png diff --git a/doc/qtcreator/images/qml-shapes.png b/doc/qtdesignstudio/images/qml-shapes.png similarity index 100% rename from doc/qtcreator/images/qml-shapes.png rename to doc/qtdesignstudio/images/qml-shapes.png diff --git a/doc/qtcreator/images/qml-translate.png b/doc/qtdesignstudio/images/qml-translate.png similarity index 100% rename from doc/qtcreator/images/qml-translate.png rename to doc/qtdesignstudio/images/qml-translate.png diff --git a/doc/qtcreator/images/qmldesigner-alignment.png b/doc/qtdesignstudio/images/qmldesigner-alignment.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-alignment.png rename to doc/qtdesignstudio/images/qmldesigner-alignment.png diff --git a/doc/qtcreator/images/qmldesigner-anchor-buttons.png b/doc/qtdesignstudio/images/qmldesigner-anchor-buttons.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-anchor-buttons.png rename to doc/qtdesignstudio/images/qmldesigner-anchor-buttons.png diff --git a/doc/qtcreator/images/qmldesigner-anchors.png b/doc/qtdesignstudio/images/qmldesigner-anchors.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-anchors.png rename to doc/qtdesignstudio/images/qmldesigner-anchors.png diff --git a/doc/qtcreator/images/qmldesigner-binding-editor.png b/doc/qtdesignstudio/images/qmldesigner-binding-editor.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-binding-editor.png rename to doc/qtdesignstudio/images/qmldesigner-binding-editor.png diff --git a/doc/qtcreator/images/qmldesigner-bindings.png b/doc/qtdesignstudio/images/qmldesigner-bindings.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-bindings.png rename to doc/qtdesignstudio/images/qmldesigner-bindings.png diff --git a/doc/qtcreator/images/qmldesigner-boolean-false-blue.png b/doc/qtdesignstudio/images/qmldesigner-boolean-false-blue.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-boolean-false-blue.png rename to doc/qtdesignstudio/images/qmldesigner-boolean-false-blue.png diff --git a/doc/qtcreator/images/qmldesigner-boolean-false.png b/doc/qtdesignstudio/images/qmldesigner-boolean-false.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-boolean-false.png rename to doc/qtdesignstudio/images/qmldesigner-boolean-false.png diff --git a/doc/qtcreator/images/qmldesigner-boolean-true-blue.png b/doc/qtdesignstudio/images/qmldesigner-boolean-true-blue.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-boolean-true-blue.png rename to doc/qtdesignstudio/images/qmldesigner-boolean-true-blue.png diff --git a/doc/qtcreator/images/qmldesigner-boolean-true.png b/doc/qtdesignstudio/images/qmldesigner-boolean-true.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-boolean-true.png rename to doc/qtdesignstudio/images/qmldesigner-boolean-true.png diff --git a/doc/qtcreator/images/qmldesigner-borderimage-bindings.png b/doc/qtdesignstudio/images/qmldesigner-borderimage-bindings.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-borderimage-bindings.png rename to doc/qtdesignstudio/images/qmldesigner-borderimage-bindings.png diff --git a/doc/qtcreator/images/qmldesigner-borderimage-bindings1.png b/doc/qtdesignstudio/images/qmldesigner-borderimage-bindings1.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-borderimage-bindings1.png rename to doc/qtdesignstudio/images/qmldesigner-borderimage-bindings1.png diff --git a/doc/qtcreator/images/qmldesigner-borderimage-states.png b/doc/qtdesignstudio/images/qmldesigner-borderimage-states.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-borderimage-states.png rename to doc/qtdesignstudio/images/qmldesigner-borderimage-states.png diff --git a/doc/qtcreator/images/qmldesigner-borderimage-type.png b/doc/qtdesignstudio/images/qmldesigner-borderimage-type.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-borderimage-type.png rename to doc/qtdesignstudio/images/qmldesigner-borderimage-type.png diff --git a/doc/qtcreator/images/qmldesigner-borderimage.png b/doc/qtdesignstudio/images/qmldesigner-borderimage.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-borderimage.png rename to doc/qtdesignstudio/images/qmldesigner-borderimage.png diff --git a/doc/qtcreator/images/qmldesigner-breadcrumbs.png b/doc/qtdesignstudio/images/qmldesigner-breadcrumbs.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-breadcrumbs.png rename to doc/qtdesignstudio/images/qmldesigner-breadcrumbs.png diff --git a/doc/qtcreator/images/qmldesigner-button.png b/doc/qtdesignstudio/images/qmldesigner-button.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-button.png rename to doc/qtdesignstudio/images/qmldesigner-button.png diff --git a/doc/qtcreator/images/qmldesigner-canvas-color.png b/doc/qtdesignstudio/images/qmldesigner-canvas-color.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-canvas-color.png rename to doc/qtdesignstudio/images/qmldesigner-canvas-color.png diff --git a/doc/qtcreator/images/qmldesigner-connections.png b/doc/qtdesignstudio/images/qmldesigner-connections.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-connections.png rename to doc/qtdesignstudio/images/qmldesigner-connections.png diff --git a/doc/qtcreator/images/qmldesigner-dynamicprops.png b/doc/qtdesignstudio/images/qmldesigner-dynamicprops.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-dynamicprops.png rename to doc/qtdesignstudio/images/qmldesigner-dynamicprops.png diff --git a/doc/qtcreator/images/qmldesigner-editing-components.png b/doc/qtdesignstudio/images/qmldesigner-editing-components.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-editing-components.png rename to doc/qtdesignstudio/images/qmldesigner-editing-components.png diff --git a/doc/qtcreator/images/qmldesigner-element-properties.png b/doc/qtdesignstudio/images/qmldesigner-element-properties.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-element-properties.png rename to doc/qtdesignstudio/images/qmldesigner-element-properties.png diff --git a/doc/qtcreator/images/qmldesigner-element-size.png b/doc/qtdesignstudio/images/qmldesigner-element-size.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-element-size.png rename to doc/qtdesignstudio/images/qmldesigner-element-size.png diff --git a/doc/qtcreator/images/qmldesigner-export-item.png b/doc/qtdesignstudio/images/qmldesigner-export-item.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-export-item.png rename to doc/qtdesignstudio/images/qmldesigner-export-item.png diff --git a/doc/qtcreator/images/qmldesigner-extensions.png b/doc/qtdesignstudio/images/qmldesigner-extensions.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-extensions.png rename to doc/qtdesignstudio/images/qmldesigner-extensions.png diff --git a/doc/qtcreator/images/qmldesigner-form-editor-move-cursor.png b/doc/qtdesignstudio/images/qmldesigner-form-editor-move-cursor.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-form-editor-move-cursor.png rename to doc/qtdesignstudio/images/qmldesigner-form-editor-move-cursor.png diff --git a/doc/qtcreator/images/qmldesigner-form-editor.png b/doc/qtdesignstudio/images/qmldesigner-form-editor.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-form-editor.png rename to doc/qtdesignstudio/images/qmldesigner-form-editor.png diff --git a/doc/qtcreator/images/qmldesigner-implement-signal-handler.png b/doc/qtdesignstudio/images/qmldesigner-implement-signal-handler.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-implement-signal-handler.png rename to doc/qtdesignstudio/images/qmldesigner-implement-signal-handler.png diff --git a/doc/qtcreator/images/qmldesigner-inline-editing.png b/doc/qtdesignstudio/images/qmldesigner-inline-editing.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-inline-editing.png rename to doc/qtdesignstudio/images/qmldesigner-inline-editing.png diff --git a/doc/qtcreator/images/qmldesigner-mcu-support.png b/doc/qtdesignstudio/images/qmldesigner-mcu-support.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-mcu-support.png rename to doc/qtdesignstudio/images/qmldesigner-mcu-support.png diff --git a/doc/qtcreator/images/qmldesigner-merge-with-template.png b/doc/qtdesignstudio/images/qmldesigner-merge-with-template.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-merge-with-template.png rename to doc/qtdesignstudio/images/qmldesigner-merge-with-template.png diff --git a/doc/qtcreator/images/qmldesigner-navigator-arrows.png b/doc/qtdesignstudio/images/qmldesigner-navigator-arrows.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-navigator-arrows.png rename to doc/qtdesignstudio/images/qmldesigner-navigator-arrows.png diff --git a/doc/qtcreator/images/qmldesigner-navigator.png b/doc/qtdesignstudio/images/qmldesigner-navigator.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-navigator.png rename to doc/qtdesignstudio/images/qmldesigner-navigator.png diff --git a/doc/qtcreator/images/qmldesigner-new-project.png b/doc/qtdesignstudio/images/qmldesigner-new-project.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-new-project.png rename to doc/qtdesignstudio/images/qmldesigner-new-project.png diff --git a/doc/qtcreator/images/qmldesigner-only-select-items-with-content.png b/doc/qtdesignstudio/images/qmldesigner-only-select-items-with-content.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-only-select-items-with-content.png rename to doc/qtdesignstudio/images/qmldesigner-only-select-items-with-content.png diff --git a/doc/qtcreator/images/qmldesigner-pathview-editor.png b/doc/qtdesignstudio/images/qmldesigner-pathview-editor.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-pathview-editor.png rename to doc/qtdesignstudio/images/qmldesigner-pathview-editor.png diff --git a/doc/qtcreator/images/qmldesigner-preview-size.png b/doc/qtdesignstudio/images/qmldesigner-preview-size.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-preview-size.png rename to doc/qtdesignstudio/images/qmldesigner-preview-size.png diff --git a/doc/qtcreator/images/qmldesigner-properties-explicit-base.png b/doc/qtdesignstudio/images/qmldesigner-properties-explicit-base.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-properties-explicit-base.png rename to doc/qtdesignstudio/images/qmldesigner-properties-explicit-base.png diff --git a/doc/qtcreator/images/qmldesigner-properties-explicit-state1.png b/doc/qtdesignstudio/images/qmldesigner-properties-explicit-state1.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-properties-explicit-state1.png rename to doc/qtdesignstudio/images/qmldesigner-properties-explicit-state1.png diff --git a/doc/qtcreator/images/qmldesigner-properties-view.png b/doc/qtdesignstudio/images/qmldesigner-properties-view.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-properties-view.png rename to doc/qtdesignstudio/images/qmldesigner-properties-view.png diff --git a/doc/qtcreator/images/qmldesigner-qml-components.png b/doc/qtdesignstudio/images/qmldesigner-qml-components.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-qml-components.png rename to doc/qtdesignstudio/images/qmldesigner-qml-components.png diff --git a/doc/qtcreator/images/qmldesigner-screen-design.png b/doc/qtdesignstudio/images/qmldesigner-screen-design.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-screen-design.png rename to doc/qtdesignstudio/images/qmldesigner-screen-design.png diff --git a/doc/qtcreator/images/qmldesigner-set-expression.png b/doc/qtdesignstudio/images/qmldesigner-set-expression.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-set-expression.png rename to doc/qtdesignstudio/images/qmldesigner-set-expression.png diff --git a/doc/qtcreator/images/qmldesigner-snap-margins.png b/doc/qtdesignstudio/images/qmldesigner-snap-margins.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-snap-margins.png rename to doc/qtdesignstudio/images/qmldesigner-snap-margins.png diff --git a/doc/qtcreator/images/qmldesigner-states-when-condition.png b/doc/qtdesignstudio/images/qmldesigner-states-when-condition.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-states-when-condition.png rename to doc/qtdesignstudio/images/qmldesigner-states-when-condition.png diff --git a/doc/qtcreator/images/qmldesigner-states.png b/doc/qtdesignstudio/images/qmldesigner-states.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-states.png rename to doc/qtdesignstudio/images/qmldesigner-states.png diff --git a/doc/qtcreator/images/qmldesigner-text-property-tr.png b/doc/qtdesignstudio/images/qmldesigner-text-property-tr.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-text-property-tr.png rename to doc/qtdesignstudio/images/qmldesigner-text-property-tr.png diff --git a/doc/qtcreator/images/qmldesigner-transition-editor-startup.png b/doc/qtdesignstudio/images/qmldesigner-transition-editor-startup.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-transition-editor-startup.png rename to doc/qtdesignstudio/images/qmldesigner-transition-editor-startup.png diff --git a/doc/qtcreator/images/qmldesigner-transitions.png b/doc/qtdesignstudio/images/qmldesigner-transitions.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-transitions.png rename to doc/qtdesignstudio/images/qmldesigner-transitions.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-bindings.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-bindings.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-bindings.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-bindings.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-connections.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-connections.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-connections.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-connections.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-easing-curves.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-easing-curves.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-easing-curves.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-easing-curves.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-page-component.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-page-component.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-page-component.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-page-component.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-states.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-states.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-states.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-states.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-topleftrect-layout.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-topleftrect-layout.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-topleftrect-layout.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-topleftrect-layout.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-topleftrect.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-topleftrect.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-topleftrect.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-topleftrect.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-transition-settings.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-transition-settings.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-transition-settings.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-transition-settings.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-transitions.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-transitions.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-transitions.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-transitions.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-ui-ready.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-ui-ready.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-ui-ready.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-ui-ready.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial-user-icon.png b/doc/qtdesignstudio/images/qmldesigner-tutorial-user-icon.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial-user-icon.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial-user-icon.png diff --git a/doc/qtcreator/images/qmldesigner-tutorial.png b/doc/qtdesignstudio/images/qmldesigner-tutorial.png similarity index 100% rename from doc/qtcreator/images/qmldesigner-tutorial.png rename to doc/qtdesignstudio/images/qmldesigner-tutorial.png diff --git a/doc/qtcreator/images/qmldesigner-zooming.gif b/doc/qtdesignstudio/images/qmldesigner-zooming.gif similarity index 100% rename from doc/qtcreator/images/qmldesigner-zooming.gif rename to doc/qtdesignstudio/images/qmldesigner-zooming.gif diff --git a/doc/qtcreator/images/qtcreator-reset-position-icon.png b/doc/qtdesignstudio/images/qtcreator-reset-position-icon.png similarity index 100% rename from doc/qtcreator/images/qtcreator-reset-position-icon.png rename to doc/qtdesignstudio/images/qtcreator-reset-position-icon.png diff --git a/doc/qtcreator/images/qtcreator-reset-size-icon.png b/doc/qtdesignstudio/images/qtcreator-reset-size-icon.png similarity index 100% rename from doc/qtcreator/images/qtcreator-reset-size-icon.png rename to doc/qtdesignstudio/images/qtcreator-reset-size-icon.png diff --git a/doc/qtcreator/images/qtquick-annotation-editor.png b/doc/qtdesignstudio/images/qtquick-annotation-editor.png similarity index 100% rename from doc/qtcreator/images/qtquick-annotation-editor.png rename to doc/qtdesignstudio/images/qtquick-annotation-editor.png diff --git a/doc/qtcreator/images/qtquick-annotations.png b/doc/qtdesignstudio/images/qtquick-annotations.png similarity index 100% rename from doc/qtcreator/images/qtquick-annotations.png rename to doc/qtdesignstudio/images/qtquick-annotations.png diff --git a/doc/qtcreator/images/qtquick-assets-tab.png b/doc/qtdesignstudio/images/qtquick-assets-tab.png similarity index 100% rename from doc/qtcreator/images/qtquick-assets-tab.png rename to doc/qtdesignstudio/images/qtquick-assets-tab.png diff --git a/doc/qtcreator/images/qtquick-color-animation.gif b/doc/qtdesignstudio/images/qtquick-color-animation.gif similarity index 100% rename from doc/qtcreator/images/qtquick-color-animation.gif rename to doc/qtdesignstudio/images/qtquick-color-animation.gif diff --git a/doc/qtcreator/images/qtquick-components-custom.png b/doc/qtdesignstudio/images/qtquick-components-custom.png similarity index 100% rename from doc/qtcreator/images/qtquick-components-custom.png rename to doc/qtdesignstudio/images/qtquick-components-custom.png diff --git a/doc/qtcreator/images/qtquick-components-tab-add.png b/doc/qtdesignstudio/images/qtquick-components-tab-add.png similarity index 100% rename from doc/qtcreator/images/qtquick-components-tab-add.png rename to doc/qtdesignstudio/images/qtquick-components-tab-add.png diff --git a/doc/qtcreator/images/qtquick-components-tab.png b/doc/qtdesignstudio/images/qtquick-components-tab.png similarity index 100% rename from doc/qtcreator/images/qtquick-components-tab.png rename to doc/qtdesignstudio/images/qtquick-components-tab.png diff --git a/doc/qtcreator/images/qtquick-connection-editor-action.png b/doc/qtdesignstudio/images/qtquick-connection-editor-action.png similarity index 100% rename from doc/qtcreator/images/qtquick-connection-editor-action.png rename to doc/qtdesignstudio/images/qtquick-connection-editor-action.png diff --git a/doc/qtcreator/images/qtquick-connection-editor-assignment.png b/doc/qtdesignstudio/images/qtquick-connection-editor-assignment.png similarity index 100% rename from doc/qtcreator/images/qtquick-connection-editor-assignment.png rename to doc/qtdesignstudio/images/qtquick-connection-editor-assignment.png diff --git a/doc/qtcreator/images/qtquick-custom-properties.png b/doc/qtdesignstudio/images/qtquick-custom-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-custom-properties.png rename to doc/qtdesignstudio/images/qtquick-custom-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-abstract-button-properties.png b/doc/qtdesignstudio/images/qtquick-designer-abstract-button-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-abstract-button-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-abstract-button-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-animated-image-properties.png b/doc/qtdesignstudio/images/qtquick-designer-animated-image-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-animated-image-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-animated-image-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-border-image-properties.png b/doc/qtdesignstudio/images/qtquick-designer-border-image-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-border-image-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-border-image-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-button-properties.png b/doc/qtdesignstudio/images/qtquick-designer-button-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-button-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-button-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-button-types.png b/doc/qtdesignstudio/images/qtquick-designer-button-types.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-button-types.png rename to doc/qtdesignstudio/images/qtquick-designer-button-types.png diff --git a/doc/qtcreator/images/qtquick-designer-color-details.png b/doc/qtdesignstudio/images/qtquick-designer-color-details.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-color-details.png rename to doc/qtdesignstudio/images/qtquick-designer-color-details.png diff --git a/doc/qtcreator/images/qtquick-designer-color-palette.png b/doc/qtdesignstudio/images/qtquick-designer-color-palette.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-color-palette.png rename to doc/qtdesignstudio/images/qtquick-designer-color-palette.png diff --git a/doc/qtcreator/images/qtquick-designer-color-picker.png b/doc/qtdesignstudio/images/qtquick-designer-color-picker.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-color-picker.png rename to doc/qtdesignstudio/images/qtquick-designer-color-picker.png diff --git a/doc/qtcreator/images/qtquick-designer-combobox-properties.png b/doc/qtdesignstudio/images/qtquick-designer-combobox-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-combobox-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-combobox-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-control-properties.png b/doc/qtdesignstudio/images/qtquick-designer-control-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-control-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-control-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-dial-properties.png b/doc/qtdesignstudio/images/qtquick-designer-dial-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-dial-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-dial-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-edit-list-model.png b/doc/qtdesignstudio/images/qtquick-designer-edit-list-model.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-edit-list-model.png rename to doc/qtdesignstudio/images/qtquick-designer-edit-list-model.png diff --git a/doc/qtcreator/images/qtquick-designer-flickable-geometry.png b/doc/qtdesignstudio/images/qtquick-designer-flickable-geometry.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-flickable-geometry.png rename to doc/qtdesignstudio/images/qtquick-designer-flickable-geometry.png diff --git a/doc/qtcreator/images/qtquick-designer-flickable-properties.png b/doc/qtdesignstudio/images/qtquick-designer-flickable-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-flickable-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-flickable-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-gradient-picker.png b/doc/qtdesignstudio/images/qtquick-designer-gradient-picker.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-picker.png rename to doc/qtdesignstudio/images/qtquick-designer-gradient-picker.png diff --git a/doc/qtcreator/images/qtquick-designer-gradient-properties-conical.png b/doc/qtdesignstudio/images/qtquick-designer-gradient-properties-conical.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-properties-conical.png rename to doc/qtdesignstudio/images/qtquick-designer-gradient-properties-conical.png diff --git a/doc/qtcreator/images/qtquick-designer-gradient-properties-linear.png b/doc/qtdesignstudio/images/qtquick-designer-gradient-properties-linear.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-properties-linear.png rename to doc/qtdesignstudio/images/qtquick-designer-gradient-properties-linear.png diff --git a/doc/qtcreator/images/qtquick-designer-gradient-properties-radial.png b/doc/qtdesignstudio/images/qtquick-designer-gradient-properties-radial.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-properties-radial.png rename to doc/qtdesignstudio/images/qtquick-designer-gradient-properties-radial.png diff --git a/doc/qtcreator/images/qtquick-designer-gradient-stops.gif b/doc/qtdesignstudio/images/qtquick-designer-gradient-stops.gif similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-stops.gif rename to doc/qtdesignstudio/images/qtquick-designer-gradient-stops.gif diff --git a/doc/qtcreator/images/qtquick-designer-gradient-types.png b/doc/qtdesignstudio/images/qtquick-designer-gradient-types.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gradient-types.png rename to doc/qtdesignstudio/images/qtquick-designer-gradient-types.png diff --git a/doc/qtcreator/images/qtquick-designer-gridview-properties.png b/doc/qtdesignstudio/images/qtquick-designer-gridview-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-gridview-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-gridview-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-image-properties.png b/doc/qtdesignstudio/images/qtquick-designer-image-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-image-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-image-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-image-type.png b/doc/qtdesignstudio/images/qtquick-designer-image-type.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-image-type.png rename to doc/qtdesignstudio/images/qtquick-designer-image-type.png diff --git a/doc/qtcreator/images/qtquick-designer-indicator-types.png b/doc/qtdesignstudio/images/qtquick-designer-indicator-types.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-indicator-types.png rename to doc/qtdesignstudio/images/qtquick-designer-indicator-types.png diff --git a/doc/qtcreator/images/qtquick-designer-listview-highlight-properties.png b/doc/qtdesignstudio/images/qtquick-designer-listview-highlight-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-listview-highlight-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-listview-highlight-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-listview-preview.png b/doc/qtdesignstudio/images/qtquick-designer-listview-preview.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-listview-preview.png rename to doc/qtdesignstudio/images/qtquick-designer-listview-preview.png diff --git a/doc/qtcreator/images/qtquick-designer-listview-properties.png b/doc/qtdesignstudio/images/qtquick-designer-listview-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-listview-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-listview-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-navigator-arrange.gif b/doc/qtdesignstudio/images/qtquick-designer-navigator-arrange.gif similarity index 100% rename from doc/qtcreator/images/qtquick-designer-navigator-arrange.gif rename to doc/qtdesignstudio/images/qtquick-designer-navigator-arrange.gif diff --git a/doc/qtcreator/images/qtquick-designer-navigator-lock.gif b/doc/qtdesignstudio/images/qtquick-designer-navigator-lock.gif similarity index 100% rename from doc/qtcreator/images/qtquick-designer-navigator-lock.gif rename to doc/qtdesignstudio/images/qtquick-designer-navigator-lock.gif diff --git a/doc/qtcreator/images/qtquick-designer-options.png b/doc/qtdesignstudio/images/qtquick-designer-options.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-options.png rename to doc/qtdesignstudio/images/qtquick-designer-options.png diff --git a/doc/qtcreator/images/qtquick-designer-pathview-properties.png b/doc/qtdesignstudio/images/qtquick-designer-pathview-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-pathview-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-pathview-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-progressbar-properties.png b/doc/qtdesignstudio/images/qtquick-designer-progressbar-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-progressbar-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-progressbar-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-properties-font.png b/doc/qtdesignstudio/images/qtquick-designer-properties-font.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-properties-font.png rename to doc/qtdesignstudio/images/qtquick-designer-properties-font.png diff --git a/doc/qtcreator/images/qtquick-designer-qtquickcontrols-types.png b/doc/qtdesignstudio/images/qtquick-designer-qtquickcontrols-types.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-qtquickcontrols-types.png rename to doc/qtdesignstudio/images/qtquick-designer-qtquickcontrols-types.png diff --git a/doc/qtcreator/images/qtquick-designer-range-slider-properties.png b/doc/qtdesignstudio/images/qtquick-designer-range-slider-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-range-slider-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-range-slider-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-rotating-items.png b/doc/qtdesignstudio/images/qtquick-designer-rotating-items.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-rotating-items.png rename to doc/qtdesignstudio/images/qtquick-designer-rotating-items.png diff --git a/doc/qtcreator/images/qtquick-designer-round-button-properties.png b/doc/qtdesignstudio/images/qtquick-designer-round-button-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-round-button-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-round-button-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-scaling-items.png b/doc/qtdesignstudio/images/qtquick-designer-scaling-items.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-scaling-items.png rename to doc/qtdesignstudio/images/qtquick-designer-scaling-items.png diff --git a/doc/qtcreator/images/qtquick-designer-selector-types.png b/doc/qtdesignstudio/images/qtquick-designer-selector-types.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-selector-types.png rename to doc/qtdesignstudio/images/qtquick-designer-selector-types.png diff --git a/doc/qtcreator/images/qtquick-designer-stacked-view.png b/doc/qtdesignstudio/images/qtquick-designer-stacked-view.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-stacked-view.png rename to doc/qtdesignstudio/images/qtquick-designer-stacked-view.png diff --git a/doc/qtcreator/images/qtquick-designer-style-list.png b/doc/qtdesignstudio/images/qtquick-designer-style-list.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-style-list.png rename to doc/qtdesignstudio/images/qtquick-designer-style-list.png diff --git a/doc/qtcreator/images/qtquick-designer-tabbar-properties.png b/doc/qtdesignstudio/images/qtquick-designer-tabbar-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-tabbar-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-tabbar-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-text-edit-properties.png b/doc/qtdesignstudio/images/qtquick-designer-text-edit-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-text-edit-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-text-edit-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-text-input-properties.png b/doc/qtdesignstudio/images/qtquick-designer-text-input-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-text-input-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-text-input-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-text-properties.png b/doc/qtdesignstudio/images/qtquick-designer-text-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-text-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-text-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-toolbar-properties.png b/doc/qtdesignstudio/images/qtquick-designer-toolbar-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-toolbar-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-toolbar-properties.png diff --git a/doc/qtcreator/images/qtquick-designer-tumbler-properties.png b/doc/qtdesignstudio/images/qtquick-designer-tumbler-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-designer-tumbler-properties.png rename to doc/qtdesignstudio/images/qtquick-designer-tumbler-properties.png diff --git a/doc/qtcreator/images/qtquick-item-properties-advanced.png b/doc/qtdesignstudio/images/qtquick-item-properties-advanced.png similarity index 100% rename from doc/qtcreator/images/qtquick-item-properties-advanced.png rename to doc/qtdesignstudio/images/qtquick-item-properties-advanced.png diff --git a/doc/qtcreator/images/qtquick-item-properties-common.png b/doc/qtdesignstudio/images/qtquick-item-properties-common.png similarity index 100% rename from doc/qtcreator/images/qtquick-item-properties-common.png rename to doc/qtdesignstudio/images/qtquick-item-properties-common.png diff --git a/doc/qtcreator/images/qtquick-item-properties-layer.png b/doc/qtdesignstudio/images/qtquick-item-properties-layer.png similarity index 100% rename from doc/qtcreator/images/qtquick-item-properties-layer.png rename to doc/qtdesignstudio/images/qtquick-item-properties-layer.png diff --git a/doc/qtcreator/images/qtquick-layout-grid-properties.png b/doc/qtdesignstudio/images/qtquick-layout-grid-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-layout-grid-properties.png rename to doc/qtdesignstudio/images/qtquick-layout-grid-properties.png diff --git a/doc/qtcreator/images/qtquick-library-context-menu-hide.png b/doc/qtdesignstudio/images/qtquick-library-context-menu-hide.png similarity index 100% rename from doc/qtcreator/images/qtquick-library-context-menu-hide.png rename to doc/qtdesignstudio/images/qtquick-library-context-menu-hide.png diff --git a/doc/qtcreator/images/qtquick-library-context-menu.png b/doc/qtdesignstudio/images/qtquick-library-context-menu.png similarity index 100% rename from doc/qtcreator/images/qtquick-library-context-menu.png rename to doc/qtdesignstudio/images/qtquick-library-context-menu.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-binding-editor.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-binding-editor.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-binding-editor.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-binding-editor.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-binding-editor1.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-binding-editor1.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-binding-editor1.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-binding-editor1.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-bubble-component.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-bubble-component.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-bubble-component.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-bubble-component.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-custom-properties.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-custom-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-custom-properties.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-custom-properties.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-image.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-image.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-image.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-image.png diff --git a/doc/qtcreator/images/qtquick-mobile-app-tutorial-main-view.png b/doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-main-view.png similarity index 100% rename from doc/qtcreator/images/qtquick-mobile-app-tutorial-main-view.png rename to doc/qtdesignstudio/images/qtquick-mobile-app-tutorial-main-view.png diff --git a/doc/qtcreator/images/qtquick-number-animation.gif b/doc/qtdesignstudio/images/qtquick-number-animation.gif similarity index 100% rename from doc/qtcreator/images/qtquick-number-animation.gif rename to doc/qtdesignstudio/images/qtquick-number-animation.gif diff --git a/doc/qtcreator/images/qtquick-positioner-column-properties.png b/doc/qtdesignstudio/images/qtquick-positioner-column-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-positioner-column-properties.png rename to doc/qtdesignstudio/images/qtquick-positioner-column-properties.png diff --git a/doc/qtcreator/images/qtquick-positioner-flow-properties.png b/doc/qtdesignstudio/images/qtquick-positioner-flow-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-positioner-flow-properties.png rename to doc/qtdesignstudio/images/qtquick-positioner-flow-properties.png diff --git a/doc/qtcreator/images/qtquick-positioner-grid-properties.png b/doc/qtdesignstudio/images/qtquick-positioner-grid-properties.png similarity index 100% rename from doc/qtcreator/images/qtquick-positioner-grid-properties.png rename to doc/qtdesignstudio/images/qtquick-positioner-grid-properties.png diff --git a/doc/qtcreator/images/qtquick-properties-2D-geometry.png b/doc/qtdesignstudio/images/qtquick-properties-2D-geometry.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-2D-geometry.png rename to doc/qtdesignstudio/images/qtquick-properties-2D-geometry.png diff --git a/doc/qtcreator/images/qtquick-properties-advanced.png b/doc/qtdesignstudio/images/qtquick-properties-advanced.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-advanced.png rename to doc/qtdesignstudio/images/qtquick-properties-advanced.png diff --git a/doc/qtcreator/images/qtquick-properties-animation.png b/doc/qtdesignstudio/images/qtquick-properties-animation.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-animation.png rename to doc/qtdesignstudio/images/qtquick-properties-animation.png diff --git a/doc/qtcreator/images/qtquick-properties-busy-indicator.png b/doc/qtdesignstudio/images/qtquick-properties-busy-indicator.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-busy-indicator.png rename to doc/qtdesignstudio/images/qtquick-properties-busy-indicator.png diff --git a/doc/qtcreator/images/qtquick-properties-check-box.png b/doc/qtdesignstudio/images/qtquick-properties-check-box.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-check-box.png rename to doc/qtdesignstudio/images/qtquick-properties-check-box.png diff --git a/doc/qtcreator/images/qtquick-properties-coloranimation.png b/doc/qtdesignstudio/images/qtquick-properties-coloranimation.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-coloranimation.png rename to doc/qtdesignstudio/images/qtquick-properties-coloranimation.png diff --git a/doc/qtcreator/images/qtquick-properties-font-extras.png b/doc/qtdesignstudio/images/qtquick-properties-font-extras.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-font-extras.png rename to doc/qtdesignstudio/images/qtquick-properties-font-extras.png diff --git a/doc/qtcreator/images/qtquick-properties-mouse-area-accepted-buttons.png b/doc/qtdesignstudio/images/qtquick-properties-mouse-area-accepted-buttons.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-mouse-area-accepted-buttons.png rename to doc/qtdesignstudio/images/qtquick-properties-mouse-area-accepted-buttons.png diff --git a/doc/qtcreator/images/qtquick-properties-mouse-area-drag.png b/doc/qtdesignstudio/images/qtquick-properties-mouse-area-drag.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-mouse-area-drag.png rename to doc/qtdesignstudio/images/qtquick-properties-mouse-area-drag.png diff --git a/doc/qtcreator/images/qtquick-properties-mouse-area.png b/doc/qtdesignstudio/images/qtquick-properties-mouse-area.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-mouse-area.png rename to doc/qtdesignstudio/images/qtquick-properties-mouse-area.png diff --git a/doc/qtcreator/images/qtquick-properties-numberanimation.png b/doc/qtdesignstudio/images/qtquick-properties-numberanimation.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-numberanimation.png rename to doc/qtdesignstudio/images/qtquick-properties-numberanimation.png diff --git a/doc/qtcreator/images/qtquick-properties-page-indicator.png b/doc/qtdesignstudio/images/qtquick-properties-page-indicator.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-page-indicator.png rename to doc/qtdesignstudio/images/qtquick-properties-page-indicator.png diff --git a/doc/qtcreator/images/qtquick-properties-propertyaction.png b/doc/qtdesignstudio/images/qtquick-properties-propertyaction.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-propertyaction.png rename to doc/qtdesignstudio/images/qtquick-properties-propertyaction.png diff --git a/doc/qtcreator/images/qtquick-properties-text-extras.png b/doc/qtdesignstudio/images/qtquick-properties-text-extras.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-text-extras.png rename to doc/qtdesignstudio/images/qtquick-properties-text-extras.png diff --git a/doc/qtcreator/images/qtquick-properties-text-field.png b/doc/qtdesignstudio/images/qtquick-properties-text-field.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-text-field.png rename to doc/qtdesignstudio/images/qtquick-properties-text-field.png diff --git a/doc/qtcreator/images/qtquick-properties-text-padding.png b/doc/qtdesignstudio/images/qtquick-properties-text-padding.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-text-padding.png rename to doc/qtdesignstudio/images/qtquick-properties-text-padding.png diff --git a/doc/qtcreator/images/qtquick-properties-visibility.png b/doc/qtdesignstudio/images/qtquick-properties-visibility.png similarity index 100% rename from doc/qtcreator/images/qtquick-properties-visibility.png rename to doc/qtdesignstudio/images/qtquick-properties-visibility.png diff --git a/doc/qtcreator/images/qtquick-property-action.gif b/doc/qtdesignstudio/images/qtquick-property-action.gif similarity index 100% rename from doc/qtcreator/images/qtquick-property-action.gif rename to doc/qtdesignstudio/images/qtquick-property-action.gif diff --git a/doc/qtcreator/images/qtquick-qml-export-dialog.png b/doc/qtdesignstudio/images/qtquick-qml-export-dialog.png similarity index 100% rename from doc/qtcreator/images/qtquick-qml-export-dialog.png rename to doc/qtdesignstudio/images/qtquick-qml-export-dialog.png diff --git a/doc/qtcreator/images/qtquick-rtf-editor.png b/doc/qtdesignstudio/images/qtquick-rtf-editor.png similarity index 100% rename from doc/qtcreator/images/qtquick-rtf-editor.png rename to doc/qtdesignstudio/images/qtquick-rtf-editor.png diff --git a/doc/qtcreator/images/qtquick-states-binding-editor-not.png b/doc/qtdesignstudio/images/qtquick-states-binding-editor-not.png similarity index 100% rename from doc/qtcreator/images/qtquick-states-binding-editor-not.png rename to doc/qtdesignstudio/images/qtquick-states-binding-editor-not.png diff --git a/doc/qtcreator/images/qtquick-states-binding-editor.png b/doc/qtdesignstudio/images/qtquick-states-binding-editor.png similarity index 100% rename from doc/qtcreator/images/qtquick-states-binding-editor.png rename to doc/qtdesignstudio/images/qtquick-states-binding-editor.png diff --git a/doc/qtcreator/images/qtquick-text-editor.png b/doc/qtdesignstudio/images/qtquick-text-editor.png similarity index 100% rename from doc/qtcreator/images/qtquick-text-editor.png rename to doc/qtdesignstudio/images/qtquick-text-editor.png diff --git a/doc/qtcreator/images/qtquick-text-rtf.gif b/doc/qtdesignstudio/images/qtquick-text-rtf.gif similarity index 100% rename from doc/qtcreator/images/qtquick-text-rtf.gif rename to doc/qtdesignstudio/images/qtquick-text-rtf.gif diff --git a/doc/qtcreator/images/qtquick-transition-editor-settings.png b/doc/qtdesignstudio/images/qtquick-transition-editor-settings.png similarity index 100% rename from doc/qtcreator/images/qtquick-transition-editor-settings.png rename to doc/qtdesignstudio/images/qtquick-transition-editor-settings.png diff --git a/doc/qtcreator/images/qtquick-transition-editor-view.png b/doc/qtdesignstudio/images/qtquick-transition-editor-view.png similarity index 100% rename from doc/qtcreator/images/qtquick-transition-editor-view.png rename to doc/qtdesignstudio/images/qtquick-transition-editor-view.png diff --git a/doc/qtcreator/images/qtquickcontrols2-busyindicator.gif b/doc/qtdesignstudio/images/qtquickcontrols2-busyindicator.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-busyindicator.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-busyindicator.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-button-flat.gif b/doc/qtdesignstudio/images/qtquickcontrols2-button-flat.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-button-flat.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-button-flat.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-button-highlighted.gif b/doc/qtdesignstudio/images/qtquickcontrols2-button-highlighted.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-button-highlighted.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-button-highlighted.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-button.gif b/doc/qtdesignstudio/images/qtquickcontrols2-button.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-button.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-button.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-checkbox-tristate.gif b/doc/qtdesignstudio/images/qtquickcontrols2-checkbox-tristate.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-checkbox-tristate.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-checkbox-tristate.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-checkbox.gif b/doc/qtdesignstudio/images/qtquickcontrols2-checkbox.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-checkbox.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-checkbox.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-checkdelegate.gif b/doc/qtdesignstudio/images/qtquickcontrols2-checkdelegate.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-checkdelegate.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-checkdelegate.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-combobox.gif b/doc/qtdesignstudio/images/qtquickcontrols2-combobox.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-combobox.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-combobox.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-delaybutton.gif b/doc/qtdesignstudio/images/qtquickcontrols2-delaybutton.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-delaybutton.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-delaybutton.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-dial-no-wrap.gif b/doc/qtdesignstudio/images/qtquickcontrols2-dial-no-wrap.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-dial-no-wrap.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-dial-no-wrap.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-progressbar-indeterminate.gif b/doc/qtdesignstudio/images/qtquickcontrols2-progressbar-indeterminate.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-progressbar-indeterminate.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-progressbar-indeterminate.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-progressbar.gif b/doc/qtdesignstudio/images/qtquickcontrols2-progressbar.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-progressbar.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-progressbar.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-radiobutton.gif b/doc/qtdesignstudio/images/qtquickcontrols2-radiobutton.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-radiobutton.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-radiobutton.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-radiodelegate.gif b/doc/qtdesignstudio/images/qtquickcontrols2-radiodelegate.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-radiodelegate.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-radiodelegate.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-rangeslider.gif b/doc/qtdesignstudio/images/qtquickcontrols2-rangeslider.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-rangeslider.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-rangeslider.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-slider.gif b/doc/qtdesignstudio/images/qtquickcontrols2-slider.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-slider.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-slider.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-spinbox.png b/doc/qtdesignstudio/images/qtquickcontrols2-spinbox.png similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-spinbox.png rename to doc/qtdesignstudio/images/qtquickcontrols2-spinbox.png diff --git a/doc/qtcreator/images/qtquickcontrols2-switch.gif b/doc/qtdesignstudio/images/qtquickcontrols2-switch.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-switch.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-switch.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-switchdelegate.gif b/doc/qtdesignstudio/images/qtquickcontrols2-switchdelegate.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-switchdelegate.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-switchdelegate.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-tabbar-flickable.png b/doc/qtdesignstudio/images/qtquickcontrols2-tabbar-flickable.png similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-tabbar-flickable.png rename to doc/qtdesignstudio/images/qtquickcontrols2-tabbar-flickable.png diff --git a/doc/qtcreator/images/qtquickcontrols2-tabbar.gif b/doc/qtdesignstudio/images/qtquickcontrols2-tabbar.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-tabbar.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-tabbar.gif diff --git a/doc/qtcreator/images/qtquickcontrols2-toolbar.png b/doc/qtdesignstudio/images/qtquickcontrols2-toolbar.png similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-toolbar.png rename to doc/qtdesignstudio/images/qtquickcontrols2-toolbar.png diff --git a/doc/qtcreator/images/qtquickcontrols2-tumbler-wrap.gif b/doc/qtdesignstudio/images/qtquickcontrols2-tumbler-wrap.gif similarity index 100% rename from doc/qtcreator/images/qtquickcontrols2-tumbler-wrap.gif rename to doc/qtdesignstudio/images/qtquickcontrols2-tumbler-wrap.gif diff --git a/doc/qtcreator/images/studio-curve-editor.png b/doc/qtdesignstudio/images/studio-curve-editor.png similarity index 100% rename from doc/qtcreator/images/studio-curve-editor.png rename to doc/qtdesignstudio/images/studio-curve-editor.png diff --git a/doc/qtcreator/images/studio-easing-curve-editor.png b/doc/qtdesignstudio/images/studio-easing-curve-editor.png similarity index 100% rename from doc/qtcreator/images/studio-easing-curve-editor.png rename to doc/qtdesignstudio/images/studio-easing-curve-editor.png diff --git a/doc/qtcreator/images/studio-edit-keyframe.png b/doc/qtdesignstudio/images/studio-edit-keyframe.png similarity index 100% rename from doc/qtcreator/images/studio-edit-keyframe.png rename to doc/qtdesignstudio/images/studio-edit-keyframe.png diff --git a/doc/qtcreator/images/studio-iso-icon.png b/doc/qtdesignstudio/images/studio-iso-icon.png similarity index 100% rename from doc/qtcreator/images/studio-iso-icon.png rename to doc/qtdesignstudio/images/studio-iso-icon.png diff --git a/doc/qtcreator/images/studio-timeline-empty.png b/doc/qtdesignstudio/images/studio-timeline-empty.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-empty.png rename to doc/qtdesignstudio/images/studio-timeline-empty.png diff --git a/doc/qtcreator/images/studio-timeline-keyframe-track-colors.png b/doc/qtdesignstudio/images/studio-timeline-keyframe-track-colors.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-keyframe-track-colors.png rename to doc/qtdesignstudio/images/studio-timeline-keyframe-track-colors.png diff --git a/doc/qtcreator/images/studio-timeline-no-tracks.png b/doc/qtdesignstudio/images/studio-timeline-no-tracks.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-no-tracks.png rename to doc/qtdesignstudio/images/studio-timeline-no-tracks.png diff --git a/doc/qtcreator/images/studio-timeline-settings.png b/doc/qtdesignstudio/images/studio-timeline-settings.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-settings.png rename to doc/qtdesignstudio/images/studio-timeline-settings.png diff --git a/doc/qtcreator/images/studio-timeline-with-empty-tracks.png b/doc/qtdesignstudio/images/studio-timeline-with-empty-tracks.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-with-empty-tracks.png rename to doc/qtdesignstudio/images/studio-timeline-with-empty-tracks.png diff --git a/doc/qtcreator/images/studio-timeline-with-tracks.png b/doc/qtdesignstudio/images/studio-timeline-with-tracks.png similarity index 100% rename from doc/qtcreator/images/studio-timeline-with-tracks.png rename to doc/qtdesignstudio/images/studio-timeline-with-tracks.png diff --git a/doc/qtcreator/images/studio-timeline.png b/doc/qtdesignstudio/images/studio-timeline.png similarity index 100% rename from doc/qtcreator/images/studio-timeline.png rename to doc/qtdesignstudio/images/studio-timeline.png diff --git a/doc/qtcreator/images/timeline-rotation-animation.gif b/doc/qtdesignstudio/images/timeline-rotation-animation.gif similarity index 100% rename from doc/qtcreator/images/timeline-rotation-animation.gif rename to doc/qtdesignstudio/images/timeline-rotation-animation.gif From 2085e2ad0bab2883b951bd9bceee45d9a8aee529 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 15 Oct 2021 14:42:17 +0200 Subject: [PATCH 12/39] CppEditor: Make sure fallback project part is up to date ... with regards to the session include paths. Amends 0636238429. Fixes: QTCREATORBUG-26323 (cherry picked from commit 8c86b9bca17da149bb6668960af2da8f13d88f93) Change-Id: I972a314db607d0b06859744dec4c83e885be3b5c Reviewed-by: Eike Ziller Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangmodelmanagersupport.cpp | 4 ---- src/plugins/cpptools/cppmodelmanager.cpp | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 285aa864d42..daeb0bc3404 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -415,10 +415,6 @@ void ClangModelManagerSupport::onEditorOpened(Core::IEditor *editor) // TODO: Ensure that not fully loaded documents are updated? - // TODO: If the file does not belong to any project and it is a header file, - // it might make sense to check whether the file is included by any file - // that does belong to a project, and if so, use the respective client - // instead. Is this feasible? ProjectExplorer::Project * const project = ProjectExplorer::SessionManager::projectForFile(document->filePath()); if (Client * const client = clientForProject(project)) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 8d58f429b98..d4303c2137d 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -684,6 +684,10 @@ CppModelManager::CppModelManager() connect(KitManager::instance(), &KitManager::kitsChanged, this, &CppModelManager::setupFallbackProjectPart); + connect(this, &CppModelManager::projectPartsRemoved, this, + &CppModelManager::setupFallbackProjectPart); + connect(this, &CppModelManager::projectPartsUpdated, this, + &CppModelManager::setupFallbackProjectPart); setupFallbackProjectPart(); qRegisterMetaType("CPlusPlus::Document::Ptr"); From 0a7935d4490001691b3846f6fa10c66e765dd65e Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 21 Oct 2021 12:59:53 +0200 Subject: [PATCH 13/39] ProjectExplorer: fix comparing toolchains on redetection Use the specialized operator== of ToolChain when looking for priorly defined autodetected tool chains. Fixes: QTCREATORBUG-25697 Change-Id: I477d29695eef2acb1ba566d42df9b1e57d26eb07 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/toolchainoptionspage.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index fc92b2e83b8..d0f3687d51e 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -417,10 +417,7 @@ void ToolChainOptionsWidget::redetectToolchains() if (knownTcs.contains(tc) || toDelete.contains(tc)) continue; const auto matchItem = [tc](const ToolChainTreeItem *item) { - return item->toolChain->compilerCommand() == tc->compilerCommand() - && item->toolChain->typeId() == tc->typeId() - && item->toolChain->language() == tc->language() - && item->toolChain->targetAbi() == tc->targetAbi(); + return *item->toolChain == *tc; }; ToolChainTreeItem * const item = findOrDefault(itemsToRemove, matchItem); if (item) { From 9f7cdd6d3cf2d72cfd385058422daebd256a12f0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 21 Oct 2021 14:05:40 +0200 Subject: [PATCH 14/39] CompilationDbProjectManager: Fix tree scanning - We checked for the QFuture's canceled status at a time where it would always yield true. - A pointless default value was used for the project root path. Fixes: QTCREATORBUG-26356 Change-Id: I4d17c6ecb7e9e7e71df737d85b42feb37d3ead5d Reviewed-by: David Schulz --- .../compilationdatabaseproject.cpp | 15 ++++++--------- .../compilationdbparser.cpp | 4 ++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index 0656dbd8783..8b1c4c85612 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -437,17 +437,14 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &pr Utils::FilePath CompilationDatabaseProject::rootPathFromSettings() const { -#ifdef WITH_TESTS - return Utils::FilePath::fromString(projectDirectory().fileName()); -#else - auto rootPath = Utils::FilePath::fromString( + Utils::FilePath rootPath; +#ifndef WITH_TESTS + rootPath = Utils::FilePath::fromString( namedSettings(ProjectExplorer::Constants::PROJECT_ROOT_PATH_KEY).toString()); - - if (rootPath.isEmpty()) - rootPath = Utils::FilePath::fromString(projectDirectory().fileName()); - - return rootPath; #endif + if (rootPath.isEmpty()) + rootPath = projectDirectory(); + return rootPath; } void CompilationDatabaseProject::configureAsExampleProject(Kit *kit) diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp index fba6ca246b9..37216a48878 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdbparser.cpp @@ -138,9 +138,9 @@ void CompilationDbParser::stop() QList CompilationDbParser::scannedFiles() const { + const bool canceled = m_treeScanner->future().isCanceled(); const TreeScanner::Result result = m_treeScanner->release(); - return m_treeScanner && !m_treeScanner->future().isCanceled() ? result.allFiles - : QList(); + return !canceled ? result.allFiles : QList(); } void CompilationDbParser::parserJobFinished() From 86061fb44a161a7fdb3bce8c1a7576ce516fba56 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 22 Oct 2021 10:52:48 +0200 Subject: [PATCH 15/39] LanguageClient: save document version for semantic tokens Change-Id: Icd17e7f140cd172b2515711a3562c479f0ad488d Reviewed-by: Christian Kandeler --- .../semantichighlightsupport.cpp | 32 ++++++++++++------- .../languageclient/semantichighlightsupport.h | 13 ++++++-- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp index 24fb346ff0b..66d6742b2bc 100644 --- a/src/plugins/languageclient/semantichighlightsupport.cpp +++ b/src/plugins/languageclient/semantichighlightsupport.cpp @@ -192,8 +192,9 @@ void SemanticTokenSupport::reloadSemanticTokens(TextDocument *textDocument) return; const Utils::FilePath filePath = textDocument->filePath(); const TextDocumentIdentifier docId(DocumentUri::fromFilePath(filePath)); - auto responseCallback = [this, filePath](const SemanticTokensFullRequest::Response &response){ - handleSemanticTokens(filePath, response.result().value_or(nullptr)); + auto responseCallback = [this, filePath, documentVersion = m_client->documentVersion(filePath)]( + const SemanticTokensFullRequest::Response &response) { + handleSemanticTokens(filePath, response.result().value_or(nullptr), documentVersion); }; /*if (supportedRequests.testFlag(SemanticRequestType::Range)) { const int start = widget->firstVisibleBlockNumber(); @@ -223,15 +224,18 @@ void SemanticTokenSupport::updateSemanticTokens(TextDocument *textDocument) const SemanticRequestTypes supportedRequests = supportedSemanticRequests(textDocument); if (supportedRequests.testFlag(SemanticRequestType::FullDelta)) { const Utils::FilePath filePath = textDocument->filePath(); - const QString &previousResultId = m_tokens.value(filePath).resultId().value_or(QString()); + const QString &previousResultId = m_tokens.value(filePath).tokens.resultId().value_or(QString()); if (!previousResultId.isEmpty()) { SemanticTokensDeltaParams params; params.setTextDocument(TextDocumentIdentifier(DocumentUri::fromFilePath(filePath))); params.setPreviousResultId(previousResultId); SemanticTokensFullDeltaRequest request(params); request.setResponseCallback( - [this, filePath](const SemanticTokensFullDeltaRequest::Response &response) { - handleSemanticTokensDelta(filePath, response.result().value_or(nullptr)); + [this, filePath, documentVersion = m_client->documentVersion(filePath)]( + const SemanticTokensFullDeltaRequest::Response &response) { + handleSemanticTokensDelta(filePath, + response.result().value_or(nullptr), + documentVersion); }); m_client->sendContent(request); return; @@ -369,10 +373,11 @@ SemanticRequestTypes SemanticTokenSupport::supportedSemanticRequests(TextDocumen } void SemanticTokenSupport::handleSemanticTokens(const Utils::FilePath &filePath, - const SemanticTokensResult &result) + const SemanticTokensResult &result, + int documentVersion) { if (auto tokens = Utils::get_if(&result)) { - m_tokens[filePath] = *tokens; + m_tokens[filePath] = {*tokens, documentVersion}; highlight(filePath); } else { m_tokens.remove(filePath); @@ -380,10 +385,12 @@ void SemanticTokenSupport::handleSemanticTokens(const Utils::FilePath &filePath, } void SemanticTokenSupport::handleSemanticTokensDelta( - const Utils::FilePath &filePath, const LanguageServerProtocol::SemanticTokensDeltaResult &result) + const Utils::FilePath &filePath, + const LanguageServerProtocol::SemanticTokensDeltaResult &result, + int documentVersion) { if (auto tokens = Utils::get_if(&result)) { - m_tokens[filePath] = *tokens; + m_tokens[filePath] = {*tokens, documentVersion}; } else if (auto tokensDelta = Utils::get_if(&result)) { QList edits = tokensDelta->edits(); if (edits.isEmpty()) { @@ -393,7 +400,8 @@ void SemanticTokenSupport::handleSemanticTokensDelta( Utils::sort(edits, &SemanticTokensEdit::start); - SemanticTokens &tokens = m_tokens[filePath]; + m_tokens[filePath].version = documentVersion; + SemanticTokens &tokens = m_tokens[filePath].tokens; const QList &data = tokens.data(); int newDataSize = data.size(); @@ -443,8 +451,8 @@ void SemanticTokenSupport::highlight(const Utils::FilePath &filePath) SyntaxHighlighter *highlighter = doc->syntaxHighlighter(); if (!highlighter) return; - const QList tokens = m_tokens.value(filePath).toTokens(m_tokenTypes, - m_tokenModifiers); + const QList tokens = m_tokens.value(filePath).tokens.toTokens(m_tokenTypes, + m_tokenModifiers); if (m_tokensHandler) { int line = 1; int column = 1; diff --git a/src/plugins/languageclient/semantichighlightsupport.h b/src/plugins/languageclient/semantichighlightsupport.h index 03fc2445fa1..4a8a639f319 100644 --- a/src/plugins/languageclient/semantichighlightsupport.h +++ b/src/plugins/languageclient/semantichighlightsupport.h @@ -86,16 +86,23 @@ private: LanguageServerProtocol::SemanticRequestTypes supportedSemanticRequests( TextEditor::TextDocument *document) const; void handleSemanticTokens(const Utils::FilePath &filePath, - const LanguageServerProtocol::SemanticTokensResult &result); + const LanguageServerProtocol::SemanticTokensResult &result, + int documentVersion); void handleSemanticTokensDelta(const Utils::FilePath &filePath, - const LanguageServerProtocol::SemanticTokensDeltaResult &result); + const LanguageServerProtocol::SemanticTokensDeltaResult &result, + int documentVersion); void highlight(const Utils::FilePath &filePath); void updateFormatHash(); void currentEditorChanged(); Client *m_client = nullptr; - QHash m_tokens; + struct VersionedTokens + { + LanguageServerProtocol::SemanticTokens tokens; + int version; + }; + QHash m_tokens; QList m_tokenTypes; QList m_tokenModifiers; QHash m_formatHash; From 404cf0f63229c6b46a77220769aebab10b1b383a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 21 Oct 2021 10:54:48 +0200 Subject: [PATCH 16/39] CppEditor: Mark generated setter as slot only for QObject-derived class Fixes: QTCREATORBUG-25789 Change-Id: I79174bcd617eb54540009491031cfae380383c41 Reviewed-by: David Schulz --- src/plugins/cppeditor/cppquickfix_test.cpp | 27 ++++++++++++++-------- src/plugins/cppeditor/cppquickfixes.cpp | 17 +++++++++++--- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index 95b2441e68e..7cfe3206915 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -3236,6 +3236,8 @@ void QuickfixTest::testGenerateGetterSetterOnlySetter() QList testDocuments; QByteArray original; QByteArray expected; + QuickFixSettings s; + s->setterAsSlot = true; // To be ignored, as we don't have QObjects here. // Header File original = @@ -3263,7 +3265,6 @@ void QuickfixTest::testGenerateGetterSetterOnlySetter() "}\n"; testDocuments << CppTestDocument::create("file.cpp", original, expected); - QuickFixSettings s; s->setterInCppFileFrom = 1; s->setterParameterNameTemplate = "value"; @@ -3547,10 +3548,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data() QTest::addColumn("expected"); QTest::newRow("InsertQtPropertyMembers") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " @Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n" "};\n") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " Q_PROPERTY(int it READ getIt WRITE setIt RESET resetIt NOTIFY itChanged)\n" "\n" "public:\n" @@ -3582,10 +3585,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data() "}\n"); QTest::newRow("InsertQtPropertyMembersResetWithoutSet") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " @Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n" "};\n") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " Q_PROPERTY(int it READ getIt RESET resetIt NOTIFY itChanged)\n" "\n" "public:\n" @@ -3615,10 +3620,12 @@ void QuickfixTest::testInsertQtPropertyMembers_data() "}\n"); QTest::newRow("InsertQtPropertyMembersResetWithoutSetAndNotify") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " @Q_PROPERTY(int it READ getIt RESET resetIt)\n" "};\n") - << _("struct XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "struct XmarksTheSpot : public QObject {\n" " Q_PROPERTY(int it READ getIt RESET resetIt)\n" "\n" "public:\n" @@ -3642,13 +3649,15 @@ void QuickfixTest::testInsertQtPropertyMembers_data() "}\n"); QTest::newRow("InsertQtPropertyMembersPrivateBeforePublic") - << _("class XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "class XmarksTheSpot : public QObject {\n" "private:\n" " @Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n" "public:\n" " void find();\n" "};\n") - << _("class XmarksTheSpot {\n" + << _("struct QObject { void connect(); }\n" + "class XmarksTheSpot : public QObject {\n" "private:\n" " Q_PROPERTY(int it READ getIt WRITE setIt NOTIFY itChanged)\n" " int m_it;\n" diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 91974761c28..6f5d9d07d17 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -3971,9 +3971,20 @@ void GetterSetterRefactoringHelper::performGeneration(ExistingGetterSetterData d } // setter declaration - const InsertionPointLocator::AccessSpec setterAccessSpec = m_settings->setterAsSlot - ? InsertionPointLocator::PublicSlot - : InsertionPointLocator::Public; + InsertionPointLocator::AccessSpec setterAccessSpec = InsertionPointLocator::Public; + if (m_settings->setterAsSlot) { + const QByteArray connectName = "connect"; + const Identifier connectId(connectName.data(), connectName.size()); + const QList items = m_operation->context().lookup(&connectId, data.clazz); + for (const LookupItem &item : items) { + if (item.declaration() && item.declaration()->enclosingClass() + && overview.prettyName(item.declaration()->enclosingClass()->name()) + == "QObject") { + setterAccessSpec = InsertionPointLocator::PublicSlot; + break; + } + } + } const auto createSetterBodyWithSignal = [this, &getSetTemplate, &data] { QString body; QTextStream setter(&body); From 474ce0399ddcd82651cae8ae60eb5e3e56c37503 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 21 Oct 2021 10:19:12 +0200 Subject: [PATCH 17/39] Ignore the wheel event explicitly in order to propagate it further MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Qt 6 brings a behavioral change regarding delivery of wheel events: 92df790f46b3a8b17aec2f385d6472fd3f8647f6 and 2a857ee28315c5bacfe2ecaf402ca9005b35c20e. If there is an event filter installed and wheel event is being processed, the event is now accepted by default, which means that after returning true from eventFilter(), the event is not propagated anymore. Since we want to redirect the event to the parent HelpViewer object, we explicitly ignore the event prior to returning true. This patch fixes the QTextBrowser backend. Amends 0b96a1b76b869d8227e10ec1dd6aa9c21ba5ff13 Fixes: QTCREATORBUG-26369 Change-Id: I7a0167c54f830fffab13d73eb91cb2ecbd730c86 Reviewed-by: Robert Löhning --- src/plugins/help/textbrowserhelpviewer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/help/textbrowserhelpviewer.cpp b/src/plugins/help/textbrowserhelpviewer.cpp index fd6c36c4d4a..6447190ca96 100644 --- a/src/plugins/help/textbrowserhelpviewer.cpp +++ b/src/plugins/help/textbrowserhelpviewer.cpp @@ -372,6 +372,7 @@ void TextBrowserHelpWidget::wheelEvent(QWheelEvent *e) // view in a broken way. We handle it properly through the sequence: // HelpViewer::wheelEvent() -> LocalHelpManager::setFontZoom() -> // HelpViewer::setFontZoom() -> TextBrowserHelpViewer::setFontAndScale(). + e->ignore(); return; } } From 1b24bd52b0b5351854d47084fd86956e2a57fed2 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 21 Oct 2021 13:41:35 +0200 Subject: [PATCH 18/39] Doc: Update information about multi-cursor editing Fixes: QTCREATORBUG-26459 Change-Id: I89ac09094fe707a5d432cfe84c8b3ee18887a424 Reviewed-by: David Schulz --- .../src/editors/creator-code-refactoring.qdoc | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index f6548d8cf0d..ab57bb4d8ff 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -157,14 +157,18 @@ the symbol. All instances of the local symbol are changed as you type. \endif - \section1 Column Editing + \section1 Multi-Cursor Editing - To apply a change to several rows in a column simultaneously, hold - \key Alt, select the rows using the mouse, and enter or remove text. - The changes are made simultaneously at the cursor position on all the - selected rows. + To apply a change to several places simultaneously, press and hold \key Alt, + and click to place cursors in several places. Any changes you make are + applied simultaneously at all the cursor positions. - On Windows and Linux, you can also hold \key {Alt+Shift} and select - the rows using the arrow keys and the \key PageUp, \key PageDown, - \key Home, \key End keys. + Use the arrow keys to move all the cursors up and down. The \key Home and + \key End key move all the cursors to the beginning or to the end of the + line. + + Press and hold \key Alt and double-click strings to select several strings + simultaneously. + + Press \key Esc to remove all the cursors and selections. */ From d84de31384c6c4abac0f402f58b7e4fbb56eaa02 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 18 Oct 2021 12:09:55 +0200 Subject: [PATCH 19/39] Docker: Map command executables to device path Change-Id: Ia8edf686a546f57b42ed0141e2986eded6f96ec1 Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 4461c7a1e86..6efa7fac557 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -147,7 +147,10 @@ void DockerDeviceProcess::start(const Runnable &runnable) disconnect(&m_process); - m_process.setCommand(runnable.command); + CommandLine command = runnable.command; + command.setExecutable( + command.executable().withNewPath(dockerDevice->mapToDevicePath(command.executable()))); + m_process.setCommand(command); m_process.setEnvironment(runnable.environment); m_process.setWorkingDirectory(runnable.workingDirectory); connect(&m_process, &QtcProcess::errorOccurred, this, &DeviceProcess::error); @@ -158,7 +161,7 @@ void DockerDeviceProcess::start(const Runnable &runnable) this, &DeviceProcess::readyReadStandardError); connect(&m_process, &QtcProcess::started, this, &DeviceProcess::started); - LOG("Running process:" << runnable.command.toUserOutput() + LOG("Running process:" << command.toUserOutput() << "in" << runnable.workingDirectory.toUserOutput()); dockerDevice->runProcess(m_process); } From 2eb50afd9c9039f29d25171583e0270b5b1516ef Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Oct 2021 15:48:59 +0200 Subject: [PATCH 20/39] LanguageClient: Fix document version update ... for empty semantic tokens delta. Amends 86061fb44a. Change-Id: Id6d6cdc1904ea5353d18cea57b55ed3fa16727de Reviewed-by: David Schulz --- src/plugins/languageclient/semantichighlightsupport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp index 66d6742b2bc..e30320ce982 100644 --- a/src/plugins/languageclient/semantichighlightsupport.cpp +++ b/src/plugins/languageclient/semantichighlightsupport.cpp @@ -392,6 +392,7 @@ void SemanticTokenSupport::handleSemanticTokensDelta( if (auto tokens = Utils::get_if(&result)) { m_tokens[filePath] = {*tokens, documentVersion}; } else if (auto tokensDelta = Utils::get_if(&result)) { + m_tokens[filePath].version = documentVersion; QList edits = tokensDelta->edits(); if (edits.isEmpty()) { highlight(filePath); @@ -400,7 +401,6 @@ void SemanticTokenSupport::handleSemanticTokensDelta( Utils::sort(edits, &SemanticTokensEdit::start); - m_tokens[filePath].version = documentVersion; SemanticTokens &tokens = m_tokens[filePath].tokens; const QList &data = tokens.data(); From 6f26a1545c30e19ffc754e23da52300039183ee6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 22 Oct 2021 15:06:46 +0200 Subject: [PATCH 21/39] ClangCodeModel: Check doc revision when highlighting with clangd Change-Id: I981d375e3656e89bb66516218e3f4e33ee8bbb9e Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 25 ++++++++++++++----- .../semantichighlightsupport.cpp | 7 +++--- .../languageclient/semantichighlightsupport.h | 4 +-- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 2b6044f3ac3..c65d8ee95c9 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -997,7 +997,8 @@ public: HelpItem::Category category = HelpItem::Unknown, const QString &type = {}); - void handleSemanticTokens(TextDocument *doc, const QList &tokens); + void handleSemanticTokens(TextDocument *doc, const QList &tokens, + int version); enum class AstCallbackMode { SyncIfPossible, AlwaysAsync }; using TextDocOrFile = const Utils::variant; @@ -1177,8 +1178,9 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) const auto hideDiagsHandler = []{ ClangDiagnosticManager::clearTaskHubIssues(); }; setDiagnosticsHandlers(textMarkCreator, hideDiagsHandler); setSymbolStringifier(displayNameFromDocumentSymbol); - setSemanticTokensHandler([this](TextDocument *doc, const QList &tokens) { - d->handleSemanticTokens(doc, tokens); + setSemanticTokensHandler([this](TextDocument *doc, const QList &tokens, + int version) { + d->handleSemanticTokens(doc, tokens, version); }); hoverHandler()->setHelpItemProvider([this](const HoverRequest::Response &response, const DocumentUri &uri) { @@ -2454,18 +2456,29 @@ static void semanticHighlighter(QFutureInterface &future, // Sometimes we have no choice, as for #include directives, which appear neither // in the semantic tokens nor in the AST. void ClangdClient::Private::handleSemanticTokens(TextDocument *doc, - const QList &tokens) + const QList &tokens, + int version) { SubtaskTimer t(highlightingTimer); - qCDebug(clangdLog()) << "handling LSP tokens" << doc->filePath() << tokens.size(); + qCDebug(clangdLog) << "handling LSP tokens" << doc->filePath() << tokens.size(); + if (version != q->documentVersion(doc->filePath())) { + qCDebug(clangdLogHighlight) << "LSP tokens outdated; aborting highlighting procedure" + << version << q->documentVersion(doc->filePath()); + return; + } for (const ExpandedSemanticToken &t : tokens) qCDebug(clangdLogHighlight()) << '\t' << t.line << t.column << t.length << t.type << t.modifiers; - const auto astHandler = [this, tokens, doc](const AstNode &ast, const MessageId &) { + const auto astHandler = [this, tokens, doc, version](const AstNode &ast, const MessageId &) { FinalizingSubtaskTimer t(highlightingTimer); if (!q->documentOpen(doc)) return; + if (version != q->documentVersion(doc->filePath())) { + qCDebug(clangdLogHighlight) << "AST not up to date; aborting highlighting procedure" + << version << q->documentVersion(doc->filePath()); + return; + } if (clangdLogAst().isDebugEnabled()) ast.print(); diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp index e30320ce982..a1b43729d4a 100644 --- a/src/plugins/languageclient/semantichighlightsupport.cpp +++ b/src/plugins/languageclient/semantichighlightsupport.cpp @@ -451,8 +451,9 @@ void SemanticTokenSupport::highlight(const Utils::FilePath &filePath) SyntaxHighlighter *highlighter = doc->syntaxHighlighter(); if (!highlighter) return; - const QList tokens = m_tokens.value(filePath).tokens.toTokens(m_tokenTypes, - m_tokenModifiers); + const VersionedTokens versionedTokens = m_tokens.value(filePath); + const QList tokens = versionedTokens.tokens + .toTokens(m_tokenTypes, m_tokenModifiers); if (m_tokensHandler) { int line = 1; int column = 1; @@ -477,7 +478,7 @@ void SemanticTokenSupport::highlight(const Utils::FilePath &filePath) expandedToken.length = token.length; expandedTokens << expandedToken; }; - m_tokensHandler(doc, expandedTokens); + m_tokensHandler(doc, expandedTokens, versionedTokens.version); return; } int line = 1; diff --git a/src/plugins/languageclient/semantichighlightsupport.h b/src/plugins/languageclient/semantichighlightsupport.h index 4a8a639f319..1a90101b3e8 100644 --- a/src/plugins/languageclient/semantichighlightsupport.h +++ b/src/plugins/languageclient/semantichighlightsupport.h @@ -48,8 +48,8 @@ public: QString type; QStringList modifiers; }; -using SemanticTokensHandler = std::function &)>; +using SemanticTokensHandler = std::function &, int)>; namespace SemanticHighligtingSupport { From 12bc192422c75d5e7866be17c3bb42352d64ab47 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 18 Oct 2021 09:44:10 +0200 Subject: [PATCH 22/39] Docker: mount python dumpers to device Change-Id: Ic0d67b4a18247439f5797a0dcf74df945ef6f61e Reviewed-by: hjk --- src/plugins/debugger/cdb/cdbengine.cpp | 2 +- src/plugins/debugger/debuggerengine.cpp | 2 ++ src/plugins/debugger/debuggerengine.h | 2 ++ src/plugins/debugger/debuggerruncontrol.cpp | 2 ++ src/plugins/debugger/gdb/gdbengine.cpp | 3 +-- src/plugins/debugger/lldb/lldbengine.cpp | 6 ++---- src/plugins/docker/dockerdevice.cpp | 3 +++ .../projectexplorer/devicesupport/idevice.cpp | 12 ++++++++++++ src/plugins/projectexplorer/devicesupport/idevice.h | 3 +++ 9 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 23e0e2208ea..f98d2393883 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2753,7 +2753,7 @@ void CdbEngine::setupScripting(const DebuggerResponse &response) return; } - QString dumperPath = Core::ICore::resourcePath("debugger").toUserOutput(); + QString dumperPath = runParameters().dumperPath.toUserOutput(); dumperPath.replace('\\', "\\\\"); runCommand({"sys.path.insert(1, '" + dumperPath + "')", ScriptCommand}); runCommand({"from cdbbridge import Dumper", ScriptCommand}); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 87d52ad74b1..f2dd9f09a00 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -1056,6 +1056,8 @@ void DebuggerEngine::setRunTool(DebuggerRunTool *runTool) d->m_device = runControl->device(); if (!d->m_device) d->m_device = d->m_runParameters.inferior.device; + if (d->m_device) + d->m_runParameters.dumperPath = d->m_device->debugDumperPath(); d->m_terminalRunner = runTool->terminalRunner(); validateRunParameters(d->m_runParameters); diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 2099bc2f959..6c66d269c8d 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -203,6 +203,8 @@ public: int testCase = 0; QStringList validationErrors; + + Utils::FilePath dumperPath; }; class UpdateParameters diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 8b92c7d31dc..22daff02a21 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -946,6 +946,8 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, AllowTerminal allowTerm m_engine = createPdbEngine(); } } + + m_runParameters.dumperPath = Core::ICore::resourcePath("debugger/"); } void DebuggerRunTool::startRunControl() diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index b5494c9f024..63f654e7a86 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3985,7 +3985,6 @@ void GdbEngine::setupEngine() // We need to guarantee a roundtrip before the adapter proceeds. // Make sure this stays the last command in startGdb(). // Don't use ConsoleCommand, otherwise Mac won't markup the output. - const QString dumperSourcePath = ICore::resourcePath("debugger/").toString(); //if (terminal()->isUsable()) // runCommand({"set inferior-tty " + QString::fromUtf8(terminal()->slaveDevice())}); @@ -3993,7 +3992,7 @@ void GdbEngine::setupEngine() const QString uninstalledData = rp.debugger.command.executable().pathAppended("data-directory/python").path(); - runCommand({"python sys.path.insert(1, '" + dumperSourcePath + "')"}); + runCommand({"python sys.path.insert(1, '" + rp.dumperPath.path() + "')"}); runCommand({"python sys.path.append('" + uninstalledData + "')"}); runCommand({"python from gdbbridge import *"}); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 26816ce5469..744387baa3a 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -237,9 +237,9 @@ void LldbEngine::setupEngine() showStatusMessage(tr("Setting up inferior...")); - const QByteArray dumperSourcePath = ICore::resourcePath("debugger/").toString().toLocal8Bit(); + const DebuggerRunParameters &rp = runParameters(); - executeCommand("script sys.path.insert(1, '" + dumperSourcePath + "')"); + executeCommand("script sys.path.insert(1, '" + rp.dumperPath.path().toLocal8Bit() + "')"); // This triggers reportState("enginesetupok") or "enginesetupfailed": executeCommand("script from lldbbridge import *"); @@ -268,8 +268,6 @@ void LldbEngine::setupEngine() }; runCommand(cmd1); - const DebuggerRunParameters &rp = runParameters(); - const SourcePathMap sourcePathMap = mergePlatformQtPath(rp, debuggerSettings()->sourcePathMap.value()); for (auto it = sourcePathMap.constBegin(), cend = sourcePathMap.constEnd(); diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 6efa7fac557..1af3b5d436f 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -839,6 +839,9 @@ void DockerDevicePrivate::startContainer() mount = q->mapToDevicePath(FilePath::fromUserInput(mount)); dockerCreate.addArgs({"-v", mount + ':' + mount}); } + FilePath dumperPath = FilePath::fromString("/tmp/qtcreator/debugger"); + dockerCreate.addArgs({"-v", q->debugDumperPath().toUserOutput() + ':' + dumperPath.path()}); + q->setDebugDumperPath(dumperPath); dockerCreate.addArgs({"--entrypoint", "/bin/sh", m_data.imageId}); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index f1bedcc4416..746890a6cae 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -33,6 +33,7 @@ #include "../kitinformation.h" #include "../runconfiguration.h" +#include #include #include #include @@ -153,6 +154,7 @@ public: QSsh::SshConnectionParameters sshParameters; PortList freePorts; FilePath debugServerPath; + FilePath debugDumperPath = Core::ICore::resourcePath("debugger/"); FilePath qmlRunCommand; bool emptyCommandAllowed = false; @@ -763,6 +765,16 @@ void IDevice::setDebugServerPath(const FilePath &path) d->debugServerPath = path; } +FilePath IDevice::debugDumperPath() const +{ + return d->debugDumperPath; +} + +void IDevice::setDebugDumperPath(const Utils::FilePath &path) +{ + d->debugDumperPath = path; +} + FilePath IDevice::qmlRunCommand() const { return d->qmlRunCommand; diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index 56bdbb5bd28..978c08a25a6 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -217,6 +217,9 @@ public: Utils::FilePath debugServerPath() const; void setDebugServerPath(const Utils::FilePath &path); + Utils::FilePath debugDumperPath() const; + void setDebugDumperPath(const Utils::FilePath &path); + Utils::FilePath qmlRunCommand() const; void setQmlRunCommand(const Utils::FilePath &path); From fbcb45c105b7e8aec5eab382c05774448c1e6e13 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Thu, 7 Oct 2021 18:50:35 +0300 Subject: [PATCH 23/39] Android: get build dir based on settings file path for qmake projects Check Constants::AndroidDeploySettingsFile path first, and use the buildTarget's workingDir only if that former value is empty. Fixes: QTCREATORBUG-26357 Change-Id: I726a4b5cd60042845988b4428eea03ef0adb9920 Reviewed-by: Alessandro Portale --- src/plugins/android/androidmanager.cpp | 15 +++++++++++++- .../androidpackageinstallationstep.cpp | 20 ++----------------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 84532676f99..3c1a5301add 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -269,7 +269,20 @@ FilePath AndroidManager::buildDirectory(const Target *target) { if (const BuildSystem *bs = target->buildSystem()) { const QString buildKey = target->activeBuildKey(); - const FilePath buildDir = bs->buildTarget(target->activeBuildKey()).workingDirectory; + + // Get the target build dir based on the settings file path + FilePath buildDir; + const ProjectNode *node = target->project()->findNodeForBuildKey(buildKey); + if (node) { + const QString settingsFile = node->data(Constants::AndroidDeploySettingsFile).toString(); + buildDir = FilePath::fromUserInput(settingsFile).parentDir(); + } + + if (!buildDir.isEmpty()) + return buildDir; + + // Otherwise fallback to target working dir + buildDir = bs->buildTarget(target->activeBuildKey()).workingDirectory; if (isQt5CmakeProject(target)) { // Return the main build dir and not the android libs dir const QString libsDir = QString(Constants::ANDROID_BUILD_DIRECTORY) + "/libs"; diff --git a/src/plugins/android/androidpackageinstallationstep.cpp b/src/plugins/android/androidpackageinstallationstep.cpp index 9212443b7ea..aa458c63a76 100644 --- a/src/plugins/android/androidpackageinstallationstep.cpp +++ b/src/plugins/android/androidpackageinstallationstep.cpp @@ -67,10 +67,6 @@ public: AndroidPackageInstallationStep(BuildStepList *bsl, Id id); QString nativeAndroidBuildPath() const; - - Utils::FilePath androidBuildDirectory() const; - Utils::FilePath buildDirectory() const; - private: bool init() final; void setupOutputFormatter(OutputFormatter *formatter) final; @@ -108,7 +104,7 @@ bool AndroidPackageInstallationStep::init() processParameters()->setCommandLine(cmd); // This is useful when running an example target from a Qt module project. - processParameters()->setWorkingDirectory(buildDirectory()); + processParameters()->setWorkingDirectory(AndroidManager::buildDirectory(target())); m_androidDirsToClean.clear(); // don't remove gradle's cache, it takes ages to rebuild it. @@ -120,7 +116,7 @@ bool AndroidPackageInstallationStep::init() QString AndroidPackageInstallationStep::nativeAndroidBuildPath() const { - QString buildPath = androidBuildDirectory().toString(); + QString buildPath = AndroidManager::androidBuildDirectory(target()).toString(); if (HostOsInfo::isWindowsHost()) if (buildEnvironment().searchInPath("sh.exe").isEmpty()) buildPath = QDir::toNativeSeparators(buildPath); @@ -128,18 +124,6 @@ QString AndroidPackageInstallationStep::nativeAndroidBuildPath() const return buildPath; } -FilePath AndroidPackageInstallationStep::androidBuildDirectory() const -{ - return buildDirectory() / Constants::ANDROID_BUILD_DIRECTORY; -} - -FilePath AndroidPackageInstallationStep::buildDirectory() const -{ - if (const BuildSystem *bs = buildSystem()) - return buildSystem()->buildTarget(target()->activeBuildKey()).workingDirectory; - return {}; -} - void AndroidPackageInstallationStep::setupOutputFormatter(OutputFormatter *formatter) { formatter->addLineParser(new GnuMakeParser); From affe3ccf510e40ee21709db581dff08089f03725 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sun, 26 Sep 2021 23:06:00 +0300 Subject: [PATCH 24/39] Android: Make refresh action device specific Change-Id: I18386ad88e04696068f5f127cadb7ffcc6f25a56 Reviewed-by: hjk Reviewed-by: Alessandro Portale --- src/plugins/android/androiddevice.cpp | 27 +++++++++++++++++++++++++-- src/plugins/android/androiddevice.h | 1 + 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index ea4ddbf8e16..662becee339 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -151,8 +151,9 @@ AndroidDevice::AndroidDevice() setOsType(Utils::OsTypeOtherUnix); setDeviceState(DeviceConnected); - addDeviceAction({tr("Refresh"), [](const IDevice::Ptr &, QWidget *) { - AndroidDeviceManager::instance()->updateDevicesListOnce(); + addDeviceAction({tr("Refresh"), [](const IDevice::Ptr &device, QWidget *parent) { + Q_UNUSED(parent) + AndroidDeviceManager::instance()->updateDeviceState(device); }}); addEmulatorActionsIfNotFound(); @@ -448,6 +449,28 @@ void AndroidDeviceManager::updateDevicesListOnce() } } +void AndroidDeviceManager::updateDeviceState(const ProjectExplorer::IDevice::Ptr &device) +{ + const AndroidDevice *dev = static_cast(device.data()); + const QString serial = dev->serialNumber(); + DeviceManager *const devMgr = DeviceManager::instance(); + const Utils::Id id = dev->id(); + if (serial.isEmpty() && dev->machineType() == IDevice::Emulator) { + devMgr->setDeviceState(id, IDevice::DeviceConnected); + return; + } + + const QStringList args = AndroidDeviceInfo::adbSelector(serial) << "shell" << "echo" << "1"; + const SdkToolResult result = AndroidManager::runAdbCommand(args); + const int success = result.success(); + if (success) + devMgr->setDeviceState(id, IDevice::DeviceReadyToUse); + else if (dev->machineType() == IDevice::Emulator || result.stdErr().contains("unauthorized")) + devMgr->setDeviceState(id, IDevice::DeviceConnected); + else + devMgr->setDeviceState(id, IDevice::DeviceDisconnected); +} + void AndroidDeviceManager::startAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent) { Q_UNUSED(parent) diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h index 31249e84808..e9ba8be038c 100644 --- a/src/plugins/android/androiddevice.h +++ b/src/plugins/android/androiddevice.h @@ -101,6 +101,7 @@ public: void setupDevicesWatcher(); void updateDevicesList(); void updateDevicesListOnce(); + void updateDeviceState(const ProjectExplorer::IDevice::Ptr &device); void startAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent = nullptr); void eraseAvd(const ProjectExplorer::IDevice::Ptr &device, QWidget *parent = nullptr); From ec55b1a48312187d356ef1b85adf251511d0326f Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Wed, 6 Oct 2021 22:35:12 +0300 Subject: [PATCH 25/39] Android: remove AndroidDeviceType and State from AndroidDeviceInfo No need to have these enums which are now only a duplication of IDevice::MachineType and IDevice::DeviceState. Change-Id: Icc3f112f2670c7354bb282b36fad0f0631b9e047 Reviewed-by: Alessandro Portale Reviewed-by: hjk --- src/plugins/android/androidavdmanager.cpp | 2 +- src/plugins/android/androidconfigurations.cpp | 11 +++--- src/plugins/android/androiddevice.cpp | 34 ++++--------------- src/plugins/android/androiddevice.h | 1 - src/plugins/android/androiddeviceinfo.cpp | 4 +-- src/plugins/android/androiddeviceinfo.h | 10 +++--- src/plugins/android/androidmanager.cpp | 2 +- .../android/avdmanageroutputparser.cpp | 8 ++--- .../android/tst_avdmanageroutputparser.cpp | 12 +++---- 9 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index 1b308039107..27000badf6e 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -320,7 +320,7 @@ QString AndroidAvdManager::findAvd(const QString &avdName) const { QVector devices = m_config.connectedDevices(); foreach (AndroidDeviceInfo device, devices) { - if (device.type != AndroidDeviceInfo::Emulator) + if (device.type != ProjectExplorer::IDevice::Emulator) continue; if (device.avdname == avdName) return device.serialNumber; diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 7bc1c6310d3..65f55080630 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -613,17 +613,18 @@ QVector AndroidConfig::connectedDevices(QString *error) const const QString deviceType = device.mid(device.indexOf('\t')).trimmed(); AndroidDeviceInfo dev; dev.serialNumber = serialNo; - dev.type = serialNo.startsWith(QLatin1String("emulator")) ? AndroidDeviceInfo::Emulator : AndroidDeviceInfo::Hardware; + dev.type = serialNo.startsWith(QLatin1String("emulator")) ? IDevice::Emulator + : IDevice::Hardware; dev.sdk = getSDKVersion(dev.serialNumber); dev.cpuAbi = getAbis(dev.serialNumber); if (deviceType == QLatin1String("unauthorized")) - dev.state = AndroidDeviceInfo::UnAuthorizedState; + dev.state = IDevice::DeviceConnected; else if (deviceType == QLatin1String("offline")) - dev.state = AndroidDeviceInfo::OfflineState; + dev.state = IDevice::DeviceDisconnected; else - dev.state = AndroidDeviceInfo::OkState; + dev.state = IDevice::DeviceReadyToUse; - if (dev.type == AndroidDeviceInfo::Emulator) { + if (dev.type == IDevice::Emulator) { dev.avdname = getAvdName(dev.serialNumber); if (dev.avdname.isEmpty()) dev.avdname = serialNo; diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 662becee339..c09966bb19b 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -216,14 +216,7 @@ IDevice::Ptr AndroidDevice::create() AndroidDeviceInfo AndroidDevice::androidDeviceInfoFromIDevice(const IDevice *dev) { AndroidDeviceInfo info; - AndroidDeviceInfo::State state; - if (dev->deviceState() == IDevice::DeviceReadyToUse) - state = AndroidDeviceInfo::OkState; - else if (dev->deviceState() == IDevice::DeviceDisconnected) - state = AndroidDeviceInfo::OfflineState; - else if (dev->deviceState() == IDevice::DeviceConnected) - state = AndroidDeviceInfo::UnAuthorizedState; - info.state = state; + info.state = dev->deviceState(); info.avdname = dev->extraData(Constants::AndroidAvdName).toString(); info.serialNumber = dev->extraData(Constants::AndroidSerialNumber).toString(); info.cpuAbi = dev->extraData(Constants::AndroidCpuAbi).toStringList(); @@ -232,18 +225,13 @@ AndroidDeviceInfo AndroidDevice::androidDeviceInfoFromIDevice(const IDevice *dev info.avdSkin = dev->extraData(Constants::AndroidAvdSkin).toString(); info.avdSdcardSize = dev->extraData(Constants::AndroidAvdSdcard).toString(); info.sdk = dev->extraData(Constants::AndroidSdk).toInt(); - info.type = (dev->machineType() == ProjectExplorer::IDevice::Hardware - ? AndroidDeviceInfo::Hardware : AndroidDeviceInfo::Emulator); + info.type = dev->machineType(); return info; } void AndroidDevice::setAndroidDeviceInfoExtras(IDevice *dev, const AndroidDeviceInfo &info) { - dev->setMachineType(info.type == AndroidDeviceInfo::Hardware - ? ProjectExplorer::IDevice::Hardware - : ProjectExplorer::IDevice::Emulator); - dev->setDeviceState(deviceStateFromInfo(info.state)); dev->setExtraData(Constants::AndroidAvdName, info.avdname); dev->setExtraData(Constants::AndroidSerialNumber, info.serialNumber); dev->setExtraData(Constants::AndroidCpuAbi, info.cpuAbi); @@ -256,15 +244,14 @@ void AndroidDevice::setAndroidDeviceInfoExtras(IDevice *dev, const AndroidDevice QString AndroidDevice::displayNameFromInfo(const AndroidDeviceInfo &info) { - return info.type == AndroidDeviceInfo::Hardware + return info.type == IDevice::Hardware ? AndroidConfigurations::currentConfig().getProductModel(info.serialNumber) : info.avdname; } Utils::Id AndroidDevice::idFromDeviceInfo(const AndroidDeviceInfo &info) { - const QString id = (info.type == AndroidDeviceInfo::Hardware ? info.serialNumber - : info.avdname); + const QString id = (info.type == IDevice::Hardware ? info.serialNumber : info.avdname); return Utils::Id(Constants::ANDROID_DEVICE_ID).withSuffix(':' + id); } @@ -273,15 +260,6 @@ Utils::Id AndroidDevice::idFromAvdInfo(const CreateAvdInfo &info) return Utils::Id(Constants::ANDROID_DEVICE_ID).withSuffix(':' + info.name); } -IDevice::DeviceState AndroidDevice::deviceStateFromInfo(AndroidDeviceInfo::State state) -{ - if (state == AndroidDeviceInfo::OkState) - return IDevice::DeviceReadyToUse; - if (state == AndroidDeviceInfo::OfflineState) - return IDevice::DeviceDisconnected; - return IDevice::DeviceConnected; -} - QStringList AndroidDevice::supportedAbis() const { return extraData(Constants::AndroidCpuAbi).toStringList(); @@ -596,7 +574,7 @@ void AndroidDeviceManager::devicesListUpdated() if (dev->machineType() == IDevice::Emulator && !runningAvds.contains(displayName)) newState = IDevice::DeviceConnected; else - newState = AndroidDevice::deviceStateFromInfo(item.state); + newState = item.state; if (dev->deviceState() != newState) { qCDebug(androidDeviceLog, "Device id \"%s\" changed its state.", dev->id().toString().toUtf8().data()); @@ -614,6 +592,8 @@ void AndroidDeviceManager::devicesListUpdated() AndroidDevice *newDev = new AndroidDevice(); newDev->setupId(IDevice::AutoDetected, deviceId); newDev->setDisplayName(displayName); + newDev->setMachineType(item.type); + newDev->setDeviceState(item.state); AndroidDevice::setAndroidDeviceInfoExtras(newDev, item); qCDebug(androidDeviceLog, "Registering new Android device id \"%s\".", newDev->id().toString().toUtf8().data()); diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h index e9ba8be038c..e99d8bd4cec 100644 --- a/src/plugins/android/androiddevice.h +++ b/src/plugins/android/androiddevice.h @@ -55,7 +55,6 @@ public: static QString displayNameFromInfo(const AndroidDeviceInfo &info); static Utils::Id idFromDeviceInfo(const AndroidDeviceInfo &info); static Utils::Id idFromAvdInfo(const CreateAvdInfo &info); - static IDevice::DeviceState deviceStateFromInfo(AndroidDeviceInfo::State state); QStringList supportedAbis() const; bool canSupportAbis(const QStringList &abis) const; diff --git a/src/plugins/android/androiddeviceinfo.cpp b/src/plugins/android/androiddeviceinfo.cpp index 817f64a362e..707ee3a6885 100644 --- a/src/plugins/android/androiddeviceinfo.cpp +++ b/src/plugins/android/androiddeviceinfo.cpp @@ -43,7 +43,7 @@ bool AndroidDeviceInfo::operator<(const AndroidDeviceInfo &other) const if (serialNumber.contains("????") != other.serialNumber.contains("????")) return !serialNumber.contains("????"); if (type != other.type) - return type == AndroidDeviceInfo::Hardware; + return type == ProjectExplorer::IDevice::Hardware; if (sdk != other.sdk) return sdk < other.sdk; if (avdname != other.avdname) @@ -62,7 +62,7 @@ bool AndroidDeviceInfo::operator==(const AndroidDeviceInfo &other) const QDebug &operator<<(QDebug &stream, const AndroidDeviceInfo &device) { - stream << "Type:" << (device.type == AndroidDeviceInfo::Emulator ? "Emulator" : "Device") + stream << "Type:" << (device.type == ProjectExplorer::IDevice::Emulator ? "Emulator" : "Device") << ", ABI:" << device.cpuAbi << ", Serial:" << device.serialNumber << ", Name:" << device.avdname << ", API:" << device.sdk << ", Authorised:" << !device.unauthorized; diff --git a/src/plugins/android/androiddeviceinfo.h b/src/plugins/android/androiddeviceinfo.h index 9c8e6c30ea1..ff4b662191c 100644 --- a/src/plugins/android/androiddeviceinfo.h +++ b/src/plugins/android/androiddeviceinfo.h @@ -30,6 +30,10 @@ #include #include +#include + +using namespace ProjectExplorer; + namespace Android { class AndroidDeviceInfo @@ -44,11 +48,9 @@ public: QString avdSdcardSize; int sdk = -1; - enum State { OkState, UnAuthorizedState, OfflineState }; - State state = OfflineState; + IDevice::DeviceState state = IDevice::DeviceDisconnected; bool unauthorized = false; - enum AndroidDeviceType { Hardware, Emulator }; - AndroidDeviceType type = Emulator; + IDevice::MachineType type = IDevice::Emulator; static QStringList adbSelector(const QString &serialNumber); diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index e8944fba17f..9b623baa8d6 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -558,7 +558,7 @@ void AndroidManager::installQASIPackage(Target *target, const FilePath &packageP return; QString deviceSerialNumber = info.serialNumber; - if (info.type == AndroidDeviceInfo::Emulator) { + if (info.type == IDevice::Emulator) { deviceSerialNumber = AndroidAvdManager().startAvd(info.avdname); if (deviceSerialNumber.isEmpty()) Core::MessageManager::writeDisrupting(tr("Starting Android virtual device failed.")); diff --git a/src/plugins/android/avdmanageroutputparser.cpp b/src/plugins/android/avdmanageroutputparser.cpp index ac758f41c7c..2cb8a9ac0b1 100644 --- a/src/plugins/android/avdmanageroutputparser.cpp +++ b/src/plugins/android/avdmanageroutputparser.cpp @@ -134,10 +134,10 @@ AndroidDeviceInfoList parseAvdList(const QString &output, QStringList *avdErrorP } } else if (Utils::optional avd = parseAvd(avdInfo)) { // armeabi-v7a devices can also run armeabi code - if (avd->cpuAbi.contains(ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A)) - avd->cpuAbi << ProjectExplorer::Constants::ANDROID_ABI_ARMEABI; - avd->state = AndroidDeviceInfo::OkState; - avd->type = AndroidDeviceInfo::Emulator; + if (avd->cpuAbi.contains(Constants::ANDROID_ABI_ARMEABI_V7A)) + avd->cpuAbi << Constants::ANDROID_ABI_ARMEABI; + avd->state = IDevice::DeviceConnected; + avd->type = IDevice::Emulator; return AvdResult(*avd); } else { qCDebug(avdOutputParserLog) << "Avd Parsing: Parsing failed: " << avdInfo; diff --git a/tests/auto/android/tst_avdmanageroutputparser.cpp b/tests/auto/android/tst_avdmanageroutputparser.cpp index 004ec1b6a61..059f479fea4 100644 --- a/tests/auto/android/tst_avdmanageroutputparser.cpp +++ b/tests/auto/android/tst_avdmanageroutputparser.cpp @@ -63,9 +63,9 @@ void tst_AvdManagerOutputParser::parse_data() "", "512 MB", -1, - AndroidDeviceInfo::OkState, + IDevice::DeviceConnected, false, - AndroidDeviceInfo::Emulator}}) + IDevice::Emulator}}) << QStringList(); QTest::newRow("two") << "Available Android Virtual Devices:\n" @@ -90,9 +90,9 @@ void tst_AvdManagerOutputParser::parse_data() "", "512 MB", -1, - AndroidDeviceInfo::OkState, + IDevice::DeviceConnected, false, - AndroidDeviceInfo::Emulator}, + IDevice::Emulator}, {"", "TestTablet", {"x86"}, @@ -101,9 +101,9 @@ void tst_AvdManagerOutputParser::parse_data() "", "256 MB", -1, - AndroidDeviceInfo::OkState, + IDevice::DeviceConnected, false, - AndroidDeviceInfo::Emulator}}) + IDevice::Emulator}}) << QStringList(); } From 43f759a6b0e1e8311d43a750c46b8257d62a9b5e Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Thu, 7 Oct 2021 11:10:47 +0300 Subject: [PATCH 26/39] Android: remove unauthorized field form AndroidDeviceInfo This is not really needed anymore, it was mainly used for physical devices to report whether they need user authorization to be used via adb. This is now handled by IDevice::DeviceState, where a Connected device is unauthorized, otherwise any physical device is ReadyToUse if authorization is good. Change-Id: If5c1e49b98063eabe4205cd8adb5b11515e1e1de Reviewed-by: Alessandro Portale --- src/plugins/android/androiddevice.cpp | 6 ++++++ src/plugins/android/androiddeviceinfo.cpp | 4 ++-- src/plugins/android/androiddeviceinfo.h | 2 -- tests/auto/android/tst_avdmanageroutputparser.cpp | 3 --- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index c09966bb19b..a5674313ee6 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -99,6 +99,12 @@ AndroidDeviceWidget::AndroidDeviceWidget(const IDevice::Ptr &device) const auto osString = QString("%1 (SDK %2)").arg(dev->androidVersion()).arg(dev->sdkLevel()); formLayout->addRow(AndroidDevice::tr("OS version:"), new QLabel(osString)); + if (dev->machineType() == IDevice::Hardware) { + const QString authorizedStr = dev->deviceState() == IDevice::DeviceReadyToUse ? tr("Yes") + : tr("No"); + formLayout->addRow(AndroidDevice::tr("Authorized:"), new QLabel(authorizedStr)); + } + if (dev->machineType() == IDevice::Emulator) { const QString targetName = dev->androidTargetName(); formLayout->addRow(AndroidDevice::tr("Android target flavor:"), new QLabel(targetName)); diff --git a/src/plugins/android/androiddeviceinfo.cpp b/src/plugins/android/androiddeviceinfo.cpp index 707ee3a6885..752a710c14d 100644 --- a/src/plugins/android/androiddeviceinfo.cpp +++ b/src/plugins/android/androiddeviceinfo.cpp @@ -57,7 +57,7 @@ bool AndroidDeviceInfo::operator==(const AndroidDeviceInfo &other) const return serialNumber == other.serialNumber && avdname == other.avdname && cpuAbi == other.cpuAbi && avdTarget == other.avdTarget && avdDevice == other.avdDevice && avdSkin == other.avdSkin && avdSdcardSize == other.avdSdcardSize && sdk == other.sdk - && state == other.state && unauthorized == other.unauthorized && type == other.type; + && state == other.state && type == other.type; } QDebug &operator<<(QDebug &stream, const AndroidDeviceInfo &device) @@ -65,7 +65,7 @@ QDebug &operator<<(QDebug &stream, const AndroidDeviceInfo &device) stream << "Type:" << (device.type == ProjectExplorer::IDevice::Emulator ? "Emulator" : "Device") << ", ABI:" << device.cpuAbi << ", Serial:" << device.serialNumber << ", Name:" << device.avdname << ", API:" << device.sdk - << ", Authorised:" << !device.unauthorized; + << ", Authorised:" << (device.state == IDevice::DeviceReadyToUse); return stream; } diff --git a/src/plugins/android/androiddeviceinfo.h b/src/plugins/android/androiddeviceinfo.h index ff4b662191c..b43cbc63426 100644 --- a/src/plugins/android/androiddeviceinfo.h +++ b/src/plugins/android/androiddeviceinfo.h @@ -46,10 +46,8 @@ public: QString avdDevice; QString avdSkin; QString avdSdcardSize; - int sdk = -1; IDevice::DeviceState state = IDevice::DeviceDisconnected; - bool unauthorized = false; IDevice::MachineType type = IDevice::Emulator; static QStringList adbSelector(const QString &serialNumber); diff --git a/tests/auto/android/tst_avdmanageroutputparser.cpp b/tests/auto/android/tst_avdmanageroutputparser.cpp index 059f479fea4..ca3dcda19c5 100644 --- a/tests/auto/android/tst_avdmanageroutputparser.cpp +++ b/tests/auto/android/tst_avdmanageroutputparser.cpp @@ -64,7 +64,6 @@ void tst_AvdManagerOutputParser::parse_data() "512 MB", -1, IDevice::DeviceConnected, - false, IDevice::Emulator}}) << QStringList(); @@ -91,7 +90,6 @@ void tst_AvdManagerOutputParser::parse_data() "512 MB", -1, IDevice::DeviceConnected, - false, IDevice::Emulator}, {"", "TestTablet", @@ -102,7 +100,6 @@ void tst_AvdManagerOutputParser::parse_data() "256 MB", -1, IDevice::DeviceConnected, - false, IDevice::Emulator}}) << QStringList(); } From f4db436a7b0aeff054e3c8ba939a42a054efd5a2 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Mon, 25 Oct 2021 12:56:52 +0300 Subject: [PATCH 27/39] Android: remove Virtual from the AndroidDeviceFactory Keep it only Android Device since this title is used in many places around Qt Creator in different contexts it is better to make it "Android Device" to not give any unintentional hint that only virtual devices are covered. Such cases are the project creation wizard and the kit target device settings. Task-number: QTCREATORBUG-26477 Change-Id: I8c7224243aec6b8f5b5bf95db8d23b9aecbafca6 Reviewed-by: Alessandro Portale --- src/plugins/android/androiddevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index a5674313ee6..de8a89e7f76 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -646,7 +646,7 @@ AndroidDeviceFactory::AndroidDeviceFactory() : ProjectExplorer::IDeviceFactory(Constants::ANDROID_DEVICE_TYPE), m_androidConfig(AndroidConfigurations::currentConfig()) { - setDisplayName(AndroidDevice::tr("Android Virtual Device")); + setDisplayName(AndroidDevice::tr("Android Device")); setCombinedIcon(":/android/images/androiddevicesmall.png", ":/android/images/androiddevice.png"); setConstructionFunction(&AndroidDevice::create); From ec422648ade17bafa234ba1130be1b063bb93de7 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 22 Oct 2021 09:30:59 +0200 Subject: [PATCH 28/39] Examples: Fix image scaling for Qt 6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For Qt 6 we must manually convert images to a larger image space before rescaling, otherwise we get dithering effects. Fixes: QTCREATORBUG-26462 Task-number: QTCREATORBUG-24098 Change-Id: I0d7bb70003822d61d6bc4bc571d29ef82c4dbb0e Reviewed-by: Robert Löhning --- src/plugins/qtsupport/screenshotcropper.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/plugins/qtsupport/screenshotcropper.cpp b/src/plugins/qtsupport/screenshotcropper.cpp index 4595e411434..4997be926f0 100644 --- a/src/plugins/qtsupport/screenshotcropper.cpp +++ b/src/plugins/qtsupport/screenshotcropper.cpp @@ -82,17 +82,20 @@ QImage ScreenshotCropper::croppedImage(const QImage &sourceImage, const QString { const QRect areaOfInterest = welcomeScreenAreas()->areas.value(fileNameForPath(filePath)); + QImage result; if (areaOfInterest.isValid()) { const QRect cropRect = cropRectForAreaOfInterest(sourceImage.size(), cropSize, areaOfInterest); const QSize cropRectSize = cropRect.size(); - const QImage result = sourceImage.copy(cropRect); - if (cropRectSize.width() > cropSize.width() || cropRectSize.height() > cropSize.height()) - return result.scaled(cropSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); - else + result = sourceImage.copy(cropRect); + if (cropRectSize.width() <= cropSize.width() && cropRectSize.height() <= cropSize.height()) return result; + } else { + result = sourceImage; } - return sourceImage.scaled(cropSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + if (result.format() != QImage::Format_ARGB32) + result = result.convertToFormat(QImage::Format_ARGB32); + return result.scaled(cropSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } static int areaAttribute(const QXmlStreamAttributes &attributes, const QString &name) From 5a2b58550e81c16913c193981dd532e709d39fca Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 25 Oct 2021 12:03:34 +0200 Subject: [PATCH 29/39] Debugger: use Qt version from kit as fallback for dumper Fixes: QTCREATORBUG-26456 Change-Id: If2cd664212b3fa07d7abaef7a1173f79716884bb Reviewed-by: hjk --- share/qtcreator/debugger/dumper.py | 6 +++++- src/plugins/debugger/cdb/cdbengine.cpp | 2 ++ src/plugins/debugger/debuggerengine.h | 1 + src/plugins/debugger/debuggerruncontrol.cpp | 6 ++++++ src/plugins/debugger/gdb/gdbengine.cpp | 1 + src/plugins/debugger/lldb/lldbengine.cpp | 4 ++++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 51c487a6355..97b4544a50d 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -195,6 +195,7 @@ class DumperBase(): self.qtCustomEventFunc = 0 self.qtCustomEventPltFunc = 0 self.qtPropertyFunc = 0 + self.fallbackQtVersion = 0x50200 self.passExceptions = False self.isTesting = False @@ -247,11 +248,14 @@ class DumperBase(): self.uninitialized = args.get('uninitialized', []) self.uninitialized = list(map(lambda x: self.hexdecode(x), self.uninitialized)) self.partialUpdate = int(args.get('partial', '0')) - self.fallbackQtVersion = 0x50200 #DumperBase.warn('NAMESPACE: "%s"' % self.qtNamespace()) #DumperBase.warn('EXPANDED INAMES: %s' % self.expandedINames) #DumperBase.warn('WATCHERS: %s' % self.watchers) + def setFallbackQtVersion(self, version): + self.warn("got fallback qt version %x" % version) + self.fallbackQtVersion = version + def resetPerStepCaches(self): self.perStepCache = {} pass diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index f98d2393883..58d0ef0b050 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -2772,6 +2772,8 @@ void CdbEngine::setupScripting(const DebuggerResponse &response) runCommand({command, ScriptCommand}); } + const QString qtVersion = QString::number(runParameters().fallbackQtVersion, 16); + runCommand({"theDumper.setFallbackQtVersion(0x" + qtVersion + ")", ScriptCommand}); runCommand({"theDumper.loadDumpers(None)", ScriptCommand, [this](const DebuggerResponse &response) { watchHandler()->addDumpers(response.data["result"]["dumpers"]); diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index 6c66d269c8d..810e00448a6 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -205,6 +205,7 @@ public: QStringList validationErrors; Utils::FilePath dumperPath; + int fallbackQtVersion = 0x50200; }; class UpdateParameters diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 22daff02a21..9a321e1b4a6 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -948,6 +948,12 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, AllowTerminal allowTerm } m_runParameters.dumperPath = Core::ICore::resourcePath("debugger/"); + if (QtSupport::BaseQtVersion *baseQtVersion = QtSupport::QtKitAspect::qtVersion(kit)) { + QtSupport::QtVersionNumber qtVersion = baseQtVersion->qtVersion(); + m_runParameters.fallbackQtVersion = 0x10000 * int(qtVersion.majorVersion) + + 0x100 * int(qtVersion.minorVersion) + + int(qtVersion.patchVersion); + } } void DebuggerRunTool::startRunControl() diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 63f654e7a86..8f9f789a67f 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4007,6 +4007,7 @@ void GdbEngine::setupEngine() if (!commands.isEmpty()) runCommand({commands}); + runCommand({"setFallbackQtVersion(0x" + QString::number(rp.fallbackQtVersion, 16) + ")"}); runCommand({"loadDumpers", CB(handlePythonSetup)}); // Reload peripheral register description. diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 744387baa3a..200579b6dd5 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -262,6 +262,10 @@ void LldbEngine::setupEngine() runCommand(cmd); } + DebuggerCommand cmd0("setFallbackQtVersion"); + cmd0.arg("version", "0x" + QString::number(rp.fallbackQtVersion, 16)); + runCommand(cmd0); + DebuggerCommand cmd1("loadDumpers"); cmd1.callback = [this](const DebuggerResponse &response) { watchHandler()->addDumpers(response.data["dumpers"]); From a013d7572862cde46517d78c84c1a76be73eff66 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Mon, 18 Oct 2021 16:14:05 +0200 Subject: [PATCH 30/39] CppEditor: Change parsing opposite bracket Fixed behavior: - when comparing sign was determined as angle bracket - when in complex combination brackets, an opposite bracket was detected not correct - not correct mismatch case highlightning Added tests for the cases form bug 26395 Fixes: QTCREATORBUG-26400 Fixes: QTCREATORBUG-26395 Change-Id: Ic45566d2677f80fb9a8e4fe830307254dd1db51d Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/semantichighlighter.cpp | 2 +- src/tools/clangbackend/source/tokeninfo.cpp | 6 +++- .../unit/unittest/data/highlightingmarks.cpp | 15 +++++++++ tests/unit/unittest/tokenprocessor-test.cpp | 31 +++++++++++++++++-- 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/plugins/cppeditor/semantichighlighter.cpp b/src/plugins/cppeditor/semantichighlighter.cpp index eb6e90fb2b9..6a02566981a 100644 --- a/src/plugins/cppeditor/semantichighlighter.cpp +++ b/src/plugins/cppeditor/semantichighlighter.cpp @@ -225,7 +225,7 @@ void SemanticHighlighter::onHighlighterResultAvailable(int from, int to) } else if (result.kind == DoubleAngleBracketClose) { Parenthesis extraParen = {Parenthesis::Closed, '>', result.column - 1}; extraParen.source = parenSource(); - parentheses.second.append(extraParen); + insertSorted(parentheses.second, extraParen); paren = {Parenthesis::Closed, '>', result.column}; } else if (result.kind == TernaryIf) { paren = {Parenthesis::Opened, '?', result.column - 1}; diff --git a/src/tools/clangbackend/source/tokeninfo.cpp b/src/tools/clangbackend/source/tokeninfo.cpp index e8ece9c06de..1535eb2cc24 100644 --- a/src/tools/clangbackend/source/tokeninfo.cpp +++ b/src/tools/clangbackend/source/tokeninfo.cpp @@ -607,7 +607,11 @@ void TokenInfo::punctuationOrOperatorKind() && m_types.mixinHighlightingTypes.empty() && kind != CXCursor_OverloadedDeclRef && kind != CXCursor_InclusionDirective - && kind != CXCursor_PreprocessingDirective) { + && kind != CXCursor_PreprocessingDirective + && kind != CXCursor_MacroDefinition + && kind != CXCursor_DeclStmt + && kind != CXCursor_CompoundStmt + && kind != CXCursor_FirstInvalid) { const ClangString spelling = m_token->spelling(); if (spelling == "<") m_types.mixinHighlightingTypes.push_back(HighlightingType::AngleBracketOpen); diff --git a/tests/unit/unittest/data/highlightingmarks.cpp b/tests/unit/unittest/data/highlightingmarks.cpp index 7631534d35f..57f4586daba 100644 --- a/tests/unit/unittest/data/highlightingmarks.cpp +++ b/tests/unit/unittest/data/highlightingmarks.cpp @@ -794,3 +794,18 @@ const char *cyrillic = "б"; struct foo { #define blubb }; + +#define test_micro(A,B) ((A##B>1?A:B)) + +int a = (a1 > 0); + +int func() { + int a = (a1 > 0); +} + +namespace std { + template struct pair; + template struct vector; +} + +static std::vector> pvr; diff --git a/tests/unit/unittest/tokenprocessor-test.cpp b/tests/unit/unittest/tokenprocessor-test.cpp index ade12cb1fcf..0a6106569f7 100644 --- a/tests/unit/unittest/tokenprocessor-test.cpp +++ b/tests/unit/unittest/tokenprocessor-test.cpp @@ -1794,11 +1794,10 @@ TEST_F(TokenProcessor, TemplateSeparateDeclDef) ASSERT_THAT(infos[37], IsHighlightingMark(764u, 5u, 9u, HighlightingType::GlobalVariable)); } -TEST_F(TokenProcessor, NestedTemplate) +TEST_F(TokenProcessor, NestedTemplateIncorrect) { const auto infos = translationUnit.tokenInfosInRange(sourceRange(773, 44)); - ASSERT_THAT(infos[12], HasTwoTypes(HighlightingType::Punctuation, - HighlightingType::DoubleAngleBracketClose)); + ASSERT_THAT(infos[12], HasOnlyType(HighlightingType::Punctuation)); } TEST_F(TokenProcessor, OperatorInTemplate) @@ -1819,6 +1818,32 @@ TEST_F(TokenProcessor, PreProcessorInStruct) ASSERT_THAT(infos[1], HasOnlyType(HighlightingType::Preprocessor)); } +TEST_F(TokenProcessor, DefinitionWithComparison) +{ + const auto infos = translationUnit.tokenInfosInRange(sourceRange(798, 39)); + ASSERT_THAT(infos[13], HasOnlyType(HighlightingType::Punctuation)); +} + +TEST_F(TokenProcessor, GlobalVariableWithComparison) +{ + const auto infos = translationUnit.tokenInfosInRange(sourceRange(800, 18)); + ASSERT_THAT(infos[5], HasOnlyType(HighlightingType::Punctuation)); +} + +TEST_F(TokenProcessor, VariableWithComparison) +{ + const auto infos = translationUnit.tokenInfosInRange(sourceRange(803, 22)); + ASSERT_THAT(infos[5], HasOnlyType(HighlightingType::Punctuation)); +} + + +TEST_F(TokenProcessor, NestedTemplate) +{ + const auto infos = translationUnit.tokenInfosInRange(sourceRange(811, 44)); + ASSERT_THAT(infos[12], HasTwoTypes(HighlightingType::Punctuation, + HighlightingType::DoubleAngleBracketClose)); +} + Data *TokenProcessor::d; void TokenProcessor::SetUpTestCase() From cd80f0a0965f6eb94ab1de4d0cffd710efc6a276 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Oct 2021 13:00:57 +0200 Subject: [PATCH 31/39] Wizards: Fix description of Qt Application template The applications can also be run on the mobile device platforms listed in the wizard dialog. Task-number: QTCREATORBUG-26477 Change-Id: I845d95c5ca46804691613177d7e285246b1593ba Reviewed-by: Assam Boudjelthia --- .../templates/wizards/projects/qtwidgetsapplication/wizard.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json index 2a72449b2c9..8e7fb78b819 100644 --- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json @@ -3,7 +3,7 @@ "supportedProjectTypes": [ "MesonProjectManager.MesonProject","CMakeProjectManager.CMakeProject", "Qt4ProjectManager.Qt4Project", "Qbs.QbsProject" ], "id": "C.QtWidgets", "category": "D.ApplicationQt", - "trDescription": "Creates a Qt application for the desktop. Includes a Qt Designer-based main window.\n\nPreselects a desktop Qt for building the application if available.", + "trDescription": "Creates a widget-based Qt application that contains a Qt Designer-based main window.\n\nPreselects a desktop Qt for building the application if available.", "trDisplayName": "Qt Widgets Application", "trDisplayCategory": "Application (Qt)", "icon": "../../global/guiapplication.png", From dcd4d1c92ee4ef6c9ffcd40455b5710bc4b7a662 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Oct 2021 16:54:51 +0200 Subject: [PATCH 32/39] Launcher: Fix UI text Task-number: QTCREATORBUG-26458 Change-Id: I99ffa236a58dd9bdad9716edfdd7a576293144d8 Reviewed-by: Jarek Kobus --- src/libs/utils/launcherinterface.cpp | 2 +- src/libs/utils/launchersocket.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/launcherinterface.cpp b/src/libs/utils/launcherinterface.cpp index a5609fd6e7c..74636a6640b 100644 --- a/src/libs/utils/launcherinterface.cpp +++ b/src/libs/utils/launcherinterface.cpp @@ -161,7 +161,7 @@ void LauncherInterfacePrivate::handleProcessError() const QString launcherPathForUser = QDir::toNativeSeparators(QDir::cleanPath(m_process->program())); emit errorOccurred(QCoreApplication::translate("Utils::LauncherSocket", - "Failed to start process launcher at '%1': %2") + "Failed to start process launcher at \"%1\": %2") .arg(launcherPathForUser, m_process->errorString())); } } diff --git a/src/libs/utils/launchersocket.cpp b/src/libs/utils/launchersocket.cpp index 0a932360b1c..28dfee23469 100644 --- a/src/libs/utils/launchersocket.cpp +++ b/src/libs/utils/launchersocket.cpp @@ -296,7 +296,7 @@ void CallerHandle::cancel() break; case QProcess::Starting: m_errorString = QCoreApplication::translate("Utils::LauncherHandle", - "Process canceled before it was started."); + "Process was canceled before it was started."); m_error = QProcess::FailedToStart; if (LauncherInterface::isReady()) // TODO: race condition with m_processState??? sendPacket(StopProcessPacket(m_token)); From 354c6405c32c9d8ad96bdf23516674b1b39e05bc Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Oct 2021 16:55:27 +0200 Subject: [PATCH 33/39] Android: Fix UI text Task-number: QTCREATORBUG-26458 Change-Id: Ibc407db46a605c6bde8f994af63f678a5a102b0e Reviewed-by: hjk Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidsdkmanagerwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp index 0fe8b83d31d..96824298eed 100644 --- a/src/plugins/android/androidsdkmanagerwidget.cpp +++ b/src/plugins/android/androidsdkmanagerwidget.cpp @@ -168,7 +168,7 @@ void AndroidSdkManagerWidget::installEssentials() if (!m_sdkModel->missingEssentials().isEmpty()) { QMessageBox::warning(this, tr("Android SDK Changes"), - tr("%1 couldn't find the following essential packages: \"%2\".\n" + tr("%1 cannot find the following essential packages: \"%2\".\n" "Install them manually after the current operation is done.\n") .arg(Core::Constants::IDE_DISPLAY_NAME) .arg(m_sdkModel->missingEssentials().join("\", \""))); @@ -277,7 +277,7 @@ void AndroidSdkManagerWidget::onLicenseCheckResult(const AndroidSdkManager::Oper } else { // Assertion was found. Provide user workflow to accept licenses. QString warningMessage = tr("Review Android SDK package licenses that have not been " - "accepted?\nPlease note that the installation and use of " + "accepted?\nNote that the installation and use of " "Android SDK packages may fail if respective licenses are not " "accepted."); int userSelection = QMessageBox::question(this, tr("Android SDK Licenses"), warningMessage, From 6739266a8e1265ba26985a8aa1b0b114892f164f Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Oct 2021 16:56:22 +0200 Subject: [PATCH 34/39] Docker: Fix UI text Task-number: QTCREATORBUG-26458 Change-Id: I6dcdbf199259259416e4bfb11c3488f8594b0c0b Reviewed-by: hjk --- src/plugins/docker/dockerdevice.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 1af3b5d436f..10df7546ff2 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -356,7 +356,7 @@ public: DockerDeviceData &data = dockerDevice->data(); - auto idLabel = new QLabel(tr("Image Id:")); + auto idLabel = new QLabel(tr("Image ID:")); m_idLineEdit = new QLineEdit; m_idLineEdit->setText(data.imageId); m_idLineEdit->setEnabled(false); @@ -368,8 +368,8 @@ public: auto daemonStateLabel = new QLabel(tr("Daemon state:")); m_daemonReset = new QToolButton; - m_daemonReset->setToolTip(tr("Clear detected daemon state. " - "It will be automatically re-evaluated next time an access is needed.")); + m_daemonReset->setToolTip(tr("Clears detected daemon state. " + "It will be automatically re-evaluated next time access is needed.")); m_daemonState = new QLabel; updateDaemonStateTexts(); @@ -380,7 +380,7 @@ public: }); m_runAsOutsideUser = new QCheckBox(tr("Run as outside user")); - m_runAsOutsideUser->setToolTip(tr("Use user ID and group ID of the user running Qt Creator " + m_runAsOutsideUser->setToolTip(tr("Uses user ID and group ID of the user running Qt Creator " "in the Docker container.")); m_runAsOutsideUser->setChecked(data.useLocalUidGid); m_runAsOutsideUser->setEnabled(HostOsInfo::isLinuxHost()); @@ -390,7 +390,7 @@ public: }); m_usePathMapping = new QCheckBox(tr("Use local file path mapping")); - m_usePathMapping->setToolTip(tr("Map docker filesystem to a local directory.")); + m_usePathMapping->setToolTip(tr("Maps docker filesystem to a local directory.")); m_usePathMapping->setChecked(data.useFilePathMapping); m_usePathMapping->setEnabled(HostOsInfo::isLinuxHost()); connect(m_usePathMapping, &QCheckBox::toggled, this, [&, dockerDevice](bool on) { @@ -399,7 +399,7 @@ public: }); m_pathsListEdit = new PathListEditor; - m_pathsListEdit->setToolTip(tr("Paths in this list will be mapped one-to-one into the " + m_pathsListEdit->setToolTip(tr("Maps paths in this list one-to-one to the " "Docker container.")); m_pathsListEdit->setPathList(data.mounts); @@ -931,8 +931,8 @@ void DockerDevicePrivate::tryCreateLocalFileAccess() MessageManager::writeFlashing( tr("Local read access to Docker container %1 unavailable through directory \"%2\".") .arg(m_container, m_mergedDir) - + '\n' + tr("Output: '%1'").arg(out) - + '\n' + tr("Error: '%1'").arg(proc.stdErr())); + + '\n' + tr("Output: \"%1\"").arg(out) + + '\n' + tr("Error: \"%1\"").arg(proc.stdErr())); if (HostOsInfo::isWindowsHost()) { // Disabling merged layer access. This is not supported and anything // related to accessing merged layers on Windows fails due to the need From e95778707b290e1c63b31a3be47ad8de12411212 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 25 Oct 2021 16:55:59 +0200 Subject: [PATCH 35/39] Debugger: Fix UI text Task-number: QTCREATORBUG-26458 Change-Id: I6625d30e2eb2d2fcca87360f84d50109632071f2 Reviewed-by: hjk --- src/plugins/debugger/debuggerruncontrol.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 9a321e1b4a6..daa8749e021 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -538,7 +538,7 @@ void DebuggerRunTool::start() default: if (!m_runParameters.isQmlDebugging) { reportFailure(noEngineMessage() + '\n' + - DebuggerPlugin::tr("Please select a Debugger Setting from the Run page of the project mode.")); + DebuggerPlugin::tr("Specify Debugger settings in Projects > Run.")); return; } // Can happen for pure Qml. From afda00f1fa57eaf150ac687afd4e8b35cdaeab74 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 15 Oct 2021 10:51:53 +0200 Subject: [PATCH 36/39] QmlJS: Update version information Fixes: QTCREATORBUG-26273 Change-Id: I3a2c7c0d11436655a87d6288412af95ff3ffdaaf Reviewed-by: Fabian Kosmale Reviewed-by: Ulf Hermann --- .../qt5QtQuick2-bundle.json | 127 +++++++++++++++++- 1 file changed, 126 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qml-type-descriptions/qt5QtQuick2-bundle.json b/share/qtcreator/qml-type-descriptions/qt5QtQuick2-bundle.json index 7fbf2d858aa..51bdff39b61 100644 --- a/share/qtcreator/qml-type-descriptions/qt5QtQuick2-bundle.json +++ b/share/qtcreator/qml-type-descriptions/qt5QtQuick2-bundle.json @@ -12,29 +12,59 @@ "Qt.labs.folderlistmodel 2.1", "Qt.labs.folderlistmodel 2.2", "Qt.labs.folderlistmodel 2.12", + "Qt.labs.folderlistmodel 2.13", + "Qt.labs.folderlistmodel 2.14", + "Qt.labs.folderlistmodel 2.15", "Qt.labs.settings 1.0", "Qt.labs.settings 1.1", "Qt.labs.platform 1.0", + "Qt.labs.platform 1.1", "Qt.WebSockets 1.0", "Qt.WebSockets 1.1", + "Qt.WebSockets 1.13", + "Qt.WebSockets 1.14", + "Qt.WebSockets 1.15", "Qt3D.Animation 2.9", "Qt3D.Animation 2.12", + "Qt3D.Animation 2.13", + "Qt3D.Animation 2.14", + "Qt3D.Animation 2.15", "Qt3D.Core 2.0", "Qt3D.Core 2.9", "Qt3D.Core 2.12", + "Qt3D.Core 2.13", + "Qt3D.Core 2.14", + "Qt3D.Core 2.15", "Qt3D.Extras 2.0", "Qt3D.Extras 2.9", "Qt3D.Extras 2.12", + "Qt3D.Extras 2.13", + "Qt3D.Extras 2.14", + "Qt3D.Extras 2.15", "Qt3D.Input 2.0", "Qt3D.Input 2.1", "Qt3D.Input 2.12", "Qt3D.Logic 2.0", "Qt3D.Logic 2.12", + "Qt3D.Logic 2.13", + "Qt3D.Logic 2.14", + "Qt3D.Logic 2.15", "Qt3D.Render 2.0", "Qt3D.Render 2.9", "Qt3D.Render 2.12", + "Qt3D.Render 2.13", + "Qt3D.Render 2.14", + "Qt3D.Render 2.15", "Qt3D.Scene2D 2.9", + "Qt3D.Scene2D 2.12", + "Qt3D.Scene2D 2.13", + "Qt3D.Scene2D 2.14", + "Qt3D.Scene2D 2.15", "QtAudioEngine 1.0", + "QtAudioEngine 1.1", + "QtAudioEngine 1.13", + "QtAudioEngine 1.14", + "QtAudioEngine 1.15", "QtBluetooth 5.0", "QtBluetooth 5.2", "QtBluetooth 5.3", @@ -46,12 +76,27 @@ "QtBluetooth 5.9", "QtBluetooth 5.11", "QtBluetooth 5.12", + "QtBluetooth 5.13", + "QtBluetooth 5.14", + "QtBluetooth 5.15", "QtCanvas3D 1.1", "QtCharts 2.3", + "QtCharts 2.13", + "QtCharts 2.14", + "QtCharts 2.15", "QtDataVisualization 1.0", "QtDataVisualization 1.3", + "QtDataVisualization 1.13", + "QtDataVisualization 1.14", + "QtDataVisualization 1.15", "QtGamepad 1.12", + "QtGamepad 1.13", + "QtGamepad 1.14", + "QtGamepad 1.15", "QtGraphicalEffects 1.0", + "QtGraphicalEffects 1.13", + "QtGraphicalEffects 1.14", + "QtGraphicalEffects 1.15", "QtMultimedia 5.0", "QtMultimedia 5.2", "QtMultimedia 5.3", @@ -62,6 +107,9 @@ "QtMultimedia 5.8", "QtMultimedia 5.9", "QtMultimedia 5.12", + "QtMultimedia 5.13", + "QtMultimedia 5.14", + "QtMultimedia 5.15", "QtNfc 5.0", "QtNfc 5.2", "QtNfc 5.3", @@ -73,6 +121,9 @@ "QtNfc 5.9", "QtNfc 5.11", "QtNfc 5.12", + "QtNfc 5.13", + "QtNfc 5.14", + "QtNfc 5.15", "QtPositioning 5.0", "QtPositioning 5.2", "QtPositioning 5.3", @@ -83,6 +134,9 @@ "QtPositioning 5.8", "QtPositioning 5.11", "QtPositioning 5.12", + "QtPositioning 5.13", + "QtPositioning 5.14", + "QtPositioning 5.15", "QtLocation 5.3", "QtLocation 5.5", "QtLocation 5.6", @@ -90,18 +144,30 @@ "QtLocation 5.9", "QtLocation 5.11", "QtLocation 5.12", + "QtLocation 5.13", + "QtLocation 5.14", + "QtLocation 5.15", "QtPurchasing 1.0", "QtPurchasing 1.12", + "QtPurchasing 1.13", + "QtPurchasing 1.14", + "QtPurchasing 1.15", "QtQml 2.0", "QtQml 2.1", "QtQml 2.2", "QtQml 2.3", "QtQml 2.12", + "QtQml 2.13", + "QtQml 2.14", + "QtQml 2.15", "QtQml.Models 2.1", "QtQml.Models 2.2", "QtQml.Models 2.3", "QtQml.Models 2.11", "QtQml.Models 2.12", + "QtQml.Models 2.13", + "QtQml.Models 2.14", + "QtQml.Models 2.15", "QtQuick.Controls 2.0", "QtQuick.Controls 2.1", "QtQuick.Controls 2.2", @@ -109,16 +175,25 @@ "QtQuick.Controls 2.4", "QtQuick.Controls 2.5", "QtQuick.Controls 2.12", + "QtQuick.Controls 2.13", + "QtQuick.Controls 2.14", + "QtQuick.Controls 2.15", "QtQuick.Controls.Material 2.0", "QtQuick.Controls.Material 2.1", "QtQuick.Controls.Material 2.2", "QtQuick.Controls.Material 2.3", "QtQuick.Controls.Material 2.12", + "QtQuick.Controls.Material 2.13", + "QtQuick.Controls.Material 2.14", + "QtQuick.Controls.Material 2.15", "QtQuick.Controls.Universal 2.0", "QtQuick.Controls.Universal 2.1", "QtQuick.Controls.Universal 2.2", "QtQuick.Controls.Universal 2.3", "QtQuick.Controls.Universal 2.12", + "QtQuick.Controls.Universal 2.13", + "QtQuick.Controls.Universal 2.14", + "QtQuick.Controls.Universal 2.15", "QtQuick.Controls.Styles 1.0", "QtQuick.Controls.Styles 1.1", "QtQuick.Controls.Styles 1.2", @@ -127,23 +202,41 @@ "QtQuick.Dialogs 1.0", "QtQuick.Dialogs 1.1", "QtQuick.Dialogs 1.2", + "QtQuick.Dialogs 1.3", "QtQuick.Enterprise.Controls 1.1", + "QtQuick.Enterprise.Controls 1.2", + "QtQuick.Enterprise.Controls 1.3", "QtQuick.Layouts 1.0", "QtQuick.Layouts 1.1", "QtQuick.Layouts 1.2", "QtQuick.Layouts 1.3", "QtQuick.Layouts 1.12", + "QtQuick.Layouts 1.13", + "QtQuick.Layouts 1.14", + "QtQuick.Layouts 1.15", "QtQuick.LocalStorage 2.0", "QtQuick.LocalStorage 2.11", "QtQuick.LocalStorage 2.12", + "QtQuick.LocalStorage 2.13", + "QtQuick.LocalStorage 2.14", + "QtQuick.LocalStorage 2.15", "QtQuick.Particles 2.0", "QtQuick.Particles 2.12", + "QtQuick.Particles 2.13", + "QtQuick.Particles 2.14", + "QtQuick.Particles 2.15", "QtQuick.Shapes 1.12", + "QtQuick.Shapes 1.13", + "QtQuick.Shapes 1.14", + "QtQuick.Shapes 1.15", "QtQuick.Templates 2.0", "QtQuick.Templates 2.1", "QtQuick.Templates 2.2", "QtQuick.Templates 2.5", "QtQuick.Templates 2.12", + "QtQuick.Templates 2.13", + "QtQuick.Templates 2.14", + "QtQuick.Templates 2.15", "QtQuick.Timeline 1.0", "QtQuick.Timeline 1.1", "QtQuick.Window 2.0", @@ -153,8 +246,14 @@ "QtQuick.Window 2.10", "QtQuick.Window 2.11", "QtQuick.Window 2.12", + "QtQuick.Window 2.13", + "QtQuick.Window 2.14", + "QtQuick.Window 2.15", "QtQuick.XmlListModel 2.0", "QtQuick.XmlListModel 2.12", + "QtQuick.XmlListModel 2.13", + "QtQuick.XmlListModel 2.14", + "QtQuick.XmlListModel 2.15", "QtRemoteObjects 5.12", "QtScxml 5.8", "QtSensors 5.0", @@ -169,6 +268,9 @@ "QtSensors 5.9", "QtSensors 5.11", "QtSensors 5.12", + "QtSensors 5.13", + "QtSensors 5.14", + "QtSensors 5.15", "QtQuick 2.0", "QtQuick 2.1", "QtQuick 2.2", @@ -182,12 +284,27 @@ "QtQuick 2.10", "QtQuick 2.11", "QtQuick 2.12", + "QtQuick 2.13", + "QtQuick 2.14", + "QtQuick 2.15", "QtTest 1.0", "QtTest 1.2", "QtTest 1.12", + "QtTest 1.13", + "QtTest 1.14", + "QtTest 1.15", "QtVirtualKeyboard.VirtualKeyboard 2.4", + "QtVirtualKeyboard.VirtualKeyboard 2.13", + "QtVirtualKeyboard.VirtualKeyboard 2.14", + "QtVirtualKeyboard.VirtualKeyboard 2.15", "QtVirtualKeyboard.Settings 2.2", + "QtVirtualKeyboard.Settings 2.13", + "QtVirtualKeyboard.Settings 2.14", + "QtVirtualKeyboard.Settings 2.15", "QtVirtualKeyboard.Styles 2.1", + "QtVirtualKeyboard.Styles 2.13", + "QtVirtualKeyboard.Styles 2.14", + "QtVirtualKeyboard.Styles 2.15", "QtScxml 5.8", "QtWebChannel 1.0", "QtWebEngine 1.0", @@ -199,11 +316,19 @@ "QtWebEngine 1.6", "QtWebEngine 1.7", "QtWebEngine 1.8", + "QtWebEngine 1.9", + "QtWebEngine 1.10", "QtWebSockets 1.1", + "QtWebSockets 1.13", + "QtWebSockets 1.14", + "QtWebSockets 1.15", "QtWebView 1.0", "QtWebView 1.1", "QtWebKit 3.0", - "QtWinExtras 1.0" + "QtWinExtras 1.0", + "QtWinExtras 1.13", + "QtWinExtras 1.14", + "QtWinExtras 1.15" ] } From c19d031978333013279aa9003074283f999ccb33 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 22 Oct 2021 15:00:54 +0200 Subject: [PATCH 37/39] ProjectExplorer: introduce Toolchain::priority Can be used to prefer certain toolchain types over other if different toolchains matches the same abi. Change-Id: Ie1c62e8abfc98e8cda7f999c4df487799c8d4f13 Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/kitinformation.cpp | 12 +++++++----- src/plugins/projectexplorer/msvctoolchain.cpp | 10 ++++++++++ src/plugins/projectexplorer/msvctoolchain.h | 4 ++++ src/plugins/projectexplorer/toolchain.h | 8 ++++++++ src/plugins/qtsupport/qtkitinformation.cpp | 2 +- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index dbd060cfe8d..af4a900946d 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -502,11 +502,13 @@ void ToolChainKitAspect::setup(Kit *k) [abi, l](const ToolChain *t) { return t->targetAbi().toString() == abi && t->language() == l; }); - Utils::sort(possibleTcs, [](const ToolChain *tc1, const ToolChain *tc2) { - return tc1->hostPrefersToolchain() && !tc2->hostPrefersToolchain(); - }); - if (!possibleTcs.isEmpty()) - setToolChain(k, possibleTcs.first()); + ToolChain *bestTc = nullptr; + for (ToolChain *tc : possibleTcs) { + if (!bestTc || tc->priority() > bestTc->priority()) + bestTc = tc; + } + if (bestTc) + setToolChain(k, bestTc); else clearToolChain(k, l); } diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index f2b92c55527..ca93d5582b7 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1746,6 +1746,11 @@ bool ClangClToolChain::operator==(const ToolChain &other) const return m_clangPath == clangClTc->m_clangPath; } +int ClangClToolChain::priority() const +{ + return MsvcToolChain::priority() - 1; +} + Macros ClangClToolChain::msvcPredefinedMacros(const QStringList &cxxflags, const Utils::Environment &env) const { @@ -2050,6 +2055,11 @@ bool MsvcToolChain::operator==(const ToolChain &other) const && m_varsBatArg == msvcTc->m_varsBatArg; } +int MsvcToolChain::priority() const +{ + return hostPrefersToolchain() ? PriorityHigh : PriorityNormal; +} + void MsvcToolChain::cancelMsvcToolChainDetection() { envModThreadPool()->clear(); diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 2e42a163da5..34894d78397 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -98,6 +98,8 @@ public: bool isJobCountSupported() const override { return false; } + int priority() const override; + static void cancelMsvcToolChainDetection(); static Utils::optional generateEnvironmentSettings(const Utils::Environment &env, const QString &batchFile, @@ -187,6 +189,8 @@ public: bool operator==(const ToolChain &) const override; + int priority() const override; + private: QString m_clangPath; }; diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 72c1b388bb9..b305bf00551 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -172,6 +172,14 @@ public: static Utils::LanguageVersion cxxLanguageVersion(const QByteArray &cplusplusMacroValue); static Utils::LanguageVersion languageVersion(const Utils::Id &language, const Macros ¯os); + enum Priority { + PriorityLow = 0, + PriorityNormal = 10, + PriorityHigh = 20, + }; + + virtual int priority() const { return PriorityNormal; } + protected: explicit ToolChain(Utils::Id typeId); diff --git a/src/plugins/qtsupport/qtkitinformation.cpp b/src/plugins/qtsupport/qtkitinformation.cpp index 002c49f7fc0..79935c1c00a 100644 --- a/src/plugins/qtsupport/qtkitinformation.cpp +++ b/src/plugins/qtsupport/qtkitinformation.cpp @@ -240,7 +240,7 @@ void QtKitAspect::fix(Kit *k) return true; if (!tc1ExactMatch && tc2ExactMatch) return false; - return tc1->hostPrefersToolchain() && !tc2->hostPrefersToolchain(); + return tc1->priority() > tc2->priority(); }); const QList goodTcs = Utils::filtered(possibleTcs, From 712caf10dcadbacda7487a6836f949c7964002f2 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 18 Oct 2021 10:22:51 +0200 Subject: [PATCH 38/39] Docker: allow local build directories Used for local projects with kits that have a remote build device Change-Id: I8604c4673fc0f1571fe62407334c1e26e71fd2a8 Reviewed-by: hjk --- src/plugins/projectexplorer/buildconfiguration.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index a30f02bea4b..7a68c276c3d 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -253,9 +253,8 @@ FilePath BuildConfiguration::buildDirectory() const path = path.cleanPath(); const FilePath projectDir = target()->project()->projectDirectory(); - const FilePath buildDir = projectDir.resolvePath(path); - return mapFromBuildDeviceToGlobalPath(buildDir); + return projectDir.resolvePath(path); } FilePath BuildConfiguration::rawBuildDirectory() const From c82e3cf6a8f9ec0e8e60da7f5f66d91cac4520ab Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 25 Oct 2021 18:16:27 +0200 Subject: [PATCH 39/39] Utils: Map local path path in FilePath::onDevice(), too To cover cases like Windows -> Docker/Linux, where these parts are not an exact 1:1 mapping. Change-Id: Iecc26e06771fb190644988950271ff7990962b6b Reviewed-by: hjk --- src/libs/utils/filepath.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 065f96809e9..dadf791a61e 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -1182,10 +1182,16 @@ QString FilePath::calcRelativePath(const QString &absolutePath, const QString &a */ FilePath FilePath::onDevice(const FilePath &deviceTemplate) const { + if (!deviceTemplate.needsDevice()) + return mapToGlobalPath(); + const bool sameDevice = m_scheme == deviceTemplate.m_scheme && m_host == deviceTemplate.m_host; + // TODO: converting paths between different non local devices is still unsupported + QTC_CHECK(!needsDevice() || sameDevice); FilePath res; - res.m_data = m_data; - res.m_host = deviceTemplate.m_host; res.m_scheme = deviceTemplate.m_scheme; + res.m_host = deviceTemplate.m_host; + res.m_data = m_data; + res.m_data = res.mapToDevicePath(); return res; }