use bevy::prelude::*;
use crate::io::{EditorBloom, EditorSmaaPreset, EditorTonemapping};
use crate::ui::tokens::BORDER_COLOR;
use crate::ui::widgets::checkbox::{CheckboxProps, checkbox};
use crate::ui::widgets::combobox::ComboBoxOptionData;
use crate::ui::widgets::inspector_field::{combobox_field, fields_row};
use crate::ui::components::binding::FieldBinding;
use crate::ui::components::inspector::utils::{
combobox_options_from_reflect, combobox_options_from_reflect_raw, combobox_options_to_combobox,
};
use crate::ui::components::inspector::{FieldKind, path_to_label};
fn optional_combobox_options(mut options: Vec<ComboBoxOptionData>) -> Vec<ComboBoxOptionData> {
options.insert(
0,
ComboBoxOptionData::new("Disabled").with_value("Disabled"),
);
options
}
fn settings_combobox(
path: &str,
label: Option<&str>,
combobox_data: Vec<ComboBoxOptionData>,
) -> impl Bundle {
let combobox_data = optional_combobox_options(combobox_data);
let field_options = combobox_options_to_combobox(&combobox_data);
let label = label
.map(String::from)
.unwrap_or_else(|| path_to_label(path));
(
FieldBinding::editor_settings(
path,
FieldKind::ComboBox {
options: field_options,
optional: true,
},
),
combobox_field(label, combobox_data),
)
}
pub fn settings_properties_section(asset_server: &AssetServer) -> impl Bundle {
(
Node {
width: percent(100),
flex_direction: FlexDirection::Column,
row_gap: px(12),
padding: UiRect::all(px(24)),
border: UiRect::bottom(px(1)),
..default()
},
BorderColor::all(BORDER_COLOR),
children![
(
fields_row(),
children![(
FieldBinding::editor_settings("show_fps", FieldKind::Bool),
checkbox(CheckboxProps::new(path_to_label("show_fps")), asset_server,),
)],
),
(
fields_row(),
children![(
FieldBinding::editor_settings("vsync", FieldKind::Bool),
checkbox(CheckboxProps::new("V-Sync").checked(true), asset_server,),
)],
),
(
fields_row(),
children![settings_combobox(
"tonemapping",
None,
combobox_options_from_reflect_raw::<EditorTonemapping>(),
)],
),
(
fields_row(),
children![settings_combobox(
"bloom",
None,
combobox_options_from_reflect::<EditorBloom>(),
)],
),
(
fields_row(),
children![settings_combobox(
"anti_aliasing",
Some("Anti-aliasing (SMAA)"),
combobox_options_from_reflect::<EditorSmaaPreset>(),
)],
),
],
)
}