diff options
author | Marco Bubke <marco.bubke@digia.com> | 2014-07-03 12:00:15 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2014-07-04 15:11:33 +0200 |
commit | d38eabac0375437752935c85bff77faa52cf49eb (patch) | |
tree | efd0d94a5f3b77d17ac99c5b8745389fcab4771d | |
parent | 1b31286932d1f1050ff3c3eec466811581af8348 (diff) |
QmlDesigner: Add sorting to item library
Task-number: QTCREATORBUG-12603
Change-Id: I883a343d2d7c6cd563d383f7833881db563a0e4a
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
8 files changed, 38 insertions, 15 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp index 755c8b6dcd..316e5f82d4 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp @@ -52,11 +52,6 @@ QString ItemLibraryItem::itemLibraryIconPath() const return QStringLiteral("image://qmldesigner_itemlibrary/") + m_itemLibraryEntry.libraryEntryIconPath(); } -QVariant ItemLibraryItem::sortingRole() const -{ - return itemName(); -} - bool ItemLibraryItem::setVisible(bool isVisible) { if (isVisible != m_isVisible) { diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h index f6a12ac712..f28295ad2d 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h @@ -46,7 +46,6 @@ class ItemLibraryItem: public QObject { Q_PROPERTY(QVariant itemLibraryEntry READ itemLibraryEntry FINAL) Q_PROPERTY(QString itemName READ itemName FINAL) Q_PROPERTY(QString itemLibraryIconPath READ itemLibraryIconPath FINAL) - Q_PROPERTY(QVariant sortingRole READ sortingRole FINAL) Q_PROPERTY(bool itemVisible READ isVisible NOTIFY visibilityChanged FINAL) public: @@ -55,7 +54,6 @@ public: QString itemName() const; QString itemLibraryIconPath() const; - QVariant sortingRole() const; bool setVisible(bool isVisible); bool isVisible() const; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index ad09b00186..c69d385b6c 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -155,19 +155,20 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) || model->hasImport(entryToImport(entry), true, true))) { QString itemSectionName = entry.category(); ItemLibrarySection *sectionModel = sectionByName(itemSectionName); - ItemLibraryItem *itemModel; + ItemLibraryItem *item; if (sectionModel == 0) { sectionModel = new ItemLibrarySection(itemSectionName, this); m_sections.append(sectionModel); } - itemModel = new ItemLibraryItem(sectionModel); - itemModel->setItemLibraryEntry(entry); - sectionModel->addSectionEntry(itemModel); + item = new ItemLibraryItem(sectionModel); + item->setItemLibraryEntry(entry); + sectionModel->addSectionEntry(item); } } + sortSections(); resetModel(); updateVisibility(); } @@ -254,6 +255,18 @@ void ItemLibraryModel::resetModel() endResetModel(); } +void ItemLibraryModel::sortSections() +{ + auto sectionSort = [](ItemLibrarySection *first, ItemLibrarySection *second) { + return QString::localeAwareCompare(first->sortingName(), second->sortingName()) < 1; + }; + + std::sort(m_sections.begin(), m_sections.end(), sectionSort); + + foreach (ItemLibrarySection *itemLibrarySection, m_sections) + itemLibrarySection->sortItems(); +} + void registerQmlTypes() { registerItemLibrarySortedModel(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 9a86453d9c..063f70b95a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -86,6 +86,7 @@ private: // functions void updateVisibility(); void addRoleNames(); void resetModel(); + void sortSections(); private: // variables diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp index 513fd0f117..a6006d6fca 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp @@ -53,11 +53,11 @@ bool ItemLibrarySection::sectionExpanded() const return m_sectionExpanded; } -QVariant ItemLibrarySection::sortingRole() const +QString ItemLibrarySection::sortingName() const { if (sectionName() == QStringLiteral("QML Components")) //Qml Components always come first - return QVariant(QStringLiteral("AA.this_comes_first")); + return QStringLiteral("aaaa"); return sectionName(); } @@ -111,4 +111,9 @@ bool ItemLibrarySection::isVisible() const return m_isVisible; } +void ItemLibrarySection::sortItems() +{ + m_sectionEntries.sortItems(); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.h index 0f05f945c9..5d2fe88985 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.h @@ -42,14 +42,13 @@ class ItemLibrarySection: public QObject { Q_PROPERTY(QString sectionName READ sectionName FINAL) Q_PROPERTY(bool sectionVisible READ isVisible NOTIFY visibilityChanged FINAL) Q_PROPERTY(bool sectionExpanded READ sectionExpanded FINAL) - Q_PROPERTY(QVariant sortingRole READ sortingRole FINAL) public: ItemLibrarySection(const QString §ionName, QObject *parent = 0); QString sectionName() const; bool sectionExpanded() const; - QVariant sortingRole() const; + QString sortingName() const; void addSectionEntry(ItemLibraryItem *sectionEntry); QObject *sectionEntries(); @@ -59,6 +58,8 @@ public: bool setVisible(bool isVisible); bool isVisible() const; + void sortItems(); + signals: void sectionEntriesChanged(); void visibilityChanged(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp index b43632d95c..430bf69d8e 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp @@ -88,6 +88,15 @@ const QList<ItemLibraryItem *> &ItemLibrarySectionModel::items() const return m_itemList; } +void ItemLibrarySectionModel::sortItems() +{ + auto itemSort = [](ItemLibraryItem *first, ItemLibraryItem *second) { + return QString::localeAwareCompare(first->itemName(), second->itemName()) < 1; + }; + + std::sort(m_itemList.begin(), m_itemList.end(), itemSort); +} + void ItemLibrarySectionModel::resetModel() { beginResetModel(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h index f47d75183a..e38fffc95f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h @@ -55,6 +55,7 @@ public: const QList<ItemLibraryItem *> &items() const; + void sortItems(); void resetModel(); private: // functions |