From 2a1d18444f8c941364abff338e4ab18c5a44385f Mon Sep 17 00:00:00 2001 From: spycrab Date: Mon, 26 Jun 2017 23:22:40 +0200 Subject: [PATCH] Qt: Implement gamelist drag and drop --- Source/Core/DolphinQt2/MainWindow.cpp | 48 +++++++++++++++++++++++++++ Source/Core/DolphinQt2/MainWindow.h | 4 +++ 2 files changed, 52 insertions(+) diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp index 92a7ec0020..2da631a34c 100644 --- a/Source/Core/DolphinQt2/MainWindow.cpp +++ b/Source/Core/DolphinQt2/MainWindow.cpp @@ -4,9 +4,13 @@ #include #include +#include +#include #include +#include #include #include +#include #include "Common/Common.h" @@ -45,6 +49,7 @@ MainWindow::MainWindow() : QMainWindow(nullptr) setWindowTitle(QString::fromStdString(scm_rev_str)); setWindowIcon(QIcon(Resources::GetMisc(Resources::LOGO_SMALL))); setUnifiedTitleAndToolBarOnMac(true); + setAcceptDrops(true); CreateComponents(); @@ -530,3 +535,46 @@ bool MainWindow::eventFilter(QObject* object, QEvent* event) return false; } + +void MainWindow::dragEnterEvent(QDragEnterEvent* event) +{ + if (event->mimeData()->hasUrls() && event->mimeData()->urls().size() == 1) + event->acceptProposedAction(); +} + +void MainWindow::dropEvent(QDropEvent* event) +{ + const auto& urls = event->mimeData()->urls(); + if (urls.empty()) + return; + + const auto& url = urls[0]; + QFileInfo file_info(url.toLocalFile()); + + auto path = file_info.filePath(); + + if (!file_info.exists() || !file_info.isReadable()) + { + QMessageBox::critical(this, tr("Error"), tr("Failed to open '%1'").arg(path)); + return; + } + + if (file_info.isFile()) + { + StartGame(path); + } + else + { + auto& settings = Settings::Instance(); + + if (settings.GetPaths().size() != 0) + { + if (QMessageBox::question( + this, tr("Confirm"), + tr("Do you want to add \"%1\" to the list of Game Paths?").arg(path)) != + QMessageBox::Yes) + return; + } + settings.AddPath(path); + } +} diff --git a/Source/Core/DolphinQt2/MainWindow.h b/Source/Core/DolphinQt2/MainWindow.h index 0ed44fc19c..7a69972ec9 100644 --- a/Source/Core/DolphinQt2/MainWindow.h +++ b/Source/Core/DolphinQt2/MainWindow.h @@ -18,6 +18,7 @@ class HotkeyScheduler; class MappingWindow; class SettingsWindow; class ControllersWindow; +class DragEnterEvent; class MainWindow final : public QMainWindow { @@ -82,6 +83,9 @@ private: void ShowAboutDialog(); void ShowHotkeyDialog(); + void dragEnterEvent(QDragEnterEvent* event) override; + void dropEvent(QDropEvent* event) override; + QStackedWidget* m_stack; ToolBar* m_tool_bar; MenuBar* m_menu_bar;