Subversion Repositories spk

Rev

Rev 197 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#pragma once

#include <vector>
#include "spkdefines.h"
#include "Utils/WStringList.h"

class CPackages;
class CGameExe;

namespace SPK {

        class CVirtualFileSystem;

        typedef struct SGameDir {
                bool                    bLoad;
                Utils::WString  dir;
                Utils::WString  name;
                int                             iGame;
                CVirtualFileSystem *pVfs;
//              SGameExe                *pExe;
        } SGameDir;

        tclass CGameDirectories
        {
        private:
                std::vector<SGameDir *> *_pDirs;
                Utils::WStringList      _lControlledDirs;
                SGameDir        *_pCurrentItr;
                SGameDir        *_pSelected;
                SGameDir        *_pTemporary;
                int                      _iLanguage;

        public:
                CGameDirectories(const Utils::WString &mydoc);
                ~CGameDirectories(void);

                bool add(const Utils::WString &dir, const Utils::WString &name, int iGame, const Utils::WString &addon, bool bLoad);
                bool remove(const Utils::WString &dir);

                bool parse(const Utils::WString &data, CPackages *pPackages);
                bool findDir(const Utils::WString &dir);
                bool writeData(Utils::WStringList* lines);
                bool writeData(std::vector<Utils::WString> &lines);
                void updateCurrentVFS(bool bReload);

                void clear();

                bool setSelectedGameDirectory(int iGame, bool temp = false);
                bool setSelectedDirectory(const Utils::WString &dir, bool temp = false);
                void reselectTemporaryDirectory();
                void setLanguage(int iLang);

                void setLoad(bool bLoad);

                bool isAllTextLoaded() const;
                bool isDir(const Utils::WString &dir) const;
                bool hasSelected() const;
                bool isEmpty() const;
                int highestGame() const;

                Utils::WString currentName() const;
                int currentGame() const;
                bool currentLoad() const;
                CVirtualFileSystem *selectedVFS() const;

                void syncWithControlled(CGameExe *exe);

                Utils::WString findText(int iGame, int iLanguage, int iPage, int iID);
                Utils::WString findText(int iLanguage, int iPage, int iID, Utils::WString missing = Utils::WString::Null());

                Utils::WString first(int iGame = -1);
                Utils::WString next(int iGame = -1);

                Utils::WString firstShield();
                Utils::WString nextShield();
                Utils::WString firstComponentSection();
                Utils::WString nextComponentSection();
                Utils::WString firstDummySection();
                Utils::WString nextDummySection();
                Utils::WString firstBodiesSection();
                Utils::WString nextBodiesSection();
                Utils::WString firstCockpit();
                Utils::WString nextCockpit();
                std::pair<Utils::WString, Utils::WString> firstLaser() const;
                std::pair<Utils::WString, Utils::WString> nextLaser() const;
                std::pair<Utils::WString, Utils::WString> firstMissile() const;
                std::pair<Utils::WString, Utils::WString> nextMissile() const;

        private:
                SGameDir *_findGameDir(int iGame) const;        
                SGameDir *_findGameDir(const Utils::WString &dir) const;        
                void _add(const Utils::WString &dir, const Utils::WString &name, int iGame, const Utils::WString &addon, bool bLoad);

                void _updateControlledDirs(const Utils::WString &mydoc);
        };

}