This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/WWConfig/WWConfigDlg.cpp

289 lines
6.6 KiB
C++
Raw Permalink Normal View History

/*
** 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();
}