Files
Webcam/include/engine/ui/widget_staticcontainer.cpp

103 lines
2.7 KiB
C++

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "ui/widget_staticcontainer.h"
#include "log/log.h"
using namespace GS;
using namespace GS::S2D;
//-------------------------------------------------------------------------
ContainerCell *ContainerWidget::GetCell(const Widget *widget) const
//-------------------------------------------------------------------------
{
ListForeachPtr(ContainerCell *, cell, cell_list)
if (cell->widget == widget)
return cell;
return NULL;
}
//------------------------------------------------------------------------------
Widget *ContainerWidget::Add(Widget *widget, const iRect &cell_rect)
{
if (!widget)
__ERR__(__LOG_E__ << "Cannot create a cell for a NULL widget.\n", NULL)
ContainerCell *cell = new ContainerCell;
if (!cell)
__ERR__(__LOG_E__ << "Failed to allocate new container cell.\n", NULL)
widget->SetParent(this);
cell->cell_rect = cell_rect;
cell->widget = widget;
cell_list.Add(cell, true, false);
children.Add(widget);
return widget;
}
bool ContainerWidget::Remove(Widget *widget)
{
ContainerCell *e = GetCell(widget);
if (!e)
return false;
cell_list.Remove(e);
_safe_delete(e);
children.Remove(widget);
return true;
}
//------------------------------------------------------------------------------
//------------------------------------------------
void ContainerWidget::Invalidate()
//------------------------------------------------
{
ListForeachPtr(ContainerCell *, cell, cell_list)
cell->widget->Invalidate();
Widget::Invalidate();
}
//---------------------------------------------
void ContainerWidget::Refresh()
//---------------------------------------------
{
ListForeachPtr(ContainerCell *, cell, cell_list)
{
cell->widget->Refresh();
if (cell->widget->IsDirty())
dirty = true;
}
}
//------------------------------------------------------------------------------
void ContainerWidget::Compose(Picture &output, const iRect &out_rect)
{
if (hidden || !dirty || !cell_list.GetCount())
return;
rect = out_rect;
ListForeachPtr(ContainerCell *, cell, cell_list)
if (!cell->widget->IsHidden())
cell->widget->Compose(output, cell->cell_rect.Offset(rect.sx, rect.sy));
else
cell->widget->Validate();
dirty = false;
}
ContainerWidget::~ContainerWidget()
{
/*
Only cells are deleted here since children are handled by the base
Widget class destructor.
*/
ListDeleteAllPtr(ContainerCell *, cell_list)
}
//------------------------------------------------------------------------------