reorganize files and add btgui
This commit is contained in:
124
btgui/Gwen/Controls/PanelListPanel.cpp
Normal file
124
btgui/Gwen/Controls/PanelListPanel.cpp
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
#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();
|
||||
}
|
||||
Reference in New Issue
Block a user