TypeRegistry<Panel::Loader::AddChildType, Panel::Loader &> Panel::widget_registry;
bool Panel::widget_registry_init_done = false;
-Panel::Panel():
- layout(0)
+Panel::Panel()
{
input_type = INPUT_NAVIGATION;
}
Panel::~Panel()
{
delete layout;
- layout = 0;
+ layout = nullptr;
}
-void Panel::set_layout(Layout *l)
+Layout &Panel::get_or_create_layout()
{
- l->set_container(*this);
- delete layout;
- layout = l;
+ if(!layout)
+ {
+ layout = new Layout;
+ layout->set_container(*this);
+ }
+
+ return *layout;
}
void Panel::autosize_special(const Part &part, Geometry &ageom) const
{
if(part.get_name()=="children")
{
- for(const Container::Child *c: children)
+ for(const Child *c: children)
if(c->widget->is_visible())
c->widget->render(renderer);
}
Widget *Panel::find_next_child(int origin_x, int origin_y, int origin_dim, int nav_x, int nav_y) const
{
- Widget *sibling = 0;
+ Widget *sibling = nullptr;
int best_score = 0;
for(const Child *c: children)
{
Panel::Loader::Loader(Panel &p, map<string, Widget *> &m):
DataFile::DerivedObjectLoader<Panel, Widget::Loader>(p),
wdg_map(m),
- last_widget(0)
+ last_widget(nullptr)
{
if(!widget_registry_init_done)
{
widget_registry.invoke_all(*this);
}
-Layout &Panel::Loader::get_layout()
-{
- if(!obj.layout)
- obj.set_layout(new Layout);
-
- return *obj.layout;
-}
-
Widget &Panel::Loader::get_last_widget()
{
if(!last_widget)
template<typename T>
void Panel::Loader::arrangement()
{
- T arr(get_layout());
+ T arr(obj.get_or_create_layout());
ArrangedLoader<T> ldr(*this, arr);
load_sub_with(ldr);
}
{
Widget &src = get_last_widget();
Widget &tgt = *get_item(wdg_map, n);
- get_layout().add_constraint(src, type, tgt);
+ obj.get_or_create_layout().add_constraint(src, type, tgt);
}
void Panel::Loader::expand(bool h, bool v)
{
- get_layout().set_expand(get_last_widget(), h, v);
+ obj.get_or_create_layout().set_expand(get_last_widget(), h, v);
}
void Panel::Loader::ghost(bool g)
{
- get_layout().set_ghost(get_last_widget(), g);
+ obj.get_or_create_layout().set_ghost(get_last_widget(), g);
}
void Panel::Loader::gravity(int h, int v)
{
- get_layout().set_gravity(get_last_widget(), h, v);
+ obj.get_or_create_layout().set_gravity(get_last_widget(), h, v);
}
-void Panel::Loader::grid(unsigned cols)
+void Panel::Loader::grid(size_t cols)
{
- Grid grd(get_layout(), cols);
+ Grid grd(obj.get_or_create_layout(), cols);
ArrangedLoader<Grid> ldr(*this, grd);
load_sub_with(ldr);
}
void Panel::Loader::layout()
{
- Layout::Loader ldr(get_layout(), wdg_map);
+ Layout::Loader ldr(obj.get_or_create_layout(), wdg_map);
load_sub_with(ldr);
}