Files
melonDS/src/frontend/qt_sdl/InputConfig/InputConfigDialog.h
Jakly e9446fa9dc implement 3 configurable and toggleable framerate targets (#2159)
This pr allows for configuring the framerate target and adds support for two other framerate targets, a "fastforward" and "slowmo" target which can be enabled via either a toggle or holding a button.
this allows for supporting a more accurate framerate target and allows for users to slow down the speed of gameplay if they so desire
2024-09-29 09:30:13 +02:00

145 lines
3.4 KiB
C++

/*
Copyright 2016-2024 melonDS team
This file is part of melonDS.
melonDS is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with melonDS. If not, see http://www.gnu.org/licenses/.
*/
#ifndef INPUTCONFIGDIALOG_H
#define INPUTCONFIGDIALOG_H
#include <QDialog>
#include <QPushButton>
#include <initializer_list>
#include "Config.h"
#include "EmuInstance.h"
static constexpr int keypad_num = 12;
static constexpr std::initializer_list<int> hk_addons =
{
HK_SolarSensorIncrease,
HK_SolarSensorDecrease,
};
static constexpr std::initializer_list<const char*> hk_addons_labels =
{
"[Boktai] Sunlight + ",
"[Boktai] Sunlight - ",
};
static_assert(hk_addons.size() == hk_addons_labels.size());
static constexpr std::initializer_list<int> hk_general =
{
HK_Pause,
HK_Reset,
HK_FrameStep,
HK_FastForward,
HK_FastForwardToggle,
HK_SlowMo,
HK_SlowMoToggle,
HK_FrameLimitToggle,
HK_FullscreenToggle,
HK_Lid,
HK_Mic,
HK_SwapScreens,
HK_SwapScreenEmphasis,
HK_PowerButton,
HK_VolumeUp,
HK_VolumeDown
};
static constexpr std::initializer_list<const char*> hk_general_labels =
{
"Pause/resume",
"Reset",
"Frame step",
"Fast forward",
"Toggle fast forward",
"Slow mo",
"Toggle slow mo",
"Toggle FPS limit",
"Toggle fullscreen",
"Close/open lid",
"Microphone",
"Swap screens",
"Swap screen emphasis",
"DSi Power button",
"DSi Volume up",
"DSi Volume down"
};
static_assert(hk_general.size() == hk_general_labels.size());
namespace Ui { class InputConfigDialog; }
class InputConfigDialog;
class InputConfigDialog : public QDialog
{
Q_OBJECT
public:
explicit InputConfigDialog(QWidget* parent);
~InputConfigDialog();
SDL_Joystick* getJoystick();
static InputConfigDialog* currentDlg;
static InputConfigDialog* openDlg(QWidget* parent)
{
if (currentDlg)
{
currentDlg->activateWindow();
return currentDlg;
}
currentDlg = new InputConfigDialog(parent);
currentDlg->open();
return currentDlg;
}
static void closeDlg()
{
currentDlg = nullptr;
}
private slots:
void on_InputConfigDialog_accepted();
void on_InputConfigDialog_rejected();
void on_btnKeyMapSwitch_clicked();
void on_btnJoyMapSwitch_clicked();
void on_cbxJoystick_currentIndexChanged(int id);
private:
void populatePage(QWidget* page,
const std::initializer_list<const char*>& labels,
int* keymap, int* joymap);
void setupKeypadPage();
Ui::InputConfigDialog* ui;
EmuInstance* emuInstance;
int keypadKeyMap[12], keypadJoyMap[12];
int addonsKeyMap[hk_addons.size()], addonsJoyMap[hk_addons.size()];
int hkGeneralKeyMap[hk_general.size()], hkGeneralJoyMap[hk_general.size()];
int joystickID;
};
#endif // INPUTCONFIGDIALOG_H