123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- /* Copyright (c) 2002-2012 Croteam Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as published by
- the Free Software Foundation
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
- #include "StdH.h"
- #include <Engine/Templates/Stock_CTextureData.h>
- // global engine gui handling object
- CEngineGUI _EngineGUI;
- /*
- We cannot use dllmain if using MFC.
- See MSDN article "Regular DLLs Dynamically Linked to MFC" if initialization is needed.
- BOOL APIENTRY DllMain( HANDLE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
- */
- void CEngineGUI::SelectMode( CDisplayMode &dm, GfxAPIType &gat)
- {
- // stupid way to change resources, but it must be done
- HANDLE hOldResource = AfxGetResourceHandle();
- // call select mode dialog
- CDlgSelectMode dlgSelectMode( dm, gat);
- // activate CTGfx resources
- AfxSetResourceHandle( GetModuleHandleA(ENGINEGUI_DLL_NAME));
- INDEX iDialogResult = dlgSelectMode.DoModal();
- // restore resources
- AfxSetResourceHandle( (HINSTANCE)hOldResource);
- // if mode dialog ended successfully
- if( iDialogResult == IDOK) SetFullScreenModeToRegistry( "Display modes", dm, gat);
- }
- CTFileName CEngineGUI::CreateTexture(CTFileName fnTexFileToRecreate/*=CTString("")*/,
- CDynamicArray<CTFileName> *pafnCreatedTextures/*=NULL*/)
- {
- CTFileName fnResult;
- // stupid way to change resources, but it must be done
- HANDLE hOldResource = AfxGetResourceHandle();
- // activate CTGfx resources
- AfxSetResourceHandle( GetModuleHandleA(ENGINEGUI_DLL_NAME) );
- // if create texture is called with a wish to recreate texture
- if( fnTexFileToRecreate != "")
- {
- fnResult = fnTexFileToRecreate;
- CTextureData *ptdTextureToRecreate;
- CTFileName fnToRecreateNoExt =
- fnTexFileToRecreate.FileDir()+fnTexFileToRecreate.FileName();
- // try to
- try
- {
- // obtain texture to recreate
- ptdTextureToRecreate = _pTextureStock->Obtain_t( fnTexFileToRecreate);
- ptdTextureToRecreate->Reload();
- // if texture is of effect type, call create effect texture dialog
- if( ptdTextureToRecreate->td_ptegEffect != NULL)
- {
- // call create effect texture dialog with .tex name
- CDlgCreateEffectTexture dlgCreateEffectTexture( fnTexFileToRecreate);
- dlgCreateEffectTexture.DoModal();
- }
- // else this texture was created from script or from single picture
- else
- {
- // search for script with same name
- CTString strFullNameNoExt = _fnmApplicationPath +
- fnTexFileToRecreate.FileDir() + fnTexFileToRecreate.FileName();
- // if there is tga picture with same name
- if( GetFileAttributesA( strFullNameNoExt+".tga") != -1)
- {
- // call create normal texture dialog with tga picture name
- CDlgCreateNormalTexture dlgCreateNormalTexture( fnToRecreateNoExt+".tga");
- if( dlgCreateNormalTexture.m_bSourcePictureValid)
- {
- if( dlgCreateNormalTexture.DoModal() == IDOK)
- {
- fnResult = dlgCreateNormalTexture.m_fnCreatedFileName;
- }
- }
- }
- // else if there is pcx picture with same name
- else if( GetFileAttributesA( strFullNameNoExt+".pcx") != -1)
- {
- // call create normal texture dialog with tga picture name
- CDlgCreateNormalTexture dlgCreateNormalTexture( fnToRecreateNoExt+".pcx");
- if( dlgCreateNormalTexture.m_bSourcePictureValid)
- {
- if( dlgCreateNormalTexture.DoModal() == IDOK)
- {
- fnResult = dlgCreateNormalTexture.m_fnCreatedFileName;
- }
- }
- }
- // else if script exists
- else if( GetFileAttributesA( strFullNameNoExt+".scr") != -1)
- {
- CDynamicArray<CTFileName> afnScript;
- CTFileName *pfnScript = afnScript.New();
- *pfnScript = fnToRecreateNoExt+".scr";
- // call create animated texture dialog with script name
- CDlgCreateAnimatedTexture dlgCreateAnimatedTexture( afnScript);
- dlgCreateAnimatedTexture.DoModal();
- }
- else
- {
- WarningMessage( "Cannot find source for recreating texture: \"%s\"", (CTString&)fnTexFileToRecreate);
- }
- }
- // reload the texture
- ptdTextureToRecreate->Reload();
- // release obtained texture
- _pTextureStock->Release( ptdTextureToRecreate);
- }
- catch( char *err_str)
- {
- WarningMessage( err_str);
- }
- }
- else
- {
- // call choose texture type dialog
- CDlgChooseTextureType dlgChooseTextureType;
- int iDlgResult = dlgChooseTextureType.DoModal();
- // if user choosed a texture type
- if( (iDlgResult != -1) && (iDlgResult >= 0) && (iDlgResult <= 2) )
- {
- // if result is 2 we want to create effect texture
- if( iDlgResult == 2)
- {
- // no file requester, just call dialog
- CDlgCreateEffectTexture dlgCreateEffectTexture;
- if( dlgCreateEffectTexture.DoModal() == IDOK)
- {
- fnResult = dlgCreateEffectTexture.m_fnCreatedTextureName;
- if( pafnCreatedTextures != NULL)
- {
- CTFileName *pfnCreatedTexture = pafnCreatedTextures->New();
- *pfnCreatedTexture = fnResult;
- }
- }
- }
- // both normal and animated textures need to call open file requester
- else
- {
- // different filters for different requests
- char *pFilters = "All files (*.*)\0*.*\0\0";
- // if dialog result is 0 we want to create normal texture
- if( iDlgResult == 0)
- {
- pFilters = "Pictures (*.pcx;*.tga)\0*.pcx;*.tga\0"
- "PCX files (*.pcx)\0*.pcx\0"
- "TGA files (*.tga)\0*.tga\0\0";
- }
- // if dialog result is 1 we want to create animated texture
- else if( iDlgResult == 1)
- {
- pFilters = "Picture or script files (*.pcx;*.tga;*.scr)\0*.pcx;*.tga;*.scr\0"
- "PCX files (*.pcx)\0*.pcx\0"
- "TGA files (*.tga)\0*.tga\0"
- "Script files (*.scr)\0;*.scr\0\0";
- }
- // call file requester for opening textures
- CDynamicArray<CTFileName> afnCreateTexture;
- FileRequester( "Create texture", pFilters, KEY_NAME_CREATE_TEXTURE_DIR,
- "Textures\\", "", &afnCreateTexture);
- if( afnCreateTexture.Count() == 0)
- {
- // restore resources
- AfxSetResourceHandle( (HINSTANCE) hOldResource);
- return CTString("");
- }
- // if requested texture type is 0 we want to create normal texture
- if( iDlgResult == 0)
- {
- // create textures
- FOREACHINDYNAMICARRAY( afnCreateTexture, CTFileName, itPicture)
- {
- CTFileName fnSource = itPicture.Current();
- if( (fnSource.FileExt() == ".pcx") || (fnSource.FileExt() == ".tga") )
- {
- // call create normal texture dialog
- CDlgCreateNormalTexture dlgCreateNormalTexture( fnSource);
- if( dlgCreateNormalTexture.m_bSourcePictureValid)
- {
- if( dlgCreateNormalTexture.DoModal() == IDOK)
- {
- fnResult = dlgCreateNormalTexture.m_fnCreatedFileName;
- if( pafnCreatedTextures != NULL)
- {
- CTFileName *pfnCreatedTexture = pafnCreatedTextures->New();
- *pfnCreatedTexture = fnResult;
- }
- }
- }
- }
- }
- }
- // if requested texture type is 1 we want to create animated texture
- else if( iDlgResult == 1)
- {
- // call create animated texture dialog
- CDlgCreateAnimatedTexture dlgCreateAnimatedTexture( afnCreateTexture);
- INDEX iDlgResult = dlgCreateAnimatedTexture.DoModal();
- if( iDlgResult == IDOK)
- {
- fnResult = dlgCreateAnimatedTexture.m_fnCreatedFileName;
- if( pafnCreatedTextures != NULL)
- {
- CTFileName *pfnCreatedTexture = pafnCreatedTextures->New();
- *pfnCreatedTexture = fnResult;
- }
- }
- }
- }
- }
- }
- // restore resources
- AfxSetResourceHandle( (HINSTANCE) hOldResource);
- return fnResult;
- }
- /* Functions used by application for getting and setting registry keys concerning modes */
- void CEngineGUI::GetFullScreenModeFromRegistry( CTString strSectionName, CDisplayMode &dm, GfxAPIType &gat)
- {
- // prepare full screen mode as default
- dm.dm_pixSizeI = 640;
- dm.dm_pixSizeJ = 480;
- dm.dm_ddDepth = DD_DEFAULT;
- // read FS parameters from registry
- CTString strResult = CStringA(AfxGetApp()->GetProfileString( CString(strSectionName), L"Full screen mode", L"640 x 480 x 0"));
- strResult.ScanF( "%d x %d x %d", &dm.dm_pixSizeI, &dm.dm_pixSizeJ, &dm.dm_ddDepth);
- if( dm.dm_ddDepth<DD_DEFAULT || dm.dm_ddDepth>DD_32BIT) dm.dm_ddDepth = DD_DEFAULT;
- strResult = CStringA(AfxGetApp()->GetProfileString( CString(strSectionName), L"Full screen API", L"OpenGL"));
- #ifdef SE1_D3D
- gat = (strResult=="Direct3D") ? GAT_D3D : GAT_OGL;
- #else // SE1_D3D
- gat = GAT_OGL;
- #endif // SE1_D3D
- }
- void CEngineGUI::SetFullScreenModeToRegistry( CTString strSectionName, CDisplayMode dm, GfxAPIType gat)
- {
- CTString strDM( 0, "%d x %d x %d", dm.dm_pixSizeI, dm.dm_pixSizeJ, dm.dm_ddDepth);
- #ifdef SE1_D3D
- CTString strGAT = (gat==GAT_D3D) ? "Direct3D" : "OpenGL";
- #else // SE1_D3D
- CTString strGAT = "OpenGL";
- #endif // SE1_D3D
- AfxGetApp()->WriteProfileString(CString(strSectionName), L"Full screen mode", CString(strDM));
- AfxGetApp()->WriteProfileString(CString(strSectionName), L"Full screen API", CString(strGAT));
- }
|