D:/Zythum/DinoKod/GameSetup/ClientPage.cpp

00001 // ClientPage.cpp : implementation file
00002 //
00003 
00004 #include "stdafx.h"
00005 #include "Common/Time.h"
00006 #include "Common/Directory.h"
00007 #include "Common/SearchFile.h"
00008 #include "GameSetup.h"
00009 #include "GameSetupDlg.h"
00010 #include "ClientPage.h"
00011 
00012 #ifdef _DEBUG
00013 #define new DEBUG_NEW
00014 #undef THIS_FILE
00015 static char THIS_FILE[] = __FILE__;
00016 #endif
00017 
00019 // CClientPage property page
00020 
00021 IMPLEMENT_DYNCREATE(CClientPage, CDialog)
00022 
00023 CClientPage::CClientPage() : CDialog(CClientPage::IDD)
00024 {
00025         m_pIni = NULL;
00026         //{{AFX_DATA_INIT(CClientPage)
00027         m_Name = _T("");
00028         m_MipMapLOD = 0.0f;
00029         m_LobbyRequestPort = 28001;
00030         m_LobbyRequestHost = _T("");
00031         //}}AFX_DATA_INIT
00032 }
00033 
00034 CClientPage::CClientPage( KFile& File ) : CDialog(CClientPage::IDD)
00035 {
00036         m_pIni = new KIni( File );
00037         m_MipMapLOD = 0.0f;
00038         m_LobbyRequestPort = 28001;
00039         m_LobbyRequestHost = _T("");
00040         m_Name = _T("");
00041 }
00042 
00043 CClientPage::~CClientPage()
00044 {
00045         if( m_pIni )
00046                 Deletep( m_pIni );
00047 }
00048 
00049 void CClientPage::DoDataExchange(CDataExchange* pDX)
00050 {
00051         CDialog::DoDataExchange(pDX);
00052         //{{AFX_DATA_MAP(CClientPage)
00053         DDX_Control(pDX, IDC_RADIO_TEXTURE32, m_RadioTexture32);
00054         DDX_Control(pDX, IDC_RADIO_OPENGL, m_RadioOpenGL);
00055         DDX_Control(pDX, IDC_RADIO_TEXTURE16, m_RadioTexture16);
00056         DDX_Control(pDX, IDC_SPIN_MIPMAPLOD, m_SpinMipMapLOD);
00057         DDX_Control(pDX, IDC_RADIO_DIRECT3D, m_RadioDirect3D);
00058         DDX_Control(pDX, IDC_COMBO_MODE, m_ComboMode);
00059         DDX_Control(pDX, IDC_COMBO_DEVICE, m_ComboDevice);
00060         DDX_Control(pDX, IDC_CHECK_FULLSCREEN, m_CheckFullScreen);
00061         DDX_Text(pDX, IDC_EDIT_NAME, m_Name);
00062         DDX_Text(pDX, IDC_EDIT_MIPMAPLOD, m_MipMapLOD);
00063         DDV_MinMaxFloat(pDX, m_MipMapLOD, -1.f, 1.f);
00064         DDX_Text(pDX, IDC_EDIT_LOBBYREQUESTHOST, m_LobbyRequestHost);
00065         DDX_Text(pDX, IDC_EDIT_LOBBYREQUESTPORT, m_LobbyRequestPort);
00066         DDV_MinMaxUInt(pDX, m_LobbyRequestPort, 1, 65535);
00067         DDX_Control(pDX, IDC_COMBO_MOD, m_ComboMod);
00068         DDX_Control(pDX, IDC_RADIO_FRENCH, m_FrenchRadio);
00069         DDX_Control(pDX, IDC_RADIO_ENGLISH, m_EnglishRadio);
00070         DDX_Control(pDX, IDC_RADIO_SPANISH, m_SpanishRadio);
00071         DDX_Control(pDX, IDC_RADIO_ITALIAN, m_ItalianRadio);
00072         DDX_Control(pDX, IDC_RADIO_GERMAN, m_GermanRadio);
00073         //}}AFX_DATA_MAP
00074 }
00075 
00076 
00077 BEGIN_MESSAGE_MAP(CClientPage, CDialog)
00078         //{{AFX_MSG_MAP(CClientPage)
00079         ON_BN_CLICKED(IDC_BUTTON_RUN, OnButtonRun)
00080         //}}AFX_MSG_MAP
00081 END_MESSAGE_MAP()
00082 
00084 // CClientPage message handlers
00085 void CClientPage::Load()
00086 {
00087         KStr            sName;
00088         u32                     i;
00089 
00090         Sleep( 1 );     // srand
00091         srand( g_Time.GetTime() );
00092         sName = "Client #";
00093         sName += (s32)(rand() % 10);
00094         sName += (s32)(rand() % 10);
00095         sName += (s32)(rand() % 10);
00096         sName += (s32)(rand() % 10);
00097 
00098         m_Name = m_pIni->ReadString( "GENERAL", "Name", sName.GetpString() );
00099         
00100         m_ComboDevice.SetCurSel( m_pIni->ReadInt( "RENDER", "Adapter", 0 ) );
00101 
00102         // Device
00103 /*      DISPLAY_DEVICE  dd;
00104 
00105         i = 0;
00106         while( EnumDisplayDevices( NULL, i, &dd, 0 ) )
00107         {
00108                 m_ComboDevice.AddString( dd.DeviceName );
00109         }*/
00110 
00111         const char*     pDriver = m_pIni->ReadString( "RENDER", "Driver", "RenderD3D.dll" );
00112         m_RadioDirect3D.SetCheck( ( strcmp( pDriver, "RenderD3D.dll" ) == 0 ) ? BST_CHECKED : BST_UNCHECKED );
00113         m_RadioOpenGL.SetCheck( ( strcmp( pDriver, "RenderOGL.dll" ) == 0 ) ? BST_CHECKED : BST_UNCHECKED );
00114 
00115         u32             Width           = m_pIni->ReadInt( "RENDER", "Width", 800 );
00116         u32             Height          = m_pIni->ReadInt( "RENDER", "Height", 600 );
00117         u32             Bpp                     = m_pIni->ReadInt( "RENDER", "Bpp", 16 );
00118         u32             Refresh         = m_pIni->ReadInt( "RENDER", "RefreshRate", 60 );
00119         u32             FullScreen      = m_pIni->ReadInt( "RENDER", "FullScreen", 1 );
00120 
00121         DEVMODE         dm;
00122         char            pMode[1024];
00123         int                     Index;
00124         int                     SelectId = 0;
00125 
00126         i = 0;
00127         while( EnumDisplaySettings( NULL, i, &dm ) )
00128         {
00129                 if( ( ( dm.dmBitsPerPel == 16 ) || ( dm.dmBitsPerPel == 32 ) ) && ( ( dm.dmPelsWidth / 4 ) == ( dm.dmPelsHeight / 3 ) ) )
00130                 {
00131                         sprintf( pMode, "%ix%i %iBpp %iHz", dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency );
00132                         Index = m_ComboMode.AddString( pMode );
00133 
00134                         if( ( dm.dmPelsWidth == Width ) && ( dm.dmPelsHeight == Height ) && ( dm.dmBitsPerPel == Bpp ) && ( dm.dmDisplayFrequency == Refresh ) )
00135                                 SelectId = Index;
00136                 }
00137                 i ++;
00138         }
00139 
00140         m_ComboMode.SetCurSel( SelectId );
00141         m_CheckFullScreen.SetCheck( FullScreen ? BST_CHECKED : BST_UNCHECKED );
00142 
00143         u32             TextureDepth = (u32)m_pIni->ReadInt( "RENDER", "TextureBpp", 16 );
00144 
00145         m_RadioTexture16.SetCheck( ( TextureDepth == 16 ) ? BST_CHECKED : BST_UNCHECKED );
00146         m_RadioTexture32.SetCheck( ( TextureDepth == 32 ) ? BST_CHECKED : BST_UNCHECKED );
00147         
00148         m_MipMapLOD = m_pIni->ReadFloat( "RENDER", "MipMapLodBias", 0.0f );
00149 
00150         m_LobbyRequestHost = m_pIni->ReadString( "NETWORK", "LobbyRequestHost", "localhost" );
00151         m_LobbyRequestPort = m_pIni->ReadInt( "NETWORK", "LobbyRequestPort", 28001 );
00152 
00153         // Language
00154         CString Language = m_pIni->ReadString( "GENERAL", "Language", "EN" );
00155         if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_FRENCH) ) )
00156         {
00157                 m_FrenchRadio.SetCheck( BST_CHECKED );
00158         }
00159         else if( !Language.CompareNoCase( GETLANGUAGEPREFIX2(E_LANGUAGE_ENGLISH) ) )
00160         {
00161                 m_EnglishRadio.SetCheck( BST_CHECKED );
00162         }
00163         else if( !Language.CompareNoCase(  GETLANGUAGEPREFIX2(E_LANGUAGE_ITALIAN) ) )
00164         {
00165                 m_ItalianRadio.SetCheck( BST_CHECKED );
00166         }
00167         else if( !Language.CompareNoCase(  GETLANGUAGEPREFIX2(E_LANGUAGE_SPANISH) ) )
00168         {
00169                 m_SpanishRadio.SetCheck( BST_CHECKED );
00170         }
00171         else if( !Language.CompareNoCase(  GETLANGUAGEPREFIX2(E_LANGUAGE_GERMAN) ) )
00172         {
00173                 m_GermanRadio.SetCheck( BST_CHECKED );
00174         }
00175 
00176         RefreshModList();
00177 }
00178 
00179 void CClientPage::Save()
00180 {
00181         CString Mode;
00182 
00183         m_ComboMode.GetLBText( m_ComboMode.GetCurSel(), Mode );
00184 
00185         LPTSTR  pName           = m_Name.GetBuffer( 0 );
00186         LPTSTR  pMode           = Mode.GetBuffer( 0 );
00187         LPTSTR  pHost           = m_LobbyRequestHost.GetBuffer( 0 );
00188 
00189         m_pIni->WriteString( "GENERAL", "Name", pName );
00190         m_pIni->WriteInt( "RENDER", "Adapter", m_ComboDevice.GetCurSel() );
00191         m_pIni->WriteString( "RENDER", "Driver", ( m_RadioDirect3D.GetCheck() == BST_CHECKED ) ? "RenderD3D.dll" : "RenderOGL.dll" );
00192 
00193         u32             Width;
00194         u32             Height;
00195         u32             Bpp;
00196         u32             Refresh;
00197 
00198         sscanf( pMode, "%ix%i %iBpp %iHz", &Width, &Height, &Bpp, &Refresh );
00199 
00200         m_pIni->WriteInt( "RENDER", "Width", Width );
00201         m_pIni->WriteInt( "RENDER", "Height", Height );
00202         m_pIni->WriteInt( "RENDER", "Bpp", Bpp );
00203         m_pIni->WriteInt( "RENDER", "RefreshRate", Refresh );
00204         m_pIni->WriteInt( "RENDER", "FullScreen", ( m_CheckFullScreen.GetCheck() == BST_CHECKED ) ? 1 : 0 );
00205 
00206         m_pIni->WriteInt( "RENDER", "TextureBpp", ( m_RadioTexture16.GetCheck() == BST_CHECKED ) ? 16 : 32 );
00207         m_pIni->WriteFloat( "RENDER", "MipMapLodBias", m_MipMapLOD );
00208 
00209         
00210         m_pIni->WriteString( "NETWORK", "LobbyRequestHost", pHost );
00211         m_pIni->WriteInt( "NETWORK", "LobbyRequestPort", m_LobbyRequestPort );
00212 
00213         CString ModName;
00214         
00215         m_ComboMod.GetLBText( m_ComboMod.GetCurSel(), ModName );
00216 
00217         ModName += "_Client";
00218         char*   pModName = ModName.GetBuffer( 0 );
00219         m_pIni->WriteString( "GENERAL", "Mod", pModName );
00220         ModName.ReleaseBuffer();
00221 
00222         m_Name.ReleaseBuffer();
00223         Mode.ReleaseBuffer();
00224         m_LobbyRequestHost.ReleaseBuffer();
00225 
00226         // Language
00227         if( m_FrenchRadio.GetCheck() == BST_CHECKED )
00228         {
00229                 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_FRENCH) );
00230         }
00231         else if( m_EnglishRadio.GetCheck() == BST_CHECKED )
00232         {
00233                 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_ENGLISH) );
00234         }
00235         else if( m_SpanishRadio.GetCheck() == BST_CHECKED )
00236         {
00237                 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_SPANISH) );
00238         }
00239         else if( m_ItalianRadio.GetCheck() == BST_CHECKED )
00240         {
00241                 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_ITALIAN) );
00242         }
00243         else if( m_GermanRadio.GetCheck() == BST_CHECKED )
00244         {
00245                 m_pIni->WriteString( "GENERAL", "Language", (char*)GETLANGUAGEPREFIX2(E_LANGUAGE_GERMAN) );
00246         }
00247 
00248 
00249 }
00250 
00251 BOOL CClientPage::OnInitDialog() 
00252 {
00253         CDialog::OnInitDialog();
00254         
00255         m_SpinMipMapLOD.SetRange32( -1, 1 );
00256         
00257         return TRUE;  // return TRUE unless you set the focus to a control
00258                       // EXCEPTION: OCX Property Pages should return FALSE
00259 }
00260 
00261 void CClientPage::OnButtonRun() 
00262 {
00263         ((CGameSetupDlg*)AfxGetApp()->GetMainWnd())->Save();    
00264         
00265         if( m_pIni )
00266                 Deletep( m_pIni );
00267         
00268         STARTUPINFO                             si;
00269     PROCESS_INFORMATION         pi;
00270 
00271     ZeroMemory( &si, sizeof(si) );
00272     si.cb = sizeof(si);
00273 
00274         CreateProcess( NULL, "Client.exe" , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
00275 
00276         ((CGameSetupDlg*)AfxGetApp()->GetMainWnd())->EndDialog( IDOK ); 
00277 }
00278 
00279 void CClientPage::RefreshModList()
00280 {
00281         m_ComboMod.ResetContent();
00282         m_ComboMod.AddString( "<no mod>" );
00283 
00284         KStr                    sPath;
00285         char                    pString[1024];
00286         const char*             pModName;
00287         int                             Selection = 0;
00288         int                             j = 0;
00289         char*                   pStrMod = "Mod_";
00290         char*                   pStrDll = "_Client.dll";
00291 
00292         // Mod actuellement selectionné
00293         pModName = m_pIni->ReadString( "GENERAL", "Mod", "<no mod>" );
00294 
00295         // Recherche tout les mods disponibles
00296         sPath = g_Directory.GetPath( KStr( "Mods" ) );
00297         sPath += "*";
00298         
00299         KSearchFile             SearchFile( sPath );
00300 
00301         for( u32 i = 0; i < SearchFile.GetnFiles(); i ++ )
00302         {
00303                 strcpy( pString, SearchFile.GetpFile( i ) );
00304 
00305                 // Doit commencer par Mod_
00306                 if( strnicmp( pStrMod, pString, strlen( pStrMod ) ) != 0 )
00307                         continue;
00308 
00309                 // Doit finir par _Client.dll
00310                 if( strlen( pString ) <= strlen( pStrDll ) )
00311                         continue;
00312 
00313                 char*   pEnd = &pString[strlen( pString ) - strlen( pStrDll )];
00314                 if( strnicmp( pStrDll, pEnd, strlen( pStrDll ) ) != 0 )
00315                         continue;
00316 
00317                 j ++;
00318                 if( strnicmp( pModName, pString, strlen( pModName ) ) == 0 )
00319                         Selection = j;
00320 
00321                 pString[strlen( pString ) - strlen( pStrDll )] = '\0';
00322                 m_ComboMod.AddString( pString );
00323         }
00324 
00325         m_ComboMod.SetCurSel( Selection );
00326 }
00327 

Generated on Sun Mar 25 20:02:11 2007 for Zythum Project by  doxygen 1.5.1-p1