From: Marcus Eggenberger Date: Wed, 18 Jun 2008 15:32:39 +0000 (+0200) Subject: fixing BR #145 (moving items in custom view off by one) X-Git-Tag: 0.3.0~364 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=08c505bd5ee36baca9ca33ee7d1adfcb01b7ab59;ds=sidebyside fixing BR #145 (moving items in custom view off by one) --- diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 0adf8ebb..04e31567 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -39,7 +39,8 @@ public: *****************************************/ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config) : QSortFilterProxyModel(model), - _config(0) + _config(0), + _sortOrder(Qt::AscendingOrder) { setConfig(config); setSourceModel(model); @@ -125,11 +126,17 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action if(droppedNetworkId == networkId) { if(row < 0) row = 0; + if(row < rowCount(parent)) { BufferId beforeBufferId = parent.child(row, 0).data(NetworkModel::BufferIdRole).value(); pos = config()->bufferList().indexOf(beforeBufferId); + if(_sortOrder == Qt::DescendingOrder) + pos++; } else { - pos = config()->bufferList().count(); + if(_sortOrder == Qt::AscendingOrder) + pos = config()->bufferList().count(); + else + pos = 0; } if(config()->bufferList().contains(bufferId)) { @@ -147,6 +154,11 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action return true; } +void BufferViewFilter::sort(int column, Qt::SortOrder order) { + _sortOrder = order; + QSortFilterProxyModel::sort(column, order); +} + void BufferViewFilter::addBuffer(const BufferId &bufferId) const { if(!config() || config()->bufferList().contains(bufferId)) return; diff --git a/src/uisupport/bufferviewfilter.h b/src/uisupport/bufferviewfilter.h index 128b3e83..56fa974a 100644 --- a/src/uisupport/bufferviewfilter.h +++ b/src/uisupport/bufferviewfilter.h @@ -61,6 +61,8 @@ public: void setConfig(BufferViewConfig *config); inline BufferViewConfig *config() const { return _config; } + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + public slots: void checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous); void checkItemForRemoval(const QModelIndex &index) { checkItemsForRemoval(index, index); } @@ -81,6 +83,7 @@ private slots: private: QPointer _config; + Qt::SortOrder _sortOrder; QColor _FgColorInactiveActivity; QColor _FgColorNoActivity;