/* 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 --------------------------------------------- */ /// set scroll void set_scroll(float scroll); /// scroll down void inc_scroll(float scroll); /// scroll up void dec_scroll(float scroll); /// clear all listitems void clear(); /// set selection to specified ListItem void select(ListItem *item); /// set selection to nothing void deselect(); /** * @brief sort child ListItems according to their sortkey * Sort will fail with an assert error if the ListView * contains any non-ListItem child widgets * */ void sort(); /** * @brief reverse sort child ListItems according to their sortkey * Sort will fail with an assert error if the ListView * contains any non-ListItem child widgets * */ void sort_reverse(); protected: virtual void resize(); /** * @brief emit event handler * */ virtual bool on_emit(Widget *sender, const Event event, void *data); /** * @brief keypress event handler * */ virtual bool on_keypress(const int key, const unsigned int modifier); private: float listview_scroll; ListItem *listview_selecteditem; ScrollBar *listview_scrollbar; }; } // namespacd ui #endif // __INCLUDED_UI_LISTVIEW_H__