/* ui/listview.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_UI_LISTVIEW_H__ #define __INCLUDED_UI_LISTVIEW_H__ #include #include "ui/widget.h" namespace ui { class ListView; } #include "ui/listitem.h" #include "ui/scrollbar.h" namespace ui { /** * @brief a list of selectable items **/ class ListView : public Widget { public: ListView(Widget *parent=0); ~ListView(); /// current scroll position inline float scroll() const { return listview_scroll; } /// return last selected listitem inline ListItem *selected() const { return listview_selecteditem; } /* -- mutators --------------------------------------------- */ /** * @brief add a new item * */ ListItem *add_item(const std::string & text); /// set scroll void set_scroll(float scroll); /// scroll down void inc_scroll(float scroll); /// scroll up void dec_scroll(float scroll); /// delete all listitems void clear(); /// set selection to specified ListItem void select(ListItem *item); /// set selection to nothing void deselect(); /** * @brief sort listitems according to their sortkey * */ void sort(bool ascending = true); protected: virtual void resize(); /** * @brief emit event handler * */ virtual bool on_emit(Widget *sender, const Event event, void *data); /** * @brief mouse hweel event handler * */ virtual bool on_mousewheel(const math::Vector2f & direction); private: float listview_scroll; ListItem *listview_selecteditem; ScrollBar *listview_scrollbar; }; } // namespacd ui #endif // __INCLUDED_UI_LISTVIEW_H__