Skip to main content

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::file_browser::FileSelectorField;
23use crate::{
24    absm::{AbsmEventProvider, AnimationBlendingStateMachine},
25    animation::AnimationPlayer,
26    bit::BitField,
27    border::Border,
28    button::Button,
29    canvas::Canvas,
30    check_box::CheckBox,
31    color::gradient::{ColorGradientEditor, ColorGradientField, ColorPoint},
32    color::{AlphaBar, ColorField, ColorPicker, HueBar, SaturationBrightnessField},
33    curve::CurveEditor,
34    decorator::Decorator,
35    dock::{DockingManager, Tile},
36    dropdown_list::DropdownList,
37    expander::Expander,
38    file_browser::{FileBrowser, FileSelector},
39    grid::Grid,
40    image::Image,
41    inspector::Inspector,
42    key::{HotKeyEditor, KeyBindingEditor},
43    list_view::{ListView, ListViewItem},
44    menu::{ContextMenu, Menu, MenuItem},
45    messagebox::MessageBox,
46    nine_patch::NinePatch,
47    numeric::NumericUpDown,
48    path::PathEditor,
49    popup::Popup,
50    progress_bar::ProgressBar,
51    range::RangeEditor,
52    rect::RectEditor,
53    screen::Screen,
54    scroll_bar::ScrollBar,
55    scroll_panel::ScrollPanel,
56    scroll_viewer::ScrollViewer,
57    searchbar::SearchBar,
58    selector::Selector,
59    stack_panel::StackPanel,
60    tab_control::TabControl,
61    text::Text,
62    text_box::TextBox,
63    toggle::ToggleButton,
64    tree::{Tree, TreeRoot},
65    uuid::UuidEditor,
66    vec::VecEditor,
67    vector_image::VectorImage,
68    window::Window,
69    wrap_panel::WrapPanel,
70    UiNode, UserInterface,
71};
72use fyrox_graph::constructor::{GraphNodeConstructor, GraphNodeConstructorContainer};
73
74/// Node constructor.
75pub type WidgetConstructor = GraphNodeConstructor<UiNode, UserInterface>;
76
77/// A special container that is able to create widgets by their type UUID.
78pub type WidgetConstructorContainer = GraphNodeConstructorContainer<UiNode, UserInterface>;
79
80/// Creates default widget constructor container with constructors for built-in widgets.
81pub fn new_widget_constructor_container() -> WidgetConstructorContainer {
82    let container = WidgetConstructorContainer::default();
83
84    container.add::<BitField<u8>>();
85    container.add::<BitField<i8>>();
86    container.add::<BitField<u16>>();
87    container.add::<BitField<i16>>();
88    container.add::<BitField<u32>>();
89    container.add::<BitField<i32>>();
90    container.add::<BitField<u64>>();
91    container.add::<BitField<i64>>();
92
93    container.add::<Border>();
94    container.add::<Button>();
95    container.add::<ToggleButton>();
96    container.add::<Canvas>();
97    container.add::<CheckBox>();
98    container.add::<Decorator>();
99    container.add::<DropdownList>();
100    container.add::<Expander>();
101    container.add::<Grid>();
102    container.add::<Image>();
103    container.add::<HotKeyEditor>();
104    container.add::<KeyBindingEditor>();
105    container.add::<ListViewItem>();
106    container.add::<ListView>();
107    container.add::<Menu>();
108    container.add::<MenuItem>();
109    container.add::<ContextMenu>();
110    container.add::<MessageBox>();
111    container.add::<NinePatch>();
112
113    container.add::<NumericUpDown<u8>>();
114    container.add::<NumericUpDown<i8>>();
115    container.add::<NumericUpDown<u16>>();
116    container.add::<NumericUpDown<i16>>();
117    container.add::<NumericUpDown<u32>>();
118    container.add::<NumericUpDown<i32>>();
119    container.add::<NumericUpDown<u64>>();
120    container.add::<NumericUpDown<i64>>();
121    container.add::<NumericUpDown<f32>>();
122    container.add::<NumericUpDown<f64>>();
123
124    container.add::<RangeEditor<u8>>();
125    container.add::<RangeEditor<i8>>();
126    container.add::<RangeEditor<u16>>();
127    container.add::<RangeEditor<i16>>();
128    container.add::<RangeEditor<u32>>();
129    container.add::<RangeEditor<i32>>();
130    container.add::<RangeEditor<u64>>();
131    container.add::<RangeEditor<i64>>();
132    container.add::<RangeEditor<f32>>();
133    container.add::<RangeEditor<f64>>();
134
135    container.add::<RectEditor<u8>>();
136    container.add::<RectEditor<i8>>();
137    container.add::<RectEditor<u16>>();
138    container.add::<RectEditor<i16>>();
139    container.add::<RectEditor<u32>>();
140    container.add::<RectEditor<i32>>();
141    container.add::<RectEditor<u64>>();
142    container.add::<RectEditor<i64>>();
143    container.add::<RectEditor<f32>>();
144    container.add::<RectEditor<f64>>();
145
146    container.add::<PathEditor>();
147    container.add::<ProgressBar>();
148    container.add::<ScrollBar>();
149    container.add::<ScrollPanel>();
150    container.add::<ScrollViewer>();
151    container.add::<SearchBar>();
152    container.add::<StackPanel>();
153    container.add::<TabControl>();
154    container.add::<Tree>();
155    container.add::<TreeRoot>();
156    container.add::<UuidEditor>();
157
158    container.add::<VectorImage>();
159    container.add::<Window>();
160    container.add::<WrapPanel>();
161    container.add::<ColorGradientField>();
162    container.add::<ColorGradientEditor>();
163    container.add::<ColorPoint>();
164
165    container.add::<AlphaBar>();
166    container.add::<HueBar>();
167    container.add::<SaturationBrightnessField>();
168    container.add::<ColorPicker>();
169    container.add::<ColorField>();
170
171    container.add::<CurveEditor>();
172    container.add::<DockingManager>();
173    container.add::<Tile>();
174
175    container.add::<FileBrowser>();
176    container.add::<FileSelector>();
177    container.add::<FileSelectorField>();
178
179    container.add::<Inspector>();
180
181    container.add::<Popup>();
182
183    container.add::<VecEditor<u8, 2>>();
184    container.add::<VecEditor<i8, 2>>();
185    container.add::<VecEditor<u16, 2>>();
186    container.add::<VecEditor<i16, 2>>();
187    container.add::<VecEditor<u32, 2>>();
188    container.add::<VecEditor<i32, 2>>();
189    container.add::<VecEditor<u64, 2>>();
190    container.add::<VecEditor<i64, 2>>();
191    container.add::<VecEditor<f32, 2>>();
192    container.add::<VecEditor<f64, 2>>();
193
194    container.add::<VecEditor<u8, 3>>();
195    container.add::<VecEditor<i8, 3>>();
196    container.add::<VecEditor<u16, 3>>();
197    container.add::<VecEditor<i16, 3>>();
198    container.add::<VecEditor<u32, 3>>();
199    container.add::<VecEditor<i32, 3>>();
200    container.add::<VecEditor<u64, 3>>();
201    container.add::<VecEditor<i64, 3>>();
202    container.add::<VecEditor<f32, 3>>();
203    container.add::<VecEditor<f64, 3>>();
204
205    container.add::<VecEditor<u8, 4>>();
206    container.add::<VecEditor<i8, 4>>();
207    container.add::<VecEditor<u16, 4>>();
208    container.add::<VecEditor<i16, 4>>();
209    container.add::<VecEditor<u32, 4>>();
210    container.add::<VecEditor<i32, 4>>();
211    container.add::<VecEditor<u64, 4>>();
212    container.add::<VecEditor<i64, 4>>();
213    container.add::<VecEditor<f32, 4>>();
214    container.add::<VecEditor<f64, 4>>();
215
216    container.add::<Text>();
217    container.add::<TextBox>();
218    container.add::<Screen>();
219    container.add::<AnimationPlayer>();
220    container.add::<AnimationBlendingStateMachine>();
221    container.add::<AbsmEventProvider>();
222    container.add::<Selector>();
223
224    container
225}