363 lines
9.3 KiB
C++
363 lines
9.3 KiB
C++
/* 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 <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "bagel/hodjnpodj/hnplibs/stdafx.h"
|
|
#include "bagel/hodjnpodj/hnplibs/button.h"
|
|
#include "bagel/hodjnpodj/crypt/optn.h"
|
|
#include "bagel/hodjnpodj/crypt/resource.h"
|
|
|
|
namespace Bagel {
|
|
namespace HodjNPodj {
|
|
namespace Crypt {
|
|
|
|
static CColorButton *pOKButton = nullptr; // OKAY button on scroll
|
|
static CColorButton *pCancelButton = nullptr; // Cancel button on scroll
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COptn dialog
|
|
|
|
|
|
COptn::COptn(
|
|
CWnd* pParent /*=nullptr*/,
|
|
CPalette *pPalette /*=nullptr*/,
|
|
int nLttrsSlvd /*LSLVD_DEFAULT*/,
|
|
int nTime /*TIME_DEFAULT*/
|
|
)
|
|
: CBmpDialog(pParent, pPalette, IDD_USER_OPTIONS, ".\\ART\\SSCROLL.BMP")
|
|
|
|
{
|
|
//{{AFX_DATA_INIT(COptn)
|
|
m_nTimeIndex[0] = 15;
|
|
m_nTimeIndex[1] = 20;
|
|
m_nTimeIndex[2] = 25;
|
|
m_nTimeIndex[3] = 30;
|
|
m_nTimeIndex[4] = 35;
|
|
m_nTimeIndex[5] = 40;
|
|
m_nTimeIndex[6] = 45;
|
|
m_nTimeIndex[7] = 50;
|
|
m_nTimeIndex[8] = 60;
|
|
m_nTimeIndex[9] = 70;
|
|
m_nTimeIndex[10] = 80;
|
|
m_nTimeIndex[11] = 90;
|
|
m_nTimeIndex[12] = 120;
|
|
m_nTimeIndex[13] = 150;
|
|
m_nTimeIndex[14] = 180;
|
|
m_nTimeIndex[15] = 240;
|
|
m_nTimeIndex[16] = 300;
|
|
m_nTimeIndex[17] = 589;
|
|
m_nTimeIndex[18] = 601;
|
|
|
|
pGamePalette = pPalette;
|
|
|
|
m_nTime = TimeToIndex(nTime);
|
|
m_nLttrsSlvd = nLttrsSlvd;
|
|
|
|
m_pLttrsSlvd = nullptr;
|
|
m_pTime = nullptr;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
COptn::~COptn() {
|
|
if (m_pLttrsSlvd != nullptr) {
|
|
delete m_pLttrsSlvd;
|
|
m_pLttrsSlvd = nullptr;
|
|
}
|
|
|
|
if (m_pTime != nullptr) {
|
|
delete m_pTime;
|
|
m_pLttrsSlvd = nullptr;
|
|
}
|
|
|
|
CBmpDialog::OnDestroy();
|
|
}
|
|
|
|
int COptn::TimeToIndex(int nTime) {
|
|
int nLow;
|
|
|
|
/***********************************
|
|
* Seaches ordered array in n time. *
|
|
***********************************/
|
|
for (nLow = 0; nLow < TIME_TABLE ; nLow++) {
|
|
if (m_nTimeIndex[nLow] == nTime)
|
|
return (int)nLow;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void COptn::DoDataExchange(CDataExchange* pDX) {
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(COptn)
|
|
DDX_Control(pDX, IDC_LTTRSSLVD, m_LttrsSlvd);
|
|
DDX_Control(pDX, IDC_TIME, m_Time);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(COptn, CDialog)
|
|
//{{AFX_MSG_MAP(COptn)
|
|
ON_WM_PAINT()
|
|
ON_WM_ERASEBKGND()
|
|
ON_WM_HSCROLL()
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// COptn message handlers
|
|
|
|
bool COptn::OnInitDialog() {
|
|
CRect statsRect; // game stats displays
|
|
int nStat_col_offset; // game stats placement
|
|
int nStat_row_offset;
|
|
int nStatWidth, nStatHeight;
|
|
bool bAssertCheck;
|
|
CDC *pDC;
|
|
|
|
CBmpDialog::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
m_chTime[0] = "15 Seconds";
|
|
m_chTime[1] = "20 Seconds";
|
|
m_chTime[2] = "25 Seconds";
|
|
m_chTime[3] = "30 Seconds";
|
|
m_chTime[4] = "35 Seconds";
|
|
m_chTime[5] = "40 Seconds";
|
|
m_chTime[6] = "45 Seconds";
|
|
m_chTime[7] = "50 Seconds";
|
|
m_chTime[8] = "60 Seconds";
|
|
m_chTime[9] = "70 Seconds";
|
|
m_chTime[10] = "80 Seconds";
|
|
m_chTime[11] = "90 Seconds";
|
|
m_chTime[12] = "120 Seconds";
|
|
m_chTime[13] = "150 Seconds";
|
|
m_chTime[14] = "3 Minutes";
|
|
m_chTime[15] = "4 Minutes";
|
|
m_chTime[16] = "5 Minutes";
|
|
m_chTime[17] = "10 Minutes";
|
|
m_chTime[18] = "None";
|
|
|
|
pDC = GetDC();
|
|
|
|
nStat_col_offset = STAT_BOX_COL; // setup the Letters Solved
|
|
nStat_row_offset = STAT_BOX_ROW; // stat display box
|
|
nStatWidth = STAT_BOX_WIDTH;
|
|
nStatHeight = STAT_BOX_HEIGHT;
|
|
statsRect.SetRect(
|
|
nStat_col_offset,
|
|
nStat_row_offset,
|
|
nStat_col_offset + nStatWidth,
|
|
nStat_row_offset + nStatHeight
|
|
);
|
|
|
|
if ((m_pLttrsSlvd = new CText()) != nullptr) {
|
|
bAssertCheck = (*m_pLttrsSlvd).SetupText(pDC, pGamePalette, &statsRect, JUSTIFY_LEFT);
|
|
ASSERT(bAssertCheck); // initialize the text objext
|
|
}
|
|
m_LttrsSlvd.SetScrollRange(MIN_LTTRSSLVD, MAX_LTTRSSLVD, false); // setup Letters Solved defaults
|
|
m_LttrsSlvd.SetScrollPos(m_nLttrsSlvd, true);
|
|
|
|
nStat_row_offset += BOX_ROW_OFFSET; // Time stat display box
|
|
statsRect.SetRect(
|
|
nStat_col_offset,
|
|
nStat_row_offset,
|
|
nStat_col_offset + nStatWidth,
|
|
nStat_row_offset + nStatHeight
|
|
);
|
|
|
|
if ((m_pTime = new CText()) != nullptr) {
|
|
bAssertCheck = (*m_pTime).SetupText(pDC, pGamePalette, &statsRect, JUSTIFY_LEFT);
|
|
ASSERT(bAssertCheck); // initialize the text objext
|
|
}
|
|
|
|
m_Time.SetScrollRange(MIN_INDEX_TIME, MAX_INDEX_TIME, false); // Time scroll bar defaults
|
|
m_Time.SetScrollPos(m_nTime, true);
|
|
|
|
if ((pOKButton = new CColorButton) != nullptr) { // build a color QUIT button to let us exit
|
|
(*pOKButton).SetPalette(pGamePalette); // set the palette to use
|
|
(*pOKButton).SetControl(IDOK, this); // tie to the dialog control
|
|
}
|
|
|
|
if ((pCancelButton = new CColorButton) != nullptr) { // build a color QUIT button to let us exit
|
|
(*pCancelButton).SetPalette(pGamePalette); // set the palette to use
|
|
(*pCancelButton).SetControl(IDCANCEL, this); // tie to the dialog control
|
|
}
|
|
|
|
ReleaseDC(pDC);
|
|
return true; // return true unless you set the focus to a control
|
|
}
|
|
|
|
void COptn::OnDestroy() {
|
|
CBmpDialog::OnDestroy();
|
|
}
|
|
|
|
|
|
void COptn::OnHScroll(unsigned int nSBCode, unsigned int nPos, CScrollBar* pScrollBar) {
|
|
// TODO: Add your message handler code here and/or call default
|
|
CDC *pDC;
|
|
bool bAssertCheck;
|
|
char msg[64];
|
|
|
|
pDC = GetDC();
|
|
|
|
if (pScrollBar->GetDlgCtrlID() == IDC_LTTRSSLVD) {
|
|
switch (nSBCode) {
|
|
|
|
case SB_LINERIGHT:
|
|
m_nLttrsSlvd++;
|
|
break;
|
|
|
|
case SB_PAGERIGHT:
|
|
m_nLttrsSlvd += (int) MAX_LTTRSSLVD / 5; // magic # 5 = five divisions
|
|
break;
|
|
|
|
case SB_RIGHT:
|
|
m_nLttrsSlvd = MAX_LTTRSSLVD;
|
|
break;
|
|
|
|
case SB_LINELEFT:
|
|
m_nLttrsSlvd--;
|
|
break;
|
|
|
|
case SB_PAGELEFT:
|
|
m_nLttrsSlvd -= (int) MAX_LTTRSSLVD / 5; // magic # 5 = five divisions
|
|
break;
|
|
|
|
case SB_LEFT:
|
|
m_nLttrsSlvd = MIN_LTTRSSLVD;
|
|
break;
|
|
|
|
case SB_THUMBPOSITION:
|
|
case SB_THUMBTRACK:
|
|
m_nLttrsSlvd = (int) nPos;
|
|
break;
|
|
|
|
} // end switch
|
|
|
|
if (m_nLttrsSlvd < MIN_LTTRSSLVD)
|
|
m_nLttrsSlvd = MIN_LTTRSSLVD;
|
|
if (m_nLttrsSlvd > MAX_LTTRSSLVD)
|
|
m_nLttrsSlvd = MAX_LTTRSSLVD;
|
|
|
|
Common::sprintf_s(msg, "Letters Solved: %d", m_nLttrsSlvd);
|
|
bAssertCheck = (*m_pLttrsSlvd).DisplayString(pDC, msg, FONT_SIZE, FW_BOLD, OPTIONS_COLOR);
|
|
ASSERT(bAssertCheck);
|
|
pScrollBar->SetScrollPos(m_nLttrsSlvd, true);
|
|
|
|
} else if (pScrollBar->GetDlgCtrlID() == IDC_TIME) {
|
|
switch (nSBCode) {
|
|
|
|
case SB_LINERIGHT:
|
|
m_nTime++;
|
|
break;
|
|
case SB_PAGERIGHT:
|
|
m_nTime += MAX_INDEX_TIME / 5; // want 5 pagerights end to end
|
|
break;
|
|
case SB_RIGHT:
|
|
m_nTime = MAX_INDEX_TIME;
|
|
break;
|
|
case SB_LINELEFT:
|
|
m_nTime--;
|
|
break;
|
|
case SB_PAGELEFT:
|
|
m_nTime -= MAX_INDEX_TIME / 5; // want 5 pagerights end to end
|
|
break;
|
|
case SB_LEFT:
|
|
m_nTime = 0;
|
|
break;
|
|
case SB_THUMBPOSITION:
|
|
case SB_THUMBTRACK:
|
|
m_nTime = (int) nPos;
|
|
break;
|
|
} // end switch
|
|
|
|
if (m_nTime < MIN_INDEX_TIME)
|
|
m_nTime = MIN_INDEX_TIME;
|
|
if (m_nTime > MAX_INDEX_TIME)
|
|
m_nTime = MAX_INDEX_TIME;
|
|
|
|
Common::sprintf_s(msg, "Time Limit: %s", m_chTime[m_nTime].c_str());
|
|
|
|
bAssertCheck = (*m_pTime).DisplayString(pDC, msg, FONT_SIZE, FW_BOLD, OPTIONS_COLOR);
|
|
ASSERT(bAssertCheck); // paint the text
|
|
|
|
pScrollBar->SetScrollPos(m_nTime, true);
|
|
} // end if
|
|
|
|
ReleaseDC(pDC);
|
|
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
|
|
void COptn::OnPaint() {
|
|
CDC *pDC;
|
|
bool bAssertCheck;
|
|
char msg[64];
|
|
|
|
CBmpDialog::OnPaint();
|
|
// Do not call CDialog::OnPaint() for painting messages
|
|
|
|
pDC = GetDC();
|
|
|
|
Common::sprintf_s(msg, "Letters Solved: %d", m_nLttrsSlvd); // Display Letters Solved stats
|
|
bAssertCheck = (*m_pLttrsSlvd).DisplayString(pDC, msg, FONT_SIZE, FW_BOLD, OPTIONS_COLOR);
|
|
ASSERT(bAssertCheck);
|
|
|
|
Common::sprintf_s(msg, "Time: %s", m_chTime[m_nTime].c_str()); // Display Time stats
|
|
bAssertCheck = (*m_pTime).DisplayString(pDC, msg, FONT_SIZE, FW_BOLD, OPTIONS_COLOR);
|
|
ASSERT(bAssertCheck);
|
|
|
|
ReleaseDC(pDC);
|
|
}
|
|
|
|
bool COptn::OnEraseBkgnd(CDC *pDC) {
|
|
return true;
|
|
}
|
|
|
|
void COptn::OnOK() {
|
|
m_nTime = m_nTimeIndex[m_nTime];
|
|
ClearDialogImage();
|
|
EndDialog(IDOK);
|
|
// CDialog::OnOK();
|
|
}
|
|
|
|
void COptn::OnCancel() {
|
|
ClearDialogImage();
|
|
EndDialog(0);
|
|
}
|
|
|
|
void COptn::ClearDialogImage() {
|
|
if (pOKButton != nullptr) { // release the button
|
|
delete pOKButton;
|
|
pOKButton = nullptr;
|
|
}
|
|
|
|
if (pCancelButton != nullptr) { // release the button
|
|
delete pCancelButton;
|
|
pCancelButton = nullptr;
|
|
}
|
|
|
|
ValidateRect(nullptr);
|
|
}
|
|
|
|
} // namespace Crypt
|
|
} // namespace HodjNPodj
|
|
} // namespace Bagel
|