use super::{
accuracy, color, end_tag, parse_bool, parse_children, text_parsed, timer_format,
timing_method_override, translate_size, DeltaGradientKind, GradientBuilder, Result,
};
use crate::util::xml::Reader;
pub use crate::component::timer::Component;
pub fn settings(reader: &mut Reader<'_>, component: &mut Component) -> Result<()> {
let settings = component.settings_mut();
let mut background_builder = GradientBuilder::<DeltaGradientKind>::new_gradient_type();
let mut override_color = false;
parse_children(reader, |reader, tag, _| {
if !background_builder.parse_background(reader, tag.name())? {
match tag.name() {
"TimerHeight" => text_parsed(reader, |v| settings.height = translate_size(v)),
"TimerFormat" => {
timer_format(reader, |d, a| {
settings.digits_format = d;
settings.accuracy = a;
})
}
"TimerAccuracy" => {
accuracy(reader, |v| settings.accuracy = v)
}
"OverrideSplitColors" => {
parse_bool(reader, |b| override_color = b)
}
"UseSplitColors" => {
parse_bool(reader, |b| override_color = !b)
}
"ShowGradient" => parse_bool(reader, |b| settings.show_gradient = b),
"TimerColor" => color(reader, |c| settings.color_override = Some(c)),
"TimingMethod" => timing_method_override(reader, |v| settings.timing_method = v),
_ => {
end_tag(reader)
}
}
} else {
Ok(())
}
})?;
if !override_color {
settings.color_override = None;
}
settings.background = background_builder.build();
Ok(())
}