#pragma once #include "sync.hh" namespace sov { /*= FLOATING POINT DRAGGERS/SLIDERS ============================================*/ // Float values, common class A_Float : public A_SyncOverride { private: T_Optional< float > min_; T_Optional< float > max_; T_Optional< float > step_; T_Optional< ebcl::T_StaticArray< char , 12 > > decimals_; T_Optional< float > power_; bool slider_{ false }; protected: A_Float( char const* const type , T_String const& title ) noexcept : A_SyncOverride( type , title ) {} public: A_Float( T_String const& input , T_String const& title ) noexcept; bool setMin( const float v ) noexcept; bool setMax( const float v ) noexcept; bool setStep( const float v ) noexcept; bool setDecimals( const uint32_t n ) noexcept; bool setPower( const float v ) noexcept; void setSlider( ) noexcept; float min( ) const noexcept { return min_ ? *min_ : 0.0f; } float max( ) const noexcept { return max_ ? *max_ : 0.0f; } float step( ) const noexcept { return step_ ? *step_ : .001f; } char const* decimals( ) const noexcept { return decimals_ ? &(*decimals_)[ 0 ] : "%.3f"; } float power( ) const noexcept { return power_ ? *power_ : 1.0f; } bool slider( ) const noexcept { return slider_; } }; // Single float values class T_Float : public A_Float { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Float( T_String const& input , T_String const& title ) noexcept; }; // 2 float values class T_Float2 : public A_Float { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Float2( T_String const& input0 , T_String const& input1 , T_String const& title ) noexcept; }; // 3 float values class T_Float3 : public A_Float { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Float3( T_String const& input0 , T_String const& input1 , T_String const& input2 , T_String const& title ) noexcept; }; // 4 float values class T_Float4 : public A_Float { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Float4( T_String const& input0 , T_String const& input1 , T_String const& input2 , T_String const& input3 , T_String const& title ) noexcept; }; /*= INTEGER DRAGGERS/SLIDES ====================================================*/ // Integers, common class A_Integer : public A_SyncOverride { private: T_Optional< int32_t > min_; T_Optional< int32_t > max_; T_Optional< float > step_; bool slider_{ false }; protected: A_Integer( char const* const type , T_String const& title ) noexcept : A_SyncOverride( type , title ) {} public: A_Integer( T_String const& input , T_String const& title ) noexcept; bool setMin( const int32_t v ) noexcept; bool setMax( const int32_t v ) noexcept; bool setStep( const float v ) noexcept; bool setPower( const float v ) noexcept; void setSlider( ) noexcept; float min( ) const noexcept { return min_ ? *min_ : 0.0f; } float max( ) const noexcept { return max_ ? *max_ : 0.0f; } float step( ) const noexcept { return step_ ? *step_ : .001f; } bool slider( ) const noexcept { return slider_; } }; // Single integers class T_Integer : public A_Integer { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Integer( T_String const& input , T_String const& title ) noexcept; }; // 2 integers class T_Integer2 : public A_Integer { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Integer2( T_String const& input0 , T_String const& input1 , T_String const& title ) noexcept; }; // 3 integers class T_Integer3 : public A_Integer { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Integer3( T_String const& input0 , T_String const& input1 , T_String const& input2 , T_String const& title ) noexcept; }; // 4 integers class T_Integer4 : public A_Integer { protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_Integer4( T_String const& input0 , T_String const& input1 , T_String const& input2 , T_String const& input3 , T_String const& title ) noexcept; }; /*= COLOR GRADING CONTROLS =====================================================*/ class T_ColorGrading : public A_SyncOverride { private: T_Optional< float > base_; T_Optional< float > unit_; protected: void makeEditWidgets( uint32_t& counter , T_StringBuilder& sb ) noexcept override; public: T_ColorGrading( T_String const& iRed , T_String const& iGreen , T_String const& iBlue , T_String const& title ) noexcept; bool setBase( const float v ) noexcept; bool setUnit( const float v ) noexcept; float base( ) const noexcept { return base_ ? *base_ : 0.f; } float unit( ) const noexcept { return unit_ ? *unit_ : 1.f; } }; /*= PARSER CONFIGURATION =======================================================*/ // Get a parser configuration that will be able to parse UI override definitions. ebcl::T_SRDParserConfig GetParserConfig( ); } // namespace