From 9befa036b5b3923f8c01f1ccf62c82afba14b233 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 22 May 2014 17:16:50 +0200 Subject: [PATCH] QmlDesigner: more cleanup in ItemLibrarySectionModel Change-Id: I6aa149047bd76b65d28416bfaef2dd707587cecb Reviewed-by: Tim Jenssen --- .../itemlibrary/itemlibrarysection.cpp | 3 +- .../itemlibrary/itemlibrarysectionmodel.cpp | 90 ++++--------------- .../itemlibrary/itemlibrarysectionmodel.h | 14 +-- 3 files changed, 21 insertions(+), 86 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp index b551b404ac5..2751606541c 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp @@ -88,10 +88,9 @@ QObject *ItemLibrarySection::sectionEntries() int ItemLibrarySection::visibleItemIndex(int itemLibId) { - return m_sectionEntries.visibleItemPosition(itemLibId); + return m_sectionEntries.item(itemLibId)->isVisible(); } - bool ItemLibrarySection::isItemVisible(int itemLibId) { return m_sectionEntries.itemVisible(itemLibId); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp index 9ae3051baba..831122b680c 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp @@ -36,6 +36,7 @@ namespace QmlDesigner { ItemLibrarySectionModel::ItemLibrarySectionModel(QObject *parent) : QAbstractListModel(parent) { + addRoleNames(); } ItemLibrarySectionModel::~ItemLibrarySectionModel() @@ -72,8 +73,6 @@ QVariant ItemLibrarySectionModel::data(const QModelIndex &index, int role) const void ItemLibrarySectionModel::clearItems() { beginResetModel(); - while (m_itemOrder.count() > 0) - removeItem(m_itemOrder.at(0).libId); endResetModel(); } @@ -86,65 +85,38 @@ static bool compareFunction(QObject *first, QObject *second) void ItemLibrarySectionModel::addItem(ItemLibraryItem *element, int libId) { - struct order_struct orderEntry; - orderEntry.libId = libId; - orderEntry.visible = false; - - int pos = 0; - while ((pos < m_itemOrder.count()) && - compareFunction(m_itemModels.value(m_itemOrder.at(pos).libId), element)) - ++pos; m_itemModels.insert(libId, element); - m_itemOrder.insert(pos, orderEntry); - setItemVisible(libId, true); + + element->setVisible(true); } void ItemLibrarySectionModel::removeItem(int libId) { - QObject *element = m_itemModels.value(libId); - int pos = findItem(libId); + ItemLibraryItem *itemLibraryItem = m_itemModels.value(libId); - setItemVisible(libId, false); + itemLibraryItem->setVisible(false); m_itemModels.remove(libId); - m_itemOrder.removeAt(pos); - delete element; + delete itemLibraryItem; } bool ItemLibrarySectionModel::itemVisible(int libId) const { - int pos = findItem(libId); - return m_itemOrder.at(pos).visible; + ItemLibraryItem *itemLibraryItem = m_itemModels.value(libId); + return itemLibraryItem->isVisible(); } bool ItemLibrarySectionModel::setItemVisible(int libId, bool visible) { - int pos = findItem(libId); - if (m_itemOrder.at(pos).visible == visible) - return false; - - int visiblePos = visibleItemPosition(libId); - if (visible) - privateInsert(visiblePos, (m_itemModels.value(libId))); - else - privateRemove(visiblePos); - - m_itemOrder[pos].visible = visible; - return true; + ItemLibraryItem *itemLibraryItem = m_itemModels.value(libId); + return itemLibraryItem->setVisible(visible); } void ItemLibrarySectionModel::privateInsert(int pos, QObject *element) { - QObject *object = element; - - for (int i = 0; i < object->metaObject()->propertyCount(); ++i) { - QMetaProperty property = object->metaObject()->property(i); - addRoleName(property.name()); - } - m_privList.insert(pos, element); } @@ -168,49 +140,21 @@ ItemLibraryItem *ItemLibrarySectionModel::item(int libId) return m_itemModels.value(libId); } -int ItemLibrarySectionModel::findItem(int libId) const -{ - int i = 0; - QListIterator it(m_itemOrder); - - while (it.hasNext()) { - if (it.next().libId == libId) - return i; - ++i; - } - - return -1; -} - -int ItemLibrarySectionModel::visibleItemPosition(int libId) const -{ - int i = 0; - QListIterator it(m_itemOrder); - - while (it.hasNext()) { - struct order_struct order = it.next(); - if (order.libId == libId) - return i; - if (order.visible) - ++i; - } - - return -1; -} - void ItemLibrarySectionModel::resetModel() { beginResetModel(); endResetModel(); } -void ItemLibrarySectionModel::addRoleName(const QByteArray &roleName) +void ItemLibrarySectionModel::addRoleNames() { - if (m_roleNames.values().contains(roleName)) - return; + int role = 0; + for (int propertyIndex = 0; propertyIndex < ItemLibraryItem::staticMetaObject.propertyCount(); ++propertyIndex) { + QMetaProperty property = ItemLibraryItem::staticMetaObject.property(propertyIndex); + m_roleNames.insert(role, property.name()); + ++role; + } - int key = m_roleNames.count(); - m_roleNames.insert(key, roleName); setRoleNames(m_roleNames); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h index cfffca62b9a..3eeb4578e02 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h @@ -65,21 +65,13 @@ public: ItemLibraryItem* item(int libId); - int findItem(int libId) const; - int visibleItemPosition(int libId) const; - void resetModel(); -private: - void addRoleName(const QByteArray &roleName); - - struct order_struct { - int libId; - bool visible; - }; +private: // functions + void addRoleNames(); +private: // variables QMap m_itemModels; - QList m_itemOrder; QList m_privList; QHash m_roleNames;