static void ParseKeyName(const CTString &strKey, HKEY &hKeyRoot, CTString &strKeyPath, CTString &strKeyName) { CTString strRemain = strKey; // separate key into the value part and path strKeyName = CTFileName(strRemain).FileName(); strRemain = CTFileName(strRemain).FileDir(); strRemain.TrimRight(strlen(strRemain)-1); // removes trailing backslash // try to find root key value if (strRemain.RemovePrefix("HKEY_CLASSES_ROOT\\")) { hKeyRoot = HKEY_CLASSES_ROOT; } else if (strRemain.RemovePrefix("HKEY_CURRENT_CONFIG\\")) { hKeyRoot = HKEY_CURRENT_CONFIG; } else if (strRemain.RemovePrefix("HKEY_CURRENT_USER\\")) { hKeyRoot = HKEY_CURRENT_USER; } else if (strRemain.RemovePrefix("HKEY_LOCAL_MACHINE\\")) { hKeyRoot = HKEY_LOCAL_MACHINE; } else if (strRemain.RemovePrefix("HKEY_USERS\\")) { hKeyRoot = HKEY_USERS; } else { ASSERT(FALSE); hKeyRoot = HKEY_CURRENT_USER; } strKeyPath = strRemain; }
/* * Get extension part of a filename. */ CTFileName CTFileName::FileExt() const { ASSERT(IsValid()); // find last dot in the string char *pExtension = strrchr( str_String, '.'); // if there is no dot if( pExtension == NULL) { // return no extension return( CTFileName("")); } // return a copy of the extension part, together with the dot return( CTFileName( pExtension)); }
void CScriptView::OnScriptUpdateMipmodels() { // find document with same name CModelerDoc *pDoc = (CModelerDoc *) GetDocument(); CTFileName fnScriptName = CTString(pDoc->GetPathName()); CTFileName fnModelName = fnScriptName.FileDir() + fnScriptName.FileName() + ".mdl"; POSITION pos = theApp.m_pdtModelDocTemplate->GetFirstDocPosition(); while (pos!=NULL) { CModelerDoc *pmdCurrent = (CModelerDoc *)theApp.m_pdtModelDocTemplate->GetNextDoc(pos); if( CTFileName( CTString(pmdCurrent->GetPathName())) == fnModelName) { POSITION pos = pmdCurrent->GetFirstViewPosition(); CView *pView = pmdCurrent->GetNextView( pos); if( DYNAMIC_DOWNCAST(CModelerView, pView) != NULL) { CModelerView* pModelerView = (CModelerView *) pView; if(pModelerView != NULL) { pModelerView->OnScriptUpdateMipmodels(); pModelerView->SetActiveWindow(); pModelerView->SetFocus(); CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd()); pMainFrame->MDIActivate(pModelerView->GetParentFrame()); } } break; } } }
/* * Get directory part of a filename. */ CTFileName CTFileName::FileDir() const { ASSERT(IsValid()); // make a temporary copy of string CTFileName strPath(*this); // find last backlash in it char *pPathBackSlash = strrchr( strPath.str_String, '\\'); // if there is no backslash if( pPathBackSlash == NULL) { // return emptystring as directory return( CTFileName("")); } // set end of string after where the backslash was pPathBackSlash[1] = 0; // return a copy of temporary string return( CTFileName( strPath)); }
/* * Get name part of a filename. */ CTFileName CTFileName::FileName() const { ASSERT(IsValid()); // make a temporary copy of string CTFileName strPath(*this); // find last dot in it char *pDot = strrchr( strPath.str_String, '.'); // if there is a dot if( pDot != NULL) { // set end of string there pDot[0] = 0; } // find last backlash in what's left char *pBackSlash = strrchr( strPath.str_String, '\\'); // if there is no backslash if( pBackSlash == NULL) { // return it all as filename return( CTFileName(strPath)); } // return a copy of temporary string, starting after the backslash return( CTFileName( pBackSlash+1)); }
CParticleGroup *CParticleGroup::Copy() { CParticleGroup *pParticleGroup = new CParticleGroup; pParticleGroup->m_strName = m_strName; pParticleGroup->SetTexture(CTFileName(m_fnTexture.c_str())); for(UINT i=0; i<m_vectorCommonProcess.size(); ++i) { pParticleGroup->AddCommonProcess(m_vectorCommonProcess[i]); } if(m_pParticlesEmitter) pParticleGroup->SetEmitter(m_pParticlesEmitter); if(m_pParticlesAbsorption) pParticleGroup->SetAbsorption(m_pParticlesAbsorption); pParticleGroup->SetRenderType(m_eRenderType); pParticleGroup->m_eBlendType = m_eBlendType; pParticleGroup->m_mexWidth = m_mexWidth; pParticleGroup->m_mexHeight = m_mexHeight; pParticleGroup->m_iCol = m_iCol; pParticleGroup->m_iRow = m_iRow; return pParticleGroup; }
void InitStreams(void) { // obtain information about system // !!! FIXME: Move this into an abstraction of some sort... #ifdef PLATFORM_WIN32 SYSTEM_INFO siSystemInfo; GetSystemInfo( &siSystemInfo); // and remember page size _ulPageSize = siSystemInfo.dwPageSize*16; // cca. 64kB on WinNT/Win95 #else _ulPageSize = PAGESIZE; #endif // keep a copy of path for setting purposes _fnmApp = _fnmApplicationPath; // if no mod defined yet if (_fnmMod=="") { // check for 'default mod' file LoadStringVar(CTString("DefaultMod.txt"), _fnmMod); } CPrintF(TRANSV("Current mod: %s\n"), (_fnmMod=="") ? TRANS("<none>") : (const char *) (CTString&)_fnmMod); // if there is a mod active if (_fnmMod!="") { // load mod's include/exclude lists CPrintF(TRANSV("Loading mod include/exclude lists...\n")); BOOL bOK = FALSE; bOK |= LoadFileList(_afnmBaseWriteInc , CTString("BaseWriteInclude.lst")); bOK |= LoadFileList(_afnmBaseWriteExc , CTString("BaseWriteExclude.lst")); bOK |= LoadFileList(_afnmBaseBrowseInc, CTString("BaseBrowseInclude.lst")); bOK |= LoadFileList(_afnmBaseBrowseExc, CTString("BaseBrowseExclude.lst")); // if none found if (!bOK) { // the mod is not valid _fnmMod = CTString(""); CPrintF(TRANSV("Error: MOD not found!\n")); // if mod is ok } else { // remember mod name (the parameter that is passed on cmdline) _strModName = _fnmMod; _strModName.DeleteChar(_strModName.Length()-1); _strModName = CTFileName(_strModName).FileName(); } } // find eventual extension for the mod's dlls _strModExt = ""; LoadStringVar(CTString("ModExt.txt"), _strModExt); CPrintF(TRANSV("Loading group files...\n")); CDynamicArray<CTString> *files = NULL; // for each group file in base directory files = _pFileSystem->FindFiles(_fnmApplicationPath, "*.gro"); int max = files->Count(); int i; // for each .gro file in the directory for (i = 0; i < max; i++) { // add it to active set UNZIPAddArchive( _fnmApplicationPath+((*files)[i]) ); } delete files; // if there is a mod active if (_fnmMod!="") { // for each group file in mod directory files = _pFileSystem->FindFiles(_fnmApplicationPath+_fnmMod, "*.gro"); max = files->Count(); for (i = 0; i < max; i++) { UNZIPAddArchive( _fnmApplicationPath + _fnmMod + ((*files)[i]) ); } delete files; } // if there is a CD path if (_fnmCDPath!="") { // for each group file on the CD files = _pFileSystem->FindFiles(_fnmCDPath, "*.gro"); max = files->Count(); for (i = 0; i < max; i++) { UNZIPAddArchive( _fnmCDPath + ((*files)[i]) ); } delete files; // if there is a mod active if (_fnmMod!="") { // for each group file in mod directory files = _pFileSystem->FindFiles(_fnmCDPath+_fnmMod, "*.gro"); max = files->Count(); for (i = 0; i < max; i++) { UNZIPAddArchive( _fnmCDPath + _fnmMod + ((*files)[i]) ); } delete files; } } // try to try { // read the zip directories UNZIPReadDirectoriesReverse_t(); // if failed } catch( char *strError) { // report warning CPrintF( TRANS("There were group file errors:\n%s"), strError); } CPrintF("\n"); const char *dirsep = CFileSystem::GetDirSeparator(); LoadFileList(_afnmNoCRC, CTFILENAME("Data") + CTString(dirsep) + CTString("NoCRC.lst")); _pShell->SetINDEX(CTString("sys")+"_iCPU"+"Misc", 1); }
CTFileName CDynamicLoader::ConvertLibNameToPlatform(const char *libname) { return(CTFileName(CTString(libname))); }
void CDlgRenderingPreferences::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs; CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs; // if dialog is recieving data if( (pDX->m_bSaveAndValidate == FALSE) && IsWindow( m_hWnd) && IsWindow( m_VertexFillType.m_hWnd) && IsWindow( m_EdgesFillType.m_hWnd) && IsWindow( m_PolygonFillType.m_hWnd) && IsWindow( m_TextureFillType.m_hWnd) ) { // world rendering preferences m_VertexColors.SetColor( pwrpPrefs.GetVerticesInkColor()); m_EdgesColors.SetColor( pwrpPrefs.GetEdgesInkColor()); m_PolygonColors.SetColor( pwrpPrefs.GetPolygonsInkColor()); m_PaperColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor); m_SelectionColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor); m_GridColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor); m_fFarClipPlane=pwrpPrefs.wrp_fFarClipPlane; m_bApplyFarClipInIsometricProjection=pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection; m_strBcgTexture = CTFileName(CTString( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture)).FileName(); // get render editor models flag m_bRenderEditorModels = pwrpPrefs.IsEditorModelsOn(); // get render field brushes flag m_bRenderFieldBrushes = pwrpPrefs.IsFieldBrushesOn(); // get use texture for background flag m_bUseTextureForBcg = pwrpPrefs.IsBackgroundTextureOn(); m_bRenderMirrors = pwrpPrefs.IsMirrorsOn(); m_bRenderFog = pwrpPrefs.IsFogOn(); m_bRenderHaze = pwrpPrefs.IsHazeOn(); // get auto rendering range flag m_bAutoRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange; // get rendering range m_fRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange; // enable/disable edit render range control depending on auto range flag UpdateEditRangeControl(); // fill values for vertice's combo box m_VertexFillType.ResetContent(); m_VertexFillType.AddString( L"No vertices"); m_VertexFillType.AddString( L"Vertices ink"); m_VertexFillType.AddString( L"Polygon color"); m_VertexFillType.AddString( L"Sector color"); // fill values for edges's combo box m_EdgesFillType.ResetContent(); m_EdgesFillType.AddString( L"No edges"); m_EdgesFillType.AddString( L"Edges ink"); m_EdgesFillType.AddString( L"Polygon color"); m_EdgesFillType.AddString( L"Sector color"); // fill values for polygons's combo box m_PolygonFillType.ResetContent(); m_PolygonFillType.AddString( L"No polygons"); m_PolygonFillType.AddString( L"Polygons ink"); m_PolygonFillType.AddString( L"Polygon color"); m_PolygonFillType.AddString( L"Sector color"); m_PolygonFillType.AddString( L"Texture"); // fill values for model's texture combo m_TextureFillType.ResetContent(); m_TextureFillType.AddString( L"No fill"); m_TextureFillType.AddString( L"White color"); m_TextureFillType.AddString( L"Surface colors"); m_TextureFillType.AddString( L"On colors"); m_TextureFillType.AddString( L"Off colors"); m_TextureFillType.AddString( L"Texture"); // fill values for flare FX combo m_comboFlareFX.ResetContent(); m_comboFlareFX.AddString( L"None"); m_comboFlareFX.AddString( L"Single flare"); m_comboFlareFX.AddString( L"Reflections"); m_comboFlareFX.AddString( L"Reflections and glare"); INDEX iFillType; // set current fill type to vertices combo box iFillType = pwrpPrefs.GetVerticesFillType(); m_VertexFillType.SetCurSel( iFillType); // set current fill type to edges combo box iFillType = pwrpPrefs.GetEdgesFillType(); m_EdgesFillType.SetCurSel( iFillType); // set current fill type to polygons combo box iFillType = pwrpPrefs.GetPolygonsFillType(); m_PolygonFillType.SetCurSel( iFillType); // set currently selected modeler's texture rendering type ULONG rtRenderType = pmrpPrefs.GetRenderType(); iFillType = 0; if( (rtRenderType & RT_NO_POLYGON_FILL) != 0) iFillType = 0; else if( (rtRenderType & RT_WHITE_TEXTURE) != 0) iFillType = 1; else if( (rtRenderType & RT_SURFACE_COLORS) != 0) iFillType = 2; else if( (rtRenderType & RT_ON_COLORS) != 0) iFillType = 3; else if( (rtRenderType & RT_OFF_COLORS) != 0) iFillType = 4; else if( (rtRenderType & RT_TEXTURE) != 0) iFillType = 5; m_TextureFillType.SetCurSel( iFillType); enum CWorldRenderPrefs::LensFlaresType lftFlareFX = pwrpPrefs.GetLensFlares(); m_comboFlareFX.SetCurSel( (INDEX) lftFlareFX); // set model rendering flags m_bBoundingBox = pmrpPrefs.BBoxAllVisible(); m_bHidenLines = pmrpPrefs.HiddenLines(); m_bShadows = pmrpPrefs.GetShadowQuality() == 0; m_bWireFrame = pmrpPrefs.WireOn(); } //{{AFX_DATA_MAP(CDlgRenderingPreferences) DDX_Control(pDX, IDC_FLARE_FX, m_comboFlareFX); DDX_Control(pDX, IDC_SELECTION_COLOR, m_SelectionColor); DDX_Control(pDX, IDC_GRID_COLOR, m_GridColor); DDX_Control(pDX, IDC_PAPER_COLOR, m_PaperColor); DDX_Control(pDX, IDC_TEXTURE_FILL_TYPE, m_TextureFillType); DDX_Control(pDX, IDC_EDGES_FILL_TYPE, m_EdgesFillType); DDX_Control(pDX, IDC_POLYGON_FILL_TYPE, m_PolygonFillType); DDX_Control(pDX, IDC_VERTEX_FILL_TYPE, m_VertexFillType); DDX_Control(pDX, IDC_VERTEX_COLORS, m_VertexColors); DDX_Control(pDX, IDC_POLYGON_COLORS, m_PolygonColors); DDX_Control(pDX, IDC_EDGES_COLORS, m_EdgesColors); DDX_Check(pDX, IDC_BBOX, m_bBoundingBox); DDX_Check(pDX, IDC_HIDEN_LINES, m_bHidenLines); DDX_Check(pDX, IDC_SHADOWS, m_bShadows); DDX_Check(pDX, IDC_WIRE_FRAME, m_bWireFrame); DDX_Text(pDX, IDC_RENDERING_RANGE, m_fRenderingRange); DDV_MinMaxFloat(pDX, m_fRenderingRange, 1.f, 10000.f); DDX_Check(pDX, IDC_AUTO_RENDERING_RANGE, m_bAutoRenderingRange); DDX_Check(pDX, IDC_RENDER_EDITOR_MODELS, m_bRenderEditorModels); DDX_Check(pDX, IDC_USE_TEXTURE_FOR_BCG, m_bUseTextureForBcg); DDX_Check(pDX, IDC_RENDER_FIELDS, m_bRenderFieldBrushes); DDX_Check(pDX, IDC_RENDER_FOG, m_bRenderFog); DDX_Check(pDX, IDC_RENDER_HAZE, m_bRenderHaze); DDX_Check(pDX, IDC_RENDER_MIRRORS, m_bRenderMirrors); DDX_Text(pDX, IDC_BCG_PICTURE_T, m_strBcgTexture); DDX_Text(pDX, IDC_FAR_CLIP_PLANE, m_fFarClipPlane); DDV_MinMaxFloat(pDX, m_fFarClipPlane, -1.f, 1.e+007f); DDX_Check(pDX, IDC_APPLY_CLIP_FOR_ISOMETRIC, m_bApplyFarClipInIsometricProjection); //}}AFX_DATA_MAP // if dialog is giving data if( pDX->m_bSaveAndValidate != FALSE) { // set auto rendering range flag theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange = m_bAutoRenderingRange; // set rendering range theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange = m_fRenderingRange; // set drawing of editor models on or off pwrpPrefs.SetEditorModelsOn( m_bRenderEditorModels); // set render field brushes flag pwrpPrefs.SetFieldBrushesOn( m_bRenderFieldBrushes); // set use texture for background flag pwrpPrefs.SetBackgroundTextureOn( m_bUseTextureForBcg); pwrpPrefs.SetMirrorsOn( m_bRenderMirrors); pwrpPrefs.SetFogOn( m_bRenderFog); pwrpPrefs.SetHazeOn( m_bRenderHaze); // enable/disable edit render range control depending on auto range flag UpdateEditRangeControl(); // set colors pwrpPrefs.SetVerticesInkColor( m_VertexColors.GetColor()); pwrpPrefs.SetEdgesInkColor( m_EdgesColors.GetColor()); pwrpPrefs.SetPolygonsInkColor( m_PolygonColors.GetColor()); theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor = m_PaperColor.GetColor(); theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor = m_GridColor.GetColor(); theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor = m_SelectionColor.GetColor(); pwrpPrefs.wrp_fFarClipPlane=m_fFarClipPlane; pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection=m_bApplyFarClipInIsometricProjection; enum CWorldRenderPrefs::FillType ftFillType; // get current fill type from vertices combo box ftFillType = (enum CWorldRenderPrefs::FillType) m_VertexFillType.GetCurSel(); pwrpPrefs.SetVerticesFillType( ftFillType); // get current fill type from edges combo box ftFillType = (enum CWorldRenderPrefs::FillType) m_EdgesFillType.GetCurSel(); pwrpPrefs.SetEdgesFillType( ftFillType); // get current fill type from polygons combo box ftFillType = (enum CWorldRenderPrefs::FillType) m_PolygonFillType.GetCurSel(); pwrpPrefs.SetPolygonsFillType( ftFillType); enum CWorldRenderPrefs::LensFlaresType lftFlares; // get type for rendering flares lftFlares = (enum CWorldRenderPrefs::LensFlaresType) m_comboFlareFX.GetCurSel(); pwrpPrefs.SetLensFlaresType( lftFlares); // get current model's texturizing type from model's texture combo box ULONG ulMdlFillType; ulMdlFillType = m_TextureFillType.GetCurSel(); switch( ulMdlFillType) { case 0: { pmrpPrefs.SetRenderType( RT_NO_POLYGON_FILL); break; } case 1: { pmrpPrefs.SetRenderType( RT_WHITE_TEXTURE); break; } case 2: { pmrpPrefs.SetRenderType( RT_SURFACE_COLORS); break; } case 3: { pmrpPrefs.SetRenderType( RT_ON_COLORS); break; } case 4: { pmrpPrefs.SetRenderType( RT_OFF_COLORS); break; } case 5: { pmrpPrefs.SetRenderType( RT_TEXTURE); break; } default: { ASSERTALWAYS( "Invalid selection found in model's texture combo box"); } } // get rest of model's rendering preferences pmrpPrefs.SetWire( m_bWireFrame); pmrpPrefs.SetHiddenLines( m_bHidenLines); pmrpPrefs.BBoxAllShow( m_bBoundingBox); if( m_bShadows) { pmrpPrefs.SetShadowQuality( 0); } else { pmrpPrefs.SetShadowQuality( 255); } } }
void CScriptView::OnScriptMakeModel() { // First we save script file CModelerDoc *pDoc = (CModelerDoc *) GetDocument(); CTFileName fnScriptName = CTString(pDoc->GetPathName()); CTFileName fnModelName = fnScriptName.FileDir() + fnScriptName.FileName() + ".mdl"; try { fnScriptName.RemoveApplicationPath_t(); } catch( char *err_str) { AfxMessageBox( err_str); return; } pDoc->OnSaveDocument( pDoc->GetPathName()); // close mdl document with same name POSITION pos = theApp.m_pdtModelDocTemplate->GetFirstDocPosition(); while (pos!=NULL) { CModelerDoc *pmdCurrent = (CModelerDoc *)theApp.m_pdtModelDocTemplate->GetNextDoc(pos); if( CTFileName( CTString(pmdCurrent->GetPathName())) == fnModelName) { pmdCurrent->OnCloseDocument(); break; } } // Now we will create one instance of new document of type CModelerDoc CDocument* pDocument = theApp.m_pdtModelDocTemplate->CreateNewDocument(); if (pDocument == NULL) { TRACE0("CDocTemplate::CreateNewDocument returned NULL.\n"); AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); return; } ASSERT_VALID(pDocument); BOOL bAutoDelete = pDocument->m_bAutoDelete; pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong CFrameWnd* pFrame = theApp.m_pdtModelDocTemplate->CreateNewFrame(pDocument, NULL); pDocument->m_bAutoDelete = bAutoDelete; if (pFrame == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); delete pDocument; // explicit delete on error return; } ASSERT_VALID(pFrame); pDocument->SetPathName( fnModelName, FALSE); pDocument->SetTitle( fnModelName.FileName() + fnModelName.FileExt()); char strError[ 256]; if( !((CModelerDoc *)pDocument)->CreateModelFromScriptFile( fnScriptName, strError)) { pDocument->OnCloseDocument(); AfxMessageBox( strError); return; } theApp.m_pdtModelDocTemplate->InitialUpdateFrame(pFrame, pDocument, TRUE); ((CModelerDoc *)pDocument)->m_emEditModel.edm_md.md_bPreparedForRendering = FALSE; pDocument->SetModifiedFlag(); // add textures from .ini file CTFileName fnIniFileName = fnScriptName.NoExt() + ".ini"; try { ((CModelerDoc *)pDocument)->m_emEditModel.CSerial::Load_t(fnIniFileName); } catch( char *strError) { // ignore errors (void) strError; } }