Просмотр исходного кода

Merge pull request #2573 from jfmherokiller/dragndrop

Added drag and drop feature to the code
bunnei 9 лет назад
Родитель
Сommit
0c28f5dea6
2 измененных файлов с 41 добавлено и 1 удалено
  1. 35 1
      src/citra_qt/main.cpp
  2. 6 0
      src/citra_qt/main.h

+ 35 - 1
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

+ 6 - 0
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_