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

552 lines
15 KiB
C++

//=========================================================================
// CPACont.cpp : implementation of the CPA_Contact class
// This is a part of the CPA project.
//
// Version 1.0
// Creation date 13/06/96
// Revision date
//
// (c) Ubi Studios 1996
//
// DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT
// VINCENT GRECO OR CHRISTOPHE BEAUDET.
//=========================================================================
#include "stdafx.h"
#ifdef ACTIVE_EDITOR
#include "acp_base.h"
#include "itf/CPACont.Hpp"
#include "itf/CPARes.h"
#include "itf/DEVMulti.hpp"
#include "itf/ToolDLLb.hpp"
#include "itf/CPAMWorl.hpp"
#include "itf/CPAInter.hpp"
/////////////////////////////////////////////////////////////////////////////
// Local Macros
#define M_GetListOfToolDLLFromMsg() M_GetMainWorld()->GetToolDLLReceivingWindowMsg()
#define M_ForEachToolDLL(p_oTool) \
CPA_ToolDLLBase *p_oTool; \
POSITION stPos; \
for( p_oTool = M_GetListOfToolDLLFromMsg()->GetHeadElement(stPos) ; \
p_oTool ; \
p_oTool = M_GetListOfToolDLLFromMsg()->GetNextElement(stPos) )
/////////////////////////////////////////////////////////////////////////////
// CPA_Contact
IMPLEMENT_DYNCREATE(CPA_Contact, CObject)
/////////////////////////////////////////////////////////////////////////////
// CPA_Contact construction/destruction
CPA_Contact::CPA_Contact(DEV_MultiDevice *p_oDevice)
{
m_p_oDevice = p_oDevice;
}
CPA_Contact::~CPA_Contact()
{
}
CPA_Interface * CPA_Contact::GetInterface (void)
{
return m_p_oDevice->GetInterface();
}
//###########################################################################
// processing of messages coming from viewport
// Default implementation : send the message to the EvtEditor if it exists.
//###########################################################################
BOOL CPA_Contact::_OnCommand(UINT IDCmdMsg)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnCommand(IDCmdMsg) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnCommand(IDCmdMsg);
}
// send message to EvtEditor
return M_GetEditor()->_OnCommand(IDCmdMsg);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnUpdateCommandUI(CCmdUI *pCmdUI)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnUpdateCommandUI(pCmdUI->m_nID, pCmdUI) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnUpdateCommandUI(pCmdUI->m_nID, pCmdUI);
}
// send message to EvtEditor
return M_GetEditor()->_OnUpdateCommandUI(pCmdUI->m_nID, pCmdUI);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnKeyDown(nChar, nRepCnt, nFlags) == TRUE)
return TRUE;
}
// send message to DLL of selected object
if ((M_GetCountSelected() == 1) && (M_GetSingleSelection()->GetObjectDLL() != NULL))
{
if (M_GetSingleSelection()->GetObjectDLL()->_OnKeyDown(nChar, nRepCnt, nFlags) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnKeyDown(nChar, nRepCnt, nFlags);
}
// send it to EvtEditor
return M_GetEditor()->_OnKeyDown(nChar, nRepCnt, nFlags);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnKeyUp(nChar, nRepCnt, nFlags) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnKeyUp(nChar, nRepCnt, nFlags);
}
// send it to EvtEditor
return M_GetEditor()->_OnKeyUp(nChar, nRepCnt, nFlags);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnMouseMove(UINT nFlags, tdstMousePos *p_stPos, MTH3D_tdstVector *p_stObject)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnMouseMove(nFlags, p_stPos, p_stObject) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnMouseMove(nFlags, p_stPos, p_stObject);
}
// send it to EvtEditor
return M_GetEditor()->_OnMouseMove(nFlags, p_stPos, p_stObject);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnLButtonDblClk(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stObject)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnLButtonDblClk(nFlags, p_stPos, xIndex, p_stObject) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnLButtonDblClk(nFlags, p_stPos, xIndex, p_stObject);
}
// send it to EvtEditor
return M_GetEditor()->_OnLButtonDblClk(nFlags, p_stPos, xIndex, p_stObject);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnLButtonDown(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stObject)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnLButtonDown(nFlags, p_stPos, xIndex, p_stObject) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnLButtonDown(nFlags, p_stPos, xIndex, p_stObject);
}
// send it to EvtEditor
return M_GetEditor()->_OnLButtonDown(nFlags, p_stPos, xIndex, p_stObject);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnLButtonUp(UINT nFlags, tdstMousePos *p_stPos)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnLButtonUp(nFlags, p_stPos) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnLButtonUp(nFlags, p_stPos);
}
// send it to EvtEditor
return M_GetEditor()->_OnLButtonUp(nFlags, p_stPos);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnRButtonDblClk(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stObject)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnRButtonDblClk(nFlags, p_stPos, xIndex, p_stObject) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnRButtonDblClk(nFlags, p_stPos, xIndex, p_stObject);
}
// send it to EvtEditor
return M_GetEditor()->_OnRButtonDblClk(nFlags, p_stPos, xIndex, p_stObject);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnRButtonUp(UINT nFlags, tdstMousePos *p_stPos)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnRButtonUp(nFlags, p_stPos) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnRButtonUp(nFlags, p_stPos);
}
// send it to EvtEditor
return M_GetEditor()->_OnRButtonUp(nFlags, p_stPos);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnRButtonDown(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stObject)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnRButtonDown(nFlags, p_stPos, xIndex, p_stObject) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnRButtonDown(nFlags, p_stPos, xIndex, p_stObject);
}
// send it to EvtEditor
return M_GetEditor()->_OnRButtonDown(nFlags, p_stPos, xIndex, p_stObject);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnDragDropEnd(WPARAM wParam, LPARAM lParam)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnDragDropEnd(wParam, lParam) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnDragDropEnd(wParam, lParam);
}
// send it to EvtEditor
return M_GetEditor()->_OnDragDropEnd(wParam, lParam);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnDragDropLooseFocus(WPARAM wParam, LPARAM lParam)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnDragDropLooseFocus(wParam, lParam) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnDragDropLooseFocus(wParam, lParam);
}
// send it to EvtEditor
return M_GetEditor()->_OnDragDropLooseFocus(wParam, lParam);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnDragDropGainFocus(WPARAM wParam, LPARAM lParam)
{
ASSERT (m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnDragDropGainFocus(wParam, lParam) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnDragDropGainFocus(wParam, lParam);
}
return M_GetEditor()->_OnDragDropGainFocus(wParam, lParam);
}
return FALSE;
}
//---------------------------------------------------------------------------
BOOL CPA_Contact::_OnDragDropMove(WPARAM wParam, LPARAM lParam)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->_OnDragDropMove(wParam, lParam) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->_OnDragDropMove(wParam, lParam);
}
// send it to EvtEditor
return M_GetEditor()->_OnDragDropMove(wParam, lParam);
}
return FALSE;
}
//---------------------------------------------------------------------------
void CPA_Contact::fn_vBeforeDrawingWorld(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2, DEV_ViewPort* p3)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
M_GetCurrentEditor()->fn_vBeforeDrawingWorld(p1,p2,p3);
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->fn_vBeforeDrawingWorld(p1,p2,p3);
}
// send it to EvtEditor
M_GetEditor()->fn_vBeforeDrawingWorld(p1,p2,p3);
}
}
//---------------------------------------------------------------------------
void CPA_Contact::fn_vAddObjectsToDraw(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2, DEV_ViewPort* p3)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
M_GetCurrentEditor()->fn_vAddObjectsToDraw(p1,p2,p3);
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->fn_vAddObjectsToDraw(p1,p2,p3);
}
// send it to EvtEditor
M_GetEditor()->fn_vAddObjectsToDraw(p1,p2,p3);
}
}
//---------------------------------------------------------------------------
void CPA_Contact::fn_vAddObjectsToDraw2(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2)
{
ASSERT(m_p_oDevice != NULL);
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
M_GetCurrentEditor()->fn_vAddObjectsToDraw2(p1,p2);
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->fn_vAddObjectsToDraw2(p1,p2);
}
// send it to EvtEditor
M_GetEditor()->fn_vAddObjectsToDraw2(p1,p2);
}
}
//###########################################################################
// processing of messages coming from ACP
// Default implementation : nothing.
//###########################################################################
//---------------------------------------------------------------------------
BOOL CPA_Contact::fn_bPreTranslateMessage(MSG *p_stMsg)
{
if (GetInterface())
{
// send message to current editor
if (!M_IsCurrentEditor())
{
if (M_GetCurrentEditor()->fn_bPreTranslateMessage(p_stMsg) == TRUE)
return TRUE;
}
// send message to Tool DLLs
M_ForEachToolDLL(p_oToolDLL)
{
if (!p_oToolDLL->fn_bIsCurrentEditor())
p_oToolDLL->fn_bPreTranslateMessage(p_stMsg);
}
}
return FALSE;
}
#endif // ACTIVE_EDITOR