aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/clangformat/clangformatbaseindenter.cpp5
-rw-r--r--src/plugins/clangformat/clangformatutils.cpp21
-rw-r--r--src/plugins/clangpchmanager/clangpchmanagerplugin.cpp5
-rw-r--r--src/plugins/clangpchmanager/pchmanagerclient.cpp15
-rw-r--r--src/plugins/clangpchmanager/pchmanagerclient.h11
-rw-r--r--src/plugins/clangpchmanager/pchmanagernotifierinterface.h9
-rw-r--r--src/plugins/clangpchmanager/pchmanagerprojectupdater.cpp18
-rw-r--r--src/plugins/clangpchmanager/pchmanagerprojectupdater.h9
-rw-r--r--src/plugins/clangpchmanager/projectupdater.cpp46
-rw-r--r--src/plugins/clangpchmanager/projectupdater.h16
-rw-r--r--src/plugins/clangpchmanager/qtcreatorprojectupdater.h9
-rw-r--r--src/plugins/clangrefactoring/clangrefactoringplugin.cpp9
-rw-r--r--src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp14
-rw-r--r--src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.h8
-rw-r--r--src/plugins/clangrefactoring/refactoringprojectupdater.cpp9
-rw-r--r--src/plugins/clangrefactoring/refactoringprojectupdater.h14
-rw-r--r--src/plugins/coreplugin/fancytabwidget.cpp2
-rw-r--r--src/plugins/debugger/debuggeritemmanager.cpp10
-rw-r--r--src/plugins/fakevim/fakevimactions.cpp2
-rw-r--r--src/plugins/git/gitclient.cpp2
-rw-r--r--src/plugins/pythoneditor/pythoneditorplugin.cpp31
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp3
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp9
-rw-r--r--src/plugins/qmldesigner/designercore/include/qmltimeline.h1
-rw-r--r--src/plugins/qmldesigner/designercore/include/rewriterview.h2
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp2
-rw-r--r--src/plugins/qmldesigner/designercore/model/qmltimeline.cpp13
-rw-r--r--src/plugins/qmldesigner/designercore/model/rewriterview.cpp56
-rw-r--r--src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp3
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineanimationform.cpp7
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinecontrols.cpp3
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineform.cpp21
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.cpp5
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.h2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.cpp5
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.h2
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp1
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.cpp118
-rw-r--r--src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.h2
-rw-r--r--src/plugins/qmldesigner/qmldesignerplugin.cpp8
-rw-r--r--src/plugins/qtsupport/baseqtversion.cpp6
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.cpp2
-rw-r--r--src/plugins/vcsbase/vcsoutputwindow.h2
43 files changed, 384 insertions, 154 deletions
diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp
index dcb5edaeb1..2e039c5ec1 100644
--- a/src/plugins/clangformat/clangformatbaseindenter.cpp
+++ b/src/plugins/clangformat/clangformatbaseindenter.cpp
@@ -188,8 +188,6 @@ QByteArray dummyTextForContext(CharacterContext context, bool closingBraceBlock)
}
switch (context) {
- case CharacterContext::Unknown:
- QTC_ASSERT(false, return "";);
case CharacterContext::AfterComma:
return "a,";
case CharacterContext::NewStatement:
@@ -197,6 +195,9 @@ QByteArray dummyTextForContext(CharacterContext context, bool closingBraceBlock)
case CharacterContext::Continuation:
case CharacterContext::LastAfterComma:
return "& a &";
+ case CharacterContext::Unknown:
+ default:
+ QTC_ASSERT(false, return "";);
}
}
diff --git a/src/plugins/clangformat/clangformatutils.cpp b/src/plugins/clangformat/clangformatutils.cpp
index 74c4165a34..61e9386282 100644
--- a/src/plugins/clangformat/clangformatutils.cpp
+++ b/src/plugins/clangformat/clangformatutils.cpp
@@ -143,27 +143,6 @@ static clang::format::FormatStyle qtcStyle()
return style;
}
-static void applyTabSettings(clang::format::FormatStyle &style, const TabSettings &settings)
-{
- style.IndentWidth = static_cast<unsigned>(settings.m_indentSize);
- style.TabWidth = static_cast<unsigned>(settings.m_tabSize);
-
- if (settings.m_tabPolicy == TabSettings::TabsOnlyTabPolicy)
- style.UseTab = FormatStyle::UT_Always;
- else if (settings.m_tabPolicy == TabSettings::SpacesOnlyTabPolicy)
- style.UseTab = FormatStyle::UT_Never;
- else
- style.UseTab = FormatStyle::UT_ForContinuationAndIndentation;
-
- if (settings.m_continuationAlignBehavior == TabSettings::NoContinuationAlign) {
- style.ContinuationIndentWidth = 0;
- style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
- } else {
- style.ContinuationIndentWidth = style.IndentWidth;
- style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
- }
-}
-
static bool useGlobalOverriddenSettings()
{
return ClangFormatSettings::instance().overrideDefaultFile();
diff --git a/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp b/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp
index 7d564399b6..cf5aae1bde 100644
--- a/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp
+++ b/src/plugins/clangpchmanager/clangpchmanagerplugin.cpp
@@ -31,6 +31,7 @@
#include "qtcreatorprojectupdater.h"
#include <filepathcaching.h>
+#include <projectpartsstorage.h>
#include <refactoringdatabaseinitializer.h>
#include <sqlitedatabase.h>
@@ -79,11 +80,13 @@ public:
"Creating Dependencies");
Core::ProgressManager::addTask(promise.future(), title, "dependency creation", nullptr);
}};
+ ClangBackEnd::ProjectPartsStorage<Sqlite::Database> projectPartsStorage{database};
PchManagerClient pchManagerClient{pchCreationProgressManager, dependencyCreationProgressManager};
PchManagerConnectionClient connectionClient{&pchManagerClient};
QtCreatorProjectUpdater<PchManagerProjectUpdater> projectUpdate{connectionClient.serverProxy(),
pchManagerClient,
- filePathCache};
+ filePathCache,
+ projectPartsStorage};
};
std::unique_ptr<ClangPchManagerPluginData> ClangPchManagerPlugin::d;
diff --git a/src/plugins/clangpchmanager/pchmanagerclient.cpp b/src/plugins/clangpchmanager/pchmanagerclient.cpp
index 4b0b5430d7..c26b871f50 100644
--- a/src/plugins/clangpchmanager/pchmanagerclient.cpp
+++ b/src/plugins/clangpchmanager/pchmanagerclient.cpp
@@ -44,10 +44,9 @@ void PchManagerClient::alive()
void PchManagerClient::precompiledHeadersUpdated(ClangBackEnd::PrecompiledHeadersUpdatedMessage &&message)
{
for (ClangBackEnd::ProjectPartPch &projectPartPch : message.takeProjectPartPchs()) {
- const QString projectPartId{projectPartPch.projectPartId};
const QString pchPath{projectPartPch.pchPath};
addProjectPartPch(std::move(projectPartPch));
- precompiledHeaderUpdated(projectPartId, pchPath, projectPartPch.lastModified);
+ precompiledHeaderUpdated(projectPartPch.projectPartId, pchPath, projectPartPch.lastModified);
}
}
@@ -65,11 +64,10 @@ void PchManagerClient::progress(ClangBackEnd::ProgressMessage &&message)
}
}
-void PchManagerClient::precompiledHeaderRemoved(const QString &projectPartId)
+void PchManagerClient::precompiledHeaderRemoved(ClangBackEnd::ProjectPartId projectPartId)
{
for (auto notifier : m_notifiers) {
- Utils::SmallString id(projectPartId);
- removeProjectPartPch(id);
+ removeProjectPartPch(projectPartId);
notifier->precompiledHeaderRemoved(projectPartId);
}
}
@@ -79,7 +77,8 @@ void PchManagerClient::setConnectionClient(PchManagerConnectionClient *connectio
m_connectionClient = connectionClient;
}
-Utils::optional<ClangBackEnd::ProjectPartPch> PchManagerClient::projectPartPch(Utils::SmallStringView projectPartId) const
+Utils::optional<ClangBackEnd::ProjectPartPch> PchManagerClient::projectPartPch(
+ ClangBackEnd::ProjectPartId projectPartId) const
{
auto found = std::lower_bound(m_projectPartPchs.cbegin(),
m_projectPartPchs.cend(),
@@ -110,7 +109,7 @@ void PchManagerClient::detach(PchManagerNotifierInterface *notifierToBeDeleted)
m_notifiers.erase(newEnd, m_notifiers.end());
}
-void PchManagerClient::removeProjectPartPch(Utils::SmallStringView projectPartId)
+void PchManagerClient::removeProjectPartPch(ClangBackEnd::ProjectPartId projectPartId)
{
auto found = std::lower_bound(m_projectPartPchs.begin(),
m_projectPartPchs.end(),
@@ -145,7 +144,7 @@ const std::vector<PchManagerNotifierInterface *> &PchManagerClient::notifiers()
return m_notifiers;
}
-void PchManagerClient::precompiledHeaderUpdated(const QString &projectPartId,
+void PchManagerClient::precompiledHeaderUpdated(ClangBackEnd::ProjectPartId projectPartId,
const QString &pchFilePath,
long long lastModified)
{
diff --git a/src/plugins/clangpchmanager/pchmanagerclient.h b/src/plugins/clangpchmanager/pchmanagerclient.h
index ccbd03299a..308370356e 100644
--- a/src/plugins/clangpchmanager/pchmanagerclient.h
+++ b/src/plugins/clangpchmanager/pchmanagerclient.h
@@ -52,21 +52,20 @@ public:
void precompiledHeadersUpdated(ClangBackEnd::PrecompiledHeadersUpdatedMessage &&message) override;
void progress(ClangBackEnd::ProgressMessage &&message) override;
- void precompiledHeaderRemoved(const QString &projectPartId);
+ void precompiledHeaderRemoved(ClangBackEnd::ProjectPartId projectPartId);
void setConnectionClient(PchManagerConnectionClient *connectionClient);
Utils::optional<ClangBackEnd::ProjectPartPch> projectPartPch(
- Utils::SmallStringView projectPartId) const override;
+ ClangBackEnd::ProjectPartId projectPartId) const override;
const ClangBackEnd::ProjectPartPchs &projectPartPchs() const override
{
return m_projectPartPchs;
}
-unittest_public:
- const std::vector<PchManagerNotifierInterface*> &notifiers() const;
- void precompiledHeaderUpdated(const QString &projectPartId,
+ unittest_public : const std::vector<PchManagerNotifierInterface *> &notifiers() const;
+ void precompiledHeaderUpdated(ClangBackEnd::ProjectPartId projectPartId,
const QString &pchFilePath,
long long lastModified);
@@ -74,7 +73,7 @@ unittest_public:
void detach(PchManagerNotifierInterface *notifier);
void addProjectPartPch(ClangBackEnd::ProjectPartPch &&projectPartPch);
- void removeProjectPartPch(Utils::SmallStringView projectPartId);
+ void removeProjectPartPch(ClangBackEnd::ProjectPartId projectPartId);
private:
ClangBackEnd::ProjectPartPchs m_projectPartPchs;
diff --git a/src/plugins/clangpchmanager/pchmanagernotifierinterface.h b/src/plugins/clangpchmanager/pchmanagernotifierinterface.h
index 9f9b5d56cf..04461186d6 100644
--- a/src/plugins/clangpchmanager/pchmanagernotifierinterface.h
+++ b/src/plugins/clangpchmanager/pchmanagernotifierinterface.h
@@ -27,6 +27,8 @@
#include "clangpchmanager_global.h"
+#include <projectpartid.h>
+
QT_FORWARD_DECLARE_CLASS(QString)
namespace ClangPchManager {
@@ -40,10 +42,11 @@ public:
PchManagerNotifierInterface(const PchManagerNotifierInterface &) = delete;
PchManagerNotifierInterface &operator=(const PchManagerNotifierInterface &) = delete;
- virtual void precompiledHeaderUpdated(const QString &projectPartId,
+ virtual void precompiledHeaderUpdated(ClangBackEnd::ProjectPartId projectPartId,
const QString &pchFilePath,
- long long lastModified) = 0;
- virtual void precompiledHeaderRemoved(const QString &projectPartId) = 0;
+ long long lastModified)
+ = 0;
+ virtual void precompiledHeaderRemoved(ClangBackEnd::ProjectPartId projectPartId) = 0;
PchManagerClient &m_pchManagerClient;
diff --git a/src/plugins/clangpchmanager/pchmanagerprojectupdater.cpp b/src/plugins/clangpchmanager/pchmanagerprojectupdater.cpp
index f7b925049a..38af78719e 100644
--- a/src/plugins/clangpchmanager/pchmanagerprojectupdater.cpp
+++ b/src/plugins/clangpchmanager/pchmanagerprojectupdater.cpp
@@ -29,20 +29,22 @@
namespace ClangPchManager {
-PchManagerProjectUpdater::PchManagerProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
- PchManagerClient &client,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
- : ProjectUpdater(server, filePathCache),
- m_client(client)
+void PchManagerProjectUpdater::removeProjectParts(const ClangBackEnd::ProjectPartIds &projectPartIds)
{
+ ProjectUpdater::removeProjectParts(projectPartIds);
+
+ for (ClangBackEnd::ProjectPartId projectPartId : projectPartIds)
+ m_client.precompiledHeaderRemoved(projectPartId);
}
-void PchManagerProjectUpdater::removeProjectParts(const QStringList &projectPartIds)
+void PchManagerProjectUpdater::removeProjectParts(const QStringList &projectPartNames)
{
+ ClangBackEnd::ProjectPartIds projectPartIds = toProjectPartIds(projectPartNames);
+
ProjectUpdater::removeProjectParts(projectPartIds);
- for (const QString &projectPartiId : projectPartIds)
- m_client.precompiledHeaderRemoved(projectPartiId);
+ for (ClangBackEnd::ProjectPartId projectPartId : projectPartIds)
+ m_client.precompiledHeaderRemoved(projectPartId);
}
} // namespace ClangPchManager
diff --git a/src/plugins/clangpchmanager/pchmanagerprojectupdater.h b/src/plugins/clangpchmanager/pchmanagerprojectupdater.h
index 470e12fe4a..fd1b98eab4 100644
--- a/src/plugins/clangpchmanager/pchmanagerprojectupdater.h
+++ b/src/plugins/clangpchmanager/pchmanagerprojectupdater.h
@@ -34,9 +34,14 @@ class PchManagerProjectUpdater : public ProjectUpdater
public:
PchManagerProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
PchManagerClient &client,
- ClangBackEnd::FilePathCachingInterface &filePathCache);
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage)
+ : ProjectUpdater(server, filePathCache, projectPartsStorage)
+ , m_client(client)
+ {}
- void removeProjectParts(const QStringList &projectPartIds);
+ void removeProjectParts(const ClangBackEnd::ProjectPartIds &projectPartIds);
+ void removeProjectParts(const QStringList &projectPartNames);
private:
PchManagerClient &m_client;
diff --git a/src/plugins/clangpchmanager/projectupdater.cpp b/src/plugins/clangpchmanager/projectupdater.cpp
index 4e5cf95017..fc8db5bc07 100644
--- a/src/plugins/clangpchmanager/projectupdater.cpp
+++ b/src/plugins/clangpchmanager/projectupdater.cpp
@@ -61,13 +61,6 @@ public:
ClangBackEnd::FilePathIds sources;
};
-ProjectUpdater::ProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
- : m_server(server),
- m_filePathCache(filePathCache)
-{
-}
-
void ProjectUpdater::updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts,
Utils::SmallStringVector &&toolChainArguments)
{
@@ -75,9 +68,9 @@ void ProjectUpdater::updateProjectParts(const std::vector<CppTools::ProjectPart
toProjectPartContainers(projectParts), std::move(toolChainArguments)});
}
-void ProjectUpdater::removeProjectParts(const QStringList &projectPartIds)
+void ProjectUpdater::removeProjectParts(ClangBackEnd::ProjectPartIds projectPartIds)
{
- Utils::SmallStringVector sortedIds(projectPartIds);
+ auto sortedIds{projectPartIds};
std::sort(sortedIds.begin(), sortedIds.end());
m_server.removeProjectParts(ClangBackEnd::RemoveProjectPartsMessage{std::move(sortedIds)});
@@ -278,7 +271,12 @@ ClangBackEnd::ProjectPartContainer ProjectUpdater::toProjectPartContainer(
auto includeSearchPaths = createIncludeSearchPaths(*projectPart);
- return ClangBackEnd::ProjectPartContainer(projectPart->id(),
+ const QByteArray projectPartName = projectPart->id().toUtf8();
+
+ ClangBackEnd::ProjectPartId projectPartId = m_projectPartsStorage.fetchProjectPartId(
+ projectPartName);
+
+ return ClangBackEnd::ProjectPartContainer(projectPartId,
Utils::SmallStringVector(arguments),
createCompilerMacros(projectPart->projectMacros),
std::move(includeSearchPaths.system),
@@ -296,9 +294,6 @@ ClangBackEnd::ProjectPartContainers ProjectUpdater::toProjectPartContainers(
{
using namespace std::placeholders;
- std::vector<ClangBackEnd::ProjectPartContainer> projectPartContainers;
- projectPartContainers.reserve(projectParts.size());
-
projectParts.erase(std::remove_if(projectParts.begin(),
projectParts.end(),
[](const CppTools::ProjectPart *projectPart) {
@@ -306,6 +301,9 @@ ClangBackEnd::ProjectPartContainers ProjectUpdater::toProjectPartContainers(
}),
projectParts.end());
+ std::vector<ClangBackEnd::ProjectPartContainer> projectPartContainers;
+ projectPartContainers.reserve(projectParts.size());
+
std::transform(projectParts.begin(),
projectParts.end(),
std::back_inserter(projectPartContainers),
@@ -336,4 +334,26 @@ ClangBackEnd::FilePaths ProjectUpdater::createExcludedPaths(
return excludedPaths;
}
+QString ProjectUpdater::fetchProjectPartName(ClangBackEnd::ProjectPartId projectPartId) const
+{
+ return m_projectPartsStorage.fetchProjectPartName(projectPartId).toQString();
+}
+
+ClangBackEnd::ProjectPartIds ProjectUpdater::toProjectPartIds(
+ const QStringList &projectPartNames) const
+{
+ ClangBackEnd::ProjectPartIds projectPartIds;
+ projectPartIds.reserve(projectPartIds.size());
+
+ std::transform(projectPartNames.begin(),
+ projectPartNames.end(),
+ std::back_inserter(projectPartIds),
+ [&](const QString &projectPartName) {
+ return m_projectPartsStorage.fetchProjectPartId(
+ Utils::SmallString{projectPartName});
+ });
+
+ return projectPartIds;
+}
+
} // namespace ClangPchManager
diff --git a/src/plugins/clangpchmanager/projectupdater.h b/src/plugins/clangpchmanager/projectupdater.h
index 896a02def0..044b86f637 100644
--- a/src/plugins/clangpchmanager/projectupdater.h
+++ b/src/plugins/clangpchmanager/projectupdater.h
@@ -33,6 +33,7 @@
#include <generatedfiles.h>
#include <includesearchpath.h>
#include <projectpartcontainer.h>
+#include <projectpartsstorageinterface.h>
#include <projectexplorer/headerpath.h>
@@ -69,11 +70,16 @@ public:
};
ProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
- ClangBackEnd::FilePathCachingInterface &filePathCache);
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage)
+ : m_server(server)
+ , m_filePathCache(filePathCache)
+ , m_projectPartsStorage(projectPartsStorage)
+ {}
void updateProjectParts(const std::vector<CppTools::ProjectPart *> &projectParts,
Utils::SmallStringVector &&toolChainArguments);
- void removeProjectParts(const QStringList &projectPartIds);
+ void removeProjectParts(ClangBackEnd::ProjectPartIds projectPartIds);
void updateGeneratedFiles(ClangBackEnd::V2::FileContainers &&generatedFiles);
void removeGeneratedFiles(ClangBackEnd::FilePaths &&filePaths);
@@ -88,6 +94,7 @@ public:
CppTools::ProjectPart *projectPart) const;
ClangBackEnd::ProjectPartContainers toProjectPartContainers(
std::vector<CppTools::ProjectPart *> projectParts) const;
+
void addToHeaderAndSources(HeaderAndSources &headerAndSources,
const CppTools::ProjectFile &projectFile) const;
static QStringList toolChainArguments(CppTools::ProjectPart *projectPart);
@@ -98,11 +105,16 @@ public:
static ClangBackEnd::FilePaths createExcludedPaths(
const ClangBackEnd::V2::FileContainers &generatedFiles);
+ QString fetchProjectPartName(ClangBackEnd::ProjectPartId projectPartId) const;
+
+ ClangBackEnd::ProjectPartIds toProjectPartIds(const QStringList &projectPartNames) const;
+
private:
ClangBackEnd::GeneratedFiles m_generatedFiles;
ClangBackEnd::FilePaths m_excludedPaths;
ClangBackEnd::ProjectManagementServerInterface &m_server;
ClangBackEnd::FilePathCachingInterface &m_filePathCache;
+ ClangBackEnd::ProjectPartsStorageInterface &m_projectPartsStorage;
};
} // namespace ClangPchManager
diff --git a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
index 4d66a2f8c3..a53bbc678a 100644
--- a/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
+++ b/src/plugins/clangpchmanager/qtcreatorprojectupdater.h
@@ -55,11 +55,12 @@ class QtCreatorProjectUpdater : public ProjectUpdaterType,
public ProjectExplorer::ExtraCompilerFactoryObserver
{
public:
- template <typename ClientType>
+ template<typename ClientType>
QtCreatorProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
ClientType &client,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
- : ProjectUpdaterType(server, client, filePathCache)
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage)
+ : ProjectUpdaterType(server, client, filePathCache, projectPartsStorage)
{
connectToCppModelManager();
}
@@ -78,7 +79,7 @@ public:
}
void projectPartsRemoved(const QStringList &projectPartIds)
- {
+ {
ProjectUpdaterType::removeProjectParts(projectPartIds);
}
diff --git a/src/plugins/clangrefactoring/clangrefactoringplugin.cpp b/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
index ea765bed5f..059eff4c78 100644
--- a/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
+++ b/src/plugins/clangrefactoring/clangrefactoringplugin.cpp
@@ -36,6 +36,7 @@
#include <clangpchmanager/clangpchmanagerplugin.h>
#include <clangpchmanager/progressmanager.h>
#include <clangsupport/refactoringdatabaseinitializer.h>
+#include <projectpartsstorage.h>
#include <cpptools/cppmodelmanager.h>
@@ -61,6 +62,8 @@ namespace ClangRefactoring {
namespace {
+using ClangPchManager::ClangPchManagerPlugin;
+
QString backendProcessPath()
{
return Core::ICore::libexecPath()
@@ -91,14 +94,16 @@ public:
ClangBackEnd::RefactoringConnectionClient connectionClient{&refactoringClient};
QuerySqliteReadStatementFactory statementFactory{database};
SymbolQuery<QuerySqliteReadStatementFactory> symbolQuery{statementFactory};
+ ClangBackEnd::ProjectPartsStorage<Sqlite::Database> projectPartsStorage{database};
RefactoringEngine engine{connectionClient.serverProxy(), refactoringClient, filePathCache, symbolQuery};
QtCreatorSearch qtCreatorSearch;
QtCreatorClangQueryFindFilter qtCreatorfindFilter{connectionClient.serverProxy(),
qtCreatorSearch,
refactoringClient};
QtCreatorRefactoringProjectUpdater projectUpdate{connectionClient.serverProxy(),
- ClangPchManager::ClangPchManagerPlugin::pchManagerClient(),
- filePathCache};
+ ClangPchManagerPlugin::pchManagerClient(),
+ filePathCache,
+ projectPartsStorage};
};
ClangRefactoringPlugin::ClangRefactoringPlugin()
diff --git a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp
index f3ca992620..dea3ccfeec 100644
--- a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp
+++ b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.cpp
@@ -60,10 +60,16 @@ std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles()
}
}
-QtCreatorRefactoringProjectUpdater::QtCreatorRefactoringProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
- ClangPchManager::PchManagerClient &pchManagerClient,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
- : RefactoringProjectUpdater(server, pchManagerClient, *cppModelManager(), filePathCache)
+QtCreatorRefactoringProjectUpdater::QtCreatorRefactoringProjectUpdater(
+ ClangBackEnd::ProjectManagementServerInterface &server,
+ ClangPchManager::PchManagerClient &pchManagerClient,
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage)
+ : RefactoringProjectUpdater(server,
+ pchManagerClient,
+ *cppModelManager(),
+ filePathCache,
+ projectPartsStorage)
{
connectToCppModelManager();
}
diff --git a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.h b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.h
index 118c15b50c..85d635a3af 100644
--- a/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.h
+++ b/src/plugins/clangrefactoring/qtcreatorrefactoringprojectupdater.h
@@ -32,9 +32,11 @@ namespace ClangRefactoring {
class QtCreatorRefactoringProjectUpdater final : public RefactoringProjectUpdater
{
public:
- QtCreatorRefactoringProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
- ClangPchManager::PchManagerClient &pchManagerClient,
- ClangBackEnd::FilePathCachingInterface &filePathCache);
+ QtCreatorRefactoringProjectUpdater(
+ ClangBackEnd::ProjectManagementServerInterface &server,
+ ClangPchManager::PchManagerClient &pchManagerClient,
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage);
private:
void abstractEditorUpdated(const QString &filePath, const QByteArray &contents);
diff --git a/src/plugins/clangrefactoring/refactoringprojectupdater.cpp b/src/plugins/clangrefactoring/refactoringprojectupdater.cpp
index 99b028e522..8cfd5b942a 100644
--- a/src/plugins/clangrefactoring/refactoringprojectupdater.cpp
+++ b/src/plugins/clangrefactoring/refactoringprojectupdater.cpp
@@ -26,19 +26,22 @@
#include "refactoringprojectupdater.h"
#include <cpptools/cppmodelmanager.h>
+#include <projectpartsstorageinterface.h>
namespace ClangRefactoring {
-void RefactoringProjectUpdater::precompiledHeaderUpdated(const QString &projectPartId,
+void RefactoringProjectUpdater::precompiledHeaderUpdated(ClangBackEnd::ProjectPartId projectPartId,
const QString &,
long long)
{
- auto projectPart = m_cppModelManager.projectPartForId(projectPartId);
+ const QString projectPartName = fetchProjectPartName(projectPartId);
+
+ auto projectPart = m_cppModelManager.projectPartForId(projectPartName);
if (projectPart)
updateProjectParts({projectPart.data()}, {});
}
-void RefactoringProjectUpdater::precompiledHeaderRemoved(const QString &projectPartId)
+void RefactoringProjectUpdater::precompiledHeaderRemoved(ClangBackEnd::ProjectPartId projectPartId)
{
removeProjectParts({projectPartId});
}
diff --git a/src/plugins/clangrefactoring/refactoringprojectupdater.h b/src/plugins/clangrefactoring/refactoringprojectupdater.h
index 8e2652cf23..a9559ef94e 100644
--- a/src/plugins/clangrefactoring/refactoringprojectupdater.h
+++ b/src/plugins/clangrefactoring/refactoringprojectupdater.h
@@ -39,18 +39,18 @@ public:
RefactoringProjectUpdater(ClangBackEnd::ProjectManagementServerInterface &server,
ClangPchManager::PchManagerClient &pchManagerClient,
CppTools::CppModelManagerInterface &cppModelManager,
- ClangBackEnd::FilePathCachingInterface &filePathCache)
- : ClangPchManager::ProjectUpdater(server, filePathCache),
- ClangPchManager::PchManagerNotifierInterface(pchManagerClient),
- m_cppModelManager(cppModelManager)
+ ClangBackEnd::FilePathCachingInterface &filePathCache,
+ ClangBackEnd::ProjectPartsStorageInterface &projectPartsStorage)
+ : ClangPchManager::ProjectUpdater(server, filePathCache, projectPartsStorage)
+ , ClangPchManager::PchManagerNotifierInterface(pchManagerClient)
+ , m_cppModelManager(cppModelManager)
{
-
}
- void precompiledHeaderUpdated(const QString &projectPartId,
+ void precompiledHeaderUpdated(ClangBackEnd::ProjectPartId projectPartId,
const QString &pchFilePath,
long long lastModified) override;
- void precompiledHeaderRemoved(const QString &projectPartId) override;
+ void precompiledHeaderRemoved(ClangBackEnd::ProjectPartId projectPartId) override;
private:
CppTools::CppModelManagerInterface &m_cppModelManager;
diff --git a/src/plugins/coreplugin/fancytabwidget.cpp b/src/plugins/coreplugin/fancytabwidget.cpp
index 8ce0cfb199..e46a7e70aa 100644
--- a/src/plugins/coreplugin/fancytabwidget.cpp
+++ b/src/plugins/coreplugin/fancytabwidget.cpp
@@ -598,7 +598,7 @@ void FancyTabWidget::addCornerWidget(QWidget *widget)
int FancyTabWidget::currentIndex() const
{
- return m_tabBar->currentIndex();
+ return m_modesStack->currentIndex();
}
QStatusBar *FancyTabWidget::statusBar() const
diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp
index 4a7fb5d4a3..f2b3869f9b 100644
--- a/src/plugins/debugger/debuggeritemmanager.cpp
+++ b/src/plugins/debugger/debuggeritemmanager.cpp
@@ -700,7 +700,7 @@ void DebuggerItemManagerPrivate::autoDetectCdbDebuggers()
void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers()
{
const QStringList filters = {"gdb-i686-pc-mingw32", "gdb-i686-pc-mingw32.exe", "gdb",
- "gdb.exe", "lldb", "lldb.exe", "lldb-*"};
+ "gdb.exe", "lldb", "lldb.exe", "lldb-[1-9]*"};
// DebuggerItem result;
// result.setAutoDetected(true);
@@ -746,14 +746,8 @@ void DebuggerItemManagerPrivate::autoDetectGdbOrLldbDebuggers()
dir.setFilter(QDir::Files | QDir::Executable);
foreach (const Utils::FileName &base, path) {
dir.setPath(base.toFileInfo().absoluteFilePath());
- foreach (const QString &entry, dir.entryList()) {
- if (entry.startsWith("lldb-platform-")
- || entry.startsWith("lldb-gdbserver-")
- || entry.startsWith("lldb-mi-")) {
- continue;
- }
+ foreach (const QString &entry, dir.entryList())
suspects.append(FileName::fromString(dir.absoluteFilePath(entry)));
- }
}
foreach (const FileName &command, suspects) {
diff --git a/src/plugins/fakevim/fakevimactions.cpp b/src/plugins/fakevim/fakevimactions.cpp
index fbb7556eef..007d9fcf5a 100644
--- a/src/plugins/fakevim/fakevimactions.cpp
+++ b/src/plugins/fakevim/fakevimactions.cpp
@@ -108,7 +108,7 @@ FakeVimSettings::FakeVimSettings()
createAction(ConfigTildeOp, false, "TildeOp", "top");
createAction(ConfigShowCmd, true, "ShowCmd", "sc");
createAction(ConfigRelativeNumber, false, "RelativeNumber", "rnu");
- createAction(ConfigBlinkingCursor, false, "BlinkingCursor", "cb");
+ createAction(ConfigBlinkingCursor, false, "BlinkingCursor", "bc");
createAction(ConfigScrollOff, 0, "ScrollOff", "so");
createAction(ConfigBackspace, QString("indent,eol,start"), "ConfigBackspace", "bs");
createAction(ConfigIsKeyword, QString("@,48-57,_,192-255,a-z,A-Z"), "IsKeyword", "isk");
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 8dac609897..550a8489e4 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1208,7 +1208,7 @@ void GitClient::reset(const QString &workingDirectory, const QString &argument,
if (!commit.isEmpty())
arguments << commit;
- unsigned flags = 0;
+ unsigned flags = VcsCommand::ShowSuccessMessage;
if (argument == "--hard") {
if (gitStatus(workingDirectory, StatusMode(NoUntracked | NoSubmodules)) != StatusUnchanged) {
if (QMessageBox::question(
diff --git a/src/plugins/pythoneditor/pythoneditorplugin.cpp b/src/plugins/pythoneditor/pythoneditorplugin.cpp
index a486fb837e..f801f4cfe8 100644
--- a/src/plugins/pythoneditor/pythoneditorplugin.cpp
+++ b/src/plugins/pythoneditor/pythoneditorplugin.cpp
@@ -334,7 +334,7 @@ static QStringList readLines(const Utils::FileName &projectFile)
QTextStream stream(&file);
while (true) {
- QString line = stream.readLine();
+ const QString line = stream.readLine();
if (line.isNull())
break;
if (visited.contains(line))
@@ -382,8 +382,8 @@ static QStringList readLinesJson(const Utils::FileName &projectFile,
const QJsonObject obj = doc.object();
if (obj.contains("files")) {
- QJsonValue files = obj.value("files");
- QJsonArray files_array = files.toArray();
+ const QJsonValue files = obj.value("files");
+ const QJsonArray files_array = files.toArray();
QSet<QString> visited;
for (const auto &file : files_array)
visited.insert(file.toString());
@@ -396,7 +396,7 @@ static QStringList readLinesJson(const Utils::FileName &projectFile,
bool PythonProject::saveRawFileList(const QStringList &rawFileList)
{
- bool result = saveRawList(rawFileList, projectFilePath().toString());
+ const bool result = saveRawList(rawFileList, projectFilePath().toString());
// refresh(PythonProject::Files);
return result;
}
@@ -463,7 +463,7 @@ bool PythonProject::addFiles(const QStringList &filePaths)
{
QStringList newList = m_rawFileList;
- QDir baseDir(projectDirectory().toString());
+ const QDir baseDir(projectDirectory().toString());
for (const QString &filePath : filePaths)
newList.append(baseDir.relativeFilePath(filePath));
@@ -475,7 +475,7 @@ bool PythonProject::removeFiles(const QStringList &filePaths)
QStringList newList = m_rawFileList;
for (const QString &filePath : filePaths) {
- QHash<QString, QString>::iterator i = m_rawListEntries.find(filePath);
+ const QHash<QString, QString>::iterator i = m_rawListEntries.find(filePath);
if (i != m_rawListEntries.end())
newList.removeOne(i.value());
}
@@ -486,7 +486,7 @@ bool PythonProject::removeFiles(const QStringList &filePaths)
bool PythonProject::setFiles(const QStringList &filePaths)
{
QStringList newList;
- QDir baseDir(projectDirectory().toString());
+ const QDir baseDir(projectDirectory().toString());
for (const QString &filePath : filePaths)
newList.append(baseDir.relativeFilePath(filePath));
@@ -497,11 +497,11 @@ bool PythonProject::renameFile(const QString &filePath, const QString &newFilePa
{
QStringList newList = m_rawFileList;
- QHash<QString, QString>::iterator i = m_rawListEntries.find(filePath);
+ const QHash<QString, QString>::iterator i = m_rawListEntries.find(filePath);
if (i != m_rawListEntries.end()) {
- int index = newList.indexOf(i.value());
+ const int index = newList.indexOf(i.value());
if (index != -1) {
- QDir baseDir(projectDirectory().toString());
+ const QDir baseDir(projectDirectory().toString());
newList.replace(index, baseDir.relativeFilePath(newFilePath));
}
}
@@ -550,12 +550,13 @@ void PythonProject::refresh(Target *target)
emitParsingStarted();
parseProject();
- QDir baseDir(projectDirectory().toString());
+ const QDir baseDir(projectDirectory().toString());
BuildTargetInfoList appTargets;
auto newRoot = std::make_unique<PythonProjectNode>(this);
- for (const QString &f : m_files) {
+ for (const QString &f : qAsConst(m_files)) {
const QString displayName = baseDir.relativeFilePath(f);
- FileType fileType = f.endsWith(".pyproject") || f.endsWith(".pyqtc") ? FileType::Project : FileType::Source;
+ const FileType fileType = f.endsWith(".pyproject") || f.endsWith(".pyqtc") ? FileType::Project
+ : FileType::Source;
newRoot->addNestedNode(std::make_unique<PythonFileNode>(FileName::fromString(f),
displayName, fileType));
if (fileType == FileType::Source) {
@@ -659,8 +660,8 @@ QHash<QString, QStringList> sortFilesIntoPaths(const QString &base, const QSet<Q
const QDir baseDir(base);
for (const QString &absoluteFileName : files) {
- QFileInfo fileInfo(absoluteFileName);
- FileName absoluteFilePath = FileName::fromString(fileInfo.path());
+ const QFileInfo fileInfo(absoluteFileName);
+ const FileName absoluteFilePath = FileName::fromString(fileInfo.path());
QString relativeFilePath;
if (absoluteFilePath.isChildOf(baseDir)) {
diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
index 4a9147ae4e..62f7f315ce 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp
@@ -117,6 +117,9 @@ QString filterMetaIcons(const QString &fileName)
QModelIndex CustomFileSystemModel::setRootPath(const QString &newPath)
{
+ if (m_fileSystemModel->rootPath() == newPath)
+ return QAbstractListModel::index(0, 0);
+
beginResetModel();
m_fileSystemModel->setRootPath(newPath);
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
index d4dea983c0..8dd1c0727e 100644
--- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
+++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp
@@ -431,11 +431,18 @@ void ItemLibraryWidget::addResources()
filters.prepend(tr("All Files (%1)").arg(map.values().join(" ")));
+ static QString lastDir;
+ const QString currentDir = lastDir.isEmpty() ? document->fileName().parentDir().toString() : lastDir;
+
const auto fileNames = QFileDialog::getOpenFileNames(this,
tr("Add Resources"),
- document->fileName().parentDir().toString(),
+ currentDir,
filters.join(";;"));
+
+ if (!fileNames.isEmpty())
+ lastDir = QFileInfo(fileNames.first()).absolutePath();
+
QMultiMap<QString, QString> partitionedFileNames;
for (const QString &fileName : fileNames) {
diff --git a/src/plugins/qmldesigner/designercore/include/qmltimeline.h b/src/plugins/qmldesigner/designercore/include/qmltimeline.h
index c04fd454c0..59342bcb04 100644
--- a/src/plugins/qmldesigner/designercore/include/qmltimeline.h
+++ b/src/plugins/qmldesigner/designercore/include/qmltimeline.h
@@ -72,6 +72,7 @@ public:
void resetGroupRecording() const;
bool hasKeyframeGroup(const ModelNode &node, const PropertyName &propertyName) const;
+ bool hasKeyframeGroupForTarget(const ModelNode &node) const;
private:
void addKeyframeGroupIfNotExists(const ModelNode &node, const PropertyName &propertyName);
diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h
index 6a69764dbe..a1513128d7 100644
--- a/src/plugins/qmldesigner/designercore/include/rewriterview.h
+++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h
@@ -187,7 +187,7 @@ protected: // functions
void notifyErrorsAndWarnings(const QList<DocumentMessage> &errors);
private: //variables
- ModelNode nodeAtTextCursorPositionRekursive(const ModelNode &root, int cursorPosition) const;
+ ModelNode nodeAtTextCursorPositionHelper(const ModelNode &root, int cursorPosition) const;
void setupCanonicalHashes() const;
TextModifier *m_textModifier = nullptr;
diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
index 7c5ee2f7aa..4251dd96c3 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp
@@ -45,7 +45,7 @@ public:
int majorVersion{-1};
int minorVersion{-1};
QString libraryEntryIconPath;
- QIcon typeIcon;
+ QIcon typeIcon = QIcon(":/ItemLibrary/images/item-default-icon.png");
QList<PropertyContainer> properties;
QString qml;
QString qmlSource;
diff --git a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
index e484848261..a687853604 100644
--- a/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmltimeline.cpp
@@ -280,6 +280,19 @@ bool QmlTimeline::hasKeyframeGroup(const ModelNode &node, const PropertyName &pr
return false;
}
+bool QmlTimeline::hasKeyframeGroupForTarget(const ModelNode &node) const
+{
+ if (!isValid())
+ return false;
+
+ for (const QmlTimelineKeyframeGroup &frames : allKeyframeGroups()) {
+ if (frames.target().isValid() && frames.target() == node)
+ return true;
+ }
+
+ return false;
+}
+
QList<QmlTimelineKeyframeGroup> QmlTimeline::allKeyframeGroups() const
{
QList<QmlTimelineKeyframeGroup> returnList;
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 2b22844bb9..bbd5fad60a 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -390,7 +390,7 @@ void RewriterView::deactivateTextMofifierChangeSignals()
textModifier()->deactivateChangeSignals();
}
-void RewriterView::auxiliaryDataChanged(const ModelNode &, const PropertyName &name, const QVariant &)
+void RewriterView::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &)
{
if (m_restoringAuxData)
return;
@@ -401,6 +401,11 @@ void RewriterView::auxiliaryDataChanged(const ModelNode &, const PropertyName &n
if (name.endsWith("@Internal"))
return;
+ if (node.isRootNode()) {
+ if (name == "width" || name == "height" || name == "autoSize")
+ return;
+ }
+
m_textModifier->textDocument()->setModified(true);
}
@@ -686,39 +691,36 @@ static bool isInNodeDefinition(int nodeTextOffset, int nodeTextLength, int curso
return (nodeTextOffset <= cursorPosition) && (nodeTextOffset + nodeTextLength > cursorPosition);
}
-ModelNode RewriterView::nodeAtTextCursorPositionRekursive(const ModelNode &root, int cursorPosition) const
+ModelNode RewriterView::nodeAtTextCursorPositionHelper(const ModelNode &root, int cursorPosition) const
{
- ModelNode node = root;
-
- int lastOffset = -1;
-
- bool sorted = true;
+ using myPair = std::pair<ModelNode,int>;
+ std::vector<myPair> data;
- if (!root.nodeProperties().isEmpty())
- sorted = false;
+ for (const ModelNode &node : allModelNodes()) {
+ int offset = nodeOffset(node);
+ if (offset > 0)
+ data.emplace_back(std::make_pair(node, offset));
+ }
- foreach (const ModelNode &currentNode, node.directSubModelNodes()) {
- const int offset = nodeOffset(currentNode);
+ std::sort(data.begin(), data.end(), [](myPair a, myPair b) {
+ return a.second < b.second;
+ });
- if (offset < cursorPosition && offset > lastOffset) {
- node = nodeAtTextCursorPositionRekursive(currentNode, cursorPosition);
- lastOffset = offset;
- } else {
- if (sorted)
- break;
- }
- }
+ ModelNode lastNode = root;
- const int nodeTextLength = nodeLength(node);
- const int nodeTextOffset = nodeOffset(node);
+ for (const myPair &pair : data) {
+ ModelNode node = pair.first;
- if (nodeTextLength < 0)
- return ModelNode();
+ const int nodeTextLength = nodeLength(node);
+ const int nodeTextOffset = nodeOffset(node);
- if (isInNodeDefinition(nodeTextOffset, nodeTextLength, cursorPosition))
- return node;
+ if (isInNodeDefinition(nodeTextOffset, nodeTextLength, cursorPosition))
+ lastNode = node;
+ else if (nodeTextOffset > cursorPosition)
+ break;
+ }
- return root;
+ return lastNode;
}
void RewriterView::setupCanonicalHashes() const
@@ -749,7 +751,7 @@ void RewriterView::setupCanonicalHashes() const
ModelNode RewriterView::nodeAtTextCursorPosition(int cursorPosition) const
{
- return nodeAtTextCursorPositionRekursive(rootModelNode(), cursorPosition);
+ return nodeAtTextCursorPositionHelper(rootModelNode(), cursorPosition);
}
bool RewriterView::renameId(const QString& oldId, const QString& newId)
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index c5e9b284f1..c86336d550 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -76,7 +76,8 @@ bool isSupportedAttachedProperties(const QString &propertyName)
QStringList supportedVersionsList()
{
static const QStringList list = {
- "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10", "2.11", "2.12"
+ "2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7", "2.8", "2.9",
+ "2.10", "2.11", "2.12", "2.13"
};
return list;
}
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineanimationform.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineanimationform.cpp
index 7fc378f2ea..09cd8ee453 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineanimationform.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineanimationform.cpp
@@ -73,8 +73,15 @@ TimelineAnimationForm::TimelineAnimationForm(QWidget *parent)
connect(ui->idLineEdit, &QLineEdit::editingFinished, [this]() {
QTC_ASSERT(m_timeline.isValid(), return );
+ static QString lastString;
+
const QString newId = ui->idLineEdit->text();
+ if (lastString == newId)
+ return;
+
+ lastString = newId;
+
if (newId == animation().id())
return;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinecontrols.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinecontrols.cpp
index f2e6761821..682a14f1c7 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinecontrols.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinecontrols.cpp
@@ -56,6 +56,9 @@ FloatControl::FloatControl()
setValue(0.0);
setButtonSymbols(QAbstractSpinBox::NoButtons);
setFrame(false);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)
+ setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
+#endif
setMinimum(std::numeric_limits<float>::lowest());
setMaximum(std::numeric_limits<float>::max());
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineform.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineform.cpp
index 4f52ecd562..3c1c3950dd 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineform.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineform.cpp
@@ -52,7 +52,17 @@ TimelineForm::TimelineForm(QWidget *parent)
connect(ui->expressionBindingLineEdit, &QLineEdit::editingFinished, [this]() {
QTC_ASSERT(m_timeline.isValid(), return );
- if (ui->expressionBindingLineEdit->text().isEmpty()) {
+
+ static QString lastString;
+
+ const QString bindingText = ui->expressionBindingLineEdit->text();
+
+ if (bindingText == lastString)
+ return;
+
+ lastString = bindingText;
+
+ if (bindingText.isEmpty()) {
ui->animation->setChecked(true);
try {
m_timeline.modelNode().removeProperty("currentFrame");
@@ -67,7 +77,7 @@ TimelineForm::TimelineForm(QWidget *parent)
try {
m_timeline.modelNode()
.bindingProperty("currentFrame")
- .setExpression(ui->expressionBindingLineEdit->text());
+ .setExpression(bindingText);
} catch (const Exception &e) {
e.showException();
}
@@ -76,8 +86,15 @@ TimelineForm::TimelineForm(QWidget *parent)
connect(ui->idLineEdit, &QLineEdit::editingFinished, [this]() {
QTC_ASSERT(m_timeline.isValid(), return );
+ static QString lastString;
+
const QString newId = ui->idLineEdit->text();
+ if (newId == lastString)
+ return;
+
+ lastString = newId;
+
if (newId == m_timeline.modelNode().id())
return;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.cpp
index c84923f7c2..af0f26d249 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.cpp
@@ -154,4 +154,9 @@ int TimelineGraphicsLayout::maximumScrollValue() const
return std::round(qMax(maxr, 0.0));
}
+void TimelineGraphicsLayout::activate()
+{
+ m_layout->activate();
+}
+
} // End namespace QmlDesigner.
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.h b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.h
index 192682f646..d5b7c4debc 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicslayout.h
@@ -72,6 +72,8 @@ public:
int maximumScrollValue() const;
+ void activate();
+
private:
QGraphicsLinearLayout *m_layout = nullptr;
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.cpp
index 8ef0448207..eb09492397 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.cpp
@@ -698,6 +698,11 @@ void TimelineGraphicsScene::deleteKeyframes(const QList<ModelNode> &frames)
}
}
+void TimelineGraphicsScene::activateLayout()
+{
+ m_layout->activate();
+}
+
void TimelineGraphicsScene::emitScrollOffsetChanged()
{
for (QGraphicsItem *item : items())
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.h b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.h
index 670ed06feb..b8f93595c4 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinegraphicsscene.h
@@ -137,6 +137,8 @@ public:
void deleteKeyframeGroup(const ModelNode &group);
void deleteKeyframes(const QList<ModelNode> &frames);
+ void activateLayout();
+
signals:
void statusBarMessageChanged(const QString &message);
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp
index f4cab3aa05..7cb9760a51 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelinesectionitem.cpp
@@ -443,6 +443,7 @@ void TimelineSectionItem::invalidateHeight()
setPreferredHeight(height);
setMinimumHeight(height);
setMaximumHeight(height);
+ timelineScene()->activateLayout();
}
void TimelineSectionItem::invalidateProperties()
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.cpp b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.cpp
index c66264ffbc..653ed27ba7 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.cpp
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.cpp
@@ -26,6 +26,8 @@
#include "timelineview.h"
#include "easingcurve.h"
+#include "timelineactions.h"
+#include "timelineconstants.h"
#include "timelinecontext.h"
#include "timelinewidget.h"
@@ -33,18 +35,22 @@
#include "timelinesettingsdialog.h"
#include "timelinetoolbar.h"
+#include <bindingproperty.h>
#include <exception.h>
+#include <modelnodecontextmenu_helper.h>
#include <nodeabstractproperty.h>
#include <nodelistproperty.h>
#include <nodemetainfo.h>
#include <rewritertransaction.h>
#include <variantproperty.h>
#include <qmldesignericons.h>
+#include <qmldesignerplugin.h>
#include <qmlitemnode.h>
#include <qmlobjectnode.h>
#include <qmlstate.h>
#include <qmltimeline.h>
#include <qmltimelinekeyframegroup.h>
+#include <viewmanager.h>
#include <coreplugin/icore.h>
@@ -55,6 +61,8 @@
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
+#include <QTimer>
+
namespace QmlDesigner {
TimelineView::TimelineView(QObject *parent)
@@ -97,6 +105,21 @@ void TimelineView::nodeAboutToBeRemoved(const ModelNode &removedNode)
m_timelineWidget->graphicsScene()->clearTimeline();
if (lastId != currentId)
m_timelineWidget->setTimelineId(currentId);
+ } else if (removedNode.parentProperty().isValid()
+ && QmlTimeline::isValidQmlTimeline(removedNode.parentProperty().parentModelNode())) {
+ if (removedNode.hasBindingProperty("target")) {
+ const ModelNode target = removedNode.bindingProperty("target").resolveToModelNode();
+ if (target.isValid()) {
+ QmlTimeline timeline(removedNode.parentProperty().parentModelNode());
+ if (timeline.hasKeyframeGroupForTarget(target))
+ QTimer::singleShot(0, [this, target, timeline]() {
+ if (timeline.hasKeyframeGroupForTarget(target))
+ m_timelineWidget->graphicsScene()->invalidateSectionForTarget(target);
+ else
+ m_timelineWidget->graphicsScene()->invalidateScene();
+ });
+ }
+ }
}
}
}
@@ -110,9 +133,6 @@ void TimelineView::nodeRemoved(const ModelNode & /*removedNode*/,
parentProperty.parentModelNode())) {
QmlTimelineKeyframeGroup frames(parentProperty.parentModelNode());
m_timelineWidget->graphicsScene()->invalidateSectionForTarget(frames.target());
- } else if (parentProperty.isValid()
- && QmlTimeline::isValidQmlTimeline(parentProperty.parentModelNode())) {
- m_timelineWidget->graphicsScene()->invalidateScene();
}
}
@@ -471,6 +491,98 @@ QmlModelState TimelineView::stateForTimeline(const QmlTimeline &timeline)
return QmlModelState();
}
+void TimelineView::registerActions()
+{
+ auto &actionManager = QmlDesignerPlugin::instance()->viewManager().designerActionManager();
+
+ SelectionContextPredicate timelineEnabled = [this](const SelectionContext &context) {
+ return context.singleNodeIsSelected()
+ && widget()->graphicsScene()->currentTimeline().isValid();
+ };
+
+ SelectionContextPredicate timelineHasKeyframes =
+ [this](const SelectionContext &context) {
+ auto timeline = widget()->graphicsScene()->currentTimeline();
+ return !timeline.keyframeGroupsForTarget(context.currentSingleSelectedNode()).isEmpty();
+ };
+
+ SelectionContextPredicate timelineHasClipboard = [](const SelectionContext &context) {
+ return !context.fastUpdate() && TimelineActions::clipboardContainsKeyframes();
+ };
+
+ SelectionContextOperation deleteKeyframes = [this](const SelectionContext &context) {
+ auto mutator = widget()->graphicsScene()->currentTimeline();
+ if (mutator.isValid())
+ TimelineActions::deleteAllKeyframesForTarget(context.currentSingleSelectedNode(),
+ mutator);
+ };
+
+ SelectionContextOperation insertKeyframes = [this](const SelectionContext &context) {
+ auto mutator = widget()->graphicsScene()->currentTimeline();
+ if (mutator.isValid())
+ TimelineActions::insertAllKeyframesForTarget(context.currentSingleSelectedNode(),
+ mutator);
+ };
+
+ SelectionContextOperation copyKeyframes = [this](const SelectionContext &context) {
+ auto mutator = widget()->graphicsScene()->currentTimeline();
+ if (mutator.isValid())
+ TimelineActions::copyAllKeyframesForTarget(context.currentSingleSelectedNode(), mutator);
+ };
+
+ SelectionContextOperation pasteKeyframes = [this](const SelectionContext &context) {
+ auto mutator = widget()->graphicsScene()->currentTimeline();
+ if (mutator.isValid())
+ TimelineActions::pasteKeyframesToTarget(context.currentSingleSelectedNode(), mutator);
+ };
+
+ actionManager.addDesignerAction(new ActionGroup(TimelineConstants::timelineCategoryDisplayName,
+ TimelineConstants::timelineCategory,
+ TimelineConstants::priorityTimelineCategory,
+ timelineEnabled,
+ &SelectionContextFunctors::always));
+
+ actionManager.addDesignerAction(
+ new ModelNodeContextMenuAction("commandId timeline delete",
+ TimelineConstants::timelineDeleteKeyframesDisplayName,
+ {},
+ TimelineConstants::timelineCategory,
+ QKeySequence(),
+ 160,
+ deleteKeyframes,
+ timelineHasKeyframes));
+
+ actionManager.addDesignerAction(
+ new ModelNodeContextMenuAction("commandId timeline insert",
+ TimelineConstants::timelineInsertKeyframesDisplayName,
+ {},
+ TimelineConstants::timelineCategory,
+ QKeySequence(),
+ 140,
+ insertKeyframes,
+ timelineHasKeyframes));
+
+ actionManager.addDesignerAction(
+ new ModelNodeContextMenuAction("commandId timeline copy",
+ TimelineConstants::timelineCopyKeyframesDisplayName,
+ {},
+ TimelineConstants::timelineCategory,
+ QKeySequence(),
+ 120,
+ copyKeyframes,
+ timelineHasKeyframes));
+
+ actionManager.addDesignerAction(
+ new ModelNodeContextMenuAction("commandId timeline paste",
+ TimelineConstants::timelinePasteKeyframesDisplayName,
+ {},
+ TimelineConstants::timelineCategory,
+ QKeySequence(),
+ 100,
+ pasteKeyframes,
+ timelineHasClipboard));
+}
+
TimelineWidget *TimelineView::createWidget()
{
if (!m_timelineWidget)
diff --git a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.h b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.h
index 14a49185a4..057ff3047b 100644
--- a/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.h
+++ b/src/plugins/qmldesigner/qmldesignerextension/timelineeditor/timelineview.h
@@ -88,6 +88,8 @@ public:
QmlTimeline timelineForState(const ModelNode &state) const;
QmlModelState stateForTimeline(const QmlTimeline &timeline);
+ void registerActions();
+
private:
TimelineWidget *createWidget();
TimelineWidget *m_timelineWidget = nullptr;
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 84b95cccc3..42fd9fbefa 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -194,8 +194,12 @@ bool QmlDesignerPlugin::delayedInitialize()
d->settings.fromSettings(Core::ICore::settings());
d->viewManager.registerViewTakingOwnership(new QmlDesigner::Internal::ConnectionView);
- if (DesignerSettings::getValue(DesignerSettingsKey::ENABLE_TIMELINEVIEW).toBool())
- d->viewManager.registerViewTakingOwnership(new QmlDesigner::TimelineView);
+ if (DesignerSettings::getValue(DesignerSettingsKey::ENABLE_TIMELINEVIEW).toBool()) {
+ auto timelineView = new QmlDesigner::TimelineView;
+ d->viewManager.registerViewTakingOwnership(timelineView);
+ timelineView->registerActions();
+ }
+
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::SourceTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::ColorTool);
d->viewManager.registerFormEditorToolTakingOwnership(new QmlDesigner::TextTool);
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index 0995256d5f..c52be65ad5 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -343,6 +343,12 @@ QSet<Id> BaseQtVersion::availableFeatures() const
if (qtVersion().matches(5, 12))
return features;
+ features.unite(versionedIds(Constants::FEATURE_QT_QUICK_PREFIX, 2, 13));
+ features.unite(versionedIds(Constants::FEATURE_QT_QUICK_CONTROLS_2_PREFIX, 2, 13));
+
+ if (qtVersion().matches(5, 13))
+ return features;
+
return features;
}
diff --git a/src/plugins/vcsbase/vcsoutputwindow.cpp b/src/plugins/vcsbase/vcsoutputwindow.cpp
index fd98b62bba..a4fc9cbdd4 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.cpp
+++ b/src/plugins/vcsbase/vcsoutputwindow.cpp
@@ -243,6 +243,8 @@ void OutputWindowPlainTextEdit::appendLinesWithStyle(const QString &s,
void OutputWindowPlainTextEdit::setFormat(VcsOutputWindow::MessageStyle style)
{
+ m_formatter->setBoldFontEnabled(style == VcsOutputWindow::Command);
+
switch (style) {
case VcsOutputWindow::Warning:
m_format = LogMessageFormat;
diff --git a/src/plugins/vcsbase/vcsoutputwindow.h b/src/plugins/vcsbase/vcsoutputwindow.h
index f705dedf4d..f87a5309c5 100644
--- a/src/plugins/vcsbase/vcsoutputwindow.h
+++ b/src/plugins/vcsbase/vcsoutputwindow.h
@@ -74,7 +74,7 @@ public:
None,
Error, // Red error text
Warning, // Dark yellow warning text
- Command, // A bold command with timetamp "10:00 " + "Executing: vcs -diff"
+ Command, // A bold command with timestamp "10:00 " + "Executing: vcs -diff"
Message, // A blue message text (e.g. "command has finished successfully")
};