From 436c02face5e244b51f455bf913355b44010d8dc Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@nokia.com> 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<ItemLibraryEntry> 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 @@ <metainfo> <node name="Label" icon=":/meegoplugin/images/label16.png"> - <itemlibraryentry name="Label (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/label.png" requiredImport="com.Meego"> + <itemlibraryentry name="Label" category="Components MeeGo" libraryIcon=":/meegoplugin/images/label.png" requiredImport="com.Meego"> <property name="text" type="QString" value="Label"/> </itemlibraryentry> </node> <node name="Button" icon=":/meegoplugin/images/button16.png"> - <itemlibraryentry name="Button (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/button.png" requiredImport="com.Meego"> + <itemlibraryentry name="Button" category="Components MeeGo" libraryIcon=":/meegoplugin/images/button.png" requiredImport="com.Meego"> </itemlibraryentry> </node> <node name="Slider" icon=":/meegoplugin/images/slider16.png"> - <itemlibraryentry name="Slider (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/slider.png" requiredImport="com.Meego"> + <itemlibraryentry name="Slider" category="Components MeeGo" libraryIcon=":/meegoplugin/images/slider.png" requiredImport="com.Meego"> </itemlibraryentry> </node> <node name="CheckBox" icon=":/meegoplugin/images/checkbox16.png"> - <itemlibraryentry name="CheckBox (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/checkbox.png" requiredImport="com.Meego"> + <itemlibraryentry name="CheckBox" category="Components MeeGo" libraryIcon=":/meegoplugin/images/checkbox.png" requiredImport="com.Meego"> </itemlibraryentry> </node> <node name="Spinner" icon=":/meegoplugin/images/item-icon16.png"> - <itemlibraryentry name="Spinner (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/item-icon.png" requiredImport="com.Meego"> + <itemlibraryentry name="Spinner" category="Components MeeGo" libraryIcon=":/meegoplugin/images/item-icon.png" requiredImport="com.Meego"> </itemlibraryentry> </node> <node name="LineEdit" icon=":/meegoplugin/images/lineedit16.png"> - <itemlibraryentry name="LineEdit (MeeGo)" category="Components MeeGo" libraryIcon=":/meegoplugin/images/lineedit.png" requiredImport="com.Meego"> + <itemlibraryentry name="LineEdit" category="Components MeeGo" libraryIcon=":/meegoplugin/images/lineedit.png" requiredImport="com.Meego"> </itemlibraryentry> </node> </metainfo> 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 @@ <file>images/button.png</file> <file>images/button16.png</file> <file>images/checkbox.png</file> + <file>images/checkbox16.png</file> <file>images/label.png</file> <file>images/label16.png</file> <file>images/lineedit.png</file> 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 @@ <metainfo> <node name="Label" icon=":/symbianplugin/images/label16.png"> - <itemlibraryentry name="Label (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/label.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="Label" category="Components Symbian" libraryIcon=":/symbianplugin/images/label.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="100"/> <property name="height" type="int" value="30"/> <property name="text" type="QString" value="Label"/> </itemlibraryentry> </node> <node name="Button" icon=":/symbianplugin/images/button16.png"> - <itemlibraryentry name="Button (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/button.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="Button" category="Components Symbian" libraryIcon=":/symbianplugin/images/button.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="100"/> <property name="height" type="int" value="30"/> <property name="text" type="QString" value="Button"/> @@ -16,14 +16,14 @@ <node name="Slider" icon=":/symbianplugin/images/slider16.png"> </node> <node name="CheckBox" icon=":/symbianplugin/images/checkbox16.png"> - <itemlibraryentry name="CheckBox (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/checkbox.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="CheckBox" category="Components Symbian" libraryIcon=":/symbianplugin/images/checkbox.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="180"/> <property name="height" type="int" value="30"/> <property name="text" type="QString" value="CheckBox"/> </itemlibraryentry> </node> <node name="RadioButton" icon=":/symbianplugin/images/radiobutton16.png"> - <itemlibraryentry name="RadioButton (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/radiobutton.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="RadioButton" category="Components Symbian" libraryIcon=":/symbianplugin/images/radiobutton.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="180"/> <property name="height" type="int" value="30"/> <property name="text" type="QString" value="RadioButton"/> @@ -34,14 +34,14 @@ <node name="Switch" icon=":/symbianplugin/images/item-icon16.png"> </node> <node name="LineEdit" icon=":/symbianplugin/images/lineedit16.png"> - <itemlibraryentry name="LineEdit (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/lineedit.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="LineEdit" category="Components Symbian" libraryIcon=":/symbianplugin/images/lineedit.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="100"/> <property name="height" type="int" value="30"/> <property name="text" type="QString" value="LineEdit"/> </itemlibraryentry> </node> <node name="ProgressBar" icon=":/symbianplugin/images/progressbar16.png"> - <itemlibraryentry name="ProgressBar (Symbian)" category="Components Symbian" libraryIcon=":/symbianplugin/images/progressbar.png" version="1.0" requiredImport="Qt.labs.Symbian"> + <itemlibraryentry name="ProgressBar" category="Components Symbian" libraryIcon=":/symbianplugin/images/progressbar.png" version="1.0" requiredImport="Qt.labs.Symbian"> <property name="width" type="int" value="100"/> <property name="height" type="int" value="30"/> </itemlibraryentry> 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 @@ <file>images/item-icon.png</file> <file>images/button.png</file> <file>images/button16.png</file> + <file>images/checkbox16.png</file> <file>images/checkbox.png</file> <file>images/label.png</file> <file>images/label16.png</file> -- GitLab