reman3/Rayman_X/cpa/tempgrp/OCA/src/dialogba.cpp

541 lines
18 KiB
C++

#include <direct.h>
#include "stdafx.h"
#include "acp_base.h"
#include "ITF.h"
#include "caminter.hpp"
#include "camresrc.h"
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void Camera_Interface::SendDialogBarCommandToCamera(CPA_BaseObject *_p_oCamera,UINT nID)
{
Camera *p_oCamera;
ASSERT(_p_oCamera != NULL);
p_oCamera = (Camera*)_p_oCamera;
ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName));
p_oCamera->GetDialogBar()->OnCommand(nID);
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void Camera_Interface::ShowDialogBar(CPA_BaseObject *_p_oCamera)
{
Camera *p_oCamera;
ASSERT(_p_oCamera != NULL);
p_oCamera = (Camera*)_p_oCamera;
ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName));
p_oCamera->GetDialogBar()->Show();
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void Camera_Interface::HideDialogBar(CPA_BaseObject *_p_oCamera)
{
Camera *p_oCamera;
ASSERT(_p_oCamera != NULL);
p_oCamera = (Camera*)_p_oCamera;
ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName));
p_oCamera->GetDialogBar()->Hide();
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
BOOL Camera_Interface::OnToolTipNotify (CPA_BaseObject *_p_oCamera, TOOLTIPTEXT *p_TTT, UINT nID)
{
Camera *p_oCamera;
ASSERT(_p_oCamera != NULL);
p_oCamera = (Camera*)_p_oCamera;
ASSERT(p_oCamera->fn_bIsOfType(C_szCameraObjectTypeName));
return p_oCamera->GetDialogBar()->GetToolTipText(p_TTT,nID);
}
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//==================================================================================================
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
DialogBar::DialogBar()
{
m_p_oParentWnd = NULL;
m_p_oCamera = NULL;
m_p_oInterface = NULL;
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
DialogBar::DialogBar(DialogBar& r_src) : m_oToolBar(r_src.m_oToolBar)
{
m_p_oParentWnd = NULL;
m_p_oCamera = NULL;
m_p_oInterface = NULL;
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::SetCamera(Camera *p_oCamera)
{
m_p_oCamera = p_oCamera;
m_p_oInterface = (Camera_Interface*) p_oCamera->GetEditor();
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::InitInertCameraDialogBar(Camera *p_oCamera)
{
//ToolBar definition
tdstButtonDef a_stButtonDef[] =
{
{ID_FREEVIEW, TRUE, "Select Camera View"},
{ID_FRONTVIEW, FALSE, "Front View"},
{ID_RIGHTVIEW, FALSE, "Right View"},
{ID_LEFTVIEW, FALSE, "Left View"},
{ID_TOPVIEW, FALSE, "Top View"},
{ID_BOTTOMVIEW, FALSE, "Bottom View"},
{ID_BACKVIEW, FALSE, "Back View"},
{ID_ENDFAMILY, FALSE, ""},
{ID_NOTTARGETED,TRUE, "Target : None"},
{ID_POINTTARGETED,TRUE, "Target : Point"},
{ID_SOTARGETED,TRUE, "Target : Object"},
{ID_ENDFAMILY, FALSE, ""},
{ID_PREFERENCES,TRUE, "Settings"},
{ID_ENDFAMILY, FALSE, ""},
{ID_SELECTCAMERA,TRUE, "Select Camera Slot"},
{ID_ENDFAMILY, FALSE, ""},
{ID_SAVECAMERA,TRUE, "Get New Camera Slot"},
{ID_ENDFAMILY, FALSE, ""},
};
m_oToolBar.Define(a_stButtonDef,18,IDR_CAMERATB,ID_ENDFAMILY,18,18);
m_oToolBar.SetVisibility(ID_FREEVIEW,FALSE);
m_oToolBar.SetInitialPermission(ID_SOTARGETED,FALSE);
m_oToolBar.SetPermission(ID_SOTARGETED,FALSE);
//camera definition
m_p_oCamera = p_oCamera;
m_p_oInterface = (Camera_Interface*) p_oCamera->GetEditor();
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::Hide()
{
if (m_p_oParentWnd != NULL)
{
m_oToolBar.ShowWindow(SW_HIDE);
m_p_oParentWnd->m_p_oCamera = NULL;
}
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::Show()
{
if (!M_bEditorsActive())
return;
if (m_p_oParentWnd != NULL)
{
m_oToolBar.ShowWindow(SW_SHOW);
m_p_oParentWnd->m_p_oCamera = m_p_oCamera;
}
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
BOOL DialogBar::GetToolTipText(TOOLTIPTEXT *p_TTT, UINT nID)
{
return m_oToolBar.GetToolTipText(p_TTT,nID);
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::Create(CPA_DialogBar *p_oPopUpParent, CPoint oPos)
{
//if a window was given for ToolBar
if (p_oPopUpParent != NULL && p_oPopUpParent->m_hWnd != NULL)
{
if (m_p_oParentWnd == NULL)
{
// the dialog bar has not been created yet for this window...
// create toolbar
m_oToolBar.CreateToolBarCtrl(p_oPopUpParent,oPos);
m_p_oParentWnd = p_oPopUpParent;
}
else
{
// the dialog bar has already been created, check if it's the same window
ASSERT(m_p_oParentWnd == p_oPopUpParent);
}
}
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::Destroy()
{
// detach toolbar from its window
if (m_p_oParentWnd != NULL)
{
m_oToolBar.DestroyWindow();
m_p_oParentWnd->m_p_oCamera = NULL;
m_p_oParentWnd = NULL;
}
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void DialogBar::OnCommand(UINT nID)
{
CPA_CameraSlots *p_oCameraSlot;
DEV_ViewPort3D *p_oFocusViewport;
// get the focus viewport
p_oFocusViewport = m_p_oCamera->GetViewport();
// get the camera slots
p_oCameraSlot = p_oFocusViewport->GetParentMultiDevice3D()->GetWorld()->GetCameraSlots();
switch(nID)
{
case ID_FREEVIEW:
break;
case ID_FRONTVIEW:
m_p_oCamera->FrontView();
break;
case ID_RIGHTVIEW:
m_p_oCamera->RightView();
break;
case ID_LEFTVIEW:
m_p_oCamera->LeftView();
break;
case ID_TOPVIEW:
m_p_oCamera->TopView();
break;
case ID_BOTTOMVIEW:
m_p_oCamera->BottomView();
break;
case ID_BACKVIEW:
m_p_oCamera->BackView();
break;
case ID_NOTTARGETED:
m_p_oCamera->SetTargetType(tNone);
break;
case ID_POINTTARGETED:
m_p_oCamera->SetTargetType(tPoint);
m_p_oCamera->Update();
m_p_oInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
break;
case ID_SOTARGETED:
m_p_oCamera->SetTargetType(tSuperObject);
m_p_oCamera->Update();
m_p_oInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
break;
case ID_PREFERENCES:
m_p_oCamera->Preferences();
break;
case ID_SELECTCAMERA:
{
Camera *p_oCamera;
Camera_Interface *p_oInterface;
//Stefan Dumitrean 22-06-98 ( slots )
long lSlotNum;
// let the user choose a slot camera from a popup menu
p_oCamera = (Camera*)p_oCameraSlot->GetCameraFromPopUpMenu(lSlotNum,m_p_oParentWnd,MakeACopy);
//End Stefan Dumitrean 22-06-98 ( slots )
//and set this new camera in the focus viewport
// the old camera (if any) is totally destroyed
if (p_oCamera != NULL)
{
CPA_SuperObject *p_oCameraSO,*p_oOldCameraSO;
//Stefan Dumitrean 29-06-98 ( slots )
// get or build a superobject for this camera
if( p_oCameraSlot->IsSpecialSlot(lSlotNum))
p_oOldCameraSO = p_oFocusViewport->GetCameraSO( );
else
{
p_oCameraSO = m_p_oInterface->AssociateSuperObject(p_oCamera);
// put this camera in the viewport
p_oOldCameraSO = p_oFocusViewport->ChangeCamera(p_oCameraSO);
}
//End Stefan Dumitrean 29-06-98 ( slots )
//Stefan Dumitrean 22-06-98 ( slots )
// if normal slot, save the camera position in the current slot
if (!p_oCameraSlot->IsSpecialSlot( p_oCameraSlot->GetCurrentSlot()))
p_oCameraSlot->SaveCameraInSlot(p_oCameraSlot->GetCurrentSlot(),"",p_oOldCameraSO->GetObject(),MakeACopy);
// special slot : ask for save in a new slot
else
{
if (AfxMessageBox("The current slot is the default one. \n Do you want to save it in a new slot ?",
MB_ICONWARNING|MB_OKCANCEL) == IDOK)
{
Camera_NewSlot oDialog;
CString csName;
long lSlotNumber = p_oCameraSlot->FindFirstEmptySlot();
csName.Format("Default Slot %i", lSlotNumber);
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oInterface->GetDLLIdentity()->hModule );
// call dialog to find new name
if (oDialog.fn_iDoDialog(csName, TRUE) == IDOK)
{
if( lSlotNumber >= 0 )
p_oCameraSlot->SaveCameraInSlot(lSlotNumber,oDialog.GetName(),p_oOldCameraSO->GetObject(),MakeACopy);
else
p_oCameraSlot->SaveCameraInSlot(-1,oDialog.GetName(),p_oOldCameraSO->GetObject(),MakeACopy);
}
AfxSetResourceHandle( hOldInst );
}
}
m_p_oInterface->SaveSlotsPositions();
if (p_oCameraSlot->IsSpecialSlot(lSlotNum) || !p_oCameraSlot->IsSlotReserved(lSlotNum))
p_oCameraSlot->SetCurrentSlot(lSlotNum);
//End Stefan Dumitrean 22-06-98 ( slots )
//Stefan Dumitrean 26-06-98 ( slots )
if (!p_oCameraSlot->IsSpecialSlot(lSlotNum))
{
// keep in memory the interface, because if I destroy the old camera,I destroy "THIS"
p_oInterface = m_p_oInterface;
// remove the old camera from the hierarchy, and destroy it
m_p_oInterface->DestroyCamera(p_oOldCameraSO);
// and put the new camera in the hierarchy
p_oInterface->InsertCameraInHierarchy(p_oCameraSO);
//restore the editor and selection saved with the slot 2-07-98
if (!p_oCameraSlot->IsSlotReserved(lSlotNum))
{
p_oCameraSlot->SetCurrentEditorForSlotNr(lSlotNum);
p_oCameraSlot->SetCurrentSelectionForSlotNr(lSlotNum);
}
p_oCamera->GetMainWorld()->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
}
//End Stefan Dumitrean 26-06-98 ( slots )
}
}
break;
case ID_SAVECAMERA:
{
HINSTANCE hOldInst = AfxGetResourceHandle();
AfxSetResourceHandle( m_p_oInterface->GetDLLIdentity()->hModule );
Camera_NewSlot oDialog;
CString csName;
long lNewSlot;
//Stefan Dumitrean 22-06-98 ( slots )
// special slot
if (p_oCameraSlot->IsSpecialSlot(p_oCameraSlot->GetCurrentSlot()))
{
if (AfxMessageBox("The current slot is the default one. \n Do you want to save it in a new slot ?",
MB_ICONWARNING|MB_OKCANCEL) == IDOK)
{
long lNewSlot = p_oCameraSlot->FindFirstEmptySlot();
csName.Format("Default Slot %i", lNewSlot);
// call dialog to find new name
if (oDialog.fn_iDoDialog(csName, TRUE) == IDOK)
{
if( lNewSlot >= 0 )
p_oCameraSlot->SaveCameraInSlot(lNewSlot,oDialog.GetName(),m_p_oCamera,MakeACopy);
else
p_oCameraSlot->SaveCameraInSlot(-1,oDialog.GetName(),m_p_oCamera,MakeACopy);
// set new current slot
p_oCameraSlot->SetCurrentSlot(lNewSlot);
}
}
}
// get an empty slot
lNewSlot = p_oCameraSlot->FindFirstEmptySlot();
csName.Format("Slot %i", lNewSlot);
// call dialog to find new name
if (oDialog.fn_iDoDialog(csName) == IDOK)
{
long lSlotNum = p_oCameraSlot->SaveCameraInSlot(lNewSlot,oDialog.GetName(),m_p_oCamera,MakeACopy);
// save the camera position in the current slot
if( !p_oCameraSlot->IsSpecialSlot(p_oCameraSlot->GetCurrentSlot()))
p_oCameraSlot->SaveCameraInSlot(p_oCameraSlot->GetCurrentSlot(),"",m_p_oCamera,MakeACopy);
// update current slot
if (!p_oCameraSlot->IsSlotReserved(lSlotNum))
p_oCameraSlot->SetCurrentSlot(lSlotNum);
}
//BEGIN CPA2 Laurentiu Barza 24-03-98
m_p_oInterface->SaveSlotsPositions();
//END CPA2 Laurentiu Barza 24-03-98
AfxSetResourceHandle( hOldInst );
}
break;
default:
break;
}
p_oFocusViewport->SetFocus();
}
//#################################################################################
// Camera_NewSlot dialog
//#################################################################################
/*----------------------------------------
----------------------------------------*/
Camera_NewSlot::Camera_NewSlot (CWnd* pParent)
: CDialog (Camera_NewSlot::IDD, &g_oBaseFrame)
{
//{{AFX_DATA_INIT(Camera_NewSlot)
//}}AFX_DATA_INIT
}
/*----------------------------------------
----------------------------------------*/
void Camera_NewSlot::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Camera_NewSlot)
DDX_Control(pDX, IDC_SLOT_NAME, m_cNewName);
//}}AFX_DATA_MAP
}
/*----------------------------------------
----------------------------------------*/
BEGIN_MESSAGE_MAP(Camera_NewSlot, CDialog)
//{{AFX_MSG_MAP(Camera_NewSlot)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/*----------------------------------------
----------------------------------------*/
int Camera_NewSlot::fn_iDoDialog (CString _csName, BOOL bDefault)
{
// create the dialog
m_csName = _csName;
m_bDefault = bDefault;
return DoModal();
}
/*----------------------------------------
----------------------------------------*/
BOOL Camera_NewSlot::OnInitDialog (void)
{
// Create the dialog
CDialog::OnInitDialog();
// init window text
if (!m_bDefault)
SetWindowText("CREATE NEW SLOT");
else
SetWindowText("REGISTER DEFAULT SLOT");
// init name
m_cNewName.SetWindowText(m_csName);
return TRUE;
}
/*----------------------------------------
----------------------------------------*/
void Camera_NewSlot::OnOK (void)
{
// get new name
m_cNewName.GetWindowText(m_csName);
// close dialog
CDialog::OnOK();
}
/*----------------------------------------
----------------------------------------*/
void Camera_NewSlot::OnCancel (void)
{
// get new name
m_cNewName.GetWindowText(m_csName);
// close dialog
CDialog::OnCancel();
}