2589 lines
89 KiB
C++
2589 lines
89 KiB
C++
/*=========================================================================
|
|
*
|
|
* DlgMain3.cpp - implementation file for main window class
|
|
* Other functions
|
|
*
|
|
* Version 1.0
|
|
* Revision date
|
|
*
|
|
*=======================================================================*/
|
|
#include <io.h>
|
|
#include <fcntl.h>
|
|
#include "stdafx.h"
|
|
|
|
#include "DlgMain.h"
|
|
|
|
#include "system.h"
|
|
#include "print.h"
|
|
|
|
#include "IniData.h"
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
//==================================================//
|
|
// WARNINGS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: all the function m_fn_bWarningUser
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_vTestIniDatas()
|
|
{
|
|
return m_fn_bWarningUser();
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Inform the user, if the exe file and the directories does not exist or are not set
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_bWarningUser()
|
|
{
|
|
//init the strings for the edit box controls
|
|
BOOL bDisplay = FALSE;
|
|
char _szMessage[500];
|
|
char szPath[MAX_PATH];
|
|
|
|
xString sDir;
|
|
|
|
if(!m_bConversion)
|
|
{
|
|
sprintf( _szMessage,"Warning(s) : \n\n");
|
|
int iSize= strlen(_szMessage);
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
|
|
//tests all the directories if they exist
|
|
if (SetCurrentDirectory( g_stInitialData.szGameSpecific1 ))
|
|
GetDlgItem(IDC_EDIT_GAMESPECIFIC1)->SetWindowText( g_stInitialData.szGameSpecific1 );
|
|
if (SetCurrentDirectory( g_stInitialData.szGameSpecific2 ))
|
|
GetDlgItem(IDC_EDIT_GAMESPECIFIC2)->SetWindowText( g_stInitialData.szGameSpecific2 );
|
|
|
|
if (SetCurrentDirectory( g_stInitialData.szRawSpecific1 ))
|
|
GetDlgItem(IDC_EDIT_RAWSPECIFIC1)->SetWindowText( g_stInitialData.szRawSpecific1 );
|
|
if (SetCurrentDirectory( g_stInitialData.szRawSpecific2 ))
|
|
GetDlgItem(IDC_EDIT_RAWSPECIFIC2)->SetWindowText( g_stInitialData.szRawSpecific2 );
|
|
|
|
m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szGameData ),"GameData", _szMessage, &bDisplay, IDC_EDIT_GAMEDATA, g_stInitialData.szGameData);
|
|
m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szRawData ),"RawData", _szMessage, &bDisplay, IDC_EDIT_RAWDATA, g_stInitialData.szRawData);
|
|
strcpy(szPath, g_stInitialData.szGameData );
|
|
strcat(szPath, "\\");
|
|
|
|
if (!m_fn_bExistDirectories(g_stInitialData.szGameData))
|
|
sprintf( _szMessage,"\tYou have to select another GameData directory, because it does not contain any directories !\n\n");
|
|
|
|
if (bDisplay) AfxMessageBox( _szMessage, MB_OK | MB_ICONSTOP );
|
|
SetCurrentDirectory( sDir);
|
|
}
|
|
return bDisplay;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show a message for the directories (if they don't exist or are not set)
|
|
*
|
|
* Parameters: bSet : flag to set the path
|
|
* szPath : path for the directory
|
|
* _szMessage : warning message
|
|
* bDisplay : returns the state
|
|
* iID : ID of the control to update
|
|
* szDir : path for the directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vShowPartialWarning (BOOL bSet, char *szPath, char *_szMessage, BOOL * bDisplay, int iID, char *szDir)
|
|
{
|
|
if (bSet)
|
|
GetDlgItem(iID)->SetWindowText( szDir );
|
|
else
|
|
{
|
|
int iSize= strlen(_szMessage);
|
|
if ((!strcmp(szPath, "Textures"))||(!strcmp(szPath, "Default")))
|
|
sprintf( _szMessage+iSize, "\tThe sub-directory %s of GameData directory, does not exist (or is not set). Please, choose another %s sub-directory!\n\n", szPath, szPath );
|
|
else
|
|
sprintf( _szMessage+iSize, "\tThe directory %s does not exist (or is not set). Please, choose another %s directory!\n\n", szPath, szPath );
|
|
GetDlgItem( iID ) ->SetWindowText( "");
|
|
strcpy(szDir, "");
|
|
*bDisplay = TRUE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//==================================================//
|
|
// MAIN PANEL : SHOW CONTROLS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Show only the buttons for the "Options" panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vShowControlsPanelDir()
|
|
{
|
|
m_fn_TabC_vChangeShowControlsPanelDir(TRUE);
|
|
m_fn_TabC_vChangeShowControlsPanelSel(FALSE);
|
|
m_fn_TabC_vChangeShowControlsPanelRes(FALSE);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show only the buttons for the "Selection" panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vShowControlsPanelSel()
|
|
{
|
|
m_fn_TabC_vChangeShowControlsPanelDir(FALSE);
|
|
m_fn_TabC_vChangeShowControlsPanelSel(TRUE);
|
|
m_fn_TabC_vChangeShowControlsPanelRes(FALSE);
|
|
|
|
m_fn_vUpdateForSelectConfig();
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show only the buttons for the "Result" panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vShowControlsPanelRes()
|
|
{
|
|
m_fn_TabC_vChangeShowControlsPanelDir(FALSE);
|
|
m_fn_TabC_vChangeShowControlsPanelSel(FALSE);
|
|
m_fn_TabC_vChangeShowControlsPanelRes(TRUE);
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// MAIN PANEL : CHANGE CONTROLS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Show or hide the buttons for the "Options" panel
|
|
*
|
|
* Parameters: bChange : show or hide
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelDir(BOOL bChange)
|
|
{
|
|
GetDlgItem(IDC_GROUP_SOURCEDIRECTORIES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_GROUP_DESTDIRECTORIES)->ShowWindow(bChange);
|
|
|
|
m_oConfigPanel.BringWindowToTop();
|
|
m_oConfigPanel.ShowWindow(bChange);
|
|
|
|
if (bChange)
|
|
{
|
|
switch(m_oConfigPanel.GetCurSel())
|
|
{
|
|
case 0:
|
|
m_fn_vShowControlsPanelCurrent();
|
|
m_oButtonRegisterOption.ShowWindow(FALSE);
|
|
m_oButtonCreateOption.ShowWindow(FALSE);
|
|
break;
|
|
case 1:
|
|
m_fn_vShowControlsPanelCustom();
|
|
m_oButtonRegisterOption.ShowWindow(TRUE);
|
|
m_oButtonCreateOption.ShowWindow(TRUE);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_fn_vChangeShowControlsPanelCurrent(FALSE);
|
|
m_fn_vChangeShowControlsPanelCustom(FALSE);
|
|
}
|
|
|
|
m_oEditRegisterOption.ShowWindow(FALSE);
|
|
m_oEditCreateOption.ShowWindow(FALSE);
|
|
|
|
m_oEditRegisterSelect.ShowWindow(FALSE);
|
|
m_oEditCreateSelect.ShowWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_STATIC_GAMEDATA)->ShowWindow(bChange);
|
|
m_oCheckGameData.ShowWindow(bChange);
|
|
m_oCheckGameSP1.ShowWindow(bChange);
|
|
m_oCheckGameSP2.ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_GAMEDATA)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_GAMESPECIFIC1)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_GAMESPECIFIC2)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_GAMEDATA)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC1)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC2)->ShowWindow(bChange);
|
|
|
|
m_oEditGameSp1.ShowWindow(bChange);
|
|
m_oEditGameSp2.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_MAINOPTIONS)->ShowWindow(bChange);
|
|
m_oCheckRayman2.ShowWindow(bChange);
|
|
m_oCheckModifLst.ShowWindow(bChange);
|
|
m_oCheckEraseMdf.ShowWindow(bChange);
|
|
|
|
if (m_bConversion && bChange)
|
|
GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
|
|
|
|
if (m_bConversion) //the conversion is on
|
|
{ m_oCheckRayman2.EnableWindow(FALSE);
|
|
m_oCheckModifLst.EnableWindow(FALSE);
|
|
m_oCheckEraseMdf.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{ m_oCheckRayman2.EnableWindow(TRUE);
|
|
m_oCheckModifLst.EnableWindow(TRUE);
|
|
m_oCheckEraseMdf.EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Show or hide the buttons for the "Selection" panel
|
|
*
|
|
* Parameters: bChange : show or hide
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelSel(BOOL bChange)
|
|
{
|
|
GetDlgItem(IDC_STATIC_LISTMESSAGE)->ShowWindow(bChange && !m_oListType->GetCount());
|
|
m_oListType->ShowWindow(bChange && m_oListType->GetCount());
|
|
m_oListObject->ShowWindow(bChange && m_oListType->GetCount());
|
|
|
|
GetDlgItem(IDC_GROUP_SELECTIONCONFIG)->ShowWindow(bChange);
|
|
m_oEditRegisterSelect.ShowWindow(FALSE);
|
|
m_oEditCreateSelect.ShowWindow(FALSE);
|
|
m_oButtonRegisterSelect.ShowWindow(bChange);
|
|
m_oButtonCreateSelect.ShowWindow(bChange);
|
|
m_oButtonDeleteSelect.ShowWindow(bChange);
|
|
m_oButtonSaveSelect.ShowWindow(bChange);
|
|
m_oComboChooseSelect.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_SELECTION)->ShowWindow(bChange);
|
|
m_oSelectAll.ShowWindow(bChange);
|
|
m_oSelectList.ShowWindow(bChange);
|
|
m_oClearList.ShowWindow(bChange);
|
|
m_oClearAll.ShowWindow(bChange);
|
|
|
|
m_oConvert.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_CONFLICT)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_ZOO)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_SCT)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_SPO)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_GMT)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_VMT)->ShowWindow(bChange);
|
|
m_oCheckZooMax.ShowWindow(bChange);
|
|
m_oCheckZooEds.ShowWindow(bChange);
|
|
m_oCheckSctMax.ShowWindow(bChange);
|
|
m_oCheckSctEds.ShowWindow(bChange);
|
|
m_oCheckSpoMax.ShowWindow(bChange);
|
|
m_oCheckSpoEds.ShowWindow(bChange);
|
|
m_oCheckGmtMax.ShowWindow(bChange);
|
|
m_oCheckGmtEds.ShowWindow(bChange);
|
|
m_oCheckVmtMax.ShowWindow(bChange);
|
|
m_oCheckVmtEds.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_OPTIONS)->ShowWindow(bChange);
|
|
m_oCheckCopyAnims.ShowWindow(bChange);
|
|
m_oCheckCopyTextures.ShowWindow(bChange);
|
|
m_oCheckGenerateRLI.ShowWindow(bChange);
|
|
m_oCheckUpdateGameDsc.ShowWindow(bChange);
|
|
m_oCheckCreateFamily.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_ERASE)->ShowWindow(bChange);
|
|
m_oCheckEraseDup.ShowWindow(bChange);
|
|
m_oCheckEraseUnused.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_FAMILIES)->ShowWindow(bChange);
|
|
m_oCheckAskFamily.ShowWindow(bChange);
|
|
m_oCheckCommon.ShowWindow(bChange);
|
|
m_oCheckSpecific.ShowWindow(bChange);
|
|
|
|
GetDlgItem(IDC_GROUP_CONFIG)->ShowWindow(bChange);
|
|
m_oEditRegisterOption.ShowWindow(FALSE);
|
|
m_oEditCreateOption.ShowWindow(FALSE);
|
|
m_oButtonRegisterOption.ShowWindow(bChange);
|
|
m_oButtonCreateOption.ShowWindow(bChange);
|
|
m_oButtonDeleteOption.ShowWindow(bChange);
|
|
m_oButtonSaveOption.ShowWindow(bChange);
|
|
m_oComboChooseOption.ShowWindow(bChange);
|
|
|
|
if (m_bConversion && bChange)
|
|
{
|
|
m_fn_TabC_vDisableSelButtons() ;
|
|
GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_oButtonRegisterSelect.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
m_oButtonCreateSelect.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
m_oButtonDeleteSelect.EnableWindow(m_oListType->GetCount() && !m_bConversion && g_iCurrentIndexSelect);
|
|
m_oButtonSaveSelect.EnableWindow(m_oListType->GetCount() && !m_bConversion && g_iCurrentIndexSelect);
|
|
m_oComboChooseSelect.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
|
|
m_oClearList.EnableWindow(m_oListType->GetCount()&& m_iCountOfSelections);
|
|
m_oClearAll.EnableWindow(m_oListType->GetCount()&& m_iCountOfSelections);
|
|
if (bChange)
|
|
{
|
|
m_oSelectAll.EnableWindow(m_oListType->GetCount());
|
|
m_oSelectList.EnableWindow(m_oListType->GetCount());
|
|
}
|
|
|
|
m_oConvert.EnableWindow(m_oListType->GetCount()&& m_iCountOfSelections);
|
|
|
|
m_oCheckZooMax.EnableWindow(m_oListType->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected));
|
|
m_oCheckZooEds.EnableWindow(m_oListType->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected));
|
|
m_oCheckSctMax.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && g_bRaymanII)) ;
|
|
m_oCheckSctEds.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && g_bRaymanII)) ;
|
|
m_oCheckSpoMax.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)) ;
|
|
m_oCheckSpoEds.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)) ;
|
|
m_oCheckGmtMax.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)) ;
|
|
m_oCheckGmtEds.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)) ;
|
|
m_oCheckVmtMax.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)) ;
|
|
m_oCheckVmtEds.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)||(m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected)||(m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)) ;
|
|
|
|
m_oCheckCopyAnims.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected)) ;
|
|
m_oCheckCopyTextures.EnableWindow(m_oListType->GetCount()&&((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected) || (m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected))) ;
|
|
m_oCheckGenerateRLI.EnableWindow(m_oListType->GetCount() && (!m_bConversion && m_iCountOfSelections && (((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected) && g_bGenerateRLI) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)))) ;
|
|
m_oCheckUpdateGameDsc.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));
|
|
m_oCheckCreateFamily.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)) ;
|
|
|
|
m_oCheckEraseDup.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)) ;
|
|
m_oCheckEraseUnused.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)) ;
|
|
|
|
m_oCheckAskFamily.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected));
|
|
m_oCheckCommon.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected));
|
|
m_oCheckSpecific.EnableWindow(m_oListType->GetCount()&&(m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected));
|
|
|
|
m_oButtonRegisterOption.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
m_oButtonCreateOption.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
m_oButtonDeleteOption.EnableWindow(m_oListType->GetCount() && !m_bConversion && g_iCurrentIndexOption);
|
|
m_oButtonSaveOption.EnableWindow(m_oListType->GetCount() && !m_bConversion && g_iCurrentIndexOption);
|
|
m_oComboChooseOption.EnableWindow(m_oListType->GetCount() && !m_bConversion);
|
|
|
|
|
|
GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show or hide the buttons for the "Result" panel
|
|
*
|
|
* Parameters: bChange : show or hide
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelRes(BOOL bChange)
|
|
{
|
|
if (bChange)
|
|
{
|
|
GetDlgItem(IDC_STATIC_COMMAND)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_RICHEDIT_COMMAND)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_STATIC_RESULT)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_RICHEDIT_RESULT)->ShowWindow(SW_SHOW);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_STATIC_COMMAND)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_RICHEDIT_COMMAND)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_STATIC_RESULT)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_RICHEDIT_RESULT)->ShowWindow(SW_HIDE);
|
|
}
|
|
if (m_bConversion && bChange)
|
|
GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(TRUE);
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// MAIN PANEL : ENABLE BUTTONS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Enable the buttons for all the tabs
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vEnableButtons()
|
|
{
|
|
GetDlgItem(IDC_BROWSE_RAWDATA)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC1)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC2)->EnableWindow(TRUE);
|
|
|
|
GetDlgItem(IDC_BROWSE_GAMEDATA)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC1)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC2)->EnableWindow(TRUE);
|
|
|
|
GetDlgItem(IDC_BROWSE_ANIMS)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_BANKS)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_CLASSES)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_FAMILIES)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_LEVELS)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BROWSE_TEXTURES)->EnableWindow(TRUE);
|
|
|
|
GetDlgItem(IDC_BUTTON_HELP)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_BUTTON_QUIT)->EnableWindow(TRUE);
|
|
|
|
m_oCheckRayman2.EnableWindow(TRUE);
|
|
m_oCheckModifLst.EnableWindow(TRUE);
|
|
m_oCheckEraseMdf.EnableWindow(TRUE);
|
|
|
|
m_oButtonRegisterDir.EnableWindow(TRUE);
|
|
m_oButtonCreateDir.EnableWindow(TRUE);
|
|
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
|
|
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
|
|
m_oComboChooseDir.EnableWindow(TRUE);
|
|
|
|
m_oButtonRegisterSelect.EnableWindow(TRUE);
|
|
m_oButtonCreateSelect.EnableWindow(TRUE);
|
|
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
|
|
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
|
|
m_oComboChooseSelect.EnableWindow(TRUE);
|
|
|
|
m_oButtonRegisterOption.EnableWindow(TRUE);
|
|
m_oButtonCreateOption.EnableWindow(TRUE);
|
|
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
|
|
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
|
|
m_oComboChooseOption.EnableWindow(TRUE);
|
|
|
|
m_oCheckRawSP1.EnableWindow(TRUE);
|
|
m_oCheckRawSP2.EnableWindow(TRUE);
|
|
m_oCheckGameSP1.EnableWindow(TRUE);
|
|
m_oCheckGameSP2.EnableWindow(TRUE);
|
|
m_oEditRawSp1.EnableWindow(TRUE);
|
|
m_oEditRawSp2.EnableWindow(TRUE);
|
|
m_oEditGameSp1.EnableWindow(TRUE);
|
|
m_oEditGameSp2.EnableWindow(TRUE);
|
|
m_oCheckRawData.EnableWindow(TRUE);
|
|
m_oCheckGameData.EnableWindow(TRUE);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Disable the buttons for all the tabs
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vDisableAllButtons()
|
|
{
|
|
m_oEditRawSp1.EnableWindow(FALSE);
|
|
m_oEditRawSp2.EnableWindow(FALSE);
|
|
|
|
m_oCheckRawData.EnableWindow(FALSE);
|
|
m_oCheckRawSP1.EnableWindow(FALSE);
|
|
m_oCheckRawSP2.EnableWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_BROWSE_RAWDATA)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC1)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC2)->EnableWindow(FALSE);
|
|
|
|
m_oButtonRegisterDir.EnableWindow(FALSE);
|
|
m_oButtonCreateDir.EnableWindow(FALSE);
|
|
m_oButtonDeleteDir.EnableWindow(FALSE);
|
|
m_oButtonSaveDir.EnableWindow(FALSE);
|
|
m_oComboChooseDir.EnableWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_BROWSE_ANIMS)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_BANKS)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_CLASSES)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_FAMILIES)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_LEVELS)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_TEXTURES)->EnableWindow(FALSE);
|
|
|
|
m_oEditGameSp1.EnableWindow(FALSE);
|
|
m_oEditGameSp2.EnableWindow(FALSE);
|
|
|
|
m_oCheckGameData.EnableWindow(FALSE);
|
|
m_oCheckGameSP1.EnableWindow(FALSE);
|
|
m_oCheckGameSP2.EnableWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_BROWSE_GAMEDATA)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC1)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BROWSE_GAMESPECIFIC2)->EnableWindow(FALSE);
|
|
|
|
m_oCheckRayman2.EnableWindow(FALSE);
|
|
m_oCheckModifLst.EnableWindow(FALSE);
|
|
m_oCheckEraseMdf.EnableWindow(FALSE);
|
|
|
|
m_fn_TabC_vDisableSelButtons();
|
|
|
|
GetDlgItem(IDC_BUTTON_HELP)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_BUTTON_QUIT)->EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Disable the buttons for the second panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_TabC_vDisableSelButtons()
|
|
{
|
|
m_oButtonRegisterSelect.EnableWindow(FALSE);
|
|
m_oButtonCreateSelect.EnableWindow(FALSE);
|
|
m_oButtonDeleteSelect.EnableWindow(FALSE);
|
|
m_oButtonSaveSelect.EnableWindow(FALSE);
|
|
m_oComboChooseSelect.EnableWindow(FALSE);
|
|
|
|
m_oSelectAll.EnableWindow(FALSE);
|
|
m_oSelectList.EnableWindow(FALSE);
|
|
m_oClearList.EnableWindow(FALSE);
|
|
m_oClearAll.EnableWindow(FALSE);
|
|
|
|
m_oConvert.EnableWindow(FALSE);
|
|
|
|
m_oCheckZooMax.EnableWindow(FALSE);
|
|
m_oCheckZooEds.EnableWindow(FALSE);
|
|
m_oCheckSctMax.EnableWindow(FALSE);
|
|
m_oCheckSctEds.EnableWindow(FALSE);
|
|
m_oCheckSpoMax.EnableWindow(FALSE);
|
|
m_oCheckSpoEds.EnableWindow(FALSE);
|
|
m_oCheckGmtMax.EnableWindow(FALSE);
|
|
m_oCheckGmtEds.EnableWindow(FALSE);
|
|
m_oCheckVmtMax.EnableWindow(FALSE);
|
|
m_oCheckVmtEds.EnableWindow(FALSE);
|
|
|
|
m_oCheckCopyAnims.EnableWindow(FALSE);
|
|
m_oCheckCopyTextures.EnableWindow(FALSE);
|
|
m_oCheckGenerateRLI.EnableWindow(FALSE);
|
|
m_oCheckUpdateGameDsc.EnableWindow(FALSE);
|
|
m_oCheckCreateFamily.EnableWindow(FALSE);
|
|
|
|
m_oCheckEraseDup.EnableWindow(FALSE);
|
|
m_oCheckEraseUnused.EnableWindow(FALSE);
|
|
|
|
m_oCheckAskFamily.EnableWindow(FALSE);
|
|
m_oCheckCommon.EnableWindow(FALSE);
|
|
m_oCheckSpecific.EnableWindow(FALSE);
|
|
|
|
m_oButtonRegisterOption.EnableWindow(FALSE);
|
|
m_oButtonCreateOption.EnableWindow(FALSE);
|
|
m_oButtonDeleteOption.EnableWindow(FALSE);
|
|
m_oButtonSaveOption.EnableWindow(FALSE);
|
|
m_oComboChooseOption.EnableWindow(FALSE);
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// CONFIG PANEL : SHOW CONTROLS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Show only the buttons for the "Current" panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vShowControlsPanelCurrent()
|
|
{
|
|
m_fn_vChangeShowControlsPanelCurrent(TRUE);
|
|
m_fn_vChangeShowControlsPanelCustom(FALSE);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show only the buttons for the "Custom" panel
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vShowControlsPanelCustom()
|
|
{
|
|
m_fn_vChangeShowControlsPanelCurrent(FALSE);
|
|
m_fn_vChangeShowControlsPanelCustom(TRUE);
|
|
|
|
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
|
|
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
|
|
|
|
// update directory pahs for Default config
|
|
if (!g_iCurrentIndexDir)
|
|
m_fn_vSetDefaultDirConfig();
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// CONFIG PANEL : CHANGE CONTROLS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Show or hide the buttons for the "Current" panel
|
|
*
|
|
* Parameters: bChange : show or hide
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vChangeShowControlsPanelCurrent(BOOL bChange)
|
|
{
|
|
GetDlgItem(IDC_STATIC_RAWDATA)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_RAWDATA)->BringWindowToTop();
|
|
m_oCheckRawData.ShowWindow(bChange);
|
|
m_oCheckRawSP1.ShowWindow(bChange);
|
|
m_oCheckRawSP2.ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_RAWDATA)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_RAWSPECIFIC1)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_RAWSPECIFIC2)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_RAWDATA)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC1)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_BROWSE_RAWSPECIFIC2)->ShowWindow(bChange);
|
|
m_oEditRawSp1.ShowWindow(bChange);
|
|
m_oEditRawSp2.ShowWindow(bChange);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Show or hide the buttons for the "Custom" panel
|
|
*
|
|
* Parameters: bChange : show or hide
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vChangeShowControlsPanelCustom(BOOL bChange)
|
|
{
|
|
//buttons from the panel Custom
|
|
m_oEditRegisterDir.ShowWindow(FALSE);
|
|
m_oEditCreateDir.ShowWindow(FALSE);
|
|
m_oButtonRegisterDir.ShowWindow(bChange);
|
|
m_oButtonCreateDir.ShowWindow(bChange);
|
|
m_oButtonDeleteDir.ShowWindow(bChange);
|
|
m_oButtonSaveDir.ShowWindow(bChange);
|
|
m_oComboChooseDir.ShowWindow(bChange);
|
|
|
|
|
|
GetDlgItem(IDC_BROWSE_ANIMS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_ANIMS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_ANIMS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_ANIMS)->BringWindowToTop();
|
|
|
|
GetDlgItem(IDC_BROWSE_BANKS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_BANKS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_BANKS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_BANKS)->BringWindowToTop();
|
|
|
|
GetDlgItem(IDC_BROWSE_CLASSES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_CLASSES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_CLASSES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_CLASSES)->BringWindowToTop();
|
|
|
|
GetDlgItem(IDC_BROWSE_FAMILIES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_FAMILIES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_FAMILIES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_FAMILIES)->BringWindowToTop();
|
|
|
|
GetDlgItem(IDC_BROWSE_LEVELS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_LEVELS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_LEVELS)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_LEVELS)->BringWindowToTop();
|
|
|
|
GetDlgItem(IDC_BROWSE_TEXTURES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_EDIT_TEXTURES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_TEXTURES)->ShowWindow(bChange);
|
|
GetDlgItem(IDC_STATIC_TEXTURES)->BringWindowToTop();
|
|
}
|
|
|
|
|
|
|
|
|
|
//==================================================//
|
|
// BROWSE FUNCTIONS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: browse starting with the specified directory .
|
|
*
|
|
* Parameters: szPath : directory to start from
|
|
* p_iResult : result of the search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vBrowseStartingFromDirectory(char* szPath, int *p_iResult)
|
|
{
|
|
ITEMIDLIST *p_stItemRoot;
|
|
unsigned long p_sNumber;
|
|
IShellFolder* p_ShellFolder;
|
|
|
|
SHGetDesktopFolder( &p_ShellFolder );
|
|
// transform a usual string to an unicode string
|
|
int nLen = MultiByteToWideChar(CP_ACP, 0,g_stInitialData.szGameData, -1, NULL, NULL);
|
|
LPWSTR lpszW = new WCHAR[nLen];
|
|
MultiByteToWideChar(CP_ACP, 0, g_stInitialData.szGameData, -1, lpszW, nLen);
|
|
// prepare the structure for browsing starting from one specific directory
|
|
p_ShellFolder->ParseDisplayName( m_hWnd, NULL, lpszW , &p_sNumber, &p_stItemRoot, NULL);
|
|
delete[] lpszW;
|
|
|
|
m_fn_vBrowseDirectory(szPath, p_iResult, p_stItemRoot) ;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: browse the specified directory .
|
|
*
|
|
* Parameters: szPath : directory to start from
|
|
* p_iResult : result of the search
|
|
* p_stItemRoot : root item
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vBrowseDirectory(char* szPath, int *p_iResult, ITEMIDLIST *p_stItemRoot)
|
|
{
|
|
BROWSEINFO stBI;
|
|
ITEMIDLIST *p_stItem;
|
|
char szDisplayName[ MAX_PATH ];
|
|
|
|
// prepare the structure for the browsing
|
|
stBI.hwndOwner = this->GetSafeHwnd();
|
|
stBI.pidlRoot = p_stItemRoot;
|
|
stBI.pszDisplayName = szDisplayName;
|
|
stBI.lpszTitle = "Choose path for directory";
|
|
stBI.ulFlags = 0;
|
|
stBI.lpfn = NULL;
|
|
*p_iResult = 0;
|
|
if ((p_stItem = SHBrowseForFolder( &stBI )) != NULL)
|
|
{
|
|
// obtain the new path
|
|
SHGetPathFromIDList( p_stItem, szPath );
|
|
*p_iResult = 1;
|
|
}
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// SEARCH FUNCTIONS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Test if in a given directory are any directories
|
|
*
|
|
* Parameters: _szPath : name of the directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_bExistDirectories(char *_szPath)
|
|
{
|
|
int i=0;
|
|
char szPath[MAX_PATH];
|
|
HANDLE hHandle;
|
|
WIN32_FIND_DATA stFindFileData;
|
|
|
|
strcpy(szPath, _szPath);
|
|
strcat (szPath, "\\*");
|
|
|
|
if (!m_fn_bGetFiles(szPath, &hHandle, &stFindFileData)) return FALSE;
|
|
|
|
do if(stFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
{
|
|
if(strcmp(stFindFileData.cFileName, ".") == 0) continue;
|
|
if(strcmp(stFindFileData.cFileName, "..") == 0) continue;
|
|
i++;
|
|
}
|
|
while(FindNextFile(hHandle, &stFindFileData));
|
|
FindClose(hHandle);
|
|
|
|
return i;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Test if the directory contain any data.
|
|
*
|
|
* Parameters: szFile : name of the directory
|
|
* hHandle : search handle
|
|
* stFindFileData : search data
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_bGetFiles(char *szFile, HANDLE *hHandle, WIN32_FIND_DATA *stFindFileData)
|
|
{
|
|
memset(&(*stFindFileData),0,sizeof(*stFindFileData));
|
|
*hHandle = FindFirstFile(szFile, &(*stFindFileData));
|
|
//return a boolean for telling if some files *.* exists in the directory or not
|
|
if( *hHandle == INVALID_HANDLE_VALUE)
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// GET DATA & TYPES //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Get all available types for the list box with types.
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vGetAllTypes()
|
|
{
|
|
char szAnims[MAX_PATH];
|
|
char szBanks[MAX_PATH];
|
|
char szClasses[MAX_PATH];
|
|
char szFamilies[MAX_PATH];
|
|
char szLevels[MAX_PATH];
|
|
char szTextures[MAX_PATH];
|
|
|
|
int iNumber=0;
|
|
// set all the lists with objects
|
|
m_fn_vAddType(m_p_oTypeAnims, szAnims, "Anims","\\World\\Graphics\\Anims" , &iNumber);
|
|
m_fn_vAddType(m_p_oTypeBanks, szBanks, "Banks","\\World\\Graphics\\Objects\\Banks" , &iNumber);
|
|
m_fn_vAddType(m_p_oTypeClasses, szClasses, "Classes","\\World\\Graphics\\Objects\\Classes" , &iNumber);
|
|
m_fn_vAddType(m_p_oTypeFamilies, szFamilies, "Families","\\World\\Families" , &iNumber);
|
|
m_fn_vAddType(m_p_oTypeLevels, szLevels, "Levels","\\World\\Levels" , &iNumber);
|
|
m_fn_vAddType(m_p_oTypeTextures, szTextures, "Textures","\\World\\Graphics\\Textures" , &iNumber);
|
|
|
|
if (!iNumber )
|
|
{ m_oListType->ResetContent();
|
|
m_oListObject->ResetContent();
|
|
}
|
|
m_fn_vGetSetDatasInList(szAnims, szBanks, szClasses, szFamilies, szLevels, szTextures);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Get all datas (objects) for all the types.
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vGetDatas(char *szType, char *szPath)
|
|
{
|
|
HANDLE hHandle;
|
|
WIN32_FIND_DATA stFindFileData;
|
|
|
|
if (!m_fn_bGetFiles(szPath, &hHandle, &stFindFileData))
|
|
return;
|
|
|
|
// get the datas for the banks and classes
|
|
if (!strcmp(szType, "Banks")||!strcmp(szType, "Classes"))
|
|
{
|
|
do if(stFindFileData.dwFileAttributes)
|
|
{
|
|
if(strlen(stFindFileData.cFileName) == 0)
|
|
break;
|
|
if(strcmp(stFindFileData.cFileName, ".") == 0)
|
|
continue;
|
|
if(strcmp(stFindFileData.cFileName, "..") == 0)
|
|
continue;
|
|
if (m_oListObject -> FindString(-1,stFindFileData.cFileName)== LB_ERR )
|
|
{
|
|
GI_Item * p_oItem = new GI_Item(FALSE, MLT_p_cGetFileNameWithoutExt(stFindFileData.cFileName));
|
|
if (m_p_oTypeBanks && !strcmp(szType, "Banks"))
|
|
m_fn_vCreateLists(&m_p_oTypeBanks->m_oList, szPath, "Banks", p_oItem);
|
|
if (m_p_oTypeClasses && !strcmp(szType, "Classes"))
|
|
m_fn_vCreateLists(&m_p_oTypeClasses->m_oList, szPath, "Classes", p_oItem);
|
|
}
|
|
}
|
|
while(FindNextFile(hHandle, &stFindFileData));
|
|
}
|
|
else
|
|
{
|
|
// get the datas for the anims, families and levels
|
|
do if(stFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
{
|
|
if(strlen(stFindFileData.cFileName) == 0)
|
|
break;
|
|
if(strcmp(stFindFileData.cFileName, ".") == 0)
|
|
continue;
|
|
if(strcmp(stFindFileData.cFileName, "..") == 0)
|
|
continue;
|
|
if (m_oListObject -> FindString(-1,stFindFileData.cFileName)== LB_ERR )
|
|
{
|
|
GI_Item * p_oItem = new GI_Item(FALSE, stFindFileData.cFileName);
|
|
if (m_p_oTypeAnims && !strcmp(szType, "Anims"))
|
|
m_fn_vCreateLists(&m_p_oTypeAnims->m_oList, szPath, "Anims", p_oItem);
|
|
if (m_p_oTypeFamilies && !strcmp(szType, "Families"))
|
|
m_fn_vCreateLists(&m_p_oTypeFamilies->m_oList, szPath, "Families", p_oItem);
|
|
if (m_p_oTypeLevels && !strcmp(szType, "Levels"))
|
|
m_fn_vCreateLists(&m_p_oTypeLevels->m_oList, szPath, "Levels", p_oItem);
|
|
if (m_p_oTypeTextures && !strcmp(szType, "Textures"))
|
|
m_fn_vCreateLists(&m_p_oTypeTextures->m_oList, szPath, "Textures", p_oItem);
|
|
}
|
|
}
|
|
while(FindNextFile(hHandle, &stFindFileData));
|
|
}
|
|
|
|
FindClose(hHandle);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Get the datas from the directories and set the lists with objects.
|
|
*
|
|
* Parameters: szAnims : anims directory
|
|
* szBanks : banks directory
|
|
* szClasses : classes directory
|
|
* szFamilies : families directory
|
|
* szLevels : levels directory
|
|
* szTextures : textures directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vGetSetDatasInList( char *szAnims, char *szBanks, char *szClasses, char *szFamilies, char *szLevels, char * szTextures)
|
|
{
|
|
if (m_oListType->GetCount())
|
|
{ // get all datas for all the existing types in the list box with types
|
|
m_fn_vGetDatas("Anims", strcat(szAnims, "\\*.*"));
|
|
m_fn_vGetDatas("Banks", strcat(szBanks, "\\*.mod"));
|
|
m_fn_vGetDatas("Classes", strcat(szClasses, "\\*.mod"));
|
|
m_fn_vGetDatas("Families", strcat(szFamilies, "\\*.*"));
|
|
m_fn_vGetDatas("Levels", strcat(szLevels, "\\*.*"));
|
|
m_fn_vGetDatas("Textures", strcat(szTextures, "\\*.*"));
|
|
}
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// CREATE LISTS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Find the number of elements for a type.
|
|
*
|
|
* Parameters: szFiles : name of the directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
int CDlgMain::m_fn_iAddTestDirType(char* szFiles)
|
|
{
|
|
int iTypes=0;
|
|
HANDLE hHandle;
|
|
WIN32_FIND_DATA stFindFileData;
|
|
|
|
if (!m_fn_bGetFiles(szFiles, &hHandle, &stFindFileData))
|
|
return 0;
|
|
// determine if in the directory is something useful for the selected type
|
|
do if(stFindFileData.dwFileAttributes)
|
|
{
|
|
if(strlen(stFindFileData.cFileName) == 0)
|
|
break;
|
|
if(strcmp(stFindFileData.cFileName, ".") == 0)
|
|
continue;
|
|
if(strcmp(stFindFileData.cFileName, "..") == 0)
|
|
continue;
|
|
iTypes++;
|
|
}
|
|
while(FindNextFile(hHandle, &stFindFileData));
|
|
// return the number of the useful information
|
|
FindClose(hHandle);
|
|
return iTypes;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Add an item to the list
|
|
*
|
|
* Parameters: _oListObject : obejct list
|
|
* szPath : directory
|
|
* szType : name of type
|
|
* _p_oItem :new object
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vCreateLists(CList<GI_Item *,GI_Item *> *_oListObject, char *szPath, char *szType, GI_Item * _p_oItem )
|
|
{
|
|
// add an item to the list
|
|
_oListObject -> AddTail( _p_oItem);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add that type in the list box with types
|
|
*
|
|
* Parameters: _p_oType : pointer on the new type
|
|
* szType : name of type
|
|
* iNumber : number of data for this type
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSetTypeInList(GI_Type ** _p_oType, char *szType, int iNumber)
|
|
{
|
|
if (m_oListType->FindString(-1, szType)==LB_ERR )
|
|
{
|
|
if (iNumber)
|
|
{ // only if the iNumber is not equal to 0
|
|
int iIndex = m_oListType -> AddString(szType);
|
|
GI_Type *p_oType = new GI_Type(szType, 0, RGB(0, 0, 0));
|
|
|
|
if( iIndex != LB_ERR )
|
|
{ // add the new type in the list box with types
|
|
*_p_oType = p_oType;
|
|
m_oListType -> SetItemData( iIndex, (DWORD) *_p_oType );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add that type in the list box with types
|
|
*
|
|
* Parameters: _p_oType : new type
|
|
* szReturn : returns the seult
|
|
* szType : name of type
|
|
* szDir : name of directory
|
|
* iNumber : number of data for this type
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddType(GI_Type * p_oType, char *szReturn, char *szType, char *szDir, int *iNumber)
|
|
{ char _szType[MAX_PATH];
|
|
xString sDir;
|
|
|
|
switch(g_iRaw)
|
|
{
|
|
case 0:
|
|
strcpy(_szType, g_stInitialData.szRawData);
|
|
break;
|
|
case 1:
|
|
strcpy(_szType, g_stInitialData.szRawSpecific1);
|
|
break;
|
|
case 2:
|
|
strcpy(_szType, g_stInitialData.szRawSpecific2);
|
|
break;
|
|
}
|
|
strcat (_szType, szDir);
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(_szType))
|
|
{
|
|
int iBanks=0, iAnims=0, iClasses=0, iFamilies=0, iLevels=0, iTextures = 0;
|
|
|
|
// for Anims
|
|
if (!strcmp(szType, "Anims"))
|
|
{
|
|
iAnims=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeAnims, szType, iAnims);
|
|
}
|
|
// for Banks
|
|
if (!strcmp(szType, "Banks"))
|
|
{
|
|
iBanks=m_fn_iAddTestDirType("*.mod");
|
|
m_fn_vSetTypeInList(&m_p_oTypeBanks, szType, iBanks);
|
|
}
|
|
// for Classes
|
|
if (!strcmp(szType, "Classes"))
|
|
{
|
|
iClasses=m_fn_iAddTestDirType("*.mod");
|
|
m_fn_vSetTypeInList(&m_p_oTypeClasses, szType, iClasses);
|
|
}
|
|
// for Families
|
|
if (!strcmp(szType, "Families"))
|
|
{
|
|
iFamilies=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeFamilies, szType, iFamilies);
|
|
}
|
|
// for Levels
|
|
if (!strcmp(szType, "Levels"))
|
|
{
|
|
iLevels=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeLevels, szType, iLevels);
|
|
}
|
|
// for Textures
|
|
if (!strcmp(szType, "Textures"))
|
|
{
|
|
iTextures=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeTextures, szType, iTextures);
|
|
}
|
|
// increment the number of types
|
|
(*iNumber)++;
|
|
}
|
|
strcpy(szReturn, _szType);
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add anims type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddAnim(void)
|
|
{
|
|
int iObjects=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szAnims))
|
|
{ iObjects=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeAnims, "Anims", iObjects);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all anims
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddAnims(void)
|
|
{
|
|
xString sDir;
|
|
m_fn_vAddAnim();
|
|
strcpy(sDir, g_szAnims);
|
|
strcat(sDir, "\\*.*");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Anims", sDir);
|
|
|
|
if (m_p_oTypeAnims)
|
|
if (!m_p_oTypeAnims->m_oList.GetCount())
|
|
//delete the anims from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Anims"));
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add banks type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddBank(void)
|
|
{
|
|
int iBanks=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szBanks))
|
|
{ iBanks=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeBanks, "Banks", iBanks);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all banks
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddBanks(void)
|
|
{
|
|
xString sDir;
|
|
|
|
m_fn_vAddBank();
|
|
strcpy(sDir, g_szBanks);
|
|
strcat(sDir, "\\*.mod");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Banks", sDir);
|
|
|
|
if (m_p_oTypeBanks)
|
|
if (!m_p_oTypeBanks->m_oList.GetCount())
|
|
//delete the banks from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Banks"));
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add classes type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddClass(void)
|
|
{
|
|
int iClass=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szClasses))
|
|
{ iClass=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeClasses, "Classes", iClass);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all classes
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddClasses(void)
|
|
{
|
|
xString sDir;
|
|
|
|
m_fn_vAddClass();
|
|
strcpy(sDir, g_szClasses);
|
|
strcat(sDir, "\\*.mod");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Classes", sDir);
|
|
|
|
if (m_p_oTypeClasses)
|
|
if( !m_p_oTypeClasses->m_oList.GetCount())
|
|
//delete the classes from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Classes"));
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add family type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddFamily(void)
|
|
{
|
|
int iFamilies=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szFamilies))
|
|
{ iFamilies=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeFamilies, "Families", iFamilies);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all families
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddFamilies(void)
|
|
{ xString sDir;
|
|
|
|
m_fn_vAddFamily();
|
|
strcpy(sDir, g_szFamilies);
|
|
strcat(sDir, "\\*.*");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Families", sDir);
|
|
|
|
if (m_p_oTypeFamilies)
|
|
if (!m_p_oTypeFamilies->m_oList.GetCount())
|
|
//delete the families from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Families"));
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add levels type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddLevel(void)
|
|
{ int iLevels=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szLevels))
|
|
{ iLevels=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeLevels, "Levels", iLevels);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all levels
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddLevels(void)
|
|
{ xString sDir;
|
|
|
|
m_fn_vAddLevel();
|
|
strcpy(sDir, g_szLevels);
|
|
strcat(sDir, "\\*.*");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Levels", sDir);
|
|
|
|
if (m_p_oTypeLevels)
|
|
if (!m_p_oTypeLevels->m_oList.GetCount())
|
|
//delete the levels from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Levels"));
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add textures type in the list box with types
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddTexture(void)
|
|
{
|
|
int iTextures=0;
|
|
xString sDir;
|
|
|
|
GetCurrentDirectory(256, sDir);
|
|
if (SetCurrentDirectory(g_szTextures))
|
|
{ iTextures=m_fn_iAddTestDirType("*.*");
|
|
m_fn_vSetTypeInList(&m_p_oTypeTextures, "Textures", iTextures);
|
|
}
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: add all textures
|
|
*
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vAddTextures(void)
|
|
{
|
|
xString sDir;
|
|
|
|
m_fn_vAddTexture();
|
|
strcpy(sDir, g_szTextures);
|
|
strcat(sDir, "\\*.*");
|
|
if (m_oListType->GetCount())
|
|
m_fn_vGetDatas("Textures", sDir);
|
|
|
|
if (m_p_oTypeTextures)
|
|
if (!m_p_oTypeTextures->m_oList.GetCount())
|
|
//delete the textures from the type list box!!!
|
|
m_oListType->DeleteString(m_oListType->FindString(-1, "Textures"));
|
|
}
|
|
|
|
|
|
|
|
//==================================================//
|
|
// GET NUMBER OF OBJECTS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Get the total number of objects in all lists.
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
int CDlgMain::m_fn_iGetAllObjects()
|
|
{
|
|
int iResult=0;
|
|
// for all the types in the list box with types, add the size of the list box at the iResult
|
|
if (m_p_oTypeAnims)
|
|
iResult = m_p_oTypeAnims->m_oList.GetCount();
|
|
if (m_p_oTypeBanks)
|
|
iResult += m_p_oTypeBanks->m_oList.GetCount();
|
|
if (m_p_oTypeClasses)
|
|
iResult += m_p_oTypeClasses->m_oList.GetCount();
|
|
if (m_p_oTypeFamilies)
|
|
iResult += m_p_oTypeFamilies->m_oList.GetCount();
|
|
if (m_p_oTypeLevels)
|
|
iResult += m_p_oTypeLevels->m_oList.GetCount();
|
|
if (m_p_oTypeTextures)
|
|
iResult += m_p_oTypeTextures->m_oList.GetCount();
|
|
|
|
return iResult;
|
|
}
|
|
|
|
|
|
|
|
//==================================================//
|
|
// UPDATE LIST BOXES //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Add the objects to the list box
|
|
*
|
|
* Parameters: _oListObjects : object list
|
|
* szPath : directory
|
|
* szType : type
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vUpdateListBox(CList<GI_Item *,GI_Item *> *_oListObjects, char *szPath, char *szType)
|
|
{ GI_Item *p_oItem;
|
|
int iSize=_oListObjects->GetCount();
|
|
|
|
// only if the szPath is the same as szType
|
|
if (!strcmp(szPath, szType))
|
|
{
|
|
for (int i=0; i<iSize; i++)
|
|
{
|
|
// add the objects in the list box with objects
|
|
p_oItem = _oListObjects->RemoveHead();
|
|
int iIndex = m_oListObject -> AddString(p_oItem->m_fn_p_oGetName());
|
|
if( iIndex != LB_ERR )
|
|
m_oListObject -> SetItemData( iIndex, (DWORD) p_oItem );
|
|
_oListObjects->AddTail(p_oItem);
|
|
}
|
|
// implicitly the first object in the second list box is selected!!!
|
|
m_oListObject -> SetSel( 0);
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Update all the datas
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vUpdateAll()
|
|
{
|
|
if (g_bStandardConfig)
|
|
m_fn_vGetAllTypes();
|
|
else
|
|
{ m_fn_vAddAnims();
|
|
m_fn_vAddTextures();
|
|
m_fn_vAddBanks();
|
|
m_fn_vAddClasses();
|
|
m_fn_vAddFamilies();
|
|
m_fn_vAddLevels();
|
|
}
|
|
|
|
// select the first type in the list box
|
|
m_oListType->SetCurSel( 0 );
|
|
|
|
char szPath[MAX_PATH];
|
|
m_oListType->GetText(0, szPath);
|
|
|
|
// update the lists with objects (for the existing types).
|
|
if (m_p_oTypeAnims)
|
|
m_fn_vUpdateListBox(&m_p_oTypeAnims->m_oList, szPath, "Anims");
|
|
if (m_p_oTypeBanks)
|
|
m_fn_vUpdateListBox(&m_p_oTypeBanks->m_oList, szPath, "Banks");
|
|
if (m_p_oTypeClasses)
|
|
m_fn_vUpdateListBox(&m_p_oTypeClasses->m_oList, szPath, "Classes");
|
|
if (m_p_oTypeFamilies)
|
|
m_fn_vUpdateListBox(&m_p_oTypeFamilies->m_oList, szPath, "Families");
|
|
if (m_p_oTypeLevels)
|
|
m_fn_vUpdateListBox(&m_p_oTypeLevels->m_oList, szPath, "Levels");
|
|
if (m_p_oTypeTextures)
|
|
m_fn_vUpdateListBox(&m_p_oTypeTextures->m_oList, szPath, "Textures");
|
|
}
|
|
|
|
|
|
|
|
//==================================================//
|
|
// DRAW ITEMS IN LIST BOX //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Function for changing the color of one item in the list box with types
|
|
*
|
|
* Parameters: lpDIS : item to draw
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vOnDrawItemListBoxType(LPDRAWITEMSTRUCT lpDIS)
|
|
{
|
|
CDC *p_oDC = CDC::FromHandle(lpDIS->hDC);
|
|
CBrush oBrush;
|
|
COLORREF xTextColor;
|
|
BOOL bSelected = (lpDIS->itemState & ODS_SELECTED );
|
|
GI_Type *p_oType= (GI_Type *)m_oListType->GetItemData( lpDIS->itemID );
|
|
|
|
oBrush.CreateSolidBrush( GetSysColor( bSelected ? COLOR_GRAYTEXT : COLOR_WINDOW) );
|
|
// change the color of the type in the list box according
|
|
if (p_oType->m_iSelected == 0)
|
|
xTextColor = RGB(0, 0,0);
|
|
int iSize = p_oType->m_oList.GetCount() ;
|
|
if (p_oType->m_iSelected < iSize && p_oType->m_iSelected >0)
|
|
xTextColor = RGB(0, 0, 255);
|
|
if (p_oType->m_iSelected == iSize && iSize>0)
|
|
xTextColor = RGB(0, 127,0);
|
|
|
|
p_oType->m_xTextColor = xTextColor;
|
|
xTextColor = p_oType->m_xTextColor;
|
|
p_oDC->FillRect( &lpDIS->rcItem, &oBrush );
|
|
p_oDC->SetBkMode( TRANSPARENT);
|
|
p_oDC->SetTextColor( xTextColor );
|
|
p_oDC->DrawText( p_oType -> m_fn_p_oGetName(), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
|
|
|
|
oBrush.DeleteObject();
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Function for drawing the cross before of one active item
|
|
*
|
|
* Parameters: lpDIS : item to draw
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vOnDrawItemListBoxObject(LPDRAWITEMSTRUCT lpDIS)
|
|
{
|
|
CDC *pDC = CDC::FromHandle( lpDIS->hDC );
|
|
CListBox *pLB = m_oListObject;
|
|
GI_Item *p_oItem = (GI_Item*)pLB->GetItemData( lpDIS->itemID );
|
|
COLORREF xTextColor;
|
|
|
|
pDC->SetBkColor( GetSysColor( COLOR_WINDOWTEXT ) );
|
|
pDC->FillSolidRect( &lpDIS->rcItem, GetSysColor( COLOR_WINDOW ));
|
|
|
|
//draw a cross in front of an active object
|
|
if (p_oItem -> m_bActived)
|
|
{
|
|
xTextColor = RGB(0, 0, 255);
|
|
pDC->SetTextColor( xTextColor );
|
|
}
|
|
else
|
|
{
|
|
xTextColor = RGB(0, 0, 0);
|
|
pDC->SetTextColor( xTextColor );
|
|
}
|
|
|
|
if (p_oItem -> m_bActived)
|
|
pDC->BitBlt( lpDIS->rcItem.left + 2, lpDIS->rcItem.top + 1, 12, 12, &m_oCrossDC, 0, 0, SRCAND );
|
|
|
|
pDC->SetBkMode( TRANSPARENT);
|
|
pDC->SetTextColor( GetSysColor( COLOR_WINDOWTEXT ) );
|
|
|
|
lpDIS->rcItem.left += 16;
|
|
|
|
if (p_oItem -> m_bActived)
|
|
{
|
|
xTextColor = RGB(0, 0, 255);
|
|
pDC->SetTextColor( xTextColor );
|
|
}
|
|
else
|
|
{
|
|
xTextColor = RGB(0, 0, 0);
|
|
pDC->SetTextColor( xTextColor );
|
|
}
|
|
pDC->DrawText( p_oItem -> m_fn_p_oGetName(), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
|
|
}
|
|
|
|
//==================================================//
|
|
// UPDATE STATE OF OBJECTS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Change the state of an object
|
|
*
|
|
* Parameters: _p_oItem : item to change
|
|
* iIndexItem : index of the item
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_bOnChangeActivation(GI_Item *_p_oItem, int iIndexItem )
|
|
{
|
|
int file;
|
|
int iNbSel;
|
|
int iSize;
|
|
int iIndex = m_oListType->GetCurSel();
|
|
BOOL bResult = TRUE;
|
|
xString sName;
|
|
GI_Item *p_oItem;
|
|
GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
|
|
CListBox *pLB = m_oListObject;
|
|
|
|
iNbSel = pLB->GetSelCount();
|
|
iSize = p_oType->m_oList.GetCount();
|
|
|
|
if( iNbSel > 0 )
|
|
{ // if there are selection(s) in the list box
|
|
int *a_iSel = (int*) malloc( iNbSel * sizeof( int ) );
|
|
|
|
pLB -> GetSelItems( iNbSel, a_iSel );
|
|
if ( iNbSel == 1 )
|
|
{
|
|
// only one selection
|
|
p_oItem = (GI_Item *) pLB -> GetItemData( a_iSel[0] );
|
|
// change the state of the item in front of which the user clicked
|
|
if (p_oItem==_p_oItem)
|
|
m_fn_vChange(p_oItem, p_oType, p_oItem->m_bActived );
|
|
else
|
|
m_fn_vChange(_p_oItem, p_oType, _p_oItem->m_bActived );
|
|
pLB->Invalidate(TRUE);
|
|
}
|
|
else // several objects selected
|
|
{
|
|
BOOL bActivate = ! _p_oItem -> m_bActived;
|
|
GI_Item **p_oItemMul;
|
|
p_oItemMul = (GI_Item **)malloc (iNbSel * sizeof( GI_Item* ) );
|
|
BOOL bIs=FALSE;
|
|
for ( int iIndex = 0 ; iIndex < iNbSel ; iIndex++ )
|
|
{
|
|
p_oItemMul[iIndex] = (GI_Item *) pLB -> GetItemData( a_iSel[iIndex] );
|
|
if (p_oItemMul[iIndex]==_p_oItem)
|
|
bIs = TRUE;
|
|
}
|
|
for (iIndex = 0 ; iIndex < iNbSel ; iIndex++ )
|
|
{
|
|
if (bIs) //if the user clicked in front of one of the selected items
|
|
{
|
|
if( !bActivate && p_oItemMul[iIndex] -> m_bActived )
|
|
{ p_oItemMul[iIndex]->m_bActived = FALSE;
|
|
m_iCountOfSelections--;
|
|
p_oType->m_iSelected--;
|
|
}
|
|
else if (bActivate && !p_oItemMul[iIndex] -> m_bActived )
|
|
{ p_oItemMul[iIndex]->m_bActived = TRUE;
|
|
m_iCountOfSelections++;
|
|
p_oType->m_iSelected++;
|
|
}
|
|
}
|
|
pLB->Invalidate(TRUE);
|
|
}
|
|
// if the user clicked in front of an item which is not
|
|
// selected
|
|
if (!bIs)
|
|
m_fn_vChange(_p_oItem, p_oType, _p_oItem->m_bActived );
|
|
|
|
free(p_oItemMul);
|
|
}
|
|
free( a_iSel );
|
|
// after modifying the state of the objects, enable/disable the selection buttons
|
|
m_fn_vEnableButtonAll();
|
|
m_fn_vEnableButtonConvert();
|
|
if (p_oType->m_iSelected==m_oListObject->GetCount())
|
|
m_oSelectList.EnableWindow(FALSE);
|
|
else
|
|
m_oSelectList.EnableWindow(TRUE);
|
|
if (p_oType->m_iSelected>0)
|
|
m_oClearList.EnableWindow(TRUE);
|
|
else
|
|
m_oClearList.EnableWindow(FALSE);
|
|
// g_bGenerateRLI = FALSE;
|
|
if (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
|
|
{
|
|
for (int i=0; i<m_p_oTypeBanks->m_oList.GetCount(); i++)
|
|
{
|
|
// add the objects in the list box with objects
|
|
p_oItem = m_p_oTypeBanks->m_oList.RemoveHead();
|
|
if (p_oItem->m_bActived)
|
|
{
|
|
if (g_bStandardConfig)
|
|
{
|
|
switch (g_iRaw)
|
|
{
|
|
case 0:
|
|
sprintf(sName, "%s\\World\\Graphics\\Objects\\Banks\\%s.spo", g_stInitialData.szRawData , p_oItem->m_szName);
|
|
break;
|
|
case 1:
|
|
sprintf(sName, "%s\\World\\Graphics\\Objects\\Banks\\%s.spo", g_stInitialData.szRawSpecific1 , p_oItem->m_szName);
|
|
break;
|
|
case 2:
|
|
sprintf(sName, "%s\\World\\Graphics\\Objects\\Banks\\%s.spo", g_stInitialData.szRawSpecific2 , p_oItem->m_szName);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
sprintf(sName, "%s\\%s.spo", g_szBanks, p_oItem->m_szName);
|
|
|
|
|
|
if ((file = open(sName, O_RDONLY))!=-1)
|
|
{
|
|
g_bGenerateRLI = TRUE;
|
|
close(file);
|
|
}
|
|
}
|
|
m_p_oTypeBanks->m_oList.AddTail(p_oItem);
|
|
}
|
|
}
|
|
if ((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected && g_bGenerateRLI)||(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected))
|
|
m_oCheckGenerateRLI.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckGenerateRLI.EnableWindow(FALSE);
|
|
|
|
if (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
|
|
m_oCheckCreateFamily.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckCreateFamily.EnableWindow(FALSE);
|
|
}
|
|
m_oListType->Invalidate(TRUE);
|
|
|
|
g_bChangeComboSelect = TRUE;
|
|
|
|
return bResult ;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Change the state of one object
|
|
*
|
|
* Parameters: _p_oItem : item to change
|
|
* p_oType : type
|
|
* bSet : new state
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vChange(GI_Item *p_oItem, GI_Type *p_oType, BOOL bSet )
|
|
{
|
|
if (!bSet)
|
|
{
|
|
p_oItem->m_bActived = TRUE;
|
|
m_iCountOfSelections++;
|
|
p_oType->m_iSelected++;
|
|
}
|
|
else
|
|
{
|
|
p_oItem->m_bActived = FALSE;
|
|
m_iCountOfSelections--;
|
|
p_oType->m_iSelected--;
|
|
}
|
|
}
|
|
|
|
//==================================================//
|
|
// SELECTION OF THE ITEMS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: reset the content of the dialogs
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vResetSelection()
|
|
{
|
|
//remove all the elements in the lists with objects
|
|
m_fn_vFreeMemory();
|
|
|
|
m_p_oTypeAnims = NULL;
|
|
m_p_oTypeBanks = NULL;
|
|
m_p_oTypeClasses = NULL;
|
|
m_p_oTypeFamilies = NULL;
|
|
m_p_oTypeLevels = NULL;
|
|
m_p_oTypeTextures = NULL;
|
|
|
|
//reset the contains of the list boxes
|
|
m_oListType->ResetContent();
|
|
m_oListObject->ResetContent();
|
|
|
|
m_fn_vUpdateAll();
|
|
//reset the total number of selections
|
|
m_iCountOfSelections = 0;
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Select/deselect all the objects in all lists according with parameter bSet
|
|
*
|
|
* Parameters: bSet : selection flag
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSelectAll(BOOL bSet)
|
|
{
|
|
m_fn_vSelectAllInList(m_p_oTypeAnims, bSet);
|
|
m_fn_vSelectAllInList(m_p_oTypeBanks, bSet);
|
|
m_fn_vSelectAllInList(m_p_oTypeClasses, bSet);
|
|
m_fn_vSelectAllInList(m_p_oTypeFamilies, bSet);
|
|
m_fn_vSelectAllInList(m_p_oTypeLevels, bSet);
|
|
m_fn_vSelectAllInList(m_p_oTypeTextures, bSet);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Select all the items (objects) for a selected type
|
|
*
|
|
* Parameters: bSet : selection flag
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSelectAllForType(BOOL bSet)
|
|
{
|
|
char szPath[MAX_PATH];
|
|
int iIndex = m_oListType->GetCurSel();
|
|
GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
|
|
|
|
m_oListType->GetText(iIndex, szPath);
|
|
m_fn_vSelectAllInList(p_oType, bSet);
|
|
m_oListType->Invalidate(TRUE);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Select/deselect the items in the list according with the parameter bSet
|
|
*
|
|
* Parameters: _p_oType : type
|
|
* bSet : selection flag
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSelectAllInList(GI_Type * _p_oType, BOOL bSet)
|
|
{
|
|
int iSize, j=0;
|
|
|
|
if (_p_oType)
|
|
{
|
|
iSize = _p_oType->m_oList.GetCount();
|
|
// for all the items (objects) in the list box, make them active/inactive according to the bSet flag.
|
|
for (int i=0; i< iSize; i++)
|
|
{
|
|
GI_Item *p_oItem = _p_oType->m_oList.RemoveHead();
|
|
if (p_oItem->m_bActived)
|
|
j++;
|
|
p_oItem->m_bActived = bSet;
|
|
_p_oType->m_oList.AddTail(p_oItem);
|
|
}
|
|
// modify the number of selected objects in the list according with the flag bSet
|
|
if (bSet)
|
|
_p_oType->m_iSelected = _p_oType->m_oList.GetCount();
|
|
else
|
|
_p_oType->m_iSelected = 0;
|
|
|
|
m_oListObject->Invalidate(TRUE);
|
|
|
|
// update the total number of selections (for all the lists with objects)
|
|
if (bSet)
|
|
m_iCountOfSelections += iSize - j;
|
|
else
|
|
m_iCountOfSelections -= j;
|
|
|
|
}
|
|
}
|
|
|
|
//==================================================//
|
|
// ENABLE / DISABLE BUTTONS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Modify the state of the selection buttons.
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vEnableButtons(BOOL bSet)
|
|
{
|
|
m_oSelectList.EnableWindow(!bSet);
|
|
m_oSelectAll.EnableWindow(!bSet);
|
|
m_oClearList.EnableWindow(bSet);
|
|
m_oClearAll.EnableWindow(bSet);
|
|
|
|
|
|
m_oCheckZooMax.EnableWindow(bSet);
|
|
m_oCheckZooEds.EnableWindow(bSet);
|
|
m_oCheckSctMax.EnableWindow(bSet);
|
|
m_oCheckSctEds.EnableWindow(bSet);
|
|
m_oCheckSpoMax.EnableWindow(bSet);
|
|
m_oCheckSpoEds.EnableWindow(bSet);
|
|
m_oCheckGmtMax.EnableWindow(bSet);
|
|
m_oCheckGmtEds.EnableWindow(bSet);
|
|
m_oCheckVmtMax.EnableWindow(bSet);
|
|
m_oCheckVmtEds.EnableWindow(bSet);
|
|
|
|
m_oCheckCopyTextures.EnableWindow(bSet);
|
|
m_oCheckGenerateRLI.EnableWindow(bSet);
|
|
m_oCheckUpdateGameDsc.EnableWindow(bSet);
|
|
|
|
m_oCheckAskFamily.EnableWindow(bSet);
|
|
m_oCheckCommon.EnableWindow(bSet&&!g_iData&&!g_bAskFamily);
|
|
m_oCheckSpecific.EnableWindow(bSet&&!g_iData&&!g_bAskFamily);
|
|
|
|
m_oCheckCreateFamily.EnableWindow(bSet);
|
|
|
|
m_oConvert.EnableWindow(bSet);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Change the state of the button All
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vEnableButtonAll()
|
|
{
|
|
if (m_iCountOfSelections==m_fn_iGetAllObjects())
|
|
m_oSelectAll.EnableWindow(FALSE);
|
|
else
|
|
m_oSelectAll.EnableWindow(TRUE);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Change the state for the Convert button
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vEnableButtonConvert()
|
|
{
|
|
// enable/disable the All button according to total number of selections
|
|
if (!m_iCountOfSelections)
|
|
{
|
|
m_oConvert.EnableWindow(FALSE);
|
|
|
|
m_oCheckZooMax.EnableWindow(FALSE);
|
|
m_oCheckZooEds.EnableWindow(FALSE);
|
|
m_oCheckSpoMax.EnableWindow(FALSE);
|
|
m_oCheckSpoEds.EnableWindow(FALSE);
|
|
m_oCheckGmtMax.EnableWindow(FALSE);
|
|
m_oCheckGmtEds.EnableWindow(FALSE);
|
|
m_oCheckVmtMax.EnableWindow(FALSE);
|
|
m_oCheckVmtEds.EnableWindow(FALSE);
|
|
|
|
m_oClearAll.EnableWindow(FALSE);
|
|
|
|
m_oCheckAskFamily.EnableWindow(FALSE);
|
|
m_oCheckCommon.EnableWindow(FALSE);
|
|
m_oCheckSpecific.EnableWindow(FALSE);
|
|
|
|
m_oCheckCopyAnims.EnableWindow(FALSE);
|
|
m_oCheckCopyTextures.EnableWindow(FALSE);
|
|
m_oCheckGenerateRLI.EnableWindow(FALSE);
|
|
m_oCheckUpdateGameDsc.EnableWindow(FALSE);
|
|
|
|
m_oCheckEraseDup.EnableWindow(FALSE);
|
|
m_oCheckEraseUnused.EnableWindow(FALSE);
|
|
|
|
m_oCheckCreateFamily.EnableWindow(FALSE);
|
|
|
|
if (g_bRaymanII)
|
|
{
|
|
m_oCheckSctMax.EnableWindow(FALSE);
|
|
m_oCheckSctEds.EnableWindow(FALSE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_oConvert.EnableWindow(TRUE);
|
|
m_oClearAll.EnableWindow(TRUE);
|
|
if ((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)||(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected))
|
|
m_oCheckGenerateRLI.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckGenerateRLI.EnableWindow(FALSE);
|
|
if ((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected) || (m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected))
|
|
m_oCheckCopyTextures.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckCopyTextures.EnableWindow(FALSE);
|
|
if (m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected)
|
|
{
|
|
m_oCheckCopyAnims.EnableWindow(TRUE);
|
|
m_oCheckAskFamily.EnableWindow(TRUE);
|
|
if (!g_iData && !g_bAskFamily)
|
|
m_oCheckCommon.EnableWindow(TRUE);
|
|
if (g_iData && !g_bAskFamily)
|
|
m_oCheckSpecific.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_oCheckCopyAnims.EnableWindow(FALSE);
|
|
m_oCheckAskFamily.EnableWindow(FALSE);
|
|
if (!g_iData && g_bAskFamily)
|
|
m_oCheckCommon.EnableWindow(FALSE);
|
|
if (g_iData && g_bAskFamily)
|
|
m_oCheckSpecific.EnableWindow(FALSE);
|
|
}
|
|
|
|
if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
|
|
{
|
|
m_oCheckSpoMax.EnableWindow(TRUE);
|
|
m_oCheckSpoEds.EnableWindow(TRUE);
|
|
if (g_bRaymanII)
|
|
{
|
|
m_oCheckSctMax.EnableWindow(TRUE);
|
|
m_oCheckSctEds.EnableWindow(TRUE);
|
|
}
|
|
m_oCheckUpdateGameDsc.EnableWindow(TRUE);
|
|
m_oCheckEraseDup.EnableWindow(TRUE);
|
|
m_oCheckEraseUnused.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_oCheckSpoMax.EnableWindow(FALSE);
|
|
m_oCheckSpoEds.EnableWindow(FALSE);
|
|
if (g_bRaymanII)
|
|
{
|
|
m_oCheckSctMax.EnableWindow(FALSE);
|
|
m_oCheckSctEds.EnableWindow(FALSE);
|
|
}
|
|
m_oCheckUpdateGameDsc.EnableWindow(FALSE);
|
|
m_oCheckEraseDup.EnableWindow(FALSE);
|
|
m_oCheckEraseUnused.EnableWindow(FALSE);
|
|
}
|
|
if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
|
|
|| (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
|
|
|| (m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected))
|
|
{
|
|
m_oCheckGmtMax.EnableWindow(TRUE);
|
|
m_oCheckGmtEds.EnableWindow(TRUE);
|
|
m_oCheckVmtMax.EnableWindow(TRUE);
|
|
m_oCheckVmtEds.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_oCheckGmtMax.EnableWindow(FALSE);
|
|
m_oCheckGmtEds.EnableWindow(FALSE);
|
|
m_oCheckVmtMax.EnableWindow(FALSE);
|
|
m_oCheckVmtEds.EnableWindow(FALSE);
|
|
}
|
|
|
|
if (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
|
|
m_oCheckCreateFamily.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckCreateFamily.EnableWindow(FALSE);
|
|
|
|
if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
|
|
|| (m_p_oTypeFamilies && m_p_oTypeFamilies->m_iSelected)
|
|
|| (m_p_oTypeClasses && m_p_oTypeClasses->m_iSelected))
|
|
{
|
|
m_oCheckZooMax.EnableWindow(TRUE);
|
|
m_oCheckZooEds.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_oCheckZooMax.EnableWindow(FALSE);
|
|
m_oCheckZooEds.EnableWindow(FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
//==================================================//
|
|
// OPTIONS //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: set all the control buttons from the second list box
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSetOptions()
|
|
{
|
|
m_oCheckZooEds.SetCheck(!g_bIgnoreZoo);
|
|
m_oCheckZooMax.SetCheck(g_bIgnoreZoo);
|
|
|
|
m_oCheckSctEds.SetCheck(!g_bIgnoreSct);
|
|
m_oCheckSctMax.SetCheck(g_bIgnoreSct);
|
|
|
|
m_oCheckSpoEds.SetCheck(!g_bIgnoreSpo);
|
|
m_oCheckSpoMax.SetCheck(g_bIgnoreSpo);
|
|
|
|
m_oCheckGmtEds.SetCheck(!g_bIgnoreGmt);
|
|
m_oCheckGmtMax.SetCheck(g_bIgnoreGmt);
|
|
|
|
m_oCheckVmtEds.SetCheck(!g_bIgnoreTex);
|
|
m_oCheckVmtMax.SetCheck(g_bIgnoreTex);
|
|
|
|
m_oCheckCopyAnims.SetCheck(g_bCopyAnims);
|
|
m_oCheckCopyTextures.SetCheck(g_bCopyTextures);
|
|
m_oCheckGenerateRLI.SetCheck(g_bGenerateRLI);
|
|
m_oCheckUpdateGameDsc.SetCheck(g_bUpdateGameDSC);
|
|
m_oCheckCreateFamily.SetCheck(g_bCreateBasicFamily);
|
|
|
|
m_oCheckEraseDup.SetCheck(g_bEraseDuplicated);
|
|
m_oCheckEraseUnused.SetCheck(g_bEraseUnused);
|
|
|
|
m_oCheckCommon.SetCheck(g_bCommonFamily);
|
|
m_oCheckSpecific.SetCheck(g_bSpecificFamily);
|
|
m_oCheckAskFamily.SetCheck(g_bAskFamily);
|
|
}
|
|
|
|
/****************************************************************************
|
|
* Description: Function for setting/resetting the flag for ignore options
|
|
*
|
|
* Parameters: iId : control ID
|
|
* bChange : corresponding flag
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vChangeCheck(int iId, int iId1, BOOL *bChange)
|
|
{
|
|
*bChange = ! ((CButton *)GetDlgItem(iId))->GetCheck();
|
|
|
|
((CButton *)GetDlgItem(iId1))->SetCheck(!(*bChange));
|
|
((CButton *)GetDlgItem(iId))->SetCheck((*bChange));
|
|
|
|
if (iId==IDC_CHECK_RAYMAN2)
|
|
{
|
|
m_oCheckSctMax.EnableWindow((*bChange));
|
|
m_oCheckSctEds.EnableWindow((*bChange));
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Function for setting/resetting the flag for ignore options
|
|
*
|
|
* Parameters: iId : control ID
|
|
* bChange : corresponding flag
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vChangeCheckButton(int iId, BOOL *bChange)
|
|
{
|
|
*bChange = ! ((CButton *)GetDlgItem(iId))->GetCheck();
|
|
|
|
((CButton *)GetDlgItem(iId))->SetCheck((*bChange));
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// FREE ALLOCATED MEMORY //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Free all the allocated memory.
|
|
*
|
|
* Parameters:
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vFreeMemory()
|
|
{
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeAnims ) ;
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeBanks ) ;
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeClasses ) ;
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeFamilies ) ;
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeLevels ) ;
|
|
m_fn_vFreeMemoryForType(&m_p_oTypeTextures ) ;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Free all the allocated memory for a type.
|
|
*
|
|
* Parameters: _p_oType : type
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vFreeMemoryForType(GI_Type **_p_oType)
|
|
{
|
|
if (*_p_oType)
|
|
{
|
|
int iSize=(*_p_oType)->m_oList.GetCount();
|
|
//for all the elements in the list, remove them from list and delete the object
|
|
for (int i=0; i<iSize; i++)
|
|
{
|
|
GI_Item* p_oItem = (*_p_oType)->m_oList.RemoveHead();
|
|
delete p_oItem;
|
|
}
|
|
}
|
|
if (*_p_oType)
|
|
delete *_p_oType;
|
|
}
|
|
|
|
//==================================================//
|
|
// WRITE THE LOG FILE FROM RICH EDIT //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Write in the Win_M23D.log file the informations from the third panel
|
|
*
|
|
* Parameters: bTest : flag to check directory
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
int CDlgMain::m_fn_vWriteInFile( BOOL bTest)
|
|
{
|
|
FILE *fileW;
|
|
xString sDirectory;
|
|
|
|
// save the current directory
|
|
GetCurrentDirectory(256, sDirectory);
|
|
switch (g_iData)
|
|
{
|
|
case 0:
|
|
SetCurrentDirectory(g_sGameCommon);
|
|
break;
|
|
case 1:
|
|
if (bTest)
|
|
SetCurrentDirectory(g_sGameCommon);
|
|
else
|
|
SetCurrentDirectory(g_sGameSpecific1);
|
|
break;
|
|
case 2:
|
|
if (bTest)
|
|
SetCurrentDirectory(g_sGameCommon);
|
|
else
|
|
SetCurrentDirectory(g_sGameSpecific2);
|
|
break;
|
|
}
|
|
fileW = fopen("Win_M23D.log", "at+");
|
|
|
|
int nIndex = m_oRichEditRes.GetLineCount();
|
|
char szBuffer[500];
|
|
|
|
for (int k=m_nIndexLast; k<nIndex; k++)
|
|
{
|
|
strcpy(szBuffer, "");
|
|
int iNumber =m_oRichEditRes.GetLine(k, szBuffer, 100);
|
|
if (iNumber<=2)
|
|
strcpy(szBuffer, "");
|
|
else
|
|
szBuffer[iNumber-1]='\0';
|
|
fputs(szBuffer, fileW);
|
|
fputs("\n", fileW);
|
|
}
|
|
m_nIndexLast = nIndex;
|
|
|
|
fputs("*****************************************************\n", fileW);
|
|
fputs("\n", fileW);
|
|
fputs("\n", fileW);
|
|
fclose (fileW);
|
|
|
|
SetCurrentDirectory(sDirectory);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//==================================================//
|
|
// USE FILE LIST //
|
|
//==================================================//
|
|
|
|
/****************************************************************************
|
|
* Description: Read the objects from the .ini file and select them in the second list box
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* p_oType : type of objects
|
|
* bTwo : flag for type selection
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vReadIniFile(char *szName, GI_Type *p_oType, BOOL bTwo)
|
|
{
|
|
int file, j;
|
|
int iNbSel, i, iIndex;
|
|
char szSel[30][20];
|
|
char sName[20], sFileName[20];
|
|
FILE *fileR;
|
|
GI_Item *p_oItem;
|
|
xString sDirectory, sRead, sDir;
|
|
|
|
GetCurrentDirectory(256, sDirectory);
|
|
m_fn_vSelectDir(sDir, szName);
|
|
|
|
strcpy(sFileName, szName);
|
|
strcat(sFileName, ".ini");
|
|
|
|
fileR = fopen(sFileName, "rt");
|
|
i=0;
|
|
|
|
if (!fileR)
|
|
{
|
|
SetCurrentDirectory(sDirectory);
|
|
if (AfxMessageBox( "There is no .ini file for the selected type", MB_OK))
|
|
return;
|
|
}
|
|
char * sNb;
|
|
|
|
switch (g_iData)
|
|
{
|
|
case 0:
|
|
while((fgets(sRead, 256, fileR) != NULL) && strstr(sRead, "[GameData]") );
|
|
if (strstr(sRead, "\n"))
|
|
sRead[strlen(sRead)-1]='\0';
|
|
strcpy(szSel[i], sRead);
|
|
i++;
|
|
break;
|
|
case 1:
|
|
sNb = fgets(sRead, 256, fileR);
|
|
while((sNb != NULL) && !strstr(sRead, "[GameSpecific1]") )
|
|
fgets(sRead, 256, fileR);
|
|
break;
|
|
case 2:
|
|
sNb = fgets(sRead, 256, fileR);
|
|
while((sNb != NULL) && !strstr(sRead, "[GameSpecific2]") )
|
|
fgets(sRead, 256, fileR);
|
|
break;
|
|
}
|
|
if (strstr(sRead, "[GameSpecific1]") && !g_iData)
|
|
{
|
|
AfxMessageBox( "The .ini file for the selected type doesn't contain any selected objects. Please, use Build File List or Add to File List options!", MB_OK);
|
|
fclose(fileR);
|
|
SetCurrentDirectory(sDirectory);
|
|
return;
|
|
}
|
|
|
|
while( fgets(sRead, 256, fileR) != NULL)
|
|
{
|
|
if (strstr(sRead, "[GameSpecific1]"))
|
|
break;
|
|
if (strstr(sRead, "[GameSpecific2]"))
|
|
break;
|
|
if (strstr(sRead, "\n"))
|
|
sRead[strlen(sRead)-1]='\0';
|
|
strcpy(szSel[i], sRead);
|
|
i++;
|
|
}
|
|
iNbSel=i;
|
|
if (!iNbSel)
|
|
AfxMessageBox( "The .ini file for the selected type doesn't contain any selected objects. Please, use Build File List or Add to File List options!", MB_OK);
|
|
|
|
fclose(fileR);
|
|
|
|
SetCurrentDirectory(sDirectory);
|
|
|
|
if (bTwo)
|
|
{
|
|
iIndex= m_oListType->FindStringExact( -1, szName );
|
|
m_oListType->SetCurSel(iIndex);
|
|
OnSelchangeListType() ;
|
|
}
|
|
|
|
j=0;
|
|
for (i=0; i<iNbSel; i++)
|
|
{
|
|
iIndex= m_oListObject->FindStringExact( -1, szSel[i] );
|
|
if (iIndex == LB_ERR)
|
|
{
|
|
j++;
|
|
continue;
|
|
}
|
|
p_oItem = (GI_Item *)m_oListObject->GetItemData( iIndex );
|
|
if (!p_oItem->m_bActived)
|
|
{
|
|
p_oType->m_iSelected++;
|
|
m_iCountOfSelections++;
|
|
}
|
|
p_oItem->m_bActived = TRUE;
|
|
}
|
|
if (g_bStandardConfig)
|
|
if (j==iNbSel && j)
|
|
AfxMessageBox( "The .ini file contains only objects that cannot be found in rawdata directory!", MB_OK);
|
|
|
|
m_fn_vEnableButtonAll();
|
|
m_fn_vEnableButtonConvert();
|
|
if (p_oType->m_iSelected==m_oListObject->GetCount())
|
|
m_oSelectList.EnableWindow(FALSE);
|
|
else
|
|
m_oSelectList.EnableWindow(TRUE);
|
|
if (p_oType->m_iSelected>0)
|
|
m_oClearList.EnableWindow(TRUE);
|
|
else
|
|
m_oClearList.EnableWindow(FALSE);
|
|
// g_bGenerateRLI = FALSE;
|
|
|
|
if (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
|
|
{
|
|
p_oItem = m_p_oTypeBanks->m_oList.GetHead();
|
|
POSITION pos= m_p_oTypeBanks->m_oList.GetHeadPosition( );
|
|
|
|
for (i=0; i<m_p_oTypeBanks->m_oList.GetCount(); i++)
|
|
{
|
|
// add the objects in the list box with objects
|
|
if (p_oItem->m_bActived)
|
|
{
|
|
if (g_bStandardConfig)
|
|
sprintf(sName, "%s\\World\\Graphics\\Objects\\Banks\\%s.spo", g_stInitialData.szRawData, p_oItem->m_szName);
|
|
else
|
|
sprintf(sName, "%s\\%s.spo", g_szBanks, p_oItem->m_szName);
|
|
if ((file = open(sName, O_RDONLY))!=-1)
|
|
{
|
|
g_bGenerateRLI = TRUE;
|
|
close(file);
|
|
}
|
|
}
|
|
if (pos) m_p_oTypeBanks->m_oList.GetNext( pos );
|
|
}
|
|
}
|
|
|
|
if ((m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected && g_bGenerateRLI)||(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected))
|
|
m_oCheckGenerateRLI.EnableWindow(TRUE);
|
|
else
|
|
m_oCheckGenerateRLI.EnableWindow(FALSE);
|
|
|
|
if (bTwo)
|
|
{
|
|
m_oListType->SetCurSel(0);
|
|
OnSelchangeListType();
|
|
}
|
|
m_oListObject->Invalidate(TRUE);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Search the .ini file for an object specified.
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
BOOL CDlgMain::m_fn_bSearchInFile(char *szName, char *szObject)
|
|
{
|
|
char sFileName[20], *sNb;
|
|
FILE *fileR;
|
|
xString sDirectory, sRead, sDir;
|
|
|
|
GetCurrentDirectory(256, sDirectory);
|
|
m_fn_vSelectDir(sDir, szName);
|
|
|
|
strcpy(sFileName, szName);
|
|
strcat(sFileName, ".ini");
|
|
|
|
fileR = fopen(sFileName, "rt");
|
|
|
|
if (!fileR)
|
|
{
|
|
SetCurrentDirectory(sDirectory);
|
|
return FALSE;
|
|
}
|
|
|
|
switch (g_iData)
|
|
{
|
|
case 0:
|
|
while((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "[GameSpecific1]") )
|
|
{
|
|
sRead[strlen(sRead)-1]='\0';
|
|
if (!strcmp(sRead, szObject))
|
|
{ fclose(fileR);
|
|
SetCurrentDirectory(sDirectory);
|
|
return TRUE;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
while((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "[GameSpecific1]"));
|
|
sNb = fgets(sRead, 256, fileR);
|
|
while((sNb != NULL) && !strstr(sRead, "[GameSpecific2]") )
|
|
{
|
|
sRead[strlen(sRead)-1]='\0';
|
|
if (!strcmp(sRead, szObject))
|
|
{ fclose(fileR);
|
|
SetCurrentDirectory(sDirectory);
|
|
return TRUE;
|
|
}
|
|
sNb = fgets(sRead, 256, fileR);
|
|
}
|
|
break;
|
|
case 2:
|
|
while((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "[GameSpecific2]"));
|
|
while(fgets(sRead, 256, fileR) != NULL)
|
|
{
|
|
sRead[strlen(sRead)-1]='\0';
|
|
if (!strcmp(sRead, szObject))
|
|
{ fclose(fileR);
|
|
SetCurrentDirectory(sDirectory);
|
|
return TRUE;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
fclose(fileR);
|
|
SetCurrentDirectory(sDirectory);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Set the objects selected in the .ini file specified.
|
|
*
|
|
* Parameters: szName : name of the directory
|
|
* szObject : object to search
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSetFromFileList(char *szName, char *szObject)
|
|
{
|
|
if (!stricmp(szName, "All"))
|
|
{
|
|
int iIndex = m_oListType->FindString(-1, szObject);
|
|
if (iIndex==LB_ERR)
|
|
if (AfxMessageBox( "There is nothing to convert! Please, choose another type of object for conversion", MB_OK))
|
|
return;
|
|
GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
|
|
m_fn_vSelectAllInList(p_oType, TRUE);
|
|
}
|
|
|
|
if (!stricmp(szName, "fList"))
|
|
{
|
|
int iIndex = m_oListType->FindString(-1, szObject);
|
|
if (iIndex==LB_ERR)
|
|
if (AfxMessageBox( "There is nothing to convert! Please, choose another type of object for conversion", MB_OK))
|
|
return;
|
|
GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData( iIndex );
|
|
char szName[20];
|
|
strcpy(szName, p_oType -> m_fn_p_oGetName());
|
|
m_fn_vReadIniFile(szName, p_oType, 1);
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
* Description: Set the objects selected in the .ini file specified.
|
|
*
|
|
* Parameters: sDir : returs directory
|
|
* szName : type name
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*****************************************************************************/
|
|
void CDlgMain::m_fn_vSelectDir(xString sDir, char *szName)
|
|
{
|
|
|
|
if (g_bStandardConfig)
|
|
{
|
|
switch (g_iRaw)
|
|
{
|
|
case 0:
|
|
if (!strcmp(szName, "Anims")|| !strcmp(szName, "Textures"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\%s\\", g_stInitialData.szRawData, szName);
|
|
if (!strcmp(szName, "Banks") || !strcmp(szName, "Classes"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\Objects\\%s\\", g_stInitialData.szRawData, szName);
|
|
if (!strcmp(szName, "Families") || !strcmp(szName, "Levels"))
|
|
sprintf(sDir, "%s\\World\\%s\\", g_stInitialData.szRawData, szName);
|
|
SetCurrentDirectory(sDir);
|
|
break;
|
|
|
|
case 1:
|
|
if (!strcmp(szName, "Anims")|| !strcmp(szName, "Textures"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\%s\\", g_stInitialData.szRawSpecific1, szName);
|
|
if (!strcmp(szName, "Banks") || !strcmp(szName, "Classes"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\Objects\\%s\\", g_stInitialData.szRawSpecific1, szName);
|
|
if (!strcmp(szName, "Families") || !strcmp(szName, "Levels"))
|
|
sprintf(sDir, "%s\\World\\%s\\", g_stInitialData.szRawSpecific1, szName);
|
|
SetCurrentDirectory(sDir);
|
|
break;
|
|
|
|
case 2:
|
|
if (!strcmp(szName, "Anims")|| !strcmp(szName, "Textures"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\%s\\", g_stInitialData.szRawSpecific2, szName);
|
|
if (!strcmp(szName, "Banks") || !strcmp(szName, "Classes"))
|
|
sprintf(sDir, "%s\\World\\Graphics\\Objects\\%s\\", g_stInitialData.szRawSpecific2, szName);
|
|
if (!strcmp(szName, "Families") || !strcmp(szName, "Levels"))
|
|
sprintf(sDir, "%s\\World\\%s\\", g_stInitialData.szRawSpecific2, szName);
|
|
SetCurrentDirectory(sDir);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{ if (!strcmp(szName, "Anims"))
|
|
sprintf(sDir, "%s\\", g_szAnims);
|
|
if (!strcmp(szName, "Banks"))
|
|
sprintf(sDir, "%s\\", g_szBanks);
|
|
if (!strcmp(szName, "Classes"))
|
|
sprintf(sDir, "%s\\", g_szClasses);
|
|
if (!strcmp(szName, "Families"))
|
|
sprintf(sDir, "%s\\", g_szFamilies);
|
|
if (!strcmp(szName, "Levels"))
|
|
sprintf(sDir, "%s\\", g_szLevels);
|
|
if (!strcmp(szName, "Textures"))
|
|
sprintf(sDir, "%s\\", g_szTextures);
|
|
SetCurrentDirectory(sDir);
|
|
}
|
|
}
|
|
|
|
|