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

180 lines
No EOL
4.4 KiB
C++

// WaterPropPaneView.cpp : implementation file
//
#include "stdafx.h"
#include "EtWorldPainter.h"
#include "WaterPropPaneView.h"
#include "UserMessage.h"
#include "TEtWorldWater.h"
#include "TEtWorldWaterRiver.h"
#include "GlobalValue.h"
// CWaterPropPaneView
IMPLEMENT_DYNCREATE(CWaterPropPaneView, CFormView)
CWaterPropPaneView::CWaterPropPaneView()
: CFormView(CWaterPropPaneView::IDD)
{
m_bActivate = false;
m_nPropType = 0;
}
CWaterPropPaneView::~CWaterPropPaneView()
{
}
void CWaterPropPaneView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CWaterPropPaneView, CFormView)
ON_WM_ERASEBKGND()
ON_WM_SIZE()
ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh )
ON_MESSAGE(XTPWM_PROPERTYGRID_NOTIFY, OnGridNotify)
ON_MESSAGE( UM_TILEPANE_DROPITEM, OnDropItem )
END_MESSAGE_MAP()
// CWaterPropPaneView diagnostics
#ifdef _DEBUG
void CWaterPropPaneView::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void CWaterPropPaneView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
// CWaterPropPaneView message handlers
void CWaterPropPaneView::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 CWaterPropPaneView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
// return __super::OnEraseBkgnd(pDC);
}
void CWaterPropPaneView::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 CWaterPropPaneView::OnRefresh( WPARAM wParam, LPARAM lParam )
{
ResetPropertyGrid();
m_pWater = NULL;
if( wParam == 0 ) return S_OK;
m_nPropType = (int)wParam;
switch( wParam ) {
case 1:
m_pWater = (CTEtWorldWater*)lParam;
RefreshPropertyGrid( m_pWater->GetPropertyList() );
break;
case 2:
m_pRiver = (CTEtWorldWaterRiver*)lParam;
RefreshPropertyGrid( m_pRiver->GetPropertyList() );
break;
}
if( !CGlobalValue::GetInstance().IsCheckOutMe() ) {
for( DWORD i=0; i<m_pVecVariable.size(); i++ ) {
SetReadOnly( i, true );
}
}
return S_OK;
}
LRESULT CWaterPropPaneView::OnGridNotify( WPARAM wParam, LPARAM lParam )
{
return ProcessNotifyGrid( wParam, lParam );
}
void CWaterPropPaneView::OnSetValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
switch( m_nPropType ) {
case 1: m_pWater->OnSetValue( pVariable, dwIndex, this ); break;
case 2: m_pRiver->OnSetValue( pVariable, dwIndex, this ); break;
}
}
void CWaterPropPaneView::OnChangeValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
switch( m_nPropType ) {
case 1: m_pWater->OnChangeValue( pVariable, dwIndex, this ); break;
case 2: m_pRiver->OnChangeValue( pVariable, dwIndex, this ); break;
}
}
void CWaterPropPaneView::OnSelectChangeValue( CUnionValueProperty *pVariable, DWORD dwIndex )
{
switch( m_nPropType ) {
case 1: m_pWater->OnSelectChangeValue( pVariable, dwIndex, this ); break;
case 2: m_pRiver->OnSelectChangeValue( pVariable, dwIndex, this ); break;
}
}
LRESULT CWaterPropPaneView::OnDropItem( WPARAM wParam, LPARAM lParam )
{
if( !CGlobalValue::GetInstance().IsCheckOutMe() ) return S_OK;
CPoint p;
p.x = (long)lParam >> 16;
p.y = (long)( lParam << 16 ) >> 16;
char *szFileName = (char *)wParam;
char szName[256] = { 0, };
_GetFullFileName( szName, _countof(szName), szFileName );
CRect rcRect;
for( DWORD i=0; i<m_pVecItem.size(); i++ ) {
rcRect = m_pVecItem[i]->GetItemRect();
if( p.x < rcRect.left || p.x > rcRect.right || p.y < rcRect.top || p.y > rcRect.bottom ) continue;
if( (*m_ppVecVariable)[i]->GetType() != CUnionValueProperty::String_FileOpen ) continue;
(*m_ppVecVariable)[i]->SetVariable( szName );
OnChangeValue( (*m_ppVecVariable)[i], i );
switch( m_nPropType ) {
case 1: SendMessage( UM_REFRESH_PANE_VIEW, m_nPropType, (LPARAM)m_pWater ); break;
case 2: SendMessage( UM_REFRESH_PANE_VIEW, m_nPropType, (LPARAM)m_pRiver ); break;
}
break;
}
return S_OK;
}