/* $Id$
This file is part of libmspgltk
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Copyright © 2007-2009 Mikko Rasa, Mikkosoft Productions
Distributed under the LGPL
*/
List::List(const Resources &r):
Widget(r),
+ Container(r),
sel_index(-1),
first(0),
n_visible(1),
row_height(1),
items_part(0),
- slider(new VSlider(res)),
- slider_active(false)
+ slider(res)
{
- slider->set_step(1);
- slider->signal_value_changed.connect(sigc::mem_fun(this, &List::slider_value_changed));
+ add(slider);
+ slider.set_step(1);
+ slider.signal_value_changed.connect(sigc::mem_fun(this, &List::slider_value_changed));
update_style();
}
-List::~List()
-{
- delete slider;
-}
-
void List::append(const string &v)
{
items.push_back(v);
void List::button_press(int x, int y, unsigned btn)
{
- if(slider->get_geometry().is_inside(x, y))
- {
- const Geometry &sgeom=slider->get_geometry();
- slider->button_press(x-sgeom.x, y-sgeom.y, btn);
- slider_active=true;
- }
- else if(btn==1)
+ Container::button_press(x, y, btn);
+ if(!click_focus && btn==1)
{
if(items_part)
y+=items_part->get_margin().top;
}
}
-void List::button_release(int x, int y, unsigned btn)
-{
- if(slider_active)
- {
- const Geometry &sgeom=slider->get_geometry();
- slider->button_release(x-sgeom.x, y-sgeom.y, btn);
- slider_active=false;
- }
-}
-
-void List::pointer_motion(int x, int y)
-{
- if(slider_active)
- {
- const Geometry &sgeom=slider->get_geometry();
- slider->pointer_motion(x-sgeom.x, y-sgeom.y);
- }
-}
-
void List::render_special(const Part &part) const
{
if(part.get_name()=="items")
}
}
else if(part.get_name()=="slider")
- slider->render();
+ slider.render();
}
void List::on_geometry_change()
{
Geometry sgeom=i->get_geometry();
i->get_alignment().apply(sgeom, geom, i->get_margin());
- slider->set_geometry(sgeom);
+ slider.set_geometry(sgeom);
}
}
if(items.size()>n_visible)
{
- slider->set_range(0, items.size()-n_visible);
- slider->set_value(items.size()-n_visible-first);
+ slider.set_range(0, items.size()-n_visible);
+ slider.set_value(items.size()-n_visible-first);
}
else
{
- slider->set_range(0, 0);
- slider->set_value(0);
+ slider.set_range(0, 0);
+ slider.set_value(0);
}
}
void List::Loader::item(const string &v)
{
- static_cast<List &>(wdg).append(v);
+ dynamic_cast<List &>(wdg).append(v);
}
} // namespace GLtk