2 #include <msp/core/maputils.h>
3 #include <msp/core/refptr.h>
6 #include "draghandle.h"
12 #include "indicator.h"
37 void Panel::set_layout(Layout *l)
39 l->set_container(*this);
44 void Panel::autosize_special(const Part &part, Geometry &ageom) const
46 if(part.get_name()=="children" && layout)
47 layout->autosize(ageom);
50 void Panel::render_special(const Part &part, GL::Renderer &renderer) const
52 if(part.get_name()=="children")
54 for(list<Container::Child *>::const_iterator i=children.begin(); i!=children.end(); ++i)
55 if((*i)->widget->is_visible())
56 (*i)->widget->render(renderer);
60 void Panel::on_geometry_change()
66 void Panel::on_child_added(Widget &wdg)
70 layout->add_widget(wdg);
71 signal_autosize_changed.emit();
75 void Panel::on_child_removed(Widget &wdg)
79 layout->remove_widget(wdg);
80 signal_autosize_changed.emit();
85 Panel::Loader::Loader(Panel &p, map<string, Widget *> &m):
86 DataFile::DerivedObjectLoader<Panel, Widget::Loader>(p),
90 add("button", &Loader::child<Button>);
91 add("column", &Loader::arrangement<Column>);
92 add("constraint",&Loader::constraint);
93 add("draghandle",&Loader::child<DragHandle>);
94 add("dropdown", &Loader::child<Dropdown>);
95 add("entry", &Loader::child<Entry>);
96 add("expand", &Loader::expand);
97 add("ghost", &Loader::ghost);
98 add("gravity", &Loader::gravity);
99 add("grid", &Loader::grid);
100 add("hslider", &Loader::child<HSlider>);
101 add("image", &Loader::child<Image>);
102 add("indicator", &Loader::child<Indicator>);
103 add("label", &Loader::child<Label>);
104 add("layout", &Loader::layout);
105 add("list", &Loader::child<List>);
106 add("panel", &Loader::panel);
107 add("row", &Loader::arrangement<Row>);
108 add("stack", &Loader::arrangement<Stack>);
109 add("toggle", &Loader::child<Toggle>);
110 add("vslider", &Loader::child<VSlider>);
113 Layout &Panel::Loader::get_layout()
116 obj.set_layout(new Layout);
121 Widget &Panel::Loader::get_last_widget()
124 throw logic_error("no widget loaded");
130 void Panel::Loader::arrangement()
133 ArrangedLoader<T> ldr(*this, arr);
138 void Panel::Loader::child(const string &n)
140 RefPtr<T> chl = new T();
143 last_widget = wdg_map[n] = chl.release();
146 void Panel::Loader::constraint(Layout::ConstraintType type, const string &n)
148 Widget &src = get_last_widget();
149 Widget &tgt = *get_item(wdg_map, n);
150 get_layout().add_constraint(src, type, tgt);
153 void Panel::Loader::expand(bool h, bool v)
155 get_layout().set_expand(get_last_widget(), h, v);
158 void Panel::Loader::ghost(bool g)
160 get_layout().set_ghost(get_last_widget(), g);
163 void Panel::Loader::gravity(int h, int v)
165 get_layout().set_gravity(get_last_widget(), h, v);
168 void Panel::Loader::grid(unsigned cols)
170 Grid grd(get_layout(), cols);
171 ArrangedLoader<Grid> ldr(*this, grd);
175 void Panel::Loader::layout()
177 Layout::Loader ldr(get_layout(), wdg_map);
181 void Panel::Loader::panel(const string &n)
183 RefPtr<Panel> p = new Panel();
184 load_sub(*p, wdg_map);
186 last_widget = wdg_map[n] = p.release();
191 Panel::ArrangedLoader<T>::ArrangedLoader(Loader &ldr, T &arr):
194 add_auxiliary_loader(ldr);
195 add_auxiliary_loader(arr_loader);