listbox_view.h
1 /*
2 ** ClanLib SDK
3 ** Copyright (c) 1997-2016 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 
35 namespace clan
36 {
37  class ListBoxViewImpl;
38 
39  class ListBoxView : public ScrollView
40  {
41  public:
42  ListBoxView();
43  ~ListBoxView();
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 }
Definition: clanapp.h:35
C style comment block.
2D Graphics Canvas
Definition: canvas.h:71
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
void set_items(const std::vector< std::shared_ptr< View >> &items)
Definition: scroll_view.h:46
void set_selected_item(int index)
Definition: listbox_view.h:39
void layout_children(Canvas &canvas) override
Sets the view geometry for all children of this view.
int selected_item() const
Canvas canvas() const
std::function< void()> & func_selection_changed()