Sync - Started working on UI overrides
This commit is contained in:
parent
7f3eed227b
commit
42b9b2bdb3
2 changed files with 192 additions and 10 deletions
115
sync.cc
115
sync.cc
|
@ -358,11 +358,110 @@ uint32_t T_SyncValues::indexOf(
|
|||
}
|
||||
|
||||
|
||||
/*= A_SyncOverride ===========================================================*/
|
||||
|
||||
A_SyncOverride::A_SyncOverride(
|
||||
T_String type ) noexcept
|
||||
: type_( std::move( type ) )
|
||||
{ }
|
||||
|
||||
A_SyncOverride::~A_SyncOverride( ) { }
|
||||
|
||||
void A_SyncOverride::setup( ) noexcept
|
||||
{
|
||||
const auto ni( inputs_.size( ) );
|
||||
assert( ni != 0 );
|
||||
assert( inputPos_.size( ) == 0 );
|
||||
|
||||
inputPos_.ensureCapacity( ni );
|
||||
for ( auto i = 0u ; i < ni ; i ++ ) {
|
||||
// FIXME: insufficient; the manager should be made aware of
|
||||
// the presence of an override for that value (and it should
|
||||
// fail for missing values).
|
||||
inputPos_.add( Globals::Sync( ).inputPos( inputs_[ ni ] ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*= T_SyncOverrideSection ====================================================*/
|
||||
|
||||
T_SyncOverrideSection::T_SyncOverrideSection(
|
||||
T_String title ) noexcept
|
||||
: title( std::move( title ) )
|
||||
{ }
|
||||
|
||||
void T_SyncOverrideSection::merge(
|
||||
T_SyncOverrideSection& other ) noexcept
|
||||
{
|
||||
for ( auto& os : other.subsections ) {
|
||||
section( os->title ).merge( *os );
|
||||
}
|
||||
for ( auto& ov : other.overrides ) {
|
||||
overrides.add( std::move( ov ) );
|
||||
}
|
||||
}
|
||||
|
||||
void T_SyncOverrideSection::makeUI(
|
||||
const bool topLevel ) noexcept
|
||||
{
|
||||
// FIXME: fuck that toOSString shit.
|
||||
const bool display( topLevel
|
||||
? ImGui::CollapsingHeader( (char*) title.toOSString( ).data( ) )
|
||||
: ImGui::TreeNode( (char*) title.toOSString( ).data( ) ) );
|
||||
if ( !display ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( auto& os : subsections ) {
|
||||
os->makeUI( false );
|
||||
}
|
||||
if ( subsections.size( ) && overrides.size( ) ) {
|
||||
ImGui::Separator( );
|
||||
}
|
||||
for ( auto& ov : overrides ) {
|
||||
ov->makeUI( );
|
||||
}
|
||||
|
||||
if ( !topLevel ) {
|
||||
ImGui::TreePop( );
|
||||
}
|
||||
}
|
||||
|
||||
T_SyncOverrideSection& T_SyncOverrideSection::section(
|
||||
T_String const& name ) noexcept
|
||||
{
|
||||
for ( auto& ov : subsections ) {
|
||||
if ( ov->title == name ) {
|
||||
return *ov;
|
||||
}
|
||||
}
|
||||
return *subsections[ subsections.add(
|
||||
NewOwned< T_SyncOverrideSection >( name ) ) ];
|
||||
}
|
||||
|
||||
T_SyncOverrideSection const* T_SyncOverrideSection::section(
|
||||
T_String const& name ) const noexcept
|
||||
{
|
||||
for ( auto& ov : subsections ) {
|
||||
if ( ov->title == name ) {
|
||||
return ov.get( );
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
/*= T_SyncManager ============================================================*/
|
||||
|
||||
T_SyncManager::T_SyncManager( )
|
||||
: pConfig_( MakeCurvesParser_( ) )
|
||||
{ }
|
||||
: pConfig_( MakeCurvesParser_( ) ) ,
|
||||
pdOverrides_( "default" )
|
||||
{
|
||||
using namespace ebcl::SRD;
|
||||
pdOverrides_.context( "default" )
|
||||
<< ( Rule( ) << "category" << Text( ) << EnterContext( "category" ) );
|
||||
pdOverrides_.context( "category" );
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
|
@ -488,7 +587,17 @@ void T_SyncManager::updateValues( )
|
|||
}
|
||||
}
|
||||
|
||||
/*============================================================================*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
void T_SyncManager::registerOverride(
|
||||
ebcl::T_SRDInputRule rule )
|
||||
{
|
||||
pdOverrides_.context( "category" ) << rule;
|
||||
if ( pcOverrides_ ) {
|
||||
pcOverrides_.clear( );
|
||||
}
|
||||
// pcOverrides_ = NewOwned< T_SRDParserConfig >( pdOverrides_ );
|
||||
}
|
||||
|
||||
#if 0
|
||||
void T_SyncManager::makeUI( )
|
||||
|
|
87
sync.hh
87
sync.hh
|
@ -3,6 +3,7 @@
|
|||
#include "utilities.hh"
|
||||
|
||||
#include <ebcl/SRDParserConfig.hh>
|
||||
#include <ebcl/Sets.hh>
|
||||
|
||||
|
||||
// Duration and current playing time
|
||||
|
@ -157,6 +158,71 @@ struct T_SyncValues
|
|||
|
||||
/*============================================================================*/
|
||||
|
||||
class A_SyncOverride;
|
||||
using P_SyncOverride = T_OwnPtr< A_SyncOverride >;
|
||||
|
||||
struct T_SyncOverrideSection;
|
||||
using P_SyncOverrideSection = T_OwnPtr< T_SyncOverrideSection >;
|
||||
|
||||
// Base class for overrides
|
||||
class A_SyncOverride
|
||||
{
|
||||
private:
|
||||
T_String type_;
|
||||
|
||||
protected:
|
||||
ebcl::T_Set< T_String > inputs_{
|
||||
ebcl::UseTag< ebcl::ArrayBacked< 8 > >( ) };
|
||||
T_AutoArray< uint32_t , 8 > inputPos_;
|
||||
bool enabled_{ false };
|
||||
|
||||
explicit A_SyncOverride( T_String type ) noexcept;
|
||||
|
||||
public:
|
||||
virtual ~A_SyncOverride( ) = 0;
|
||||
|
||||
T_String const& type( ) const noexcept
|
||||
{ return type_; }
|
||||
|
||||
ebcl::T_Set< T_String > const& inputNames( ) const noexcept
|
||||
{ return inputs_; }
|
||||
|
||||
bool enabled( ) const noexcept
|
||||
{ return enabled_; }
|
||||
|
||||
// Connect the required inputs to the sync manager. Called once
|
||||
// the inputs have been added.
|
||||
virtual void setup( ) noexcept;
|
||||
|
||||
// Draw the UI for that specific override.
|
||||
virtual void makeUI( ) noexcept = 0;
|
||||
};
|
||||
|
||||
// Overrides section
|
||||
struct T_SyncOverrideSection
|
||||
{
|
||||
bool open{ false };
|
||||
T_String title;
|
||||
T_Array< P_SyncOverrideSection > subsections;
|
||||
T_Array< P_SyncOverride > overrides;
|
||||
|
||||
T_SyncOverrideSection( ) = delete;
|
||||
NO_COPY( T_SyncOverrideSection );
|
||||
DEF_MOVE( T_SyncOverrideSection );
|
||||
|
||||
explicit T_SyncOverrideSection( T_String title ) noexcept;
|
||||
|
||||
void merge( T_SyncOverrideSection& other ) noexcept;
|
||||
void makeUI( bool topLevel ) noexcept;
|
||||
|
||||
T_SyncOverrideSection& section(
|
||||
T_String const& name ) noexcept;
|
||||
T_SyncOverrideSection const* section(
|
||||
T_String const& name ) const noexcept;
|
||||
};
|
||||
|
||||
/*============================================================================*/
|
||||
|
||||
// Synchronisation manager; handles all the synchronization data and makes it
|
||||
// work together.
|
||||
struct T_SyncManager
|
||||
|
@ -207,17 +273,24 @@ struct T_SyncManager
|
|||
bool loadCurves_( bool& missing );
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Update
|
||||
// Overrides
|
||||
|
||||
public:
|
||||
void registerOverride( ebcl::T_SRDInputRule rule );
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Update
|
||||
|
||||
void updateCurveCaches( );
|
||||
void updateValues( );
|
||||
|
||||
private:
|
||||
ebcl::T_SRDParserConfig pConfig_;
|
||||
P_WatchedFiles watcher_;
|
||||
T_SyncTime time_;
|
||||
T_SyncValues values_;
|
||||
T_SyncCurves curves_;
|
||||
T_Array< P_SyncCurveCache > curveCaches_;
|
||||
ebcl::T_SRDParserConfig pConfig_; // Parser config for curves
|
||||
P_WatchedFiles watcher_; // Curves file watcher
|
||||
T_SyncTime time_; // Duration/time information
|
||||
T_SyncValues values_; // Value storage
|
||||
T_SyncCurves curves_; // Curves storage
|
||||
T_Array< P_SyncCurveCache > curveCaches_; // Cache for curve segments
|
||||
ebcl::T_SRDParserDefs pdOverrides_; // Parser definitions for UI overrides
|
||||
ebcl::OP_SRDParserConfig pcOverrides_; // Parser configuration for UI overrides
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue