source-engine/hammer/NewVisGroupDlg.cpp

174 lines
5.1 KiB
C++
Raw Permalink Normal View History

2020-04-23 00:56:21 +08:00
//========= 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;
}