From 26491f4b7309b830303f71502d5c3ce393ff158c Mon Sep 17 00:00:00 2001 From: thunder2 Date: Mon, 4 Oct 2010 20:15:52 +0000 Subject: [PATCH] Fixed sort of uploads and downloads by progress. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3603 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/TransfersDialog.cpp | 54 ++++++++++++---------- retroshare-gui/src/gui/TransfersDialog.h | 7 --- retroshare-gui/src/gui/xprogressbar.cpp | 5 ++ retroshare-gui/src/gui/xprogressbar.h | 2 + 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/retroshare-gui/src/gui/TransfersDialog.cpp b/retroshare-gui/src/gui/TransfersDialog.cpp index 9be2199ad..3d063fd0a 100644 --- a/retroshare-gui/src/gui/TransfersDialog.cpp +++ b/retroshare-gui/src/gui/TransfersDialog.cpp @@ -71,6 +71,22 @@ Q_DECLARE_METATYPE(FileProgressInfo) DetailsDialog *TransfersDialog::detailsdlg = NULL; +class ProgressItem : public QStandardItem +{ +public: + ProgressItem() : QStandardItem() {} + + virtual bool operator<(const QStandardItem &other) const + { + const int role = model() ? model()->sortRole() : Qt::DisplayRole; + + FileProgressInfo l = data(role).value(); + FileProgressInfo r = other.data(role).value(); + + return l < r; + } +}; + /** Constructor */ TransfersDialog::TransfersDialog(QWidget *parent) : RsAutoUpdatePage(1000,parent) @@ -139,11 +155,8 @@ TransfersDialog::TransfersDialog(QWidget *parent) _header->resizeSection ( PRIORITY, 100 ); _header->resizeSection ( REMAINING, 100 ); - connect(_header, SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(saveSortIndicatorDwl(int, Qt::SortOrder))); - // set default column and sort order for download - _sortColDwl = 0; - _sortOrderDwl = Qt::AscendingOrder; + ui.downloadList->sortByColumn(NAME, Qt::AscendingOrder); // Set Upload list model ULListModel = new QStandardItemModel(0,8); @@ -190,11 +203,8 @@ TransfersDialog::TransfersDialog(QWidget *parent) upheader->resizeSection ( USTATUS, 100 ); upheader->resizeSection ( USERNAME, 120 ); - connect(upheader, SIGNAL(sortIndicatorChanged(int, Qt::SortOrder)), this, SLOT(saveSortIndicatorUpl(int, Qt::SortOrder))); - // set default column and sort order for upload - _sortColUpl = 0; - _sortOrderUpl = Qt::AscendingOrder; + ui.uploadsList->sortByColumn(UNAME, Qt::AscendingOrder); FileTransferInfoWidget *ftiw = new FileTransferInfoWidget(); ui.fileTransferInfoWidget->setWidget(ftiw); @@ -498,6 +508,9 @@ int TransfersDialog::addItem(const QString&, const QString& name, const QString& { row = rowCount; DLListModel->insertRow(row); + + // change progress column to own class for sorting + DLListModel->setItem(row, PROGRESS, new ProgressItem); } DLListModel->setData(DLListModel->index(row, NAME), QVariant(name)); @@ -578,7 +591,7 @@ int TransfersDialog::addPeerToItem(int row, const QString& name, const QString& QStandardItem *i2 = new QStandardItem(); QStandardItem *i3 = new QStandardItem(); QStandardItem *i4 = new QStandardItem(); - QStandardItem *i5 = new QStandardItem(); + QStandardItem *i5 = new ProgressItem(); QStandardItem *i6 = new QStandardItem(); QStandardItem *i7 = new QStandardItem(); QStandardItem *i8 = new QStandardItem(); @@ -676,6 +689,9 @@ int TransfersDialog::addUploadItem( const QString&, const QString& name, const Q { row = ULListModel->rowCount(); ULListModel->insertRow(row); + + // change progress column to own class for sorting + ULListModel->setItem(row, UPROGRESS, new ProgressItem); } ULListModel->setData(ULListModel->index(row, UNAME), QVariant((QString)" "+name), Qt::DisplayRole); @@ -714,12 +730,11 @@ void TransfersDialog::updateDisplay() static void QListDelete (const QList &List) { - qDeleteAll (List.begin (), List.end ()); + qDeleteAll (List); } void TransfersDialog::insertTransfers() { - ui.downloadList->sortByColumn(_sortColDwl, _sortOrderDwl); /* disable for performance issues, enable after insert all transfers */ ui.downloadList->setSortingEnabled(false); @@ -867,9 +882,9 @@ void TransfersDialog::insertTransfers() removeIndex++; } - ui.downloadList->setSortingEnabled(true); + ui.downloadList->setSortingEnabled(true); - ui.uploadsList->sortByColumn(_sortColUpl, _sortOrderUpl); + ui.uploadsList->setSortingEnabled(false); // Now show upload hashes // @@ -962,7 +977,7 @@ void TransfersDialog::insertTransfers() removeIndex++; } - + ui.uploadsList->setSortingEnabled(true); } QString TransfersDialog::getPeerName(const std::string& id) const @@ -1461,17 +1476,6 @@ void TransfersDialog::clearcompleted() rsFiles->FileClearCompleted(); } -void TransfersDialog::saveSortIndicatorDwl(int logicalIndex, Qt::SortOrder order) -{ - _sortColDwl = logicalIndex;; - _sortOrderDwl = order; -} - -void TransfersDialog::saveSortIndicatorUpl(int logicalIndex, Qt::SortOrder order) -{ - _sortColUpl = logicalIndex;; - _sortOrderUpl = order; -} void TransfersDialog::showFileDetails() { std::string file_hash ; diff --git a/retroshare-gui/src/gui/TransfersDialog.h b/retroshare-gui/src/gui/TransfersDialog.h index bd1db2a8d..55e808e7a 100644 --- a/retroshare-gui/src/gui/TransfersDialog.h +++ b/retroshare-gui/src/gui/TransfersDialog.h @@ -98,10 +98,6 @@ private slots: void chunkRandom(); void chunkStreaming(); - /** save sort indicators for next transfers display */ - void saveSortIndicatorDwl(int logicalIndex, Qt::SortOrder order); - void saveSortIndicatorUpl(int logicalIndex, Qt::SortOrder order); - void showDetailsDialog(); void updateDetailsDialog(); @@ -120,9 +116,6 @@ private: DLListDelegate *DLDelegate; ULListDelegate *ULDelegate; - int _sortColDwl, _sortColUpl; - Qt::SortOrder _sortOrderDwl, _sortOrderUpl; - /** Create the actions on the tray menu or menubar */ void createActions(); diff --git a/retroshare-gui/src/gui/xprogressbar.cpp b/retroshare-gui/src/gui/xprogressbar.cpp index 304ddcfc4..f3dbf8116 100644 --- a/retroshare-gui/src/gui/xprogressbar.cpp +++ b/retroshare-gui/src/gui/xprogressbar.cpp @@ -28,6 +28,11 @@ #include #include "xprogressbar.h" +bool FileProgressInfo::operator<(const FileProgressInfo &other) const +{ + return progress < other.progress; +} + xProgressBar::xProgressBar(const FileProgressInfo& pinfo,QRect rect, QPainter *painter, int schemaIndex) : _pinfo(pinfo) { diff --git a/retroshare-gui/src/gui/xprogressbar.h b/retroshare-gui/src/gui/xprogressbar.h index d10bdac04..7cbb8bf1b 100644 --- a/retroshare-gui/src/gui/xprogressbar.h +++ b/retroshare-gui/src/gui/xprogressbar.h @@ -45,6 +45,8 @@ class FileProgressInfo CompressedChunkMap cmap ; float progress ; uint32_t nb_chunks ; + + bool operator<(const FileProgressInfo &other) const; }; // class xProgressBar : public QObject