From 6bcd5ce047bd6914e83bd1eed959adf6c0df2be0 Mon Sep 17 00:00:00 2001 From: noah the goodra Date: Wed, 15 Feb 2017 21:23:30 -0600 Subject: [PATCH] added drag n drop feature --- src/citra_qt/main.cpp | 36 +++++++++++++++++++++++++++++++++++- src/citra_qt/main.h | 6 ++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 3c2e19344..3c1ae8848 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -54,7 +54,7 @@ Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); - + setAcceptDrops(true); ui.setupUi(this); statusBar()->hide(); @@ -625,6 +625,40 @@ void GMainWindow::closeEvent(QCloseEvent* event) { QWidget::closeEvent(event); } +bool IsSingleFileDropEvent(QDropEvent* event) { + const QMimeData* mimeData = event->mimeData(); + return mimeData->hasUrls() && mimeData->urls().length() == 1; +} + +void GMainWindow::dropEvent(QDropEvent* event) { + if (IsSingleFileDropEvent(event) && ConfirmChangeGame()) { + const QMimeData* mimeData = event->mimeData(); + QString filename = mimeData->urls().at(0).toLocalFile(); + BootGame(filename.toStdString()); + } +} + +void GMainWindow::dragEnterEvent(QDragEnterEvent* event) { + if (IsSingleFileDropEvent(event)) { + event->acceptProposedAction(); + } +} + +void GMainWindow::dragMoveEvent(QDragMoveEvent* event) { + event->acceptProposedAction(); +} + +bool GMainWindow::ConfirmChangeGame() { + if (emu_thread == nullptr) + return true; + + auto answer = QMessageBox::question( + this, tr("Citra"), + tr("Are you sure you want to stop the emulation? Any unsaved progress will be lost."), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + return answer != QMessageBox::No; +} + #ifdef main #undef main #endif diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index a2fd45c47..102fd151d 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -110,6 +110,7 @@ private: * @return true if the user confirmed */ bool ConfirmClose(); + bool ConfirmChangeGame(); void closeEvent(QCloseEvent* event) override; private slots: @@ -155,6 +156,11 @@ private: WaitTreeWidget* waitTreeWidget; QAction* actions_recent_files[max_recent_files_item]; + +protected: + void dropEvent(QDropEvent* event) override; + void dragEnterEvent(QDragEnterEvent* event) override; + void dragMoveEvent(QDragMoveEvent* event) override; }; #endif // _CITRA_QT_MAIN_HXX_