+void BufferView::dropEvent(QDropEvent *event) {
+ QModelIndex index = indexAt(event->pos());
+
+ QRect indexRect = visualRect(index);
+ QPoint cursorPos = event->pos();
+
+ // check if we're really _on_ the item and not indicating a move to just above or below the item
+ const int margin = 2;
+ if(cursorPos.y() - indexRect.top() < margin
+ || indexRect.bottom() - cursorPos.y() < margin)
+ return QTreeView::dropEvent(event);
+
+ QList< QPair<NetworkId, BufferId> > bufferList = Client::networkModel()->mimeDataToBufferList(event->mimeData());
+ if(bufferList.count() != 1)
+ return QTreeView::dropEvent(event);
+
+ NetworkId networkId = bufferList[0].first;
+ BufferId bufferId2 = bufferList[0].second;
+
+ if(index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
+ return QTreeView::dropEvent(event);
+
+ if(index.data(NetworkModel::BufferTypeRole) != BufferInfo::QueryBuffer)
+ return QTreeView::dropEvent(event);
+
+ if(index.data(NetworkModel::NetworkIdRole).value<NetworkId>() != networkId)
+ return QTreeView::dropEvent(event);
+
+ BufferId bufferId1 = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(bufferId1 == bufferId2)
+ return QTreeView::dropEvent(event);
+
+ int res = QMessageBox::question(0, tr("Merge buffers permanently?"),
+ tr("Do you want to merge the buffer \"%1\" permanently into buffer \"%2\"?\n This cannot be reversed!").arg(Client::networkModel()->bufferName(bufferId2)).arg(Client::networkModel()->bufferName(bufferId1)),
+ QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
+ if(res == QMessageBox::Yes) {
+ Client::mergeBuffersPermanently(bufferId1, bufferId2);
+ }
+}
+
+void BufferView::removeSelectedBuffers(bool permanently) {
+ if(!config())
+ return;
+
+ BufferId bufferId;
+ QSet<BufferId> removedRows;
+ foreach(QModelIndex index, selectionModel()->selectedIndexes()) {
+ if(index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
+ continue;
+
+ bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(removedRows.contains(bufferId))
+ continue;
+
+ removedRows << bufferId;
+
+ if(permanently)
+ config()->requestRemoveBufferPermanently(bufferId);
+ else
+ config()->requestRemoveBuffer(bufferId);
+ }
+}
+