Files
FC1/Editor/PickEntitiesPanel.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

146 lines
3.6 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2002.
// -------------------------------------------------------------------------
// File name: PickEntitiesPanel.cpp
// Version: v1.00
// Created: 24/10/2002 by Lennert.
// Compilers: Visual C++.NET
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "PickEntitiesPanel.h"
#include "objects/BaseObject.h"
#include "objects/entity.h"
#include "Viewport.h"
#include "EditTool.h"
// CShapePanel dialog
IMPLEMENT_DYNAMIC(CPickEntitiesPanel, CDialog)
//////////////////////////////////////////////////////////////////////////
CPickEntitiesPanel::CPickEntitiesPanel( CWnd* pParent /* = NULL */)
: CDialog(CPickEntitiesPanel::IDD, pParent)
{
}
CPickEntitiesPanel::~CPickEntitiesPanel()
{
}
void CPickEntitiesPanel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PICK, m_pickButton);
DDX_Control(pDX, IDC_SELECT, m_selectButton);
DDX_Control(pDX, IDC_ENTITIES, m_entities);
}
BEGIN_MESSAGE_MAP(CPickEntitiesPanel, CDialog)
ON_BN_CLICKED(IDC_SELECT, OnBnClickedSelect)
ON_BN_CLICKED(IDC_REMOVE, OnBnClickedRemove)
ON_LBN_DBLCLK(IDC_ENTITIES, OnLbnDblclkEntities)
END_MESSAGE_MAP()
// CShapePanel message handlers
BOOL CPickEntitiesPanel::OnInitDialog()
{
__super::OnInitDialog();
m_pickButton.SetPickCallback( this,"Pick Entity" );
m_entities.SetBkColor( RGB(0xE0,0xE0,0xE0) );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPickEntitiesPanel::SetOwner(IPickEntitesOwner *pOwner)
{
assert(pOwner);
m_pOwner=pOwner;
ReloadEntities();
}
//////////////////////////////////////////////////////////////////////////
void CPickEntitiesPanel::OnPick( CBaseObject *picked )
{
assert( m_pOwner );
CUndo undo("[PickEntityOwner] Add Entity");
m_pOwner->AddEntity( (CEntity*)picked );
ReloadEntities();
}
//////////////////////////////////////////////////////////////////////////
bool CPickEntitiesPanel::OnPickFilter( CBaseObject *picked )
{
assert( picked != 0 );
return picked->GetType() == OBJTYPE_ENTITY;
}
//////////////////////////////////////////////////////////////////////////
void CPickEntitiesPanel::OnCancelPick()
{
}
//////////////////////////////////////////////////////////////////////////
void CPickEntitiesPanel::OnBnClickedSelect()
{
assert( m_pOwner );
int sel = m_entities.GetCurSel();
if (sel != LB_ERR)
{
CBaseObject *obj = m_pOwner->GetEntity(sel);
if (obj)
{
CUndo undo( "Select Object" );
GetIEditor()->ClearSelection();
GetIEditor()->SelectObject( obj );
}
}
}
//////////////////////////////////////////////////////////////////////////
void CPickEntitiesPanel::ReloadEntities()
{
if (!m_pOwner)
return;
m_entities.ResetContent();
for (int i = 0; i < m_pOwner->GetEntityCount(); i++)
{
CBaseObject *obj = m_pOwner->GetEntity(i);
if (obj)
m_entities.AddString( obj->GetName() );
else
m_entities.AddString( "<Null>" );
}
}
//////////////////////////////////////////////////////////////////////////
void CPickEntitiesPanel::OnBnClickedRemove()
{
assert( m_pOwner );
int sel = m_entities.GetCurSel();
if (sel != LB_ERR)
{
CUndo undo("[PickEntityOwner] Remove Entity");
if (sel < m_pOwner->GetEntityCount())
m_pOwner->RemoveEntity(sel);
ReloadEntities();
}
}
void CPickEntitiesPanel::OnLbnDblclkEntities()
{
// Select current entity.
OnBnClickedSelect();
}