diff options
Diffstat (limited to 'hammer/NewVisGroupDlg.cpp')
| -rw-r--r-- | hammer/NewVisGroupDlg.cpp | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/hammer/NewVisGroupDlg.cpp b/hammer/NewVisGroupDlg.cpp new file mode 100644 index 0000000..ddd9814 --- /dev/null +++ b/hammer/NewVisGroupDlg.cpp @@ -0,0 +1,173 @@ +//========= Copyright 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 <tier0/memdbgon.h> + + +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); + m_cGroupList.AddVisGroup(pGroup); + } + } + + m_cGroupList.ExpandAll(); + m_cGroupList.SetRedraw(true); + m_cGroupList.Invalidate(); +} + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CVisGroup *CNewVisGroupDlg::GetPickedVisGroup(void) +{ + return m_pPickedVisGroup; +} + |