mod builder_buttons;
mod builder_containers;
mod builder_context_menu;
mod builder_controls;
mod builder_data;
mod builder_dialogs;
mod builder_drag_value;
mod builder_labels;
mod builder_navigation;
mod builder_panels;
mod builder_text;
mod builder_tree;
pub(crate) mod date_utils;
pub(crate) mod range_slider_visuals;
mod tile_builder;
mod world_canvas;
mod world_data;
mod world_interaction;
mod world_layout;
mod world_reactive;
mod world_state;
mod world_tiles;
pub use tile_builder::TileBuilder;
pub(crate) use date_utils::{
day_of_week, days_in_month, format_month_year, populate_calendar_grid,
};
pub(crate) use range_slider_visuals::{RangeSliderVisualUpdate, update_range_slider_visuals};
pub(super) enum ContextMenuBuilderEntry {
Item {
label: String,
shortcut: String,
},
Separator,
Submenu {
label: String,
children: Vec<ContextMenuBuilderEntry>,
},
WidgetRow {
label: String,
},
}
pub struct ContextMenuBuilder {
pub(super) entries: Vec<ContextMenuBuilderEntry>,
}
impl ContextMenuBuilder {
pub fn new() -> Self {
Self {
entries: Vec::new(),
}
}
pub fn item(mut self, label: &str, shortcut: &str) -> Self {
self.entries.push(ContextMenuBuilderEntry::Item {
label: label.to_string(),
shortcut: shortcut.to_string(),
});
self
}
pub fn separator(mut self) -> Self {
self.entries.push(ContextMenuBuilderEntry::Separator);
self
}
pub fn submenu(
mut self,
label: &str,
f: impl FnOnce(ContextMenuBuilder) -> ContextMenuBuilder,
) -> Self {
let sub = f(ContextMenuBuilder::new());
self.entries.push(ContextMenuBuilderEntry::Submenu {
label: label.to_string(),
children: sub.entries,
});
self
}
pub fn widget_row(mut self, label: &str) -> Self {
self.entries.push(ContextMenuBuilderEntry::WidgetRow {
label: label.to_string(),
});
self
}
}
impl Default for ContextMenuBuilder {
fn default() -> Self {
Self::new()
}
}
pub(super) struct ContextMenuTheme {
pub(super) font_size: f32,
pub(super) corner_radius: f32,
pub(super) button_height: f32,
}