2 #include <msp/core/maputils.h>
3 #include <msp/core/refptr.h>
6 #include "draghandle.h"
12 #include "indicator.h"
30 input_type = INPUT_TEXT;
39 void Panel::set_layout(Layout *l)
41 l->set_container(*this);
46 void Panel::autosize_special(const Part &part, Geometry &ageom) const
48 if(part.get_name()=="children" && layout)
49 layout->autosize(ageom);
52 void Panel::render_special(const Part &part, GL::Renderer &renderer) const
54 if(part.get_name()=="children")
56 for(list<Container::Child *>::const_iterator i=children.begin(); i!=children.end(); ++i)
57 if((*i)->widget->is_visible())
58 (*i)->widget->render(renderer);
62 void Panel::on_geometry_change()
68 void Panel::on_child_added(Widget &wdg)
72 layout->add_widget(wdg);
73 signal_autosize_changed.emit();
77 void Panel::on_child_removed(Widget &wdg)
81 layout->remove_widget(wdg);
82 signal_autosize_changed.emit();
87 Panel::Loader::Loader(Panel &p, map<string, Widget *> &m):
88 DataFile::DerivedObjectLoader<Panel, Widget::Loader>(p),
92 add("button", &Loader::child<Button>);
93 add("column", &Loader::arrangement<Column>);
94 add("constraint",&Loader::constraint);
95 add("draghandle",&Loader::child<DragHandle>);
96 add("dropdown", &Loader::child<Dropdown>);
97 add("entry", &Loader::child<Entry>);
98 add("expand", &Loader::expand);
99 add("ghost", &Loader::ghost);
100 add("gravity", &Loader::gravity);
101 add("grid", &Loader::grid);
102 add("hslider", &Loader::child<HSlider>);
103 add("image", &Loader::child<Image>);
104 add("indicator", &Loader::child<Indicator>);
105 add("label", &Loader::child<Label>);
106 add("layout", &Loader::layout);
107 add("list", &Loader::child<List>);
108 add("panel", &Loader::panel);
109 add("row", &Loader::arrangement<Row>);
110 add("stack", &Loader::arrangement<Stack>);
111 add("toggle", &Loader::child<Toggle>);
112 add("vslider", &Loader::child<VSlider>);
115 Layout &Panel::Loader::get_layout()
118 obj.set_layout(new Layout);
123 Widget &Panel::Loader::get_last_widget()
126 throw logic_error("no widget loaded");
132 void Panel::Loader::arrangement()
135 ArrangedLoader<T> ldr(*this, arr);
140 void Panel::Loader::child(const string &n)
142 RefPtr<T> chl = new T();
145 last_widget = wdg_map[n] = chl.release();
148 void Panel::Loader::constraint(Layout::ConstraintType type, const string &n)
150 Widget &src = get_last_widget();
151 Widget &tgt = *get_item(wdg_map, n);
152 get_layout().add_constraint(src, type, tgt);
155 void Panel::Loader::expand(bool h, bool v)
157 get_layout().set_expand(get_last_widget(), h, v);
160 void Panel::Loader::ghost(bool g)
162 get_layout().set_ghost(get_last_widget(), g);
165 void Panel::Loader::gravity(int h, int v)
167 get_layout().set_gravity(get_last_widget(), h, v);
170 void Panel::Loader::grid(unsigned cols)
172 Grid grd(get_layout(), cols);
173 ArrangedLoader<Grid> ldr(*this, grd);
177 void Panel::Loader::layout()
179 Layout::Loader ldr(get_layout(), wdg_map);
183 void Panel::Loader::panel(const string &n)
185 RefPtr<Panel> p = new Panel();
186 load_sub(*p, wdg_map);
188 last_widget = wdg_map[n] = p.release();
193 Panel::ArrangedLoader<T>::ArrangedLoader(Loader &ldr, T &arr):
196 add_auxiliary_loader(ldr);
197 add_auxiliary_loader(arr_loader);