From c5f32b9ed5eb6cec2247629e88f0ab397e3374b8 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 1 Dec 2010 13:41:09 +0100 Subject: [PATCH] QmlDesigner.itemLibrary: The item library now also provides small icons The item library now also provides small icons for the navigator. --- .../components/navigator/navigatortreeview.cpp | 32 +++++++++----------- .../designercore/include/itemlibraryinfo.h | 3 +- .../designercore/include/metainfoparser.h | 4 +-- .../designercore/metainfo/itemlibraryinfo.cpp | 5 ++++ .../designercore/metainfo/metainfoparser.cpp | 9 ++++-- .../qmldesigner/qtquickplugin/quick.metainfo | 34 +++++++++++----------- 6 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp index 77fb47453a..c914a26a0a 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp @@ -180,28 +180,22 @@ void NameItemDelegate::paint(QPainter *painter, ModelNode node = m_TreeModel->nodeForIndex(index); QIcon icon; - if (node.metaInfo().isValid()) { - icon=node.metaInfo().icon(); - if (icon.isNull()) - { - // if node has no own icon, search for it in the itemlibrary - const NodeMetaInfo typeInfo = node.metaInfo(); - const ItemLibraryInfo *libraryInfo = node.metaInfo().metaInfo().itemLibraryInfo(); - QList infoList = libraryInfo->entriesForType(typeInfo.typeName(), - typeInfo.majorVersion(), - typeInfo.minorVersion()); - foreach (const ItemLibraryEntry &entry, infoList) { - if (!icon.isNull()) { - icon = entry.icon(); - break; - } + if (node.isValid()) { + // if node has no own icon, search for it in the itemlibrary + const ItemLibraryInfo *libraryInfo = node.model()->metaInfo().itemLibraryInfo(); + QList infoList = libraryInfo->entriesForType(node.type(), + node.majorVersion(), + node.minorVersion()); + foreach (const ItemLibraryEntry &entry, infoList) { + if (icon.isNull()) { + icon = entry.icon(); + break; } } } - - // if the library was also empty, use the default icon - if (icon.isNull()) - icon = QIcon(QLatin1String(":/ItemLibrary/images/item-default-icon.png")); + // if the library was also empty, use the default icon + if (icon.isNull()) + icon = QIcon(QLatin1String(":/ItemLibrary/images/item-default-icon.png")); // If no icon is present, leave an empty space of 24 pixels anyway QPixmap pixmap = icon.pixmap(pixmapSide, pixmapSide); diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index 5a0baeba59..bebe1883fe 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -41,7 +41,7 @@ namespace Internal { class ItemLibraryEntryData; class ItemLibraryInfoPrivate; - +class MetaInfoPrivate; } class ItemLibraryEntry; @@ -82,6 +82,7 @@ public: void addProperty(const Property &p); void addProperty(QString &name, QString &type, QString &value); void setDragIcon(const QIcon &icon); + void setIcon(const QIcon &icon); void setCategory(const QString &category); void setQml(const QString &qml); private: diff --git a/src/plugins/qmldesigner/designercore/include/metainfoparser.h b/src/plugins/qmldesigner/designercore/include/metainfoparser.h index 3609cbab54..baa0c8dd6c 100644 --- a/src/plugins/qmldesigner/designercore/include/metainfoparser.h +++ b/src/plugins/qmldesigner/designercore/include/metainfoparser.h @@ -38,8 +38,6 @@ namespace QmlDesigner { -class NodeMetaInfo; -class EnumeratorMetaInfo; class ItemLibraryEntry; namespace Internal { @@ -58,7 +56,7 @@ protected: void metaInfoHandler(QXmlStreamReader &reader); void handleMetaInfoElement(QXmlStreamReader &reader); void handleNodeElement(QXmlStreamReader &reader); - void handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, const QString &className); + void handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, const QString &className, const QIcon &icon); void handleItemLibraryEntryPropertyElement(QXmlStreamReader &reader, ItemLibraryEntry &itemLibraryEntry); private: diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp index 18757e8b9c..4d9ffb5408 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp @@ -85,6 +85,11 @@ void ItemLibraryEntry::setDragIcon(const QIcon &icon) m_data->dragIcon = icon; } +void ItemLibraryEntry::setIcon(const QIcon &icon) +{ + m_data->icon = icon; +} + QIcon ItemLibraryEntry::dragIcon() const { return m_data->dragIcon; diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp index 8b0e4f3236..037fbf7940 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/metainfoparser.cpp @@ -100,6 +100,8 @@ void MetaInfoParser::handleNodeElement(QXmlStreamReader &reader) const QXmlStreamAttributes attributes = reader.attributes(); const QString className = attributes.value("name").toString(); + const QIcon icon = QIcon(attributes.value("icon").toString()); + if (className.isEmpty()) { reader.raiseError("Invalid element 'node' - mandatory attribute 'name' is missing"); return; @@ -108,11 +110,11 @@ void MetaInfoParser::handleNodeElement(QXmlStreamReader &reader) while (!reader.atEnd() && !(reader.isEndElement() && reader.name() == "node")) { reader.readNext(); - handleNodeItemLibraryEntryElement(reader, className); + handleNodeItemLibraryEntryElement(reader, className, icon); } } -void MetaInfoParser::handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, const QString &className) +void MetaInfoParser::handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, const QString &className, const QIcon &icon) { if (reader.isStartElement() && reader.name() == "itemlibraryentry") { @@ -121,8 +123,9 @@ void MetaInfoParser::handleNodeItemLibraryEntryElement(QXmlStreamReader &reader, ItemLibraryEntry entry; entry.setType(className, 4, 7); entry.setName(name); + entry.setIcon(icon); - QString iconPath = reader.attributes().value("icon").toString(); + QString iconPath = reader.attributes().value("libraryIcon").toString(); if (!iconPath.isEmpty()) entry.setIconPath(iconPath); diff --git a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo index 23e28427dd..ef38d32be3 100644 --- a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo +++ b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo @@ -1,17 +1,17 @@ - + - - + + - + @@ -19,7 +19,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -35,67 +35,67 @@ - + - - + + - + - + - + - + - + - + - + - + -- 2.11.0