aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@digia.com>2014-07-03 12:00:15 +0200
committerTim Jenssen <tim.jenssen@digia.com>2014-07-04 15:11:33 +0200
commitd38eabac0375437752935c85bff77faa52cf49eb (patch)
treeefd0d94a5f3b77d17ac99c5b8745389fcab4771d
parent1b31286932d1f1050ff3c3eec466811581af8348 (diff)
QmlDesigner: Add sorting to item library
Task-number: QTCREATORBUG-12603 Change-Id: I883a343d2d7c6cd563d383f7833881db563a0e4a Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp5
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h2
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp21
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h1
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp9
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.h5
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp9
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h1
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 &sectionName, 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