//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //=============================================================================// // RunMapCfgDlg.cpp : implementation file // #include "stdafx.h" #include "hammer.h" #include "RunMapCfgDlg.h" #include "StrDlg.h" // memdbgon must be the last include file in a .cpp file!!! #include ///////////////////////////////////////////////////////////////////////////// // CRunMapCfgDlg dialog CRunMapCfgDlg::CRunMapCfgDlg(CWnd* pParent /*=NULL*/) : CDialog(CRunMapCfgDlg::IDD, pParent) { //{{AFX_DATA_INIT(CRunMapCfgDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pApp = (CHammer*) AfxGetApp(); } void CRunMapCfgDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRunMapCfgDlg) DDX_Control(pDX, IDC_CONFIGURATIONS, m_cConfigurations); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRunMapCfgDlg, CDialog) //{{AFX_MSG_MAP(CRunMapCfgDlg) ON_BN_CLICKED(IDC_NEW, OnNew) ON_BN_CLICKED(IDC_REMOVE, OnRemove) ON_BN_CLICKED(IDC_RENAME, OnRename) ON_BN_CLICKED(IDC_COPY, OnCopy) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRunMapCfgDlg message handlers void CRunMapCfgDlg::AddSequenceToList(int iIndex, CCommandSequence *pSeq) { iIndex = m_cConfigurations.InsertString(iIndex, pSeq->m_szName); m_cConfigurations.SetItemDataPtr(iIndex, PVOID(pSeq)); m_cConfigurations.SetCurSel(iIndex); } void CRunMapCfgDlg::OnNew() { // add a new sequence CStrDlg dlg(0, "", "Name:", "New Configuration"); if(dlg.DoModal() == IDCANCEL) return; // add it to the list in the app CCommandSequence *pSeq = new CCommandSequence; strcpy(pSeq->m_szName, dlg.m_string); m_pApp->m_CmdSequences.Add(pSeq); AddSequenceToList(-1, pSeq); } void CRunMapCfgDlg::OnRemove() { int iSel = m_cConfigurations.GetCurSel(); if(iSel == LB_ERR) return; // nothing selected if(AfxMessageBox("Do you want to remove this configuration?", MB_YESNO) == IDNO) return; // don't want to CCommandSequence *pSeq = (CCommandSequence*) m_cConfigurations.GetItemDataPtr(iSel); // find it in the app's array for(int i = 0; i < m_pApp->m_CmdSequences.GetSize(); i++) { if(pSeq == m_pApp->m_CmdSequences[i]) { delete pSeq; m_pApp->m_CmdSequences.RemoveAt(i); m_cConfigurations.DeleteString(iSel); return; // done } } // shouldn't reach here - Assert(0); } void CRunMapCfgDlg::OnRename() { int iSel = m_cConfigurations.GetCurSel(); if(iSel == LB_ERR) return; // nothing selected CCommandSequence *pSeq = (CCommandSequence*) m_cConfigurations.GetItemDataPtr(iSel); CStrDlg dlg(0, pSeq->m_szName, "Name:", "Rename Configuration"); if(dlg.DoModal() == IDCANCEL) return; strcpy(pSeq->m_szName, dlg.m_string); m_cConfigurations.DeleteString(iSel); AddSequenceToList(iSel, pSeq); } BOOL CRunMapCfgDlg::OnInitDialog() { CDialog::OnInitDialog(); // add the configurations into the list int iSize = m_pApp->m_CmdSequences.GetSize(); for(int i = 0; i < iSize; i++) { CCommandSequence *pSeq = m_pApp->m_CmdSequences[i]; int iIndex = m_cConfigurations.AddString(pSeq->m_szName); m_cConfigurations.SetItemDataPtr(iIndex, PVOID(pSeq)); } return TRUE; } void CRunMapCfgDlg::OnCopy() { int iSel = m_cConfigurations.GetCurSel(); if(iSel == LB_ERR) return; // nothing selected // add a new sequence CStrDlg dlg(0, "", "Name:", "Copy Configuration"); if(dlg.DoModal() == IDCANCEL) return; // add it to the list in the app CCommandSequence *pSeq = new CCommandSequence; strcpy(pSeq->m_szName, dlg.m_string); m_pApp->m_CmdSequences.Add(pSeq); CCommandSequence *pSrcSeq = (CCommandSequence*) m_cConfigurations.GetItemDataPtr(iSel); pSeq->m_Commands.Append(pSrcSeq->m_Commands); AddSequenceToList(-1, pSeq); }