demotool/c-project.hh
Emmanuel BENOîT ae3958f785 Project manager - Use project path to load everything
+ Curves, script and shaders are loaded from the path of the project.
+ Main tool can be passed a parameter to specify the project's root.
2017-11-24 14:53:41 +01:00

44 lines
1,009 B
C++

#pragma once
#ifndef REAL_BUILD
# include "externals.hh"
#endif
#include <ebcl/Sets.hh>
struct T_Project;
class A_ProjectPathListener
{
friend struct T_Project;
public:
virtual ~A_ProjectPathListener( ) = 0;
protected:
virtual void projectPathChanged( ) noexcept = 0;
};
struct T_Project
{
explicit T_Project( T_String const& path ) noexcept
{ setBasePath( path ); }
void setBasePath( T_String const& path ) noexcept;
T_String const& basePath( ) const noexcept
{ return basePath_; }
T_String pathOf( T_String const& file ) const noexcept;
T_String pathOf( char const* file ) const noexcept;
void addListener( A_ProjectPathListener* listener ) noexcept
{ listeners_.add( listener ); }
void removeListener( A_ProjectPathListener* listener ) noexcept
{ listeners_.remove( listener ); }
private:
T_String basePath_;
ebcl::T_Set< A_ProjectPathListener* > listeners_{
ebcl::UseTag< ebcl::ArrayBacked< 16 > >( )
};
void setBasePathInternal( T_String path ) noexcept;
};