From 5177db6d63e48e7ff6ee9ffcef2dee9d77b80075 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 19 Jan 2016 17:23:23 +0100 Subject: Re-introduce tree structure: Allow server-defined sections --- src/sessiontreemodel.cpp | 48 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 15 deletions(-) (limited to 'src/sessiontreemodel.cpp') diff --git a/src/sessiontreemodel.cpp b/src/sessiontreemodel.cpp index cf4f2cf..69c7302 100644 --- a/src/sessiontreemodel.cpp +++ b/src/sessiontreemodel.cpp @@ -125,8 +125,27 @@ QModelIndex SessionTreeModel::parent(const QModelIndex &index) const { } void SessionTreeModel::addItems(const QList& sessions) { + SessionTreeItem* parentItem; + foreach (Session* s, sessions) { - root_->appendChild(new SessionTreeItem(s, root_)); + bool sectionExists = false; + QString section(s->section()); + + for (int i = 0; i < root_->childCount(); ++i) { + SessionTreeItem* item = root_->child(i); + if (item->text() == section) { + parentItem = item; + sectionExists = true; + break; + } + } + + if (!sectionExists) { + parentItem = new SessionTreeItem(section, root_); + root_->appendChild(parentItem); + } + + parentItem->appendChild(new SessionTreeItem(s, parentItem)); } } @@ -143,32 +162,31 @@ void SessionTreeModel::removeItem(const QString& name) { } } +static void lookDeeper(QList& result, QList& items, SessionTreeItem* root) { + for (int i = 0; i < root->childCount(); ++i) { + SessionTreeItem* item = root->child(i); + if (item->session() != NULL && item->session()->containsKeywords(items)) { + result.append(const_cast(item->session())); + } + lookDeeper(result, items, item); + } +} + QList SessionTreeModel::lookForItem(const QString& label) { QList result; + QList items; if (label.startsWith("\"")) { QString searchTerm = label; searchTerm.remove(0, 1); if (label.endsWith("\"")) { searchTerm.chop(1); } - QList items; items.append(searchTerm); - for (int i = 0; i < root_->childCount(); ++i) { - SessionTreeItem* item = root_->child(i); - if (item->session() != NULL && item->session()->containsKeywords(items)) { - result.append(const_cast(item->session())); - } - } } else { - QList items = label.split(" ", QString::SkipEmptyParts); - for (int i = 0; i < root_->childCount(); ++i) { - SessionTreeItem* item = root_->child(i); - if (item->session() != NULL && item->session()->containsKeywords(items)) { - result.append(const_cast(item->session())); - } - } + items = label.split(" ", QString::SkipEmptyParts); } + lookDeeper(result, items, root_); return result; -- cgit v1.2.3-55-g7522