//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: A dialog that is invoked when a new visgroup is created. // It lets the user pick an existing visgroup or create a new one. // //=============================================================================// #include "stdafx.h" #include "MapDoc.h" #include "NewVisGroupDlg.h" #include "hammer.h" // memdbgon must be the last include file in a .cpp file!!! #include static const unsigned int g_uSelChangeMsg = ::RegisterWindowMessage(GROUPLIST_MSG_SEL_CHANGE); static BOOL s_bLastHideObjects = TRUE; BEGIN_MESSAGE_MAP(CNewVisGroupDlg, CDialog) //{{AFX_MSG_MAP(CNewVisGroupDlg) ON_REGISTERED_MESSAGE(g_uSelChangeMsg, OnSelChangeGroupList) ON_COMMAND(IDC_PLACE_IN_EXISTING_VISGROUP, OnPlaceInExistingVisGroup) ON_COMMAND(IDC_CREATE_NEW_VISGROUP, OnCreateNewVisGroup) //}}AFX_MSG_MAP END_MESSAGE_MAP() //----------------------------------------------------------------------------- // Purpose: // Input : pParent - //----------------------------------------------------------------------------- CNewVisGroupDlg::CNewVisGroupDlg(CString &str, CWnd *pParent) : CDialog(CNewVisGroupDlg::IDD, pParent) { m_pPickedVisGroup = NULL; //{{AFX_DATA_INIT(CNewVisGroupDlg) m_strName = str; //}}AFX_DATA_INIT } //----------------------------------------------------------------------------- // Purpose: // Input : pDX - //----------------------------------------------------------------------------- void CNewVisGroupDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNewVisGroupDlg) DDX_Check(pDX, IDC_REMOVE_FROM_ALL, m_bRemoveFromOtherGroups); DDX_Check(pDX, IDC_HIDE_OBJECTS, m_bHideObjects); DDX_Text(pDX, IDC_VISGROUP_NAME, m_strName); //}}AFX_DATA_MAP } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- BOOL CNewVisGroupDlg::OnInitDialog(void) { m_bHideObjects = s_bLastHideObjects; CDialog::OnInitDialog(); CButton *pButton = (CButton *)GetDlgItem(IDC_CREATE_NEW_VISGROUP); pButton->SetCheck(1); m_cGroupList.SubclassDlgItem(IDC_GROUP_LIST, this); UpdateGroupList(); CEdit *pEdit = (CEdit *)GetDlgItem(IDC_GROUP_LIST); pEdit->EnableWindow(FALSE); return TRUE; } //----------------------------------------------------------------------------- // Purpose: Returns the visgroup name that was entered in the dialog. //----------------------------------------------------------------------------- void CNewVisGroupDlg::GetName(CString &str) { str = m_strName; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNewVisGroupDlg::OnOK() { CDialog::OnOK(); s_bLastHideObjects = m_bHideObjects; } //----------------------------------------------------------------------------- // Purpose: Switches the mode of the dialog to pick an existing visgroup rather than // create a new one. //----------------------------------------------------------------------------- void CNewVisGroupDlg::OnPlaceInExistingVisGroup() { CEdit *pEdit = (CEdit *)GetDlgItem(IDC_VISGROUP_NAME); pEdit->EnableWindow(FALSE); pEdit = (CEdit *)GetDlgItem(IDC_GROUP_LIST); pEdit->EnableWindow(TRUE); } //----------------------------------------------------------------------------- // Purpose: Switches the mode of the dialog to create a new visgroup rather than // pick an existing one. //----------------------------------------------------------------------------- void CNewVisGroupDlg::OnCreateNewVisGroup() { CEdit *pEdit = (CEdit *)GetDlgItem(IDC_VISGROUP_NAME); pEdit->EnableWindow(TRUE); pEdit = (CEdit *)GetDlgItem(IDC_GROUP_LIST); pEdit->EnableWindow(FALSE); m_pPickedVisGroup = NULL; } //----------------------------------------------------------------------------- // Purpose: Handles selection change in the visgroup list. //----------------------------------------------------------------------------- LRESULT CNewVisGroupDlg::OnSelChangeGroupList(WPARAM wParam, LPARAM lParam) { m_pPickedVisGroup = m_cGroupList.GetSelectedVisGroup(); return 0; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNewVisGroupDlg::UpdateGroupList(void) { m_cGroupList.SetRedraw(false); m_cGroupList.DeleteAllItems(); CMapDoc *pDoc = CMapDoc::GetActiveMapDoc(); if (pDoc != NULL) { int nCount = pDoc->VisGroups_GetRootCount(); for (int i = 0; i < nCount; i++) { CVisGroup *pGroup = pDoc->VisGroups_GetRootVisGroup(i); if (stricmp(pGroup->GetName(), "Auto") != 0) { m_cGroupList.AddVisGroup(pGroup); } } } m_cGroupList.ExpandAll(); m_cGroupList.SetRedraw(true); m_cGroupList.Invalidate(); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- CVisGroup *CNewVisGroupDlg::GetPickedVisGroup(void) { return m_pPickedVisGroup; }