From 0c509866a37ab47ff0e48d357ca55e31658c37c2 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Thu, 16 Sep 2010 14:12:27 +0000 Subject: map info support, initial trade window --- src/ui/listview.cc | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/ui/listview.cc (limited to 'src/ui/listview.cc') diff --git a/src/ui/listview.cc b/src/ui/listview.cc new file mode 100644 index 0000000..56fa324 --- /dev/null +++ b/src/ui/listview.cc @@ -0,0 +1,68 @@ +/* + 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(); + } +} + +} -- cgit v1.2.3