Files
haiku-beta6/src/kits/interface/GroupLayoutBuilder.cpp
T
Marcus Overhagen 3ec18e87d6 various GCC 4 build fixes
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18875 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-09-17 15:08:41 +00:00

188 lines
3.4 KiB
C++

/*
* Copyright 2006, Ingo Weinhold <[email protected]>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include <GroupLayoutBuilder.h>
#include <new>
#include <SpaceLayoutItem.h>
using std::nothrow;
// constructor
BGroupLayoutBuilder::BGroupLayoutBuilder(enum orientation orientation,
float spacing)
: fRootLayout((new BGroupView(orientation, spacing))->GroupLayout())
{
_PushLayout(fRootLayout);
}
// constructor
BGroupLayoutBuilder::BGroupLayoutBuilder(BGroupLayout* layout)
: fRootLayout(layout)
{
_PushLayout(fRootLayout);
}
// constructor
BGroupLayoutBuilder::BGroupLayoutBuilder(BGroupView* view)
: fRootLayout(view->GroupLayout())
{
_PushLayout(fRootLayout);
}
// RootLayout
BGroupLayout*
BGroupLayoutBuilder::RootLayout() const
{
return fRootLayout;
}
// TopLayout
BGroupLayout*
BGroupLayoutBuilder::TopLayout() const
{
int32 count = fLayoutStack.CountItems();
return (count > 0
? (BGroupLayout*)fLayoutStack.ItemAt(count - 1) : NULL);
}
// GetTopLayout
BGroupLayoutBuilder&
BGroupLayoutBuilder::GetTopLayout(BGroupLayout** _layout)
{
*_layout = TopLayout();
return *this;
}
// GetTopView
BGroupLayoutBuilder&
BGroupLayoutBuilder::GetTopView(BView** _view)
{
if (BGroupLayout* layout = TopLayout())
*_view = layout->View();
else
*_view = NULL;
return *this;
}
// Add
BGroupLayoutBuilder&
BGroupLayoutBuilder::Add(BView* view)
{
if (BGroupLayout* layout = TopLayout())
layout->AddView(view);
return *this;
}
// Add
BGroupLayoutBuilder&
BGroupLayoutBuilder::Add(BView* view, float weight)
{
if (BGroupLayout* layout = TopLayout())
layout->AddView(view, weight);
return *this;
}
// Add
BGroupLayoutBuilder&
BGroupLayoutBuilder::Add(BLayoutItem* item)
{
if (BGroupLayout* layout = TopLayout())
layout->AddItem(item);
return *this;
}
// Add
BGroupLayoutBuilder&
BGroupLayoutBuilder::Add(BLayoutItem* item, float weight)
{
if (BGroupLayout* layout = TopLayout())
layout->AddItem(item, weight);
return *this;
}
// AddGroup
BGroupLayoutBuilder&
BGroupLayoutBuilder::AddGroup(enum orientation orientation,
float spacing, float weight)
{
if (BGroupLayout* layout = TopLayout()) {
BGroupView* group = new(nothrow) BGroupView(orientation, spacing);
if (group) {
if (layout->AddView(group, weight))
_PushLayout(group->GroupLayout());
else
delete group;
}
}
return *this;
}
// End
BGroupLayoutBuilder&
BGroupLayoutBuilder::End()
{
_PopLayout();
return *this;
}
// AddGlue
BGroupLayoutBuilder&
BGroupLayoutBuilder::AddGlue(float weight)
{
if (BGroupLayout* layout = TopLayout())
layout->AddItem(BSpaceLayoutItem::CreateGlue(), weight);
return *this;
}
// AddStrut
BGroupLayoutBuilder&
BGroupLayoutBuilder::AddStrut(float size)
{
if (BGroupLayout* layout = TopLayout()) {
if (layout->Orientation() == B_HORIZONTAL)
layout->AddItem(BSpaceLayoutItem::CreateHorizontalStrut(size));
else
layout->AddItem(BSpaceLayoutItem::CreateVerticalStrut(size));
}
return *this;
}
// cast operator BGroupLayout*
BGroupLayoutBuilder::operator BGroupLayout*()
{
return fRootLayout;
}
// cast operator BView*
BGroupLayoutBuilder::operator BView*()
{
return fRootLayout->View();
}
// _PushLayout
bool
BGroupLayoutBuilder::_PushLayout(BGroupLayout* layout)
{
return fLayoutStack.AddItem(layout);
}
// _PopLayout
void
BGroupLayoutBuilder::_PopLayout()
{
int32 count = fLayoutStack.CountItems();
if (count > 0)
fLayoutStack.RemoveItem(count - 1);
}