void CFileListManager::Refresh() { m_bRefreshRequired = false; RemoveAll(); bool bP4Connected = p4->IsConnectedToServer(); int nFiles = g_pDataModel->NumFileIds(); for ( int i = 0; i < nFiles; ++i ) { DmFileId_t fileid = g_pDataModel->GetFileId( i ); const char *pFileName = g_pDataModel->GetFileName( fileid ); if ( !pFileName || !*pFileName ) continue; // skip DMFILEID_INVALID and the default fileid "" bool bLoaded = g_pDataModel->IsFileLoaded( fileid ); int nElements = g_pDataModel->NumElementsInFile( fileid ); bool bChanged = false; // TODO - find out for real bool bInPerforce = bP4Connected && p4->IsFileInPerforce( pFileName ); bool bOpenForEdit = bInPerforce && p4->GetFileState( pFileName ) != P4FILE_UNOPENED; char path[ 256 ]; V_ExtractFilePath( pFileName, path, sizeof( path ) ); AddItem( fileid, V_UnqualifiedFileName( pFileName ), path, bLoaded, nElements, bChanged, bInPerforce, bOpenForEdit ); } }
bool F_Compose_File_Path(PCHARS szProjFilePath, PCHARS fileExtensionWithDot, ANSICHAR (&destBuf)[BUF_SIZE]) { AssertPtr( szProjFilePath ); AssertPtr( destBuf ); StaticAssert( BUF_SIZE > 0 ); // pure name (e.g. "MyProject") ANSICHAR projName[ 128 ]; V_FileBase( szProjFilePath, projName, NUMBER_OF(projName) ); // path relative to exe (e.g. "Projects/MyProject/") ANSICHAR projFilePath[ FS_MAX_PATH ]; VRET_FALSE_IF_NOT( V_ExtractFilePath( szProjFilePath, projFilePath, NUMBER_OF(projFilePath) ) ); // path to .INI file relative to exe (e.g. "Projects/MyProject/MyProject.INI") ANSICHAR outFilePath[ FS_MAX_PATH ]; V_ComposeFileName( projFilePath, projName, outFilePath, NUMBER_OF(outFilePath) ); V_SetExtension( outFilePath, fileExtensionWithDot, NUMBER_OF(outFilePath) ); mxStrCpyNAnsi( destBuf, outFilePath, NUMBER_OF(destBuf) ); return true; }