fixing BR #145 (moving items in custom view off by one)
authorMarcus Eggenberger <egs@quassel-irc.org>
Wed, 18 Jun 2008 15:32:39 +0000 (17:32 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Wed, 18 Jun 2008 15:32:51 +0000 (17:32 +0200)
src/uisupport/bufferviewfilter.cpp
src/uisupport/bufferviewfilter.h

index 0adf8eb..04e3156 100644 (file)
@@ -39,7 +39,8 @@ public:
 *****************************************/
 BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config)
   : QSortFilterProxyModel(model),
 *****************************************/
 BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config)
   : QSortFilterProxyModel(model),
-    _config(0)
+    _config(0),
+    _sortOrder(Qt::AscendingOrder)
 {
   setConfig(config);
   setSourceModel(model);
 {
   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(droppedNetworkId == networkId) {
       if(row < 0)
        row = 0;
+
       if(row < rowCount(parent)) {
        BufferId beforeBufferId = parent.child(row, 0).data(NetworkModel::BufferIdRole).value<BufferId>();
        pos = config()->bufferList().indexOf(beforeBufferId);
       if(row < rowCount(parent)) {
        BufferId beforeBufferId = parent.child(row, 0).data(NetworkModel::BufferIdRole).value<BufferId>();
        pos = config()->bufferList().indexOf(beforeBufferId);
+       if(_sortOrder == Qt::DescendingOrder)
+         pos++;
       } else {
       } else {
-       pos = config()->bufferList().count();
+       if(_sortOrder == Qt::AscendingOrder)
+         pos = config()->bufferList().count();
+       else
+         pos = 0;
       }
 
       if(config()->bufferList().contains(bufferId)) {
       }
 
       if(config()->bufferList().contains(bufferId)) {
@@ -147,6 +154,11 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action
   return true;
 }
 
   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;
 void BufferViewFilter::addBuffer(const BufferId &bufferId) const {
   if(!config() || config()->bufferList().contains(bufferId))
     return;
index 128b3e8..56fa974 100644 (file)
@@ -61,6 +61,8 @@ public:
   void setConfig(BufferViewConfig *config);
   inline BufferViewConfig *config() const { return _config; }
 
   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 &current, const QModelIndex &previous);
   void checkItemForRemoval(const QModelIndex &index) { checkItemsForRemoval(index, index); }
 public slots:
   void checkPreviousCurrentForRemoval(const QModelIndex &current, const QModelIndex &previous);
   void checkItemForRemoval(const QModelIndex &index) { checkItemsForRemoval(index, index); }
@@ -81,6 +83,7 @@ private slots:
     
 private:
   QPointer<BufferViewConfig> _config;
     
 private:
   QPointer<BufferViewConfig> _config;
+  Qt::SortOrder _sortOrder;
   
   QColor _FgColorInactiveActivity;
   QColor _FgColorNoActivity;
   
   QColor _FgColorInactiveActivity;
   QColor _FgColorNoActivity;