use std::ops::RangeInclusive;
use egui::NumExt as _;
use egui::emath::Numeric;
use re_types_core::encodings;
use re_ui::syntax_highlighting::{SyntaxHighlightedBuilder, SyntaxHighlighting};
use re_viewer_context::{MaybeMutRef, UiLayout};
pub fn edit_u32_range(
_ctx: &re_viewer_context::AppContext<'_>,
ui: &mut egui::Ui,
value: &mut MaybeMutRef<'_, impl std::ops::DerefMut<Target = encodings::UInt32>>,
range: RangeInclusive<u32>,
) -> egui::Response {
let mut value: MaybeMutRef<'_, u32> = match value {
MaybeMutRef::Ref(value) => MaybeMutRef::Ref(value),
MaybeMutRef::MutRef(value) => MaybeMutRef::MutRef(&mut value.deref_mut().0),
};
edit_int_raw(ui, &mut value, range, "")
}
pub fn edit_u64_range(
_ctx: &re_viewer_context::AppContext<'_>,
ui: &mut egui::Ui,
value: &mut MaybeMutRef<'_, impl std::ops::DerefMut<Target = encodings::UInt64>>,
range: RangeInclusive<u64>,
) -> egui::Response {
let mut value: MaybeMutRef<'_, u64> = match value {
MaybeMutRef::Ref(value) => MaybeMutRef::Ref(value),
MaybeMutRef::MutRef(value) => MaybeMutRef::MutRef(&mut value.deref_mut().0),
};
edit_int_raw(ui, &mut value, range, "")
}
pub fn edit_int_raw<T: Numeric + SyntaxHighlighting>(
ui: &mut egui::Ui,
value: &mut MaybeMutRef<'_, T>,
range: RangeInclusive<T>,
suffix: &str,
) -> egui::Response {
let max_pts_per_step = 20.0; let min_speed = 1.0 / max_pts_per_step;
let use_exponential_speed = 50.0 < range.end().to_f64() - range.start().to_f64();
let speed = if use_exponential_speed {
((**value).to_f64() * 0.01).at_least(min_speed)
} else {
min_speed
};
edit_int_raw_with_speed_impl(ui, value, range, speed, suffix)
}
pub fn edit_int_raw_with_speed_impl<T: Numeric + SyntaxHighlighting>(
ui: &mut egui::Ui,
value: &mut MaybeMutRef<'_, T>,
range: RangeInclusive<T>,
speed: f64,
suffix: &str,
) -> egui::Response {
if let Some(value) = value.as_mut() {
ui.add(
egui::DragValue::new(value)
.clamp_existing_to_range(false)
.range(range)
.speed(speed)
.suffix(suffix),
)
} else {
UiLayout::List.data_label(
ui,
SyntaxHighlightedBuilder::new()
.with(&**value)
.with_primitive(suffix),
)
}
}