mirror of
https://github.com/bulletphysics/bullet3
synced 2025-01-18 21:10:05 +00:00
124 lines
2.7 KiB
C++
124 lines
2.7 KiB
C++
|
|
#include "Gwen/Controls/PanelListPanel.h"
|
|
|
|
using namespace Gwen;
|
|
using namespace Controls;
|
|
|
|
GWEN_CONTROL_CONSTRUCTOR( PanelListPanel )
|
|
{
|
|
m_bVertical = false;
|
|
m_bSizeToChildren = true;
|
|
m_iControlSpacing = 5;
|
|
m_iLineSpacing = 5;
|
|
m_bWrapping = true;
|
|
}
|
|
|
|
void PanelListPanel::Render( Gwen::Skin::Base* /*skin*/ )
|
|
{
|
|
}
|
|
|
|
Gwen::Point PanelListPanel::GetBiggestChildSize()
|
|
{
|
|
int width = 0;
|
|
int height = 0;
|
|
|
|
for ( Base::List::iterator it = Children.begin(); it != Children.end(); ++it )
|
|
{
|
|
Controls::Base* pChild = *it;
|
|
if ( pChild->Width() > width )
|
|
width = pChild->Width();
|
|
|
|
if ( pChild->Height() > height )
|
|
height = pChild->Height();
|
|
}
|
|
|
|
return Gwen::Point( width, height );
|
|
}
|
|
|
|
void PanelListPanel::DoVerticalLayout()
|
|
{
|
|
int panelWidth = 0;
|
|
int panelX = GetPadding().left;
|
|
int panelY = GetPadding().top;
|
|
int lastPanelY = panelY;
|
|
int testWrap = 0;
|
|
|
|
Gwen::Point childSize = GetBiggestChildSize();
|
|
//Lay my children out accordingly
|
|
for ( Base::List::iterator it = Children.begin(); it != Children.end(); ++it )
|
|
{
|
|
Controls::Base* pChild = *it;
|
|
testWrap = lastPanelY + m_iControlSpacing + childSize.y;
|
|
if ( m_bWrapping && testWrap > Height() - GetPadding().bottom )
|
|
{
|
|
panelY = GetPadding().top;
|
|
panelX = GetPadding().left + panelWidth + m_iLineSpacing;
|
|
lastPanelY = panelY + m_iControlSpacing + childSize.y;
|
|
}
|
|
else
|
|
{
|
|
panelY = lastPanelY;
|
|
lastPanelY = testWrap;
|
|
}
|
|
|
|
pChild->SetPos( panelX, panelY );
|
|
|
|
if (pChild->X() + childSize.x > panelWidth )
|
|
panelWidth = pChild->X() + childSize.x;
|
|
}
|
|
|
|
if ( m_bSizeToChildren )
|
|
{
|
|
Gwen::Point childrenSizeTotal = ChildrenSize();
|
|
SetSize( childrenSizeTotal.x, Height());
|
|
}
|
|
}
|
|
|
|
void PanelListPanel::DoHorizontalLayout()
|
|
{
|
|
int panelHeight = 0;
|
|
int panelX = GetPadding().left;
|
|
int panelY = GetPadding().top;
|
|
int lastPanelX = panelX;
|
|
int testWrap = 0;
|
|
|
|
Gwen::Point childSize = GetBiggestChildSize();
|
|
|
|
for ( Base::List::iterator it = Children.begin(); it != Children.end(); ++it )
|
|
{
|
|
Controls::Base* pChild = *it;
|
|
|
|
testWrap = lastPanelX + m_iControlSpacing + childSize.x;
|
|
if ( m_bWrapping && testWrap > Width() - GetPadding().right )
|
|
{
|
|
panelX = GetPadding().left;
|
|
panelY = GetPadding().top + panelHeight + m_iLineSpacing;
|
|
lastPanelX = panelX + m_iControlSpacing + childSize.x;
|
|
}
|
|
else
|
|
{
|
|
panelX = lastPanelX;
|
|
lastPanelX = testWrap;
|
|
}
|
|
|
|
pChild->SetPos( panelX, panelY );
|
|
|
|
if (pChild->Y() + childSize.y > panelHeight )
|
|
panelHeight = pChild->Y() + childSize.y;
|
|
}
|
|
|
|
if ( m_bSizeToChildren )
|
|
{
|
|
Gwen::Point childrenSizeTotal = ChildrenSize();
|
|
SetSize( Width(), childrenSizeTotal.y);
|
|
}
|
|
}
|
|
|
|
void PanelListPanel::Layout( Skin::Base* skin )
|
|
{
|
|
BaseClass::Layout( skin );
|
|
if ( IsHorizontalLayout() )
|
|
DoHorizontalLayout();
|
|
else
|
|
DoVerticalLayout();
|
|
} |