#ifndef PROJECTLOADER_H
#define PROJECTLOADER_H

#include "ibaseloader.h"

#define PROJECT_FILE_VERSION_MAJOR _T("1")
#define PROJECT_FILE_VERSION_MINOR _T("1")

class cbProject;
class ProjectBuildTarget;
class ProjectFile;

class DLLIMPORT ProjectLoader : public IBaseLoader
{
	public:
		ProjectLoader(cbProject* project);
		virtual ~ProjectLoader();

        bool Open(const wxString& filename);
        bool Save(const wxString& filename);
        bool FileUpgraded(){ return m_Upgraded; }
        bool FileModified(){ return m_OpenDirty; }
	protected:
        void DoProjectOptions(TiXmlElement* parentNode);
        void DoCompilerOptions(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);
        void DoResourceCompilerOptions(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);
        void DoLinkerOptions(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);
        void DoIncludesOptions(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);
        void DoLibsOptions(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);
        void DoExtraCommands(TiXmlElement* parentNode, ProjectBuildTarget* target = 0L);

        void DoBuild(TiXmlElement* parentNode);
        void DoBuildTarget(TiXmlElement* parentNode);
        void DoBuildTargetOptions(TiXmlElement* parentNode, ProjectBuildTarget* target);

        void DoEnvironment(TiXmlElement* parentNode, CompileOptionsBase* base);

        void DoUnits(TiXmlElement* parentNode);
        void DoUnitOptions(TiXmlElement* parentNode, ProjectFile* file);

        void BeginOptionSection(wxString& buffer, const wxString& sectionName, int nrOfTabs);
        bool DoOptionSection(wxString& buffer, const wxArrayString& array, int nrOfTabs, const wxString& optionName = _("option"));
        void EndOptionSection(wxString& buffer, const wxString& sectionName, int nrOfTabs);

        // shortcut that calls BeginOptionSection(), DoOptionSection() and EndOptionSection()
        void SaveOptions(wxString& buffer, const wxArrayString& array, const wxString& sectionName, int nrOfTabs, const wxString& optionName = _("option"), const wxString& extra = wxEmptyString);
	private:
        void SaveCompilerOptions(wxString& buffer, CompileOptionsBase* object, int nrOfTabs);
        void SaveResourceCompilerOptions(wxString& buffer, CompileOptionsBase* object, int nrOfTabs);
        void SaveLinkerOptions(wxString& buffer, CompileOptionsBase* object, int nrOfTabs);
        void SaveEnvironment(wxString& buffer, CustomVars* vars, int nrOfTabs);

        void ConvertVersion_Pre_1_1();
        void ConvertLibraries(CompileTargetBase* object);

        // accepts a questionable compiler index and returns a valid compiler index
        // (popping up a selection dialog if needed)
        int GetValidCompilerIndex(int proposal, const wxString& scope);

        ProjectLoader(){} // no default ctor

        cbProject* m_pProject;
        bool m_Upgraded;
        bool m_OpenDirty; // set this to true if the project is loaded but modified (like the case when setting another compiler, if invalid)
};

#endif // PROJECTLOADER_H



syntax highlighted by Code2HTML, v. 0.9.1