mirror of https://github.com/mgba-emu/mgba.git
Qt: Disable menu items in multiplayer that don't make sense to have enabled
This commit is contained in:
parent
5b7e39e45f
commit
11d9b492cd
1
CHANGES
1
CHANGES
|
@ -24,6 +24,7 @@ Misc:
|
|||
- Libretro: Use anonymous memory mappers for large blocks of memory
|
||||
- Qt: Add 'Apply' button to settings window
|
||||
- Qt: Prevent savestate window from opening while in multiplayer
|
||||
- Qt: Disable menu items in multiplayer that don't make sense to have enabled
|
||||
|
||||
0.3.0: (2015-08-16)
|
||||
Features:
|
||||
|
|
|
@ -86,6 +86,7 @@ GBAApp::GBAApp(int& argc, char* argv[])
|
|||
w->show();
|
||||
|
||||
w->controller()->setMultiplayerController(&m_multiplayer);
|
||||
w->multiplayerChanged();
|
||||
}
|
||||
|
||||
bool GBAApp::event(QEvent* event) {
|
||||
|
@ -110,6 +111,7 @@ Window* GBAApp::newWindow() {
|
|||
w->loadConfig();
|
||||
w->show();
|
||||
w->controller()->setMultiplayerController(&m_multiplayer);
|
||||
w->multiplayerChanged();
|
||||
return w;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ bool MultiplayerController::attachGame(GameController* controller) {
|
|||
}
|
||||
thread->sioDrivers.multiplayer = &node->d;
|
||||
controller->threadContinue();
|
||||
emit gameAttached();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -60,6 +61,7 @@ void MultiplayerController::detachGame(GameController* controller) {
|
|||
}
|
||||
MutexUnlock(&m_lockstep.mutex);
|
||||
controller->threadContinue();
|
||||
emit gameDetached();
|
||||
}
|
||||
|
||||
int MultiplayerController::attached() {
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#ifndef QGBA_MULTIPLAYER_CONTROLLER
|
||||
#define QGBA_MULTIPLAYER_CONTROLLER
|
||||
|
||||
#include <QObject>
|
||||
|
||||
extern "C" {
|
||||
#include "gba/sio/lockstep.h"
|
||||
}
|
||||
|
@ -14,7 +16,9 @@ namespace QGBA {
|
|||
|
||||
class GameController;
|
||||
|
||||
class MultiplayerController {
|
||||
class MultiplayerController : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MultiplayerController();
|
||||
~MultiplayerController();
|
||||
|
@ -24,6 +28,10 @@ public:
|
|||
|
||||
int attached();
|
||||
|
||||
signals:
|
||||
void gameAttached();
|
||||
void gameDetached();
|
||||
|
||||
private:
|
||||
GBASIOLockstep m_lockstep;
|
||||
};
|
||||
|
|
|
@ -271,6 +271,22 @@ void Window::replaceROM() {
|
|||
}
|
||||
}
|
||||
|
||||
void Window::multiplayerChanged() {
|
||||
disconnect(nullptr, this, SLOT(multiplayerChanged()));
|
||||
int attached = 1;
|
||||
MultiplayerController* multiplayer = m_controller->multiplayerController();
|
||||
if (multiplayer) {
|
||||
attached = multiplayer->attached();
|
||||
connect(multiplayer, SIGNAL(gameAttached()), this, SLOT(multiplayerChanged()));
|
||||
connect(multiplayer, SIGNAL(gameDetached()), this, SLOT(multiplayerChanged()));
|
||||
}
|
||||
if (m_controller->isLoaded()) {
|
||||
for (QAction* action : m_nonMpActions) {
|
||||
action->setDisabled(attached > 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Window::selectBIOS() {
|
||||
QString filename = GBAApp::app()->getOpenFileName(this, tr("Select BIOS"));
|
||||
if (!filename.isEmpty()) {
|
||||
|
@ -569,6 +585,7 @@ void Window::gameStarted(GBAThread* context) {
|
|||
foreach (QAction* action, m_gameActions) {
|
||||
action->setDisabled(false);
|
||||
}
|
||||
multiplayerChanged();
|
||||
if (context->fname) {
|
||||
setWindowFilePath(context->fname);
|
||||
appendMRU(context->fname);
|
||||
|
@ -740,12 +757,14 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
loadState->setShortcut(tr("F10"));
|
||||
connect(loadState, &QAction::triggered, [this]() { this->openStateWindow(LoadSave::LOAD); });
|
||||
m_gameActions.append(loadState);
|
||||
m_nonMpActions.append(loadState);
|
||||
addControlledAction(fileMenu, loadState, "loadState");
|
||||
|
||||
QAction* saveState = new QAction(tr("&Save state"), fileMenu);
|
||||
saveState->setShortcut(tr("Shift+F10"));
|
||||
connect(saveState, &QAction::triggered, [this]() { this->openStateWindow(LoadSave::SAVE); });
|
||||
m_gameActions.append(saveState);
|
||||
m_nonMpActions.append(saveState);
|
||||
addControlledAction(fileMenu, saveState, "saveState");
|
||||
|
||||
QMenu* quickLoadMenu = fileMenu->addMenu(tr("Quick load"));
|
||||
|
@ -756,11 +775,13 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
QAction* quickLoad = new QAction(tr("Load recent"), quickLoadMenu);
|
||||
connect(quickLoad, SIGNAL(triggered()), m_controller, SLOT(loadState()));
|
||||
m_gameActions.append(quickLoad);
|
||||
m_nonMpActions.append(quickLoad);
|
||||
addControlledAction(quickLoadMenu, quickLoad, "quickLoad");
|
||||
|
||||
QAction* quickSave = new QAction(tr("Save recent"), quickSaveMenu);
|
||||
connect(quickSave, SIGNAL(triggered()), m_controller, SLOT(saveState()));
|
||||
m_gameActions.append(quickSave);
|
||||
m_nonMpActions.append(quickSave);
|
||||
addControlledAction(quickSaveMenu, quickSave, "quickSave");
|
||||
|
||||
quickLoadMenu->addSeparator();
|
||||
|
@ -770,12 +791,14 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
undoLoadState->setShortcut(tr("F11"));
|
||||
connect(undoLoadState, SIGNAL(triggered()), m_controller, SLOT(loadBackupState()));
|
||||
m_gameActions.append(undoLoadState);
|
||||
m_nonMpActions.append(undoLoadState);
|
||||
addControlledAction(quickLoadMenu, undoLoadState, "undoLoadState");
|
||||
|
||||
QAction* undoSaveState = new QAction(tr("Undo save state"), quickSaveMenu);
|
||||
undoSaveState->setShortcut(tr("Shift+F11"));
|
||||
connect(undoSaveState, SIGNAL(triggered()), m_controller, SLOT(saveBackupState()));
|
||||
m_gameActions.append(undoSaveState);
|
||||
m_nonMpActions.append(undoSaveState);
|
||||
addControlledAction(quickSaveMenu, undoSaveState, "undoSaveState");
|
||||
|
||||
quickLoadMenu->addSeparator();
|
||||
|
@ -787,12 +810,14 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
quickLoad->setShortcut(tr("F%1").arg(i));
|
||||
connect(quickLoad, &QAction::triggered, [this, i]() { m_controller->loadState(i); });
|
||||
m_gameActions.append(quickLoad);
|
||||
m_nonMpActions.append(quickLoad);
|
||||
addControlledAction(quickLoadMenu, quickLoad, QString("quickLoad.%1").arg(i));
|
||||
|
||||
quickSave = new QAction(tr("State &%1").arg(i), quickSaveMenu);
|
||||
quickSave->setShortcut(tr("Shift+F%1").arg(i));
|
||||
connect(quickSave, &QAction::triggered, [this, i]() { m_controller->saveState(i); });
|
||||
m_gameActions.append(quickSave);
|
||||
m_nonMpActions.append(quickSave);
|
||||
addControlledAction(quickSaveMenu, quickSave, QString("quickSave.%1").arg(i));
|
||||
}
|
||||
|
||||
|
@ -861,6 +886,7 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
frameAdvance->setShortcut(tr("Ctrl+N"));
|
||||
connect(frameAdvance, SIGNAL(triggered()), m_controller, SLOT(frameAdvance()));
|
||||
m_gameActions.append(frameAdvance);
|
||||
m_nonMpActions.append(frameAdvance);
|
||||
addControlledAction(emulationMenu, frameAdvance, "frameAdvance");
|
||||
|
||||
emulationMenu->addSeparator();
|
||||
|
@ -901,6 +927,7 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
rewind->setShortcut(tr("`"));
|
||||
connect(rewind, SIGNAL(triggered()), m_controller, SLOT(rewind()));
|
||||
m_gameActions.append(rewind);
|
||||
m_nonMpActions.append(rewind);
|
||||
addControlledAction(emulationMenu, rewind, "rewind");
|
||||
|
||||
QAction* frameRewind = new QAction(tr("Step backwards"), emulationMenu);
|
||||
|
@ -909,6 +936,7 @@ void Window::setupMenu(QMenuBar* menubar) {
|
|||
m_controller->rewind(1);
|
||||
});
|
||||
m_gameActions.append(frameRewind);
|
||||
m_nonMpActions.append(frameRewind);
|
||||
addControlledAction(emulationMenu, frameRewind, "frameRewind");
|
||||
|
||||
ConfigOption* videoSync = m_config->addOption("videoSync");
|
||||
|
|
|
@ -69,6 +69,8 @@ public slots:
|
|||
|
||||
void replaceROM();
|
||||
|
||||
void multiplayerChanged();
|
||||
|
||||
void importSharkport();
|
||||
void exportSharkport();
|
||||
|
||||
|
@ -149,6 +151,7 @@ private:
|
|||
GameController* m_controller;
|
||||
Display* m_display;
|
||||
QList<QAction*> m_gameActions;
|
||||
QList<QAction*> m_nonMpActions;
|
||||
QMap<int, QAction*> m_frameSizes;
|
||||
LogController m_log;
|
||||
LogView* m_logView;
|
||||
|
|
Loading…
Reference in New Issue