Subversion Repositories spk

Rev

Rev 101 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#pragma once

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

class CPackages;
class CGameExe;

namespace SPK {

        class CVirtualFileSystem;

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

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

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

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

                bool parse(const Utils::String &data, CPackages *pPackages);
                bool findDir(const Utils::String &dir);
                bool writeData(Utils::CStringList *lines);
                void updateCurrentVFS(bool bReload);

                void clear();

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

                void setLoad(bool bLoad);

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

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

                void syncWithControlled(CGameExe *exe);

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

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

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

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

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

}