From 836a19e298575a2c04637d0e8b32a68eb38f8949 Mon Sep 17 00:00:00 2001 From: DoubleSpicy Date: Thu, 10 Oct 2024 02:18:26 +0800 Subject: [PATCH] Fix preview dialog filesize sorting and missing header --- src/gui/previewselectdialog.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/gui/previewselectdialog.cpp b/src/gui/previewselectdialog.cpp index 1d8dd2d3f..00d103cab 100644 --- a/src/gui/previewselectdialog.cpp +++ b/src/gui/previewselectdialog.cpp @@ -48,6 +48,11 @@ #define SETTINGS_KEY(name) u"PreviewSelectDialog/" name +enum Roles +{ + SortRole = Qt::UserRole +}; + PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, const BitTorrent::Torrent *torrent) : QDialog(parent) , m_ui {new Ui::PreviewSelectDialog} @@ -75,7 +80,6 @@ PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, const BitTorrent::Torr m_ui->previewList->setAlternatingRowColors(pref->useAlternatingRowColors()); m_ui->previewList->setUniformRowHeights(true); m_ui->previewList->setModel(previewListModel); - m_ui->previewList->hideColumn(FILE_INDEX); auto *listDelegate = new PreviewListDelegate(this); m_ui->previewList->setItemDelegate(listDelegate); @@ -89,13 +93,19 @@ PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, const BitTorrent::Torr { int row = previewListModel->rowCount(); previewListModel->insertRow(row); - previewListModel->setData(previewListModel->index(row, NAME), filePath.filename()); - previewListModel->setData(previewListModel->index(row, SIZE), Utils::Misc::friendlyUnit(torrent->fileSize(i))); - previewListModel->setData(previewListModel->index(row, PROGRESS), fp[i]); - previewListModel->setData(previewListModel->index(row, FILE_INDEX), i); + previewListModel->setData(previewListModel->index(row, NAME), filePath.filename(), Qt::DisplayRole); + previewListModel->setData(previewListModel->index(row, NAME), filePath.filename(), SortRole); + // Sorting file size by bytes, while displaying by human readable format + previewListModel->setData(previewListModel->index(row, SIZE), Utils::Misc::friendlyUnit(torrent->fileSize(i)), Qt::DisplayRole); + previewListModel->setData(previewListModel->index(row, SIZE), torrent->fileSize(i), SortRole); + previewListModel->setData(previewListModel->index(row, PROGRESS), fp[i], Qt::DisplayRole); + previewListModel->setData(previewListModel->index(row, PROGRESS), fp[i], SortRole); + previewListModel->setData(previewListModel->index(row, FILE_INDEX), i, Qt::DisplayRole); + previewListModel->setData(previewListModel->index(row, FILE_INDEX), i, SortRole); } } + previewListModel->setSortRole(SortRole); previewListModel->sort(NAME); m_ui->previewList->header()->setContextMenuPolicy(Qt::CustomContextMenu); m_ui->previewList->header()->setFirstSectionMovable(true); @@ -106,6 +116,7 @@ PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, const BitTorrent::Torr // Restore dialog state loadWindowState(); + m_ui->previewList->hideColumn(FILE_INDEX); } PreviewSelectDialog::~PreviewSelectDialog()