/* ui/listview.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "ui/listview.h" namespace ui { ListView::ListView(Widget *parent) : Widget(parent) { set_label("listview"); set_border(true); } ListView::~ListView() { } void ListView::set_scroll(float scroll) { listview_scroll = scroll; if (listview_scroll < 0) listview_scroll = 0; // calculate maximal scroll size float top = 0; for (Children::iterator it = children().begin(); it != children().end(); it++) { top += (*it)->height(); } if (listview_scroll > top) listview_scroll = top; } void ListView::inc_scroll(float scroll) { set_scroll(listview_scroll + scroll); } void ListView::dec_scroll(float scroll) { set_scroll(listview_scroll - scroll); } void ListView::resize() { float content_top = 0; // reposition all children within the container for (Children::iterator it = children().begin(); it != children().end(); it++) { (*it)->set_width(width()); if (content_top - listview_scroll < 0) { // child widget is invisible (*it)->hide(); } else if ((content_top - listview_scroll) >= height()) { // child widget is invisible (*it)->hide(); } else { (*it)->show(); (*it)->set_location(0, content_top - listview_scroll); } content_top += (*it)->height(); } } }