diff --git a/Gui/CMakeLists.txt b/Gui/CMakeLists.txt index 39b9fe9..9de0b92 100644 --- a/Gui/CMakeLists.txt +++ b/Gui/CMakeLists.txt @@ -23,6 +23,7 @@ Control/CompareControl.h Control/CompareControl.cpp Control/CompareControl.ui GuiUtil/Public.h GuiUtil/Public.cpp Control/Transform.h Control/Transform.cpp Control/Transform.ui ../Res/frelay.qrc ../Res/ico.rc +Control/cusTableWidget.cpp Control/cusTableWidget.h ) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) diff --git a/Gui/Control/FileControl.cpp b/Gui/Control/FileControl.cpp index e032c84..8a52532 100644 --- a/Gui/Control/FileControl.cpp +++ b/Gui/Control/FileControl.cpp @@ -1,4 +1,4 @@ -#include "FileControl.h" +#include "FileControl.h" #include #include @@ -57,12 +57,25 @@ void FileManager::InitControl() ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); // ui->tableWidget->setStyleSheet("QTableWidget::item:hover { background-color: transparent; }"); + ui->tableWidget->setDragEnabled(true); + ui->tableWidget->viewport()->setAcceptDrops(true); + ui->tableWidget->setDropIndicatorShown(true); + ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); + ui->tableWidget->setDragDropMode(QAbstractItemView::DragDrop); + connect(ui->btnHome, &QPushButton::clicked, this, &FileManager::evtHome); connect(ui->btnVisit, &QPushButton::clicked, this, &FileManager::evtFile); connect(ui->tableWidget, &QTableWidget::cellDoubleClicked, this, &FileManager::doubleClick); connect(ui->btnUp, &QPushButton::clicked, this, &FileManager::evtUp); } +void FileManager::InitMenu(bool remote) +{ + if (remote) { + auto acDown = new QAction(tr("Download")); + } +} + void FileManager::ShowPath(const QString& path) { int existingIndex = ui->comboBox->findText(path); diff --git a/Gui/Control/FileControl.h b/Gui/Control/FileControl.h index a0d6e04..e5af140 100644 --- a/Gui/Control/FileControl.h +++ b/Gui/Control/FileControl.h @@ -1,10 +1,11 @@ -#ifndef FILECONTROL_H +#ifndef FILECONTROL_H #define FILECONTROL_H #include #include #include #include +#include namespace Ui { class FileManager; @@ -23,6 +24,7 @@ public: private: void InitControl(); + void InitMenu(bool remote = false); void ShowPath(const QString& path); void ShowFile(const DirFileInfoVec& info); void doubleClick(int row, int column); @@ -35,6 +37,8 @@ private: private: Ui::FileManager* ui; QString curRoot_; + QMenu* localMenu_; + QMenu* remoteMenu_; std::shared_ptr fileHelper_; }; diff --git a/Gui/Control/FileControl.ui b/Gui/Control/FileControl.ui index af69e45..c9bd9c1 100644 --- a/Gui/Control/FileControl.ui +++ b/Gui/Control/FileControl.ui @@ -57,10 +57,17 @@ - + + + + CustomTableWidget + QTableWidget +
cusTableWidget.h
+
+
diff --git a/Gui/Control/cusTableWidget.cpp b/Gui/Control/cusTableWidget.cpp new file mode 100644 index 0000000..a6bad65 --- /dev/null +++ b/Gui/Control/cusTableWidget.cpp @@ -0,0 +1,67 @@ +#include "cusTableWidget.h" +#include +#include +#include + +CustomTableWidget::CustomTableWidget(QWidget* parent) +{ +} + +CustomTableWidget::~CustomTableWidget() +{ +} + +void CustomTableWidget::dropEvent(QDropEvent* event) +{ + if (!event->mimeData()->hasFormat("application/x-custom-data")) { + event->ignore(); + return; + } + + QModelIndex index = indexAt(event->pos()); + if (!index.isValid()) { + event->ignore(); + return; + } + + QString data = QString::fromUtf8(event->mimeData()->data("application/x-custom-data")); + QStringList items = data.split(","); + + //emit customDropRequested(items.first(), index.row(), index.column(), event->source()); + + event->acceptProposedAction(); +} + +void CustomTableWidget::dragMoveEvent(QDragMoveEvent* event) +{ + const QTableWidget* source = qobject_cast(event->source()); + if (source == this) { + event->ignore(); + return; + } + if (event->mimeData()->hasFormat("application/x-custom-data")) { + event->setDropAction(Qt::MoveAction); + event->acceptProposedAction(); + } else { + event->ignore(); + } +} + +void CustomTableWidget::startDrag(Qt::DropActions supportedActions) +{ + QDrag* drag = new QDrag(this); + QMimeData* mimeData = new QMimeData; + + QStringList selectedTexts; + foreach (QTableWidgetItem* item, selectedItems()) { + selectedTexts << item->text(); + } + mimeData->setData("application/x-custom-data", selectedTexts.join(",").toUtf8()); + drag->setMimeData(mimeData); + QPixmap pixmap(100, 50); + pixmap.fill(Qt::lightGray); + QPainter painter(&pixmap); + painter.drawText(pixmap.rect(), Qt::AlignCenter, QString("%1 ITEM").arg(selectedTexts.count())); + drag->setPixmap(pixmap); + drag->exec(supportedActions); +} diff --git a/Gui/Control/cusTableWidget.h b/Gui/Control/cusTableWidget.h new file mode 100644 index 0000000..ba7ff57 --- /dev/null +++ b/Gui/Control/cusTableWidget.h @@ -0,0 +1,20 @@ +#ifndef CUSTOM_TABLEWIDET_H +#define CUSTOM_TABLEWIDET_H + +#include +#include + +class CustomTableWidget : public QTableWidget +{ + Q_OBJECT +public: + explicit CustomTableWidget(QWidget* parent = nullptr); + ~CustomTableWidget() override; + +protected: + void dropEvent(QDropEvent* event) override; + void dragMoveEvent(QDragMoveEvent *event) override; + void startDrag(Qt::DropActions supportedActions) override; +}; + +#endif