From b78335a50ef145f2b6cd4bcc7b8d699aa864d206 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Sat, 6 Jul 2024 11:20:26 +0200 Subject: [PATCH] QmlDesigner: Fix build - remove useless unique pointer - remove const when values are changed - add QVariant include - explicitly delete the copy constructor and copy assignment operator so the std::unique_ptr in the map can not copied by accident (create compile problems on newer Visual Studio Compilers) 565449 introduced it Change-Id: If10f8191ee9b09c7bcdacd328fb495449b49f219 Reviewed-by: Vikas Pachdha --- .../components/designsystem/dsconstants.h | 3 + .../components/designsystem/dsthemegroup.cpp | 57 ++++++++++--------- .../components/designsystem/dsthemegroup.h | 9 ++- .../designsystem/dsthememanager.cpp | 1 + .../components/designsystem/dsthememanager.h | 6 ++ 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/src/plugins/qmldesigner/components/designsystem/dsconstants.h b/src/plugins/qmldesigner/components/designsystem/dsconstants.h index 73474b4d36d..ef2dd6a36a1 100644 --- a/src/plugins/qmldesigner/components/designsystem/dsconstants.h +++ b/src/plugins/qmldesigner/components/designsystem/dsconstants.h @@ -4,6 +4,9 @@ #pragma once #include "nodeinstanceglobal.h" + +#include + namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/components/designsystem/dsthemegroup.cpp b/src/plugins/qmldesigner/components/designsystem/dsthemegroup.cpp index 07c7a868008..aa2b5c78a23 100644 --- a/src/plugins/qmldesigner/components/designsystem/dsthemegroup.cpp +++ b/src/plugins/qmldesigner/components/designsystem/dsthemegroup.cpp @@ -9,6 +9,7 @@ #include #include +#include namespace QmlDesigner { using namespace std; @@ -48,15 +49,18 @@ bool DSThemeGroup::addProperty(ThemeId theme, const ThemeProperty &prop) } if (!m_values.contains(prop.name)) - m_values[prop.name] = make_unique(); + m_values[prop.name] = {}; - const auto &tValues = m_values.at(prop.name); - if (tValues->contains(theme)) { + auto &tValues = m_values.at(prop.name); + if (tValues.contains(theme)) { qCDebug(dsLog) << "Add property failed. Duplicate property name." << prop; return false; } - tValues->insert({theme, {prop.value, prop.isBinding}}); + tValues.emplace(std::piecewise_construct, + std::forward_as_tuple(theme), + std::forward_as_tuple(prop.value, prop.isBinding)); + return true; } @@ -66,8 +70,8 @@ std::optional DSThemeGroup::propertyValue(ThemeId theme, const Pr return {}; const auto &tValues = m_values.at(name); - const auto itr = tValues->find(theme); - if (itr != tValues->end()) { + const auto itr = tValues.find(theme); + if (itr != tValues.end()) { auto &[value, isBindind] = itr->second; return ThemeProperty{name, value, isBindind}; } @@ -93,13 +97,15 @@ void DSThemeGroup::updateProperty(ThemeId theme, PropertyName newName, const The } auto &tValues = m_values.at(prop.name); - const auto itr = tValues->find(theme); - if (itr == tValues->end()) { + const auto itr = tValues.find(theme); + if (itr == tValues.end()) { qCDebug(dsLog) << "Property update failure. No property for the theme" << theme << prop; return; } - tValues->at(theme) = {prop.value, prop.isBinding}; + auto &entry = tValues.at(theme); + entry.value = prop.value; + entry.isBinding = prop.isBinding; if (newName != prop.name) { m_values[newName] = std::move(tValues); m_values.erase(prop.name); @@ -115,9 +121,9 @@ size_t DSThemeGroup::count(ThemeId theme) const { return std::accumulate(m_values.cbegin(), m_values.cend(), - 0, + 0ull, [theme](size_t c, const GroupProperties::value_type &p) { - return c + (p.second->contains(theme) ? 1 : 0); + return c + (p.second.contains(theme) ? 1 : 0); }); } @@ -128,22 +134,19 @@ size_t DSThemeGroup::count() const void DSThemeGroup::removeTheme(ThemeId theme) { - for (auto itr = m_values.cbegin(); itr != m_values.cend();) { - itr->second->erase(theme); - itr = itr->second->size() == 0 ? m_values.erase(itr) : std::next(itr); + for (auto itr = m_values.begin(); itr != m_values.end();) { + itr->second.erase(theme); + itr = itr->second.size() == 0 ? m_values.erase(itr) : std::next(itr); } } void DSThemeGroup::duplicateValues(ThemeId from, ThemeId to) { - for (auto itr = m_values.cbegin(); itr != m_values.cend(); ++itr) { - const auto &[propName, values] = *itr; - if (!values) - continue; - - auto fromValueItr = values->find(from); - if (fromValueItr != values->end()) - (*values)[to] = fromValueItr->second; + for (auto itr = m_values.begin(); itr != m_values.end(); ++itr) { + auto &[propName, values] = *itr; + auto fromValueItr = values.find(from); + if (fromValueItr != values.end()) + values[to] = fromValueItr->second; } } @@ -162,11 +165,11 @@ void DSThemeGroup::decorate(ThemeId theme, ModelNode themeNode) return; } - for (auto itr = m_values.cbegin(); itr != m_values.cend(); ++itr) { - const auto &[propName, values] = *itr; - auto themeValue = values->find(theme); - if (themeValue != values->end()) { - const auto &propData = themeValue->second; + for (auto itr = m_values.begin(); itr != m_values.end(); ++itr) { + auto &[propName, values] = *itr; + auto themeValue = values.find(theme); + if (themeValue != values.end()) { + auto &propData = themeValue->second; if (propData.isBinding) { auto bindingProp = groupNode.bindingProperty(propName); if (bindingProp) diff --git a/src/plugins/qmldesigner/components/designsystem/dsthemegroup.h b/src/plugins/qmldesigner/components/designsystem/dsthemegroup.h index d1a80d6c9af..0bad7552500 100644 --- a/src/plugins/qmldesigner/components/designsystem/dsthemegroup.h +++ b/src/plugins/qmldesigner/components/designsystem/dsthemegroup.h @@ -16,12 +16,19 @@ class DSThemeGroup { struct PropertyData { + PropertyData() = default; + template + PropertyData(Variant &&value, bool isBinding) + : value{std::forward(value)} + , isBinding{isBinding} + {} + QVariant value; bool isBinding = false; }; using ThemeValues = std::map; - using GroupProperties = std::map>; + using GroupProperties = std::map; public: DSThemeGroup(GroupType type); diff --git a/src/plugins/qmldesigner/components/designsystem/dsthememanager.cpp b/src/plugins/qmldesigner/components/designsystem/dsthememanager.cpp index 3fd393d2f80..652c0080cd3 100644 --- a/src/plugins/qmldesigner/components/designsystem/dsthememanager.cpp +++ b/src/plugins/qmldesigner/components/designsystem/dsthememanager.cpp @@ -11,6 +11,7 @@ #include #include +#include namespace { Q_LOGGING_CATEGORY(dsLog, "qtc.designer.designSystem", QtInfoMsg) diff --git a/src/plugins/qmldesigner/components/designsystem/dsthememanager.h b/src/plugins/qmldesigner/components/designsystem/dsthememanager.h index afc5325e9d6..9db0b5600b2 100644 --- a/src/plugins/qmldesigner/components/designsystem/dsthememanager.h +++ b/src/plugins/qmldesigner/components/designsystem/dsthememanager.h @@ -22,6 +22,12 @@ public: DSThemeManager(); ~DSThemeManager(); + DSThemeManager(const DSThemeManager&) = delete; + DSThemeManager& operator=(const DSThemeManager&) = delete; + + DSThemeManager(DSThemeManager&&) = default; + DSThemeManager& operator=(DSThemeManager&&) = default; + std::optional addTheme(const ThemeName &themeName); std::optional themeId(const ThemeName &themeName) const; void removeTheme(ThemeId id);