reman3/Rayman_X/cpa/tempgrp/OAC/Src/EdActors/EDACDgMI.cpp

288 lines
7.7 KiB
C++

// CPACDgMI.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "ACP_Base.h"
#include "ITF.h"
/*
#include "TAc.h"
#include "TFa.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
*/
#include "EDACDgMi.hpp"
/*
#include "EDACDgIf.hpp"
#include "EDACDgMg.hpp"
#include "EDACModl.hpp"
#include "EDACStrg.hpp"
#include "EDACGlob.hpp"
*/
#include "_Ainterf.hpp"
#include "EdAcDoc.hpp"
//External Modules
#include "ErO.h"
#include "IncTUT.h"
//End of External Modules
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
/*
#define EdActors_C_COLOR_FOR_LOADED_FAMILIES (RGB(255,0,0))
#define EdActors_C_INVERSE_COLOR_FOR_LOADED_FAMILIES (RGB(255,150,150))
#define EdActors_C_COLOR_FOR_SELECTED_LOADED_FAMILIES (RGB(150,100,100))
#define EdActors_C_COLOR_FOR_UNLOADED_FAMILIES (RGB(96,96,96))
#define EdActors_C_INVERSE_COLOR_FOR_UNLOADED_FAMILIES (RGB(255,255,255))
#define EdActors_C_COLOR_FOR_SELECTED_UNLOADED_FAMILIES (RGB(96,96,255))
#define EdActors_C_szGenDoorsDescriptor "[GenDoor] "
#define EdActors_C_szNormalDescriptor "[Normal] "
*/
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// EdActors_ModelIconDialog dialog
BEGIN_MESSAGE_MAP(EdActors_ModelIconDialog, CDialog)
//{{AFX_MSG_MAP(EdActors_ModelIconDialog)
ON_LBN_SELCHANGE(IDC_BITMAP_LIST, OnSelchangeListBitmaps)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//**************************************************************************
EdActors_ModelIconDialog::EdActors_ModelIconDialog(CWnd* pParent, CPA_SuperObject *pModel)
: CDialog(EdActors_ModelIconDialog::IDD, &g_oBaseFrame)
{
hOldInstance = AfxGetResourceHandle();
AfxSetResourceHandle(g_stActorEditorIdentity.hModule);
//{{AFX_DATA_INIT(EdActors_ModelIconDialog)
//}}AFX_DATA_INIT
m_pModel = pModel;
m_csBitmapName = "";
}
//**************************************************************************
EdActors_ModelIconDialog::~EdActors_ModelIconDialog()
{
// deletes all bitmap descriptions
POSITION pos = m_clListOfBitmapsForActors.GetHeadPosition();
while ( pos != NULL )
delete (m_clListOfBitmapsForActors.GetNext(pos));
AfxSetResourceHandle(hOldInstance);
}
//**************************************************************************
void EdActors_ModelIconDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(EdActors_ModelIconDialog)
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// EdActors_ModelIconDialog message handlers
//**************************************************************************
BOOL EdActors_ModelIconDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// get the list of all bitmaps
struct m_stBitmapDescription *p_stBMDesc;
WIN32_FIND_DATA FindData;
CString csBitmapsNames;
CString csFileName;
HANDLE hFileHandle;
// get parameters
CPA_Actor *pclEdtModel = (CPA_Actor *)m_pModel->GetObject();
if (pclEdtModel->m_fn_bIsAGenDoor())
csBitmapsNames = g_pclInterface->m_clDocument.m_csModelsBitmapsCompletePathForGenDoors + "*.bmp";
else
csBitmapsNames = g_pclInterface->m_clDocument.m_csModelsBitmapsCompletePath + "*.bmp";
hFileHandle = FindFirstFile(LPCTSTR(csBitmapsNames), &FindData);
if (hFileHandle != INVALID_HANDLE_VALUE)
{
do
{
csFileName = FindData.cFileName;
//Adds to internal list
p_stBMDesc = new struct m_stBitmapDescription;
p_stBMDesc->csFileName = csFileName;
p_stBMDesc->hBitmap = NULL;
p_stBMDesc->bLoaded = FALSE;
m_clListOfBitmapsForActors.AddTail(p_stBMDesc);
}
while (FindNextFile(hFileHandle, &FindData));
}
FindClose(hFileHandle);
m_fn_vFillListBoxWithBitmapNames(&m_clListOfBitmapsForActors);
return TRUE;
}
//**************************************************************************
void EdActors_ModelIconDialog::OnDestroy()
{
CDialog::OnDestroy();
}
//**************************************************************************
void EdActors_ModelIconDialog::OnOK()
{
// get selection
CListBox *pclLB = (CListBox *)GetDlgItem(IDC_BITMAP_LIST);
if (pclLB->GetCurSel() != -1)
{
char szBitmap[256];
pclLB->GetText(pclLB->GetCurSel(), szBitmap);
m_csBitmapName = szBitmap;
}
CDialog::OnOK();
}
//**************************************************************************
CString EdActors_ModelIconDialog::m_fn_csGetBitmapName()
{
return m_csBitmapName;
}
//**************************************************************************
void EdActors_ModelIconDialog::m_fn_vFillListBoxWithBitmapNames(CPA_List<struct m_stBitmapDescription> *_pclListOfBitmaps)
{
struct m_stBitmapDescription *pstCurrentBDesc;
CListBox *pclLB;
POSITION pos;
short wIndex;
// reset list box
pclLB = (CListBox *)GetDlgItem(IDC_BITMAP_LIST);
pclLB->ResetContent();
// fill list with bitmaps
pos = _pclListOfBitmaps->GetHeadPosition();
while (pos)
{
pstCurrentBDesc = _pclListOfBitmaps->GetNext(pos);
wIndex = pclLB->AddString(pstCurrentBDesc->csFileName);
pclLB->SetItemDataPtr(wIndex, (void *)pstCurrentBDesc);
}
//Selects first bitmap
if (pclLB->GetCount() > 0)
{
pclLB->SetCurSel(0);
OnSelchangeListBitmaps();
}
}
//**************************************************************************
void EdActors_ModelIconDialog::OnSelchangeListBitmaps()
{
CListBox *pclLB = (CListBox *)GetDlgItem(IDC_BITMAP_LIST);
short wIndex = pclLB->GetCurSel();
if ( wIndex != LB_ERR )
{
pclLB->GetText(wIndex, m_csBitmapName);
CWnd *pclWnd = GetDlgItem(IDC_SHOW_BITMAP);
CRect crPictureRect;
pclWnd->GetWindowRect(crPictureRect);
struct m_stBitmapDescription *p_stBMDesc;
p_stBMDesc = (struct m_stBitmapDescription *)pclLB->GetItemDataPtr(wIndex);
if (!p_stBMDesc->bLoaded)
{
CString csBitmapNameAndPath;
CPA_Actor *pclEdtModel = (CPA_Actor *)m_pModel->GetObject();
if (pclEdtModel->m_fn_bIsAGenDoor())
csBitmapNameAndPath = g_pclInterface->m_clDocument.m_csModelsBitmapsCompletePathForGenDoors + m_csBitmapName;
else
csBitmapNameAndPath = g_pclInterface->m_clDocument.m_csModelsBitmapsCompletePath + m_csBitmapName;
//Gets size
m_fn_bGetBitmapSize(csBitmapNameAndPath, &p_stBMDesc->csSize);
int xSize, ySize;
double dfRatio;
if ( p_stBMDesc->csSize.cx > p_stBMDesc->csSize.cy )
{
xSize = crPictureRect.Width();
dfRatio = (double)crPictureRect.Width() / (double)p_stBMDesc->csSize.cx;
ySize = (int)(p_stBMDesc->csSize.cy * dfRatio);
}
else
{
ySize = crPictureRect.Height();
dfRatio = (double)crPictureRect.Height() / (double)p_stBMDesc->csSize.cy;
xSize = (int)(p_stBMDesc->csSize.cx * dfRatio);
}
//Loads Bitmap
p_stBMDesc->hBitmap = (HBITMAP)LoadImage(NULL, csBitmapNameAndPath, IMAGE_BITMAP, xSize, ySize, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
p_stBMDesc->bLoaded = TRUE;
}
// Displays bitmap
CStatic *pclStatic = (CStatic *)GetDlgItem(IDC_SHOW_BITMAP);
pclStatic->SetBitmap(p_stBMDesc->hBitmap);
}
}
//**************************************************************************
BOOL EdActors_ModelIconDialog::m_fn_bGetBitmapSize(CString csFileName, CSize *sz)
{
FILE *hFile;
BITMAPFILEHEADER bf;
BITMAPINFOHEADER bi;
if ( (hFile = fopen( csFileName, "rb")) == NULL)
return FALSE;
if (sizeof(bf) == fread( &bf, 1, sizeof(bf), hFile ))
{
if (bf.bfType == 0x4d42 /*BM*/)
{
if ( sizeof(bi) == fread( &bi, 1, sizeof(bi), hFile) )
{
sz->cx = bi.biWidth;
sz->cy = bi.biHeight;
fclose(hFile);
return TRUE;
}
}
}
fclose(hFile);
return FALSE;
}