reman3/Rayman_X/cpa/tempgrp/TIA/Src/EdIRBVw.cpp

1677 lines
49 KiB
C++

// DiagView.cpp : implementation file
//
#include "stdafx.h"
#include "Defines.hpp"
#ifdef D_ED_IR_ACTIVE
#include "EdIRBVw.hpp"
#include "EdIRBVwA.hpp"
#include "EdIRBVwD.hpp"
#include "EdIRBVwX.hpp"
#include "EdIRBVwR.hpp"
#include "EdIRBeha.hpp"
#include "EdIRBeEn.hpp"
#include "EdIRBELs.hpp"
#include "EdIRFrm.hpp"
#include "EdIRRVw.hpp"
#include "EdIRBtVw.hpp"
#include "EdIRBNam.hpp"
#include "EdIRPrtB.hpp"
#include "EdIRPrtF.hpp"
#include "EdIRStrg.hpp"
#include "EdIR2Eng.hpp"
#include "EdIRRes.hm"
#include "EdIRIRD.hpp"
#include "EdIRGlob.hpp"
#include "ai_intf.hpp"
#include "incTUT.h"
// BEGIN CPA2 Cristi Petrescu 98-03-
#include "EdIRMacL.hpp"
extern CPA_EdIR_MacroList g_clMacroList;
// END CPA2 Cristi Petrescu 98-03-
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define C_WIDTH 2000
#define C_HEIGHT 4000
/////////////////////////////////////////////////////////////////////////////
// class CPA_EdIR_DiagView
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CPA_EdIR_DiagView, CFormView)
BEGIN_MESSAGE_MAP(CPA_EdIR_DiagView, CFormView)
//{{AFX_MSG_MAP(CPA_EdIR_DiagView)
ON_WM_DESTROY()
ON_WM_SIZE()
ON_WM_RBUTTONUP()
ON_WM_KEYUP()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
ON_LBN_SELCHANGE(IDD_IR_BEHAVIOUR_LIST, OnSelChangeBehaviourList)
ON_WM_HELPINFO()
ON_WM_CHAR()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
ON_COMMAND(ID_IR_DIAGVIEW_ADD_BEHAVIOUR,m_fn_vOnAddBehaviour)
ON_COMMAND(ID_IR_DIAGVIEW_DEL_ALL_BEHAVIOUR,m_fn_vOnDeleteAllBehaviours)
END_MESSAGE_MAP()
/**********************************************************************************/
CPA_EdIR_DiagView::CPA_EdIR_DiagView()
: CFormView(CPA_EdIR_DiagView::IDD)
{
//{{AFX_DATA_INIT(CPA_EdIR_DiagView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pclOldActiveBehaviour =NULL;
m_pclOldCopiedMainBehaviour =NULL;
m_pclListOfBehaviours =NULL;
m_tdeBehaviourModeView =DiagView;
m_bCtrlKeyIsPressed =FALSE;
m_bPrintCurrentBehaviour =FALSE;
m_bPrintAllBehaviours =FALSE;
m_bPrintAllIA =FALSE;
m_bPrintIsFinished =TRUE;
m_bHasBeenModified =FALSE;
//ANNECY CB
m_bSpecialCB = FALSE;
//END
}
/**********************************************************************************/
CPA_EdIR_DiagView::~CPA_EdIR_DiagView()
{
//In order to not delete the objects in the list because they will be deleted later
m_clOldCopiedMainBehaviourList.RemoveAll();
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vAModelHasBeenRemoved()
{
//List View Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
long lNbBehaviours=m_clBehaviourListBox.GetCount();
for(long lCounter=0;lCounter<lNbBehaviours;lCounter++)
m_clBehaviourListBox.DeleteString(0);
}
m_pclOldActiveBehaviour=NULL;
m_pclListOfBehaviours=NULL;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vUpdateListOfBehaviour(CPA_EdIR_MainBehaviourList *pclListOfBehaviours, BOOL Disp)
{
CPA_EdIR_MainBehaviourList *rememb;
//Hides old behaviour
if(m_pclListOfBehaviours && Disp)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
//pclMainBehaviour->m_pclBehaviour should be !=NULL
if(pclMainBehaviour->m_pclBehaviour!=NULL)
{
pclMainBehaviour->m_pclBehaviour->m_fn_vActivate(FALSE);
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_HIDE);
}
if(pclMainBehaviour->m_pclBehaviour==m_pclOldActiveBehaviour)
m_pclListOfBehaviours->m_pclOldActiveMainBehaviour=pclMainBehaviour;
}
if(m_pclListOfBehaviours->IsEmpty())
m_pclListOfBehaviours->m_pclOldActiveMainBehaviour=NULL;
}
if(Disp == FALSE)
rememb = m_pclListOfBehaviours;
m_pclListOfBehaviours=pclListOfBehaviours;
//Adds declarations' behaviour in Declaration mode (if no one is present)
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
BOOL bDeclMode=(p_clBtView->m_fn_tdeGetEditState()==EditDecl);
if(bDeclMode &&
m_pclListOfBehaviours->IsEmpty())
{
BOOL bIsLoadingWorld = g_pclAIInterface->GetInterface()->fn_bIsLoadingWorld();
g_pclAIInterface->GetInterface()->SetLoadingWorld(TRUE);
//Adds DesignerVariables declaration
CPA_EdIR_Behaviour *pclBehaviour=m_fn_pclAddOneBehaviour(g_c_csDsgVarName,CRect(15,15,85,45),"",bDeclMode,0);
CPA_EdIR_MainBehaviour *pclMainBehaviour=new CPA_EdIR_MainBehaviour(m_fn_pclGetActorModel(),g_c_csDsgVarName,CRect(15,15,85,45),"",pclBehaviour);
pclBehaviour->m_fn_vSetMainBehaviour(pclMainBehaviour);
m_pclListOfBehaviours->AddTail(pclMainBehaviour);
//Adds Macros declaration
pclBehaviour=m_fn_pclAddOneBehaviour(g_c_csMacroName,CRect(15,60,85,90),"",bDeclMode,0);
pclMainBehaviour=new CPA_EdIR_MainBehaviour(m_fn_pclGetActorModel(),g_c_csMacroName,CRect(15,60,85,90),"",pclBehaviour);
pclBehaviour->m_fn_vSetMainBehaviour(pclMainBehaviour);
m_pclListOfBehaviours->AddTail(pclMainBehaviour);
g_pclAIInterface->GetInterface()->SetLoadingWorld(bIsLoadingWorld);
}
if(Disp == FALSE)
m_pclListOfBehaviours = rememb;
//Shows new behaviour
if(Disp)
{
/* POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
m_pclListOfBehaviours->GetNext(pos)->m_pclBehaviour->ShowWindow(SW_SHOW);*/
if(m_pclListOfBehaviours->m_pclOldActiveMainBehaviour)
m_fn_vOldActiveBehaviourHasChanged(m_pclListOfBehaviours->m_pclOldActiveMainBehaviour->m_pclBehaviour);
else
m_fn_vOldActiveBehaviourHasChanged(NULL);
InvalidateRect(NULL);
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vChangeViewModeOfBehaviours(tdeBehaviourModeView tdeMode)
{
m_tdeBehaviourModeView=tdeMode;
switch(tdeMode)
{
case ListView:
{
//Sets scroll size
SetScrollSizes(MM_TEXT,CSize(0,0));
//Resets the listbox
if(m_clBehaviourListBox.GetCount()!=0)
while(m_clBehaviourListBox.DeleteString(0)!=0);
//Initializes the listbox
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
long lCounter=0;
long lSelectedIndex=-1;
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
//Hides buttons
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_HIDE);
//Adds behaviour in listbox
m_clBehaviourListBox.AddString(pclMainBehaviour->m_pclBehaviour->m_fn_csGetName());
int iIndex=m_clBehaviourListBox.FindStringExact(0,pclMainBehaviour->m_pclBehaviour->m_fn_csGetName());
m_clBehaviourListBox.SetItemDataPtr(iIndex,pclMainBehaviour->m_pclBehaviour);
if(pclMainBehaviour->m_pclBehaviour==m_pclOldActiveBehaviour)
lSelectedIndex=lCounter;
lCounter++;
}
//Gets view size
CRect cr;
GetClientRect(cr);
//Shows list
m_clBehaviourListBox.ShowWindow(SW_SHOW);
m_clBehaviourListBox.MoveWindow(0,0,cr.Width(),cr.Height());
m_clBehaviourListBox.EnableWindow(TRUE);
//Selects behaviour in listbox
if(lSelectedIndex!=-1)
{
m_clBehaviourListBox.SetCurSel(lSelectedIndex);
m_fn_vOldActiveBehaviourHasChanged(m_pclOldActiveBehaviour);
}
}
break;
case DiagView:
{
//Hides list
m_clBehaviourListBox.ShowWindow(SW_HIDE);
m_clBehaviourListBox.EnableWindow(FALSE);
//Shows buttons
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
m_pclListOfBehaviours->GetNext(pos)->m_pclBehaviour->ShowWindow(SW_SHOW);
//Sets scroll size
SetScrollSizes(MM_TEXT,CSize(C_WIDTH,C_HEIGHT));
//Centers the view on the selected behaviour
if(m_pclOldActiveBehaviour)
{
CRect cr;
m_pclOldActiveBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
CRect crViewSize;
GetClientRect(crViewSize);
CPoint cpPosition=GetScrollPosition();
cr.OffsetRect(cpPosition);
ScrollToPosition(CPoint(cr.CenterPoint()-crViewSize.CenterPoint()));
}
}
break;
default:
break;
}
InvalidateRect(NULL);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vCreateNewBehaviour(tdeBehaviourModeView tdeMode)
{
if(m_pclListOfBehaviours)
{
CPA_EdIR_DlgNewBehaviourName clNewName("");
if(clNewName.DoModal()==IDOK)
{
//Checks if the name doesn't exist
if(!m_fn_bNameAlreadyExists(clNewName.m_csNewName))
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
BOOL bDeclMode=(p_clBtView->m_fn_tdeGetEditState()==EditDecl);
//Debug
if(bDeclMode==TRUE)
{
AfxMessageBox("[DEV] : CPA_EdIR_DiagView::m_fn_vCreateNewBehaviour : bDeclMode=TRUE");
return;
}
//End Debug
//Computes the new position
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
long lMaxHeight=0;
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
CRect cr;
pclMainBehaviour->m_pclBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
if(lMaxHeight<cr.bottom)
lMaxHeight=cr.bottom;
}
CRect crRect=CRect(15,lMaxHeight+15,60,lMaxHeight+45);
CPA_EdIR_Behaviour *pclBehaviour;
if(tdeMode==ListView)
pclBehaviour=m_fn_pclAddOneBehaviour(clNewName.m_csNewName,crRect,"",bDeclMode,0);
else
pclBehaviour=m_fn_pclAddOneBehaviour(clNewName.m_csNewName,crRect,"",bDeclMode,WS_VISIBLE);
CPA_EdIR_MainBehaviour *pclMainBehaviour=new CPA_EdIR_MainBehaviour(m_fn_pclGetActorModel(),clNewName.m_csNewName,crRect,"",pclBehaviour);
pclBehaviour->m_fn_vSetMainBehaviour(pclMainBehaviour);
CPA_EdIR_UndoCreateBehaviour *pclUndoCreateBehaviour;
pclUndoCreateBehaviour=new CPA_EdIR_UndoCreateBehaviour(this,pclMainBehaviour,m_pclListOfBehaviours);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoCreateBehaviour);
}
else
MessageBox("This name already exists !");
}
else
MessageBox("Invalid name !");
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vCopyBehaviour(CPA_EdIR_MainBehaviour *pclMainBehaviourSrc,CString csName)
{
if(m_pclListOfBehaviours)
{
if(csName=="")
{
CPA_EdIR_DlgNewBehaviourName clNewName("");
if(clNewName.DoModal()==IDOK)
csName=clNewName.m_csNewName;
else
MessageBox("Invalid name !");
}
//Checks if the name doesn't exist
if(!m_fn_bNameAlreadyExists(csName))
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
BOOL bDeclMode=(p_clBtView->m_fn_tdeGetEditState()==EditDecl);
//Computes the new position
CRect crRect=pclMainBehaviourSrc->m_pclBehaviour->m_fn_crGetBoundingBox();;
crRect.OffsetRect(20,20);
//Gets src rules
CString csRules=pclMainBehaviourSrc->m_pclBehaviour->m_fn_csGetRules();
CPA_EdIR_Behaviour *pclBehaviour;
if(p_clBtView->m_fn_tdeGetViewMode()==ListView)
pclBehaviour=m_fn_pclAddOneBehaviour(csName,crRect,csRules,bDeclMode,0);
else
pclBehaviour=m_fn_pclAddOneBehaviour(csName,crRect,csRules,bDeclMode,WS_VISIBLE);
CPA_EdIR_MainBehaviour *pclMainBehaviour=new CPA_EdIR_MainBehaviour(m_fn_pclGetActorModel(),csName,crRect,csRules,pclBehaviour);
pclBehaviour->m_fn_vSetMainBehaviour(pclMainBehaviour);
CPA_EdIR_UndoCreateBehaviour *pclUndoCreateBehaviour;
pclUndoCreateBehaviour=new CPA_EdIR_UndoCreateBehaviour(this,pclMainBehaviour,m_pclListOfBehaviours);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoCreateBehaviour);
}
else
MessageBox("This name already exists !");
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPA_EdIR_DiagView)
DDX_Control(pDX, IDD_IR_BEHAVIOUR_LIST, m_clBehaviourListBox);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_DiagView diagnostics
#ifdef _DEBUG
/**********************************************************************************/
void CPA_EdIR_DiagView::AssertValid() const
{
CFormView::AssertValid();
}
/**********************************************************************************/
void CPA_EdIR_DiagView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPA_EdIR_DiagView message handlers
/**********************************************************************************/
void CPA_EdIR_DiagView::OnInitialUpdate()
{
HINSTANCE hOldInstance=AfxGetResourceHandle();
AfxSetResourceHandle(g_stAIIdentity.hModule);
CFormView::OnInitialUpdate();
SetScrollSizes(MM_TEXT,CSize(C_WIDTH,C_HEIGHT));
//////////////
//////////////
//Registers for TUT Module
TUT_M_vGetTutDll();
TUT_M_vRegisterControlID(IDD_IR_BEHAVIOUR_LIST,"EdIR_BehaviourView_ListBox",TUT_e_ListBox);
//End of Register for TUT Module
//////////////
AfxSetResourceHandle(hOldInstance);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnDestroy()
{
//////////////
//////////////
//UnRegisters for TUT Module
TUT_M_vGetTutDll();
TUT_M_vUnregisterControlID(IDD_IR_BEHAVIOUR_LIST);
//End of UnRegister for TUT Module
//////////////
CFormView::OnDestroy();
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnPaint()
{
CFormView::OnPaint();
if(m_pclListOfBehaviours)
{
//Only in diagview mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==DiagView)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
//pclMainBehaviour->m_pclBehaviour should be !=NULL
if(pclMainBehaviour->m_pclBehaviour!=NULL)
pclMainBehaviour->m_pclBehaviour->m_fn_vDrawDependencies();
}
}
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnSize(UINT nType,int cx,int cy)
{
CFormView::OnSize(nType,cx,cy);
if(m_tdeBehaviourModeView==ListView)
{
//Gets view size
CRect cr;
GetClientRect(cr);
//Resizes list
m_clBehaviourListBox.MoveWindow(0,0,cr.Width(),cr.Height());
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnRButtonUp(UINT nFlags, CPoint point)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
if(m_pclListOfBehaviours && p_clBtView->m_fn_tdeGetEditState()!=EditDecl)
{
CRect r;
GetWindowRect(&r);
CMenu Menu;
Menu.LoadMenu(IDR_IR_MENU_POPUP_DIAGVIEW);
CMenu *SousMenu=Menu.GetSubMenu(0);
if(m_pclListOfBehaviours->IsEmpty())
SousMenu->EnableMenuItem(ID_IR_DIAGVIEW_DEL_ALL_BEHAVIOUR,MF_GRAYED|MF_BYCOMMAND);
//////////////
//////////////
//Registers for TUT Module
TUT_M_vGetTutDll();
TUT_M_vRegisterMenu(m_hWnd,SousMenu->m_hMenu,r.left+point.x,r.top+point.y);
//End of Register for TUT Module
//////////////
SousMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,r.left+point.x,r.top+point.y,this);
SousMenu->DestroyMenu();
Menu.DestroyMenu();
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnMouseMove(UINT nFlags, CPoint point)
{
CFormView::OnMouseMove(nFlags, point);
m_clOldMousePos=point;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar==VK_CONTROL)
m_bCtrlKeyIsPressed=TRUE;
//ROMTEAM F2Key(Ionut Grozea 25/03/98)
if(nChar==113)
M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_SWAPTOEDITORS, 0);
//ENDROMTEAM F2Key(Ionut Grozea 25/03/98)
CFormView::OnKeyDown(nChar, nRepCnt, nFlags);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags)
{
if(m_pclListOfBehaviours)
{
//Undo Redo
if(m_bCtrlKeyIsPressed && nChar=='Z')
{
if(m_pclListOfBehaviours->m_clEditManager.CanUndo())
m_pclListOfBehaviours->m_clEditManager.Undo();
else
{
MessageBox("No Undo Available");
m_fn_vSetModified(FALSE);
}
}
if(m_bCtrlKeyIsPressed && nChar=='A')
{
if(m_pclListOfBehaviours->m_clEditManager.CanRedo())
m_pclListOfBehaviours->m_clEditManager.Redo();
else
MessageBox("No Redo Available");
}
//Copy Paste
if(m_bCtrlKeyIsPressed && nChar=='C')
{
LPINT piIndex=new int[m_pclListOfBehaviours->GetCount()];
int iNbItems=m_clBehaviourListBox.GetSelItems(m_pclListOfBehaviours->GetCount(),piIndex);
m_clOldCopiedMainBehaviourList.RemoveAll();
if(iNbItems>1)
{
for(int iIndex=0;iIndex<iNbItems;iIndex++)
{
CPA_EdIR_Behaviour *pclBehaviour=(CPA_EdIR_Behaviour *)m_clBehaviourListBox.GetItemDataPtr(piIndex[iIndex]);
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_fn_pclGetMainBehaviour(pclBehaviour);
m_clOldCopiedMainBehaviourList.AddTail(pclMainBehaviour);
}
}
else
m_pclOldCopiedMainBehaviour=m_fn_pclGetMainBehaviour(m_pclOldActiveBehaviour);
}
if(m_bCtrlKeyIsPressed && nChar=='V')
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
if(p_clBtView->m_fn_tdeGetEditState()!=EditDecl)
{
if(m_clOldCopiedMainBehaviourList.GetCount()!=0)
{
POSITION pos=m_clOldCopiedMainBehaviourList.GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_clOldCopiedMainBehaviourList.GetNext(pos);
m_fn_vCopyBehaviour(pclMainBehaviour,pclMainBehaviour->GetName()+"_Copy");
}
}
else
if(m_pclOldCopiedMainBehaviour!=NULL)
{
m_fn_vCopyBehaviour(m_pclOldCopiedMainBehaviour);
}
}
else
AfxMessageBox("You can't paste behaviour(s) in Declaration Mode !!");
}
if(nChar==VK_INSERT)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
if(p_clBtView->m_fn_tdeGetEditState()!=EditDecl)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
m_fn_vCreateNewBehaviour(p_clBtView->m_fn_tdeGetViewMode());
}
else
AfxMessageBox("You can't create behaviour in Declaration Mode !!");
}
if(nChar==VK_DELETE)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
if(p_clBtView->m_fn_tdeGetEditState()!=EditDecl)
m_fn_vDeleteBehaviour(NULL);
else
AfxMessageBox("You can't delete behaviour in Declaration Mode !!");
}
}
if(nChar==VK_CONTROL)
m_bCtrlKeyIsPressed=FALSE;
CFormView::OnKeyUp(nChar, nRepCnt, nFlags);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnLButtonDown(UINT nFlags, CPoint point)
{
SetFocus();
CFormView::OnLButtonDown(nFlags, point);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnSelChangeBehaviourList()
{
CPA_EdIR_Behaviour *pclBehaviour;
pclBehaviour=(CPA_EdIR_Behaviour *)m_clBehaviourListBox.GetItemDataPtr(m_clBehaviourListBox.GetCurSel());
m_fn_vOldActiveBehaviourHasChanged(pclBehaviour,FALSE);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vOnAddBehaviour()
{
if(m_pclListOfBehaviours)
{
CPA_EdIR_DlgNewBehaviourName clNewName("");
if(clNewName.DoModal()==IDOK)
{
//Checks if the name doesn't exist
if(!m_fn_bNameAlreadyExists(clNewName.m_csNewName))
{
//Adds one behaviour
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
BOOL bDeclMode=(p_clBtView->m_fn_tdeGetEditState()==EditDecl);
CRect crRect=CRect(m_clOldMousePos.x,m_clOldMousePos.y,m_clOldMousePos.x+45,m_clOldMousePos.y+30);
CPA_EdIR_Behaviour *pclBehaviour=m_fn_pclAddOneBehaviour(clNewName.m_csNewName,crRect,"",bDeclMode,WS_VISIBLE);
CPA_EdIR_MainBehaviour *pclMainBehaviour=new CPA_EdIR_MainBehaviour(m_fn_pclGetActorModel(),clNewName.m_csNewName,crRect,"",pclBehaviour);
pclBehaviour->m_fn_vSetMainBehaviour(pclMainBehaviour);
CPA_EdIR_UndoCreateBehaviour *pclUndoCreateBehaviour;
pclUndoCreateBehaviour=new CPA_EdIR_UndoCreateBehaviour(this,pclMainBehaviour,m_pclListOfBehaviours);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoCreateBehaviour);
}
else
MessageBox("This name already exists !");
}
else
MessageBox("Invalid name !");
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vOnDeleteAllBehaviours()
{
m_fn_vDeleteAllBehaviours();
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vOldActiveBehaviourHasChanged(CPA_EdIR_Behaviour *p_clNewActiveBehaviour,BOOL bDeselect)
{
if(m_pclOldActiveBehaviour)
m_pclOldActiveBehaviour->m_fn_vActivate(FALSE);
m_pclOldActiveBehaviour=p_clNewActiveBehaviour;
if(m_pclOldActiveBehaviour)
{
m_pclOldActiveBehaviour->m_fn_vActivate(TRUE);
//In ListView Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
//Looks for behaviour entry in the list
long lIndex=m_fn_lGetIndex(m_pclOldActiveBehaviour);
if(lIndex!=-1)
m_clBehaviourListBox.SetCurSel(lIndex,bDeselect);
}
}
//Draws BreakPoint
((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetEdRulesView()->InvalidateRect(NULL);
// Shaitan => Macros to subroutines
((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView()->m_fn_vEnableButtons(TRUE);
// End Shaitan => Macros to subroutines
}
/**********************************************************************************/
CPA_EdIR_Behaviour *CPA_EdIR_DiagView::m_fn_pclGetActiveBehaviour()
{
return m_pclOldActiveBehaviour;
}
/**********************************************************************************/
CPA_EdIR_Behaviour *CPA_EdIR_DiagView::m_fn_pclAddOneBehaviour(CString csName,
CRect crRect,
CString csText,
BOOL bDeclarationMode,
DWORD dwVisibleStyle)
{
CPA_EdIR_View *p_clEdIAView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetEdRulesView();
CPA_EdIR_Behaviour *p_clBehaviour=new CPA_EdIR_Behaviour(p_clEdIAView,bDeclarationMode);
p_clBehaviour->Create(csName,WS_CHILD|dwVisibleStyle,crRect,this,1);
//ANNECY CB
if(m_bSpecialCB == FALSE)
//END
m_fn_vOldActiveBehaviourHasChanged(p_clBehaviour);
p_clBehaviour->m_fn_vSetRules(csText);
return p_clBehaviour;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vDeleteBehaviour(CPA_EdIR_Behaviour *p_clBehaviour)
{
if(m_pclListOfBehaviours)
{
if(p_clBehaviour==NULL)
p_clBehaviour=m_pclOldActiveBehaviour;
if(p_clBehaviour!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_fn_pclGetMainBehaviour(p_clBehaviour);
if(pclMainBehaviour)
{
// BEGIN CPA2 Cristi Petrescu 98-03-
// if it is macro, delete it from the global macro list
/*
CPA_EdIR_Frame *pclIRMainFrame = g_pclAIInterface -> m_pclIRMainFrame;
if (pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_tdeGetEditState () == EditMacro)
{
// is a macro
POSITION pos = g_clMacroList . GetHeadPosition();
POSITION oldpos = pos;
while (pos != NULL)
{
CPA_EdIR_Macro *pclMacro = g_clMacroList . GetNext(pos);
CString csMacroName = pclMainBehaviour->GetName ();
csMacroName . MakeLower ();
if (csMacroName == pclMacro -> m_fn_csGetMacroName ())
{
g_clMacroList . RemoveAt (oldpos);
break;
}
oldpos = pos;
}
}
*/
// END CPA2 Cristi Petrescu 98-03-
if(m_pclOldCopiedMainBehaviour==pclMainBehaviour)
m_pclOldCopiedMainBehaviour=NULL;
CPA_EdIR_UndoDeleteBehaviour *pclUndoDeleteBehaviour;
pclUndoDeleteBehaviour=new CPA_EdIR_UndoDeleteBehaviour(this,pclMainBehaviour,m_pclListOfBehaviours);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoDeleteBehaviour);
}
}
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vDeleteAllBehaviours()
{
if(m_pclListOfBehaviours)
{
CPA_EdIR_UndoDeleteAllBehaviours *pclUndoDeleteAllBehaviours;
pclUndoDeleteAllBehaviours=new CPA_EdIR_UndoDeleteAllBehaviours(this,m_pclListOfBehaviours);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoDeleteAllBehaviours);
}
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bGetFirstBehaviour(CString &csName,CRect &crRect,CString &csRules)
{
m_posCurrent=m_pclListOfBehaviours->GetHeadPosition();
if(m_posCurrent!=NULL)
{
CPA_EdIR_Behaviour *p_clBehaviour=m_pclListOfBehaviours->GetAt(m_posCurrent)->m_pclBehaviour;
csName=p_clBehaviour->m_fn_csGetName();
crRect=p_clBehaviour->m_fn_crGetBoundingBox();
csRules=p_clBehaviour->m_fn_csGetRules();
}
return (m_posCurrent!=NULL);
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bGetNextBehaviour(CString &csName,CRect &crRect,CString &csRules)
{
m_pclListOfBehaviours->GetNext(m_posCurrent);
if(m_posCurrent!=NULL)
{
CPA_EdIR_Behaviour *p_clBehaviour=m_pclListOfBehaviours->GetAt(m_posCurrent)->m_pclBehaviour;
csName=p_clBehaviour->m_fn_csGetName();
crRect=p_clBehaviour->m_fn_crGetBoundingBox();
csRules=p_clBehaviour->m_fn_csGetRules();
}
return (m_posCurrent!=NULL);
}
/**********************************************************************************/
CPA_EdIR_Behaviour *CPA_EdIR_DiagView::m_fn_pclGetBehaviour(CString csName)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_Behaviour *p_clBehaviour=m_pclListOfBehaviours->GetAt(pos)->m_pclBehaviour;
if(p_clBehaviour->m_fn_csGetName()==csName)
return p_clBehaviour;
m_pclListOfBehaviours->GetNext(pos);
}
return NULL;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vClipControls(CClientDC *cdc)
{
CRect cr;
GetClientRect(cr);
cdc->SetBoundsRect(cr,DCB_DISABLE);
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_Behaviour *p_clBehaviour=m_pclListOfBehaviours->GetAt(pos)->m_pclBehaviour;
CRect cr;
p_clBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
cdc->ExcludeClipRect(cr);
m_pclListOfBehaviours->GetNext(pos);
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vUpdateDependencies()
{
//Deletes old dependencies
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
m_pclListOfBehaviours->GetNext(pos)->m_pclBehaviour->m_clListOfDependentBehaviours.RemoveAll();
//Updates dependencies
pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
m_pclListOfBehaviours->GetNext(pos)->m_pclBehaviour->m_fn_vUpdateDependencies();
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bNameAlreadyExists(CString csName)
{
CPA_EdIR_MainBehaviour clDummyBehaviour(m_fn_pclGetActorModel());
return (clDummyBehaviour.fn_eCheckUnicity(csName)!=E_mc_None);
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bIsInCurrentList(CPA_EdIR_MainBehaviour *pclMainBehaviour)
{
if(m_pclListOfBehaviours)
return (m_pclListOfBehaviours->Find(pclMainBehaviour)!=NULL);
else
return FALSE;
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::OnHelpInfo(HELPINFO* pHelpInfo)
{
::WinHelp(m_hWnd,g_pclAIInterface->m_csBrainHelpFileNameAndPath,HELP_CONTEXT,HID_BEHAVIOURS_ZONE);
return CFormView::OnHelpInfo(pHelpInfo);
}
/**********************************************************************************/
CPA_EdIR_MainBehaviour *CPA_EdIR_DiagView::m_fn_pclGetMainBehaviour(CPA_EdIR_Behaviour *pclBehaviour)
{
return pclBehaviour->m_fn_pclGetMainBehaviour();
}
/**********************************************************************************/
long CPA_EdIR_DiagView::m_fn_lGetIndex(CPA_EdIR_Behaviour *pclBehaviour)
{
//Looks for behaviour entry in the list
long lIndex=-1;
for(long lCounter=0;lIndex==-1 && lCounter<m_clBehaviourListBox.GetCount();lCounter++)
{
if(m_clBehaviourListBox.GetItemDataPtr(lCounter)==pclBehaviour)
lIndex=lCounter;
}
return lIndex;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vAddOneBehaviourInList(CPA_EdIR_MainBehaviour *pclMainBehaviour)
{
m_pclListOfBehaviours->AddTail(pclMainBehaviour);
m_fn_vOldActiveBehaviourHasChanged(pclMainBehaviour->m_pclBehaviour);
//Sets name
pclMainBehaviour->m_pclBehaviour->SetWindowText(pclMainBehaviour->GetName());
//Updates button width
pclMainBehaviour->m_pclBehaviour->m_fn_vUpdateButtonWidth();
//List View Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
//Adds behaviour in listbox
m_clBehaviourListBox.AddString(pclMainBehaviour->GetName());
int iIndex=m_clBehaviourListBox.FindStringExact(0,pclMainBehaviour->GetName());
m_clBehaviourListBox.SetItemDataPtr(iIndex,pclMainBehaviour->m_pclBehaviour);
//Selects the new behaviour
m_clBehaviourListBox.SetCurSel(iIndex);
}
else
{
//Shows it
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_SHOW);
//Centers on the new behaviour
CRect cr;
pclMainBehaviour->m_pclBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
CRect crViewSize;
GetClientRect(crViewSize);
CPoint cpPosition=GetScrollPosition();
cr.OffsetRect(cpPosition);
ScrollToPosition(CPoint(cr.CenterPoint()-crViewSize.CenterPoint()));
}
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bDeleteBehaviourFromList(CPA_EdIR_MainBehaviour *pclMainBehaviour)
{
CPA_EdIR_Behaviour *p_clBehaviour=pclMainBehaviour->m_pclBehaviour;
if(p_clBehaviour==NULL)
p_clBehaviour=m_pclOldActiveBehaviour;
if(p_clBehaviour)
{
if(g_oCoherenceManager.m_fn_bIsChild(pclMainBehaviour)==FALSE)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
BOOL bFound=FALSE;
while(pos!=NULL && !bFound)
{
CPA_EdIR_Behaviour *p_clBehav=m_pclListOfBehaviours->GetAt(pos)->m_pclBehaviour;
if(p_clBehav==p_clBehaviour)
{
m_pclListOfBehaviours->RemoveAt(pos);
bFound=TRUE;
}
else
m_pclListOfBehaviours->GetNext(pos);
}
BOOL bSelectedIsDeleted=(m_pclOldActiveBehaviour==p_clBehaviour);
if(bSelectedIsDeleted)
{
if(!m_pclListOfBehaviours->IsEmpty())
m_fn_vOldActiveBehaviourHasChanged(m_pclListOfBehaviours->GetHead()->m_pclBehaviour);
else
m_fn_vOldActiveBehaviourHasChanged(NULL);
}
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_HIDE);
//In ListView Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
//Looks for behaviour entry in the list
long lIndex=m_fn_lGetIndex(pclMainBehaviour->m_pclBehaviour);
//Delete entry for this behaviour
if(lIndex!=-1)
m_clBehaviourListBox.DeleteString(lIndex);
//Selects another behaviour
if(bSelectedIsDeleted &&
m_clBehaviourListBox.GetCount()>0)
{
ASSERT(m_pclOldActiveBehaviour!=NULL);
long lIndex=m_fn_lGetIndex(m_pclOldActiveBehaviour);
ASSERT(lIndex!=-1);
m_clBehaviourListBox.SetCurSel(lIndex);
}
}
else
{
if(m_pclOldActiveBehaviour)
{
//Centers on the new selected behaviour
CRect cr;
m_pclOldActiveBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
CRect crViewSize;
GetClientRect(crViewSize);
CPoint cpPosition=GetScrollPosition();
cr.OffsetRect(cpPosition);
ScrollToPosition(CPoint(cr.CenterPoint()-crViewSize.CenterPoint()));
}
}
m_fn_vUpdateDependencies();
return TRUE;
}
else
{
AfxMessageBox("Can't delete this behaviour, it is used !!");
return FALSE;
}
}
return FALSE;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vAddAllBehavioursInList(CPA_EdIR_MainBehaviourList *pclMainBehaviourList)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
//Adds all behaviours
POSITION pos=pclMainBehaviourList->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=pclMainBehaviourList->GetNext(pos);
m_pclListOfBehaviours->AddTail(pclMainBehaviour);
//List View Mode
if(tdeMode==ListView)
{
//Adds behaviour in listbox
m_clBehaviourListBox.AddString(pclMainBehaviour->GetName());
int iIndex=m_clBehaviourListBox.FindStringExact(0,pclMainBehaviour->GetName());
m_clBehaviourListBox.SetItemDataPtr(iIndex,pclMainBehaviour->m_pclBehaviour);
}
else
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_SHOW);
}
if(m_pclListOfBehaviours->GetCount()>0)
{
//Selects first behaviour
m_fn_vOldActiveBehaviourHasChanged(m_pclListOfBehaviours->GetHead()->m_pclBehaviour);
}
//List View Mode
if(tdeMode==ListView)
{
if(m_clBehaviourListBox.GetCount()>0)
{
//Selects the first behaviour
ASSERT(m_pclOldActiveBehaviour!=NULL);
long lIndex=m_fn_lGetIndex(m_pclOldActiveBehaviour);
ASSERT(lIndex!=-1);
m_clBehaviourListBox.SetCurSel(lIndex);
}
}
else
{
if(m_pclListOfBehaviours->GetCount()>0)
{
//Centers on the first behaviour
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetHead();
CRect cr;
pclMainBehaviour->m_pclBehaviour->GetWindowRect(cr);
ScreenToClient(cr);
CRect crViewSize;
GetClientRect(crViewSize);
CPoint cpPosition=GetScrollPosition();
cr.OffsetRect(cpPosition);
ScrollToPosition(CPoint(cr.CenterPoint()-crViewSize.CenterPoint()));
}
}
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bDeleteAllBehavioursFromList()
{
//First check if we can delete all
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
BOOL bDeleteAllIsOk=TRUE;
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *p_clMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
if(g_oCoherenceManager.m_fn_bIsChild(p_clMainBehaviour))
{
bDeleteAllIsOk=FALSE;
CString csMsg;
csMsg="Can't delete all behaviours\n";
csMsg+="The behaviour called "+p_clMainBehaviour->GetName()+" is used";
AfxMessageBox(csMsg);
}
}
if(bDeleteAllIsOk)
{
//Hides all behaviours
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
{
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_pclListOfBehaviours->GetNext(pos);
pclMainBehaviour->m_pclBehaviour->ShowWindow(SW_HIDE);
}
//Deletes all behaviours
m_pclListOfBehaviours->RemoveAll();
//List View Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
long lNbBehaviours=m_clBehaviourListBox.GetCount();
for(long lCounter=0;lCounter<lNbBehaviours;lCounter++)
m_clBehaviourListBox.DeleteString(0);
}
m_fn_vOldActiveBehaviourHasChanged(NULL);
return TRUE;
}
else
return FALSE;
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bRenameBehaviour(CPA_EdIR_MainBehaviour *pclMainBehaviour,
CString csName)
{
// BEGIN CPA2 Cristi Petrescu 98-03-
// CString csMacroName = pclMainBehaviour->GetName ();
// END CPA2 Cristi Petrescu 98-03-
//Changes name
if(pclMainBehaviour->fn_eRename(csName)!=E_mc_None)
{
AfxMessageBox("Can't rename this behaviour, this name is already used !!");
return FALSE;
}
CPA_EdIR_Behaviour *pclBehaviour=pclMainBehaviour->m_pclBehaviour;
csName=pclMainBehaviour->GetName();
pclBehaviour->SetWindowText(csName);
// BEGIN CPA2 Cristi Petrescu 98-03-
// if it is macro, rename it in the global macro list
/*
CPA_EdIR_Frame *pclIRMainFrame = g_pclAIInterface -> m_pclIRMainFrame;
if (pclIRMainFrame -> m_fn_pclGetButtonView () -> m_fn_tdeGetEditState () == EditMacro)
{
// is a macro
POSITION pos = g_clMacroList . GetHeadPosition();
while (pos != NULL)
{
CPA_EdIR_Macro *pclMacro = g_clMacroList . GetNext(pos);
csMacroName . MakeLower ();
if (csMacroName == pclMacro -> m_fn_csGetMacroName ())
{
pclMacro -> m_fn_vRenameMacro (csName);
break;
}
}
}
*/
// END CPA2 Cristi Petrescu 98-03-
//Updates button width
pclBehaviour->m_fn_vUpdateButtonWidth();
//ListView Mode
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeBehaviourModeView tdeMode=p_clBtView->m_fn_tdeGetViewMode();
if(tdeMode==ListView)
{
//Looks for behaviour entry in the list
long lIndex=m_fn_lGetIndex(pclBehaviour);
if(lIndex!=-1)
{
m_clBehaviourListBox.DeleteString(lIndex);
m_clBehaviourListBox.InsertString(lIndex,csName);
int iIndex=m_clBehaviourListBox.FindStringExact(0,csName);
m_clBehaviourListBox.SetItemDataPtr(iIndex,pclBehaviour);
m_clBehaviourListBox.SetCurSel(iIndex);
}
}
return TRUE;
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vAskForRenamingBehaviour(CPA_EdIR_Behaviour *pclBehaviour,
CString csOldName,
CString csNewName)
{
//Looks for main behaviour
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_fn_pclGetMainBehaviour(pclBehaviour);
if(pclMainBehaviour)
{
//Ask for renaming behaviour
CPA_EdIR_UndoRenameBehaviour *pclUndoRenameBehaviour;
pclUndoRenameBehaviour=new CPA_EdIR_UndoRenameBehaviour(this,pclMainBehaviour,m_pclListOfBehaviours,csOldName,csNewName);
m_pclListOfBehaviours->m_clEditManager.AskFor(pclUndoRenameBehaviour);
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vCheckBehaviour(enum tdeTypeText_ eTypeText)
{
LPINT piIndex=new int[m_pclListOfBehaviours->GetCount()];
int iNbItems=m_clBehaviourListBox.GetSelItems(m_pclListOfBehaviours->GetCount(),piIndex);
if(iNbItems>1)
{
for(int iIndex=0;iIndex<iNbItems;iIndex++)
{
CPA_EdIR_Behaviour *pclBehaviour=(CPA_EdIR_Behaviour *)m_clBehaviourListBox.GetItemDataPtr(piIndex[iIndex]);
CPA_EdIR_MainBehaviour *pclMainBehaviour=m_fn_pclGetMainBehaviour(pclBehaviour);
CString csMsgBase="Checking "+pclMainBehaviour->GetName()+" ... ";
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
CString csMsg=csMsgBase;
if(pclBehaviour->m_fn_bCheckIA(eTypeText))
{
csMsg+="OK :-)";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
}
else
{
csMsg+="KO :-(";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
}
}
}
else
{
if(m_pclOldActiveBehaviour!=NULL)
{
CString csMsgBase="Checking "+m_pclOldActiveBehaviour->m_fn_pclGetMainBehaviour()->GetName()+" ... ";
fn_vDisplayInfoInStatusBar(csMsgBase,C_STATUS_NORMAL);
CString csMsg=csMsgBase;
if(m_pclOldActiveBehaviour->m_fn_bCheckIA(eTypeText))
{
csMsg+="OK :-)";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_NORMAL);
}
else
{
csMsg+="KO :-(";
fn_vDisplayInfoInStatusBar(csMsg,C_STATUS_ERROR);
}
}
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vPrint()
{
if(m_bPrintIsFinished)
{
CPA_EdIR_ButtonView *p_clBtView=((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetButtonView();
tdeEditState tdeState=p_clBtView->m_fn_tdeGetEditState();
CString csBehaviourListName;
switch(tdeState)
{
case EditIntell:
csBehaviourListName="All intelligence behaviours";
break;
case EditReflex:
csBehaviourListName="All reflex behaviours";
break;
case EditDecl:
csBehaviourListName="All declarations";
break;
// BEGIN CPA2 Cristi Petrescu 98-03-
case EditMacro:
csBehaviourListName="All macros";
break;
// END CPA2 Cristi Petrescu 98-03-
}
CPA_EdIR_PrintDialog clPrintDialog(csBehaviourListName,"Times New Roman",50);
if(clPrintDialog.DoModal()==IDOK)
{
m_csFontName=clPrintDialog.m_csFontName;
m_lFontSize=clPrintDialog.m_lFontSize;
//Computes line height
CFont clPrintFont;
clPrintFont.CreateFont(m_lFontSize,0,0,0,FW_NORMAL,
FALSE,FALSE,FALSE,DEFAULT_CHARSET,
OUT_STRING_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH,LPCTSTR(m_csFontName));
CClientDC cdc(this);
cdc.SelectObject(&clPrintFont);
m_lLineHeight=cdc.GetTextExtent("A").cy;
//
m_bPrintCurrentBehaviour=clPrintDialog.m_bCurrentBehaviour;
m_bPrintAllBehaviours=clPrintDialog.m_bAllBehaviours;
m_bPrintAllIA=clPrintDialog.m_bAllIA;
m_bOneBehaviourOnAPage=clPrintDialog.m_bOneBehaviourOnAPage;
m_bPrintIsFinished=FALSE;
if(clPrintDialog.m_bIsPreview)
{
CPA_EdIR_PrintFrame *pclPrintFrame=new CPA_EdIR_PrintFrame;
pclPrintFrame->m_fn_bCreate(this,"Print Preview",CRect(50,50,500,500));
}
else
CFormView::OnFilePrint();
}
}
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vPrint(CDC* pDC, CPrintInfo* pInfo)
{
OnPrint(pDC,pInfo);
}
/**********************************************************************************/
BOOL CPA_EdIR_DiagView::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->m_bDirect=TRUE;
BOOL bRes=DoPreparePrinting(pInfo);
return (CFormView::OnPreparePrinting(pInfo) && bRes);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnBeginPrinting(CDC* pDC,CPrintInfo* pInfo)
{
pInfo->m_bDocObject=FALSE;
UINT nMinPage=1;
UINT nMaxPage=65535;
CPA_EdIR_MainBehaviourList clBehaviourListToPrint;
if(m_bPrintCurrentBehaviour)
{
if(m_pclOldActiveBehaviour)
clBehaviourListToPrint.AddTail(m_fn_pclGetMainBehaviour(m_pclOldActiveBehaviour));
}
else
if(m_bPrintAllBehaviours)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(m_pclListOfBehaviours->GetNext(pos));
}
else
if(m_bPrintAllIA)
{
//Adds Intelligence
CPA_EdIR_Frame *pclFrame=(CPA_EdIR_Frame *)GetParentFrame();
CPA_EdIR_MainBehaviourList *pclListOfMainBehaviours=pclFrame->m_fn_pclGetIntelligenceBehaviours();
POSITION pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
//Adds Reflex
pclListOfMainBehaviours=pclFrame->m_fn_pclGetReflexBehaviours();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
//Adds Declarations
pclListOfMainBehaviours=pclFrame->m_fn_pclGetDeclarations();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// BEGIN CPA2 Cristi Petrescu 98-03-
//Adds Macros
pclListOfMainBehaviours=pclFrame->m_fn_pclGetMacros();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// END CPA2 Cristi Petrescu 98-03-
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
//Adds Subr
pclListOfMainBehaviours=pclFrame->m_fn_pclGetSubrs();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
}
//Substracts 5 mm to increase printer's margins
long lDPI=pDC->GetDeviceCaps(LOGPIXELSY);
long lFiveMmInDPI=long(double(5*lDPI)/25.4);
nMaxPage=clBehaviourListToPrint.m_fn_lGetNbPages(m_lLineHeight,
pDC->GetDeviceCaps(VERTRES)-lFiveMmInDPI,
m_bOneBehaviourOnAPage);
pInfo->SetMinPage(nMinPage);
pInfo->SetMaxPage(nMaxPage);
CFormView::OnBeginPrinting(pDC, pInfo);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vBeginPrinting(CDC *pDC,CPrintInfo *pInfo)
{
OnBeginPrinting(pDC,pInfo);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
CPA_EdIR_MainBehaviourList clBehaviourListToPrint;
if(m_bPrintCurrentBehaviour)
{
if(m_pclOldActiveBehaviour)
clBehaviourListToPrint.AddTail(m_fn_pclGetMainBehaviour(m_pclOldActiveBehaviour));
}
else
if(m_bPrintAllBehaviours)
{
POSITION pos=m_pclListOfBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(m_pclListOfBehaviours->GetNext(pos));
}
else
if(m_bPrintAllIA)
{
//Adds Intelligence
CPA_EdIR_Frame *pclFrame=(CPA_EdIR_Frame *)GetParentFrame();
CPA_EdIR_MainBehaviourList *pclListOfMainBehaviours=pclFrame->m_fn_pclGetIntelligenceBehaviours();
POSITION pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
//Adds Reflex
pclListOfMainBehaviours=pclFrame->m_fn_pclGetReflexBehaviours();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
//Adds Declarations
pclListOfMainBehaviours=pclFrame->m_fn_pclGetDeclarations();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// BEGIN CPA2 Cristi Petrescu 98-03-
//Adds Macros
pclListOfMainBehaviours=pclFrame->m_fn_pclGetMacros();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// END CPA2 Cristi Petrescu 98-03-
// BEGIN ROMTEAM CPA2 Cristi Petrescu 98-04-
//Adds Subrs
pclListOfMainBehaviours=pclFrame->m_fn_pclGetSubrs();
pos=pclListOfMainBehaviours->GetHeadPosition();
while(pos!=NULL)
clBehaviourListToPrint.AddTail(pclListOfMainBehaviours->GetNext(pos));
// END ROMTEAM CPA2 Cristi Petrescu 98-04-
}
CFont clPrintFont;
clPrintFont.CreateFont(m_lFontSize,0,0,0,FW_NORMAL,
FALSE,FALSE,FALSE,DEFAULT_CHARSET,
OUT_STRING_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH,LPCTSTR(m_csFontName));
pDC->SelectObject(&clPrintFont);
//Substracts 5 mm to increase printer's margins
long lDPI=pDC->GetDeviceCaps(LOGPIXELSY);
long lFiveMmInDPI=long(double(5*lDPI)/25.4);
clBehaviourListToPrint.m_fn_vPrint(m_lLineHeight,
pDC->GetDeviceCaps(VERTRES)-lFiveMmInDPI,
m_bOneBehaviourOnAPage,
pInfo->m_nCurPage,
pDC,pInfo);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
m_bPrintIsFinished=TRUE;
CFormView::OnEndPrinting(pDC, pInfo);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::OnEndPrintPreview(CDC* pDC, CPrintInfo* pInfo, POINT point, CPreviewView* pView)
{
m_bPrintIsFinished=TRUE;
CFormView::OnEndPrintPreview(pDC, pInfo, point, pView);
}
/**********************************************************************************/
void CPA_EdIR_DiagView::m_fn_vEndPrintPreview()
{
m_bPrintIsFinished=TRUE;
}
/****************************************************************************/
BOOL CPA_EdIR_DiagView::m_fn_bHasBeenModified()
{
BOOL bHasBeenModified=FALSE;
if(m_pclListOfBehaviours)
bHasBeenModified=m_pclListOfBehaviours->m_fn_bHasBeenModified();
return (m_bHasBeenModified||bHasBeenModified);
}
/****************************************************************************/
void CPA_EdIR_DiagView::m_fn_vSetModified(BOOL bIsModified)
{
if(m_pclListOfBehaviours)
m_pclListOfBehaviours->m_fn_vSetModified(bIsModified);
m_bHasBeenModified=bIsModified;
}
/****************************************************************************/
CPA_Actor *CPA_EdIR_DiagView::m_fn_pclGetActorModel()
{
return ((CPA_EdIR_Frame *)GetParentFrame())->m_fn_pclGetModel();
}
#endif //D_ED_IR_ACTIVE