summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/filetreeitem.cpp2
-rw-r--r--src/filetreeitem.h6
-rw-r--r--src/filetreemodel.cpp16
-rw-r--r--src/filetreemodel.h1
4 files changed, 18 insertions, 7 deletions
diff --git a/src/filetreeitem.cpp b/src/filetreeitem.cpp
index 8602ea6d..9eff9564 100644
--- a/src/filetreeitem.cpp
+++ b/src/filetreeitem.cpp
@@ -178,7 +178,7 @@ public:
void FileTreeItem::sort()
{
- sort(m_model->sortInfo().column, m_model->sortInfo().order);
+ m_model->sortItem(*this);
}
void FileTreeItem::sort(int column, Qt::SortOrder order)
diff --git a/src/filetreeitem.h b/src/filetreeitem.h
index 375a05c4..e173a849 100644
--- a/src/filetreeitem.h
+++ b/src/filetreeitem.h
@@ -216,9 +216,13 @@ public:
void setExpanded(bool b)
{
+ if (m_expanded == b) {
+ return;
+ }
+
m_expanded = b;
- if (m_sortingStale) {
+ if (m_expanded && m_sortingStale) {
sort();
}
}
diff --git a/src/filetreemodel.cpp b/src/filetreemodel.cpp
index 01a10afc..40cded09 100644
--- a/src/filetreemodel.cpp
+++ b/src/filetreemodel.cpp
@@ -208,6 +208,7 @@ QModelIndex FileTreeModel::index(
{
if (auto* parentItem=itemFromIndex(parentIndex)) {
if (row < 0 || row >= parentItem->children().size()) {
+ log::error("row {} out of range for {}", row, parentItem->debugName());
return {};
}
@@ -378,13 +379,10 @@ Qt::ItemFlags FileTreeModel::flags(const QModelIndex& index) const
return f;
}
-void FileTreeModel::sort(int column, Qt::SortOrder order)
+void FileTreeModel::sortItem(FileTreeItem& item)
{
emit layoutAboutToBeChanged();
- m_sort.column = column;
- m_sort.order = order;
-
const auto oldList = persistentIndexList();
std::vector<std::pair<FileTreeItem*, int>> oldItems;
@@ -396,7 +394,7 @@ void FileTreeModel::sort(int column, Qt::SortOrder order)
oldItems.push_back({itemFromIndex(index), index.column()});
}
- m_root->sort(column, order);
+ item.sort(m_sort.column, m_sort.order);
QModelIndexList newList;
newList.reserve(itemCount);
@@ -411,6 +409,14 @@ void FileTreeModel::sort(int column, Qt::SortOrder order)
emit layoutChanged({}, QAbstractItemModel::VerticalSortHint);
}
+void FileTreeModel::sort(int column, Qt::SortOrder order)
+{
+ m_sort.column = column;
+ m_sort.order = order;
+
+ sortItem(*m_root);
+}
+
FileTreeItem* FileTreeModel::itemFromIndex(const QModelIndex& index) const
{
if (!index.isValid()) {
diff --git a/src/filetreemodel.h b/src/filetreemodel.h
index deb6d092..dfee597f 100644
--- a/src/filetreemodel.h
+++ b/src/filetreemodel.h
@@ -70,6 +70,7 @@ public:
void sort(int column, Qt::SortOrder order=Qt::AscendingOrder) override;
FileTreeItem* itemFromIndex(const QModelIndex& index) const;
+ void sortItem(FileTreeItem& item);
private:
class Range;