/*************************************************************************/ /* File : CKPathManager.h */ /* Author : Nicolas Galinotti */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2000, All Rights Reserved. */ /*************************************************************************/ #ifndef CKPATHMANAGER_H #define CKPATHMANAGER_H "$Id:$" /**************************************************** {filename:CK_PATHMANAGER_CATEGORY} Summary: Enumeration of pre-registred path categories Remarks + The path manager pre-registers 3 categories of path (sound,bitmap and misc. data). See Also: CKPathManager *************************************************/ typedef enum CK_PATHMANAGER_CATEGORY { BITMAP_PATH_IDX =0, // Category index for bitmaps paths DATA_PATH_IDX =1, // Category index for datas paths SOUND_PATH_IDX =2 // Category index for sounds paths } CK_PATHMANAGER_CATEGORY; #include "XClassArray.h" #include "XString.h" typedef XClassArray CKPATHENTRYVECTOR; typedef struct CKPATHCATEGORY { XString m_Name; CKPATHENTRYVECTOR m_Entries; } CKPATHCATEGORY; typedef XClassArray CKPATHCATEGORYVECTOR; /************************************************* Summary: Files paths management Remarks: + The path manager holds a set of paths that everybody can use to retrieve a file. + These paths are put into relevant categories (bitmap,sound,datas) but new categories for application specific data can be defined. + The Path manager also provides some utility methods to work on paths. + At startup (creation of the CKContext) , the path manager always registers three default category: "Bitmap Paths" : Index 0 "Data Paths" : Index 1 "Sound Paths" : Index 2 See Also:CKContext::GetPathManager ****************************************************/ class CKPathManager : public CKBaseManager { public: CKPathManager(CKContext *Context); virtual ~CKPathManager(); // Category Functions // Adds a category, category name must be unique int AddCategory(XString& cat); // Removes a category using its name or its index in category list CKERROR RemoveCategory(int catIdx); // Gets the number of categories int GetCategoryCount(); // Gets the category name at specified index CKERROR GetCategoryName(int catIdx,XString& catName); // Gets the category Index in List int GetCategoryIndex(XString& cat); // Renames a category CKERROR RenameCategory(int catIdx, XString& newName); // Paths Functions // Adds a path to a category int AddPath(int catIdx, XString& path); // Removes a path in a category CKERROR RemovePath(int catIdx, int pathIdx); // Swap paths CKERROR SwapPaths(int catIdx, int pathIdx1, int pathIdx2); // Gets the path count for a category int GetPathCount(int catIdx); // Gets the path at index pathIdx for a category CKERROR GetPathName(int catIdx, int pathIdx,XString& path); // Gets the path at index pathIdx for a category int GetPathIndex(int catIdx, XString& path); // Changes a path in a category CKERROR RenamePath(int catIdx, int pathIdx, XString& path); //--- Finding a file // Resolve File Name in the given category CKERROR ResolveFileName(XString& file,int catIdx,int startIdx = -1); //--- Utilities // Path Type BOOL PathIsAbsolute(XString& file); BOOL PathIsUNC(XString& file); BOOL PathIsURL(XString& file); BOOL PathIsFile(XString& file); // Converts '%20' characters to ' ' void RemoveEscapedSpace(char *str); // Converts '' characters to '%20' void AddEscapedSpace(XString &str); // Virtools tempory storage folder... XString GetVirtoolsTemporaryFolder(); //--- Big Files // Register a BigFile : Absolute path CKERROR AddBigFile(const char* iFileName); // Gets a registered BigFile by index const char* GetBigFile(int iIndex); // Gets the count of registered BigFiles int GetBigFileCount(); // remove a BigFile by index CKERROR RemoveBigFile(int iIndex); // Is the given path reference a file in a BigFile CKBOOL IsBigFilePath(const char* iPath); // Is the given path reference a file in a BigFile XBOOL OpenSubFile(const char* iPath,VxSubFile* oSubFile); static CKPathManager* Cast(CKBaseManager* iM) { return (CKPathManager*)iM; } protected : void Clean(); // Do not use, use RemoveEscapedSpace ! void RemoveSpace(char *str); BOOL TryOpenAbsolutePath(XString& file); BOOL TryOpenFilePath(XString& file); BOOL TryOpenURLPath(XString&file); CKPATHCATEGORYVECTOR m_Categories; XString m_TemporaryFolder; CKBOOL m_TemporaryFolderExist; // Array of big files XArray m_BigFiles; // Cache index of the last big file accessed int m_LastBigFile; }; #endif