Loading...
Searching...
No Matches
ml::SplitPanel Class Reference

A resizable multi-pane container split horizontally or vertically. More...

#include <Malena/Graphics/Controls/SplitPanel.h>

Inheritance diagram for ml::SplitPanel:
[legend]

Public Types

using Flag = SplitPanelManifest::Flag
using HandleStyle = SplitPanelSettings::HandleStyle
using Orientation = SplitPanelSettings::Orientation
using State = SplitPanelManifest::State

Public Member Functions

 SplitPanel (const SplitPanel &)=delete
 SplitPanel (Orientation orientation=Orientation::HORIZONTAL, const sf::Font &font=FontManager<>::getDefault())
template<typename T>
T & addPane (std::unique_ptr< T > content, float initialSize=0.f)
 Add a pane with owned content.
SplitPanelThemeapplyFrom (const Theme &t) override
 Populate all fields from the global Theme token set.
template<typename S>
void applySettings (const S &s)
template<typename St>
void applyStyle (const St &s)
template<typename T>
void applyTheme (const T &t)
sf::Color getDisabledColor () const
sf::Color getDisabledTextColor () const
sf::Color getErrorColor () const
sf::Color getFillColor () const
sf::Color getFocusColor () const
const sf::FontgetFont () const
unsigned int getFontSize () const
unsigned int getFontSizeSmall () const
sf::FloatRect getGlobalBounds () const override
sf::Color getHoverColor () const
sf::Color getMutedColor () const
sf::Color getOutlineColor () const
float getOutlineThickness () const
float getPadding () const
sf::Vector2f getPosition () const override
float getRadius () const
sf::Vector2f getSize () const
sf::Color getTextColor () const
bool isSettingsLocked () const
 Return true if applySettings() is currently blocked.
bool isThemeLocked () const
 Return true if this component ignores theme changes.
void lockSettings ()
 Prevent applySettings() from taking effect.
void lockTheme ()
 Prevent automatic re-styling when the global theme changes.
void onDividerMoved (std::function< void(std::size_t, float)> cb)
 Fired whenever a divider is moved (by drag or API).
SplitPaneloperator= (const SplitPanel &)=delete
std::size_t paneCount () const
 Return the number of panes.
void setDisabledColor (const sf::Color &c)
void setDisabledTextColor (const sf::Color &c)
void setDividerPosition (std::size_t dividerIndex, float position)
 Programmatically set a divider position.
void setDividerThick (float t)
void setErrorColor (const sf::Color &c)
void setFillColor (const sf::Color &c)
void setFocusColor (const sf::Color &c)
void setFont (const sf::Font &&)=delete
void setFont (const sf::Font &f)
void setFontSize (unsigned int s)
void setFontSizeSmall (unsigned int s)
void setHandleStyle (HandleStyle s)
void setHoverColor (const sf::Color &c)
void setMinPaneSize (float s)
void setMutedColor (const sf::Color &c)
void setOrientation (Orientation o)
void setOutlineColor (const sf::Color &c)
void setOutlineThickness (float t)
void setPadding (float p)
void setPaneMaxSize (std::size_t index, float maxSize)
 Set the maximum size of a pane by index.
void setPaneMinSize (std::size_t index, float minSize)
 Set the minimum size of a pane by index.
void setPosition (const sf::Vector2f &position) override
void setRadius (float r)
void setResizable (bool b)
void setSize (const sf::Vector2f &size)
void setTextColor (const sf::Color &c)
void unlockSettings ()
 Allow applySettings() to take effect again.
void unlockTheme ()
 Resume reacting to global theme changes.

Public Attributes

sf::Color disabledColor = sf::Color(60, 60, 60)
sf::Color disabledTextColor = sf::Color(120, 120, 120)
sf::Color dividerColor = sf::Color(60, 60, 80)
sf::Color dividerDrag = sf::Color(70, 130, 230)
sf::Color dividerHover = sf::Color(100, 100, 140)
float dividerThick = 4.f
 draggable zone width/height
sf::Color errorColor = sf::Color(220, 70, 70)
sf::Color fillColor = sf::Color(40, 40, 40)
sf::Color focusColor = sf::Color(100, 60, 200)
const sf::Fontfont = &FontManager<>::getDefault()
unsigned int fontSize = 14
unsigned int fontSizeSmall = 11
sf::Color gripColor = sf::Color(100, 100, 130)
HandleStyle handleStyle = HandleStyle::GRIP
sf::Color hoverColor = sf::Color(70, 130, 230)
float minPaneSize = 40.f
 global minimum per pane
sf::Color mutedColor = sf::Color(120, 120, 120)
Orientation orientation = Orientation::HORIZONTAL
sf::Color outlineColor = sf::Color(100, 100, 100)
float outlineThickness = 1.5f
float padding = 8.f
sf::Color paneBg = sf::Color(28, 28, 38)
float radius = 8.f
bool resizable = true
sf::Color textColor = sf::Color::White

Protected Member Functions

void draw (sf::RenderTarget &target, sf::RenderStates states) const override
void onThemeApplied (const Theme &theme) override
 Called by ThemeManager when the active theme changes.

Detailed Description

A resizable multi-pane container split horizontally or vertically.

Supports any number of panes separated by draggable dividers. Each pane holds one ml::Core component. Dragging a divider resizes its two adjacent panes while respecting per-pane minimum sizes.

Usage — two panes

split.setSize({800.f, 600.f});
split.setPosition({40.f, 100.f});
// addPane() takes ownership — content is drawn and resized by the panel
auto& sidebar = split.addPane(std::make_unique<ml::List>(), 220.f);
auto& editor = split.addPane(std::make_unique<ml::TextArea>());
addComponent(split);
A resizable multi-pane container split horizontally or vertically.
Definition SplitPanel.h:85
void setPosition(const sf::Vector2f &position) override
T & addPane(std::unique_ptr< T > content, float initialSize=0.f)
Add a pane with owned content.
Definition SplitPanel.h:183
void setSize(const sf::Vector2f &size)

Vertical split

Per-pane min/max sizes

split.setPaneMinSize(0, 150.f); // sidebar never smaller than 150
split.setPaneMinSize(1, 200.f); // editor never smaller than 200
void setPaneMinSize(std::size_t index, float minSize)
Set the minimum size of a pane by index.

Callback when a divider is moved

split.onDividerMoved([](std::size_t dividerIdx, float newPosition){
std::cout << "Divider " << dividerIdx
<< " at " << newPosition << "px\n";
});
void onDividerMoved(std::function< void(std::size_t, float)> cb)
Fired whenever a divider is moved (by drag or API).
See also
SplitPanelSettings, SplitPanelTheme, SplitPanelStyle

Definition at line 81 of file SplitPanel.h.

Member Typedef Documentation

◆ Flag

Definition at line 87 of file SplitPanel.h.

◆ HandleStyle

◆ Orientation

◆ State

Definition at line 88 of file SplitPanel.h.

Constructor & Destructor Documentation

◆ SplitPanel() [1/2]

ml::SplitPanel::SplitPanel ( Orientation orientation = Orientation::HORIZONTAL,
const sf::Font & font = FontManager<>::getDefault() )
explicit

◆ SplitPanel() [2/2]

ml::SplitPanel::SplitPanel ( const SplitPanel & )
delete

Member Function Documentation

◆ addPane()

template<typename T>
T & ml::SplitPanel::addPane ( std::unique_ptr< T > content,
float initialSize = 0.f )
inline

Add a pane with owned content.

The panel takes ownership of content. It is responsible for drawing, resizing, and destroying it. If T has a setSize() method, the panel will call it automatically whenever the pane dimensions change (resize or divider drag).

Template Parameters
TAny ml::Core-derived type.
Parameters
contentOwned content component.
initialSizeInitial size along the split axis in pixels. Pass 0 to distribute remaining space equally.

Definition at line 183 of file SplitPanel.h.

◆ applyFrom()

SplitPanelTheme & ml::SplitPanelTheme::applyFrom ( const Theme & t)
inlineoverridevirtualinherited

Populate all fields from the global Theme token set.

Subclasses call GraphicTheme::applyFrom(t) first, then apply their own token mappings.

Reimplemented from ml::ControlTheme.

Definition at line 18 of file SplitPanelTheme.h.

◆ applySettings()

template<typename S>
void ml::SplitPanel::applySettings ( const S & s)
inline

Definition at line 140 of file SplitPanel.h.

◆ applyStyle()

template<typename St>
void ml::SplitPanel::applyStyle ( const St & s)
inline

Definition at line 157 of file SplitPanel.h.

◆ applyTheme()

template<typename T>
void ml::SplitPanel::applyTheme ( const T & t)
inline

Definition at line 149 of file SplitPanel.h.

◆ draw()

void ml::SplitPanel::draw ( sf::RenderTarget & target,
sf::RenderStates states ) const
overrideprotected

◆ getDisabledColor()

sf::Color ml::ControlTheme::getDisabledColor ( ) const
inlinenodiscardinherited

Definition at line 75 of file ControlTheme.h.

◆ getDisabledTextColor()

sf::Color ml::ControlTheme::getDisabledTextColor ( ) const
inlinenodiscardinherited

Definition at line 76 of file ControlTheme.h.

◆ getErrorColor()

sf::Color ml::ControlTheme::getErrorColor ( ) const
inlinenodiscardinherited

Definition at line 74 of file ControlTheme.h.

◆ getFillColor()

sf::Color ml::GraphicTheme::getFillColor ( ) const
inlinenodiscardinherited

Definition at line 67 of file GraphicTheme.h.

◆ getFocusColor()

sf::Color ml::ControlTheme::getFocusColor ( ) const
inlinenodiscardinherited

Definition at line 73 of file ControlTheme.h.

◆ getFont()

const sf::Font * ml::ControlTheme::getFont ( ) const
inlinenodiscardinherited

Definition at line 80 of file ControlTheme.h.

◆ getFontSize()

unsigned int ml::ControlTheme::getFontSize ( ) const
inlinenodiscardinherited

Definition at line 81 of file ControlTheme.h.

◆ getFontSizeSmall()

unsigned int ml::ControlTheme::getFontSizeSmall ( ) const
inlinenodiscardinherited

Definition at line 82 of file ControlTheme.h.

◆ getGlobalBounds()

sf::FloatRect ml::SplitPanel::getGlobalBounds ( ) const
override

◆ getHoverColor()

sf::Color ml::ControlTheme::getHoverColor ( ) const
inlinenodiscardinherited

Definition at line 72 of file ControlTheme.h.

◆ getMutedColor()

sf::Color ml::ControlTheme::getMutedColor ( ) const
inlinenodiscardinherited

Definition at line 78 of file ControlTheme.h.

◆ getOutlineColor()

sf::Color ml::GraphicTheme::getOutlineColor ( ) const
inlinenodiscardinherited

Definition at line 68 of file GraphicTheme.h.

◆ getOutlineThickness()

float ml::GraphicTheme::getOutlineThickness ( ) const
inlinenodiscardinherited

Definition at line 69 of file GraphicTheme.h.

◆ getPadding()

float ml::ControlTheme::getPadding ( ) const
inlinenodiscardinherited

Definition at line 79 of file ControlTheme.h.

◆ getPosition()

sf::Vector2f ml::SplitPanel::getPosition ( ) const
override

◆ getRadius()

float ml::GraphicTheme::getRadius ( ) const
inlinenodiscardinherited

Definition at line 70 of file GraphicTheme.h.

◆ getSize()

sf::Vector2f ml::SplitPanel::getSize ( ) const
inlinenodiscard

Definition at line 224 of file SplitPanel.h.

◆ getTextColor()

sf::Color ml::ControlTheme::getTextColor ( ) const
inlinenodiscardinherited

Definition at line 77 of file ControlTheme.h.

◆ isSettingsLocked()

bool ml::Themeable::isSettingsLocked ( ) const
inlinenodiscardinherited

Return true if applySettings() is currently blocked.

Definition at line 115 of file Themeable.h.

◆ isThemeLocked()

bool ml::Themeable::isThemeLocked ( ) const
inlinenodiscardinherited

Return true if this component ignores theme changes.

Definition at line 97 of file Themeable.h.

◆ lockSettings()

void ml::Themeable::lockSettings ( )
inlineinherited

Prevent applySettings() from taking effect.

Explicit individual setter calls still work normally. Only blocks the batch applySettings() path.

Definition at line 107 of file Themeable.h.

◆ lockTheme()

void ml::Themeable::lockTheme ( )
inlineinherited

Prevent automatic re-styling when the global theme changes.

The component keeps its current visual state. Explicit individual setter calls still work normally.

Definition at line 85 of file Themeable.h.

◆ onDividerMoved()

void ml::SplitPanel::onDividerMoved ( std::function< void(std::size_t, float)> cb)

Fired whenever a divider is moved (by drag or API).

◆ onThemeApplied()

void ml::SplitPanel::onThemeApplied ( const Theme & theme)
overrideprotectedvirtual

Called by ThemeManager when the active theme changes.

Override in your component to re-style from the new theme. Always check isThemeLocked() first:

void onThemeApplied(const Theme& theme) override
{
if (isThemeLocked()) return;
MySettings::applyTheme(theme);
syncFromSettings();
}
void onThemeApplied(const Theme &theme) override
Called by ThemeManager when the active theme changes.
bool isThemeLocked() const
Return true if this component ignores theme changes.
Definition Themeable.h:97
Universal design token set applied across all Themeable components.
Definition Theme.h:70
Parameters
themeThe newly active theme.

Implements ml::Themeable.

◆ operator=()

SplitPanel & ml::SplitPanel::operator= ( const SplitPanel & )
delete

◆ paneCount()

std::size_t ml::SplitPanel::paneCount ( ) const
inlinenodiscard

Return the number of panes.

Definition at line 214 of file SplitPanel.h.

◆ setDisabledColor()

void ml::ControlTheme::setDisabledColor ( const sf::Color & c)
inlineinherited

Definition at line 87 of file ControlTheme.h.

◆ setDisabledTextColor()

void ml::ControlTheme::setDisabledTextColor ( const sf::Color & c)
inlineinherited

Definition at line 88 of file ControlTheme.h.

◆ setDividerPosition()

void ml::SplitPanel::setDividerPosition ( std::size_t dividerIndex,
float position )

Programmatically set a divider position.

◆ setDividerThick()

void ml::SplitPanelSettings::setDividerThick ( float t)
inlineinherited

Definition at line 28 of file SplitPanelSettings.h.

◆ setErrorColor()

void ml::ControlTheme::setErrorColor ( const sf::Color & c)
inlineinherited

Definition at line 86 of file ControlTheme.h.

◆ setFillColor()

void ml::GraphicTheme::setFillColor ( const sf::Color & c)
inlineinherited

Definition at line 72 of file GraphicTheme.h.

◆ setFocusColor()

void ml::ControlTheme::setFocusColor ( const sf::Color & c)
inlineinherited

Definition at line 85 of file ControlTheme.h.

◆ setFont() [1/2]

void ml::ControlTheme::setFont ( const sf::Font && )
deleteinherited

◆ setFont() [2/2]

void ml::ControlTheme::setFont ( const sf::Font & f)
inlineinherited

Definition at line 92 of file ControlTheme.h.

◆ setFontSize()

void ml::ControlTheme::setFontSize ( unsigned int s)
inlineinherited

Definition at line 94 of file ControlTheme.h.

◆ setFontSizeSmall()

void ml::ControlTheme::setFontSizeSmall ( unsigned int s)
inlineinherited

Definition at line 95 of file ControlTheme.h.

◆ setHandleStyle()

void ml::SplitPanelSettings::setHandleStyle ( HandleStyle s)
inlineinherited

Definition at line 27 of file SplitPanelSettings.h.

◆ setHoverColor()

void ml::ControlTheme::setHoverColor ( const sf::Color & c)
inlineinherited

Definition at line 84 of file ControlTheme.h.

◆ setMinPaneSize()

void ml::SplitPanelSettings::setMinPaneSize ( float s)
inlineinherited

Definition at line 29 of file SplitPanelSettings.h.

◆ setMutedColor()

void ml::ControlTheme::setMutedColor ( const sf::Color & c)
inlineinherited

Definition at line 90 of file ControlTheme.h.

◆ setOrientation()

void ml::SplitPanelSettings::setOrientation ( Orientation o)
inlineinherited

Definition at line 26 of file SplitPanelSettings.h.

◆ setOutlineColor()

void ml::GraphicTheme::setOutlineColor ( const sf::Color & c)
inlineinherited

Definition at line 73 of file GraphicTheme.h.

◆ setOutlineThickness()

void ml::GraphicTheme::setOutlineThickness ( float t)
inlineinherited

Definition at line 74 of file GraphicTheme.h.

◆ setPadding()

void ml::ControlTheme::setPadding ( float p)
inlineinherited

Definition at line 91 of file ControlTheme.h.

◆ setPaneMaxSize()

void ml::SplitPanel::setPaneMaxSize ( std::size_t index,
float maxSize )

Set the maximum size of a pane by index.

◆ setPaneMinSize()

void ml::SplitPanel::setPaneMinSize ( std::size_t index,
float minSize )

Set the minimum size of a pane by index.

◆ setPosition()

void ml::SplitPanel::setPosition ( const sf::Vector2f & position)
override

◆ setRadius()

void ml::GraphicTheme::setRadius ( float r)
inlineinherited

Definition at line 75 of file GraphicTheme.h.

◆ setResizable()

void ml::SplitPanelSettings::setResizable ( bool b)
inlineinherited

Definition at line 30 of file SplitPanelSettings.h.

◆ setSize()

void ml::SplitPanel::setSize ( const sf::Vector2f & size)

◆ setTextColor()

void ml::ControlTheme::setTextColor ( const sf::Color & c)
inlineinherited

Definition at line 89 of file ControlTheme.h.

◆ unlockSettings()

void ml::Themeable::unlockSettings ( )
inlineinherited

Allow applySettings() to take effect again.

Definition at line 112 of file Themeable.h.

◆ unlockTheme()

void ml::Themeable::unlockTheme ( )
inlineinherited

Resume reacting to global theme changes.

Does NOT immediately re-apply the current theme — call ThemeManager::get() and pass it to onThemeApplied() manually if you want to re-sync immediately after unlocking.

Definition at line 94 of file Themeable.h.

Member Data Documentation

◆ disabledColor

sf::Color ml::ControlTheme::disabledColor = sf::Color(60, 60, 60)
inherited

Definition at line 33 of file ControlTheme.h.

◆ disabledTextColor

sf::Color ml::ControlTheme::disabledTextColor = sf::Color(120, 120, 120)
inherited

Definition at line 34 of file ControlTheme.h.

◆ dividerColor

sf::Color ml::SplitPanelTheme::dividerColor = sf::Color(60, 60, 80)
inherited

Definition at line 12 of file SplitPanelTheme.h.

◆ dividerDrag

sf::Color ml::SplitPanelTheme::dividerDrag = sf::Color(70, 130, 230)
inherited

Definition at line 14 of file SplitPanelTheme.h.

◆ dividerHover

sf::Color ml::SplitPanelTheme::dividerHover = sf::Color(100, 100, 140)
inherited

Definition at line 13 of file SplitPanelTheme.h.

◆ dividerThick

float ml::SplitPanelSettings::dividerThick = 4.f
inherited

draggable zone width/height

Definition at line 17 of file SplitPanelSettings.h.

◆ errorColor

sf::Color ml::ControlTheme::errorColor = sf::Color(220, 70, 70)
inherited

Definition at line 32 of file ControlTheme.h.

◆ fillColor

sf::Color ml::GraphicTheme::fillColor = sf::Color(40, 40, 40)
inherited

Definition at line 43 of file GraphicTheme.h.

◆ focusColor

sf::Color ml::ControlTheme::focusColor = sf::Color(100, 60, 200)
inherited

Definition at line 31 of file ControlTheme.h.

◆ font

const sf::Font* ml::ControlTheme::font = &FontManager<>::getDefault()
inherited

Definition at line 39 of file ControlTheme.h.

◆ fontSize

unsigned int ml::ControlTheme::fontSize = 14
inherited

Definition at line 40 of file ControlTheme.h.

◆ fontSizeSmall

unsigned int ml::ControlTheme::fontSizeSmall = 11
inherited

Definition at line 41 of file ControlTheme.h.

◆ gripColor

sf::Color ml::SplitPanelTheme::gripColor = sf::Color(100, 100, 130)
inherited

Definition at line 15 of file SplitPanelTheme.h.

◆ handleStyle

HandleStyle ml::SplitPanelSettings::handleStyle = HandleStyle::GRIP
inherited

Definition at line 16 of file SplitPanelSettings.h.

◆ hoverColor

sf::Color ml::ControlTheme::hoverColor = sf::Color(70, 130, 230)
inherited

Definition at line 30 of file ControlTheme.h.

◆ minPaneSize

float ml::SplitPanelSettings::minPaneSize = 40.f
inherited

global minimum per pane

Definition at line 18 of file SplitPanelSettings.h.

◆ mutedColor

sf::Color ml::ControlTheme::mutedColor = sf::Color(120, 120, 120)
inherited

Definition at line 36 of file ControlTheme.h.

◆ orientation

Orientation ml::SplitPanelSettings::orientation = Orientation::HORIZONTAL
inherited

Definition at line 15 of file SplitPanelSettings.h.

◆ outlineColor

sf::Color ml::GraphicTheme::outlineColor = sf::Color(100, 100, 100)
inherited

Definition at line 44 of file GraphicTheme.h.

◆ outlineThickness

float ml::GraphicTheme::outlineThickness = 1.5f
inherited

Definition at line 45 of file GraphicTheme.h.

◆ padding

float ml::ControlTheme::padding = 8.f
inherited

Definition at line 37 of file ControlTheme.h.

◆ paneBg

sf::Color ml::SplitPanelTheme::paneBg = sf::Color(28, 28, 38)
inherited

Definition at line 16 of file SplitPanelTheme.h.

◆ radius

float ml::GraphicTheme::radius = 8.f
inherited

Definition at line 46 of file GraphicTheme.h.

◆ resizable

bool ml::SplitPanelSettings::resizable = true
inherited

Definition at line 19 of file SplitPanelSettings.h.

◆ textColor

sf::Color ml::ControlTheme::textColor = sf::Color::White
inherited

Definition at line 35 of file ControlTheme.h.


The documentation for this class was generated from the following file: