DragonNest/Client/EtWorldPainter/PropPropertiesPaneView.cpp
2024-12-19 09:48:26 +08:00

199 lines
5.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// PropPropertiesPaneView.cpp : implementation file
//
#include "stdafx.h"
#include "EtWorldPainter.h"
#include "PropPropertiesPaneView.h"
#include "UserMessage.h"
#include "TEtWorldProp.h"
#include "TEtWorld.h"
#include "EtWorldSector.h"
#include "TEtWorldSector.h"
#include "PropRenderView.h"
#include "PaneDefine.h"
#include "MainFrm.h"
// CPropPropertiesPaneView
IMPLEMENT_DYNCREATE(CPropPropertiesPaneView, CFormView)
CPropPropertiesPaneView::CPropPropertiesPaneView()
: CFormView(CPropPropertiesPaneView::IDD)
{
m_bActivate = false;
}
CPropPropertiesPaneView::~CPropPropertiesPaneView()
{
ResetPropertyGrid();
}
void CPropPropertiesPaneView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CPropPropertiesPaneView, CFormView)
ON_WM_ERASEBKGND()
ON_WM_SIZE()
ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh )
ON_MESSAGE(XTPWM_PROPERTYGRID_NOTIFY, OnGridNotify)
END_MESSAGE_MAP()
// CPropPropertiesPaneView diagnostics
#ifdef _DEBUG
void CPropPropertiesPaneView::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void CPropPropertiesPaneView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
// CPropPropertiesPaneView message handlers
void CPropPropertiesPaneView::OnInitialUpdate()
{
__super::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
if( m_bActivate == true ) return;
m_bActivate = true;
CRect rcRect;
GetClientRect( &rcRect );
m_PropertyGrid.Create( rcRect, this, 0 );
m_PropertyGrid.SetCustomColors( RGB(200, 200, 200), 0, RGB(182, 210, 189), RGB(247, 243, 233), 0 );
SendMessage( UM_REFRESH_PANE_VIEW );
}
BOOL CPropPropertiesPaneView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
// return __super::OnEraseBkgnd(pDC);
}
void CPropPropertiesPaneView::OnSize(UINT nType, int cx, int cy)
{
__super::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if( m_PropertyGrid ) {
m_PropertyGrid.SetWindowPos( NULL, 0, 0, cx, cy, SWP_FRAMECHANGED );
}
}
extern PropertyGridBaseDefine g_PropPropertyDefine[];
LRESULT CPropPropertiesPaneView::OnRefresh( WPARAM wParam, LPARAM lParam )
{
ResetPropertyGrid();
if( wParam == 0 ) return S_OK;
/////////////////
bool bSameClass = true;
int nClass = -1;
DNVector(CEtWorldProp *) *pVecList = &CGlobalValue::GetInstance().m_pVecSelectPropList;
if( pVecList->size() == 0 ) return S_OK;
for( DWORD i=0; i<pVecList->size(); i++ ) {
CTEtWorldProp *pProp = (CTEtWorldProp *)(*pVecList)[i];
if( nClass == -1 ) nClass = pProp->GetClassID();
else if( nClass != pProp->GetClassID() ) bSameClass = false;
}
/////////////////
int nCommonPropCount = 0;
for( DWORD i=0;; i++ ) {
if( g_PropPropertyDefine[i].szCategory == NULL ) break;
nCommonPropCount++;
}
if( bSameClass != true ) {
RefreshPropertyGrid( g_PropPropertyDefine );
for( DWORD i=nCommonPropCount; i<m_pVecVariable.size(); i++ ) {
SetReadOnly( i, true );
}
}
else {
RefreshPropertyGrid( ((CTEtWorldProp *)(*pVecList)[0])->GetPropertyDefine() );
if( pVecList->size() > 1 ) {
for( DWORD i=nCommonPropCount; i<m_pVecVariable.size(); i++ ) {
SetReadOnly( i, true );
}
}
}
if( pVecList->size() > 1 ) {
SetReadOnly( nCommonPropCount - 3, true );
}
return S_OK;
}
LRESULT CPropPropertiesPaneView::OnGridNotify( WPARAM wParam, LPARAM lParam )
{
return ProcessNotifyGrid( wParam, lParam );
}
void CPropPropertiesPaneView::OnSetValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
// Set <20>Ҷ<EFBFBD><D2B6><EFBFBD> ù<><C3B9><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
DNVector(CEtWorldProp *) *pVecList = &CGlobalValue::GetInstance().m_pVecSelectPropList;
CTEtWorldProp *pProp = (CTEtWorldProp *)(*pVecList)[0];
pProp->OnSetValue( pVariable, dwIndex, this );
}
void CPropPropertiesPaneView::OnChangeValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
DNVector(CEtWorldProp *) *pVecList = &CGlobalValue::GetInstance().m_pVecSelectPropList;
CActionElementModifyProp *pCurAction = NULL;
if( dwIndex < 3 ) {
pCurAction = new CActionElementModifyProp( (char)dwIndex );
switch( dwIndex ) {
case 0: pCurAction->SetDesc( "Modify Prop - Position" ); break;
case 1: pCurAction->SetDesc( "Modify Prop - Rotation" ); break;
case 2: pCurAction->SetDesc( "Modify Prop - Scale" ); break;
}
}
for( DWORD i=0; i<pVecList->size(); i++ ) {
CTEtWorldProp *pProp = (CTEtWorldProp *)(*pVecList)[i];
if( dwIndex == 1 )
*(pProp->GetPreRotation()) = *(pProp->GetRotation());
if( pCurAction ) pCurAction->AddProp( pProp );
pProp->OnChangeValue( pVariable, dwIndex, this );
}
if( pCurAction ) pCurAction->AddAction();
if( dwIndex == 8 ) {
int nRefreshUniqeuID = 0;
if( !pVecList->empty() ) {
CTEtWorldProp *pProp = (CTEtWorldProp *)(*pVecList)[0];
nRefreshUniqeuID = pProp->GetCreateUniqueID();
}
CWnd *pWnd = GetPaneWnd( PROPLIST_PANE );
if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW, 2, nRefreshUniqeuID );
}
CGlobalValue::GetInstance().SetModify();
}
void CPropPropertiesPaneView::OnSelectChangeValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
m_nCurrentSelectIndex = dwIndex;
if( pVariable->IsDefaultEnable() == FALSE ) m_nCurrentSelectIndex = -1;
}