cgv
Loading...
Searching...
No Matches
gui_group.h
1#pragma once
2
3#include <cgv/base/group.h>
4#include <cgv/type/cond/is_enum.h>
5#include <cgv/type/info/type_name.h>
6#include <cgv/base/register.h>
7#include "button.h"
8#include "view.h"
9#include "control.h"
10
11#include "lib_begin.h"
12
13template <typename T, bool is_enum = cgv::type::cond::is_enum<T>::value>
17
18template <typename T>
19struct enum_aware_type_name<T,true>
20{
21 static const char* get_name() { return "enum"; }
22};
23
24namespace cgv {
25 namespace gui {
26
27class CGV_API gui_group;
28class CGV_API provider;
29
32
35
38{
39protected:
40 friend class provider;
42 std::vector<cgv::base::base_ptr> managed_objects;
44 static void set_provider_parent(provider* p, gui_group_ptr g);
46 static gui_group_ptr get_provider_parent(const provider* p);
47public:
49 void register_object(cgv::base::base_ptr object, const std::string& options);
51 void unregister_object(cgv::base::base_ptr object, const std::string& options);
53 gui_group(const std::string& name = "");
55 std::string get_type_name() const;
56
60
66 void add_managed_objects(cgv::base::base_ptr object);
68 void release_all_managed_objects();
70 void release_managed_objects(cgv::base::base_ptr object);
72 bool is_managed_object(cgv::base::base_ptr object);
73 //@/
76
77 virtual bool multiple_selection() const;
79
82 virtual void select_child(unsigned ci, bool exclusive = false);
84 virtual void select_child(cgv::base::base_ptr ci, bool exclusive = false);
86
88 virtual bool unselect_child(unsigned ci);
90 virtual bool unselect_child(cgv::base::base_ptr ci);
92
94 virtual int get_selected_child_index() const;
96
99 virtual cgv::base::base_ptr get_selected_child() const;
101 virtual bool is_selected(cgv::base::base_ptr c) const;
103
104 bool is_selected(unsigned ci) const;
106
108 cgv::signal::signal<cgv::base::base_ptr, bool> on_selection_change;
110
114 virtual bool can_open_and_close() const;
116 virtual bool is_open_child_group(gui_group_ptr g) const;
118 bool is_open_child_group(unsigned ci) const;
120 virtual bool open_child_group(gui_group_ptr g);
122 virtual bool close_child_group(gui_group_ptr g);
124
126 cgv::signal::signal<gui_group_ptr,bool> on_open_state_change;
128
132 virtual void align(const std::string& _align);
134 virtual gui_group_ptr add_group(const std::string& label, const std::string& group_type, const std::string& options, const std::string& align);
136 virtual cgv::base::base_ptr add_decorator(const std::string& label, const std::string& decorator_type, const std::string& options, const std::string& align);
138 virtual button_ptr add_button(const std::string& label, const std::string& options, const std::string& align);
140 virtual view_ptr add_view_void(const std::string& label, const void* value_ptr, const std::string& value_type, const std::string& gui_type, const std::string& options, const std::string& align);
142 virtual control_ptr add_control_void(const std::string& label, void* value_ptr, abst_control_provider* acp, const std::string& value_type, const std::string& gui_type, const std::string& options, const std::string& align, void* user_data);
144 template <typename T>
145 inline data::ref_ptr<view<T> > add_view(const std::string& label, const T& value, const std::string& gui_type = "", const std::string& options = "", const std::string& align = "\n") {
146 view_ptr vp = add_view_void(label, &value,
148 gui_type, options, align);
149 return vp.down_cast<view<T> >();
150 }
152 template <typename T>
153 inline data::ref_ptr<control<T> > add_control(const std::string& label, T& value, const std::string& gui_type = "", const std::string& options = "", const std::string& align = "\n") {
154 control_ptr cp = add_control_void(label, &value, 0,
156 gui_type, options, align, 0);
157 return cp.down_cast<control<T> >();
158 }
160 template <typename T>
161 inline data::ref_ptr<control<T> > add_control(const std::string& label,
162 control_provider<T>* provider, const std::string& gui_type = "",
163 const std::string& options = "", const std::string& align = "\n", void* user_data = 0) {
164 control_ptr cp = add_control_void(label, 0, provider,
166 gui_type, options, align, user_data);
167 return cp.down_cast<control<T> >();
168 }
170
174 cgv::base::base_ptr find_element(const std::string& name);
176 view_ptr find_view_void(const void* value_ptr, int* idx_ptr);
178 control_ptr find_control_void(void* value_ptr, int* idx_ptr);
180
183 template <typename T>
184 inline data::ref_ptr<view<T> > find_view(const T& value, int* idx_ptr=0) {
185 view_ptr vp = find_view_void(&value,idx_ptr);
186 return vp.down_cast<view<T> >();
187 }
189
192 template <typename T>
193 inline data::ref_ptr<control<T> > find_control(T& value, int* idx_ptr=0) {
194 control_ptr cp = find_control_void(&value,idx_ptr);
195 return cp.down_cast<control<T> >();
196 }
198};
199
200
201#if _MSC_VER >= 1400
202CGV_TEMPLATE template class CGV_API data::ref_ptr<gui_group>;
203CGV_TEMPLATE template class CGV_API data::ref_ptr<const gui_group>;
204#endif
205
206
207 }
208}
209
210#include <cgv/config/lib_end.h>
The group class is a node with children.
Definition group.h:20
reference counted pointer, which can work together with types that are derived from ref_counted,...
Definition ref_ptr.h:160
ref_ptr< S, is_ref_counted > down_cast() const
use static cast to convert from T to S if T is a base class of S and has a virtual destructor
Definition ref_ptr.h:180
gui independent group class which is a container for gui elements
Definition gui_group.h:38
cgv::signal::signal< cgv::base::base_ptr, bool > on_selection_change
This signal is emitted for every change of the selection of a child.
Definition gui_group.h:108
data::ref_ptr< view< T > > find_view(const T &value, int *idx_ptr=0)
find the next view of the given value in the current group.
Definition gui_group.h:184
std::vector< cgv::base::base_ptr > managed_objects
managed objects can be add to the group such that
Definition gui_group.h:42
data::ref_ptr< control< T > > add_control(const std::string &label, T &value, const std::string &gui_type="", const std::string &options="", const std::string &align="\n")
add a newly created control to the group for the given value with the given gui type,...
Definition gui_group.h:153
data::ref_ptr< view< T > > add_view(const std::string &label, const T &value, const std::string &gui_type="", const std::string &options="", const std::string &align="\n")
add a newly created view to the group for the given value with the given gui type,...
Definition gui_group.h:145
data::ref_ptr< control< T > > add_control(const std::string &label, control_provider< T > *provider, const std::string &gui_type="", const std::string &options="", const std::string &align="\n", void *user_data=0)
add a newly created control to the group which is controlled by a control_provider
Definition gui_group.h:161
cgv::signal::signal< gui_group_ptr, bool > on_open_state_change
this signal is emitted, when a child group is opened or closed
Definition gui_group.h:126
data::ref_ptr< control< T > > find_control(T &value, int *idx_ptr=0)
find the next control of the given value in the current group.
Definition gui_group.h:193
derive from this class to provide a gui to the current viewer
Definition provider.h:64
class for gui elements that view values of the type specified in the template argument
Definition view.h:45
data::ref_ptr< gui_group, true > gui_group_ptr
ref counted pointer to a gui group
Definition gui_group.h:31
data::ref_ptr< const gui_group, true > const_gui_group_ptr
ref counted pointer to const gui group
Definition gui_group.h:34
the cgv namespace
Definition print.h:11
interfaces that allows to listen to registration events.
Definition register.h:218
type independent base class of control provider interface
Definition control.h:37
traits class with a static function get_name() of type const char* that returns the type name of the ...
Definition type_name.h:54
static const char * get_name()
return special name for standard types or type name from RTTI cleaned from keywords for all other typ...
Definition type_name.h:56