stella/src/gui/GameInfoDialog.hxx

170 lines
6.1 KiB
C++

//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2020 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef GAME_INFO_DIALOG_HXX
#define GAME_INFO_DIALOG_HXX
class OSystem;
class GuiObject;
class EditTextWidget;
class PopUpWidget;
class StaticTextWidget;
class RadioButtonGroup;
class TabWidget;
class SliderWidget;
#include "Dialog.hxx"
#include "Command.hxx"
#include "Props.hxx"
#include "HighScoresManager.hxx"
class GameInfoDialog : public Dialog, public CommandSender
{
public:
GameInfoDialog(OSystem& osystem, DialogContainer& parent,
const GUI::Font& font, GuiObject* boss, int max_w, int max_h);
virtual ~GameInfoDialog() = default;
private:
void loadConfig() override;
void saveConfig() override;
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void setDefaults() override;
// load the properties for the 'Emulation' tab
void loadEmulationProperties(const Properties& props);
// load the properties for the 'Console' tab
void loadConsoleProperties(const Properties& props);
// load the properties for the 'Controller' tab
void loadControllerProperties(const Properties& props);
// load the properties for the 'Cartridge' tab
void loadCartridgeProperties(const Properties& props);
// load the properties for the 'High Scores' tab
void loadHighScoresProperties(const Properties& props);
// load the properties of the 'High Scores' tab
void saveHighScoresProperties();
// update 'Controller' tab widgets
void updateControllerStates();
// erase SaveKey/AtariVox pages for current game
void eraseEEPROM();
// update 'High Scores' tab widgets
void updateHighScoresWidgets();
// set formatted memory value for given address field
void setAddressVal(EditTextWidget* address, EditTextWidget* val,
bool isBCD = true, uInt8 incVal = 0);
private:
TabWidget* myTab{nullptr};
// Emulation properties
PopUpWidget* myBSType{nullptr};
StaticTextWidget* myTypeDetected{nullptr};
StaticTextWidget* myStartBankLabel{nullptr};
PopUpWidget* myStartBank{nullptr};
PopUpWidget* myFormat{nullptr};
StaticTextWidget* myFormatDetected{nullptr};
SliderWidget* myVCenter{nullptr};
CheckboxWidget* myPhosphor{nullptr};
SliderWidget* myPPBlend{nullptr};
CheckboxWidget* mySound{nullptr};
// Console properties
RadioButtonGroup* myLeftDiffGroup{nullptr};
RadioButtonGroup* myRightDiffGroup{nullptr};
RadioButtonGroup* myTVTypeGroup{nullptr};
// Controller properties
StaticTextWidget* myLeftPortLabel{nullptr};
StaticTextWidget* myRightPortLabel{nullptr};
PopUpWidget* myLeftPort{nullptr};
StaticTextWidget* myLeftPortDetected{nullptr};
PopUpWidget* myRightPort{nullptr};
StaticTextWidget* myRightPortDetected{nullptr};
CheckboxWidget* mySwapPorts{nullptr};
CheckboxWidget* mySwapPaddles{nullptr};
StaticTextWidget* myEraseEEPROMLabel{nullptr};
ButtonWidget* myEraseEEPROMButton{nullptr};
StaticTextWidget* myEraseEEPROMInfo{nullptr};
CheckboxWidget* myMouseControl{nullptr};
PopUpWidget* myMouseX{nullptr};
PopUpWidget* myMouseY{nullptr};
SliderWidget* myMouseRange{nullptr};
// Cartridge properties
EditTextWidget* myName{nullptr};
EditTextWidget* myMD5{nullptr};
EditTextWidget* myManufacturer{nullptr};
EditTextWidget* myModelNo{nullptr};
EditTextWidget* myRarity{nullptr};
EditTextWidget* myNote{nullptr};
// High Scores properties
CheckboxWidget* myHighScores{nullptr};
StaticTextWidget* myPlayersLabel{nullptr};
PopUpWidget* myPlayers{nullptr};
StaticTextWidget* myPlayersAddressLabel{nullptr};
EditTextWidget* myPlayersAddress{nullptr};
EditTextWidget* myPlayersAddressVal{nullptr};
StaticTextWidget* myVariationsLabel{nullptr};
EditTextWidget* myVariations{nullptr};
StaticTextWidget* myVarAddressLabel{nullptr};
EditTextWidget* myVarAddress{nullptr};
EditTextWidget* myVarAddressVal{nullptr};
CheckboxWidget* myVarsBCD{nullptr};
CheckboxWidget* myVarsZeroBased{nullptr};
StaticTextWidget* myScoresLabel{nullptr};
StaticTextWidget* myScoreDigitsLabel{nullptr};
PopUpWidget* myScoreDigits{nullptr};
StaticTextWidget* myTrailingZeroesLabel{nullptr};
PopUpWidget* myTrailingZeroes{nullptr};
CheckboxWidget* myScoreBCD{nullptr};
StaticTextWidget* myScoreAddressesLabel[HSM::MAX_PLAYERS]{nullptr};
EditTextWidget* myScoreAddress[HSM::MAX_PLAYERS][HSM::MAX_SCORE_ADDR]{nullptr};
EditTextWidget* myScoreAddressVal[HSM::MAX_PLAYERS][HSM::MAX_SCORE_ADDR]{nullptr};
StaticTextWidget* myCurrentScoreLabel;
StaticTextWidget* myCurrentScore[HSM::MAX_PLAYERS];
enum {
kVCenterChanged = 'Vcch',
kPhosphorChanged = 'PPch',
kPPBlendChanged = 'PBch',
kLeftCChanged = 'LCch',
kRightCChanged = 'RCch',
kMCtrlChanged = 'MCch',
kEEButtonPressed = 'EEgb',
kHiScoresChanged = 'HSch',
};
// Game properties for currently loaded ROM
Properties myGameProperties;
private:
// Following constructors and assignment operators not supported
GameInfoDialog() = delete;
GameInfoDialog(const GameInfoDialog&) = delete;
GameInfoDialog(GameInfoDialog&&) = delete;
GameInfoDialog& operator=(const GameInfoDialog&) = delete;
GameInfoDialog& operator=(GameInfoDialog&&) = delete;
};
#endif