mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 15:41:39 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
251
Code/Tools/LevelEdit/DeviceSelectionDialog.cpp
Normal file
251
Code/Tools/LevelEdit/DeviceSelectionDialog.cpp
Normal file
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
** 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/>.
|
||||
*/
|
||||
|
||||
// DeviceSelectionDialog.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "leveledit.h"
|
||||
#include "deviceselectiondialog.h"
|
||||
#include "ww3d.h"
|
||||
#include "resource.h"
|
||||
#include "utils.h"
|
||||
#include "rddesc.h"
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CDeviceSelectionDialog dialog
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// CDeviceSelectionDialog
|
||||
//
|
||||
CDeviceSelectionDialog::CDeviceSelectionDialog
|
||||
(
|
||||
BOOL bLookupCachedInfo,
|
||||
CWnd* pParent /*=NULL*/
|
||||
)
|
||||
: m_iDeviceIndex (1),
|
||||
m_iBitsPerPixel (16),
|
||||
m_bLookupCachedInfo (bLookupCachedInfo),
|
||||
CDialog(CDeviceSelectionDialog::IDD, pParent)
|
||||
{
|
||||
//{{AFX_DATA_INIT(CDeviceSelectionDialog)
|
||||
// NOTE: the ClassWizard will add member initialization here
|
||||
//}}AFX_DATA_INIT
|
||||
return ;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DoDataExchange
|
||||
//
|
||||
void
|
||||
CDeviceSelectionDialog::DoDataExchange (CDataExchange* pDX)
|
||||
{
|
||||
// Allow the base class to process this message
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(CDeviceSelectionDialog)
|
||||
DDX_Control(pDX, IDC_RENDER_DEVICE_COMBO, m_deviceListComboBox);
|
||||
//}}AFX_DATA_MAP
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CDeviceSelectionDialog, CDialog)
|
||||
//{{AFX_MSG_MAP(CDeviceSelectionDialog)
|
||||
ON_CBN_SELCHANGE(IDC_RENDER_DEVICE_COMBO, OnSelchangeRenderDeviceCombo)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CDeviceSelectionDialog message handlers
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnInitDialog
|
||||
//
|
||||
BOOL
|
||||
CDeviceSelectionDialog::OnInitDialog (void)
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
//
|
||||
// Loop through all the devices and add them to the combobox
|
||||
//
|
||||
int device_count = WW3D::Get_Render_Device_Count ();
|
||||
int selected_index = 0;
|
||||
for (int index = 0; index < device_count; index ++) {
|
||||
|
||||
//
|
||||
// Add this device to the combobox
|
||||
//
|
||||
const char *name = WW3D::Get_Render_Device_Name(index);
|
||||
int combo_index = m_deviceListComboBox.InsertString (index, name);
|
||||
if (m_DriverName.CompareNoCase (name) == 0) {
|
||||
selected_index = combo_index;
|
||||
}
|
||||
|
||||
// Associate the index of this device with the item we just inserted
|
||||
m_deviceListComboBox.SetItemData (combo_index, index);
|
||||
}
|
||||
|
||||
// Check the '16bpp' radio by default
|
||||
SendDlgItemMessage (IDC_COLORDEPTH_16, BM_SETCHECK, (WPARAM)TRUE);
|
||||
|
||||
// Force the first entry in the combobox to be selected.
|
||||
//m_deviceListComboBox.SetCurSel (0);
|
||||
m_deviceListComboBox.SetCurSel (selected_index);
|
||||
|
||||
// Update the static controls on the dialog to reflect the device
|
||||
UpdateDeviceDescription ();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnSelchangeRenderDeviceCombo
|
||||
//
|
||||
void
|
||||
CDeviceSelectionDialog::OnSelchangeRenderDeviceCombo (void)
|
||||
{
|
||||
int index = m_deviceListComboBox.GetCurSel ();
|
||||
if (index != CB_ERR) {
|
||||
//WW3D::Set_Render_Device ();
|
||||
|
||||
// Update the static controls with the information from the device
|
||||
UpdateDeviceDescription ();
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// UpdateDeviceDescription
|
||||
//
|
||||
void
|
||||
CDeviceSelectionDialog::UpdateDeviceDescription (void)
|
||||
{
|
||||
const RenderDeviceDescClass &device_desc = WW3D::Get_Render_Device_Desc ();
|
||||
|
||||
//
|
||||
// Reload the static text controls on the dialog
|
||||
//
|
||||
SetDlgItemText (IDC_DRIVER_NAME, m_DriverName);
|
||||
SetDlgItemText (IDC_DEVICE_NAME_STATIC, device_desc.Get_Device_Name());
|
||||
SetDlgItemText (IDC_DEVICE_VENDOR_STATIC, device_desc.Get_Device_Vendor());
|
||||
SetDlgItemText (IDC_DEVICE_PLATFORM_STATIC, device_desc.Get_Device_Platform());
|
||||
SetDlgItemText (IDC_DRIVER_NAME_STATIC, device_desc.Get_Driver_Name());
|
||||
SetDlgItemText (IDC_DRIVER_VENDOR_STATIC, device_desc.Get_Driver_Vendor());
|
||||
SetDlgItemText (IDC_DRIVER_VERSION_STATIC, device_desc.Get_Driver_Version());
|
||||
SetDlgItemText (IDC_HARDWARE_NAME_STATIC, device_desc.Get_Hardware_Name());
|
||||
SetDlgItemText (IDC_HARDWARE_VENDOR_STATIC, device_desc.Get_Hardware_Vendor());
|
||||
SetDlgItemText (IDC_HARDWARE_CHIPSET_STATIC, device_desc.Get_Hardware_Chipset());
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnOK
|
||||
//
|
||||
void
|
||||
CDeviceSelectionDialog::OnOK (void)
|
||||
{
|
||||
// Ask the combobox for its current selection
|
||||
m_iDeviceIndex = m_deviceListComboBox.GetItemData (m_deviceListComboBox.GetCurSel ());
|
||||
m_iBitsPerPixel = (SendDlgItemMessage (IDC_COLORDEPTH_16, BM_GETCHECK) == TRUE) ? 16 : 24;
|
||||
|
||||
// Get the device name of the currently selected device
|
||||
CString stringDeviceName;
|
||||
m_deviceListComboBox.GetLBText (m_deviceListComboBox.GetCurSel (), stringDeviceName);
|
||||
m_DriverName = stringDeviceName;
|
||||
|
||||
// Cache this information in the registry
|
||||
theApp.WriteProfileString ("Config", "DeviceName", stringDeviceName);
|
||||
theApp.WriteProfileInt ("Config", "DeviceBitsPerPix", m_iBitsPerPixel);
|
||||
|
||||
// Allow the base class to process this message
|
||||
CDialog::OnOK();
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DoModal
|
||||
//
|
||||
int
|
||||
CDeviceSelectionDialog::DoModal (void)
|
||||
{
|
||||
BOOL bFoundDevice = FALSE;
|
||||
int iReturn = IDOK;
|
||||
|
||||
// Get the name of the last used device driver from the registry
|
||||
m_DriverName = theApp.GetProfileString ("Config", "DeviceName");
|
||||
if (m_bLookupCachedInfo &&
|
||||
(m_DriverName.GetLength () > 0) &&
|
||||
!(::GetKeyState (VK_SHIFT) & 0xF000)) {
|
||||
|
||||
if (Is_Silent_Mode ()) {
|
||||
m_DriverName = "Software2(0)";
|
||||
}
|
||||
|
||||
//
|
||||
// Loop through all the devices and see if we can find the right one
|
||||
//
|
||||
int device_count = WW3D::Get_Render_Device_Count ();
|
||||
for (int index = 0; (index < device_count) && !bFoundDevice; index ++) {
|
||||
|
||||
//
|
||||
// Is this the device we are looking for?
|
||||
//
|
||||
const char *name = WW3D::Get_Render_Device_Name (index);
|
||||
if (m_DriverName.CompareNoCase (name) == 0) {
|
||||
|
||||
//
|
||||
// Set the internal device information to simulate 'showing' the dialog
|
||||
//
|
||||
m_iDeviceIndex = index;
|
||||
m_iBitsPerPixel = theApp.GetProfileInt ("Config", "DeviceBitsPerPix", 16);
|
||||
|
||||
// Found it!
|
||||
bFoundDevice = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Show the dialog and allow the user to select the device
|
||||
if (bFoundDevice == FALSE) {
|
||||
iReturn = CDialog::DoModal ();
|
||||
}
|
||||
|
||||
// Return the integer return code
|
||||
return iReturn;
|
||||
}
|
||||
Reference in New Issue
Block a user