listbox_view.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27** Artem Khomenko
28*/
29
30#pragma once
31
32#include "../View/view.h"
33#include "scroll_view.h"
34
35namespace clan
36{
37 class ListBoxViewImpl;
38
39 class ListBoxView : public ScrollView
40 {
41 public:
43 ~ListBoxView() override;
44
45 void set_items(const std::vector<std::shared_ptr<View>> &items);
46
47 template<typename T>
48 void set_items(const std::vector<T> &items, const std::function<std::shared_ptr<View>(const T &item)> &map_function)
49 {
50 std::vector<std::shared_ptr<View>> views;
51 views.reserve(items.size());
52 for (const auto &item : items)
53 {
54 views.push_back(map_function(item));
55 }
56 set_items(views);
57 }
58
59 int selected_item() const;
60 void set_selected_item(int index);
61
62 std::function<void()> &func_selection_changed();
63
64 void layout_children(Canvas &canvas) override;
65
66 private:
67 std::unique_ptr<ListBoxViewImpl> impl;
68
69 // Sets in set_selected_item() for scroll to selected in layout_children().
70 bool needScrollToSelected = false;
71 };
72}
2D Graphics Canvas
Definition canvas.h:72
std::function< void()> & func_selection_changed()
int selected_item() const
void set_items(const std::vector< std::shared_ptr< View > > &items)
void set_selected_item(int index)
void set_items(const std::vector< T > &items, const std::function< std::shared_ptr< View >(const T &item)> &map_function)
Definition listbox_view.h:48
~ListBoxView() override
void layout_children(Canvas &canvas) override
Sets the view geometry for all children of this view.
Canvas canvas() const
Definition clanapp.h:36