Add rayman2 source files
This commit is contained in:
918
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_3d.cpp
Normal file
918
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_3d.cpp
Normal file
@@ -0,0 +1,918 @@
|
||||
|
||||
/******************************************************************************
|
||||
* *
|
||||
* Tut_3d.cpp : definition of the TUT_CTutorialManager class *
|
||||
* *
|
||||
* Contains the methods of the class that are specific to the 3d view *
|
||||
* So it is dependant on the ACP. *
|
||||
* The symbol TUT_3D must be defined for this file to be compiled *
|
||||
* *
|
||||
* Author : Alexis Vaisse *
|
||||
* *
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
#ifndef TUT_3D
|
||||
#include "stdafx.h"
|
||||
#include "Tut_Mngr.hpp"
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetPosition (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dClic3dView (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsProtected (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dMove3d (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dSelectModel (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetModel (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetNumberOfModels (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsAvailable (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetPrefix (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsExistingModel (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetStatusBarText (char *) { return TUT_C_iError_FunctionNotCompiled; }
|
||||
// 3DView specific
|
||||
BOOL TUT_CTutorialManager::m_fn_bIsModelView (HWND _hWnd) { return FALSE; }
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonDown3DViewProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) { return FALSE;}
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonUp3DViewProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) { return FALSE;}
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonDownModelViewProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) { return FALSE;}
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonUpModelViewProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam) { return FALSE;}
|
||||
#else
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include "ACP_Base.h"
|
||||
#include "ITF.h"
|
||||
#include "OGD.h"
|
||||
#include "IncOPD.h"
|
||||
#include "\CPA\Main\inc\_EditID.h"
|
||||
#include "Tut_Mngr.hpp"
|
||||
|
||||
#define TUT_M_GetCurrentWorld() (M_GetMainApp () -> fn_p_oGetMainWorld () -> M_GetWorld ())
|
||||
#define TUT_M_GetCurrentViewPort() ((DEV_ViewPort3D *) (DEV_ViewPort *) M_GetMainDevice2 () -> GetDevice (M_GetMainDevice2 () -> GetFocusDevice () -> GetNumber()) -> GetViewPort())
|
||||
#define TUT_M_GetCurrentEditor() (M_GetMainApp () -> fn_p_oGetMainWorld () -> GetCurrentEditor ())
|
||||
|
||||
MTH3D_tdstVector g_stInitialPoint;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// fnp_oFindSuperObjectByName
|
||||
// Find a super objet which has an associated object of the given name
|
||||
// Return NULL if not found
|
||||
//-----------------------------------------------------------------------------
|
||||
CPA_SuperObject * fnp_oFindSuperObjectByName (char * _sz3dObjectName)
|
||||
{
|
||||
CPA_List<CPA_SuperObject> * pListOfSuperObject = TUT_M_GetCurrentWorld () -> GetListAllObjects ();
|
||||
ASSERT (pListOfSuperObject);
|
||||
|
||||
POSITION Pos = pListOfSuperObject -> GetHeadPosition ();
|
||||
while (Pos)
|
||||
{
|
||||
CPA_SuperObject * pSuperObject = (CPA_SuperObject *) pListOfSuperObject -> GetNext (Pos);
|
||||
CPA_BaseObject * pObject = pSuperObject -> GetObject ();
|
||||
|
||||
if (pObject && stricmp (pObject -> fn_p_szGetName () , _sz3dObjectName) == 0) return pSuperObject;
|
||||
}
|
||||
|
||||
return NULL; // Not found
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// fnp_oFindSuperObjectByHandle
|
||||
// Find a super objet which has an associated object of the given engine handle
|
||||
// Return NULL if not found
|
||||
//-----------------------------------------------------------------------------
|
||||
CPA_SuperObject * fnp_oFindSuperObjectByHandle (HIE_tdxHandleToSuperObject _hSupObject)
|
||||
{
|
||||
CPA_List<CPA_SuperObject> * pListOfSuperObject = TUT_M_GetCurrentWorld () -> GetListAllObjects ();
|
||||
ASSERT (pListOfSuperObject);
|
||||
|
||||
POSITION Pos = pListOfSuperObject -> GetHeadPosition ();
|
||||
while (Pos)
|
||||
{
|
||||
CPA_SuperObject * pSuperObject = (CPA_SuperObject *) pListOfSuperObject -> GetNext (Pos);
|
||||
|
||||
if (pSuperObject -> GetData () == (void*)_hSupObject) return pSuperObject;
|
||||
}
|
||||
|
||||
return NULL; // Not found
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
// fn_bGetPointOfSuperObject
|
||||
// Compute the coordinate of one point of the given super object
|
||||
// (hope we will select the object when clicking on this point)
|
||||
// Return FALSE if it cannot find one point
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL fn_bGetPointOfSuperObject (CPA_SuperObject * _pSuperObject , MTH3D_tdstVector * _p_stPosition)
|
||||
{
|
||||
POS_tdstCompletePosition * pGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (_pSuperObject -> GetStruct ());
|
||||
POS_fn_vGetTranslationVector (pGlobalMatrix , _p_stPosition); // Compute origine point in world coordinates
|
||||
|
||||
// Geometric object : we can found one point
|
||||
CPA_BaseObject * pObject = _pSuperObject -> GetObject ();
|
||||
if (pObject && (pObject -> fn_bIsOfType (C_szGeometricObjectTypeName) ||
|
||||
pObject -> fn_bIsOfType (C_szPhysicalObjectTypeName)))
|
||||
{
|
||||
ACP_tdxHandleOfObject hObject;
|
||||
if (pObject -> fn_bIsOfType (C_szGeometricObjectTypeName))
|
||||
hObject = (ACP_tdxHandleOfObject) pObject -> GetData ();
|
||||
else
|
||||
if (pObject -> fn_bIsOfType (C_szPhysicalObjectTypeName ))
|
||||
hObject = (ACP_tdxHandleOfObject) ((EditorPO *) pObject) -> m_fnp_oGetGeometricWithDistance (0.0) -> GetData ();
|
||||
else ASSERT (0);
|
||||
|
||||
if (GEO_xGetGeometricObjectNumberOfPoints (hObject) > 0)
|
||||
{
|
||||
// Compute barycenter
|
||||
MTH3D_tdstVector Total;
|
||||
MTH3D_M_vNullVector (& Total);
|
||||
for (ACP_tdxIndex xNumPoint = 0 ; xNumPoint < GEO_xGetGeometricObjectNumberOfPoints (hObject) ; xNumPoint++)
|
||||
{
|
||||
MTH3D_tdstVector Point;
|
||||
GEO_vGetPointOfObject (hObject , & Point, xNumPoint);
|
||||
MTH3D_M_vAddVector (& Total , & Total , & Point);
|
||||
}
|
||||
MTH3D_M_vDivScalarVector (& Total , & Total , GEO_xGetGeometricObjectNumberOfPoints (hObject));
|
||||
|
||||
POS_fn_vMulMatrixVertex(_p_stPosition , pGlobalMatrix , & Total); // Convert in world coordinates
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
CPA_SuperObject * pChildSuperObject = _pSuperObject -> GetSuperObjectFirstChild ();
|
||||
while (pChildSuperObject)
|
||||
{
|
||||
if (fn_bGetPointOfSuperObject (pChildSuperObject , _p_stPosition)) return TRUE;
|
||||
pChildSuperObject = _pSuperObject -> GetSuperObjectNextChild (pChildSuperObject);
|
||||
}
|
||||
|
||||
return FALSE; // Not found
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// gs_fn_p_oGetModelView
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
//-----------------------------------------------------------------------------
|
||||
C3ListView *gs_fn_p_oGetModelView()
|
||||
{
|
||||
C3ListView *p_oListView = NULL;
|
||||
CPA_EditorBase *p_oCurrentEditor = TUT_M_GetCurrentEditor ();
|
||||
|
||||
if( p_oCurrentEditor && p_oCurrentEditor -> GetCurrentEditorName() == C_szDLLMaterialName )
|
||||
{
|
||||
CSplitFrame * p_oBottomFrame = (CSplitFrame*)g_oFrameGest . ma_p_oWinArray [2] [3];
|
||||
ASSERT (p_oBottomFrame);
|
||||
p_oListView = (C3ListView*)p_oBottomFrame -> m_fn_p_oGetPane (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get the model view
|
||||
FRMBase * p_oModelFrame = g_oFrameGest . ma_p_oWinArray [2] [3];
|
||||
ASSERT (p_oModelFrame);
|
||||
CPA_DialogInsert * p_oModelWnd = (CPA_DialogInsert *) p_oModelFrame -> GetWindow (GW_CHILD);
|
||||
ASSERT (p_oModelWnd);
|
||||
EDT_ModelView * p_oModelView = p_oModelWnd -> GetModelView ();
|
||||
ASSERT (p_oModelView);
|
||||
p_oListView = (C3ListView*) p_oModelView;
|
||||
}
|
||||
return p_oListView;
|
||||
}
|
||||
|
||||
CStatusBar *gs_fn_p_oGetStatusBar()
|
||||
{
|
||||
FRMBaseMenu *p_FRMBaseMenu = M_GetMainWnd2();
|
||||
|
||||
if( p_FRMBaseMenu )
|
||||
return & p_FRMBaseMenu -> m_oStatusBar;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dGetPosition
|
||||
// Execute a "get position" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetPosition (char * _szParameter)
|
||||
{
|
||||
// Get parameters : 3d object name and variable name for X, variable name for Y, variable name for Z
|
||||
int iNumberOfParameter;
|
||||
char * sz3dObjectName , * szVariableNameForX , * szVariableNameForY , * szVariableNameForZ;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 4 , 4 , & iNumberOfParameter , & sz3dObjectName ,
|
||||
& szVariableNameForX , & szVariableNameForY , & szVariableNameForZ);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
// Search the super object
|
||||
CPA_SuperObject * pSuperObject = fnp_oFindSuperObjectByName (sz3dObjectName);
|
||||
if (! pSuperObject) return TUT_C_iError_Unknown3dObject;
|
||||
|
||||
// Find the three variables
|
||||
TUT_tdstVariableDefinition * p_stVariableForX = m_fnp_stFindVariable (szVariableNameForX);
|
||||
TUT_tdstVariableDefinition * p_stVariableForY = m_fnp_stFindVariable (szVariableNameForY);
|
||||
TUT_tdstVariableDefinition * p_stVariableForZ = m_fnp_stFindVariable (szVariableNameForZ);
|
||||
if (p_stVariableForX == NULL || p_stVariableForY == NULL || p_stVariableForZ == NULL)
|
||||
return TUT_C_iError_UnknownVariable;
|
||||
|
||||
MTH3D_tdstVector stTranslationVector;
|
||||
fn_bGetPointOfSuperObject (pSuperObject , & stTranslationVector);
|
||||
|
||||
p_stVariableForX -> csValue . Format ("%.6g" , stTranslationVector . xX);
|
||||
p_stVariableForY -> csValue . Format ("%.6g" , stTranslationVector . xY);
|
||||
p_stVariableForZ -> csValue . Format ("%.6g" , stTranslationVector . xZ);
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dClic3dView
|
||||
// Execute a "clic 3d view" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dClic3dView (char * _szParameter)
|
||||
{
|
||||
// Get parameter : 3d object name or three coordinates
|
||||
int iNumberOfParameter;
|
||||
char * szParameter1 , * szParameter2 , * szParameter3;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 1 , 3 , & iNumberOfParameter ,
|
||||
& szParameter1 , & szParameter2 , & szParameter3);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
if (iNumberOfParameter == 2) return TUT_C_iError_ParameterRequired; // Only 1 or 3 parameters
|
||||
|
||||
MTH3D_tdstVector stTranslationVector;
|
||||
CPA_SuperObject * pSuperObject = NULL;
|
||||
double dX , dY , dZ;
|
||||
dX = dY = dZ = 0.0;
|
||||
|
||||
if (iNumberOfParameter == 1) // One parameter : this is the name of the 3d object
|
||||
{
|
||||
// Get the super object
|
||||
pSuperObject = fnp_oFindSuperObjectByName (szParameter1);
|
||||
if (! pSuperObject) return TUT_C_iError_Unknown3dObject;
|
||||
|
||||
// Get the position of the super object
|
||||
fn_bGetPointOfSuperObject (pSuperObject , & stTranslationVector);
|
||||
}
|
||||
else // Three parameters : this is the three coordinates
|
||||
{
|
||||
dX = m_fn_dConvertToDouble (szParameter1);
|
||||
dY = m_fn_dConvertToDouble (szParameter2);
|
||||
dZ = m_fn_dConvertToDouble (szParameter3);
|
||||
|
||||
if (dX == TUT_C_dErrorNotANumber || dY == TUT_C_dErrorNotANumber || dZ == TUT_C_dErrorNotANumber)
|
||||
return TUT_C_iError_InvalidNumber;
|
||||
|
||||
MTH3D_M_vSetVectorElements (& stTranslationVector , MTH_M_xDoubleToReal (dX) , MTH_M_xDoubleToReal (dY) , MTH_M_xDoubleToReal (dZ));
|
||||
}
|
||||
|
||||
// Convert this 3D position into a 2D position
|
||||
GLI_tdst2DVertex st2DPosition;
|
||||
DEV_ViewPort3D * pViewport3d = TUT_M_GetCurrentViewPort ();
|
||||
pViewport3d -> Convert3dTo2d (& st2DPosition , & stTranslationVector);
|
||||
CPoint Pos;
|
||||
Pos . x = (long) st2DPosition . xX;
|
||||
Pos . y = (long) st2DPosition . xY;
|
||||
if (GLI_lWhatIsGLI () == GLI_C_VersionGlide) pViewport3d -> VoodooToClient (Pos);
|
||||
|
||||
// Check if this 2D position is inside the 3D view
|
||||
CRect stViewport3dRect;
|
||||
pViewport3d -> GetClientRect (& stViewport3dRect);
|
||||
if (! stViewport3dRect . PtInRect (Pos))
|
||||
{
|
||||
// If not, zoom the camera to the object or the point and refresh the display
|
||||
if (iNumberOfParameter == 1)
|
||||
{
|
||||
pViewport3d -> GetCameraInterface () -> ZoomOnTarget (pViewport3d -> GetCamera () , pSuperObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
CPA_CameraCoords oCameraCoords (WorldCoordinates , (float) dX , (float) dY , (float) dZ);
|
||||
pViewport3d -> GetCameraInterface () -> SetTargetPoint (pViewport3d -> GetCamera () , & oCameraCoords);
|
||||
pViewport3d -> GetCameraInterface () -> SetTargetType (pViewport3d -> GetCamera () , tPoint);
|
||||
pViewport3d -> GetCameraInterface () -> Update (pViewport3d -> GetCamera ());
|
||||
pViewport3d -> GetCameraInterface () -> SetTargetType (pViewport3d -> GetCamera () , tNone);
|
||||
}
|
||||
pViewport3d -> GetCameraInterface () -> GetInterface () -> fn_vUpdateAll (E_mc_JustDraw);
|
||||
|
||||
// And compute the new 3D position
|
||||
pViewport3d -> Convert3dTo2d (& st2DPosition , & stTranslationVector);
|
||||
Pos . x = (long) st2DPosition . xX;
|
||||
Pos . y = (long) st2DPosition . xY;
|
||||
if (GLI_lWhatIsGLI () == GLI_C_VersionGlide) pViewport3d -> VoodooToClient (Pos);
|
||||
}
|
||||
|
||||
CPoint ScreenPos = Pos;
|
||||
pViewport3d -> ClientToScreen (& ScreenPos);
|
||||
m_fn_vMoveMouseCursor (ScreenPos , pViewport3d -> m_hWnd);
|
||||
|
||||
LPARAM lParam = MAKELPARAM (Pos . x , Pos . y);
|
||||
WPARAM wParam = (m_bUseShift ? MK_SHIFT : 0) | (m_bUseControl ? MK_CONTROL : 0);
|
||||
|
||||
if (m_bUseDrop)
|
||||
{
|
||||
//Sleep (0); // To be sure the last OnMouseMove message has been treated when making a drag and drop
|
||||
//m_fn_vSleep(10);
|
||||
Sleep(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_bUseRightButton) pViewport3d -> PostMessage (WM_RBUTTONDOWN , wParam + MK_RBUTTON , lParam);
|
||||
else pViewport3d -> PostMessage (WM_LBUTTONDOWN , wParam + MK_LBUTTON , lParam);
|
||||
m_fn_vSleep (60);
|
||||
}
|
||||
|
||||
if (m_bUseRightButton) pViewport3d -> PostMessage (WM_RBUTTONUP , wParam , lParam);
|
||||
else pViewport3d -> PostMessage (WM_LBUTTONUP , wParam , lParam);
|
||||
m_fn_vSleep (60);
|
||||
|
||||
if (m_bUseDoubleClic)
|
||||
{
|
||||
if (m_bUseRightButton)
|
||||
{
|
||||
pViewport3d -> PostMessage (WM_RBUTTONDBLCLK , wParam + MK_RBUTTON , lParam);
|
||||
m_fn_vSleep (60);
|
||||
pViewport3d -> PostMessage (WM_RBUTTONUP , wParam , lParam);
|
||||
m_fn_vSleep (60);
|
||||
}
|
||||
else
|
||||
{
|
||||
pViewport3d -> PostMessage (WM_LBUTTONDBLCLK , wParam + MK_LBUTTON , lParam);
|
||||
m_fn_vSleep (60);
|
||||
pViewport3d -> PostMessage (WM_LBUTTONUP , wParam , lParam);
|
||||
m_fn_vSleep (60);
|
||||
}
|
||||
}
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dIsProtected
|
||||
// Execute a "is protected" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsProtected (char * _szParameter)
|
||||
{
|
||||
// Get parameters : 3d object name and variable name
|
||||
int iNumberOfParameter;
|
||||
char * sz3dObjectName , * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 2 , 2 , & iNumberOfParameter , & sz3dObjectName , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
// Search the super object
|
||||
CPA_SuperObject * pSuperObject = fnp_oFindSuperObjectByName (sz3dObjectName);
|
||||
if (! pSuperObject) return TUT_C_iError_Unknown3dObject;
|
||||
|
||||
// Find the variable
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
p_stVariableDef -> csValue = pSuperObject -> fn_bIsEditProtected () ? TUT_C_szTrue : TUT_C_szFalse;
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dMove3d
|
||||
// Execute a "move 3D" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dMove3d (char * _szParameter)
|
||||
{
|
||||
// Get parameters : 3d object name, (X,Y) translation coordinates
|
||||
int iNumberOfParameter;
|
||||
char * sz3dObjectName , * szDeltaX , * szDeltaY;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 3 , 3 , & iNumberOfParameter , & sz3dObjectName ,
|
||||
& szDeltaX , & szDeltaY);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
// Search the super object
|
||||
CPA_SuperObject * pSuperObject = fnp_oFindSuperObjectByName (sz3dObjectName);
|
||||
if (! pSuperObject) return TUT_C_iError_Unknown3dObject;
|
||||
|
||||
// Get the coordinates
|
||||
double dDeltaX = m_fn_dConvertToDouble (szDeltaX);
|
||||
double dDeltaY = m_fn_dConvertToDouble (szDeltaY);
|
||||
if (dDeltaX == TUT_C_dErrorNotANumber || dDeltaY == TUT_C_dErrorNotANumber) return TUT_C_iError_InvalidNumber;
|
||||
|
||||
// Get the position of the super object
|
||||
MTH3D_tdstVector stTranslationVector;
|
||||
fn_bGetPointOfSuperObject (pSuperObject , & stTranslationVector);
|
||||
|
||||
// Convert this 3D position into a 2D position
|
||||
GLI_tdst2DVertex st2DPosition;
|
||||
DEV_ViewPort3D * pViewport3d = TUT_M_GetCurrentViewPort ();
|
||||
pViewport3d -> Convert3dTo2d (& st2DPosition , & stTranslationVector);
|
||||
CPoint Pos;
|
||||
|
||||
Pos . x = (long) st2DPosition . xX;
|
||||
Pos . y = (long) st2DPosition . xY;
|
||||
if (GLI_lWhatIsGLI () == GLI_C_VersionGlide) pViewport3d -> VoodooToClient (Pos);
|
||||
|
||||
// Send a LBUTTONDOWN message
|
||||
WPARAM wParam = (m_bUseShift ? MK_SHIFT : 0) | (m_bUseControl ? MK_CONTROL : 0);
|
||||
CPoint ScreenPos = Pos;
|
||||
pViewport3d -> ClientToScreen (& ScreenPos);
|
||||
m_fn_vMoveMouseCursor (ScreenPos , pViewport3d -> m_hWnd);
|
||||
pViewport3d -> SendMessage (WM_LBUTTONDOWN , wParam + MK_LBUTTON , MAKELPARAM (Pos . x , Pos . y));
|
||||
|
||||
// Compute the final position
|
||||
CPA_SuperObject * pCameraSuperObject = pViewport3d -> GetCameraSO ();
|
||||
POS_tdxHandleToPosition hGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (pCameraSuperObject -> GetStruct ());
|
||||
MTH3D_tdstVector stVectorX , stVectorY , stVectorZ;
|
||||
POS_fn_vGetRotationMatrix (hGlobalMatrix , & stVectorX , & stVectorY , & stVectorZ);
|
||||
|
||||
MTH3D_M_vMulScalarVector (& stVectorX , MTH_M_xDoubleToReal (- dDeltaX) , & stVectorX);
|
||||
MTH3D_M_vMulScalarVector (& stVectorY , MTH_M_xDoubleToReal (- dDeltaY) , & stVectorY);
|
||||
|
||||
MTH3D_tdstVector stDelta;
|
||||
MTH3D_M_vAddVector (& stDelta , & stVectorX , & stVectorY);
|
||||
MTH3D_M_vAddVector (& stTranslationVector , & stDelta , & stTranslationVector);
|
||||
|
||||
// Compute the final 3D position into a 2D position
|
||||
pViewport3d -> Convert3dTo2d (& st2DPosition , & stTranslationVector);
|
||||
Pos . x = (long) st2DPosition . xX;
|
||||
Pos . y = (long) st2DPosition . xY;
|
||||
if (GLI_lWhatIsGLI () == GLI_C_VersionGlide) pViewport3d -> VoodooToClient (Pos);
|
||||
|
||||
// Send a LBUTTONUP message
|
||||
ScreenPos = Pos;
|
||||
pViewport3d -> ClientToScreen (& ScreenPos);
|
||||
m_fn_vMoveMouseCursor (ScreenPos , pViewport3d -> m_hWnd);
|
||||
pViewport3d -> SendMessage (WM_LBUTTONUP , wParam , MAKELPARAM (Pos . x , Pos . y));
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dSelectModel
|
||||
// Execute a "select model" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dSelectModel (char * _szParameter)
|
||||
{
|
||||
// Get parameter : model name
|
||||
int iNumberOfParameter;
|
||||
char * szModelName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 1 , 1 , & iNumberOfParameter , & szModelName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
C3ListView *p_oListView = gs_fn_p_oGetModelView ();
|
||||
ASSERT( p_oListView );
|
||||
|
||||
// Find the model into the view
|
||||
long lIndex = p_oListView -> m_fn_lFindName (-1 , szModelName , p_oListView -> m_fn_cGetOrder ());
|
||||
if (lIndex == TSL_cItemNotFound) return TUT_C_iError_ModelNotFound;
|
||||
|
||||
// To be sure the model will be visible
|
||||
p_oListView -> m_vScrollToMakeItemVisible ((short) lIndex);
|
||||
|
||||
// Get the position of the model
|
||||
CRect stRect;
|
||||
p_oListView -> m_fn_vGetCaseRect ((short) lIndex , & stRect);
|
||||
POINT stCenter = stRect . CenterPoint ();
|
||||
|
||||
// Move the mouse cursor to the model
|
||||
p_oListView -> ClientToScreen (& stRect);
|
||||
m_fn_vMoveMouseCursor (stRect . CenterPoint ());
|
||||
|
||||
WPARAM wParam = (m_bUseShift ? MK_SHIFT : 0) | (m_bUseControl ? MK_CONTROL : 0);
|
||||
// Clic to select the model
|
||||
PostMessage (p_oListView -> m_hWnd , WM_LBUTTONDOWN , wParam + MK_LBUTTON , MAKELPARAM (stCenter . x , stCenter . y));
|
||||
// Release the button if this is not a drag & drop
|
||||
if (! m_bUseDrag)
|
||||
PostMessage (p_oListView -> m_hWnd , WM_LBUTTONUP , wParam , MAKELPARAM (stCenter . x , stCenter . y));
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dGetModel
|
||||
// Execute a "get model" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetModel (char * _szParameter)
|
||||
{
|
||||
// Get parameter : variable name
|
||||
int iNumberOfParameter;
|
||||
char * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 1 , 1 , & iNumberOfParameter , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
C3ListView *p_oListView = gs_fn_p_oGetModelView ();
|
||||
ASSERT( p_oListView );
|
||||
|
||||
// Find the variable
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
// Get the selected item
|
||||
long lIndex = p_oListView -> m_fn_lGetSelectedItem (p_oListView -> m_fn_cGetOrder ());
|
||||
|
||||
// Get the name of the item and fill the variable
|
||||
if (lIndex == TSL_cItemNotFound) p_stVariableDef -> csValue = "";
|
||||
else p_stVariableDef -> csValue = p_oListView -> m_fn_csGetName (lIndex , p_oListView -> m_fn_cGetOrder ());
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dGetNumberOfModels
|
||||
// Execute a "get number of models" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetNumberOfModels (char * _szParameter)
|
||||
{
|
||||
// Get parameter : variable name
|
||||
int iNumberOfParameter;
|
||||
char * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 1 , 1 , & iNumberOfParameter , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
C3ListView *p_oListView = gs_fn_p_oGetModelView ();
|
||||
ASSERT( p_oListView );
|
||||
|
||||
// Get the number of models
|
||||
long lNumberOfModel = p_oListView -> m_fn_lGetCount ();
|
||||
|
||||
// Find the variable and fill it
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
m_fn_vSetValueToVariable (p_stVariableDef , lNumberOfModel);
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dIsAvailable
|
||||
// Execute a "is available" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsAvailable (char * _szParameter)
|
||||
{
|
||||
// Get parameters : object name, type name and variable name
|
||||
int iNumberOfParameter;
|
||||
char * szObjectName , * szTypeName , * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 3 , 3 , & iNumberOfParameter ,
|
||||
& szObjectName , & szTypeName , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
CPA_BaseObject * pObject = M_GetMainApp () -> fn_p_oGetMainWorld () ->
|
||||
fn_p_oFindObject (szObjectName , szTypeName , NO_CRITERIA , E_rc_AllObjects);
|
||||
if (! pObject) return TUT_C_iError_UnknownObject;
|
||||
|
||||
p_stVariableDef -> csValue = pObject -> fn_bIsAvailable () ? TUT_C_szTrue : TUT_C_szFalse;
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dGetPrefix
|
||||
// Execute a "get prefix" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetPrefix (char * _szParameter)
|
||||
{
|
||||
// Get parameters : variable name
|
||||
int iNumberOfParameter;
|
||||
char * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 1 , 1 , & iNumberOfParameter , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
p_stVariableDef -> csValue = M_GetMainApp () -> GetInterface () -> GetUserPrefix ();
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dIsExistingModel
|
||||
// Execute a "Is Existing Model" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dIsExistingModel (char * _szParameter)
|
||||
{
|
||||
// Get parameters : variable name
|
||||
int iNumberOfParameter;
|
||||
char * szModelName , * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 2 , 2 , & iNumberOfParameter , & szModelName , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
C3ListView *p_oListView = gs_fn_p_oGetModelView ();
|
||||
ASSERT( p_oListView );
|
||||
|
||||
// Find the model into the view
|
||||
long lIndex = p_oListView -> m_fn_lFindName (-1 , szModelName , p_oListView -> m_fn_cGetOrder ());
|
||||
p_stVariableDef -> csValue = lIndex == TSL_cItemNotFound ? TUT_C_szFalse : TUT_C_szTrue;
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_iExecute3dGetStatusBarText
|
||||
// Execute a "Is Existing Model" tutorial script action
|
||||
// Return 0 if no error
|
||||
//-----------------------------------------------------------------------------
|
||||
int TUT_CTutorialManager::m_fn_iExecute3dGetStatusBarText (char * _szParameter)
|
||||
{
|
||||
// Get parameters : variable name
|
||||
int iNumberOfParameter;
|
||||
char * szPaneNumber , * szVariableName;
|
||||
|
||||
int iReturnValue = m_fn_iGetParameters (_szParameter , 2 , 2 , & iNumberOfParameter , & szPaneNumber , & szVariableName);
|
||||
if (iReturnValue != TUT_C_iNoError) return iReturnValue;
|
||||
|
||||
TUT_tdstVariableDefinition * p_stVariableDef = m_fnp_stFindVariable (szVariableName);
|
||||
if (p_stVariableDef == NULL) return TUT_C_iError_UnknownVariable;
|
||||
|
||||
CStatusBar *p_oStatusBar = gs_fn_p_oGetStatusBar ();
|
||||
ASSERT( p_oStatusBar );
|
||||
|
||||
CStatusBarCtrl &rStat = p_oStatusBar -> GetStatusBarCtrl ();
|
||||
|
||||
char szText[512];
|
||||
int iPane = m_fn_iConvertToInt (szPaneNumber);
|
||||
int iType;
|
||||
|
||||
rStat . GetText (szText , iPane , &iType);
|
||||
p_stVariableDef -> csValue = szText;
|
||||
|
||||
return TUT_C_iNoError;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_bIsModelView
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bIsModelView (HWND _hWnd)
|
||||
{
|
||||
C3ListView *p_oListView = NULL;
|
||||
CPA_EditorBase *p_oCurrentEditor = TUT_M_GetCurrentEditor ();
|
||||
|
||||
if( p_oCurrentEditor && p_oCurrentEditor -> GetCurrentEditorName() == C_szDLLMaterialName )
|
||||
{
|
||||
CSplitFrame * p_oBottomFrame = (CSplitFrame*)g_oFrameGest . ma_p_oWinArray [2] [3];
|
||||
if (p_oBottomFrame)
|
||||
{
|
||||
p_oListView = (C3ListView*)p_oBottomFrame -> m_fn_p_oGetPane (1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get the model view
|
||||
FRMBase * p_oModelFrame = g_oFrameGest . ma_p_oWinArray [2] [3];
|
||||
if (p_oModelFrame)
|
||||
{
|
||||
CPA_DialogInsert * p_oModelWnd = (CPA_DialogInsert *) p_oModelFrame -> GetWindow (GW_CHILD);
|
||||
if (p_oModelWnd)
|
||||
{
|
||||
EDT_ModelView * p_oModelView = p_oModelWnd -> GetModelView ();
|
||||
if (p_oModelView)
|
||||
p_oListView = (C3ListView*) p_oModelView;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (p_oListView && p_oListView -> m_hWnd == _hWnd);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_bLButtonDown3DViewProc
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonDown3DViewProc(int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CString csText;
|
||||
CPoint oPoint(LOWORD(lParam),HIWORD(lParam));
|
||||
DEV_ViewPort3D * pViewport3d = TUT_M_GetCurrentViewPort ();
|
||||
tdstMousePos stMousePos;
|
||||
HIE_tdxHandleToSuperObject hSupObject;
|
||||
HIE_aDEF_stTabOfPickInfo a_stPickInfo;
|
||||
ACP_tdxIndex xNbPicked;
|
||||
|
||||
pViewport3d -> PointToMousePos (oPoint, &stMousePos);
|
||||
|
||||
//try to pick an object
|
||||
hSupObject = pViewport3d -> GetParentMultiDevice3D()->GetEngineWorld();
|
||||
if (hSupObject != NULL)
|
||||
{
|
||||
xNbPicked = HIE_xIsSuperObjectPick(GLI_C_ModePickingFace,pViewport3d -> m_hDisplayDevice,
|
||||
pViewport3d -> m_hDisplayViewport, &stMousePos.stPos2D, hSupObject, a_stPickInfo);
|
||||
|
||||
if (xNbPicked > 0)
|
||||
{
|
||||
m_lDragDrop = 1;
|
||||
m_eDragDropType = TUT_eMove3d;
|
||||
MTH3D_M_vCopyVector (&g_stInitialPoint , &((((a_stPickInfo[0]).stPickedObject).aDEF_stDataOfElement[0]).stHit));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_bLButtonUp3DViewProc
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonUp3DViewProc(int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CString csText;
|
||||
CPoint oPoint(LOWORD(lParam),HIWORD(lParam));
|
||||
DEV_ViewPort3D * pViewport3d = TUT_M_GetCurrentViewPort ();
|
||||
tdstMousePos stMousePos;
|
||||
HIE_tdxHandleToSuperObject hSupObject;
|
||||
HIE_aDEF_stTabOfPickInfo a_stPickInfo;
|
||||
ACP_tdxIndex xNbPicked;
|
||||
|
||||
pViewport3d -> PointToMousePos (oPoint, &stMousePos);
|
||||
|
||||
//try to pick an object
|
||||
hSupObject = pViewport3d -> GetParentMultiDevice3D()->GetEngineWorld();
|
||||
if (hSupObject != NULL)
|
||||
{
|
||||
xNbPicked = HIE_xIsSuperObjectPick(GLI_C_ModePickingFace,pViewport3d -> m_hDisplayDevice,
|
||||
pViewport3d -> m_hDisplayViewport, &stMousePos.stPos2D, hSupObject, a_stPickInfo);
|
||||
|
||||
if (xNbPicked > 0)
|
||||
{
|
||||
switch (m_eDragDropType)
|
||||
{
|
||||
case TUT_eMove3d:
|
||||
{
|
||||
if (m_lDragDrop > 1 && !TUT_M_GetCurrentWorld () -> GetListSelected () -> IsEmpty ())
|
||||
{
|
||||
MTH3D_tdstVector stDeplacement;
|
||||
CPA_SuperObject * pCameraSuperObject = pViewport3d -> GetCameraSO ();
|
||||
POS_tdxHandleToPosition hGlobalMatrix = HIE_fn_hGetSuperObjectGlobalMatrix (pCameraSuperObject -> GetStruct ());
|
||||
MTH3D_tdstVector stVectorX , stVectorY , stVectorZ;
|
||||
MTH_tdxReal xDeltaX , xDeltaY;
|
||||
CPA_SuperObject * p_oSuperObject = TUT_M_GetCurrentWorld () -> GetListSelected () -> GetTail ();
|
||||
CPA_BaseObject * pObject = p_oSuperObject -> GetObject ();
|
||||
|
||||
POS_fn_vGetRotationMatrix (hGlobalMatrix , & stVectorX , & stVectorY , & stVectorZ);
|
||||
MTH3D_M_vSubVector (&stDeplacement , &((((a_stPickInfo[0]).stPickedObject).aDEF_stDataOfElement[0]).stHit) , &g_stInitialPoint);
|
||||
|
||||
xDeltaX = MTH3D_M_xDotProductVector (&stDeplacement , &stVectorX);
|
||||
xDeltaY = MTH3D_M_xDotProductVector (&stDeplacement , &stVectorY);
|
||||
|
||||
if (MTH_M_bIsNullWithEpsilon(xDeltaX,MTH_M_xDoubleToReal(0.01)) && MTH_M_bIsNullWithEpsilon(xDeltaY,MTH_M_xDoubleToReal(0.01)))
|
||||
{
|
||||
csText . Format ("%s(\"%s\")" , TUT_C_sz3DClic3dView , pObject -> fn_p_szGetName ());
|
||||
}
|
||||
else
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%.6f\" , \"%.6f\")" , TUT_C_sz3DMove3d , pObject -> fn_p_szGetName () , - xDeltaX , - xDeltaY);
|
||||
}
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!TUT_M_GetCurrentWorld () -> GetListSelected () -> IsEmpty ())
|
||||
{
|
||||
CPA_SuperObject *p_oSuperObject = TUT_M_GetCurrentWorld () -> GetListSelected () -> GetTail ();
|
||||
if (p_oSuperObject)
|
||||
{
|
||||
CPA_BaseObject * pObject = p_oSuperObject -> GetObject ();
|
||||
if (pObject)
|
||||
{
|
||||
csText . Format ("%s(\"%s\")" , TUT_C_sz3DClic3dView , pObject -> fn_p_szGetName ());
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MTH3D_tdstVector *p_stHitPoint = &((((a_stPickInfo[0]).stPickedObject).aDEF_stDataOfElement[0]).stHit);
|
||||
|
||||
csText . Format ("%s(\"%.6f\",\"%.6f\",\"%.6f\")" , TUT_C_sz3DClic3dView , p_stHitPoint->xX ,
|
||||
p_stHitPoint->xY ,
|
||||
p_stHitPoint->xZ);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (m_eDragDropType)
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_bLButtonDownModelViewProc
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonDownModelViewProc(int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
C3ListView *p_oListView = gs_fn_p_oGetModelView ();
|
||||
|
||||
ASSERT(p_oListView);
|
||||
|
||||
// Get the selected item
|
||||
long lIndex = p_oListView -> m_fn_lGetSelectedItem (p_oListView -> m_fn_cGetOrder ());
|
||||
|
||||
// Get the name of the item and fill the variable
|
||||
if (lIndex == TSL_cItemNotFound)
|
||||
{
|
||||
m_csDragDropElement = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
m_csDragDropElement = p_oListView -> m_fn_csGetName (lIndex , p_oListView -> m_fn_cGetOrder ());
|
||||
m_lDragDrop = 1;
|
||||
m_eDragDropType = TUT_eSelectModel;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// class TUT_CTutorialManager - m_fn_bLButtonUpModelViewProc
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonUpModelViewProc(int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
CString csText;
|
||||
CPoint oPoint(LOWORD(lParam),HIWORD(lParam));
|
||||
DEV_ViewPort3D * pViewport3d = TUT_M_GetCurrentViewPort ();
|
||||
tdstMousePos stMousePos;
|
||||
HIE_tdxHandleToSuperObject hSupObject;
|
||||
HIE_aDEF_stTabOfPickInfo a_stPickInfo;
|
||||
ACP_tdxIndex xNbPicked;
|
||||
|
||||
pViewport3d -> PointToMousePos (oPoint, &stMousePos);
|
||||
|
||||
//try to pick an object
|
||||
hSupObject = pViewport3d -> GetParentMultiDevice3D()->GetEngineWorld();
|
||||
if (hSupObject != NULL)
|
||||
{
|
||||
xNbPicked = HIE_xIsSuperObjectPick(GLI_C_ModePickingFace,pViewport3d -> m_hDisplayDevice,
|
||||
pViewport3d -> m_hDisplayViewport, &stMousePos.stPos2D, hSupObject, a_stPickInfo);
|
||||
|
||||
if (xNbPicked > 0)
|
||||
{
|
||||
switch (m_eDragDropType)
|
||||
{
|
||||
case TUT_eSelectModel:
|
||||
{
|
||||
if (m_lDragDrop > 1)
|
||||
{
|
||||
MTH3D_tdstVector *p_stHitPoint = &((((a_stPickInfo[0]).stPickedObject).aDEF_stDataOfElement[0]).stHit);
|
||||
|
||||
m_fn_vRemoveToPause ();
|
||||
|
||||
// drag
|
||||
csText . Format ("%s()" , TUT_C_szDrag);
|
||||
m_fn_vAddCommand (csText);
|
||||
// select model
|
||||
csText . Format ("%s(\"%s\")" , TUT_C_sz3DSelectModel , m_csDragDropElement);
|
||||
m_fn_vAddCommand (csText);
|
||||
// drop
|
||||
csText . Format ("%s()" , TUT_C_szDrop);
|
||||
m_fn_vAddCommand (csText);
|
||||
// clic3dView
|
||||
csText . Format ("%s(\"%.6f\",\"%.6f\",\"%.6f\")" , TUT_C_sz3DClic3dView , p_stHitPoint->xX ,
|
||||
p_stHitPoint->xY ,
|
||||
p_stHitPoint->xZ);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (m_eDragDropType)
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
#endif // ifdef TUT_3D
|
3670
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.cpp
Normal file
3670
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.cpp
Normal file
File diff suppressed because it is too large
Load Diff
850
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.cxx
Normal file
850
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.cxx
Normal file
@@ -0,0 +1,850 @@
|
||||
const CString TUT_gs_csPause = ";";
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vStartRecord (HMODULE _hModule, DWORD _dThreadID)
|
||||
{
|
||||
m_oListOfCommands . RemoveAll ();
|
||||
m_fn_bStartStopHook (_hModule , _dThreadID , TRUE);
|
||||
m_xLastCommandTime = clock ();
|
||||
m_bInPause = TRUE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vStopRecord (HMODULE _hModule, DWORD _dThreadID, LPCTSTR _szFileName)
|
||||
{
|
||||
m_fn_bStartStopHook (_hModule , _dThreadID , FALSE);
|
||||
|
||||
m_fn_vDeleteLastCommand ();
|
||||
|
||||
if (_szFileName)
|
||||
{
|
||||
FILE *pFile = fopen (_szFileName , "wt");
|
||||
if (pFile)
|
||||
{
|
||||
while (m_oListOfCommands . GetCount ())
|
||||
{
|
||||
CString csCommand = m_oListOfCommands . RemoveHead ();
|
||||
/*if (csCommand != TUT_gs_csPause)*/ fprintf (pFile , "%s\n" , csCommand);
|
||||
}
|
||||
fclose (pFile);
|
||||
}
|
||||
}
|
||||
// remove list
|
||||
while (m_oListOfCommands . GetCount ()) m_oListOfCommands . RemoveHead ();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#define TUT_M_vSetHookProc(hFunc,iHookType,szHookFuncName,hModule,hThreadID)\
|
||||
if (!hFunc)\
|
||||
{\
|
||||
if (!(hFunc = SetWindowsHookEx(iHookType,(HOOKPROC)GetProcAddress(hModule, szHookFuncName), hModule, hThreadID)))\
|
||||
{\
|
||||
return FALSE;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define TUT_M_vUnsetHookProc(hFunc)\
|
||||
if (hFunc)\
|
||||
{\
|
||||
UnhookWindowsHookEx(hFunc);\
|
||||
hFunc = NULL;\
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bStartStopHook (HMODULE _hModule, DWORD _dThreadID, BOOL _bStart)
|
||||
{
|
||||
static HHOOK hhkGetMessage = NULL;
|
||||
static HHOOK hhkCallWndProc = NULL;
|
||||
static HHOOK hhkCallWndProcRet = NULL;
|
||||
|
||||
if (_bStart)
|
||||
{
|
||||
TUT_M_vSetHookProc(hhkGetMessage, WH_GETMESSAGE, "SpyGetMsgProc", _hModule,_dThreadID);
|
||||
TUT_M_vSetHookProc(hhkCallWndProc, WH_CALLWNDPROC, "SpyGetWndProc", _hModule,_dThreadID);
|
||||
TUT_M_vSetHookProc(hhkCallWndProcRet, WH_CALLWNDPROCRET, "SpyGetWndProcRet", _hModule,_dThreadID);
|
||||
}
|
||||
else
|
||||
{
|
||||
TUT_M_vUnsetHookProc(hhkGetMessage);
|
||||
TUT_M_vUnsetHookProc(hhkCallWndProc);
|
||||
TUT_M_vUnsetHookProc(hhkCallWndProcRet);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#define TUT_M_HandleMsg(iType,uiMess,Func) case uiMess: return Func(iType, hwnd , uiMessage , wParam , lParam);
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bHookMsgProc (HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
m_fn_vHandlePause ();
|
||||
|
||||
switch (uiMessage)
|
||||
{
|
||||
TUT_M_HandleMsg(WH_GETMESSAGE, WM_RBUTTONDOWN, m_fn_bRButtonMsgProc)
|
||||
TUT_M_HandleMsg(WH_GETMESSAGE, WM_LBUTTONUP, m_fn_bLButtonMsgProc)
|
||||
TUT_M_HandleMsg(WH_GETMESSAGE, WM_LBUTTONDOWN, m_fn_bLButtonMsgProc)
|
||||
TUT_M_HandleMsg(WH_GETMESSAGE, WM_LBUTTONDBLCLK, m_fn_bLButtonMsgProc)
|
||||
TUT_M_HandleMsg(WH_GETMESSAGE, WM_MOUSEMOVE, m_fn_bMouseMsgProc)
|
||||
|
||||
default : break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bHookWndProc (HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
m_fn_vHandlePause ();
|
||||
|
||||
switch (uiMessage)
|
||||
{
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_COMMAND, m_fn_bCommandMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_KILLFOCUS, m_fn_bFocusMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_NOTIFY, m_fn_bNotifyMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_INITMENU, m_fn_bMenuMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_INITMENUPOPUP, m_fn_bMenuMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_MENUSELECT, m_fn_bMenuMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_EXITMENULOOP, m_fn_bMenuMsgProc)
|
||||
TUT_M_HandleMsg(WH_CALLWNDPROC, WM_MOUSEMOVE, m_fn_bMouseMsgProc)
|
||||
default : break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bHookWndProcRet (HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
m_fn_vHandlePause ();
|
||||
|
||||
switch (uiMessage)
|
||||
{
|
||||
default : break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vHandlePause ()
|
||||
{
|
||||
clock_t xDuration = clock () - m_xLastCommandTime;
|
||||
|
||||
if (!m_bInPause && xDuration > TUT_C_xPauseIntervall)
|
||||
{
|
||||
xDuration = TUT_C_xPauseIntervall;
|
||||
m_fn_vAddPause ();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vAddCommand (CString csCommand)
|
||||
{
|
||||
m_oListOfCommands . AddTail (csCommand);
|
||||
m_bInPause = FALSE;
|
||||
m_xLastCommandTime = clock ();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vInsertAfterPause (CString csCommand)
|
||||
{
|
||||
POSITION xPos;
|
||||
|
||||
xPos = m_oListOfCommands . GetTailPosition ();
|
||||
|
||||
while (xPos && m_oListOfCommands . GetAt (xPos) != TUT_gs_csPause)
|
||||
{
|
||||
m_oListOfCommands . GetPrev (xPos);
|
||||
}
|
||||
|
||||
if (xPos)
|
||||
{
|
||||
m_oListOfCommands . InsertBefore (xPos , csCommand);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_oListOfCommands . AddTail (csCommand);
|
||||
}
|
||||
m_bInPause = FALSE;
|
||||
m_xLastCommandTime = clock ();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vAddPause (void)
|
||||
{
|
||||
m_oListOfCommands . AddTail (TUT_gs_csPause);
|
||||
m_bInPause = TRUE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vRemoveToPause (void)
|
||||
{
|
||||
while (!m_oListOfCommands . IsEmpty () && m_oListOfCommands . GetTail () != TUT_gs_csPause)
|
||||
{
|
||||
m_oListOfCommands . RemoveTail ();
|
||||
}
|
||||
|
||||
m_bInPause = TRUE;
|
||||
m_xLastCommandTime = clock ();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bHaveSomethingAfterPause (void)
|
||||
{
|
||||
return (m_oListOfCommands . GetCount () && m_oListOfCommands . GetTail () != TUT_gs_csPause);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void TUT_CTutorialManager::m_fn_vDeleteLastCommand (void)
|
||||
{
|
||||
// delete last Pause commands
|
||||
while (!m_oListOfCommands . IsEmpty () && m_oListOfCommands . GetTail () == TUT_gs_csPause)
|
||||
{
|
||||
m_oListOfCommands . RemoveTail ();
|
||||
}
|
||||
|
||||
// delete last command
|
||||
m_fn_vRemoveToPause ();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
#define TUT_M_bWND_VALID_AND_USABLE(p_stWndDefinition)\
|
||||
( (p_stWndDefinition) && (p_stWndDefinition) -> hWnd && IsWindowVisible((p_stWndDefinition) -> hWnd) )
|
||||
|
||||
#define TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition)\
|
||||
if (!TUT_M_bWND_VALID_AND_USABLE(p_stWndDefinition)) return FALSE;
|
||||
|
||||
#define TUT_M_ASSERT_CURSOR_UNDER_CONTROL(hwnd)\
|
||||
{\
|
||||
RECT stRect;\
|
||||
POINT xPoint;\
|
||||
GetWindowRect (hwnd , &stRect);\
|
||||
GetCursorPos (&xPoint);\
|
||||
if (!PtInRect (&stRect , xPoint)) return FALSE;\
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bCommandMsgProc (int /*iHookType*/, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = lParam ? m_fnp_stFindWndDefinition ((HWND)lParam) : NULL;
|
||||
UINT uiNotification = HIWORD(wParam);
|
||||
CString csText;
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_eButton:
|
||||
{
|
||||
if (uiNotification == BN_CLICKED)
|
||||
{
|
||||
csText . Format ("%s(\"%s\")" , TUT_C_szClic , p_stWndDefinition -> csName);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TUT_eListBox:
|
||||
{
|
||||
switch (uiNotification)
|
||||
{
|
||||
case LBN_SELCHANGE:
|
||||
{
|
||||
long lType = GetWindowLong (p_stWndDefinition -> hWnd, GWL_STYLE);
|
||||
if (! (lType & LBS_MULTIPLESEL) )
|
||||
{
|
||||
int iCurSel = SendMessage (p_stWndDefinition -> hWnd, LB_GETCURSEL, 0, 0);
|
||||
if (iCurSel != LB_ERR)
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
SendMessage (p_stWndDefinition -> hWnd, LB_GETTEXT, iCurSel, (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LBN_DBLCLK:
|
||||
{
|
||||
if (m_oListOfCommands . GetCount () > 0)
|
||||
{
|
||||
csText . Format ("%s()" , TUT_C_szDoubleClic);
|
||||
m_fn_vInsertAfterPause (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (uiNotification)
|
||||
}
|
||||
break;
|
||||
|
||||
case TUT_eComboBox:
|
||||
{
|
||||
switch (uiNotification)
|
||||
{
|
||||
case CBN_SELCHANGE:
|
||||
{
|
||||
int iCurSel = SendMessage (p_stWndDefinition -> hWnd, CB_GETCURSEL, 0, 0);
|
||||
if (iCurSel != CB_ERR)
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
SendMessage (p_stWndDefinition -> hWnd, CB_GETLBTEXT, iCurSel, (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CBN_DBLCLK:
|
||||
{
|
||||
if (m_oListOfCommands . GetCount () > 0)
|
||||
{
|
||||
csText . Format ("%s()" , TUT_C_szDoubleClic);
|
||||
m_fn_vInsertAfterPause (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (uiNotification)
|
||||
}
|
||||
break;
|
||||
} // switch (p_stWndDefinition -> eType)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
CString gs_fn_csHandleQuoteInString (char *_szSourceText)
|
||||
{
|
||||
CString csResult;
|
||||
char *p_cBegin = _szSourceText;
|
||||
|
||||
csResult . Empty ();
|
||||
|
||||
while (*p_cBegin)
|
||||
{
|
||||
if (*p_cBegin == '\"')
|
||||
{
|
||||
csResult += "''";
|
||||
}
|
||||
else
|
||||
{
|
||||
csResult += *p_cBegin;
|
||||
}
|
||||
p_cBegin ++;
|
||||
}
|
||||
return csResult;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bFocusMsgProc (int /*iHookType*/, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (uiMessage == WM_KILLFOCUS)
|
||||
{
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = hwnd ? m_fnp_stFindWndDefinition (hwnd) : NULL;
|
||||
CString csText;
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_eListBox:
|
||||
{
|
||||
long lType = GetWindowLong (p_stWndDefinition -> hWnd , GWL_STYLE);
|
||||
if (lType & LBS_MULTIPLESEL)
|
||||
{
|
||||
int iNbSel = SendMessage (p_stWndDefinition -> hWnd , LB_GETSELCOUNT , 0 , 0);
|
||||
if (iNbSel != LB_ERR)
|
||||
{
|
||||
int *a_iSelItems = (int*) alloca (iNbSel * sizeof (int));
|
||||
|
||||
if (SendMessage (p_stWndDefinition -> hWnd , LB_GETSELITEMS , iNbSel , (DWORD)a_iSelItems))
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
SendMessage (p_stWndDefinition -> hWnd , LB_GETTEXT , a_iSelItems [0] , (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
|
||||
for (int i=1 ; i<iNbSel ; i++)
|
||||
{
|
||||
SendMessage (p_stWndDefinition -> hWnd , LB_GETTEXT , a_iSelItems [i] , (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szAddSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TUT_eTextEdit:
|
||||
{
|
||||
long lType = GetWindowLong (p_stWndDefinition -> hWnd , GWL_STYLE);
|
||||
if (lType & ES_MULTILINE)
|
||||
{
|
||||
int iSize = GetWindowTextLength (p_stWndDefinition -> hWnd);
|
||||
char *szText = (char *) alloca (iSize+1);
|
||||
char szEndOfLine [3] = { 13 , 10 , 0 };
|
||||
char *p_cBegin , *p_cEnd;
|
||||
int iLineNumber;
|
||||
|
||||
// clear control
|
||||
csText . Format ("%s(0,0,0,0)" , TUT_C_szSelectText);
|
||||
m_fn_vAddCommand (csText);
|
||||
|
||||
GetWindowText (p_stWndDefinition -> hWnd , szText , iSize + 1);
|
||||
p_cBegin = szText;
|
||||
|
||||
iLineNumber = 0;
|
||||
p_cEnd = strstr (p_cBegin , szEndOfLine);
|
||||
while (p_cEnd)
|
||||
{
|
||||
*p_cEnd = 0;
|
||||
if (p_cEnd != p_cBegin)
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%s\" , %d)" , TUT_C_szSetEditText , p_stWndDefinition -> csName , gs_fn_csHandleQuoteInString (p_cBegin) , iLineNumber);
|
||||
m_fn_vAddCommand (csText);
|
||||
}
|
||||
|
||||
//
|
||||
p_cBegin = p_cEnd + 2;
|
||||
iLineNumber ++;
|
||||
p_cEnd = strstr (p_cBegin , szEndOfLine);
|
||||
}
|
||||
|
||||
if (*p_cBegin)
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%s\" , %d)" , TUT_C_szSetEditText , p_stWndDefinition -> csName , gs_fn_csHandleQuoteInString (p_cBegin) , iLineNumber);
|
||||
m_fn_vAddCommand (csText);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
int iSize = GetWindowTextLength (p_stWndDefinition -> hWnd);
|
||||
char *szText = (char *) alloca (iSize+1);
|
||||
|
||||
if (GetWindowText (p_stWndDefinition -> hWnd , szText , iSize+1))
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSetEditText , p_stWndDefinition -> csName , gs_fn_csHandleQuoteInString (szText));
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (p_stWndDefinition -> eType)
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bNotifyMsgProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = (pnmh && pnmh -> hwndFrom) ? m_fnp_stFindWndDefinition (pnmh -> hwndFrom) : NULL;
|
||||
CString csText;
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
TUT_M_ASSERT_CURSOR_UNDER_CONTROL(p_stWndDefinition -> hWnd);
|
||||
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_eListBox:
|
||||
{
|
||||
uiMessage = uiMessage;
|
||||
}
|
||||
break;
|
||||
|
||||
case TUT_eListCtrl:
|
||||
{
|
||||
NM_LISTVIEW *pnmv = (NM_LISTVIEW *) lParam;
|
||||
if (pnmv -> hdr . code == LVN_ITEMCHANGED)
|
||||
{
|
||||
if (pnmv -> iItem && pnmv -> uNewState == (LVIS_SELECTED|LVIS_FOCUSED))
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
ListView_GetItemText (p_stWndDefinition -> hWnd , pnmv -> iItem , 0 , szText , 255);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case TUT_eTreeCtrl:
|
||||
{
|
||||
NM_TREEVIEW *pnmtv = (NM_TREEVIEW *) lParam;
|
||||
switch (pnmtv -> hdr . code)
|
||||
{
|
||||
case TVN_SELCHANGED:
|
||||
{
|
||||
if (pnmtv -> itemNew . mask & TVIF_STATE && pnmtv -> itemNew . state & TVIS_SELECTED)
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
pnmtv -> itemNew . pszText = szText;
|
||||
pnmtv -> itemNew . cchTextMax = 255;
|
||||
pnmtv -> itemNew . mask = TVIF_TEXT;
|
||||
|
||||
if (TreeView_GetItem (p_stWndDefinition -> hWnd , & pnmtv -> itemNew))
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TVN_ITEMEXPANDED:
|
||||
{
|
||||
if (pnmtv -> itemNew . mask & TVIF_STATE)
|
||||
{
|
||||
BOOL bExpanded = (pnmtv -> itemNew . state & TVIS_EXPANDED) ? TRUE : FALSE;
|
||||
char szText[255];
|
||||
|
||||
pnmtv -> itemNew . pszText = szText;
|
||||
pnmtv -> itemNew . cchTextMax = 255;
|
||||
pnmtv -> itemNew . mask = TVIF_TEXT;
|
||||
|
||||
if (TreeView_GetItem (p_stWndDefinition -> hWnd , & pnmtv -> itemNew))
|
||||
{
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , bExpanded ? TUT_C_szExpand : TUT_C_szCollapse , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (pnmtv -> hdr . code)
|
||||
}
|
||||
break;
|
||||
} // switch (p_stWndDefinition -> eType)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bLButtonMsgProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (iHookType)
|
||||
{
|
||||
case WH_CALLWNDPROCRET:
|
||||
case WH_GETMESSAGE:
|
||||
{
|
||||
switch (uiMessage)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
{
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = hwnd ? m_fnp_stFindWndDefinition (hwnd) : NULL;
|
||||
|
||||
if (p_stWndDefinition == NULL && m_fn_bIsModelView (hwnd))
|
||||
{
|
||||
return m_fn_bLButtonDownModelViewProc (iHookType, hwnd, uiMessage, wParam, lParam);
|
||||
}
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
|
||||
m_csDragDropElement . Empty ();
|
||||
m_lDragDrop = 0;
|
||||
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_e3DView:
|
||||
{
|
||||
return m_fn_bLButtonDown3DViewProc (iHookType, hwnd, uiMessage, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
{
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = hwnd ? m_fnp_stFindWndDefinition (hwnd) : NULL;
|
||||
|
||||
if (p_stWndDefinition == NULL && m_fn_bIsModelView (hwnd))
|
||||
{
|
||||
return m_fn_bLButtonUpModelViewProc (iHookType, hwnd, uiMessage, wParam, lParam);
|
||||
}
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_e3DView:
|
||||
{
|
||||
return m_fn_bLButtonUp3DViewProc (iHookType, hwnd, uiMessage, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
}
|
||||
m_csDragDropElement . Empty ();
|
||||
m_lDragDrop = 0;
|
||||
}
|
||||
break;
|
||||
case WM_LBUTTONDBLCLK:
|
||||
{
|
||||
if (m_fn_bHaveSomethingAfterPause ())
|
||||
{
|
||||
CString csText;
|
||||
|
||||
csText . Format ("%s()" , TUT_C_szDoubleClic);
|
||||
m_fn_vInsertAfterPause (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
} // switch (uiMessage)
|
||||
}
|
||||
break;
|
||||
} // switch (iHookType)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bMouseMsgProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uiMessage)
|
||||
{
|
||||
case WM_MOUSEMOVE:
|
||||
{
|
||||
if (m_lDragDrop > 0) m_lDragDrop++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bRButtonMsgProc (int iHookType, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uiMessage)
|
||||
{
|
||||
case WM_RBUTTONDOWN:
|
||||
{
|
||||
TUT_tdstWndDefinition *p_stWndDefinition = hwnd ? m_fnp_stFindWndDefinition (hwnd) : NULL;
|
||||
CString csText;
|
||||
|
||||
TUT_M_ASSERT_WND_VALID_AND_USABLE(p_stWndDefinition);
|
||||
|
||||
switch (p_stWndDefinition -> eType)
|
||||
{
|
||||
case TUT_e3DView:
|
||||
{
|
||||
csText . Format ("%s()" , TUT_C_szRightButton);
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
case TUT_eListBox:
|
||||
{
|
||||
long lType = GetWindowLong (p_stWndDefinition -> hWnd , GWL_STYLE);
|
||||
if (lType & LBS_MULTIPLESEL)
|
||||
{
|
||||
int iNbSel = SendMessage (p_stWndDefinition -> hWnd , LB_GETSELCOUNT , 0 , 0);
|
||||
if (iNbSel != LB_ERR)
|
||||
{
|
||||
int *a_iSelItems = (int*) alloca (iNbSel * sizeof (int));
|
||||
|
||||
if (SendMessage (p_stWndDefinition -> hWnd , LB_GETSELITEMS , iNbSel , (DWORD)a_iSelItems))
|
||||
{
|
||||
char szText[255];
|
||||
|
||||
SendMessage (p_stWndDefinition -> hWnd , LB_GETTEXT , a_iSelItems [0] , (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
|
||||
for (int i=1 ; i<iNbSel ; i++)
|
||||
{
|
||||
SendMessage (p_stWndDefinition -> hWnd , LB_GETTEXT , a_iSelItems [i] , (DWORD)szText);
|
||||
csText . Format ("%s(\"%s\" , \"%s\")" , TUT_C_szAddSelect , p_stWndDefinition -> csName , szText);
|
||||
m_fn_vAddCommand (csText);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// no break here
|
||||
default:
|
||||
{
|
||||
csText . Format ("%s()" , TUT_C_szRightButton);
|
||||
m_fn_vAddCommand (csText);
|
||||
csText . Format ("%s(\"%s\")" , TUT_C_szClic , p_stWndDefinition -> csName);
|
||||
m_fn_vAddCommand (csText);
|
||||
}
|
||||
break;
|
||||
} // switch (p_stWndDefinition -> eType)
|
||||
|
||||
//
|
||||
}
|
||||
break;
|
||||
} // switch (uiMessage)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void gs_fn_vCleanMenuName(char *_szName)
|
||||
{
|
||||
char *p_cSource = _szName;
|
||||
char *p_cTarget = _szName;
|
||||
|
||||
while (*p_cSource)
|
||||
{
|
||||
if (*p_cSource == '\t') break;
|
||||
if (*p_cSource != '&')
|
||||
{
|
||||
*p_cTarget++ = *p_cSource;
|
||||
}
|
||||
p_cSource++;
|
||||
}
|
||||
*p_cTarget = 0;
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
BOOL TUT_CTutorialManager::m_fn_bMenuMsgProc (int /*iHookType*/, HWND hwnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static CStringList s_oListOfMenuNames;
|
||||
static CList<HMENU,HMENU> s_oListOfMenuHandles;
|
||||
static char s_oCurrentMenuName[255];
|
||||
static HMENU hCurrentMenu;
|
||||
static HMENU hNextMenu;
|
||||
static BOOL bLastIsAnEntry;
|
||||
CString csText;
|
||||
|
||||
switch (uiMessage)
|
||||
{
|
||||
case WM_INITMENU:
|
||||
{
|
||||
s_oListOfMenuNames . RemoveAll ();
|
||||
s_oListOfMenuHandles . RemoveAll ();
|
||||
*s_oCurrentMenuName = 0;
|
||||
hCurrentMenu = (HMENU)wParam;
|
||||
hNextMenu = NULL;
|
||||
bLastIsAnEntry = FALSE;
|
||||
}
|
||||
break;
|
||||
case WM_INITMENUPOPUP:
|
||||
{
|
||||
hNextMenu = (HMENU) wParam;
|
||||
}
|
||||
break;
|
||||
case WM_MENUSELECT:
|
||||
{
|
||||
UINT uItem = (UINT) LOWORD(wParam); // menu item or submenu index
|
||||
UINT fuFlags = (UINT) HIWORD(wParam); // menu flags
|
||||
HMENU hmenu = (HMENU) lParam; // handle of menu clicked
|
||||
UINT uiFlag = (fuFlags & MF_POPUP) ? MF_BYPOSITION : MF_BYCOMMAND;
|
||||
|
||||
csText = "WM_MENUSELECT : ";
|
||||
if (fuFlags == 0xFFFF)
|
||||
{
|
||||
if (!bLastIsAnEntry)
|
||||
{
|
||||
while (s_oListOfMenuNames . GetCount()) s_oListOfMenuNames . RemoveHead ();
|
||||
while (s_oListOfMenuHandles . GetCount()) s_oListOfMenuHandles . RemoveHead ();
|
||||
*s_oCurrentMenuName = 0;
|
||||
csText += "Clear all";
|
||||
}
|
||||
else
|
||||
{
|
||||
s_oListOfMenuNames . AddTail (s_oCurrentMenuName);
|
||||
csText += "End";
|
||||
}
|
||||
}
|
||||
else if (hmenu == hCurrentMenu)
|
||||
{
|
||||
GetMenuString (hmenu , uItem , s_oCurrentMenuName , 255 , uiFlag);
|
||||
gs_fn_vCleanMenuName (s_oCurrentMenuName);
|
||||
bLastIsAnEntry = (fuFlags & MF_POPUP) ? FALSE : TRUE;
|
||||
csText += "Current => " + CString(s_oCurrentMenuName);
|
||||
}
|
||||
else if (hmenu == hNextMenu)
|
||||
{
|
||||
s_oListOfMenuHandles . AddTail (hCurrentMenu);
|
||||
s_oListOfMenuNames . AddTail (s_oCurrentMenuName);
|
||||
GetMenuString (hmenu , uItem , s_oCurrentMenuName , 255 , uiFlag);
|
||||
gs_fn_vCleanMenuName (s_oCurrentMenuName);
|
||||
hCurrentMenu = hNextMenu;
|
||||
hNextMenu = NULL;
|
||||
bLastIsAnEntry = (fuFlags & MF_POPUP) ? FALSE : TRUE;
|
||||
csText += "Next => " + CString(s_oCurrentMenuName);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (s_oListOfMenuNames . GetCount()) s_oListOfMenuNames . RemoveTail ();
|
||||
while (s_oListOfMenuHandles . GetCount() && (s_oListOfMenuHandles . GetTail () != hmenu))
|
||||
{
|
||||
s_oListOfMenuHandles . RemoveTail ();
|
||||
if (s_oListOfMenuNames . GetCount()) s_oListOfMenuNames . RemoveTail ();
|
||||
}
|
||||
if (s_oListOfMenuHandles . GetCount()) s_oListOfMenuHandles . RemoveTail ();
|
||||
hCurrentMenu = hmenu;
|
||||
hNextMenu = NULL;
|
||||
GetMenuString (hmenu , uItem , s_oCurrentMenuName , 255 , uiFlag);
|
||||
gs_fn_vCleanMenuName (s_oCurrentMenuName);
|
||||
bLastIsAnEntry = (fuFlags & MF_POPUP) ? FALSE : TRUE;
|
||||
csText += "Back => " + CString(s_oCurrentMenuName);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_EXITMENULOOP:
|
||||
{
|
||||
while (s_oListOfMenuHandles . GetCount()) s_oListOfMenuHandles . RemoveHead ();
|
||||
|
||||
if (s_oListOfMenuNames . GetCount())
|
||||
{
|
||||
ASSERT(bLastIsAnEntry);
|
||||
csText . Format ("%s(\"%s\"" , wParam ? TUT_C_szPopupMenu : TUT_C_szMenu , s_oListOfMenuNames . RemoveHead ());
|
||||
while (s_oListOfMenuNames . GetCount())
|
||||
{
|
||||
csText = csText + " , \"" + s_oListOfMenuNames . RemoveHead () + "\"";
|
||||
}
|
||||
csText += ")";
|
||||
m_fn_vAddCommand (csText);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
1617
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.inc
Normal file
1617
Rayman_X/cpa/tempgrp/Tut/TutLib/Src/Tut_Mngr.inc
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user