552 lines
15 KiB
C++
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
|