reman3/Rayman_X/cpa/tempgrp/ITF/cpadsel.cpp

264 lines
7.0 KiB
C++

/*=========================================================================
*
* CPAdSel.cpp : Selection - Implementation file
*
*
* Version 1.0
* Creation date
* Revision date
*
* Shaitan
*=======================================================================*/
#include "stdafx.h"
#ifdef ACTIVE_EDITOR
#include "acp_base.h"
#include "itf/CPAdSel.hpp"
#include "itf/DEVMul3d.Hpp"
#include "itf/CPAInter.hpp"
//#################################################################################
// CPA_DialogSelect dialog
//#################################################################################
/*----------------------------------------
----------------------------------------*/
CPA_DialogSelect::CPA_DialogSelect(CWnd* pParent /*=NULL*/)
: CDialog(CPA_DialogSelect::IDD, pParent)
{
//{{AFX_DATA_INIT(CPA_DialogSelect)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPA_DialogSelect)
DDX_Control(pDX, CPA_IDC_LISTSELECT2, m_cListSelect2);
DDX_Control(pDX, CPA_IDC_LISTSELECT, m_cListSelect);
DDX_Control(pDX, CPA_IDC_HIERARCHY2, m_cHierarchy2);
DDX_Control(pDX, CPA_IDC_HIERARCHY1, m_cHierarchy);
//}}AFX_DATA_MAP
}
/*----------------------------------------
----------------------------------------*/
BEGIN_MESSAGE_MAP(CPA_DialogSelect, CDialog)
//{{AFX_MSG_MAP(CPA_DialogSelect)
ON_LBN_SELCHANGE(CPA_IDC_LISTSELECT, OnSelchangeListSelect)
ON_LBN_DBLCLK(CPA_IDC_LISTSELECT, OnDblClkListSelect)
ON_LBN_SELCHANGE(CPA_IDC_HIERARCHY1, OnSelchangeHierarchy)
ON_LBN_DBLCLK(CPA_IDC_HIERARCHY1, OnDblClkHierarchy)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//#################################################################################
// CPA_DialogSelect message handlers
//#################################################################################
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::fn_vDoDialog (CPA_Interface *pInterface, tdeSelectMode eMode, CString csTypeName, CString a_csValidTypes[], long lNbTypes)
{
long lIndex;
// init parameters
m_pInterface = pInterface;
m_eMode = eMode;
m_lNbTypes = lNbTypes;
// type name
m_csTypeName = csTypeName;
// valid types
if (a_csValidTypes)
{
for (lIndex = 0; lIndex <lNbTypes; lIndex++)
m_a_csValidTypes[lIndex] = a_csValidTypes[lIndex];
}
// this dialog is modal
DoModal();
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::fn_vInitDialog ()
{
m_stListSelect.RemoveAll();
m_stHierarchy.RemoveAll();
m_pSelection = NULL;
m_pObjectToSelect = NULL;
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::fn_vCloseDialog (void)
{
// close the dialog
m_bDoDialog = FALSE;
// release capture
SetCapture();
m_p_oSurrenderCapture();
}
/*----------------------------------------
----------------------------------------*/
BOOL CPA_DialogSelect::OnInitDialog ()
{
CPA_SuperObject *pElem;
POSITION pos;
char szName[256];
char szType[256];
// Create the dialog
CDialog::OnInitDialog();
// set focus to the dialog
m_p_oGrabCapture();
// free capture (for controls)
ReleaseCapture();
// init list destroy
for (pElem = m_stListSelect.GetHeadElement(pos); pElem;
pElem = m_stListSelect.GetNextElement(pos))
{
sprintf(szName, "%s", pElem->GetNameToDraw());
sprintf(szType, " %.1s-%s", pElem->GetRealTypeName(), pElem->GetModelName());
m_cListSelect.AddString(szName);
m_cListSelect2.AddString(szType);
}
// set current selection
m_cListSelect.SetCurSel(0);
m_pSelection = m_stListSelect.FindElementFromIndex(0);
// init hierarchy
fn_vInitHierarchy();
return TRUE;
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::fn_vInitHierarchy (void)
{
CPA_SuperObject *pElem;
POSITION pos;
char szName[256];
char szType[256];
long lIndex;
// RAZ
m_stHierarchy.RemoveAll();
m_cHierarchy.ResetContent();
m_cHierarchy2.ResetContent();
// fill hierarchy list
if (m_lNbTypes)
{
for (lIndex = 0; lIndex <m_lNbTypes; lIndex++)
GetInterface()->fn_lFindSelectionInHierarchy(m_eMode, m_pSelection, m_a_csValidTypes[lIndex]);
}
else
GetInterface()->fn_lFindSelectionInHierarchy(m_eMode, m_pSelection, m_csTypeName);
// init control
for (pElem = m_stHierarchy.GetHeadElement(pos); pElem;
pElem = m_stHierarchy.GetNextElement(pos))
{
sprintf(szName, "%s", pElem->GetNameToDraw());
sprintf(szType, " %.1s-%s", pElem->GetRealTypeName(), pElem->GetModelName());
m_cHierarchy.AddString(szName);
m_cHierarchy2.AddString(szType);
}
// set default selection
m_cHierarchy.SetCurSel(0);
m_pObjectToSelect = m_stHierarchy.FindElementFromIndex(0);
// update drawing
GetInterface()->fn_vUpdateSelection(m_pObjectToSelect, m_eMode);
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnSelchangeListSelect()
{
// set the current selection
m_pSelection = m_stListSelect.FindElementFromIndex(m_cListSelect.GetCurSel());
// update hierarchy list
fn_vInitHierarchy();
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnDblClkListSelect()
{
// set the current selection
m_pSelection = m_stListSelect.FindElementFromIndex(m_cListSelect.GetCurSel());
// update hierarchy list
fn_vInitHierarchy();
if (m_pSelection)
{
// get object to select
m_pObjectToSelect = m_pSelection;
// close the dialog
fn_vCloseDialog();
CDialog::OnOK();
}
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnSelchangeHierarchy()
{
// get object to select
m_pObjectToSelect = m_stHierarchy.FindElementFromIndex(m_cHierarchy.GetCurSel());
// update drawing
GetInterface()->fn_vUpdateSelection(m_pObjectToSelect, m_eMode);
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnDblClkHierarchy()
{
// get object to select
m_pObjectToSelect = m_stHierarchy.FindElementFromIndex(m_cHierarchy.GetCurSel());
// update drawing
GetInterface()->fn_vUpdateSelection(m_pObjectToSelect, m_eMode);
// close the dialog
if (m_pObjectToSelect)
{
fn_vCloseDialog();
CDialog::OnOK();
}
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnOK()
{
// set the current selection
m_pObjectToSelect = m_stHierarchy.FindElementFromIndex(m_cHierarchy.GetCurSel());
// close the dialog
fn_vCloseDialog();
CDialog::OnOK();
}
/*----------------------------------------
----------------------------------------*/
void CPA_DialogSelect::OnCancel()
{
// cancel the selection
m_pObjectToSelect = NULL;
// close the dialog
fn_vCloseDialog();
CDialog::OnCancel();
}
#endif // ACTIVE_EDITOR