From 106ed49baecc60dbdf4844ed684df750e5caf3aa Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sat, 26 Dec 2020 20:58:06 -0500 Subject: removed setUpdateDelay(false) calls, it's the default FilterWidget for downloads tab --- src/downloadlist.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 2 deletions(-) (limited to 'src/downloadlist.cpp') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index 99347a79..3cfc1fea 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -41,9 +41,14 @@ void DownloadList::setMetaDisplay(bool metaDisplay) } -int DownloadList::rowCount(const QModelIndex&) const +int DownloadList::rowCount(const QModelIndex& parent) const { - return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads(); + if (!parent.isValid()) { + // root item + return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads(); + } else { + return 0; + } } @@ -203,3 +208,74 @@ void DownloadList::update(int row) else log::error("invalid row {} in download list, update failed", row); } + +bool DownloadList::lessThan(const QModelIndex &left, const QModelIndex &right) +{ + int leftIndex = left.row(); + int rightIndex = right.row(); + if ((leftIndex < m_Manager->numTotalDownloads()) + && (rightIndex < m_Manager->numTotalDownloads())) { + if (left.column() == DownloadList::COL_NAME) { + return m_Manager->getFileName(left.row()).compare(m_Manager->getFileName(right.row()), Qt::CaseInsensitive) < 0; + } else if (left.column() == DownloadList::COL_MODNAME) { + QString leftName, rightName; + + if (!m_Manager->isInfoIncomplete(left.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row()); + leftName = info->modName; + } + + if (!m_Manager->isInfoIncomplete(right.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row()); + rightName = info->modName; + } + + return leftName.compare(rightName, Qt::CaseInsensitive) < 0; + } else if (left.column() == DownloadList::COL_VERSION) { + MOBase::VersionInfo versionLeft, versionRight; + + if (!m_Manager->isInfoIncomplete(left.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row()); + versionLeft = info->version; + } + + if (!m_Manager->isInfoIncomplete(right.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row()); + versionRight = info->version; + } + + return versionLeft < versionRight; + } else if (left.column() == DownloadList::COL_ID) { + int leftID=0, rightID=0; + + if (!m_Manager->isInfoIncomplete(left.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row()); + leftID = info->modID; + } + + if (!m_Manager->isInfoIncomplete(right.row())) { + const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row()); + rightID = info->modID; + } + + return leftID < rightID; + } else if (left.column() == DownloadList::COL_STATUS) { + DownloadManager::DownloadState leftState = m_Manager->getState(left.row()); + DownloadManager::DownloadState rightState = m_Manager->getState(right.row()); + if (leftState == rightState) + return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row()); + else + return leftState > rightState; + } else if (left.column() == DownloadList::COL_SIZE) { + return m_Manager->getFileSize(left.row()) < m_Manager->getFileSize(right.row()); + } else if (left.column() == DownloadList::COL_FILETIME) { + return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row()); + } else if (left.column() == DownloadList::COL_SOURCEGAME) { + return m_Manager->getDisplayGameName(left.row()) < m_Manager->getDisplayGameName(right.row()); + } else { + return leftIndex < rightIndex; + } + } else { + return leftIndex < rightIndex; + } +} -- cgit v1.3.1 From 9b3e91b53e769aec2622eb79509945c09fca8897 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Mon, 28 Dec 2020 06:01:43 -0500 Subject: renamed DownloadList::lessThan to lessThanPredicate and added a comment that it's used with the filter widget --- src/downloadlist.cpp | 2 +- src/downloadlist.h | 4 +++- src/downloadstab.cpp | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/downloadlist.cpp') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index 3cfc1fea..a5c284e6 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -209,7 +209,7 @@ void DownloadList::update(int row) log::error("invalid row {} in download list, update failed", row); } -bool DownloadList::lessThan(const QModelIndex &left, const QModelIndex &right) +bool DownloadList::lessThanPredicate(const QModelIndex &left, const QModelIndex &right) { int leftIndex = left.row(); int rightIndex = right.row(); diff --git a/src/downloadlist.h b/src/downloadlist.h index c40bbac5..2171c013 100644 --- a/src/downloadlist.h +++ b/src/downloadlist.h @@ -85,7 +85,9 @@ public: **/ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - bool lessThan(const QModelIndex &left, const QModelIndex &right); + // used in DownloadsTab as the sorting predicate for the filter widget + // + bool lessThanPredicate(const QModelIndex &left, const QModelIndex &right); public slots: diff --git a/src/downloadstab.cpp b/src/downloadstab.cpp index f5258724..a0602ede 100644 --- a/src/downloadstab.cpp +++ b/src/downloadstab.cpp @@ -22,7 +22,7 @@ DownloadsTab::DownloadsTab(OrganizerCore& core, Ui::MainWindow* mwui) m_filter.setEdit(ui.filter); m_filter.setList(ui.list); m_filter.setSortPredicate([sourceModel](auto&& left, auto&& right) { - return sourceModel->lessThan(left, right); + return sourceModel->lessThanPredicate(left, right); }); connect(ui.refresh, &QPushButton::clicked, [&]{ refresh(); }); -- cgit v1.3.1