456 lines
13 KiB
C++
456 lines
13 KiB
C++
// 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
|