From 5920dc2cd14ef5dc6e3802939cbe6256ea13848b Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Sun, 30 Dec 2018 12:07:40 +0100 Subject: Disable downloadlist widget delegates, port partial functionality to QTreeView --- src/downloadlistsortproxy.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'src/downloadlistsortproxy.cpp') diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index f791617a..ee16860a 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -42,13 +42,11 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left, if ((leftIndex < m_Manager->numTotalDownloads()) && (rightIndex < m_Manager->numTotalDownloads())) { if (left.column() == DownloadList::COL_NAME) { - return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0; - } else if (left.column() == DownloadList::COL_FILETIME) { - return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex); + return m_Manager->getFileName(left.row()).compare(m_Manager->getFileName(right.row()), Qt::CaseInsensitive) < 0; } else if (left.column() == DownloadList::COL_STATUS) { - return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex); + return m_Manager->getState(left.row()) < m_Manager->getState(right.row()); } else if(left.column() == DownloadList::COL_SIZE){ - return m_Manager->getFileSize(leftIndex) < m_Manager->getFileSize(rightIndex); + return m_Manager->getFileSize(left.row()) < m_Manager->getFileSize(right.row()); } else { return leftIndex < rightIndex; } @@ -63,11 +61,9 @@ bool DownloadListSortProxy::filterAcceptsRow(int sourceRow, const QModelIndex&) if (m_CurrentFilter.length() == 0) { return true; } else if (sourceRow < m_Manager->numTotalDownloads()) { - int downloadIndex = sourceModel()->index(sourceRow, 0).data().toInt(); - QString displayedName = Settings::instance().metaDownloads() - ? m_Manager->getDisplayName(downloadIndex) - : m_Manager->getFileName(downloadIndex); + ? m_Manager->getDisplayName(sourceRow) + : m_Manager->getFileName(sourceRow); return displayedName.contains(m_CurrentFilter, Qt::CaseInsensitive); } else { return false; -- cgit v1.3.1 From c3ad0349d49d87c3670a6b1e699ace3a8fae29d7 Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Sun, 30 Dec 2018 15:27:25 +0100 Subject: Tweak downloadlist status sorting behavior --- src/downloadlistsortproxy.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/downloadlistsortproxy.cpp') diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index ee16860a..1a2606c9 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -44,7 +44,12 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left, 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_STATUS) { - return m_Manager->getState(left.row()) < m_Manager->getState(right.row()); + 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 { -- cgit v1.3.1 From 4d40e8d18c789e71af403997fa1b10e8dd7168e1 Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Sun, 30 Dec 2018 16:22:35 +0100 Subject: Fix adding new downloads, add missing download progress states --- src/downloadlist.cpp | 71 +++++++++++++++++++++++++++++---------- src/downloadlistsortproxy.cpp | 4 +-- src/downloadlistwidgetcompact.cpp | 1 - 3 files changed, 55 insertions(+), 21 deletions(-) (limited to 'src/downloadlistsortproxy.cpp') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index a44850cb..178e4083 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -64,7 +64,7 @@ QVariant DownloadList::headerData(int section, Qt::Orientation orientation, int case COL_NAME : return tr("Name"); case COL_SIZE : return tr("Size"); case COL_STATUS : return tr("Status"); - default : return "-"; + default : return QVariant(); } } else { return QAbstractItemModel::headerData(section, orientation, role); @@ -73,26 +73,63 @@ QVariant DownloadList::headerData(int section, Qt::Orientation orientation, int QVariant DownloadList::data(const QModelIndex &index, int role) const { + bool pendingDownload = index.row() >= m_Manager->numTotalDownloads(); if (role == Qt::DisplayRole) { - if (index.column() == COL_NAME) { - return m_Manager->getFileName(index.row()); - } else if (index.column() == COL_SIZE) { - return sizeFormat(m_Manager->getFileSize(index.row())); - } else if (index.column() == COL_STATUS) { - DownloadManager::DownloadState state = m_Manager->getState(index.row()); - switch (state) { - case DownloadManager::STATE_INSTALLED : return tr("Installed"); - case DownloadManager::STATE_UNINSTALLED : return tr("Uninstalled"); - case DownloadManager::STATE_READY : return tr("Downloaded"); - case DownloadManager::STATE_DOWNLOADING : return m_Manager->getProgress(index.row()).second; - case DownloadManager::STATE_PAUSED : return tr("Paused"); - default : return state; + if (pendingDownload) { + std::tuple nexusids = m_Manager->getPendingDownload(index.row() - m_Manager->numTotalDownloads()); + switch (index.column()) { + case COL_NAME: + return tr("< game %1 mod %2 file %3 >").arg(std::get<0>(nexusids)).arg(std::get<1>(nexusids)).arg(std::get<2>(nexusids)); + case COL_SIZE: + return tr("Unknown"); + case COL_STATUS: + return tr("Pending"); + default: + return QVariant(); } } else { - return index.row(); + switch (index.column()) { + case COL_NAME: + return m_Manager->getFileName(index.row()); + case COL_SIZE: + return sizeFormat(m_Manager->getFileSize(index.row())); + case COL_STATUS: + switch (m_Manager->getState(index.row())) { + case DownloadManager::STATE_STARTED: + return tr("Started"); + case DownloadManager::STATE_DOWNLOADING: + return m_Manager->getProgress(index.row()).second; + case DownloadManager::STATE_CANCELING: + return tr("Canceling"); + case DownloadManager::STATE_PAUSING: + return tr("Pausing"); + case DownloadManager::STATE_CANCELED: + return tr("Canceled"); + case DownloadManager::STATE_PAUSED: + return tr("Paused"); + case DownloadManager::STATE_ERROR: + return tr("Error"); + case DownloadManager::STATE_FETCHINGMODINFO: + return tr("Fetching Info 1"); + case DownloadManager::STATE_FETCHINGFILEINFO: + return tr("Fetching Info 2"); + case DownloadManager::STATE_READY: + return tr("Downloaded"); + case DownloadManager::STATE_INSTALLED: + return tr("Installed"); + case DownloadManager::STATE_UNINSTALLED: + return tr("Uninstalled"); + default: + return QVariant(); + } + default: + return QVariant(); + } } } else if (role == Qt::ToolTipRole) { - if (index.row() < m_Manager->numTotalDownloads()) { + if (pendingDownload) { + return tr("pending download"); + } else { QString text = m_Manager->getFileName(index.row()) + "\n"; if (m_Manager->isInfoIncomplete(index.row())) { text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve."); @@ -101,8 +138,6 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const return QString("%1 (ID %2) %3
%4").arg(info->modName).arg(m_Manager->getModID(index.row())).arg(info->version.canonicalString()).arg(info->description); } return text; - } else { - return tr("pending download"); } } else { return QVariant(); diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index 1a2606c9..5e455529 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -37,8 +37,8 @@ void DownloadListSortProxy::updateFilter(const QString &filter) bool DownloadListSortProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const { - int leftIndex = left.data().toInt(); - int rightIndex = right.data().toInt(); + int leftIndex = left.row(); + int rightIndex = right.row(); if ((leftIndex < m_Manager->numTotalDownloads()) && (rightIndex < m_Manager->numTotalDownloads())) { if (left.column() == DownloadList::COL_NAME) { diff --git a/src/downloadlistwidgetcompact.cpp b/src/downloadlistwidgetcompact.cpp index b534b95b..e033c202 100644 --- a/src/downloadlistwidgetcompact.cpp +++ b/src/downloadlistwidgetcompact.cpp @@ -124,7 +124,6 @@ void DownloadListWidgetCompactDelegate::paintRegularDownload(int downloadIndex) name.append("..."); } m_NameLabel->setText(name); - DownloadManager::DownloadState state = m_Manager->getState(downloadIndex); if (m_SizeLabel != nullptr) { -- cgit v1.3.1 From cfb941082e27925279535cade18d2b3c912c8930 Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Sun, 30 Dec 2018 19:41:05 +0100 Subject: Add downloadlist styling tweaks --- src/downloadlist.cpp | 33 +++++++++++++++++++++++++-------- src/downloadlist.h | 2 ++ src/downloadlistsortproxy.cpp | 4 ++-- src/mainwindow.cpp | 7 +++++-- src/organizer_en.ts | 38 +++++++++++++++++++------------------- 5 files changed, 53 insertions(+), 31 deletions(-) (limited to 'src/downloadlistsortproxy.cpp') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index 178e4083..d78e97f9 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -20,12 +20,14 @@ along with Mod Organizer. If not, see . #include "downloadlist.h" #include "downloadmanager.h" #include +#include #include DownloadList::DownloadList(DownloadManager *manager, QObject *parent) : QAbstractTableModel(parent), m_Manager(manager) + , m_FontMetrics(QFont()) { connect(m_Manager, SIGNAL(update(int)), this, SLOT(update(int))); connect(m_Manager, SIGNAL(aboutToUpdate()), this, SLOT(aboutToUpdate())); @@ -84,8 +86,6 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const return tr("Unknown"); case COL_STATUS: return tr("Pending"); - default: - return QVariant(); } } else { switch (index.column()) { @@ -119,13 +119,21 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const return tr("Installed"); case DownloadManager::STATE_UNINSTALLED: return tr("Uninstalled"); - default: - return QVariant(); } - default: - return QVariant(); } } + } else if (role == Qt::ForegroundRole) { + if (pendingDownload) { + return QColor(Qt::darkBlue); + } else if (index.column() == COL_STATUS) { + DownloadManager::DownloadState state = m_Manager->getState(index.row()); + if (state == DownloadManager::STATE_READY) + return QColor(Qt::darkGreen); + else if (state == DownloadManager::STATE_UNINSTALLED) + return QColor(Qt::darkYellow); + else if (state == DownloadManager::STATE_PAUSED) + return QColor(Qt::darkRed); + } } else if (role == Qt::ToolTipRole) { if (pendingDownload) { return tr("pending download"); @@ -139,9 +147,18 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const } return text; } - } else { - return QVariant(); + } else if (role == Qt::TextAlignmentRole) { + if (index.column() == COL_SIZE) + return Qt::AlignVCenter | Qt::AlignRight; + else + return Qt::AlignVCenter | Qt::AlignLeft; + } else if (role == Qt::SizeHintRole) { + QSize temp = m_FontMetrics.size(Qt::TextSingleLine, data(index, Qt::DisplayRole).toString()); + temp.rwidth() += 20; + temp.rheight() += 12; + return temp; } + return QVariant(); } diff --git a/src/downloadlist.h b/src/downloadlist.h index 1a5ca0b2..d7764763 100644 --- a/src/downloadlist.h +++ b/src/downloadlist.h @@ -21,6 +21,7 @@ along with Mod Organizer. If not, see . #define DOWNLOADLIST_H #include +#include class DownloadManager; @@ -90,6 +91,7 @@ public slots: private: DownloadManager *m_Manager; + QFontMetrics m_FontMetrics; QString sizeFormat(quint64 size) const; }; diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index 5e455529..1df3a9f1 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -47,9 +47,9 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left, 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()); + return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row()); else - return leftState < rightState; + return leftState > rightState; } else if(left.column() == DownloadList::COL_SIZE){ return m_Manager->getFileSize(left.row()) < m_Manager->getFileSize(right.row()); } else { diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9ae7e2de..b2876e33 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -5154,8 +5154,11 @@ void MainWindow::initDownloadList() ui->downloadView->setModel(sortProxy); ui->downloadView->setManager(m_OrganizerCore.downloadManager()); - //ui->downloadView->sortByColumn(1, Qt::DescendingOrder); - ui->downloadView->header()->resizeSections(QHeaderView::Stretch); + ui->downloadView->setUniformRowHeights(true); + ui->downloadView->header()->setStretchLastSection(false); + ui->downloadView->header()->setSectionResizeMode(QHeaderView::Interactive); + ui->downloadView->header()->setSectionResizeMode(0, QHeaderView::Stretch); + ui->downloadView->sortByColumn(1, Qt::DescendingOrder); connect(ui->downloadView, SIGNAL(installDownload(int)), &m_OrganizerCore, SLOT(installDownload(int))); connect(ui->downloadView, SIGNAL(queryInfo(int)), m_OrganizerCore.downloadManager(), SLOT(queryInfo(int))); diff --git a/src/organizer_en.ts b/src/organizer_en.ts index 71a438cb..6c1488eb 100644 --- a/src/organizer_en.ts +++ b/src/organizer_en.ts @@ -292,97 +292,97 @@ p, li { white-space: pre-wrap; } DownloadList - + Name - + Size - + Status - + < game %1 mod %2 file %3 > - + Unknown - + Pending - + Started - + Canceling - + Pausing - + Canceled - + Paused - + Error - + Fetching Info 1 - + Fetching Info 2 - + Downloaded - + Installed - + Uninstalled - + pending download - + Information missing, please select "Query Info" from the context menu to re-retrieve. -- cgit v1.3.1 From 895556f257c2625ac53371089835aab0d01979be Mon Sep 17 00:00:00 2001 From: Krzysztof Starecki Date: Mon, 31 Dec 2018 20:53:35 +0100 Subject: Add filetime column to download tab --- src/downloadlist.cpp | 12 +++++++----- src/downloadlist.h | 3 ++- src/downloadlistsortproxy.cpp | 4 +++- src/mainwindow.cpp | 2 +- src/mainwindow.ui | 2 +- 5 files changed, 14 insertions(+), 9 deletions(-) (limited to 'src/downloadlistsortproxy.cpp') diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp index a0286aef..b21a5306 100644 --- a/src/downloadlist.cpp +++ b/src/downloadlist.cpp @@ -47,7 +47,7 @@ int DownloadList::rowCount(const QModelIndex&) const int DownloadList::columnCount(const QModelIndex&) const { - return 3; + return 4; } @@ -68,10 +68,11 @@ QVariant DownloadList::headerData(int section, Qt::Orientation orientation, int if ((role == Qt::DisplayRole) && (orientation == Qt::Horizontal)) { switch (section) { - case COL_NAME : return tr("Name"); - case COL_SIZE : return tr("Size"); - case COL_STATUS : return tr("Status"); - default : return QVariant(); + case COL_NAME: return tr("Name"); + case COL_SIZE: return tr("Size"); + case COL_STATUS: return tr("Status"); + case COL_FILETIME: return tr("Filetime"); + default: return QVariant(); } } else { return QAbstractItemModel::headerData(section, orientation, role); @@ -93,6 +94,7 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const switch (index.column()) { case COL_NAME: return m_MetaDisplay ? m_Manager->getDisplayName(index.row()) : m_Manager->getFileName(index.row()); case COL_SIZE: return sizeFormat(m_Manager->getFileSize(index.row())); + case COL_FILETIME: return m_Manager->getFileTime(index.row()); case COL_STATUS: switch (m_Manager->getState(index.row())) { // STATE_DOWNLOADING handled by DownloadProgressDelegate diff --git a/src/downloadlist.h b/src/downloadlist.h index a504f209..2c32a397 100644 --- a/src/downloadlist.h +++ b/src/downloadlist.h @@ -39,7 +39,8 @@ public: enum EColumn { COL_NAME = 0, COL_STATUS, - COL_SIZE + COL_SIZE, + COL_FILETIME }; public: diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp index 1df3a9f1..dc97dc3e 100644 --- a/src/downloadlistsortproxy.cpp +++ b/src/downloadlistsortproxy.cpp @@ -50,8 +50,10 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left, return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row()); else return leftState > rightState; - } else if(left.column() == DownloadList::COL_SIZE){ + } 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 { return leftIndex < rightIndex; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 63606833..f913ad0a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -5160,7 +5160,7 @@ void MainWindow::initDownloadView() ui->downloadView->setModel(sortProxy); ui->downloadView->setManager(m_OrganizerCore.downloadManager()); ui->downloadView->setItemDelegate(new DownloadProgressDelegate(m_OrganizerCore.downloadManager(), sortProxy, ui->downloadView)); - ui->downloadView->setUniformRowHeights(true); + ui->downloadView->setUniformRowHeights(false); ui->downloadView->header()->setStretchLastSection(false); ui->downloadView->header()->setSectionResizeMode(QHeaderView::Interactive); ui->downloadView->header()->setSectionResizeMode(0, QHeaderView::Stretch); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 771832fd..ba4b8d63 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1365,7 +1365,7 @@ p, li { white-space: pre-wrap; } 15 - true + false -- cgit v1.3.1