reman3/Rayman_X/cpa/tempgrp/OSC/Src/SECdSel.cpp

1009 lines
31 KiB
C++

/*=========================================================================
*
* SECdSel.cpp : Selected sector dialog - Implementation file
*
*
* Version 1.0
* Creation date
* Revision date
*
* Shaitan
*=======================================================================*/
#include "stdafx.h"
#include "acp_base.h"
#include "SECTint.hpp"
#include "SECdSel.hpp"
#include "SECmodif.hpp"
#include "SEClDias.hpp"
#include "..\Main\Inc\_EditID.h"
#include "TUT.h"
#define C_MaxGraphicLevel 5
#define C_MinGraphicLevel 1
#define C_MaxSoundLevel 127
#define C_MinSoundLevel 0
#define C_uiCopyEntry 1
#define C_uiPasteEntry 2
//#################################################################################
// SECT_DialogSel dialog
//#################################################################################
/*----------------------------------------
----------------------------------------*/
SECT_DialogSel::SECT_DialogSel(CWnd* pParent)
: CFormView(SECT_DialogSel::IDD)
{
//{{AFX_DATA_INIT(SECT_DialogSel)
//}}AFX_DATA_INIT
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(SECT_DialogSel)
DDX_Control(pDX, SECT_IDC_GRAPHIC, m_cGraphic);
DDX_Control(pDX, SECT_IDC_GRAPHICLEVEL, m_cGraphicLevel);
DDX_Control(pDX, SECT_IDC_GRAPHICSPIN, m_cGraphicSpin);
DDX_Control(pDX, SECT_IDC_GRAPHICMODE, m_cGraphicMode);
DDX_Control(pDX, SECT_IDC_COLLISION, m_cCollision);
DDX_Control(pDX, SECT_IDC_ACTIVITY, m_cActivity);
DDX_Control(pDX, SECT_IDC_SOUND, m_cSound);
DDX_Control(pDX, SECT_IDC_SOUNDLEVEL, m_cSoundLevel);
DDX_Control(pDX, SECT_IDC_SOUNDSPIN, m_cSoundSpin);
DDX_Control(pDX, SECT_IDC_SOUNDEVENT, m_cSoundEvent);
DDX_Control(pDX, SECT_IDC_SOUNDEVENTLIST, m_cSoundEventList);
DDX_Control(pDX, SECT_IDC_SELECTEDSECTOR, m_cComboSector);
DDX_Control(pDX, SECT_IDC_SYMETRIC, m_cSymetric);
//}}AFX_DATA_MAP
}
/*----------------------------------------
----------------------------------------*/
BEGIN_MESSAGE_MAP(SECT_DialogSel, CFormView)
//{{AFX_MSG_MAP(SECT_DialogSel)
ON_CBN_SELCHANGE(SECT_IDC_SELECTEDSECTOR, OnSelChangeComboSector)
ON_BN_CLICKED(SECT_IDC_SYMETRIC, OnSymetric)
ON_BN_CLICKED(SECT_IDC_GRAPHIC, OnGraphic)
ON_NOTIFY(UDN_DELTAPOS, SECT_IDC_GRAPHICSPIN, OnGraphicSpin)
ON_BN_CLICKED(SECT_IDC_GRAPHICMODE, OnGraphicMode)
ON_BN_CLICKED(SECT_IDC_COLLISION, OnCollision)
ON_BN_CLICKED(SECT_IDC_ACTIVITY, OnActivity)
ON_BN_CLICKED(SECT_IDC_SOUND, OnSound)
ON_NOTIFY(UDN_DELTAPOS, SECT_IDC_SOUNDSPIN, OnSoundSpin)
ON_BN_CLICKED(SECT_IDC_SOUNDEVENT, OnSoundEvent)
ON_NOTIFY(LVN_ITEMCHANGED, SECT_IDC_SOUNDEVENTLIST, OnSelChangeSoundEventList)
ON_WM_SIZE()
ON_WM_DESTROY()
ON_WM_DRAWITEM()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//#################################################################################
// SECT_DialogSel Inits
//#################################################################################
/*===========================================================================
* Description: Init dialog
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vInitDialog (Sector_Interface *pOwnerDLL, CWnd *pParent)
{
// create the dialog
m_bInitialised = FALSE;
m_pSectorInterface = pOwnerDLL;
CFormView::Create(NULL, "", AFX_WS_DEFAULT_VIEW, CRect(0,0,120,180), pParent, AFX_IDW_PANE_FIRST, NULL);
// init data for dialog
CFormView::UpdateData(FALSE);
// FOR TUTORIAL
TUT_M_vGetTutDll();
// mode
TUT_M_vRegisterControl(m_cSymetric.m_hWnd, "OSC_DSEL_BUTTON_SYMETRIC", TUT_e_Button);
// sector
TUT_M_vRegisterControl(m_cComboSector.m_hWnd, "OSC_DSEL_COMBO_SECTOR", TUT_e_ComboBox);
// graphic
TUT_M_vRegisterControl(m_cGraphic.m_hWnd, "OSC_DSEL_BUTTON_GRAPHIC", TUT_e_Button);
TUT_M_vRegisterControl(m_cGraphicSpin.m_hWnd, "OSC_DSEL_SPIN_GRAPHIC", TUT_e_Spin);
TUT_M_vRegisterControl(m_cGraphicLevel.m_hWnd, "OSC_DSEL_EDIT_GRAPHIC", TUT_e_TextEdit);
TUT_M_vRegisterControl(m_cGraphicMode.m_hWnd, "OSC_DSEL_MODE_GRAPHIC", TUT_e_Button);
// collision
TUT_M_vRegisterControl(m_cCollision.m_hWnd, "OSC_DSEL_BUTTON_COLLISION", TUT_e_Button);
// activity
TUT_M_vRegisterControl(m_cActivity.m_hWnd, "OSC_DSEL_BUTTON_ACTIVITY", TUT_e_Button);
// sound
TUT_M_vRegisterControl(m_cSound.m_hWnd, "OSC_DSEL_BUTTON_SOUND", TUT_e_Button);
TUT_M_vRegisterControl(m_cSoundSpin.m_hWnd, "OSC_DSEL_SPIN_SOUND", TUT_e_Spin);
TUT_M_vRegisterControl(m_cSoundLevel.m_hWnd, "OSC_DSEL_EDIT_SOUND", TUT_e_TextEdit);
// sound event
TUT_M_vRegisterControl(m_cSoundEvent.m_hWnd, "OSC_DSEL_BUTTON_SNDEVENT", TUT_e_Button);
TUT_M_vRegisterControl(m_cSoundEventList.m_hWnd, "OSC_DSEL_LIST_SNDEVENT", TUT_e_ListBox);
// END TUTORIAL
// update sndevtlist
m_cSoundEventList.fn_vInitDialogParameters(this);
// update params
m_cGraphicSpin.SetBuddy(&m_cGraphicLevel);
m_cGraphicSpin.SetRange(C_MinGraphicLevel, C_MaxGraphicLevel);
m_cGraphicSpin.SetPos(0);
m_cSoundSpin.SetBuddy(&m_cSoundLevel);
m_cSoundSpin.SetRange(C_MinSoundLevel, C_MaxSoundLevel);
m_cSoundSpin.SetPos(0);
// update mode
m_cSymetric.EnableWindow(FALSE);
// init datas
fn_vReinitDialog(NULL, NULL);
m_bInitialised = TRUE;
}
/*===========================================================================
* Description: init controls with default values
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vInitControls (BOOL bState)
{
Sector_Object *pSector;
BOOL bShow;
BOOL bVirtual = TRUE;
int iInd;
// virtual
if (m_pEditedSector)
bVirtual = ((Sector_Object *) m_pEditedSector->GetObject())->fn_bIsVirtual();
// name & virtual
if (m_pSelectedSector)
{
// get parameters
pSector = (Sector_Object *) m_pSelectedSector->GetObject();
strcpy(m_szName, pSector->GetName());
// set combo selection
iInd = m_cComboSector.FindStringExact(-1,m_szName);
m_cComboSector.SetCurSel(iInd);
}
else if (m_pEditedSector)
{
// from all sectors
strcpy(m_szName, "All Sectors");
// set combo selection
iInd = m_cComboSector.FindStringExact(-1,m_szName);
m_cComboSector.SetCurSel(iInd);
}
else
{
strcpy(m_szName, "");
m_cComboSector.SetCurSel(-1);
}
// state
m_cComboSector.EnableWindow(m_pSectorInterface->GetEditMode() == E_em_EditSector);
// symetric
m_cSymetric.EnableWindow((bState)&&(m_pSelectedSector != m_pEditedSector));
if (m_pSelectedSector && (m_pEditedSector != m_pSelectedSector))
bVirtual = (bVirtual || ((Sector_Object *) m_pSelectedSector->GetObject())->fn_bIsVirtual());
// disable
m_cGraphic.EnableWindow(bState);
m_cCollision.EnableWindow(bState);
m_cActivity.EnableWindow(bState);
m_cSound.EnableWindow(bState);
m_cSoundEvent.EnableWindow(bState);
// set state
m_cGraphic.SetCheck(0);
m_cCollision.SetCheck(0);
m_cActivity.SetCheck(0);
m_cSound.SetCheck(0);
m_cSoundEvent.SetCheck(0);
// set additionnal controls
bShow = bState && (m_pSelectedSector != m_pEditedSector);
// graphic controls
m_cGraphicLevel.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cGraphicSpin.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cGraphicMode.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cGraphicLevel.EnableWindow(FALSE);
m_cGraphicSpin.EnableWindow(FALSE);
m_cGraphicMode.EnableWindow(FALSE);
m_cGraphicSpin.SetPos(0);
// sound controls
m_cSoundLevel.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cSoundSpin.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cSoundLevel.EnableWindow(FALSE);
m_cSoundSpin.EnableWindow(FALSE);
m_cSoundSpin.SetPos(0);
// sound event list
m_cSoundEventList.ShowWindow((bShow) ? SW_SHOW : SW_HIDE);
m_cSoundEventList.EnableWindow(FALSE);
fn_vUpdateSoundEventList(NULL);
}
/*===========================================================================
* Description: update dialog when selection changes
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vReinitDialog (CPA_SuperObject *pSector, CPA_SuperObject *pEditedSector)
{
CPA_BaseObjectList *pListObject;
SECT_SoundEventElement *pSoundEvent;
SECT_GraphicElement *pGraphic;
SECT_SoundElement *pSound;
CPA_BaseObject *pElem;
Sector_Object *pSectObj;
Position pos;
BOOL bVirtual;
// init current sector
m_pSelectedSector = pSector;
m_pEditedSector = pEditedSector;
// update mode
m_cSymetric.SetCheck(m_pSectorInterface->fn_bSymetricMode());
// reinito combo
m_cComboSector.ResetContent();
pListObject = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
if (pListObject->GetCount() > 0)
{
// each sector of the list
for (pElem = pListObject->GetHeadElement(pos); pElem; pElem = pListObject->GetNextElement(pos))
m_cComboSector.AddString(pElem->GetName());
// all sectors (sound events)
m_cComboSector.AddString("All Sectors");
}
// default => disable all controls
if ((!pSector)||(!m_pEditedSector))
{
// disable all controls
fn_vInitControls(FALSE);
if (!m_pEditedSector)
return;
pSectObj = (Sector_Object *) pEditedSector->GetObject();
bVirtual = pSectObj->fn_bIsVirtual();
// for graphics only : all sectors
if (!pSector)
{
// enable graphic control
m_cGraphic.EnableWindow(TRUE);
m_cGraphic.SetCheck(pSectObj->fn_bHasFullLink(E_Graphic));
}
// if necessary, enable sound events ("FromAllSectors")
if (!pSector)
{
// enable collision control
m_cCollision.EnableWindow(TRUE);
m_cCollision.SetCheck(pSectObj->fn_bHasFullLink(E_Collision));
// enable activity control
m_cActivity.EnableWindow(TRUE);
m_cActivity.SetCheck(pSectObj->fn_bHasFullLink(E_Activity));
// enable sound control
m_cSound.EnableWindow(TRUE);
m_cSound.SetCheck(pSectObj->fn_bHasFullLink(E_Sound));
// sound event list
m_cSoundEvent.EnableWindow(TRUE);
m_cSoundEventList.ShowWindow(SW_SHOW);
// get corresponding sound event
pSoundEvent = (SECT_SoundEventElement *) pSectObj->GetSoundEventList()->GetElementWithSector(pSector);
// set selection
if (pSoundEvent)
{
m_cSoundEvent.SetCheck(1);
m_cSoundEventList.EnableWindow(TRUE);
fn_vUpdateSoundEventList(pSoundEvent);
}
}
}
// selection => edit corresponding sector
else
{
pSectObj = (Sector_Object *) pEditedSector->GetObject();
// enable corresponding controls
fn_vInitControls(TRUE);
// check lists
if (m_pSelectedSector != m_pEditedSector)
{
// graphic
pGraphic = (SECT_GraphicElement *) pSectObj->GetGraphicList()->GetElementWithSector(pSector);
if (pGraphic)
{
m_cGraphic.SetCheck(1);
m_cGraphicSpin.EnableWindow(TRUE);
m_cGraphicLevel.EnableWindow(TRUE);
m_cGraphicMode.EnableWindow(TRUE);
m_cGraphicSpin.SetPos(pGraphic->GetGraphicLevel());
m_cGraphicMode.SetCheck(pGraphic->GetGraphicMode() == C_SECT_ModeLookOnly);
}
// collision
if (pSectObj->GetCollisionList()->GetElementWithSector(pSector))
m_cCollision.SetCheck(1);
// activity
if (pSectObj->GetActivityList()->GetElementWithSector(pSector))
m_cActivity.SetCheck(1);
// sound
pSound = (SECT_SoundElement *) pSectObj->GetSoundList()->GetElementWithSector(pSector);
if (pSound)
{
m_cSound.SetCheck(1);
m_cSoundSpin.EnableWindow(TRUE);
m_cSoundLevel.EnableWindow(TRUE);
m_cSoundSpin.SetPos(pSound->GetSoundLevel());
}
// sound event
pSoundEvent = (SECT_SoundEventElement *) pSectObj->GetSoundEventList()->GetElementWithSector(pSector);
if (pSoundEvent)
{
m_cSoundEvent.SetCheck(1);
m_cSoundEventList.EnableWindow(TRUE);
fn_vUpdateSoundEventList(pSoundEvent);
}
}
else
fn_vUpdateCheck();
}
}
/*===========================================================================
* Description: update dialog when selection changes
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vUpdateCheck (void)
{
if (m_pSelectedSector != m_pEditedSector)
return;
// reinit controls
if (m_pSectorInterface->GetEditMode() == E_em_EditList)
{
m_cGraphic.SetCheck(m_pSectorInterface->GetListActivity(E_Graphic));
m_cCollision.SetCheck(m_pSectorInterface->GetListActivity(E_Collision));
m_cActivity.SetCheck(m_pSectorInterface->GetListActivity(E_Activity));
m_cSound.SetCheck(m_pSectorInterface->GetListActivity(E_Sound));
m_cSoundEvent.SetCheck(m_pSectorInterface->GetListActivity(E_SoundEvent));
}
else
{
m_cGraphic.SetCheck(FALSE);
m_cCollision.SetCheck(FALSE);
m_cActivity.SetCheck(FALSE);
m_cSound.SetCheck(FALSE);
m_cSoundEvent.SetCheck(FALSE);
}
}
/*===========================================================================
* Description: update dialog when selected list changes
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vOnCheckList (CButton *pControl, tdeTypeList eType)
{
SECT_ModifSectorLinks *pModifLink;
SECT_ModifFullLink *pModifFull;
DEV_ViewPort3D *pViewport;
// selected sector
if (m_pSelectedSector != m_pEditedSector)
{
// no sector => full link
if ((!m_pSelectedSector)&&(eType != E_SoundEvent))
{
// create modif
if (pControl->GetCheck())
pModifFull = new SECT_ModifFullLink(m_pSectorInterface, E_mt_AddFullLink,
m_pEditedSector, eType);
else
pModifFull = new SECT_ModifFullLink(m_pSectorInterface, E_mt_DelFullLink,
m_pEditedSector, eType);
// do modif
m_pSectorInterface->M_GetEditManager()->AskFor(pModifFull);
}
// else modif link
else
{
// create modif
if (pControl->GetCheck())
pModifLink = new SECT_ModifSectorLinks(m_pSectorInterface, E_mt_AddSectorInList,
m_pEditedSector, m_pSelectedSector, eType);
else
pModifLink = new SECT_ModifSectorLinks(m_pSectorInterface, E_mt_DelSectorInList,
m_pEditedSector, m_pSelectedSector, eType);
// do modif
m_pSectorInterface->M_GetEditManager()->AskFor(pModifLink);
}
}
// edited sector
else
{
// update list activity
m_pSectorInterface->SetListActivity(eType, pControl->GetCheck());
// set focus to device
pViewport = (DEV_ViewPort3D *) m_pSectorInterface->GetInterface()->GetMultiDevice()->GetFocusDevice()->GetViewPort();
pViewport->SetFocus();
}
}
/*===========================================================================
* Description: init list with all sound events
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vInitSoundEventList (void)
{
// reinit list
m_cSoundEventList.SetSortedList(m_pSectorInterface->GetSoundEventList());
// current selection => none
m_cSoundEventList.SetSelectedItem(-1);
}
/*===========================================================================
* Description: select sound event in list
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
void SECT_DialogSel::fn_vUpdateSoundEventList (SECT_SoundEventElement *pSoundEvent)
{
// redraw list items
m_cSoundEventList.RedrawItems(0, m_cSoundEventList.GetItemCount() - 1);
m_cSoundEventList.UpdateWindow();
// update dialog
if (m_pSectorInterface->GetSingleList(E_SoundEvent))
m_pSectorInterface->GetSingleList(E_SoundEvent)->fn_vUpdateSelection(m_pSelectedSector);
}
//#################################################################################
// SECT_DialogSel Messages
//#################################################################################
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSelChangeComboSector (void)
{
char szName[256];
if (!m_bInitialised)
return;
// name was changed ?
m_cComboSector.GetLBText(m_cComboSector.GetCurSel(), szName);
if (!strcmp(szName, "All Sectors"))
m_pSelectedSector = NULL;
else
m_pSelectedSector = m_pSectorInterface->GetSectorWithName(szName);
m_pSectorInterface->fn_vSelectNewSector(m_pSelectedSector);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnGraphic()
{
SECT_GraphicElement *pGraphic;
Sector_Object *pSectObj;
// update lists
fn_vOnCheckList(&m_cGraphic, E_Graphic);
// update controls
if ((m_pSelectedSector != m_pEditedSector)&&(m_pSelectedSector))
{
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
pGraphic = (SECT_GraphicElement *) pSectObj->GetGraphicList()->GetElementWithSector(m_pSelectedSector);
// update controls
m_cGraphicSpin.EnableWindow(m_cGraphic.GetCheck());
m_cGraphicLevel.EnableWindow(m_cGraphic.GetCheck());
m_cGraphicMode.EnableWindow(m_cGraphic.GetCheck());
m_cGraphicSpin.SetPos((m_cGraphic.GetCheck()) ? pGraphic->GetGraphicLevel() : 0);
m_cGraphicMode.SetCheck((m_cGraphic.GetCheck()) ? (pGraphic->GetGraphicMode() == C_SECT_ModeLookOnly) : FALSE);
}
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnCollision()
{
// update lists
fn_vOnCheckList(&m_cCollision, E_Collision);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnActivity()
{
// update lists
fn_vOnCheckList(&m_cActivity, E_Activity);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSound()
{
SECT_SoundElement *pSound;
Sector_Object *pSectObj;
// update lists
fn_vOnCheckList(&m_cSound, E_Sound);
// update controls
if ((m_pSelectedSector != m_pEditedSector)&&(m_pSelectedSector))
{
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
pSound = (SECT_SoundElement *) pSectObj->GetSoundList()->GetElementWithSector(m_pSelectedSector);
// update controls
m_cSoundSpin.EnableWindow(m_cSound.GetCheck());
m_cSoundLevel.EnableWindow(m_cSound.GetCheck());
m_cSoundSpin.SetPos((m_cSound.GetCheck()) ? pSound->GetSoundLevel() : 0);
}
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSoundEvent()
{
SECT_SoundEventElement *pSoundEvent;
Sector_Object *pSectObj;
// update lists
fn_vOnCheckList(&m_cSoundEvent, E_SoundEvent);
// update controls
if (m_pSelectedSector != m_pEditedSector)
{
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
pSoundEvent = (SECT_SoundEventElement *) pSectObj->GetSoundEventList()->GetElementWithSector(m_pSelectedSector);
// update controls
m_cSoundEventList.EnableWindow(m_cSoundEvent.GetCheck());
fn_vUpdateSoundEventList(pSoundEvent);
}
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
// not interested => default handling
if ((lpDIS->itemID == LB_ERR) ||
(nIDCtl != SECT_IDC_SOUNDEVENTLIST) ||
(!m_cSoundEventList.IsWindowEnabled()))
return;
// draw item
m_cSoundEventList.DrawItem(lpDIS);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSize (UINT nFlags, int cx, int cy)
{
RECT WindowPosition;
int ecx, ecy;
if (!m_bInitialised)
return;
GetWindowRect(&WindowPosition);
// calculate width
ecx = WindowPosition.right - WindowPosition.left - 10;
ecy = WindowPosition.bottom - WindowPosition.top - 160;
ecx = (ecx < 60) ? 60 : ecx;
ecy = (ecy < 0) ? 0 : ecy;
m_cSymetric.MoveWindow(ecx-45, 2, 50, 18);
m_cComboSector.MoveWindow(5, 5, ecx - 55, 20);
m_cSoundEventList.MoveWindow(5, 155, ecx, ecy);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnDestroy (void)
{
// FOR TUTORIAL
TUT_M_vGetTutDll();
// mode
TUT_M_vUnregisterControl(m_cSymetric.m_hWnd);
// sector
TUT_M_vUnregisterControl(m_cComboSector.m_hWnd);
// graphic
TUT_M_vUnregisterControl(m_cGraphic.m_hWnd);
TUT_M_vUnregisterControl(m_cGraphicSpin.m_hWnd);
TUT_M_vUnregisterControl(m_cGraphicLevel.m_hWnd);
TUT_M_vUnregisterControl(m_cGraphicMode.m_hWnd);
// collision
TUT_M_vUnregisterControl(m_cCollision.m_hWnd);
// activity
TUT_M_vUnregisterControl(m_cActivity.m_hWnd);
// sound
TUT_M_vUnregisterControl(m_cSound.m_hWnd);
TUT_M_vUnregisterControl(m_cSoundSpin.m_hWnd);
TUT_M_vUnregisterControl(m_cSoundLevel.m_hWnd);
// sound event
TUT_M_vUnregisterControl(m_cSoundEvent.m_hWnd);
TUT_M_vUnregisterControl(m_cSoundEventList.m_hWnd);
// END TUTORIAL
CFormView::OnDestroy();
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnGraphicSpin (NMHDR * pNMHDR, LRESULT * pResult)
{
SECT_ModifSectorParams *pModif;
SECT_GraphicElement *pGraphic = NULL;
Sector_Object *pSectObj = NULL;
LPNM_UPDOWN pUpDown;
int iFinalPos;
// get action code
pUpDown = (LPNM_UPDOWN)pNMHDR;
if (pUpDown->hdr.code != UDN_DELTAPOS)
return;
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
if (pSectObj)
pGraphic = (SECT_GraphicElement *) pSectObj->GetGraphicList()->GetElementWithSector(m_pSelectedSector);
if (!pGraphic)
return;
// get final pos
iFinalPos = pUpDown->iPos + pUpDown->iDelta;
// update level
if (iFinalPos > C_MaxGraphicLevel)
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeLevelOfDetail,
E_Graphic, pGraphic, C_MinGraphicLevel, NULL);
else if (iFinalPos < C_MinGraphicLevel)
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeLevelOfDetail,
E_Graphic, pGraphic, C_MaxGraphicLevel, NULL);
else
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeLevelOfDetail,
E_Graphic, pGraphic, iFinalPos, NULL);
// update dialog
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnGraphicMode (void)
{
SECT_ModifSectorParams *pModif;
SECT_GraphicElement *pGraphic = NULL;
Sector_Object *pSectObj = NULL;
char cNewMode;
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
if (pSectObj)
pGraphic = (SECT_GraphicElement *) pSectObj->GetGraphicList()->GetElementWithSector(m_pSelectedSector);
if (!pGraphic)
return;
// get final state
cNewMode = (m_cGraphicMode.GetCheck()) ? C_SECT_ModeLookOnly : C_SECT_ModeNormal;
// update mode
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeGraphicMode,
E_Graphic, pGraphic, cNewMode, NULL);
// update dialog
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSoundSpin (NMHDR * pNMHDR, LRESULT * pResult)
{
SECT_ModifSectorParams *pModif;
SECT_SoundElement *pSound = NULL;
Sector_Object *pSectObj = NULL;
LPNM_UPDOWN pUpDown;
int iFinalPos;
// get action code
pUpDown = (LPNM_UPDOWN)pNMHDR;
if (pUpDown->hdr.code != UDN_DELTAPOS)
return;
// get parameters
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
if (pSectObj)
pSound = (SECT_SoundElement *) pSectObj->GetSoundList()->GetElementWithSector(m_pSelectedSector);
if (!pSound)
return;
// get final pos
iFinalPos = pUpDown->iPos + pUpDown->iDelta;
// update level
if (iFinalPos > C_MaxSoundLevel)
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeSoundVolume,
E_Sound, pSound, C_MinSoundLevel, NULL);
else if (iFinalPos < C_MinSoundLevel)
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeSoundVolume,
E_Sound, pSound, C_MinSoundLevel, NULL);
else
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_ChangeSoundVolume,
E_Sound, pSound, iFinalPos, NULL);
// update dialog
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSelChangeSoundEventList (NMHDR * pNMHDR, LRESULT * pResult)
{
SECT_ModifSectorParams *pModif;
SECT_SoundEventElement *pSoundEventElem;
SECT_ElementBase *pElem;
SECT_SoundEvent *pSoundEvent = NULL;
Sector_Object *pSectObj;
LPNM_LISTVIEW pNMListView = (LPNM_LISTVIEW)pNMHDR;
BOOL bOldSelect, bNewSelect;
int iIndex;
// update param
*pResult = 0;
// no sound DLL => no change in sound environment
if (!m_pSectorInterface->GetSoundEventList())
return;
// test selection
if ((pNMListView->uChanged != LVIF_STATE)||(m_cSoundEventList.fn_bIsSelecting()))
return;
bOldSelect = (pNMListView->uOldState & LVIS_SELECTED);
bNewSelect = (pNMListView->uNewState & LVIS_SELECTED);
// get corresponding sector
iIndex = pNMListView->iItem;
pSoundEvent = (SECT_SoundEvent *) m_cSoundEventList.GetItemData(iIndex);
m_cSoundEventList.SetSelectedItem(-1);
if (!pSoundEvent)
return;
if (!pSoundEvent->fn_bIsAvailable()) {
//try to load it once:
pSoundEvent->GetEditor()->fn_bLoadBaseObject(pSoundEvent);
if (!pSoundEvent->fn_bIsAvailable())
return;
}
if (bOldSelect != bNewSelect)
{
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
pElem = pSectObj->GetSoundEventList()->GetElementWithSector(m_pSelectedSector);
if (!pElem)
return;
pSoundEventElem = (SECT_SoundEventElement *) pElem;
// check if sound event already belongs to the list
if (m_cSoundEventList.fn_bIsInCurrentList(pSoundEvent))
{
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_DelSoundEvent,
E_SoundEvent, pSoundEventElem, -1, pSoundEvent);
}
else
{
pModif = new SECT_ModifSectorParams(m_pSectorInterface, E_mt_AddSoundEvent,
E_SoundEvent, pSoundEventElem, -1, pSoundEvent);
}
// update selection
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
// redraw item
m_cSoundEventList.RedrawItems(iIndex, iIndex);
m_cSoundEventList.UpdateWindow();
// update dialog
m_pSectorInterface->GetSingleList(E_SoundEvent)->fn_vUpdateSelection(m_pSelectedSector);
}
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnSymetric (void)
{
SECT_ModifSymetricSelect *pModif;
pModif = new SECT_ModifSymetricSelect(m_pSectorInterface, E_tm_SymetricSelect,
m_pEditedSector, m_pSelectedSector);
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
}
/*----------------------------------------
----------------------------------------*/
void SECT_DialogSel::OnRButtonDown (UINT nFlags, CPoint point)
{
BOOL bCopy;
ClientToScreen( &point );
// create popup menu
CMenu oMenu;
oMenu.CreatePopupMenu();
// check if there is already a copy
bCopy = (m_pSectorInterface->GetCopyOfSectorList()->GetCount() > 0);
// Add Entry
oMenu.AppendMenu(MF_STRING | MF_ENABLED, C_uiCopyEntry, "Copy List");
oMenu.AppendMenu(MF_STRING | (bCopy) ? MF_ENABLED : MF_GRAYED, C_uiPasteEntry, "Paste List");
oMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
// destroy menus
oMenu.DestroyMenu();
}
/*----------------------------------------
----------------------------------------*/
BOOL SECT_DialogSel::OnCommand (WPARAM wParam, LPARAM lParam)
{
// command from a menu ?
if (HIWORD(wParam) == 0)
{
// ID of menu item ?
switch (LOWORD(wParam))
{
// column headers
case C_uiCopyEntry:
m_pSectorInterface->fn_vCopySectorList(m_pSectorInterface->GetEditedSector(), E_NoActiveList);
break;
case C_uiPasteEntry:
m_pSectorInterface->fn_vPasteSectorList(m_pSectorInterface->GetEditedSector(), E_NoActiveList);
break;
}
}
return CWnd::OnCommand(wParam, lParam);
}
//#################################################################################
// LIST BOX
//#################################################################################
/*----------------------------------------
----------------------------------------*/
SECT_SndEvListBox::SECT_SndEvListBox (void)
{
// init dialog parameters
m_pDialogSel = NULL;
m_pSectorInterface = NULL;
}
/*----------------------------------------
----------------------------------------*/
void SECT_SndEvListBox::fn_vInitDialogParameters (SECT_DialogSel *pDialogSel)
{
// init parameters
m_pDialogSel = pDialogSel;
m_pSectorInterface = m_pDialogSel->GetSectorInterface();
// set permanent style and display
SetDrawStyle(C_lDrawName, FALSE, FALSE);
SetDisplayGray(TRUE, TRUE, FALSE);
// set parameters
SetOwnerEditor(m_pSectorInterface);
}
/*----------------------------------------
----------------------------------------*/
void SECT_SndEvListBox::DrawItem (LPDRAWITEMSTRUCT lpDIS)
{
SECT_SoundEvent *pSoundEvent;
COLORREF cTextColor;
COLORREF cRectColor;
CString csText;
CDC *pDC;
if (!m_pDialogSel)
return;
// init parameters
pSoundEvent = (SECT_SoundEvent *) GetItemData(lpDIS->itemID);
// drawing rect
pDC = CDC::FromHandle(lpDIS->hDC);
// in current list => blue rect
if (fn_bIsInCurrentList(pSoundEvent))
{
cRectColor = RGB (0, 0, 0);
cTextColor = RGB (254, 254, 254);
}
// normal sector => black
else
{
cRectColor = GetSysColor(COLOR_WINDOW);
cTextColor = RGB (128, 0, 0);
}
// draw item
pDC->FillSolidRect(&lpDIS->rcItem, cRectColor);
pDC->SetBkMode(TRANSPARENT);
lpDIS->rcItem.left += 2;
pDC->SetTextColor(cTextColor);
pDC->DrawText(pSoundEvent->GetNameToDraw(), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
}
/*----------------------------------------
----------------------------------------*/
BOOL SECT_SndEvListBox::fn_bIsInCurrentList (CPA_SaveObject *pSoundEvent)
{
SECT_SoundEventElement *pSoundEventElem;
SECT_SndEvtEngineElem *pSndEvElem;
SECT_ElementBase *pElem;
Sector_Object *pSectObj;
if (!m_pDialogSel->GetEditedSector())
return FALSE;
// get parameters
pSectObj = (Sector_Object *) m_pDialogSel->GetEditedSector()->GetObject();
pElem = pSectObj->GetSoundEventList()->GetElementWithSector(m_pDialogSel->GetSelectedSector());
if (!pElem)
return FALSE;
// check if sound event already belongs to the list
pSoundEventElem = (SECT_SoundEventElement *) pElem;
pSndEvElem = pSoundEventElem->GetElementWithSoundEvent(pSoundEvent);
return (pSndEvElem != NULL);
}