reman3/Rayman_X/cpa/tempgrp/TGM/Src/_interf.hpp

379 lines
18 KiB
C++

//**************************************
// This is the base class of your DLL interface
// All methods of CPA_ToolDLLBase are
// present in that class.
//**************************************
#ifndef __MaterialINTERF_HPP__
#define __MaterialINTERF_HPP__
#ifdef ACTIVE_EDITOR
/******************************************/
#if _MSC_VER >= 1000
#pragma once
#endif
/******************************************/
// if you want only one instance of your DLL
// activate the next line
#define DLL_ONLY_ONE_INSTANCE
#include "Acp_base.h"
#include "itf.h"
class CMaterialListView;
class DiaView;
class DiaMeca;
class DiaSound;
class DiaCol;
class DiaMain;
class DiaText;
class tdoEditorGameMaterial;
class tdoEditorCollideMaterial;
class tdoEditorVisualMaterial;
class tdoEditorMechanicsMaterial;
class CTextureDlg;
typedef enum tdeRefreshListsMode_
{
E_rlm_DoNothing = 0,
E_rlm_DestroyAndRebuild,
E_rlm_UpdateWithoutDestruction
} tdeRefreshListsMode;
#define C_szFileReferencedNameKey "MaterialRef"
#define C_szFileMinimalNameKey "MaterialMin"
//structure used to highlight display
typedef struct stHighlightItem_
{
GMT_tdxHandleToGameMaterial hGameMaterial;
ACP_tdxHandleOfMaterial hHighlightVisualMaterial;
ACP_tdxHandleOfMaterial hOriginalVisualMaterial;
} tdstHighlightItem;
typedef enum eActivationMode_
{
E_am_InvalidMode,
E_am_Never,
E_am_Once,
E_am_Always
} tdeActivationMode;
//ANNECY Shaitan DisableFunctions (16/04/98) {
extern BOOL g_bMasterEditor;
#define C_szCommon "World\\Libraries\\Materials\\Common\\Common.gmt"
//ENDANNECY Shaitan DisableFunctions }
//----------------------------------------------------------
// Tool DLL interface class
//----------------------------------------------------------
class Material_Interface : public CPA_ToolDLLBase
{
private:
CBitmapList m_oTextureList; // List of all bitmaps in Data directory
CSplitFrame *m_p_oLeftSplitFrame; // Main frame of the editor
CSplitFrame *m_p_oBottomSplitFrame;
//BOOL m_bIsActivated; // are the dialogs displayed on the screen ?
//BOOL m_bIsSelected; //is it the current dll ?
CMaterialListView *m_p_oMaterialListView;
DiaView *m_p_oMaterialView;
DiaMeca *m_p_oMaterialMeca; // pointer to mecanics dialog
DiaSound *m_p_oMaterialSound; // pointer to sound dialog
DiaCol *m_p_oMaterialCol; // pointer to collision dialog
DiaMain *m_p_oMaterialMain; // pointer to the main dialog
DiaText *m_p_oTextureDialog; //pointer to texture edition dialog
CTextureDlg *m_p_oTextureDlg; // texture modal dialog box to choose a texture for the current material
CPA_SuperObject *m_p_oWorldRoot;
BOOL m_bDisplayMaterialUnderCursor; // display material name on status bar
void m_vRefreshMaterialSuperObjectLinks(void);
tdeRefreshListsMode m_eRefreshListsMode;
void m_vSavePreferences(void);
BOOL m_bModeIsMaterialSelect;
BOOL m_bModeIsIndexedTriangleSplit;
BOOL m_bEnteredEditorAtLeastOnce;
tdeActivationMode m_eLoadWarningsActivation;
GMT_tdxHandleToGameMaterial m_hQueriedDefaultGameMaterial;
CPA_List<CPA_BaseObject> m_oFileObjectList;
HIE_aDEF_stTabOfPickInfo m_a_stPickInfo;
tdoEditorGameMaterial *m_p_oMaterialUnderCursor;
BOOL m_bCanSaveModifs;
BOOL m_bTexturesLoaded;
CPA_KeyActionConfiguration *m_p_oKeyConfiguration;
CList<tdstHighlightItem *, tdstHighlightItem *> m_oHighlightList;
public:
Material_Interface(void);
~Material_Interface(void);
tdeRefreshListsMode m_eGetRefreshListMode() { return m_eRefreshListsMode; }
CString m_csGetIdPartOfSectionName(CString _csSectionName);
CString m_csGetActionPartOfSectionName(CString _csSectionName);
CString m_csGetFilePartOfSectionName(CString _csSectionName);
CBitmapList *m_p_oGetMaterialsTextureList() { return &m_oTextureList; }
CMaterialListView *m_p_oGetMaterialListView() { return m_p_oMaterialListView; }
DiaView *m_p_oGetVisualView() { return m_p_oMaterialView; }
DiaMeca *m_p_oGetMecaView() { return m_p_oMaterialMeca; }
DiaSound *m_p_oGetSoundView() { return m_p_oMaterialSound; }
DiaCol *m_p_oGetCollView() { return m_p_oMaterialCol; }
DiaMain *m_p_oGetMainView() { return m_p_oMaterialMain; }
DiaText *m_p_oGetTexView() { return m_p_oTextureDialog; }
CPA_SuperObject *m_p_oGetWorldSuperObject(void) { return m_p_oWorldRoot; }
tdoEditorGameMaterial *m_p_oGetEditedMaterial();
CTextureDlg *m_p_oGetTextureChooserDialog(void) { return m_p_oTextureDlg; }
void m_fn_vShowMaterialAll(tdoEditorGameMaterial *_p_oMaterial = NULL);
void m_vSetEditedMaterial(tdoEditorGameMaterial *_p_oMaterial);
BOOL m_bEditPickedMaterial(HIE_tdstPickInfo *_p_stPickInfo);
BOOL m_bLoadWarningsAreEnabled();
CPA_FileObject *m_p_oGetCurrentFileObject();
void m_vFindMaterialUnderCursor(CPoint _oPoint, BOOL _bVerbose = FALSE);
//Mircea Dunka 5.11.1998
void m_vFindColorUnderCursor(CPoint _oPoint, BOOL _bVerbose);
BOOL m_bGetGlidePixel;
//end Mircea Dunka
BOOL m_bSplitIndexedTriangle() { return m_bModeIsIndexedTriangleSplit; }
void m_vLoadHighlightInfo();
void m_vSaveHighlightInfo();
void m_vShowEditor();
void m_vHideEditor();
// ~Material_Interface(void);
//void m_vRefreshMaterialList<tdoEditorGameMaterial>(CString _csExtension);
void m_vRefreshFileObjectList();
void m_vDoRefreshLists(long _lStartInLinkTable = 0, tdeRefreshListsMode _eOverrideMode = E_rlm_DoNothing, BOOL _bLoadTextures = TRUE);
CPA_SaveObject *m_p_oGetEditorObjectForEngine(ACP_tdxHandleOfMaterial _hVisualMaterial);
CPA_SaveObject *m_p_oGetEditorObjectForEngine(DNM_tdxHandleToMecMatCharacteristics _hMechanicsMaterial);
CPA_SaveObject *m_p_oGetEditorObjectForEngine(GMT_tdxHandleToCollideMaterial _hCollideMaterial);
CPA_SaveObject *m_p_oGetEditorObjectForEngine(GMT_tdxHandleToGameMaterial _hGameMaterial);
CPA_SaveObject *m_p_oGetEditorObjectForEngine(GLI_tdstTexture *_hTexture);
/*===========================================================================
Messages
=========================================================================*/
virtual BOOL fn_bAcceptToSave(void);
virtual void fn_vBeforeSaveAll(void);
virtual void fn_vAfterSaveAll(void);
// engine - editor
void fn_vBeforeEngine (void);
void fn_vBeforeEditor (void);
// engine
// BOOL fn_bAcceptToRunEngine (void) { return TRUE; };
// BOOL fn_bAcceptToRunTimerEngine (void) { return TRUE; };
// end appli
// void fn_vJustBeforeClosing (void) { };
// BOOL fn_bAcceptToExit (void) { return TRUE; };
// keys
virtual BOOL _OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags);
virtual BOOL _OnKeyUp (UINT nChar, UINT nRepCnt, UINT nFlags);
// mouse
virtual BOOL _OnMouseMove(UINT nFlags, tdstMousePos *p_stPos, MTH3D_tdstVector *p_stVect);
// BOOL _OnLButtonDblClk (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo) { return FALSE; };
// BOOL _OnRButtonDblClk (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo) { return FALSE; };
virtual BOOL _OnLButtonDown(UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo);
// BOOL _OnRButtonDown (UINT nFlags, tdstMousePos *p_stPos, ACP_tdxIndex xIndex, HIE_tdstPickInfo *p_stPickInfo) { return FALSE; };
// BOOL _OnLButtonUp (UINT nFlags, tdstMousePos *p_stPos) { return FALSE; };
// BOOL _OnRButtonUp (UINT nFlags, tdstMousePos *p_stPos) { return FALSE; };
// command
// BOOL _OnCommand (UINT IDCmdMsg) { return FALSE; };
// BOOL _OnUpdateCommandUI (UINT uiID, CCmdUI *pCmdUI) { return FALSE; };
// dragdrop
// BOOL _OnDragDropEnd (WPARAM wParam, LPARAM lParam) { return FALSE; };
// BOOL _OnDragDropMove (WPARAM wParam, LPARAM lParam) { return FALSE; };
// BOOL _OnDragDropLooseFocus (WPARAM wParam, LPARAM lParam) { return FALSE; };
// BOOL _OnDragDropGainFocus (WPARAM wParam, LPARAM lParam) { return FALSE; };
// add objects to draw
virtual void fn_vBeforeDrawingWorld(GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2, DEV_ViewPort* p3);
virtual void fn_vAddObjectsToDraw (GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2, DEV_ViewPort* p3);
virtual void fn_vAddObjectsToDraw2 (GLD_tdstViewportAttributes *p1, GLI_tdxHandleToLight p2);
/*===========================================================================
Reachable Objects
=========================================================================*/
virtual BOOL fn_bLoadBaseObject (CPA_BaseObject *p_oObject);
/*===========================================================================
Reinit
=========================================================================*/
void fn_vOnChangeRoot(void)
{
m_p_oWorldRoot = M_GetWorld()->GetRoot();
}
void fn_vOnChangeWorld(void)
{
m_p_oWorldRoot = M_GetWorld()->GetRoot();
}
void fn_vOnChangeDevice(void)
{
m_p_oWorldRoot = M_GetWorld()->GetRoot();
}
/*===========================================================================
for Dialog List
=========================================================================*/
// CPA_ReachableObject * GetDialogSelection (CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDrawMode) { return NULL; };
// void GetListsForDialog (CPA_DialogList *pDialog) { };
// BOOL fn_bOnSelChangeHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pSelectedObject) { return FALSE; };
// BOOL fn_bOnDblClkHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pSelectedObject) { return FALSE; };
// BOOL fn_bOnSelChangeListObjects (CPA_DialogList *pDialog, CString csTypeName, CPA_ReachableObject *pSelectedObject, BOOL bUnselect) { return FALSE; };
// BOOL fn_bOnDblClkListObjects (CPA_DialogList *pDialog, CString csTypeName, CPA_ReachableObject *pSelectedObject) { return FALSE; };
// BOOL fn_bCanDragItemInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObjectToDrag) { return FALSE; };
// BOOL fn_bCanDropItemInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObjectToDrop, CPA_SuperObject *pTarget) { return FALSE; };
// BOOL fn_bOnDragDropInHierarchyTree (CPA_DialogList *pDialog, CString csTypeName, CPA_SuperObject *pObject, CPA_SuperObject *pTarget) { return FALSE; };
// BOOL fn_bOnSelChangeComboList (CPA_DialogList *pDialog, CString csTypeName) { return FALSE; };
// BOOL fn_bOnButtonTest (CPA_DialogList *pDialog, CString csTypeName, tdeListDrawMode eDraw) { return FALSE; };
// void fn_vInitDefaultParameters (CPA_DialogList *pDialog);
// void fn_vSetANewTest (CPA_DialogList *pDialog, CString csCurrentList) { };
// BOOL fn_bTestFunction (CString csCurrentType, CString csTestName, CPA_ReachableObject *pEdObj) { return TRUE; };
// BOOL fn_bSetCustomTest (CPA_DialogList *pDialog) { return FALSE; }
// BOOL fn_bCustomTestFunction (CString csCurrentType, CString csTestName, CPA_ReachableObject *pEdObj) { return TRUE; }
/*===========================================================================
Dialog Bar - Mircea Dunka 31 Aug. 1998
=========================================================================*/
void fn_vDefineDlgBarBtnIcon (tde_DlgBarCategory wCategory, tds_DlgBarBtn *_pDlgBarBtn);
/*===========================================================================
SubMenus and PopupMenu
=========================================================================*/
BOOL fn_bDefineSubMenu (EDT_SubMenu *_p_oEDTSubMenu) ;
void _OnSubMenuCommand (EDT_SubMenu *_p_oEDTSubMenu,UINT uiMsgID) ;
BOOL fn_bDefinePopupMenu(EDT_PopUpMenu *pPopup, CPA_List<CPA_SuperObject> *pSelection, BOOL bAsCurrentEditor);
void _OnPopUpMenuCommand(UINT m_IDCmdMsg);
/*===========================================================================
Messages from Evt_Editor
=========================================================================*/
// To pre translate all messages
// BOOL fn_bPreTranslateMessage(MSG * /*p_stMsg*/) { return FALSE; };
// Called just after editor has been inserted in list of all editors
void fn_vJustAfterRegistered(void) ;
// Called just before windows main loop processing
void fn_vConstruct(void) ;
// Called to refresh datas of DLL if "fn_vCanBeRefresh" returns TRUE
// void fn_vRefreshDatas(void) {};
// Called when level has changed
void fn_vLevelHasChanged(void);
// Current editor -> No current editor
// void fn_vHasLostFocus(void) {};
// No current editor -> Current editor
// BOOL fn_bHasGainedFocus(void) { return TRUE; };
/*===========================================================================
Messages from Evt_Editor
=========================================================================*/
// Editor Modifs
// void fn_vOnModifDelete (CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnModifParent (CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnModifCopy (CPA_List<EDT_SaveParents> *pListObjects, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnModifName (CPA_SuperObject *pEdObj, CString csInitalName, CString csFinalName, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnSelect (CPA_SuperObject *pEdObj, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnModifInsert (CPA_SuperObject *pEdObj, CPA_SuperObject *pParent,
// tdstPosition *p_stPosition, tdeTypeModif eType, tdeStatus eStatus) { }
// Moves
// void fn_vOnModifMove (CPA_List<EDT_SavePos> *pListObjects, CPA_List<EDT_SaveGlobalPos> *pListConcerned, tdeTypeModif eType, tdeStatus eStatus) { }
// void fn_vOnBeginMove (CPA_List<CPA_SuperObject> *pListObjects, CPA_List<CPA_SuperObject> *pListConcerned, tdeStatus eStatus) { }
// void fn_vOnMoving (CPA_List<CPA_SuperObject> *pListObjects, CPA_List<CPA_SuperObject> *pListConcerned, tdeStatus eStatus) { }
// Models
// void fn_vOnAddModelToList (CPA_ObjectDLLBase *pOwnerDLL, CString csListName, CString csModelName, tdeTypeModif eType) { }
// permission
// BOOL fn_bAcceptModifDelete (CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifParent (CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifCopy (CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifTranslate (CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifRotate (CPA_List<CPA_SuperObject> *pListObjects, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifInsert (CPA_SuperObject *pEdObj, CPA_SuperObject *pParent, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifScale (CPA_SuperObject *pEdObj, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptModifName (CPA_SuperObject *pEdObj, tdeStatus eStatus) { return TRUE; }
// BOOL fn_bAcceptMultiSelect (void) { return TRUE; }
// to precise selection
// tdeTypeAnswer fn_bAcceptSelect (CPA_SuperObject *pEdObj, ACP_tdxIndex xIndex, HIE_tdstPickInfo *pPicking, tdeStatus eStatus) { return C_Accept; }
/*===========================================================================
Current Editor
=========================================================================*/
virtual tdePermission fn_eAcceptNewEditor (CPA_EditorBase *pNewEditor) { return C_CloseBefore; }
virtual BOOL fn_bCanActivateEditor (CPA_List<CPA_BaseObject> *pParams)
{
return
#ifdef __INACTIVE_INTERFACE__
FALSE
#else
!fn_bIsCurrentEditor();
#endif
;
}
// BOOL fn_bCanCloseEditor (void) { return TRUE; }
virtual void fn_vOnActivateEditor (CPA_List<CPA_BaseObject> *pParams, BOOL bBackActivated=FALSE);
void fn_vOnCloseEditor (void);
// CString GetCurrentEditorName (void) { return GetName(); }
// void fn_vOnChangeCurrentEditor (CPA_DLLBase *pCurrentEditor, CPA_DLLBase *pNewEditor) { }
// void fn_vBackActiveMe (void *pMyData) { };
// void fn_vEraseWalkDataStructure (void *pMyData) { };
/*===========================================================================
General Purpose
=========================================================================*/
virtual long OnQueryAction(CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM);
// long OnQueryInfos (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; };
// long OnQueryOpen (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; };
// long OnQueryClose (CPA_EditorBase * /*p_oSender*/, WPARAM, LPARAM) { return 0; };
/*===========================================================================
Coherence
=========================================================================*/
virtual void fn_vOnModifyChild(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject, unsigned long _ulData);
virtual BOOL fn_bOnInvalidateLink(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject, BOOL bDestroyed);
virtual void fn_vOnRestoreLink(CPA_BaseObject *pOwner, CPA_BaseObject *pReferencedObject);
};
extern tdstDLLIdentity g_stMaterialIdentity;
#define M_p_oGetEditManager() (((DEV_MultiDevice3D *) gs_p_oMaterialInterface->GetInterface()->GetMultiDevice())->GetEditManager())
void fn_vGiveProgressInfo(CString csMessage, long lPercentage, short _wHighLight = C_STATUS_NORMAL);
ACP_tdxIndex xGetPickInfoUnderPoint(HIE_aDEF_stTabOfPickInfo *_p_xRetrievedPickInfo, CPoint _oScreenCursor);
CPA_FileObject *p_oGetFileObjectForCompletePath(CString _csPath);
CPA_FileObject *p_oGetFileObjectForReferencedPath(CString _csPath, CString _csKey = C_szFileReferencedNameKey);
const char *fn_pszBaseName0(const char *_pszName);
//TODO: should be useless once textures have proper entries in the link tables
const char *fn_pszBaseName1(const char *_pszName);
#endif // ACTIVE_EDITOR
#endif // __MaterialINTERF_HPP__