Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: b4c00dc7a1e5db3dc4b10b12fb818bec702511a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
   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 <string>
#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__