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

130 lines
4.0 KiB
C++

//=========================================================================
// CPAMCapt.cpp : MouseCapturer implementation. virtual class that all objects capturing
// mouse movement messages must derive from.
//
// Version 1.0
// Creation date 24/01/97
// Revision date
//
// (c) Ubi Studios 1997
//
// DO NOT MODIFY THAT FILE. IF SOMETHING NEEDS TO BE CHANGE, PLEASE CONTACT
// BENOIT GERMAIN.
//=========================================================================
#include "stdafx.h"
#ifdef ACTIVE_EDITOR
#include "itf\frmbsmn.hpp"
#include "itf\frmgest.hpp"
//================================================================================
//================================================================================
CPA_MouseCapturer::CPA_MouseCapturer()
{
m_p_oPreviousCapturer = m_p_oCurrentCapturer = NULL;
m_bDestruction = FALSE;
}
//================================================================================
//================================================================================
CPA_MouseCapturer::~CPA_MouseCapturer()
{
m_bDestruction = TRUE;
m_p_oSurrenderCapture();
}
//================================================================================
//================================================================================
CWnd *CPA_MouseCapturer::m_p_oGrabCaptureFor(CWnd *pWnd)
{
CWnd *p_oCurrentCapturer;
ASSERT(pWnd);
// check who has the capture
p_oCurrentCapturer = pWnd->GetCapture();
if ( p_oCurrentCapturer != pWnd ) // if it is not the same
{
// in case more than one consecutive grab occur...
if ( !m_p_oPreviousCapturer )
// remember who had the capture before the new capturer
m_p_oPreviousCapturer = p_oCurrentCapturer;
// remember who the new capturer is
m_p_oCurrentCapturer = pWnd;
// if both the current and new capturer are valid
if ( m_p_oCurrentCapturer )
{
// release the capture of the current capturer
if ( p_oCurrentCapturer )
ReleaseCapture();
// and grab it for the new capturer
m_p_oCurrentCapturer->SetCapture();
}
}
else //it is not allowed to grab consecutively for the same CWnd...
{
/*if ( g_oFrameGest.ma_p_oOccupyArray[2][2] )
{
((FRMBaseMenu *) g_oFrameGest.ma_p_oOccupyArray[2][2])->UpdateStatus(
"INTERNAL: It is not allowed to grab consecutively for the same CWnd...",
C_STATUSPANE_INFOS,
C_STATUS_WARNING
);
}*/
}
// return the pointer to the capturer that will be surrendered capture
return m_p_oPreviousCapturer;
}
//================================================================================
//================================================================================
CWnd *CPA_MouseCapturer::m_p_oSurrenderCapture(BOOL bCheckCoherence /*= TRUE*/)
{
CWnd *pToReturn = m_p_oPreviousCapturer;
CWnd *p_oInstantCapturer;
// if there was a capturer before the one we established
if ( m_p_oPreviousCapturer )
{
// check who has the capture right now
p_oInstantCapturer = m_p_oPreviousCapturer->GetCapture();
// if nobody took it from us
if ( p_oInstantCapturer == m_p_oCurrentCapturer )
{
// we can release it
ReleaseCapture();
// and give it back to our predecessor
m_p_oPreviousCapturer->SetCapture();
// and remember it
m_p_oCurrentCapturer = NULL;
m_p_oPreviousCapturer = NULL;
}
}
else if ( m_p_oCurrentCapturer ) // we were first to capture the mouse
{
// release the capture
ReleaseCapture();
// and remember than now nobody has the capture
m_p_oCurrentCapturer = NULL;
}
else // somebody tried to make us surrender whereas we had not grabbed anything
{
// the only autorized circumstance is when the destructor calls us
// while we had not grabbed anything
/*if ( g_oFrameGest.ma_p_oOccupyArray[2][2] && ((!bCheckCoherence) || (m_bDestruction)) )
{
((FRMBaseMenu *) g_oFrameGest.ma_p_oOccupyArray[2][2])->UpdateStatus(
"INTERNAL: It is not allowed to surrender consecutively for the same CWnd...",
C_STATUSPANE_INFOS,
C_STATUS_WARNING
);
}*/
}
return pToReturn;
}
#endif // ACTIVE_EDITOR