From 436c02face5e244b51f455bf913355b44010d8dc Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 15 Dec 2010 16:16:42 +0100 Subject: [PATCH] QmlDesigner.itemLibrary: allow entry names used twice Use name + category for identification needed some refactoring. --- .../components/formeditor/itemcreatortool.cpp | 3 ++- .../designercore/include/itemlibraryinfo.h | 2 +- .../designercore/metainfo/itemlibraryinfo.cpp | 22 +++++++++---------- .../metainfo/subcomponentmanager.cpp | 2 +- .../qmldesigner/meegoplugin/meego.metainfo | 12 +++++----- .../qmldesigner/meegoplugin/meegoplugin.qrc | 1 + .../symbianplugin/symbian.metainfo | 12 +++++----- .../symbianplugin/symbianplugin.qrc | 1 + 8 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp index 6b1f1ffdc82..d8343122cc3 100644 --- a/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/itemcreatortool.cpp @@ -178,7 +178,8 @@ void ItemCreatorTool::createAtItem(const QRectF &rect) return; if (list.first() == "item") { RewriterTransaction transaction = view()->beginRewriterTransaction(); - ItemLibraryEntry itemLibraryEntry = view()->model()->metaInfo().itemLibraryInfo()->entry(list.at(1)); + Q_ASSERT(false); //this code is out of date + ItemLibraryEntry itemLibraryEntry; //= view()->model()->metaInfo().itemLibraryInfo()->entry(list.at(1)); QmlItemNode newNode = view()->createQmlItemNode(itemLibraryEntry, pos, parentNode); newNode.modelNode().variantProperty("width") = rect.width(); newNode.modelNode().variantProperty("height") = rect.height(); diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index 21ac6c8f16a..2f34cf00012 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -104,7 +104,7 @@ public: ItemLibraryEntry entry(const QString &name) const; void addEntry(const ItemLibraryEntry &entry); - bool removeEntry(const QString &name); + bool containsEntry(const ItemLibraryEntry &entry); void clearEntries(); signals: diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp index a42529b44ff..a1b6f73dca2 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp @@ -283,25 +283,25 @@ QList ItemLibraryInfo::entries() const return list; } +static inline QString keyForEntry(const ItemLibraryEntry &entry) +{ + return entry.name() + entry.category(); +} + void ItemLibraryInfo::addEntry(const ItemLibraryEntry &entry) { - if (m_d->nameToEntryHash.contains(entry.name())) + const QString key = keyForEntry(entry); + if (m_d->nameToEntryHash.contains(key)) throw InvalidMetaInfoException(__LINE__, __FUNCTION__, __FILE__); - m_d->nameToEntryHash.insert(entry.name(), entry); + m_d->nameToEntryHash.insert(key, entry); emit entriesChanged(); } -bool ItemLibraryInfo::removeEntry(const QString &name) +bool ItemLibraryInfo::containsEntry(const ItemLibraryEntry &entry) { - if (m_d->nameToEntryHash.remove(name)) { - emit entriesChanged(); - return true; - } - if (m_d->baseInfo) - return m_d->baseInfo->removeEntry(name); - - return false; + const QString key = keyForEntry(entry); + return m_d->nameToEntryHash.contains(key); } void ItemLibraryInfo::clearEntries() diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index d48bbbaab22..8b4337716fe 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -347,7 +347,7 @@ void SubComponentManagerPrivate::registerQmlFile(const QFileInfo &fileInfo, cons itemLibraryEntry.setName(componentName); itemLibraryEntry.setCategory("QML Components"); - if (m_metaInfo.itemLibraryInfo()->entry(componentName).name() != componentName) + if (!m_metaInfo.itemLibraryInfo()->containsEntry(itemLibraryEntry)) m_metaInfo.itemLibraryInfo()->addEntry(itemLibraryEntry); } } diff --git a/src/plugins/qmldesigner/meegoplugin/meego.metainfo b/src/plugins/qmldesigner/meegoplugin/meego.metainfo index 124939e34f9..81bbf1b210c 100644 --- a/src/plugins/qmldesigner/meegoplugin/meego.metainfo +++ b/src/plugins/qmldesigner/meegoplugin/meego.metainfo @@ -1,27 +1,27 @@ - + - + - + - + - + - + diff --git a/src/plugins/qmldesigner/meegoplugin/meegoplugin.qrc b/src/plugins/qmldesigner/meegoplugin/meegoplugin.qrc index d6d323a3a12..d46243ec9e7 100644 --- a/src/plugins/qmldesigner/meegoplugin/meegoplugin.qrc +++ b/src/plugins/qmldesigner/meegoplugin/meegoplugin.qrc @@ -6,6 +6,7 @@ images/button.png images/button16.png images/checkbox.png + images/checkbox16.png images/label.png images/label16.png images/lineedit.png diff --git a/src/plugins/qmldesigner/symbianplugin/symbian.metainfo b/src/plugins/qmldesigner/symbianplugin/symbian.metainfo index 4bc380e21eb..dc2d8e403a4 100644 --- a/src/plugins/qmldesigner/symbianplugin/symbian.metainfo +++ b/src/plugins/qmldesigner/symbianplugin/symbian.metainfo @@ -1,13 +1,13 @@ - + - + @@ -16,14 +16,14 @@ - + - + @@ -34,14 +34,14 @@ - + - + diff --git a/src/plugins/qmldesigner/symbianplugin/symbianplugin.qrc b/src/plugins/qmldesigner/symbianplugin/symbianplugin.qrc index 5de8f4b35c9..f476fa1d773 100644 --- a/src/plugins/qmldesigner/symbianplugin/symbianplugin.qrc +++ b/src/plugins/qmldesigner/symbianplugin/symbianplugin.qrc @@ -5,6 +5,7 @@ images/item-icon.png images/button.png images/button16.png + images/checkbox16.png images/checkbox.png images/label.png images/label16.png