Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// EditGameConfigs.cpp : implementation file
//
#include "stdafx.h"
#include "hammer.h"
#include "EditGameConfigs.h"
#include "StrDlg.h"
#include "MapDoc.h"
// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>
/////////////////////////////////////////////////////////////////////////////
// CEditGameConfigs dialog
CEditGameConfigs::CEditGameConfigs(BOOL bSelectOnly, CWnd* pParent /*=NULL*/) : CDialog(CEditGameConfigs::IDD, pParent) { //{{AFX_DATA_INIT(CEditGameConfigs)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bSelectOnly = bSelectOnly; }
void CEditGameConfigs::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEditGameConfigs)
DDX_Control(pDX, IDC_CONFIGS, m_cConfigs); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditGameConfigs, CDialog) //{{AFX_MSG_MAP(CEditGameConfigs)
ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_COPY, OnCopy) ON_BN_CLICKED(IDC_REMOVE, OnRemove) ON_LBN_SELCHANGE(IDC_CONFIGS, OnSelchangeConfigs) ON_LBN_DBLCLK(IDC_CONFIGS, OnDblclkConfigs) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditGameConfigs message handlers
void CEditGameConfigs::OnAdd() { char szName[128]; szName[0] = 0; CStrDlg dlg(0, szName, "Enter the game's name:", "Add a game"); if(dlg.DoModal() != IDOK) return;
// add a new game config
CGameConfig *pConfig = Options.configs.AddConfig(); strcpy(pConfig->szName, dlg.m_string);
FillConfigList(pConfig->dwID); }
void CEditGameConfigs::OnCopy() { int iCurSel = m_cConfigs.GetCurSel(); if(iCurSel == CB_ERR) return;
CGameConfig *pConfig = Options.configs.FindConfig( m_cConfigs.GetItemData(iCurSel));
CGameConfig *pNewConfig = Options.configs.AddConfig(); pNewConfig->CopyFrom(pConfig);
FillConfigList(pNewConfig->dwID); }
void CEditGameConfigs::OnRemove() { int iCurSel = m_cConfigs.GetCurSel(); if(iCurSel == CB_ERR) return;
int iArrayIndex; CGameConfig *pConfig = Options.configs.FindConfig( m_cConfigs.GetItemData(iCurSel), &iArrayIndex);
// check to see if any docs use this game - if so, can't
// delete it.
for ( int i=0; i<CMapDoc::GetDocumentCount(); i++ ) { CMapDoc *pDoc = CMapDoc::GetDocument(i); if(pDoc->GetGame() == pConfig) { AfxMessageBox("You can't delete this game configuration now\n" "because some loaded documents are using it.\n" "If you want to delete it, you must close those\n" "documents first."); return; } }
bool bResetDefaults = false;
// Check to see if this is the last configuation and prompt for the user to make a decision
if ( Options.configs.nConfigs <= 1 ) { if ( AfxMessageBox( "At least one configuration must be present!\n" "Would you like to reset to the default configurations?", MB_YESNO ) == IDNO ) { return; }
bResetDefaults = true; }
// Remove selection
m_cConfigs.DeleteString( iCurSel );
// FIXME: This will apply the change even if you cancel the dialog. This needs to store a copy
// of the data which then reconciles the two versions on OK or Apply! -- jdw
Options.configs.Configs.RemoveAt(iArrayIndex); Options.configs.nConfigs--;
// Reset to defaults
if ( bResetDefaults ) { Options.configs.ResetGameConfigs( false ); FillConfigList(); }
// Put the selection back to the top
m_cConfigs.SetCurSel( 0 ); }
void CEditGameConfigs::FillConfigList(DWORD dwSelectID) { // get current selection so we can keep it
DWORD dwCurID = dwSelectID; int iNewIndex = -1; if(m_cConfigs.GetCurSel() != LB_ERR && dwCurID == 0xFFFFFFFF) { dwCurID = m_cConfigs.GetItemData(m_cConfigs.GetCurSel()); }
m_cConfigs.ResetContent();
for(int i = 0; i < Options.configs.nConfigs; i++) { CGameConfig *pConfig = Options.configs.Configs[i]; int iIndex = m_cConfigs.AddString(pConfig->szName); m_cConfigs.SetItemData(iIndex, pConfig->dwID);
if (dwCurID == pConfig->dwID) { iNewIndex = iIndex; } }
if (iNewIndex == -1) { iNewIndex = 0; } m_cConfigs.SetCurSel(iNewIndex);
OnSelchangeConfigs();
if (m_bSelectOnly && Options.configs.nConfigs == 1) OnOK(); }
void CEditGameConfigs::OnSelchangeConfigs() { int iCurSel = m_cConfigs.GetCurSel(); if(iCurSel == LB_ERR) return;
m_pSelectedGame = Options.configs.FindConfig( m_cConfigs.GetItemData(iCurSel)); }
BOOL CEditGameConfigs::OnInitDialog() { CDialog::OnInitDialog();
if(m_bSelectOnly) { SetWindowText("Select a game configuration to use");
GetDlgItem(IDOK)->SetWindowText("OK"); GetDlgItem(IDC_REMOVE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_ADD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COPY)->ShowWindow(SW_HIDE); }
FillConfigList();
return TRUE; }
void CEditGameConfigs::OnDblclkConfigs() { OnOK(); }
|