From 2b1c268ff9ce91efac93155293ddea8058bb9a27 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 24 May 2022 12:01:11 +0600 Subject: [PATCH] qt: Add DnD support for cassette/cartridge media types --- src/qt/qt_machinestatus.cpp | 8 ++++++++ src/qt/qt_mediamenu.cpp | 21 +++++++++++++-------- src/qt/qt_mediamenu.hpp | 1 + 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index d8c378935..39c98b6aa 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -361,7 +361,11 @@ void MachineStatus::refresh(QStatusBar* sbar) { connect((ClickableLabel*)d->cassette.label.get(), &ClickableLabel::clicked, [](QPoint pos) { MediaMenu::ptr->cassetteMenu->popup(pos - QPoint(0, MediaMenu::ptr->cassetteMenu->sizeHint().height())); }); + connect((ClickableLabel*)d->cassette.label.get(), &ClickableLabel::dropped, [](QString str) { + MediaMenu::ptr->cassetteMount(str, false); + }); d->cassette.label->setToolTip(MediaMenu::ptr->cassetteMenu->title()); + d->cassette.label->setAcceptDrops(true); sbar->addWidget(d->cassette.label.get()); } @@ -372,7 +376,11 @@ void MachineStatus::refresh(QStatusBar* sbar) { connect((ClickableLabel*)d->cartridge[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) { MediaMenu::ptr->cartridgeMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->cartridgeMenus[i]->sizeHint().height())); }); + connect((ClickableLabel*)d->cartridge[i].label.get(), &ClickableLabel::dropped, [i](QString str) { + MediaMenu::ptr->cartridgeMount(i, str); + }); d->cartridge[i].label->setToolTip(MediaMenu::ptr->cartridgeMenus[i]->title()); + d->cartridge[i].label->setAcceptDrops(true); sbar->addWidget(d->cartridge[i].label.get()); } } diff --git a/src/qt/qt_mediamenu.cpp b/src/qt/qt_mediamenu.cpp index cf856a9ac..3fe09ee45 100644 --- a/src/qt/qt_mediamenu.cpp +++ b/src/qt/qt_mediamenu.cpp @@ -230,6 +230,18 @@ void MediaMenu::cassetteUpdateMenu() { cassetteMenu->setTitle(QString::asprintf(tr("Cassette: %s").toUtf8().constData(), (name.isEmpty() ? tr("(empty)") : name).toUtf8().constData())); } +void MediaMenu::cartridgeMount(int i, const QString &filename) +{ + cart_close(i); + QByteArray filenameBytes = filename.toUtf8(); + cart_load(i, filenameBytes.data()); + + ui_sb_update_icon_state(SB_CARTRIDGE | i, filename.isEmpty() ? 1 : 0); + cartridgeUpdateMenu(i); + ui_sb_update_tip(SB_CARTRIDGE | i); + config_save(); +} + void MediaMenu::cartridgeSelectImage(int i) { auto filename = QFileDialog::getOpenFileName( parentWidget, @@ -243,14 +255,7 @@ void MediaMenu::cartridgeSelectImage(int i) { if (filename.isEmpty()) { return; } - cart_close(i); - QByteArray filenameBytes = filename.toUtf8(); - cart_load(i, filenameBytes.data()); - - ui_sb_update_icon_state(SB_CARTRIDGE | i, filename.isEmpty() ? 1 : 0); - cartridgeUpdateMenu(i); - ui_sb_update_tip(SB_CARTRIDGE | i); - config_save(); + cartridgeMount(i, filename); } void MediaMenu::cartridgeEject(int i) { diff --git a/src/qt/qt_mediamenu.hpp b/src/qt/qt_mediamenu.hpp index b261083be..3c45b2414 100644 --- a/src/qt/qt_mediamenu.hpp +++ b/src/qt/qt_mediamenu.hpp @@ -25,6 +25,7 @@ public: void cassetteUpdateMenu(); void cartridgeSelectImage(int i); + void cartridgeMount(int i, const QString& filename); void cartridgeEject(int i); void cartridgeUpdateMenu(int i);