summaryrefslogtreecommitdiff
path: root/hammer/NewVisGroupDlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/NewVisGroupDlg.cpp')
-rw-r--r--hammer/NewVisGroupDlg.cpp173
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;
+}
+