diff --git a/CMakeLists.txt b/CMakeLists.txt index 83d4963..c07aec8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(frelay VERSION 0.1.2 LANGUAGES CXX) +project(frelay VERSION 0.1.3 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/Gui/Control/CompareControl.cpp b/Gui/Control/CompareControl.cpp index e6c625e..a339a54 100644 --- a/Gui/Control/CompareControl.cpp +++ b/Gui/Control/CompareControl.cpp @@ -41,5 +41,5 @@ void Compare::InitTabWidget() ui->tableWidget->viewport()->setAcceptDrops(true); ui->tableWidget->setDropIndicatorShown(true); ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); - ui->tableWidget->setDragDropMode(QAbstractItemView::DragDrop); + ui->tableWidget->setDragDropMode(QAbstractItemView::DropOnly); } diff --git a/Gui/Control/cpTableWidget.cpp b/Gui/Control/cpTableWidget.cpp index 374932f..b09d616 100644 --- a/Gui/Control/cpTableWidget.cpp +++ b/Gui/Control/cpTableWidget.cpp @@ -4,15 +4,14 @@ #include #include #include +#include CpTableWidget::CpTableWidget(QWidget* parent) : QTableWidget(parent) { - } CpTableWidget::~CpTableWidget() { - } void CpTableWidget::dropEvent(QDropEvent* event) @@ -24,7 +23,15 @@ void CpTableWidget::dropEvent(QDropEvent* event) QByteArray encoded = event->mimeData()->data("application/x-qabstractitemmodeldatalist"); QDataStream stream(&encoded, QIODevice::ReadOnly); - QList draggedItems; + QPoint pos = event->pos(); + int startRow = rowAt(pos.y()); + int startCol = columnAt(pos.x()); + if (startCol != 1 && startCol != 2) { + event->ignore(); + return; + } + + QStringList draggedData; while (!stream.atEnd()) { int row, col; QMap roleData; @@ -32,7 +39,35 @@ void CpTableWidget::dropEvent(QDropEvent* event) if (col != 1) { continue; } + draggedData.append(roleData[Qt::DisplayRole].toString()); } + + if (draggedData.isEmpty()) { + event->ignore(); + return; + } + + int currentRow = startRow; + if (currentRow == -1) { + currentRow = rowCount(); + } + for (const QString& text : draggedData) { + if (currentRow >= rowCount()) { + insertRow(rowCount()); + } + QString cur = startCol == 1 ? Util::Join(GlobalData::Ins()->GetLocalRoot(), text) + : Util::Join(GlobalData::Ins()->GetRemoteRoot(), text); + QTableWidgetItem* item = this->item(currentRow, startCol); + if (!item) { + item = new QTableWidgetItem(cur); + setItem(currentRow, startCol, item); + } else { + item->setText(cur); + } + currentRow++; + } + + event->acceptProposedAction(); } void CpTableWidget::dragEnterEvent(QDragEnterEvent* event) @@ -43,5 +78,3 @@ void CpTableWidget::dragEnterEvent(QDragEnterEvent* event) event->ignore(); } } - - diff --git a/Gui/Control/cusTableWidget.cpp b/Gui/Control/cusTableWidget.cpp index c6d91c3..f30a319 100644 --- a/Gui/Control/cusTableWidget.cpp +++ b/Gui/Control/cusTableWidget.cpp @@ -42,7 +42,6 @@ void CustomTableWidget::dropEvent(QDropEvent* event) QDataStream stream(&encoded, QIODevice::ReadOnly); QVector tasks; - QList draggedItems; while (!stream.atEnd()) { int row, col; QMap roleData;