288 lines
6.6 KiB
C++
288 lines
6.6 KiB
C++
/*
|
|
** Command & Conquer Renegade(tm)
|
|
** Copyright 2025 Electronic Arts Inc.
|
|
**
|
|
** 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/>.
|
|
*/
|
|
|
|
// WWConfigDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "wwconfig.h"
|
|
#include "wwconfigdlg.h"
|
|
#include "videoconfigdialog.h"
|
|
#include "audioconfigdialog.h"
|
|
#include "performanceconfigdialog.h"
|
|
#include "locale_api.h"
|
|
#include "wwconfig_ids.h"
|
|
|
|
extern int GlobalExitValue;
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// CWWConfigDlg
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
CWWConfigDlg::CWWConfigDlg (CWnd *pParent)
|
|
: CurrentTab (0),
|
|
CDialog(CWWConfigDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CWWConfigDlg)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
|
return ;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// DoDataExchange
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
void
|
|
CWWConfigDlg::DoDataExchange (CDataExchange *pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWWConfigDlg)
|
|
DDX_Control(pDX, IDC_TAB_CTRL, m_TabCtrl);
|
|
//}}AFX_DATA_MAP
|
|
return ;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CWWConfigDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CWWConfigDlg)
|
|
ON_WM_PAINT()
|
|
ON_WM_QUERYDRAGICON()
|
|
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_CTRL, OnSelchangeTabCtrl)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// OnInitDialog
|
|
//
|
|
// Modified: 12/06/2001 by MML - Retrieving strings from Locomoto file.
|
|
///////////////////////////////////////////////////////////////////
|
|
BOOL
|
|
CWWConfigDlg::OnInitDialog (void)
|
|
{
|
|
char string[ _MAX_PATH ];
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
// Set the icon for this dialog. The framework does this automatically
|
|
// when the application's main window is not a dialog
|
|
SetIcon (m_hIcon, TRUE);
|
|
SetIcon (m_hIcon, FALSE);
|
|
|
|
//
|
|
// Set Title of Dialog.
|
|
//
|
|
Locale_GetString( IDS_WWCONFIG_TITLE, string );
|
|
SetWindowText((LPCTSTR) string );
|
|
|
|
//
|
|
// Set text on buttons.
|
|
//
|
|
Locale_GetString( IDS_OK, string );
|
|
SetDlgItemText( IDOK, string );
|
|
|
|
Locale_GetString( IDS_CANCEL, string );
|
|
SetDlgItemText( IDCANCEL, string );
|
|
|
|
//
|
|
// Add a tab to the dialog for video configuration
|
|
//
|
|
TC_ITEM tab_info = { 0 };
|
|
|
|
Locale_GetString( IDS_VIDEO_TAB, string );
|
|
tab_info.mask = TCIF_TEXT;
|
|
// tab_info.pszText = "Video";
|
|
tab_info.pszText = string;
|
|
m_TabCtrl.InsertItem (0xFF, &tab_info);
|
|
|
|
//
|
|
// Add a tab to the dialog for audio configuration
|
|
//
|
|
Locale_GetString( IDS_SOUND_TAB, string );
|
|
tab_info.mask = TCIF_TEXT;
|
|
// tab_info.pszText = "Sound";
|
|
tab_info.pszText = string;
|
|
m_TabCtrl.InsertItem (0xFF, &tab_info);
|
|
|
|
//
|
|
// Add a tab to the dialog for performance configuration
|
|
//
|
|
Locale_GetString( IDS_PERFORMANCE_TAB, string );
|
|
tab_info.mask = TCIF_TEXT;
|
|
// tab_info.pszText = "Performance";
|
|
tab_info.pszText = string;
|
|
m_TabCtrl.InsertItem (0xFF, &tab_info);
|
|
|
|
//
|
|
// Get the display rectangle of the tab control
|
|
//
|
|
CRect tab_rect;
|
|
m_TabCtrl.GetWindowRect (&tab_rect);
|
|
m_TabCtrl.AdjustRect (FALSE, &tab_rect);
|
|
ScreenToClient (&tab_rect);
|
|
|
|
VideoConfigDialogClass *video_page = new VideoConfigDialogClass (this);
|
|
AudioConfigDialogClass *audio_page = new AudioConfigDialogClass (this);
|
|
PerformanceConfigDialogClass *performance_page = new PerformanceConfigDialogClass (this);
|
|
|
|
video_page->SetWindowPos ( NULL, tab_rect.left, tab_rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
|
|
audio_page->SetWindowPos ( NULL, tab_rect.left, tab_rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
|
|
performance_page->SetWindowPos ( NULL, tab_rect.left, tab_rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
|
|
|
|
ConfigPages.Add ( video_page );
|
|
ConfigPages.Add ( audio_page );
|
|
ConfigPages.Add ( performance_page );
|
|
|
|
//
|
|
// Display the first category page
|
|
//
|
|
ConfigPages[0]->ShowWindow( SW_SHOW );
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// OnPaint
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
void
|
|
CWWConfigDlg::OnPaint (void)
|
|
{
|
|
if (IsIconic())
|
|
{
|
|
CPaintDC dc(this);
|
|
|
|
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
|
|
|
|
// Center icon in client rectangle
|
|
int cxIcon = GetSystemMetrics(SM_CXICON);
|
|
int cyIcon = GetSystemMetrics(SM_CYICON);
|
|
CRect rect;
|
|
GetClientRect(&rect);
|
|
int x = (rect.Width() - cxIcon + 1) / 2;
|
|
int y = (rect.Height() - cyIcon + 1) / 2;
|
|
|
|
// Draw the icon
|
|
dc.DrawIcon(x, y, m_hIcon);
|
|
}
|
|
else
|
|
{
|
|
CDialog::OnPaint();
|
|
}
|
|
|
|
return ;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// OnQueryDragIcon
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
HCURSOR
|
|
CWWConfigDlg::OnQueryDragIcon (void)
|
|
{
|
|
return (HCURSOR) m_hIcon;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// OnOK
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
void
|
|
CWWConfigDlg::OnOK (void)
|
|
{
|
|
GlobalExitValue=0;
|
|
//
|
|
// Loop over each page and ask them to save themselves
|
|
//
|
|
for (int index = 0; index < ConfigPages.Count (); index ++) {
|
|
ConfigPages[index]->SendMessage (WM_USER + 101);
|
|
}
|
|
|
|
CDialog::OnOK ();
|
|
return ;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// OnSelchangeTabCtrl
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
void
|
|
CWWConfigDlg::OnSelchangeTabCtrl
|
|
(
|
|
NMHDR * pNMHDR,
|
|
LRESULT * pResult
|
|
)
|
|
{
|
|
(*pResult) = 0;
|
|
|
|
//
|
|
// Check to see if the user has selected a new tab
|
|
//
|
|
int newtab = m_TabCtrl.GetCurSel ();
|
|
if (CurrentTab != newtab) {
|
|
|
|
//
|
|
// Hide the old tab
|
|
//
|
|
if (CurrentTab < ConfigPages.Count () && ConfigPages[CurrentTab] != NULL) {
|
|
ConfigPages[CurrentTab]->ShowWindow (SW_HIDE);
|
|
}
|
|
|
|
//
|
|
// Show the new tab
|
|
//
|
|
if (ConfigPages[newtab] != NULL) {
|
|
ConfigPages[newtab]->ShowWindow (SW_SHOW);
|
|
}
|
|
|
|
//
|
|
// Remember what our new current tab is
|
|
//
|
|
CurrentTab = newtab;
|
|
}
|
|
|
|
return ;
|
|
}
|
|
|
|
|
|
void CWWConfigDlg::OnCancel()
|
|
{
|
|
// TODO: Add extra cleanup here
|
|
GlobalExitValue=1;
|
|
CDialog::OnCancel();
|
|
}
|