aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/qt_sdl')
-rw-r--r--src/frontend/qt_sdl/main.cpp62
-rw-r--r--src/frontend/qt_sdl/main.h3
2 files changed, 65 insertions, 0 deletions
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 0cd9f70..d38a73e 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -28,6 +28,7 @@
#include <QPaintEvent>
#include <QPainter>
#include <QKeyEvent>
+#include <QMimeData>
#include <SDL2/SDL.h>
@@ -503,6 +504,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
setWindowTitle("melonDS " MELONDS_VERSION);
setAttribute(Qt::WA_DeleteOnClose);
+ setAcceptDrops(true);
QMenuBar* menubar = new QMenuBar();
{
@@ -612,6 +614,66 @@ void MainWindow::keyReleaseEvent(QKeyEvent* event)
}
+void MainWindow::dragEnterEvent(QDragEnterEvent* event)
+{
+ if (!event->mimeData()->hasUrls()) return;
+
+ QList<QUrl> urls = event->mimeData()->urls();
+ if (urls.count() > 1) return; // not handling more than one file at once
+
+ QString filename = urls.at(0).toLocalFile();
+ QString ext = filename.right(3);
+
+ if (ext == "nds" || ext == "srl" || (ext == "gba" && RunningSomething))
+ event->acceptProposedAction();
+}
+
+void MainWindow::dropEvent(QDropEvent* event)
+{
+ if (!event->mimeData()->hasUrls()) return;
+
+ QList<QUrl> urls = event->mimeData()->urls();
+ if (urls.count() > 1) return; // not handling more than one file at once
+
+ emuThread->emuPause(true);
+
+ QString filename = urls.at(0).toLocalFile();
+ QString ext = filename.right(3);
+
+ char _filename[1024];
+ strncpy(_filename, filename.toStdString().c_str(), 1023); _filename[1023] = '\0';
+
+ int slot; int res;
+ if (ext == "gba")
+ {
+ slot = 1;
+ res = Frontend::LoadROM(_filename, Frontend::ROMSlot_GBA);
+ }
+ else
+ {
+ slot = 0;
+ res = Frontend::LoadROM(_filename, Frontend::ROMSlot_NDS);
+ }
+
+ if (res != Frontend::Load_OK)
+ {
+ QMessageBox::critical(this,
+ "melonDS",
+ loadErrorStr(res));
+ emuThread->emuUnpause();
+ }
+ else if (slot == 1)
+ {
+ // checkme
+ emuThread->emuUnpause();
+ }
+ else
+ {
+ emuThread->emuRun();
+ }
+}
+
+
QString MainWindow::loadErrorStr(int error)
{
switch (error)
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index 5443780..83777bd 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -92,6 +92,9 @@ protected:
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ void dropEvent(QDropEvent* event) override;
+
private slots:
void onOpenFile();
void onBootFirmware();