402 lines
9.4 KiB
C++
402 lines
9.4 KiB
C++
// ObjectPanel.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ObjectPanel.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#include "Objects\ObjectManager.h"
|
|
#include "Objects\BaseObject.h"
|
|
#include "LayersSelectDialog.h"
|
|
#include "Material\Material.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CObjectPanel dialog
|
|
|
|
|
|
CObjectPanel::CObjectPanel(CWnd* pParent )
|
|
: CXTResizeDialog(CObjectPanel::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CObjectPanel)
|
|
m_name = _T("");
|
|
//m_flatten = FALSE;
|
|
//m_bShared = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
m_obj = 0;
|
|
m_multiSelect = false;
|
|
}
|
|
|
|
CObjectPanel::~CObjectPanel()
|
|
{
|
|
}
|
|
|
|
|
|
void CObjectPanel::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CXTResizeDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CObjectPanel)
|
|
DDX_Control(pDX, IDC_OBJECT_COLOR, m_colorCtrl);
|
|
DDX_Text(pDX, IDC_OBJECT_NAME, m_name);
|
|
//DDX_Check(pDX, IDC_FLATTEN, m_flatten);
|
|
//DDX_Check(pDX, IDC_SHARED, m_bShared);
|
|
//}}AFX_DATA_MAP
|
|
DDX_Control(pDX, IDC_OBJECT_NAME, m_nameCtrl);
|
|
//DDX_Control(pDX, IDC_FLATTEN, m_flattenCtrl);
|
|
//DDX_Control(pDX, IDC_SHARED, m_sharedCtrl);
|
|
DDX_Control(pDX, IDC_LAYER, m_layerBtn);
|
|
DDX_Control(pDX, IDC_LAYER_NAME, m_layerName);
|
|
DDX_Control(pDX, IDC_MATERIAL, m_mtlBtn);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CObjectPanel, CXTResizeDialog)
|
|
//{{AFX_MSG_MAP(CObjectPanel)
|
|
ON_WM_DRAWITEM()
|
|
ON_BN_CLICKED(IDC_OBJECT_COLOR, OnObjectColor)
|
|
ON_WM_KEYDOWN()
|
|
//ON_EN_UPDATE(IDC_OBJECT_NAME,OnUpdate)
|
|
ON_EN_UPDATE(IDC_OBJECT_AREA,OnUpdate)
|
|
ON_EN_UPDATE(IDC_OBJECT_HELPER,OnUpdate)
|
|
//ON_BN_CLICKED(IDC_SHARED, OnShared)
|
|
//}}AFX_MSG_MAP
|
|
ON_BN_CLICKED(IDC_LAYER, OnBnClickedLayer)
|
|
ON_EN_KILLFOCUS(IDC_OBJECT_NAME, OnChangeName)
|
|
ON_BN_CLICKED(IDC_MATERIAL, OnBnClickedMaterial)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CObjectPanel message handlers
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::SetMultiSelect( bool bEnable )
|
|
{
|
|
m_multiSelect = bEnable;
|
|
|
|
if (bEnable)
|
|
{
|
|
//m_sharedCtrl.SetButtonStyle(BS_AUTO3STATE);
|
|
//m_flattenCtrl.SetButtonStyle(BS_AUTO3STATE);
|
|
m_nameCtrl.EnableWindow(FALSE);
|
|
//m_sharedCtrl.SetCheck(2);
|
|
//m_flattenCtrl.SetCheck(2);
|
|
m_area.EnableWindow(FALSE);
|
|
m_layerName.SetWindowText( "" );
|
|
m_helperSize.EnableWindow(FALSE);
|
|
|
|
m_mtlBtn.EnableWindow( FALSE );
|
|
m_mtlBtn.SetWindowText( "" );
|
|
}else
|
|
{
|
|
m_nameCtrl.EnableWindow(TRUE);
|
|
m_helperSize.EnableWindow(TRUE);
|
|
//m_sharedCtrl.SetButtonStyle(BS_AUTOCHECKBOX);
|
|
//m_flattenCtrl.SetButtonStyle(BS_AUTOCHECKBOX);
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::SetParams( CBaseObject *obj, const SParams ¶ms )
|
|
{
|
|
if (obj != m_obj && m_obj)
|
|
{
|
|
UpdateData(TRUE);
|
|
OnUpdate();
|
|
}
|
|
m_obj = obj;
|
|
|
|
COLORREF col = m_color;
|
|
|
|
m_name = params.name;
|
|
m_color = params.color;
|
|
m_area.SetValue( params.area );
|
|
m_helperSize.SetValue( params.helperScale );
|
|
//m_flatten = params.flatten;
|
|
//m_bShared = params.shared;
|
|
|
|
UpdateData(FALSE);
|
|
|
|
if (m_obj && m_obj->GetMaterial())
|
|
{
|
|
m_mtlBtn.EnableWindow( TRUE );
|
|
m_mtlBtn.SetWindowText( m_obj->GetMaterial()->GetName() );
|
|
}
|
|
else
|
|
{
|
|
m_mtlBtn.EnableWindow( FALSE );
|
|
if (m_obj)
|
|
m_mtlBtn.SetWindowText( "No Material" );
|
|
else
|
|
m_mtlBtn.SetWindowText( "" );
|
|
}
|
|
|
|
m_currentLayer = params.layer;
|
|
// Find layer from id.
|
|
CObjectLayer *layer = GetIEditor()->GetObjectManager()->GetLayersManager()->FindLayerByName(params.layer);
|
|
if (layer)
|
|
m_layerName.SetWindowText( layer->GetName() );
|
|
else
|
|
m_layerName.SetWindowText( "" );
|
|
|
|
if (col != m_color)
|
|
{
|
|
GetDlgItem(IDC_OBJECT_COLOR)->RedrawWindow();
|
|
//RedrawWindow();
|
|
}
|
|
}
|
|
|
|
void CObjectPanel::GetParams( SParams ¶ms )
|
|
{
|
|
UpdateData(TRUE);
|
|
params.name = m_name;
|
|
params.color = m_color;
|
|
params.area = m_area.GetValue();
|
|
params.helperScale = m_helperSize.GetValue();
|
|
//params.flatten = m_flatten;
|
|
//params.shared = m_bShared;
|
|
params.layer = m_currentLayer;
|
|
}
|
|
|
|
void CObjectPanel::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
if (nIDCtl == IDC_OBJECT_COLOR)
|
|
{
|
|
CDC dc;
|
|
dc.Attach( lpDrawItemStruct->hDC );
|
|
CBrush brush( m_color );
|
|
CPen pen( PS_SOLID,1,RGB(1,1,1) );
|
|
CBrush *prevBrush = dc.SelectObject( &brush );
|
|
CPen *prevPen = dc.SelectObject( &pen );
|
|
dc.Rectangle( &lpDrawItemStruct->rcItem );
|
|
dc.SelectObject( prevBrush );
|
|
dc.SelectObject( prevPen );
|
|
dc.Detach();
|
|
return;
|
|
}
|
|
|
|
CXTResizeDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
|
|
}
|
|
|
|
void CObjectPanel::OnObjectColor()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
COLORREF col = m_color;
|
|
if (GetIEditor()->SelectColor(col,this))
|
|
{
|
|
m_color = col;
|
|
m_colorCtrl.RedrawWindow();
|
|
OnUpdate();
|
|
|
|
if (m_multiSelect)
|
|
{
|
|
CUndo undo("Set Color");
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
selection->GetObject(i)->SetColor(m_color);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CObjectPanel::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
CXTResizeDialog::OnKeyDown(nChar, nRepCnt, nFlags);
|
|
}
|
|
|
|
BOOL CObjectPanel::OnInitDialog()
|
|
{
|
|
CXTResizeDialog::OnInitDialog();
|
|
|
|
m_area.Create( this,IDC_OBJECT_AREA );
|
|
m_layerBtn.SetIcon( MAKEINTRESOURCE(IDI_LAYERS) );
|
|
|
|
m_helperSize.Create( this,IDC_OBJECT_HELPER );
|
|
m_helperSize.SetRange( 0.01f,1000 );
|
|
|
|
SetResize( IDC_OBJECT_NAME,SZ_RESIZE(1) );
|
|
SetResize( IDC_LAYER_NAME,SZ_RESIZE(1) );
|
|
SetResize( IDC_MATERIAL,SZ_RESIZE(1) );
|
|
SetResize( IDC_OBJECT_COLOR,SZ_REPOS(1) );
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CObjectPanel::OnUpdate()
|
|
{
|
|
if (m_obj)
|
|
m_obj->OnUIUpdate();
|
|
}
|
|
|
|
/*
|
|
void CObjectPanel::OnShared()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
OnUpdate();
|
|
|
|
if (m_multiSelect)
|
|
{
|
|
CUndo undo("Set Shared");
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
selection->GetObject(i)->SetShared(m_bShared);
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnUpdateName()
|
|
{
|
|
//UpdateData(TRUE);
|
|
//OnUpdate();
|
|
|
|
/*
|
|
if (m_multiSelect)
|
|
{
|
|
CUndo undo("Set Name");
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
selection->GetObject(i)->SetName(m_name);
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
|
|
/*
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnUpdateFlatten()
|
|
{
|
|
UpdateData(TRUE);
|
|
OnUpdate();
|
|
|
|
if (m_multiSelect)
|
|
{
|
|
CUndo undo("Set Flatten");
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
//OBJFLAG_FLATTEN
|
|
if (m_flatten)
|
|
selection->GetObject(i)->SetFlags( OBJFLAG_FLATTEN );
|
|
else
|
|
selection->GetObject(i)->ClearFlags( OBJFLAG_FLATTEN );
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnUpdateArea()
|
|
{
|
|
UpdateData(TRUE);
|
|
OnUpdate();
|
|
|
|
if (m_multiSelect)
|
|
{
|
|
CUndo undo("Set Area");
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
selection->GetObject(i)->SetArea(m_area.GetValue());
|
|
}
|
|
}
|
|
}
|
|
void CObjectPanel::OnBnClickedLayer()
|
|
{
|
|
// Open Layer selection dialog.
|
|
CRect rc;
|
|
m_layerBtn.GetWindowRect(rc);
|
|
CLayersSelectDialog dlg( CPoint(rc.left-40,rc.bottom) );
|
|
|
|
CString selLayer;
|
|
m_layerName.GetWindowText(selLayer);
|
|
dlg.SetSelectedLayer( selLayer );
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
if (dlg.GetSelectedLayer() != selLayer)
|
|
selLayer = dlg.GetSelectedLayer();
|
|
if (!selLayer.IsEmpty())
|
|
{
|
|
CObjectLayer *pLayer = GetIEditor()->GetObjectManager()->GetLayersManager()->FindLayerByName(selLayer);
|
|
if (!pLayer)
|
|
return;
|
|
|
|
m_layerName.SetWindowText(selLayer);
|
|
m_currentLayer = pLayer->GetName();
|
|
|
|
CUndo undo("Set Object Layer");
|
|
if (m_multiSelect)
|
|
{
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
selection->GetObject(i)->SetLayer(pLayer);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
OnUpdate();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnChangeName()
|
|
{
|
|
CUndo undo("Set Name");
|
|
if (m_multiSelect)
|
|
{
|
|
CString name;
|
|
m_nameCtrl.GetWindowText(name);
|
|
// Update shared flags in current selction group.
|
|
CSelectionGroup *selection = GetIEditor()->GetSelection();
|
|
for (int i = 0; i < selection->GetCount(); i++)
|
|
{
|
|
GetIEditor()->GetObjectManager()->ChangeObjectName( selection->GetObject(i),name );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
OnUpdate();
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnOK()
|
|
{
|
|
// Name change.
|
|
OnChangeName();
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void CObjectPanel::OnBnClickedMaterial()
|
|
{
|
|
// Select current material
|
|
if (m_obj)
|
|
{
|
|
if (m_obj->GetMaterial())
|
|
{
|
|
GetIEditor()->OpenDataBaseLibrary( EDB_MATERIAL_LIBRARY,m_obj->GetMaterial() );
|
|
}
|
|
}
|
|
}
|