#ifndef PROJECTBUILDTARGET_H
#define PROJECTBUILDTARGET_H

#include "settings.h"
#include "globals.h"
#include "compiletargetbase.h"
#include <wx/dynarray.h>
#include <wx/filename.h>
#include <wx/list.h>

class cbProject;
class ProjectBuildTarget;

WX_DEFINE_ARRAY(DebuggerBreakpoint*, BreakpointsList);
WX_DEFINE_ARRAY(ProjectBuildTarget*, BuildTargets);

class ProjectFile
{
    public:
        ProjectFile();
        ~ProjectFile();
        
        void AddBuildTarget(const wxString& targetName);
        void RenameBuildTarget(const wxString& oldTargetName, const wxString& newTargetName);
        void RemoveBuildTarget(const wxString& targetName);
        bool ShowOptions(wxWindow* parent);
        void ClearBreakpoints();
        DebuggerBreakpoint* HasBreakpoint(int line);
        void SetBreakpoint(int line);
        void RemoveBreakpoint(int line);
        void ToggleBreakpoint(int line);

        // take as example the relative file sdk/cbProject.cpp
        wxString GetBaseName(); // returns sdk/cbProject
        const wxString& GetObjName(); // returns sdk/cbProject.o
        void SetObjName(const wxString& name);

        cbProject* project;
        wxFileName file;
        wxString relativeFilename;
        wxString relativeToCommonTopLevelPath; // used for the tree, .objs and .deps (has no "..")
        bool compile;
        bool link;
        unsigned short int weight; // files acn be sorted by their weight and a
                    // compiler can compile them in this sorted order
                    // weight ranges from 0 to 100, default is 50
        bool editorOpen; // layout info
        int editorPos; // layout info
        int editorTopLine; // layout info
        wxString buildCommand;
        bool useCustomBuildCommand;
        bool autoDeps;
        wxString customDeps;
        wxString compilerVar;
        BreakpointsList breakpoints;
        wxArrayString buildTargets;
    private:
        wxString m_ObjName;
};
WX_DECLARE_LIST(ProjectFile, FilesList);

/*
 * No description
 */
class DLLIMPORT ProjectBuildTarget : public CompileTargetBase
{
	public:
		// class constructor
		ProjectBuildTarget(cbProject* parentProject);
		// class destructor
		~ProjectBuildTarget();

        virtual cbProject* GetParentProject();
        virtual wxString GetFullTitle(); // returns "projectname - targetname"

        //properties
        virtual const wxString& GetExternalDeps();
        virtual void SetExternalDeps(const wxString& deps);
        virtual const wxString& GetAdditionalOutputFiles();
        virtual void SetAdditionalOutputFiles(const wxString& files);
        virtual bool GetIncludeInTargetAll();
        virtual void SetIncludeInTargetAll(bool buildIt);
        virtual bool GetCreateDefFile();
        virtual void SetCreateDefFile(bool createIt);
        virtual bool GetCreateStaticLib();
        virtual void SetCreateStaticLib(bool createIt);
        virtual bool GetUseConsoleRunner();
        virtual void SetUseConsoleRunner(bool useIt);

        virtual void SetTargetType(const TargetType& pt); // overriden

        // target dependencies: targets to be compiled (if necessary) before this one
        // add a target to the list of dependencies of this target. Be careful 
        // not to add a target more than once
        virtual void AddTargetDep(ProjectBuildTarget* target);
        // get the list of dependency targets of this target
        virtual BuildTargets& GetTargetDeps();

    private:
        cbProject* m_Project;
        wxString m_ExternalDeps;
        wxString m_AdditionalOutputFiles;
        BuildTargets m_TargetDeps;
        bool m_BuildWithAll;
        bool m_CreateStaticLib;
        bool m_CreateDefFile;
        bool m_UseConsoleRunner;
};

#endif // PROJECTBUILDTARGET_H



syntax highlighted by Code2HTML, v. 0.9.1