123
This commit is contained in:
401
Editor/ObjectPanel.cpp
Normal file
401
Editor/ObjectPanel.cpp
Normal file
@@ -0,0 +1,401 @@
|
||||
// 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() );
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user