/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program 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. * * This program 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 this program. If not, see . * */ #include "bagel/afxwin.h" #include "bagel/hodjnpodj/hnplibs/dibapi.h" #include "bagel/hodjnpodj/hnplibs/stdafx.h" #include "bagel/hodjnpodj/hnplibs/mainmenu.h" #include "bagel/hodjnpodj/hnplibs/audiocfg.h" #include "bagel/hodjnpodj/hnplibs/bitmaps.h" #include "bagel/hodjnpodj/hnplibs/rules.h" #include "bagel/hodjnpodj/hnplibs/cbofdlg.h" #include "bagel/hodjnpodj/hnplibs/button.h" #include "bagel/hodjnpodj/hnplibs/text.h" #include "bagel/hodjnpodj/hodjnpodj.h" namespace Bagel { namespace HodjNPodj { BEGIN_MESSAGE_MAP(CMainMenu, CBmpDialog) //{{AFX_MSG_MAP(CMainMenu) ON_WM_ERASEBKGND() ON_WM_PAINT() ON_WM_DESTROY() ON_BN_CLICKED(IDC_OPTIONS_RULES, CMainMenu::OnClickedRules) ON_BN_CLICKED(IDC_OPTIONS_NEWGAME, CMainMenu::OnClickedNewgame) ON_BN_CLICKED(IDC_OPTIONS_OPTIONS, CMainMenu::OnClickedOptions) ON_BN_CLICKED(IDC_OPTIONS_AUDIO, CMainMenu::OnClickedAudio) ON_BN_CLICKED(IDC_OPTIONS_RETURN, CMainMenu::OnClickedReturn) ON_BN_CLICKED(IDC_OPTIONS_QUIT, CMainMenu::OnClickedQuit) ON_BN_CLICKED(IDC_OPTIONS_HYPE, CMainMenu::OnClickedHype) //}}AFX_MSG_MAP END_MESSAGE_MAP() CMainMenu::CMainMenu(CWnd *pParent, CPalette *pPalette, unsigned int nFlags, FPFUNC pOptionsFunc, const char *pRulesFileName, const char *pWavFileName, LPGAMESTRUCT pGameParams) : CBmpDialog(pParent, pPalette, IDD_OPTIONS_DIALOG, ".\\ART\\OSCROLL.BMP") { // Can't access null pointers assert(pParent != nullptr); assert(pPalette != nullptr); assert(pRulesFileName != nullptr); // Inits _rulesFilename = pRulesFileName; _wavFilename = pWavFileName; _flags = nFlags; _gameParams = pGameParams; if (!(_flags & NO_OPTIONS)) { assert(pOptionsFunc != nullptr); } _optionsFunction = pOptionsFunc; //{{AFX_DATA_INIT(CMainMenu) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CMainMenu::DoDataExchange(CDataExchange* pDX) { CBmpDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMainMenu) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } void CMainMenu::clearButtons() { delete _rulesButton; _rulesButton = nullptr; delete _newGameButton; _newGameButton = nullptr; delete _optionsButton; _optionsButton = nullptr; delete _audioButton; _audioButton = nullptr; delete _returnButton; _returnButton = nullptr; delete _quitButton; _quitButton = nullptr; delete _hypeButton; _hypeButton = nullptr; } void CMainMenu::ClearDialogImage() { clearButtons(); if (m_pDlgBackground != nullptr) InvalidateRect(nullptr, false); } void CMainMenu::OnDestroy() { CBmpDialog::OnDestroy(); clearButtons(); } bool CMainMenu::OnInitDialog() { CWnd *pWndTemp; CBmpDialog::OnInitDialog(); // do basic dialog initialization // Set up replacement color buttons _rulesButton = new CColorButton(); _rulesButton->SetPalette(m_pPalette); _rulesButton->SetControl(IDC_OPTIONS_RULES, this); _newGameButton = new CColorButton(); _newGameButton->SetPalette(m_pPalette); _newGameButton->SetControl(IDC_OPTIONS_NEWGAME, this); _optionsButton = new CColorButton(); _optionsButton->SetPalette(m_pPalette); _optionsButton->SetControl(IDC_OPTIONS_OPTIONS, this); _audioButton = new CColorButton(); _audioButton->SetPalette(m_pPalette); _audioButton->SetControl(IDC_OPTIONS_AUDIO, this); _returnButton = new CColorButton(); _returnButton->SetPalette(m_pPalette); _returnButton->SetControl(IDC_OPTIONS_RETURN, this); _quitButton = new CColorButton(); _quitButton->SetPalette(m_pPalette); _quitButton->SetControl(IDC_OPTIONS_QUIT, this); // Add the Hype Button if running the Maze O' Doom demo if (g_engine->isMazeODoomDemo()) { CRect optionsRect, audioRect; _optionsButton->GetWindowRect(&optionsRect); _audioButton->GetWindowRect(&audioRect); CRect hypeRect(optionsRect.right + 5, optionsRect.top, optionsRect.right + 50, audioRect.bottom); _hypeButton = new CColorButton(); _hypeButton->Create("?", BS_OWNERDRAW | WS_CHILD | WS_VISIBLE, hypeRect, this, IDC_OPTIONS_HYPE); _hypeButton->SetPalette(m_pPalette); _hypeFont.CreateFont(24, 0, 0, 0, FW_BOLD, 0, 0, 0, 0, OUT_RASTER_PRECIS, 0, PROOF_QUALITY, FF_ROMAN, "MS Sans Serif"); _hypeButton->SetFont(&_hypeFont); } // Disable the Rules button if told to do so if (_flags & NO_RULES) { pWndTemp = GetDlgItem(IDC_OPTIONS_RULES); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } // Disable the NewGame button if told to do so if (_flags & NO_NEWGAME) { pWndTemp = GetDlgItem(IDC_OPTIONS_NEWGAME); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } // Disable the Options button if told to do so if (_flags & NO_OPTIONS) { pWndTemp = GetDlgItem(IDC_OPTIONS_OPTIONS); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } // Disable the Audio button if told to do so if (_flags & NO_AUDIO) { pWndTemp = GetDlgItem(IDC_OPTIONS_AUDIO); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } // Disable the Return button if told to do so if (_flags & NO_RETURN) { pWndTemp = GetDlgItem(IDC_OPTIONS_RETURN); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } // Disable the Return button if told to do so if (_flags & NO_QUIT) { pWndTemp = GetDlgItem(IDC_OPTIONS_QUIT); assert(pWndTemp != nullptr); if (pWndTemp != nullptr) pWndTemp->EnableWindow(false); } return true; } bool CMainMenu::OnEraseBkgnd(CDC *pDC) { return true; } void CMainMenu::OnPaint() { CBmpDialog::OnPaint(); } void CMainMenu::OnClickedRules() { CWnd *pControl; // Load the rules CRules RulesDlg(this, _rulesFilename, m_pPalette, _wavFilename); // Display the rules RulesDlg.DoModal(); SetDefID(IDC_OPTIONS_OPTIONS); if (_flags & NO_RETURN) { SetDefID(IDC_OPTIONS_NEWGAME); pControl = GetDlgItem(IDC_OPTIONS_NEWGAME); } else { SetDefID(IDC_OPTIONS_RETURN); pControl = GetDlgItem(IDC_OPTIONS_RETURN); } GotoDlgCtrl(pControl); } void CMainMenu::OnClickedHype() { CWnd *pControl; // Load the hype CRules hypeDlg(this, "hype.txt", m_pPalette, nullptr); // Display the dialog hypeDlg.DoModal(); SetDefID(IDC_OPTIONS_OPTIONS); if (_flags & NO_RETURN) { SetDefID(IDC_OPTIONS_NEWGAME); pControl = GetDlgItem(IDC_OPTIONS_NEWGAME); } else { SetDefID(IDC_OPTIONS_RETURN); pControl = GetDlgItem(IDC_OPTIONS_RETURN); } GotoDlgCtrl(pControl); } void CMainMenu::OnClickedNewgame() { // User has chosen to start a new game ClearDialogImage(); EndDialog(IDC_OPTIONS_NEWGAME); } void CMainMenu::OnClickedOptions() { CWnd *pControl; SetDefID(IDC_OPTIONS_RULES); if (_flags & NO_RETURN) { SetDefID(IDC_OPTIONS_NEWGAME); pControl = GetDlgItem(IDC_OPTIONS_NEWGAME); } else { SetDefID(IDC_OPTIONS_RETURN); pControl = GetDlgItem(IDC_OPTIONS_RETURN); } GotoDlgCtrl(pControl); // Call the user defined sub-options (we are the parent) if (_optionsFunction != nullptr) (_optionsFunction)(this); } void CMainMenu::OnClickedAudio() { CWnd *pControl; SetDefID(IDC_OPTIONS_RULES); if (_flags & NO_RETURN) { SetDefID(IDC_OPTIONS_NEWGAME); pControl = GetDlgItem(IDC_OPTIONS_NEWGAME); } else { SetDefID(IDC_OPTIONS_RETURN); pControl = GetDlgItem(IDC_OPTIONS_RETURN); } GotoDlgCtrl(pControl); CAudioCfgDlg dlgAudioCfg(this, m_pPalette, IDD_AUDIOCFG); if (_gameParams != nullptr) { _gameParams->bMusicEnabled = GetPrivateProfileInt("Meta", "Music", true, "HODJPODJ.INI"); _gameParams->bSoundEffectsEnabled = GetPrivateProfileInt("Meta", "SoundEffects", true, "HODJPODJ.INI"); } } void CMainMenu::OnOK() { // Don't do anything } void CMainMenu::OnCancel() { // User is returning to Mini-game (only if Continue is not disabled) if (!(_flags & NO_RETURN)) { ClearDialogImage(); EndDialog(IDC_OPTIONS_RETURN); } } void CMainMenu::OnClickedReturn() { // User is returning to Mini-game ClearDialogImage(); EndDialog(IDC_OPTIONS_RETURN); } void CMainMenu::OnClickedQuit() { // User hit the Quit Button ClearDialogImage(); EndDialog(IDC_OPTIONS_QUIT); } } // namespace HodjNPodj } // namespace Bagel