diff options
author | Kai Koehne <kai.koehne@nokia.com> | 2010-05-12 11:56:23 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@nokia.com> | 2010-05-12 17:47:35 +0200 |
commit | a68fffd0671a6c7c7aee23b6220fe03bc9379ee9 (patch) | |
tree | 1b73d8393169c2c013dbc1028741425082938f9b /src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp | |
parent | 15f2c63459f38f841637e6fd104dfc63dae6d714 (diff) |
QuickDesigner: Update ItemLibrary when imported directories change
ItemLibraryInfo has now a signal "entriesChanged()", which the ItemLibrary
connects to. To allow this, ItemLibraryInfo was moved from a stack-based to
a heap-based class.
Reviewed-by: Thomas Hartmann
Diffstat (limited to 'src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp | 98 |
1 files changed, 37 insertions, 61 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp index 3485e4f0ed..c640c77b76 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp @@ -55,12 +55,9 @@ public: class ItemLibraryInfoPrivate { public: - typedef QSharedPointer<ItemLibraryInfoPrivate> Pointer; - typedef QSharedPointer<ItemLibraryInfoPrivate> WeakPointer; - QHash<QString, ItemLibraryEntry> nameToEntryHash; - Pointer parentData; + QWeakPointer<ItemLibraryInfo> baseInfo; }; } // namespace Internal @@ -212,13 +209,9 @@ QDataStream& operator>>(QDataStream& stream, ItemLibraryEntry &itemLibraryEntry) // ItemLibraryInfo // -ItemLibraryInfo::ItemLibraryInfo(const ItemLibraryInfo &other) : - m_data(other.m_data) -{ -} - -ItemLibraryInfo::ItemLibraryInfo() : - m_data(new Internal::ItemLibraryInfoPrivate()) +ItemLibraryInfo::ItemLibraryInfo(QObject *parent) : + QObject(parent), + m_d(new Internal::ItemLibraryInfoPrivate()) { } @@ -226,89 +219,72 @@ ItemLibraryInfo::~ItemLibraryInfo() { } -ItemLibraryInfo& ItemLibraryInfo::operator=(const ItemLibraryInfo &other) -{ - m_data = other.m_data; - return *this; -} - -bool ItemLibraryInfo::isValid() -{ - return m_data; -} - -ItemLibraryInfo ItemLibraryInfo::createItemLibraryInfo(const ItemLibraryInfo &parentInfo) -{ - ItemLibraryInfo info; - Q_ASSERT(parentInfo.m_data); - info.m_data->parentData = parentInfo.m_data; - return info; -} - QList<ItemLibraryEntry> ItemLibraryInfo::entriesForType(const QString &typeName, int majorVersion, int minorVersion) const { QList<ItemLibraryEntry> entries; - Internal::ItemLibraryInfoPrivate::WeakPointer pointer(m_data); - while (pointer) { - foreach (const ItemLibraryEntry &entry, m_data->nameToEntryHash.values()) { - if (entry.typeName() == typeName - && entry.majorVersion() == majorVersion - && entry.minorVersion() == minorVersion) - entries += entry; - } - - pointer = pointer->parentData; + foreach (const ItemLibraryEntry &entry, m_d->nameToEntryHash.values()) { + if (entry.typeName() == typeName + && entry.majorVersion() == majorVersion + && entry.minorVersion() == minorVersion) + entries += entry; } + if (m_d->baseInfo) + entries += m_d->baseInfo->entriesForType(typeName, majorVersion, minorVersion); + return entries; } ItemLibraryEntry ItemLibraryInfo::entry(const QString &name) const { - Internal::ItemLibraryInfoPrivate::WeakPointer pointer(m_data); - while (pointer) { - if (pointer->nameToEntryHash.contains(name)) - return pointer->nameToEntryHash.value(name); - pointer = pointer->parentData; - } + if (m_d->nameToEntryHash.contains(name)) + return m_d->nameToEntryHash.value(name); + + if (m_d->baseInfo) + return m_d->baseInfo->entry(name); return ItemLibraryEntry(); } QList<ItemLibraryEntry> ItemLibraryInfo::entries() const { - QList<ItemLibraryEntry> list; - - Internal::ItemLibraryInfoPrivate::WeakPointer pointer(m_data); - while (pointer) { - list += pointer->nameToEntryHash.values(); - pointer = pointer->parentData; - } + QList<ItemLibraryEntry> list = m_d->nameToEntryHash.values(); + if (m_d->baseInfo) + list += m_d->baseInfo->entries(); return list; } void ItemLibraryInfo::addEntry(const ItemLibraryEntry &entry) { - if (m_data->nameToEntryHash.contains(entry.name())) + if (m_d->nameToEntryHash.contains(entry.name())) throw InvalidMetaInfoException(__LINE__, __FUNCTION__, __FILE__); - m_data->nameToEntryHash.insert(entry.name(), entry); + m_d->nameToEntryHash.insert(entry.name(), entry); + + emit entriesChanged(); } bool ItemLibraryInfo::removeEntry(const QString &name) { - Internal::ItemLibraryInfoPrivate::WeakPointer pointer(m_data); - while (pointer) { - if (pointer->nameToEntryHash.remove(name)) - return true; - pointer = pointer->parentData; + if (m_d->nameToEntryHash.remove(name)) { + emit entriesChanged(); + return true; } + if (m_d->baseInfo) + return m_d->baseInfo->removeEntry(name); + return false; } void ItemLibraryInfo::clearEntries() { - m_data->nameToEntryHash.clear(); + m_d->nameToEntryHash.clear(); + emit entriesChanged(); +} + +void ItemLibraryInfo::setBaseInfo(ItemLibraryInfo *baseInfo) +{ + m_d->baseInfo = baseInfo; } } // namespace QmlDesigner |