reman3/Rayman_X/cpa/Appli/BinaryTool2/src/PanelSettings.cpp

317 lines
10 KiB
C++

// PanelSettings.cpp : implementation file
//
#include "stdafx.h"
#include <io.h>
#include "binarytool.h"
#include "PanelSettings.h"
#include "GlobalData.h"
#include "util.h"
#include "file.h"
#include "Tasks.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// CPanelSettings creation and initialisation
CPanelSettings::CPanelSettings(CWnd* pParent /*=NULL*/)
: CPanel(CPanelSettings::IDD, pParent)
{
//{{AFX_DATA_INIT(CPanelSettings)
//}}AFX_DATA_INIT
_tcscpy( m_szTitle, _T("Settings") );
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPanelSettings)
DDX_Control(pDX, IDC_CHECK_AutoDetectErrors, m_CheckAutoDetectErrors);
DDX_Control(pDX, IDC_EDIT_MainDirectory, m_EditMainDirectory);
DDX_Control(pDX, IDC_EDIT_BinaryDirectory, m_EditBinDirectory);
DDX_Control(pDX, IDC_EDIT_ExeName, m_EditExeName);
//}}AFX_DATA_MAP
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BEGIN_MESSAGE_MAP(CPanelSettings, CDialog)
//{{AFX_MSG_MAP(CPanelSettings)
ON_BN_CLICKED(IDC_BUTTON_BrowseMainDirectory, OnBrowseMainDirectory)
ON_BN_CLICKED(IDC_BUTTON_BrowseBinaryDirectory, OnBrowseBinaryDirectory)
ON_BN_CLICKED(IDC_BUTTON_BrowseExeName, OnBrowseExeName)
ON_EN_CHANGE(IDC_EDIT_MainDirectory, OnChangeMainDirectory)
ON_EN_CHANGE(IDC_EDIT_BinaryDirectory, OnChangeBinaryDirectory)
ON_EN_CHANGE(IDC_EDIT_ExeName, OnChangeExeName)
ON_BN_CLICKED(IDC_RADIO_Release, OnRADIODebugOrRelease)
ON_WM_DROPFILES()
ON_BN_CLICKED(IDC_CHECK_AutoDetectErrors, OnCHECKAutoDetectErrors)
ON_BN_CLICKED(IDC_RADIO_Debug, OnRADIODebugOrRelease)
ON_BN_CLICKED(IDC_BUTTON_MakeVersion, OnBUTTONMakeVersion)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BOOL CPanelSettings::Create( CWnd* pParentWnd )
{
BOOL bResult = CDialog::Create( IDD, pParentWnd );
if( bResult )
{
CWinApp *p_oApp = AfxGetApp();
CString csSection = m_szTitle;
// Read registry, update global data and controls
m_CheckAutoDetectErrors.SetCheck( p_oApp -> GetProfileInt( csSection, _T("AutoDetectErrors"), 1 ) );
g_stTheGlobalData.bAutoDetectErrors = m_CheckAutoDetectErrors.GetCheck();
g_stTheGlobalData.bDebugVersion = p_oApp -> GetProfileInt( csSection, _T("Version"), (int)FALSE );
((CButton *)GetDlgItem( IDC_RADIO_Debug ))->SetCheck( g_stTheGlobalData.bDebugVersion );
((CButton *)GetDlgItem( IDC_RADIO_Release ))->SetCheck( ! g_stTheGlobalData.bDebugVersion );
g_stTheGlobalData.csMainDirectory = p_oApp -> GetProfileString( csSection, _T("MainDirectory"), NULL );
g_stTheGlobalData.csBinDirectory = p_oApp -> GetProfileString( csSection, _T("BinDirectory"), NULL );
g_stTheGlobalData.csExecutableNames.SetSize(2);
g_stTheGlobalData.csExecutableNames[0] = p_oApp -> GetProfileString( csSection, _T("ExeRelease"), NULL );
g_stTheGlobalData.csExecutableNames[1] = p_oApp -> GetProfileString( csSection, _T("ExeDebug"), NULL );
if( g_stTheGlobalData.csExecutableNames[0].IsEmpty() )
g_stTheGlobalData.csExecutableNames[0] = "MainWinR.exe";
if( g_stTheGlobalData.csExecutableNames[1].IsEmpty() )
g_stTheGlobalData.csExecutableNames[1] = "MainWinD.exe";
g_stTheGlobalData.csExeName = g_stTheGlobalData.bDebugVersion ? g_stTheGlobalData.csExecutableNames[1] : g_stTheGlobalData.csExecutableNames[0];
m_EditExeName.SetWindowText( g_stTheGlobalData.csExeName );
m_EditMainDirectory.SetWindowText( g_stTheGlobalData.csMainDirectory );
m_EditBinDirectory.SetWindowText( g_stTheGlobalData.csBinDirectory );
m_bMainDirectoryIsValid = FALSE;
m_bBinDirectoryIsValid = FALSE;
m_bGameExeIsValid = FALSE;
DragAcceptFiles( TRUE );
}
return bResult;
}
void CPanelSettings::m_fn_vUpdateRegistry()
{
CWinApp *p_oApp = AfxGetApp();
CString csSection = m_szTitle;
p_oApp -> WriteProfileInt( csSection, _T("AutoDetectErrors"), g_stTheGlobalData.bAutoDetectErrors );
p_oApp -> WriteProfileInt( csSection, _T("Version"), g_stTheGlobalData.bDebugVersion );
p_oApp -> WriteProfileString( csSection, _T("MainDirectory"), g_stTheGlobalData.csMainDirectory );
p_oApp -> WriteProfileString( csSection, _T("BinDirectory"), g_stTheGlobalData.csBinDirectory );
p_oApp -> WriteProfileString( csSection, _T("ExeRelease"), g_stTheGlobalData.csExecutableNames[0] );
p_oApp -> WriteProfileString( csSection, _T("ExeDebug"), g_stTheGlobalData.csExecutableNames[1] );
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// CPanelSettings message handlers
void CPanelSettings::OnBrowseMainDirectory()
{
CString csNewDir = fn_csBrowseDirectory( "Select main directory", g_stTheGlobalData.csMainDirectory );
if( ! csNewDir.IsEmpty() )
{
g_stTheGlobalData.csMainDirectory = csNewDir;
m_EditMainDirectory.SetWindowText( csNewDir );
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnBrowseBinaryDirectory()
{
CString csNewDir = fn_csBrowseDirectory( "Select binary directory", g_stTheGlobalData.csBinDirectory );
if( ! csNewDir.IsEmpty() )
{
g_stTheGlobalData.csBinDirectory = csNewDir;
m_EditBinDirectory.SetWindowText( csNewDir );
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnBrowseExeName()
{
CString csBaseDir;
CFileDialog *p_oFileDlg =
new CFileDialog(
TRUE, NULL, "MainWinR.exe",
OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_LONGNAMES|OFN_EXPLORER|OFN_HIDEREADONLY,
"Exe files (*.exe)|*.exe|All files|*||", NULL );
m_EditMainDirectory.GetWindowText( csBaseDir );
if( ! csBaseDir.IsEmpty() && _access( csBaseDir, 04 ) != -1 )
{
p_oFileDlg->m_ofn.lpstrInitialDir = csBaseDir;
}
if( p_oFileDlg->DoModal() == IDOK )
{
g_stTheGlobalData.csExeName = p_oFileDlg->GetFileName();
m_EditExeName.SetWindowText( p_oFileDlg->GetFileName() );
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnChangeMainDirectory()
{
m_bMainDirectoryIsValid = FALSE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnChangeBinaryDirectory()
{
m_bBinDirectoryIsValid = FALSE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnChangeExeName()
{
m_bGameExeIsValid = FALSE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnRADIODebugOrRelease()
{
if( g_stTheGlobalData.bDebugVersion )
m_EditExeName.GetWindowText( g_stTheGlobalData.csExecutableNames[1] );
else
m_EditExeName.GetWindowText( g_stTheGlobalData.csExecutableNames[0] );
g_stTheGlobalData.bDebugVersion = ((CButton *)GetDlgItem( IDC_RADIO_Debug ))->GetCheck();
if( g_stTheGlobalData.bDebugVersion )
m_EditExeName.SetWindowText( g_stTheGlobalData.csExecutableNames[1] );
else
m_EditExeName.SetWindowText( g_stTheGlobalData.csExecutableNames[0] );
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// user drag and drop file(s) on dialog...
void CPanelSettings::OnDropFiles(HDROP hDropInfo)
{
char szFile[256];
// get first dropped file
DragQueryFile( hDropInfo, 0, szFile, 256 );
// If file is not a directory => set exe
if( ! (GetFileAttributes( szFile ) & FILE_ATTRIBUTE_DIRECTORY) )
{
m_EditExeName.SetWindowText( szFile );
return;
}
// Else
CDialog::OnDropFiles(hDropInfo);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CPanelSettings::OnCHECKAutoDetectErrors()
{
g_stTheGlobalData.bAutoDetectErrors = m_CheckAutoDetectErrors.GetCheck();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// CPanelSettings user methods
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// When user wants to go to another panel, we make sure all settings are valid.
BOOL CPanelSettings::m_fn_bCanChangePanel()
{
if( ! m_bMainDirectoryIsValid )
{
m_EditMainDirectory.GetWindowText( g_stTheGlobalData.csMainDirectory );
if( ! (m_bMainDirectoryIsValid = fn_bValidateMainDirectorySetting()) )
return FALSE;
}
if( ! m_bBinDirectoryIsValid )
{
m_EditBinDirectory.GetWindowText( g_stTheGlobalData.csBinDirectory );
if( ! (m_bBinDirectoryIsValid = fn_bValidateBinDirectorySetting()) )
return FALSE;
}
if( ! m_bGameExeIsValid )
{
m_EditExeName.GetWindowText( g_stTheGlobalData.csExeName );
if( ! (m_bGameExeIsValid = fn_bValidateGameExeSetting()) )
return FALSE;
}
return TRUE;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// When displaying panel, we update the state of error autodetection
// because it can be changed from another panel.
void CPanelSettings::m_fn_vOnDisplayPanel()
{
m_CheckAutoDetectErrors.SetCheck( g_stTheGlobalData.bAutoDetectErrors );
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Here, the user wants binarytool to make the whole version by itself
// (what a lasy user !)
// We launch rm2sndparser, textures and binarisation....
void CPanelSettings::OnBUTTONMakeVersion()
{
// Notify main dlg for beginning of work
g_stTheGlobalData.p_oMainDlg -> m_fn_vNotifyStartOfWork();
// Do all the work
fn_e_TASK_Version();
// Empty the map list => it will be filled when displaying panel levels.
g_stTheGlobalData.a_csLevelNames.SetSize( 0 );
// End of work ! We keep the result screen displayed.
g_stTheGlobalData.p_oMainDlg -> m_fn_vNotifyEndOfWork( TRUE );
}