fyrox_ui/node/
constructor.rs

1// Copyright (c) 2019-present Dmitry Stepanov and Fyrox Engine contributors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy
4// of this software and associated documentation files (the "Software"), to deal
5// in the Software without restriction, including without limitation the rights
6// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7// copies of the Software, and to permit persons to whom the Software is
8// furnished to do so, subject to the following conditions:
9//
10// The above copyright notice and this permission notice shall be included in all
11// copies or substantial portions of the Software.
12//
13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19// SOFTWARE.
20
21//! A special container that is able to create widgets by their type UUID.
22use crate::{
23    absm::{AbsmEventProvider, AnimationBlendingStateMachine},
24    animation::AnimationPlayer,
25    bit::BitField,
26    border::Border,
27    button::Button,
28    canvas::Canvas,
29    check_box::CheckBox,
30    color::gradient::{ColorGradientEditor, ColorGradientField, ColorPoint},
31    color::{AlphaBar, ColorField, ColorPicker, HueBar, SaturationBrightnessField},
32    curve::CurveEditor,
33    decorator::Decorator,
34    dock::{DockingManager, Tile},
35    dropdown_list::DropdownList,
36    expander::Expander,
37    file_browser::{FileBrowser, FileSelector, FileSelectorField},
38    grid::Grid,
39    image::Image,
40    inspector::Inspector,
41    key::{HotKeyEditor, KeyBindingEditor},
42    list_view::{ListView, ListViewItem},
43    menu::{ContextMenu, Menu, MenuItem},
44    messagebox::MessageBox,
45    nine_patch::NinePatch,
46    numeric::NumericUpDown,
47    path::PathEditor,
48    popup::Popup,
49    progress_bar::ProgressBar,
50    range::RangeEditor,
51    rect::RectEditor,
52    screen::Screen,
53    scroll_bar::ScrollBar,
54    scroll_panel::ScrollPanel,
55    scroll_viewer::ScrollViewer,
56    searchbar::SearchBar,
57    selector::Selector,
58    stack_panel::StackPanel,
59    tab_control::TabControl,
60    text::Text,
61    text_box::TextBox,
62    toggle::ToggleButton,
63    tree::{Tree, TreeRoot},
64    uuid::UuidEditor,
65    vec::VecEditor,
66    vector_image::VectorImage,
67    window::Window,
68    wrap_panel::WrapPanel,
69    UiNode, UserInterface,
70};
71use fyrox_graph::constructor::{GraphNodeConstructor, GraphNodeConstructorContainer};
72
73/// Node constructor.
74pub type WidgetConstructor = GraphNodeConstructor<UiNode, UserInterface>;
75
76/// A special container that is able to create widgets by their type UUID.
77pub type WidgetConstructorContainer = GraphNodeConstructorContainer<UiNode, UserInterface>;
78
79/// Creates default widget constructor container with constructors for built-in widgets.
80pub fn new_widget_constructor_container() -> WidgetConstructorContainer {
81    let container = WidgetConstructorContainer::default();
82
83    container.add::<BitField<u8>>();
84    container.add::<BitField<i8>>();
85    container.add::<BitField<u16>>();
86    container.add::<BitField<i16>>();
87    container.add::<BitField<u32>>();
88    container.add::<BitField<i32>>();
89    container.add::<BitField<u64>>();
90    container.add::<BitField<i64>>();
91
92    container.add::<Border>();
93    container.add::<Button>();
94    container.add::<ToggleButton>();
95    container.add::<Canvas>();
96    container.add::<CheckBox>();
97    container.add::<Decorator>();
98    container.add::<DropdownList>();
99    container.add::<Expander>();
100    container.add::<Grid>();
101    container.add::<Image>();
102    container.add::<HotKeyEditor>();
103    container.add::<KeyBindingEditor>();
104    container.add::<ListViewItem>();
105    container.add::<ListView>();
106    container.add::<Menu>();
107    container.add::<MenuItem>();
108    container.add::<ContextMenu>();
109    container.add::<MessageBox>();
110    container.add::<NinePatch>();
111
112    container.add::<NumericUpDown<u8>>();
113    container.add::<NumericUpDown<i8>>();
114    container.add::<NumericUpDown<u16>>();
115    container.add::<NumericUpDown<i16>>();
116    container.add::<NumericUpDown<u32>>();
117    container.add::<NumericUpDown<i32>>();
118    container.add::<NumericUpDown<u64>>();
119    container.add::<NumericUpDown<i64>>();
120    container.add::<NumericUpDown<f32>>();
121    container.add::<NumericUpDown<f64>>();
122
123    container.add::<RangeEditor<u8>>();
124    container.add::<RangeEditor<i8>>();
125    container.add::<RangeEditor<u16>>();
126    container.add::<RangeEditor<i16>>();
127    container.add::<RangeEditor<u32>>();
128    container.add::<RangeEditor<i32>>();
129    container.add::<RangeEditor<u64>>();
130    container.add::<RangeEditor<i64>>();
131    container.add::<RangeEditor<f32>>();
132    container.add::<RangeEditor<f64>>();
133
134    container.add::<RectEditor<u8>>();
135    container.add::<RectEditor<i8>>();
136    container.add::<RectEditor<u16>>();
137    container.add::<RectEditor<i16>>();
138    container.add::<RectEditor<u32>>();
139    container.add::<RectEditor<i32>>();
140    container.add::<RectEditor<u64>>();
141    container.add::<RectEditor<i64>>();
142    container.add::<RectEditor<f32>>();
143    container.add::<RectEditor<f64>>();
144
145    container.add::<PathEditor>();
146    container.add::<ProgressBar>();
147    container.add::<ScrollBar>();
148    container.add::<ScrollPanel>();
149    container.add::<ScrollViewer>();
150    container.add::<SearchBar>();
151    container.add::<StackPanel>();
152    container.add::<TabControl>();
153    container.add::<Tree>();
154    container.add::<TreeRoot>();
155    container.add::<UuidEditor>();
156
157    container.add::<VectorImage>();
158    container.add::<Window>();
159    container.add::<WrapPanel>();
160    container.add::<ColorGradientField>();
161    container.add::<ColorGradientEditor>();
162    container.add::<ColorPoint>();
163
164    container.add::<AlphaBar>();
165    container.add::<HueBar>();
166    container.add::<SaturationBrightnessField>();
167    container.add::<ColorPicker>();
168    container.add::<ColorField>();
169
170    container.add::<CurveEditor>();
171    container.add::<DockingManager>();
172    container.add::<Tile>();
173
174    container.add::<FileBrowser>();
175    container.add::<FileSelector>();
176    container.add::<FileSelectorField>();
177
178    container.add::<Inspector>();
179
180    container.add::<Popup>();
181
182    container.add::<VecEditor<u8, 2>>();
183    container.add::<VecEditor<i8, 2>>();
184    container.add::<VecEditor<u16, 2>>();
185    container.add::<VecEditor<i16, 2>>();
186    container.add::<VecEditor<u32, 2>>();
187    container.add::<VecEditor<i32, 2>>();
188    container.add::<VecEditor<u64, 2>>();
189    container.add::<VecEditor<i64, 2>>();
190    container.add::<VecEditor<f32, 2>>();
191    container.add::<VecEditor<f64, 2>>();
192
193    container.add::<VecEditor<u8, 3>>();
194    container.add::<VecEditor<i8, 3>>();
195    container.add::<VecEditor<u16, 3>>();
196    container.add::<VecEditor<i16, 3>>();
197    container.add::<VecEditor<u32, 3>>();
198    container.add::<VecEditor<i32, 3>>();
199    container.add::<VecEditor<u64, 3>>();
200    container.add::<VecEditor<i64, 3>>();
201    container.add::<VecEditor<f32, 3>>();
202    container.add::<VecEditor<f64, 3>>();
203
204    container.add::<VecEditor<u8, 4>>();
205    container.add::<VecEditor<i8, 4>>();
206    container.add::<VecEditor<u16, 4>>();
207    container.add::<VecEditor<i16, 4>>();
208    container.add::<VecEditor<u32, 4>>();
209    container.add::<VecEditor<i32, 4>>();
210    container.add::<VecEditor<u64, 4>>();
211    container.add::<VecEditor<i64, 4>>();
212    container.add::<VecEditor<f32, 4>>();
213    container.add::<VecEditor<f64, 4>>();
214
215    container.add::<Text>();
216    container.add::<TextBox>();
217    container.add::<Screen>();
218    container.add::<AnimationPlayer>();
219    container.add::<AnimationBlendingStateMachine>();
220    container.add::<AbsmEventProvider>();
221    container.add::<Selector>();
222
223    container
224}