reman3/Rayman_X/cpa/Appli/Max23Dos/Win_M23D/src/DlgMain1.cpp

2739 lines
86 KiB
C++

/*=========================================================================
*
* DlgMain1.cpp - implementation file for main window class
* Dialog functions
*
* Version 1.0
* Revision date
*
*=======================================================================*/
#include <io.h>
#include "stdafx.h"
#include "DlgMain.h"
#include "print.h"
#include "main.h"
#include "system.h"
#include "Help.h"
#include "IniData.h"
#include "resource.hm"
char g_szAnims[255];
char g_szBanks[255];
char g_szClasses[255];
char g_szFamilies[255];
char g_szLevels[255];
char g_szTextures[255];
extern "C"
{
BOOL g_bStandardConfig = TRUE;
}
//==================================================//
// HELP //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on IDC_BUTTON_HELP button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckHelp()
{
CButton *p_oCheck = ((CButton *) GetDlgItem (IDC_BUTTON_HELP));
RECT stRect;
CMenu oMenu;
oMenu.CreatePopupMenu();
oMenu.AppendMenu( MF_STRING | MF_ENABLED, IDM_ABOUTBOX, "About ...");
oMenu.AppendMenu( MF_STRING | MF_ENABLED, IDM_OPENHELP, "Help");
p_oCheck->GetWindowRect(&stRect);
oMenu.TrackPopupMenu( TPM_LEFTBUTTON, stRect.left, stRect.bottom, this );
oMenu.DestroyMenu();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on IDM_OPENHELP entry
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnHelp()
{
xString sDirectory;
int nPanel;
// set directory
GetCurrentDirectory(256, sDirectory);
SetCurrentDirectory(g_sInitialDir);
// get the current panel
nPanel = m_oMainPanel.GetCurSel();
switch(nPanel)
{
// the "Options" panel
case 0:
::WinHelp(this->GetSafeHwnd(), C_szMainHelpFile, HELP_CONTEXT, ID_USAGE_PATHS );
break;
// the "Selection" panel
case 1:
::WinHelp(this->GetSafeHwnd(), C_szMainHelpFile, HELP_CONTEXT, ID_USAGE_SELECTION );
break;
// the "Result" panel
case 2:
::WinHelp(this->GetSafeHwnd(), C_szMainHelpFile, HELP_CONTEXT, ID_USAGE_CONVERSION );
break;
}
SetCurrentDirectory(sDirectory);
}
/****************************************************************************
* Description: Handle function for message WM_HELPINFO
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
BOOL CDlgMain::OnHelpInfo(HELPINFO* pHelpInfo)
{
// AfxGetApp()->WinHelp(pHelpInfo->dwContextId, HELP_CONTEXTPOPUP);
OnHelp();
return TRUE;
}
//==================================================//
// CHANGE PANEL //
//==================================================//
/****************************************************************************
* Description: Handle function for message TCN_SELCHANGE on main panel
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSelchangePanel(NMHDR* pNMHDR, LRESULT* pResult)
{
// get current panel
int nPanel = m_oMainPanel.GetCurSel();
// check data validity before changing
BOOL bResult = m_fn_vTestIniDatas();
// get the current panel and for it show only its controls
switch(nPanel)
{
// "Options" panel
case 0:
m_fn_TabC_vShowControlsPanelDir() ;
break;
// "Selection" panel
case 1:
if (bResult)
{
m_fn_TabC_vShowControlsPanelDir() ;
m_oMainPanel.SetCurSel(0);
}
else
m_fn_TabC_vShowControlsPanelSel() ;
break;
// "Result" panel
case 2:
if (bResult)
{
m_fn_TabC_vShowControlsPanelDir() ;
m_oMainPanel.SetCurSel(0);
}
else
m_fn_TabC_vShowControlsPanelRes() ;
break;
}
*pResult = 0;
}
/****************************************************************************
* Description: Handle function for message TCN_SELCHANGE on config panel
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
// get current panel
int nPanel = m_oConfigPanel.GetCurSel();
// get the current panel and for it show only its controls
switch(nPanel)
{
// "Current" panel
case 0:
if (m_bConversion)
{
m_fn_vShowControlsPanelCustom() ;
g_bStandardConfig = FALSE;
m_oConfigPanel.SetCurSel(1);
}
else
{
m_fn_vShowControlsPanelCurrent();
g_bStandardConfig = TRUE;
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
}
break;
// "Custom" panel
case 1:
if (m_bConversion)
{
m_fn_vShowControlsPanelCurrent() ;
g_bStandardConfig = TRUE;
m_oConfigPanel.SetCurSel(0);
}
else
{
m_fn_vShowControlsPanelCustom();
g_bStandardConfig = FALSE;
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
}
break;
}
*pResult = 0;
}
//==================================================//
// RENAME DIRECTORIES //
//==================================================//
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on edit box Game Specific1
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusGameSpecific1()
{
char szName[15];
m_oEditGameSp1.GetWindowText(szName, 14);
if (strcmp(szName, ""))
{
fn_IniData_vSetGameSp1(szName);
strcpy(g_stInitialData.szGameSp1, szName);
}
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on edit box Game Specific2
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusGameSpecific2()
{
char szName[15];
m_oEditGameSp2.GetWindowText(szName, 14);
if (strcmp(szName, ""))
{
fn_IniData_vSetGameSp2(szName);
strcpy(g_stInitialData.szGameSp2, szName);
}
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on edit box Raw Specific1
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusRawSpecific1()
{
char szName[15];
m_oEditRawSp1.GetWindowText(szName, 14);
if (strcmp(szName, ""))
{
fn_IniData_vSetRawSp1(szName);
strcpy(g_stInitialData.szRawSp1, szName);
}
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on edit box Raw Specific2
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusRawSpecific2()
{
char szName[15];
m_oEditRawSp2.GetWindowText(szName, 14);
if (strcmp(szName, ""))
{
fn_IniData_vSetRawSp2(szName);
strcpy(g_stInitialData.szRawSp2, szName);
}
}
//==================================================//
// CHOOSE DIRECTORIES //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameData radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckGameData()
{
if (m_oCheckGameData.GetCheck())
{
m_oCheckGameData.SetCheck(1);
m_oCheckGameSP1.SetCheck(0);
m_oCheckGameSP2.SetCheck(0);
g_iData = 0;
m_fn_vResetSelection() ;
fn_ComRes_vDeleteLines( &m_oRichEditCom);
fn_ComRes_vDeleteLines( &m_oRichEditRes);
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameSpecific1 radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckGameSpecific1()
{
if (m_oCheckGameSP1.GetCheck())
{
if (strcmp(g_stInitialData.szGameSpecific1, ""))
{
m_oCheckGameSP1.SetCheck(1);
m_oCheckGameData.SetCheck(0);
m_oCheckGameSP2.SetCheck(0);
g_iData=1;
}
else
{
m_oCheckGameSP1.SetCheck(0);
m_oCheckGameSP2.SetCheck(0);
m_oCheckGameData.SetCheck(1);
g_iData=0;
}
}
m_fn_vResetSelection() ;
fn_ComRes_vDeleteLines( &m_oRichEditCom);
fn_ComRes_vDeleteLines( &m_oRichEditRes);
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameSpecific2 radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckGameSpecific2()
{
if (m_oCheckGameSP2.GetCheck())
{
if (strcmp(g_stInitialData.szGameSpecific2, ""))
{
m_oCheckGameSP2.SetCheck(1);
m_oCheckGameData.SetCheck(0);
m_oCheckGameSP1.SetCheck(0);
g_iData=2;
}
else
{
m_oCheckGameSP1.SetCheck(0);
m_oCheckGameSP2.SetCheck(0);
m_oCheckGameData.SetCheck(1);
g_iData=0;
}
}
m_fn_vResetSelection() ;
fn_ComRes_vDeleteLines( &m_oRichEditCom);
fn_ComRes_vDeleteLines( &m_oRichEditRes);
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawData radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckRawData()
{
if (m_oCheckRawData.GetCheck())
{
m_oCheckRawData.SetCheck(1);
m_oCheckRawSP1.SetCheck(0);
m_oCheckRawSP2.SetCheck(0);
g_iRaw = 0;
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;
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawSpecific1 radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckRawSpecific1()
{
if (m_oCheckRawSP1.GetCheck())
{
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();
if (strcmp(g_stInitialData.szRawSpecific1, ""))
{ m_oCheckRawSP1.SetCheck(1);
m_oCheckRawData.SetCheck(0);
m_oCheckRawSP2.SetCheck(0);
g_iRaw=1;
}
else
{ m_oCheckRawSP1.SetCheck(0);
m_oCheckRawSP2.SetCheck(0);
m_oCheckRawData.SetCheck(1);
g_iRaw=0;
}
m_fn_vUpdateAll();
//reset the total number of selections
m_iCountOfSelections = 0;
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawSpecific2 radio button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckRawSpecific2()
{
if (m_oCheckRawSP2.GetCheck())
{
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();
if (strcmp(g_stInitialData.szRawSpecific2, ""))
{
m_oCheckRawSP2.SetCheck(1);
m_oCheckRawData.SetCheck(0);
m_oCheckRawSP1.SetCheck(0);
g_iRaw=2;
}
else
{
m_oCheckRawSP2.SetCheck(0);
m_oCheckRawSP1.SetCheck(0);
m_oCheckRawData.SetCheck(1);
g_iRaw=0;
}
m_fn_vUpdateAll();
//reset the total number of selections
m_iCountOfSelections = 0;
if (!g_iData && !g_bAskFamily)
m_oCheckCommon.EnableWindow(TRUE);
if (g_iData && !g_bAskFamily)
m_oCheckSpecific.EnableWindow(TRUE);
m_fn_vUpdateForSelectConfig();
}
}
//==================================================//
// BROWSE DIRECTORIES //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameData Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseGameData()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// if the new directory is different to the initial one
if (strcmp(szPath, g_stInitialData.szGameData))
{
char szPathAux1[ MAX_PATH ];
char szPathAux2[ MAX_PATH ];
char _szMessage[50];
strcpy(szPathAux1, szPath);
strcpy(szPathAux2, szPath);
// in the directory GameData there must be sub-directories
if (!m_fn_bExistDirectories(szPath))
{
sprintf( _szMessage,"Error : You have to select another GameData directory, because it does not contain any directories (It should contain the Texture and Default sub-directories)!");
AfxMessageBox( _szMessage, MB_OK | MB_ICONSTOP );
strcpy (szPath, "");
}
// see if in the new path exist the last sub-directories
if (!(szPathAux1[strlen(szPathAux1)-1]=='\\'))
strcat(szPathAux1, "\\");
strcat(szPathAux1, g_stInitialData.szTextures);
if (!(szPathAux2[strlen(szPathAux2)-1]=='\\'))
strcat(szPathAux2, "\\");
strcat(szPathAux2, g_stInitialData.szDefault);
}
// set that path for the Game Data directory
fn_IniData_vSetGameData( szPath );
strcpy(g_stInitialData.szGameData, szPath);
GetDlgItem( IDC_EDIT_GAMEDATA )->SetWindowText( szPath );
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameSpecific1 Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseGameSpecific1()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// set that path for the Game Specific1 directory
fn_IniData_vSetGameSpecific1( szPath );
strcpy(g_stInitialData.szGameSpecific1, szPath);
GetDlgItem( IDC_EDIT_GAMESPECIFIC1 )->SetWindowText( szPath );
if (strcmp(g_stInitialData.szGameSpecific1, ""))
m_oCheckGameSP1.EnableWindow(TRUE);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on GameSpecific2 Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseGameSpecific2()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// set that path for the Game Specific2 directory
fn_IniData_vSetGameSpecific2( szPath );
strcpy(g_stInitialData.szGameSpecific2, szPath);
GetDlgItem( IDC_EDIT_GAMESPECIFIC2 )->SetWindowText( szPath );
if (strcmp(g_stInitialData.szGameSpecific2, ""))
m_oCheckGameSP2.EnableWindow(TRUE);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawData Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseRawData()
{
char szPath[ MAX_PATH ];
int i;
if (m_iCountOfSelections)
{
char _szMessage[50];
sprintf( _szMessage, "In the RawData directory there are some selections made. Do you want to loose this selections by changing the directory?\n");
if (AfxMessageBox( _szMessage, MB_YESNO | MB_ICONQUESTION) == IDNO)
return;
}
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// set that path for the Raw Data directory
fn_IniData_vSetRawData( szPath );
strcpy(g_stInitialData.szRawData, szPath);
GetDlgItem( IDC_EDIT_RAWDATA )->SetWindowText( szPath );
//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;
m_fn_vUpdateForSelectConfig();
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawSpecific1 Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseRawSpecific1()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// set that path for the Game Specific1 directory
fn_IniData_vSetRawSpecific1( szPath );
strcpy(g_stInitialData.szRawSpecific1, szPath);
GetDlgItem( IDC_EDIT_RAWSPECIFIC1 )->SetWindowText( szPath );
if (strcmp(g_stInitialData.szRawSpecific1, ""))
m_oCheckRawSP1.EnableWindow(TRUE);
//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;
m_fn_vUpdateForSelectConfig();
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on RawSpecific2 Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseRawSpecific2()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
// set that path for the Game Specific2 directory
fn_IniData_vSetRawSpecific2( szPath );
strcpy(g_stInitialData.szRawSpecific2, szPath);
GetDlgItem( IDC_EDIT_RAWSPECIFIC2 )->SetWindowText( szPath );
if (strcmp(g_stInitialData.szRawSpecific2, ""))
m_oCheckRawSP2.EnableWindow(TRUE);
//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;
m_fn_vUpdateForSelectConfig();
}
}
//==================================================//
// DIRECTORY CONFIGURATION //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on button Create for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCreateConfigDir()
{
if (g_bChangeComboDir && g_iCurrentIndexDir)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before creating a new one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigDir();
break;
case IDNO:
g_bChangeComboDir = FALSE;
break;
case IDCANCEL:
m_oComboChooseDir.SetCurSel(g_iCurrentIndexDir);
return;
}
}
m_oButtonCreateDir.ShowWindow(FALSE);
m_oEditCreateDir.ShowWindow(TRUE);
m_oEditCreateDir.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on button Register for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnRegisterConfigDir()
{
m_oButtonRegisterDir.ShowWindow(FALSE);
m_oEditRegisterDir.ShowWindow(TRUE);
m_oEditRegisterDir.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on button Save for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSaveConfigDir()
{
int i = m_oComboChooseDir.GetCurSel();
xString szDir1;
if (i!=-1)
{ //save the directories for the new config
GetCurrentDirectory( MAX_PATH, szDir1 );
SetCurrentDirectory( g_szInitialDirectory );
GetCurrentDirectory( MAX_PATH, g_szIniConfDirFile );
if (g_szIniConfDirFile[strlen(g_szIniConfDirFile) - 1] != '\\')
strcat( g_szIniConfDirFile, "\\");
strcat( g_szIniConfDirFile, C_szIniConfDirFile );
SetCurrentDirectory( szDir1 );
g_bChangeComboDir = FALSE;
m_fn_vRegisterAllPaths(i);
xString szPath;
strcpy(szPath, "");
for (int i=1; i<g_iNbConfDirs-1; i++)
{
strcat(szPath, g_szConfDirs[i]);
strcat(szPath, ",");
}
if (g_iNbConfDirs) //!!!
strcat(szPath, g_szConfDirs[g_iNbConfDirs-1]);
fn_IniData_vSetConfigDirNames( szPath );
strcpy(g_stInitialData.szConfDirs, szPath);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on button Delete for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnDeleteConfigDir()
{
xString szPath;
FILE *fileR, *fileW;
xString szFind, szOld, sRead;
int j;
strcpy(szPath, "");
int i = m_oComboChooseDir.GetCurSel();
if (i != -1)
{
m_oComboChooseDir.GetLBText( i, szOld );
m_oComboChooseDir.DeleteString(i);
}
g_iNbConfDirs--;
for (j=i; j<g_iNbConfDirs; j++)
strcpy(g_szConfDirs[j], g_szConfDirs[j+1]);
strcpy(szPath, "");
for (j=1; j<g_iNbConfDirs-1; j++)
{
strcat(szPath, g_szConfDirs[j]);
strcat(szPath, ",");
}
if (g_iNbConfDirs)
strcat(szPath, g_szConfDirs[g_iNbConfDirs-1]);
fn_IniData_vSetConfigDirNames( szPath );
// if necessary, init config file
if (strlen(g_szIniConfDirFile) == 0)
{
GetCurrentDirectory(MAX_PATH, g_szIniConfDirFile);
if (g_szIniConfDirFile[strlen(g_szIniConfDirFile) - 1] != '\\')
strcat( g_szIniConfDirFile, "\\");
strcat( g_szIniConfDirFile, C_szIniConfDirFile );
}
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfDirFile, "r");
if (fileR)
{
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL)
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "["));
if (!feof(fileR)) fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL))
fputs( sRead, fileW);
fclose(fileR);
fclose(fileW);
remove(g_szIniConfDirFile);
MoveFile("New.ini", g_szIniConfDirFile);
}
m_oComboChooseDir.SetCurSel(0);
g_iCurrentIndexDir = 0;
m_fn_vSetDefaultDirConfig();
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
g_bChangeComboDir = FALSE;
}
/****************************************************************************
* Description: Handle function for message CBN_SELCHANGE on ComboBox for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnChooseConfigDir()
{
char szDir1[_MAX_PATH];
if (g_bChangeComboDir && g_iCurrentIndexDir)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before choosing another one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigDir();
break;
case IDNO:
g_bChangeComboDir = FALSE;
break;
case IDCANCEL:
m_oComboChooseDir.SetCurSel(g_iCurrentIndexDir);
return;
}
}
g_iCurrentIndexDir = m_oComboChooseDir.GetCurSel();
if (g_iCurrentIndexDir)
{
if (strcmp(g_stInitialData.szConfDirs, ""))
{
GetCurrentDirectory( MAX_PATH, szDir1 );
SetCurrentDirectory( g_szInitialDirectory );
//read the Configs.ini file
fn_IniData_vGetDatasFromConfigDirsFile( TRUE, g_szConfDirs[g_iCurrentIndexDir] );
m_fn_vUpdateDirectories() ;
SetCurrentDirectory( szDir1 );
m_fn_vResetSelection();
}
}
else
m_fn_vSetDefaultDirConfig();
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Register EditBox for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditCreateConfigDir()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditCreateDir.GetWindowText(szName, 14);
m_oEditCreateDir.ShowWindow(FALSE);
if (m_oConfigPanel.GetCurSel() && !m_oMainPanel.GetCurSel())
m_oButtonCreateDir.ShowWindow(TRUE);
i = m_oComboChooseDir.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseDir.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseDir.AddString(szName);
m_oComboChooseDir.SetCurSel(i);
g_iCurrentIndexDir = i;
OnChooseConfigDir();
g_bChangeComboDir = TRUE;
g_iNbConfDirs++;
strcpy(g_szConfDirs[g_iNbConfDirs-1], szName);
}
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Register EditBox for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditRegisterConfigDir()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditRegisterDir.GetWindowText(szName, 14);
m_oEditRegisterDir.ShowWindow(FALSE);
if (m_oConfigPanel.GetCurSel() && !m_oMainPanel.GetCurSel())
m_oButtonRegisterDir.ShowWindow(TRUE);
i = m_oComboChooseDir.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseDir.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseDir.AddString(szName);
m_oComboChooseDir.SetCurSel(i);
g_iCurrentIndexDir = i;
g_bChangeComboDir = TRUE;
g_iNbConfDirs++;
strcpy(g_szConfDirs[g_iNbConfDirs-1], szName);
}
OnSaveConfigDir();
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
}
/****************************************************************************
* Description: Handle function for message CBN_KILLFOCUS on ComboBox for DirConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusComboChooseConfigDir()
{
char szName[15];
FILE *fileR, *fileW;
xString szFind, sRead, szOld;
strcpy(szName, "");
strcpy(szOld, "");
m_oComboChooseDir.GetLBText( g_iCurrentIndexDir, szOld );
m_oComboChooseDir.GetWindowText( szName, 25 );
if (!strcmp(szName, szOld))
return;
if (strcmp(szName, ""))
{
xString szPath;
int j1 = m_oComboChooseDir.FindStringExact( -1, szName);
if (j1 != CB_ERR)
{
AfxMessageBox( "The configuration already exists or you gave the same name for it. Please select another name!", MB_OK | MB_ICONSTOP );
m_oComboChooseDir.SetCurSel(g_iCurrentIndexDir);
return; //if the string exists do nothing
}
if (g_iCurrentIndexDir)
{
if (g_iCurrentIndexDir != -1)
m_oComboChooseDir.DeleteString(g_iCurrentIndexDir);
m_oComboChooseDir.InsertString(g_iCurrentIndexDir, szName);
m_oComboChooseDir.SetCurSel(g_iCurrentIndexDir);
strcpy(g_szConfDirs[g_iCurrentIndexDir], szName);
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfDirFile, "r");
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL)
{
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
}
fputs("[", fileW);
fputs(szName, fileW);
fputs("]\n", fileW);
while (!feof(fileR))
{ fgets(sRead, 256, fileR);
if (!feof(fileR)) fputs( sRead, fileW);
}
fclose(fileR);
fclose(fileW);
remove(g_szIniConfDirFile);
MoveFile("New.ini", g_szIniConfDirFile);
}
else
{
m_oComboChooseDir.AddString(szName);
m_oComboChooseDir.SetCurSel(m_oComboChooseDir.GetCount() - 1);
g_iCurrentIndexDir = m_oComboChooseDir.GetCount() - 1;
g_iNbConfDirs++;
strcpy(g_szConfDirs[g_iNbConfDirs-1], szName);
m_oButtonSaveDir.EnableWindow(g_iCurrentIndexDir);
m_oButtonDeleteDir.EnableWindow(g_iCurrentIndexDir);
}
strcpy(szPath, "");
for (int j=1; j<g_iNbConfDirs-1; j++)
{
strcat(szPath, g_szConfDirs[j]);
strcat(szPath, ",");
}
if (g_iNbConfDirs) //!!!
strcat(szPath, g_szConfDirs[g_iNbConfDirs-1]);
fn_IniData_vSetConfigDirNames( szPath );
//add the new name section in the .ini file
m_fn_vRegisterAllPaths(g_iCurrentIndexDir);
}
}
//==================================================//
// BROWSE CUSTOM DIRECTORIES //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Anims Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseAnims()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_ANIMS )->SetWindowText( szPath );
strcpy(g_szAnims, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Banks Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseBanks()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_BANKS )->SetWindowText( szPath );
strcpy(g_szBanks, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Classes Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseClasses()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_CLASSES )->SetWindowText( szPath );
strcpy(g_szClasses, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Families Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseFamilies()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_FAMILIES )->SetWindowText( szPath );
strcpy(g_szFamilies, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Levels Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseLevels()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_LEVELS )->SetWindowText( szPath );
strcpy(g_szLevels, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Textures Browse button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnButtonBrowseTextures()
{
char szPath[ MAX_PATH ];
int i;
// prepare the structure for the browsing
m_fn_vBrowseDirectory(szPath, &i, NULL);
if (i)
{
GetDlgItem( IDC_EDIT_TEXTURES )->SetWindowText( szPath );
strcpy(g_szTextures, szPath);
m_fn_vResetSelection();
m_fn_vUpdateForSelectConfig();
g_bChangeComboDir = (g_iCurrentIndexDir != 0);
}
}
//==================================================//
// MAIN OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Rayman2 option
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnRayman2()
{
g_bRaymanII = m_oCheckRayman2.GetCheck();
m_oCheckSctMax.EnableWindow(g_bRaymanII);
m_oCheckSctEds.EnableWindow(g_bRaymanII);
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on ModifLst option
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnModifLst()
{
g_bModifLst = m_oCheckModifLst.GetCheck();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on EraseMdf option
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnEraseMdf()
{
g_bEraseMdf = m_oCheckEraseMdf.GetCheck();
}
//==================================================//
// LIST BOX FUNCTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message LBN_SELCHANGE in Type listbox
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSelchangeListType()
{
GI_Type *p_oType;
char szPath[ MAX_PATH ];
char szName[20];
int iIndex;
//reset the contents of the list box with objects
m_oListObject->ResetContent();
iIndex = m_oListType->GetCurSel();
if (iIndex != LB_ERR)
{
m_oListType->GetText(iIndex, szPath);
p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
}
else
p_oType = NULL;
// update the list of objects corresponding to the type selected
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");
// enable/disable the selection buttons corresponding with the current selections
if(!m_bConversion)
{
if (p_oType && p_oType->m_iSelected==m_oListObject->GetCount())
m_oSelectList.EnableWindow(FALSE);
else
m_oSelectList.EnableWindow(TRUE);
if (p_oType && p_oType->m_iSelected>0)
m_oClearList.EnableWindow(TRUE);
else
m_oClearList.EnableWindow(FALSE);
}
iIndex = m_oListType->GetCurSel();
if (iIndex!=LB_ERR)
{
p_oType = (GI_Type *)m_oListType->GetItemData( iIndex );
strcpy(szName, p_oType -> m_fn_p_oGetName());
}
}
int gs_iRefIndex = -1;
/****************************************************************************
* Description: Handle function for message WM_LBUTTONDOWN in Object listbox
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
BOOL CDlgMain::OnLButtonDownListBoxObject(MSG *pMsg)
{
CListBox *pLB = m_oListObject;
POINT xPos;
CRect oRect;
BOOL bOutside;
int iIndex;
BOOL bResult = TRUE;
if( !m_bConversion)
{
// get the x and y coordinates
xPos.x = LOWORD(pMsg->lParam);
xPos.y = HIWORD(pMsg->lParam);
iIndex = pLB -> ItemFromPoint ( xPos, bOutside ) ;
if (!(pMsg->wParam & MK_SHIFT))
gs_iRefIndex = iIndex;
pLB -> GetItemRect ( iIndex , &oRect ) ;
// determine the object under the cursor in front of which the user clicked
GI_Item *p_oItem = (GI_Item*) pLB->GetItemData( iIndex );
ASSERT( p_oItem ) ;
// and if the user click in front change the activation (validate/invalidate the activation).
if ((pMsg->wParam & MK_SHIFT) && (gs_iRefIndex != iIndex) && (gs_iRefIndex != -1))
{
GI_Item *p_oRefItem = (GI_Item*) pLB->GetItemData(gs_iRefIndex);
int iMidIndex;
if (gs_iRefIndex < iIndex)
{
for (iMidIndex = gs_iRefIndex + 1; iMidIndex <= iIndex; iMidIndex++)
{
GI_Item *p_oMidItem = (GI_Item*) pLB->GetItemData(iMidIndex);
if (p_oMidItem->m_bActived != p_oRefItem->m_bActived)
m_fn_bOnChangeActivation(p_oMidItem, iMidIndex);
}
}
else
{
for (iMidIndex = iIndex; iMidIndex < gs_iRefIndex; iMidIndex++)
{
GI_Item *p_oMidItem = (GI_Item*) pLB->GetItemData(iMidIndex);
if (p_oMidItem->m_bActived != p_oRefItem->m_bActived)
m_fn_bOnChangeActivation(p_oMidItem, iMidIndex);
}
}
bResult = TRUE;
}
else if (m_fn_bOnChangeActivation(p_oItem, iIndex ))
bResult = TRUE;
else
bResult = CDialog::PreTranslateMessage(pMsg);
return bResult;
}
else
return bResult;
}
/****************************************************************************
* Description: Handle function for message WM_DRAWITEM in listbox
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
// Object listbox
if ((nIDCtl == IDC_LISTBOX_OBJECTS) && (m_oListObject->IsWindowEnabled()) && (lpDIS->itemID != LB_ERR))
m_fn_vOnDrawItemListBoxObject ( lpDIS ) ;
// Type listbox
else if ((nIDCtl == IDC_LISTBOX_TYPES) && (m_oListType->IsWindowEnabled()) && (lpDIS->itemID != LB_ERR))
m_fn_vOnDrawItemListBoxType ( lpDIS ) ;
// default handling
else
CDialog::OnDrawItem(nIDCtl, lpDIS);
}
/****************************************************************************
* Description: Handle function for message WM_MEASUREITEM in listbox
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
//==================================================//
// SELECTION BUTTONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Select All" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSelectAll()
{
// select all the objects in all the lists associated with the types
m_fn_vSelectAll(TRUE);
m_oListType->Invalidate(TRUE);
// enable (Clear, Clear All, Convert) / disable (All, AllInList)
m_fn_vEnableButtons(TRUE);
g_bChangeComboSelect = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Select List" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSelectList()
{
//change all the objects in active and enable/disable the buttons for selection
m_fn_vSelectAllForType(TRUE);
m_fn_vEnableButtonAll();
m_oSelectList.EnableWindow(FALSE);
m_oClearList.EnableWindow(TRUE);
m_oClearAll.EnableWindow(TRUE);
m_oConvert.EnableWindow(TRUE);
if (!m_bConversion && m_iCountOfSelections)
m_oCheckGenerateRLI.EnableWindow(TRUE);
else
m_oCheckGenerateRLI.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);
}
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);
if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
{
m_oCheckSpoMax.EnableWindow(TRUE);
m_oCheckSpoEds.EnableWindow(TRUE);
m_oCheckUpdateGameDsc.EnableWindow(TRUE);
m_oCheckEraseDup.EnableWindow(TRUE);
m_oCheckEraseUnused.EnableWindow(TRUE);
if (g_bRaymanII)
{
m_oCheckSctMax.EnableWindow(TRUE);
m_oCheckSctEds.EnableWindow(TRUE);
}
}
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);
}
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);
}
if (m_p_oTypeBanks && m_p_oTypeBanks->m_iSelected)
m_oCheckCreateFamily.EnableWindow(TRUE);
g_bChangeComboSelect = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Clear List" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnClearList()
{
//change all the objects in the current list to inactive and enable/disable the buttons
m_fn_vSelectAllForType(FALSE);
m_fn_vEnableButtonConvert();
m_fn_vEnableButtonAll();
m_oClearList.EnableWindow(FALSE);
m_oSelectList.EnableWindow(TRUE);
g_bChangeComboSelect = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Clear All" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnClearAll()
{
// change the state of all the objects to inactive and enable/disable selections buttons
m_fn_vSelectAll(FALSE);
m_oListType->Invalidate(TRUE);
m_fn_vEnableButtons(FALSE);
g_bChangeComboSelect = TRUE;
}
//==================================================//
// FILE LIST BUTTONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Create button for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCreateConfigSelect()
{
if (g_bChangeComboSelect && g_iCurrentIndexSelect)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before creating a new one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigSelect();
break;
case IDNO:
g_bChangeComboSelect = FALSE;
break;
case IDCANCEL:
m_oComboChooseSelect.SetCurSel(g_iCurrentIndexSelect);
return;
}
}
m_oButtonCreateSelect.ShowWindow(FALSE);
m_oEditCreateSelect.ShowWindow(TRUE);
m_oEditCreateSelect.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Register button for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnRegisterConfigSelect()
{
m_oButtonRegisterSelect.ShowWindow(FALSE);
m_oEditRegisterSelect.ShowWindow(TRUE);
m_oEditRegisterSelect.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Save button for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSaveConfigSelect()
{
int i = m_oComboChooseSelect.GetCurSel();
xString szDir1;
if (i!=-1)
{ //save the directories for the new config
GetCurrentDirectory( MAX_PATH, szDir1 );
SetCurrentDirectory( g_szInitialDirectory );
GetCurrentDirectory( MAX_PATH, g_szIniConfSelectFile );
if (g_szIniConfSelectFile[strlen(g_szIniConfSelectFile) - 1] != '\\')
strcat( g_szIniConfSelectFile, "\\");
strcat( g_szIniConfSelectFile, C_szIniConfSelectFile );
g_bChangeComboSelect = FALSE;
SetCurrentDirectory( szDir1 );
m_fn_vRegisterSelections(i) ;
xString szPath;
strcpy(szPath, "");
for (int i=1; i<g_iNbConfSelects-1; i++)
{
strcat(szPath, g_szConfSelects[i]);
strcat(szPath, ",");
}
if (g_iNbConfSelects) //!!!
strcat(szPath, g_szConfSelects[g_iNbConfSelects-1]);
fn_IniData_vSetSelectConfigNames( szPath );
strcpy(g_stInitialData.szConfSelects, szPath);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Delete button for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnDeleteConfigSelect()
{
xString szPath;
FILE *fileR, *fileW;
xString szFind, szOld, sRead;
int j;
strcpy(szPath, "");
int i = m_oComboChooseSelect.GetCurSel();
if (i != -1)
{
m_oComboChooseSelect.GetLBText( i, szOld );
m_oComboChooseSelect.DeleteString(i);
}
g_iNbConfSelects--;
for (j=i; j<g_iNbConfSelects; j++)
strcpy(g_szConfSelects[j], g_szConfSelects[j+1]);
strcpy(szPath, "");
for (j=1; j<g_iNbConfSelects-1; j++)
{
strcat(szPath, g_szConfSelects[j]);
strcat(szPath, ",");
}
if (g_iNbConfSelects)
strcat(szPath, g_szConfSelects[g_iNbConfSelects-1]);
fn_IniData_vSetSelectConfigNames( szPath );
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfSelectFile, "r");
if (fileR)
{
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL)
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "["));
if (!feof(fileR)) fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL))
if (!feof(fileR)) fputs( sRead, fileW);
fclose(fileR);
fclose(fileW);
remove(g_szIniConfSelectFile);
MoveFile("New.ini", g_szIniConfSelectFile);
}
m_oComboChooseSelect.SetCurSel(0);
g_iCurrentIndexSelect = 0;
//reset the last selections!!!!
m_fn_vUpdateForSelectConfig();
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
g_bChangeComboSelect = FALSE;
}
/****************************************************************************
* Description: Handle function for message CBN_SELCHANGE on ConboBox for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnChooseConfigSelect()
{
if (g_bChangeComboSelect && g_iCurrentIndexSelect)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before choosing another one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigSelect();
break;
case IDNO:
g_bChangeComboSelect = FALSE;
break;
case IDCANCEL:
m_oComboChooseSelect.SetCurSel(g_iCurrentIndexSelect);
return;
}
}
//reset the last selections!!!!
m_fn_vUpdateForSelectConfig();
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Create editbox for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditCreateConfigSelect()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditCreateSelect.GetWindowText(szName, 14);
m_oEditCreateSelect.ShowWindow(FALSE);
m_oButtonCreateSelect.ShowWindow(TRUE);
i = m_oComboChooseSelect.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseSelect.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseSelect.AddString(szName);
m_oComboChooseSelect.SetCurSel(i);
g_iCurrentIndexSelect = i;
OnChooseConfigSelect();
g_bChangeComboSelect = TRUE;
g_iNbConfSelects++;
strcpy(g_szConfSelects[g_iNbConfSelects-1], szName);
}
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Register editbox for SelectConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditRegisterConfigSelect()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditRegisterSelect.GetWindowText(szName, 14);
m_oEditRegisterSelect.ShowWindow(FALSE);
m_oButtonRegisterSelect.ShowWindow(TRUE);
i = m_oComboChooseSelect.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseSelect.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseSelect.AddString(szName);
m_oComboChooseSelect.SetCurSel(i);
g_iCurrentIndexSelect = i;
g_bChangeComboSelect = TRUE;
g_iNbConfSelects++;
strcpy(g_szConfSelects[g_iNbConfSelects-1], szName);
}
OnSaveConfigSelect();
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
}
/****************************************************************************
* Description: Handle function for message CBN_KILLFOCUS on combobox for config select
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusComboChooseConfigSelect()
{
char szName[15];
FILE *fileR, *fileW;
xString szFind, sRead, szOld;
int i1;
strcpy(szName, "");
strcpy(szOld, "");
m_oComboChooseSelect.GetLBText( g_iCurrentIndexSelect, szOld );
m_oComboChooseSelect.GetWindowText( szName, 25 );
if (!strcmp(szName, szOld))
return;
if (strcmp(szName, ""))
{
xString szPath;
int j1 = m_oComboChooseSelect.FindStringExact( -1, szName);
if (j1 != CB_ERR)
{
AfxMessageBox( "The configuration already exists or you gave the same name for it. Please select another name!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
i1 = g_iCurrentIndexSelect;
if (i1)
{
if (i1 != -1)
m_oComboChooseSelect.DeleteString(i1);
m_oComboChooseSelect.InsertString(i1, szName);
m_oComboChooseSelect.SetCurSel(i1);
strcpy(g_szConfSelects[i1], szName);
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfSelectFile, "r");
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL) //
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
fputs("[", fileW);
fputs(szName, fileW);
fputs("]\n", fileW);
while (!feof(fileR))
{ fgets(sRead, 256, fileR);
if (!feof(fileR)) fputs( sRead, fileW);
}
fclose(fileR);
fclose(fileW);
remove(g_szIniConfSelectFile);
MoveFile("New.ini", g_szIniConfSelectFile);
}
else
{
m_oComboChooseSelect.AddString(szName);
m_oComboChooseSelect.SetCurSel(m_oComboChooseSelect.GetCount() - 1);
g_iCurrentIndexSelect = m_oComboChooseSelect.GetCount() - 1;
g_iNbConfSelects++;
strcpy(g_szConfSelects[g_iNbConfSelects-1], szName);
m_oButtonSaveSelect.EnableWindow(g_iCurrentIndexSelect);
m_oButtonDeleteSelect.EnableWindow(g_iCurrentIndexSelect);
}
strcpy(szPath, "");
for (int j=1; j<g_iNbConfSelects-1; j++)
{
strcat(szPath, g_szConfSelects[j]);
strcat(szPath, ",");
}
if (g_iNbConfSelects) //!!!
strcat(szPath, g_szConfSelects[g_iNbConfSelects-1]);
fn_IniData_vSetSelectConfigNames( szPath );
//add the new name section in the .ini file
m_fn_vRegisterSelections(i1);
}
}
//==================================================//
// CONVERT BUTTON //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Convert" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnConvert()
{
GetDlgItem( IDC_STATIC_PROGRESS)->ShowWindow( TRUE);
m_oProgress.SetRange( 0, 0 );
m_oProgress.SetPos( 0 );
GetDlgItem( IDC_STATIC_PROGRESS)->ShowWindow( TRUE);
RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_FRAME | RDW_UPDATENOW );
AfxBeginThread( ms_fn_vConvertData, this, THREAD_PRIORITY_LOWEST);
}
//==================================================//
// IGNORE OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Zoo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckZooMax()
{
g_bIgnoreZoo = m_oCheckZooMax.GetCheck();
m_oCheckZooMax.SetCheck(g_bIgnoreZoo);
m_oCheckZooEds.SetCheck(!g_bIgnoreZoo);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Zoo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckZooEds()
{
g_bIgnoreZoo = !m_oCheckZooEds.GetCheck();
m_oCheckZooEds.SetCheck(!g_bIgnoreZoo);
m_oCheckZooMax.SetCheck(g_bIgnoreZoo);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Sct" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckSctMax()
{
g_bIgnoreSct = m_oCheckSctMax.GetCheck();
m_oCheckSctMax.SetCheck(g_bIgnoreSct);
m_oCheckSctEds.SetCheck(!g_bIgnoreSct);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Sct" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckSctEds()
{
g_bIgnoreSct = !m_oCheckSctEds.GetCheck();
m_oCheckSctEds.SetCheck(!g_bIgnoreSct);
m_oCheckSctMax.SetCheck(g_bIgnoreSct);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckSpoMax()
{
g_bIgnoreSpo = m_oCheckSpoMax.GetCheck();
m_oCheckSpoMax.SetCheck(g_bIgnoreSpo);
m_oCheckSpoEds.SetCheck(!g_bIgnoreSpo);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckSpoEds()
{
g_bIgnoreSpo = !m_oCheckSpoEds.GetCheck();
m_oCheckSpoEds.SetCheck(!g_bIgnoreSpo);
m_oCheckSpoMax.SetCheck(g_bIgnoreSpo);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckGmtMax()
{
g_bIgnoreGmt = m_oCheckGmtMax.GetCheck();
m_oCheckGmtMax.SetCheck(g_bIgnoreGmt);
m_oCheckGmtEds.SetCheck(!g_bIgnoreGmt);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckGmtEds()
{
g_bIgnoreGmt = !m_oCheckGmtEds.GetCheck();
m_oCheckGmtEds.SetCheck(!g_bIgnoreGmt);
m_oCheckGmtMax.SetCheck(g_bIgnoreGmt);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckVmtMax()
{
g_bIgnoreTex = m_oCheckVmtMax.GetCheck();
m_oCheckVmtMax.SetCheck(g_bIgnoreTex);
m_oCheckVmtEds.SetCheck(!g_bIgnoreTex);
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ignore Spo" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCheckVmtEds()
{
g_bIgnoreTex = !m_oCheckVmtEds.GetCheck();
m_oCheckVmtEds.SetCheck(!g_bIgnoreTex);
m_oCheckVmtMax.SetCheck(g_bIgnoreTex);
g_bChangeComboOption = TRUE;
}
//==================================================//
// CONVERSION OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Copy Anims" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCopyAnims()
{
g_bCopyAnims = m_oCheckCopyAnims.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Copy Textures" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCopyTextures()
{
g_bCopyTextures = m_oCheckCopyTextures.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Generate RLI" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnGenerateRLI()
{
g_bGenerateRLI = m_oCheckGenerateRLI.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Update Game.DSC" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnUpdateGameDSC()
{
g_bUpdateGameDSC = m_oCheckUpdateGameDsc.GetCheck();
g_bChangeComboOption = TRUE;
}
//==================================================//
// ERASE OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Erase Duplicated Points" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnEraseDuplicated()
{
g_bEraseDuplicated = m_oCheckEraseDup.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Erase Unused Points" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnEraseUnused()
{
g_bEraseUnused = m_oCheckEraseUnused.GetCheck();
g_bChangeComboOption = TRUE;
}
//==================================================//
// FAMILY OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Force Common" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnForceCommon()
{
g_bCommonFamily = m_oCheckCommon.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Force Specific" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnForceSpecific()
{
g_bSpecificFamily = m_oCheckSpecific.GetCheck();
g_bChangeComboOption = TRUE;
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Ask for Family" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnAskFamily()
{
g_bAskFamily = m_oCheckAskFamily.GetCheck();
m_oCheckCommon.EnableWindow(!g_bAskFamily);
m_oCheckSpecific.EnableWindow(!g_bAskFamily);
g_bChangeComboOption = TRUE;
}
//==================================================//
// BANK OPTIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on "Create Basic Family" button
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCreateBasicFamily()
{
g_bCreateBasicFamily = m_oCheckCreateFamily.GetCheck();
g_bChangeComboOption = TRUE;
}
//==================================================//
// OPTION CONFIGURATIONS //
//==================================================//
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Create button for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnCreateConfigOption()
{
if (g_bChangeComboOption && g_iCurrentIndexOption)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before creating a new one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigOption();
break;
case IDNO:
g_bChangeComboOption = FALSE;
break;
case IDCANCEL:
m_oComboChooseOption.SetCurSel(g_iCurrentIndexOption);
return;
}
}
m_oButtonCreateOption.ShowWindow(FALSE);
m_oEditCreateOption.ShowWindow(TRUE);
m_oEditCreateOption.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Register button for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnRegisterConfigOption()
{
m_oButtonRegisterOption.ShowWindow(FALSE);
m_oEditRegisterOption.ShowWindow(TRUE);
m_oEditRegisterOption.SetFocus();
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Save button for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnSaveConfigOption()
{
int i = m_oComboChooseOption.GetCurSel();
xString szDir1;
if (i!=-1)
{ //save the directories for the new config
GetCurrentDirectory( MAX_PATH, szDir1 );
SetCurrentDirectory( g_szInitialDirectory );
GetCurrentDirectory( MAX_PATH, g_szIniConfOptionFile );
if (g_szIniConfOptionFile[strlen(g_szIniConfOptionFile) - 1] != '\\')
strcat( g_szIniConfOptionFile, "\\");
strcat( g_szIniConfOptionFile, C_szIniConfOptionFile );
g_bChangeComboOption = FALSE;
SetCurrentDirectory( szDir1 );
m_fn_vRegisterAllOptions(i) ;
xString szPath;
strcpy(szPath, "");
for (int i=1; i<g_iNbConfOptions-1; i++)
{
strcat(szPath, g_szConfOptions[i]);
strcat(szPath, ",");
}
if (g_iNbConfOptions) //!!!
strcat(szPath, g_szConfOptions[g_iNbConfOptions-1]);
fn_IniData_vSetOptionConfigNames( szPath );
strcpy(g_stInitialData.szConfOptions, szPath);
}
}
/****************************************************************************
* Description: Handle function for message BN_CLICKED on Delete button for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnDeleteConfigOption()
{
xString szPath;
FILE *fileR, *fileW;
xString szFind, szOld, sRead;
int j;
strcpy(szPath, "");
int i = m_oComboChooseOption.GetCurSel();
if (i != -1)
{
m_oComboChooseOption.GetLBText( i, szOld );
m_oComboChooseOption.DeleteString(i);
}
g_iNbConfOptions--;
for (j=i; j<g_iNbConfOptions; j++)
strcpy(g_szConfOptions[j], g_szConfOptions[j+1]);
strcpy(szPath, "");
for (j=1; j<g_iNbConfOptions-1; j++)
{
strcat(szPath, g_szConfOptions[j]);
strcat(szPath, ",");
}
if (g_iNbConfOptions)
strcat(szPath, g_szConfOptions[g_iNbConfOptions-1]);
fn_IniData_vSetOptionConfigNames( szPath );
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfOptionFile, "r");
if (fileR)
{
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL)
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL) && !strstr(sRead, "["));
if (!feof(fileR)) fputs( sRead, fileW);
while ((fgets(sRead, 256, fileR) != NULL))
if (!feof(fileR)) fputs( sRead, fileW);
fclose(fileR);
fclose(fileW);
remove(g_szIniConfOptionFile);
MoveFile("New.ini", g_szIniConfOptionFile);
}
m_oComboChooseOption.SetCurSel(0);
g_iCurrentIndexOption = 0;
//reset the last selections!!!!
m_fn_vUpdateForOptionConfig();
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
g_bChangeComboOption = FALSE;
}
/****************************************************************************
* Description: Handle function for message CBN_SELCHANGE on ConboBox for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnChooseConfigOption()
{
if (g_bChangeComboOption && g_iCurrentIndexOption)
{
int iResult = AfxMessageBox( "The current configuration was changed : if you do not save it before choosing another one, the changes will be lost!\n Do you want to save the current configuration ?", MB_YESNOCANCEL | MB_ICONEXCLAMATION );
switch (iResult)
{
case IDYES:
OnSaveConfigOption();
break;
case IDNO:
g_bChangeComboOption = FALSE;
break;
case IDCANCEL:
m_oComboChooseOption.SetCurSel(g_iCurrentIndexOption);
return;
}
}
//reset the last selections!!!!
m_fn_vUpdateForOptionConfig();
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Create editbox for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditCreateConfigOption()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditCreateOption.GetWindowText(szName, 14);
m_oEditCreateOption.ShowWindow(FALSE);
m_oButtonCreateOption.ShowWindow(TRUE);
i = m_oComboChooseOption.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseOption.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseOption.AddString(szName);
m_oComboChooseOption.SetCurSel(i);
g_iCurrentIndexOption = i;
OnChooseConfigOption();
g_bChangeComboOption = TRUE;
g_iNbConfOptions++;
strcpy(g_szConfOptions[g_iNbConfOptions-1], szName);
}
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
}
/****************************************************************************
* Description: Handle function for message EN_KILLFOCUS on Register editbox for OptionConfig
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusEditRegisterConfigOption()
{
char szName[15];
int i;
strcpy(szName, "");
m_oEditRegisterOption.GetWindowText(szName, 14);
m_oEditRegisterOption.ShowWindow(FALSE);
m_oButtonRegisterOption.ShowWindow(TRUE);
i = m_oComboChooseOption.GetCount();
if (strcmp(szName, ""))
{ //search if the name already exist in the combo-box
//if yes inform the user!!!
int j = m_oComboChooseOption.FindStringExact( -1, szName);
if (j != CB_ERR)
{
AfxMessageBox( "The configuration already exists!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
m_oComboChooseOption.AddString(szName);
m_oComboChooseOption.SetCurSel(i);
g_iCurrentIndexOption = i;
g_bChangeComboOption = TRUE;
g_iNbConfOptions++;
strcpy(g_szConfOptions[g_iNbConfOptions-1], szName);
}
OnSaveConfigOption();
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
}
/****************************************************************************
* Description: Handle function for message CBN_KILLFOCUS on combobox ofr config option
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void CDlgMain::OnKillFocusComboChooseConfigOption()
{
char szName[15];
FILE *fileR, *fileW;
xString szFind, sRead, szOld;
int i1;
strcpy(szName, "");
strcpy(szOld, "");
m_oComboChooseOption.GetLBText( g_iCurrentIndexOption, szOld );
m_oComboChooseOption.GetWindowText( szName, 25 );
if (!strcmp(szName, szOld))
return;
if (strcmp(szName, ""))
{
xString szPath;
int j1 = m_oComboChooseOption.FindStringExact( -1, szName);
if (j1 != CB_ERR)
{
AfxMessageBox( "The configuration already exists or you gave the same name for it. Please select another name!", MB_OK | MB_ICONSTOP );
return; //if the string exists do nothing
}
i1 = g_iCurrentIndexOption;
if (i1)
{
if (i1 != -1)
m_oComboChooseOption.DeleteString(i1);
m_oComboChooseOption.InsertString(i1, szName);
m_oComboChooseOption.SetCurSel(i1);
strcpy(g_szConfOptions[i1], szName);
//delete the section with the previous name from the Configs.ini file
fileR = fopen (g_szIniConfOptionFile, "r");
fileW = fopen ("New.ini", "w");
strcpy(szFind, "[");
strcat(szFind, szOld);
strcat(szFind, "]\n");
while (fgets(sRead, 256, fileR)!=NULL) //
if (!stricmp(sRead, szFind))
break;
else
fputs( sRead, fileW);
fputs("[", fileW);
fputs(szName, fileW);
fputs("]\n", fileW);
while (!feof(fileR))
{ fgets(sRead, 256, fileR);
if (!feof(fileR)) fputs( sRead, fileW);
}
fclose(fileR);
fclose(fileW);
remove(g_szIniConfOptionFile);
MoveFile("New.ini", g_szIniConfOptionFile);
}
else
{
m_oComboChooseOption.AddString(szName);
m_oComboChooseOption.SetCurSel(m_oComboChooseOption.GetCount() - 1);
g_iCurrentIndexOption = m_oComboChooseOption.GetCount() - 1;
g_iNbConfOptions++;
strcpy(g_szConfOptions[g_iNbConfOptions-1], szName);
m_oButtonSaveOption.EnableWindow(g_iCurrentIndexOption);
m_oButtonDeleteOption.EnableWindow(g_iCurrentIndexOption);
}
strcpy(szPath, "");
for (int j=1; j<g_iNbConfOptions-1; j++)
{
strcat(szPath, g_szConfOptions[j]);
strcat(szPath, ",");
}
if (g_iNbConfOptions) //!!!
strcat(szPath, g_szConfOptions[g_iNbConfOptions-1]);
fn_IniData_vSetOptionConfigNames( szPath );
//add the new name section in the .ini file
m_fn_vRegisterAllOptions(i1);
}
}