reman3/Rayman_X/cpa/tempgrp/TID/Src/IADVwMn.cpp

456 lines
13 KiB
C++
Raw Blame History

// Implementation of the IAD_ControlView class
///////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#define HieFriend
#define D_ZdxStuff_StructureDefine
#include "IADVwMn.hpp"
#include "IADFmMn.hpp"
#include "IADVwRst.hpp"
#include "IADDoc.hpp"
#include "IADCnst.hpp"
#include "IADDgStp.hpp"
#include "IADDgQu.hpp"
#include "_IADItrf.hpp"
#include "IADLstCt.hpp"
#include "IADMacro.hpp"
#include "help_def.h" //For Context help
//External modules
#include "x:\cpa\main\inc\_EditID.h"
#include "TFA.h"
#include "OAc.h"
//End External modules
#define IAD_C_NUMBER_OF_COLUMNS_IN_LIST_OF_ACTORS 5
#define IAD_C_WIDTH_PERCENT_COLUMNS_0 25
#define IAD_C_WIDTH_PERCENT_COLUMNS_1 10
#define IAD_C_WIDTH_PERCENT_COLUMNS_2 25
#define IAD_C_WIDTH_PERCENT_COLUMNS_3 25
#define IAD_C_WIDTH_PERCENT_COLUMNS_4 15
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// IAD_ControlView
IMPLEMENT_DYNCREATE(IAD_ControlView, CFormView)
BEGIN_MESSAGE_MAP(IAD_ControlView, CFormView)
//{{AFX_MSG_MAP(IAD_ControlView)
ON_WM_HELPINFO()
ON_BN_CLICKED(IDC_CHECK_IA_DEBUGGER_ON, OnCheckIaDebuggerOn)
ON_WM_SIZE()
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_ACTORS, OnSelchangedListActors)
ON_BN_CLICKED(IDC_VIEW_ALL, OnViewAll)
//}}AFX_MSG_MAP
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// IAD_ControlView construction/destruction
//***************************************************************************
IAD_ControlView::IAD_ControlView()
: CFormView( IAD_ControlView::IDD )
{
//{{AFX_DATA_INIT(IAD_ControlView)
//}}AFX_DATA_INIT
// m_pri_pclListControl = NULL;
}
//***************************************************************************
IAD_ControlView::~IAD_ControlView()
{
}
//***************************************************************************
void IAD_ControlView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(IAD_ControlView)
DDX_Control(pDX, IDC_LIST_ACTORS, m_clListControl);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// IAD_ControlView message handlers
//***************************************************************************
void IAD_ControlView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
EnableToolTips(TRUE);
m_pub_fn_pclGetDocument()->m_pclControlView = this;
//Prepares List Control
CListCtrl *pclListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST_ACTORS);
if ( pclListCtrl != NULL )
{
pclListCtrl->InsertColumn(0, "Actor");
pclListCtrl->InsertColumn(1, "On");
pclListCtrl->InsertColumn(2, "Model");
pclListCtrl->InsertColumn(3, "Family");
pclListCtrl->InsertColumn(4, "Max Size");
}
((CButton *)GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON))->SetCheck(TRUE);
OnCheckIaDebuggerOn();
// BEGIN ROMTEAM Cristi Petrescu 98-08-
m_bViewAll = TRUE;
((CButton *)GetDlgItem(IDC_VIEW_ALL))->SetCheck(TRUE);
// END ROMTEAM Cristi Petrescu 98-08-
}
//*******************************************************************************
//Gets the (only existing) document
IAD_MyDocument* IAD_ControlView::m_pub_fn_pclGetDocument()
{
return g_pclInterface->m_fn_pclGetDocument();
}
// BEGIN ROMTEAM Cristi Petrescu 98-08-
//*******************************************************************************
//Displays the list of Actors
void IAD_ControlView::m_fn_vDisplayActorsList()
{
//Fills list control
// m_clListControl.SetTextColor(RGB(175, 150, 255));
// m_clListControl.SetTextBkColor(RGB(64, 64, 64));
IAD_td_stInternalActorDescription *p_stCurrentInternalActor;
m_clListControl.DeleteAllItems();
POSITION pos = m_pri_clListOfActors.GetHeadPosition();
while ( pos != NULL )
{
p_stCurrentInternalActor = m_pri_clListOfActors.GetNext(pos);
if (! m_bViewAll && ! p_stCurrentInternalActor -> bTraceIsEnabled)
continue;
short wIndex = m_clListControl.GetItemCount() ;
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT | LVIF_STATE;
lvItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
lvItem.state = 0;
lvItem.iItem = wIndex;
lvItem. iSubItem = 0;
lvItem. pszText = (char *)LPCTSTR(p_stCurrentInternalActor->pclActor->GetName());
m_clListControl.InsertItem(&lvItem);
lvItem. iSubItem = 1;
lvItem. pszText = p_stCurrentInternalActor->bTraceIsEnabled ? "X" : "";
m_clListControl.SetItem(&lvItem);
lvItem. iSubItem = 2;
lvItem. pszText = (char *)LPCTSTR(p_stCurrentInternalActor->pclActor->m_fn_pclGetModel()->GetName());
m_clListControl.SetItem(&lvItem);
lvItem. iSubItem = 3;
lvItem. pszText = (char *)LPCTSTR(p_stCurrentInternalActor->pclActor->m_pub_fn_pclGetFamily()->GetName());
m_clListControl.SetItem(&lvItem);
lvItem. iSubItem = 4;
CString csText;
csText.Format("%ld", p_stCurrentInternalActor->lNumberOfEntries);
lvItem. pszText = (char *)LPCTSTR(csText);
m_clListControl.SetItem(&lvItem);
m_clListControl.SetItemData(wIndex, (DWORD)p_stCurrentInternalActor);
}
}
// END ROMTEAM Cristi Petrescu 98-08-
//*******************************************************************************
//Constructs the list of Actors
void IAD_ControlView::m_pub_fn_vBuildActorsList()
{
//Gets the global Actors List
CPA_BaseObjectList *pclActorsList = g_pclInterface->GetMainWorld()->fn_p_oGetOriginalObjectList(C_szActorInstanceTypeName);
//Fills internal list
Position ActorPos = pclActorsList->GetHeadPosition();
while ( ActorPos != 0 )
{
CPA_Actor *pclCurrentActor = (CPA_Actor *)pclActorsList->GetNext(ActorPos);
//If actor is not an Always Model
if ( !pclCurrentActor->m_fn_bIsAnAlways() )
{
//If Actor has an IA
if ( ((tdstEngineObject *)pclCurrentActor->GetStruct())->h_Brain != NULL )
{
if ( !m_pri_fn_bActorIsInList(pclCurrentActor) )
{
IAD_td_stInternalActorDescription *p_stNewInternalActor;
p_stNewInternalActor = new IAD_td_stInternalActorDescription;
p_stNewInternalActor->pclActor = pclCurrentActor;
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
p_stNewInternalActor->bTraceIsEnabled = AIDebug_fn_bGetEnable(M_pstGetMindOfBrain( ((tdstEngineObject *)pclCurrentActor->GetStruct())->h_Brain ));
p_stNewInternalActor->lNumberOfEntries = AIDebug_fn_uwGetSizeOfTrace(M_pstGetMindOfBrain( ((tdstEngineObject *)pclCurrentActor->GetStruct())->h_Brain ));
#else
p_stNewInternalActor->bTraceIsEnabled = FALSE;
p_stNewInternalActor->lNumberOfEntries = 0;
#endif
// CG PB DEBUGGER
p_stNewInternalActor->pclRoot = NULL;
m_pri_clListOfActors.AddTail(p_stNewInternalActor);
}
}
}
}
m_fn_vDisplayActorsList ();
}
//*******************************************************************************
void IAD_ControlView::m_pub_fn_vUnselectAllItems()
{
//
long c_lI;
for (c_lI = 0; c_lI < m_clListControl.GetItemCount(); c_lI ++)
{
UINT nState = m_clListControl.GetItemState(c_lI, LVIF_STATE);
if ( (nState & LVIS_SELECTED) != 0 )
nState = nState - LVIS_SELECTED;
m_clListControl.SetItemState(c_lI, nState, LVIF_STATE);
}
}
//*******************************************************************************
BOOL IAD_ControlView::OnHelpInfo(HELPINFO* pHelpInfo)
{
::WinHelp(m_hWnd,
LPCTSTR(m_pub_fn_pclGetDocument()->m_csHelpFileNameAndPath),
HELP_CONTEXT,
IDH_GENERAL);
return FALSE;
}
//*************************************************************************
//D<>finition des textes pour les Tool Tips
BOOL IAD_ControlView::OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID = pNMHDR->idFrom;
nID = ::GetDlgCtrlID((HWND)nID);
BOOL bReturn = FALSE;
/* switch ( nID )
{
default:
strcpy(pTTT->szText,"");
break;
};
*/
return (TRUE);
}
// BEGIN ROMTEAM Cristi Petrescu 98-08-
void IAD_ControlView::OnViewAll()
{
m_bViewAll = ! m_bViewAll;
((CButton *) GetDlgItem (IDC_VIEW_ALL))->SetCheck(m_bViewAll);
m_fn_vDisplayActorsList();
}
// END ROMTEAM Cristi Petrescu 98-08-
//*******************************************************************************
void IAD_ControlView::OnCheckIaDebuggerOn()
{
m_pub_fn_pclGetDocument()->m_pub_fn_vSetDebuggerOn( ((CButton *)GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON))->GetCheck() );
if ( m_pub_fn_pclGetDocument()->m_pub_fn_bIsDebuggerOn() )
GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON)->SetWindowText("Debugger On");
else
GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON)->SetWindowText("Debugger Off");
//Enables/Disables all Actors
if ( m_pub_fn_pclGetDocument()->m_pub_fn_bIsDebuggerOn() )
{
IAD_td_stInternalActorDescription *p_tdstInternalActor;
IAD_M_ForEachInList((&m_pri_clListOfActors), pos)
{
p_tdstInternalActor = m_pri_clListOfActors.GetNext(pos);
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
AIDebug_fn_vSetEnable(m_pub_fn_pclGetDocument()->m_pub_fn_p_stGetMindOfActor(p_tdstInternalActor), p_tdstInternalActor->bTraceIsEnabled);
#endif
// CG PB DEBUGGER
}
}
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
else
{
IAD_M_ForEachInList((&m_pri_clListOfActors), pos)
AIDebug_fn_vSetEnable(m_pub_fn_pclGetDocument()->m_pub_fn_p_stGetMindOfActor(m_pri_clListOfActors.GetNext(pos)), FALSE);
}
#endif
// CG PB DEBUGGER
}
//*******************************************************************************
void IAD_ControlView::OnSelchangedListActors(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
if ( (pNMListView->uNewState & LVIS_SELECTED) != 0 )
{
switch ( pNMListView->iSubItem )
{
//Column "Name" has been clicked
case 0:
{
CListCtrl *pclListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST_ACTORS);
IAD_td_stInternalActorDescription *p_stSelectedInternalActor;
p_stSelectedInternalActor = (IAD_td_stInternalActorDescription *)pclListCtrl->GetItemData(pNMListView->iItem);
if ( p_stSelectedInternalActor->bTraceIsEnabled )
m_pub_fn_pclGetDocument()->m_pclResultView->m_pub_fn_vDisplayTraceForActor(p_stSelectedInternalActor);
break;
}
//Column "On" has been clicked --> DONE ELSEWHERE
case 1:
break;
//Column "Size" has been clicked --> DONE ELSEWHERE
case 4:
break;
}
}
*pResult = 0;
}
//*******************************************************************************
void IAD_ControlView::OnSize(UINT nType, int cx, int cy)
{
//Moves Button
CButton *pclButton = (CButton *)GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON);
CRect crButtonDestRect;
if ( pclButton != NULL )
{
CRect crButtonRect;
GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON)->GetWindowRect(crButtonRect);
crButtonDestRect.top = 2;
crButtonDestRect.bottom = crButtonDestRect.top + crButtonRect.Height();
crButtonDestRect.right = cx - 2;
crButtonDestRect.left = crButtonDestRect.right - crButtonRect.Width();
GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON)->MoveWindow(crButtonDestRect);
}
// BEGIN ROMTEAM Cristi Petrescu 98-08-
// Moves View All button
pclButton = (CButton *)GetDlgItem(IDC_VIEW_ALL);
if ( pclButton != NULL )
{
CRect crButtonRect;
GetDlgItem(IDC_VIEW_ALL)->GetWindowRect(crButtonRect);
crButtonDestRect.top = 2;
crButtonDestRect.bottom = crButtonDestRect.top + crButtonRect.Height();
crButtonDestRect.right = crButtonDestRect.left - 2;
crButtonDestRect.left = crButtonDestRect.right - crButtonRect.Width();
GetDlgItem(IDC_CHECK_IA_DEBUGGER_ON)->MoveWindow(crButtonDestRect);
}
// END ROMTEAM Cristi Petrescu 98-08-
//Re-sizes ListCtrl
CListCtrl *pclListCtrl = (CListCtrl *)GetDlgItem(IDC_LIST_ACTORS);
if ( pclListCtrl != NULL )
{
CRect crCtrlRect;
pclListCtrl->GetWindowRect(crCtrlRect);
crCtrlRect.top = crButtonDestRect.bottom + 2;
crCtrlRect.bottom = cy - 2;
crCtrlRect.left = 2;
crCtrlRect.right = cx - 2;
pclListCtrl->MoveWindow(crCtrlRect);
//Re_sizes Columns
short wColumnWidth = (crCtrlRect.Width() * IAD_C_WIDTH_PERCENT_COLUMNS_0) / 100 - 2;
pclListCtrl->SetColumnWidth(0, wColumnWidth);
wColumnWidth = (crCtrlRect.Width() * IAD_C_WIDTH_PERCENT_COLUMNS_1) / 100 - 2;
pclListCtrl->SetColumnWidth(1, wColumnWidth);
wColumnWidth = (crCtrlRect.Width() * IAD_C_WIDTH_PERCENT_COLUMNS_2) / 100 - 2;
pclListCtrl->SetColumnWidth(2, wColumnWidth);
wColumnWidth = (crCtrlRect.Width() * IAD_C_WIDTH_PERCENT_COLUMNS_3) / 100 - 2;
pclListCtrl->SetColumnWidth(3, wColumnWidth);
wColumnWidth = (crCtrlRect.Width() * IAD_C_WIDTH_PERCENT_COLUMNS_4) / 100 - 2;
pclListCtrl->SetColumnWidth(4, wColumnWidth);
}
CFormView::OnSize(nType, cx, cy);
}
///////////////////////
// Private functions //
///////////////////////
//*******************************************************************************
BOOL IAD_ControlView::m_pri_fn_bActorIsInList(CPA_Actor *_pclSearchedActor)
{
BOOL bActorFound = FALSE;
POSITION pos = m_pri_clListOfActors.GetHeadPosition();
while ( (pos != NULL) && (!bActorFound) )
bActorFound = ( m_pri_clListOfActors.GetNext(pos)->pclActor == _pclSearchedActor );
return bActorFound;
}
//*******************************************************************************
//*******************************************************************************
/////////////////////////////////////////////////////////////////////////////
// IAD_ControlView diagnostics
#ifdef _DEBUG
void IAD_ControlView::AssertValid() const
{
CFormView::AssertValid();
}
void IAD_ControlView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG