341 lines
9.8 KiB
C++
341 lines
9.8 KiB
C++
// SoundListPaneView.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "EtWorldPainter.h"
|
||
#include "SoundListPaneView.h"
|
||
#include "UserMessage.h"
|
||
#include "resource.h"
|
||
#include "MainFrm.h"
|
||
#include "PaneDefine.h"
|
||
#include "TEtWorld.h"
|
||
#include "TEtWorldSector.h"
|
||
#include "TEtWorldSound.h"
|
||
#include "TEtWorldSoundEnvi.h"
|
||
|
||
// CSoundListPaneView
|
||
|
||
IMPLEMENT_DYNCREATE(CSoundListPaneView, CFormView)
|
||
|
||
CSoundListPaneView::CSoundListPaneView()
|
||
: CFormView(CSoundListPaneView::IDD)
|
||
{
|
||
m_bActivate = false;
|
||
|
||
CBitmap bitmap;
|
||
bitmap.LoadBitmap( IDB_SOUNDTREEICON );
|
||
|
||
m_ImageList.Create( 16, 16, ILC_COLOR24|ILC_MASK, 4, 1 );
|
||
m_ImageList.Add( &bitmap, RGB(0,255,0) );
|
||
}
|
||
|
||
CSoundListPaneView::~CSoundListPaneView()
|
||
{
|
||
}
|
||
|
||
void CSoundListPaneView::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CFormView::DoDataExchange(pDX);
|
||
DDX_Control(pDX, IDC_TREE1, m_TreeCtrl);
|
||
}
|
||
|
||
BEGIN_MESSAGE_MAP(CSoundListPaneView, CFormView)
|
||
ON_WM_ERASEBKGND()
|
||
ON_WM_SIZE()
|
||
ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh )
|
||
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CSoundListPaneView::OnTvnSelchangedTree1)
|
||
ON_MESSAGE( UM_SOUNDPANE_DROPITEM, OnDropItem )
|
||
ON_MESSAGE( UM_SOUNDPANE_DROPMOVEITEM, OnDropMoveItem )
|
||
ON_MESSAGE( UM_SOUNDLIST_PANE_ADDSOUNDENVI, OnAddSoundEnvi )
|
||
ON_MESSAGE( UM_SOUNDLIST_PANE_SELCHANGED, OnSelectChange )
|
||
ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREE1, &CSoundListPaneView::OnTvnBeginlabeleditTree1)
|
||
ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE1, &CSoundListPaneView::OnTvnEndlabeleditTree1)
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
// CSoundListPaneView diagnostics
|
||
|
||
#ifdef _DEBUG
|
||
void CSoundListPaneView::AssertValid() const
|
||
{
|
||
CFormView::AssertValid();
|
||
}
|
||
|
||
#ifndef _WIN32_WCE
|
||
void CSoundListPaneView::Dump(CDumpContext& dc) const
|
||
{
|
||
CFormView::Dump(dc);
|
||
}
|
||
#endif
|
||
#endif //_DEBUG
|
||
|
||
|
||
// CSoundListPaneView message handlers
|
||
|
||
void CSoundListPaneView::OnInitialUpdate()
|
||
{
|
||
CFormView::OnInitialUpdate();
|
||
|
||
// TODO: Add your specialized code here and/or call the base class
|
||
if( m_bActivate == true ) return;
|
||
m_bActivate = true;
|
||
}
|
||
|
||
BOOL CSoundListPaneView::OnEraseBkgnd(CDC* pDC)
|
||
{
|
||
// TODO: Add your message handler code here and/or call default
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
void CSoundListPaneView::OnSize(UINT nType, int cx, int cy)
|
||
{
|
||
CFormView::OnSize(nType, cx, cy);
|
||
|
||
// TODO: Add your message handler code here
|
||
if( m_TreeCtrl ) {
|
||
m_TreeCtrl.SetWindowPos( NULL, 0, 0, cx, cy, SWP_FRAMECHANGED );
|
||
}
|
||
}
|
||
|
||
LRESULT CSoundListPaneView::OnRefresh( WPARAM wParam, LPARAM lParam )
|
||
{
|
||
m_TreeCtrl.DeleteAllItems();
|
||
m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL );
|
||
m_TreeCtrl.EnableMultiSelect( true );
|
||
|
||
m_hRootItem = m_TreeCtrl.InsertItem( "Sound", 0, 1 );
|
||
m_hBGMItem = m_TreeCtrl.InsertItem( "BGM", 2, 3, m_hRootItem );
|
||
m_hEnviItem = m_TreeCtrl.InsertItem( "Environment", 0, 1, m_hRootItem );
|
||
m_hPropItem = m_TreeCtrl.InsertItem( "Prop Sound List", 0, 1, m_hRootItem );
|
||
|
||
m_TreeCtrl.SelectItem( m_hRootItem );
|
||
m_TreeCtrl.Expand( m_hRootItem, TVE_EXPAND );
|
||
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
if( Sector == -1 ) return S_OK;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
if( !pSector ) return S_OK;
|
||
|
||
CTEtWorldSound *pSound = (CTEtWorldSound *)pSector->GetSoundInfo();
|
||
|
||
for( DWORD i=0; i<pSound->GetEnviCount(); i++ ) {
|
||
CTEtWorldSoundEnvi *pEnvi = (CTEtWorldSoundEnvi *)pSound->GetEnviFromIndex(i);
|
||
m_TreeCtrl.InsertItem( pEnvi->GetName(), 2, 3, m_hEnviItem );
|
||
}
|
||
m_TreeCtrl.Expand( m_hEnviItem, TVE_EXPAND );
|
||
// Prop <20>о<EFBFBD><D0BE>ͼ<EFBFBD> Sound <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||
|
||
return S_OK;
|
||
}
|
||
|
||
void CSoundListPaneView::CalcSelectItem()
|
||
{
|
||
m_SelectItemList.RemoveAll();
|
||
m_TreeCtrl.GetSelectedList( m_SelectItemList );
|
||
}
|
||
|
||
|
||
void CSoundListPaneView::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
|
||
// TODO: Add your control notification handler code here
|
||
CalcSelectItem();
|
||
CWnd *pWnd = GetPaneWnd( SOUNDPROP_PANE );
|
||
if( pWnd ) {
|
||
if( m_SelectItemList.GetCount() == 0 ) {
|
||
pWnd->SendMessage( UM_REFRESH_PANE_VIEW );
|
||
}
|
||
else if( m_SelectItemList.GetCount() == 1 ) {
|
||
int nFlag = 0;
|
||
CGlobalValue::GetInstance().m_pSelectSound = NULL;
|
||
|
||
if( m_SelectItemList.GetHead() == m_hRootItem ) nFlag = 1;
|
||
else if( m_SelectItemList.GetHead() == m_hBGMItem ) nFlag = 2;
|
||
else if( m_SelectItemList.GetHead() == m_hEnviItem ) nFlag = 3;
|
||
else if( m_SelectItemList.GetHead() == m_hPropItem ) nFlag = 4;
|
||
else {
|
||
CString szStr = m_TreeCtrl.GetItemText( m_SelectItemList.GetHead() );
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
if( Sector != -1 ) {
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
if( pSector ) {
|
||
CTEtWorldSound *pSound = (CTEtWorldSound *)pSector->GetSoundInfo();
|
||
if( pSound ) {
|
||
CEtWorldSoundEnvi *pEnvi = pSound->GetEnviFromName( szStr );
|
||
if( pEnvi ) {
|
||
CGlobalValue::GetInstance().m_pSelectSound = pEnvi;
|
||
nFlag = 5;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
CGlobalValue::GetInstance().RefreshRender();
|
||
pWnd->SendMessage( UM_REFRESH_PANE_VIEW, nFlag );
|
||
}
|
||
else {
|
||
if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW );
|
||
}
|
||
}
|
||
|
||
|
||
*pResult = 0;
|
||
}
|
||
|
||
|
||
LRESULT CSoundListPaneView::OnDropItem( WPARAM wParam, LPARAM lParam )
|
||
{
|
||
CPoint p;
|
||
p.x = (long)lParam >> 16;
|
||
p.y = (long)( lParam << 16 ) >> 16;
|
||
|
||
char *szFileName = (char *)wParam;
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
if( Sector == -1 ) return S_OK;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
if( !pSector ) return S_OK;
|
||
CTEtWorldSound *pSound = (CTEtWorldSound *)pSector->GetSoundInfo();
|
||
if( !pSound ) return S_OK;
|
||
|
||
char szTemp[_MAX_PATH];
|
||
_GetFullFileName( szTemp, _countof(szTemp), szFileName );
|
||
|
||
CRect rcRect;
|
||
m_TreeCtrl.GetItemRect( m_hBGMItem, rcRect, FALSE );
|
||
|
||
if( p.x >= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) {
|
||
|
||
// SetBGM <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OnChangevalue <20>ȿ<EFBFBD><C8BF><EFBFBD> <20>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||
CUnionValueProperty Variable( CUnionValueProperty::String );
|
||
Variable.SetVariable( szTemp );
|
||
pSound->OnChangeValue( &Variable, 0 );
|
||
CGlobalValue::GetInstance().SetModify();
|
||
|
||
CWnd *pWnd = GetPaneWnd( SOUNDPROP_PANE );
|
||
if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW, 2 );
|
||
return S_OK;
|
||
}
|
||
|
||
HTREEITEM hti;
|
||
hti = m_TreeCtrl.GetChildItem( m_hEnviItem );
|
||
while(hti) {
|
||
m_TreeCtrl.GetItemRect( hti, rcRect, FALSE );
|
||
if( p.x >= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) {
|
||
CString szItem = m_TreeCtrl.GetItemText( hti );
|
||
|
||
CTEtWorldSoundEnvi *pEnvi = (CTEtWorldSoundEnvi *)pSound->GetEnviFromName( szItem );
|
||
if( pEnvi ) {
|
||
CUnionValueProperty Variable( CUnionValueProperty::String );
|
||
Variable.SetVariable( szTemp );
|
||
pEnvi->OnChangeValue( &Variable, 0 );
|
||
|
||
CGlobalValue::GetInstance().SetModify();
|
||
|
||
CWnd *pWnd = GetPaneWnd( SOUNDPROP_PANE );
|
||
if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW, 5 );
|
||
return S_OK;
|
||
}
|
||
}
|
||
|
||
hti = m_TreeCtrl.GetNextSiblingItem( hti );
|
||
}
|
||
|
||
|
||
return S_OK;
|
||
}
|
||
|
||
LRESULT CSoundListPaneView::OnDropMoveItem( WPARAM wParam, LPARAM lParam )
|
||
{
|
||
CPoint p;
|
||
p.x = (long)wParam >> 16;
|
||
p.y = (long)( wParam << 16 ) >> 16;
|
||
|
||
CRect rcRect;
|
||
|
||
m_TreeCtrl.GetItemRect( m_hBGMItem, rcRect, FALSE );
|
||
if( p.x >= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) {
|
||
m_TreeCtrl.SelectItems( m_hBGMItem, m_hBGMItem );
|
||
return S_OK;
|
||
}
|
||
else m_TreeCtrl.SelectItems( 0, 0 );
|
||
|
||
HTREEITEM hti;
|
||
hti = m_TreeCtrl.GetChildItem( m_hEnviItem );
|
||
while(hti) {
|
||
m_TreeCtrl.GetItemRect( hti, rcRect, FALSE );
|
||
if( p.x >= rcRect.left && p.x <= rcRect.right && p.y >= rcRect.top && p.y <= rcRect.bottom ) {
|
||
m_TreeCtrl.SelectItems( hti, hti );
|
||
return S_OK;
|
||
}
|
||
|
||
hti = m_TreeCtrl.GetNextSiblingItem( hti );
|
||
}
|
||
|
||
return S_OK;
|
||
}
|
||
|
||
LRESULT CSoundListPaneView::OnAddSoundEnvi( WPARAM wParam, LPARAM lParam )
|
||
{
|
||
char *szName = (char*)wParam;
|
||
HTREEITEM hti = m_TreeCtrl.InsertItem( szName, 2, 3, m_hEnviItem );
|
||
m_TreeCtrl.Expand( m_hEnviItem, TVE_EXPAND );
|
||
m_TreeCtrl.SelectItems( hti, hti );
|
||
return S_OK;
|
||
}
|
||
void CSoundListPaneView::OnTvnBeginlabeleditTree1(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
|
||
// TODO: Add your control notification handler code here
|
||
m_szPrevLabelString = pTVDispInfo->item.pszText;
|
||
|
||
*pResult = 0;
|
||
}
|
||
|
||
void CSoundListPaneView::OnTvnEndlabeleditTree1(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
|
||
// TODO: Add your control notification handler code here
|
||
if( pTVDispInfo->item.pszText == NULL ) return;
|
||
if( m_hRootItem == pTVDispInfo->item.hItem ) return;
|
||
if( m_hBGMItem == pTVDispInfo->item.hItem ) return;
|
||
if( m_hEnviItem == pTVDispInfo->item.hItem ) return;
|
||
if( m_hPropItem == pTVDispInfo->item.hItem ) return;
|
||
if( m_TreeCtrl.GetParentItem( pTVDispInfo->item.hItem ) != m_hEnviItem ) return;
|
||
|
||
SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid;
|
||
if( Sector == -1 ) return;
|
||
CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector );
|
||
if( !pSector ) return;
|
||
CTEtWorldSound *pSound = (CTEtWorldSound *)pSector->GetSoundInfo();
|
||
if( !pSound ) return;
|
||
if( pSound->GetEnviFromName( pTVDispInfo->item.pszText ) ) return;
|
||
|
||
CTEtWorldSoundEnvi *pEnvi = (CTEtWorldSoundEnvi *)pSound->GetEnviFromName( m_szPrevLabelString );
|
||
if( !pEnvi ) return;
|
||
|
||
pEnvi->SetName( pTVDispInfo->item.pszText );
|
||
m_TreeCtrl.SetItemText( pTVDispInfo->item.hItem, pTVDispInfo->item.pszText );
|
||
|
||
*pResult = 0;
|
||
}
|
||
|
||
LRESULT CSoundListPaneView::OnSelectChange( WPARAM wParam, LPARAM lParam )
|
||
{
|
||
char *szName = (char*)wParam;
|
||
if( szName == NULL ) return S_OK;
|
||
HTREEITEM hti = m_TreeCtrl.FindItem( szName, FALSE, TRUE, FALSE, m_hEnviItem );
|
||
if( !hti ) return S_OK;
|
||
CalcSelectItem();
|
||
if( m_SelectItemList.GetCount() == 1 && m_SelectItemList.GetHead() == hti ) {
|
||
CWnd *pWnd = GetPaneWnd( SOUNDPROP_PANE );
|
||
pWnd->SendMessage( UM_REFRESH_PANE_VIEW, 5 );
|
||
}
|
||
else m_TreeCtrl.SelectItems( hti, hti );
|
||
|
||
|
||
return S_OK;
|
||
}
|