use disposition_input_model::InputDiagram;
use disposition_input_rt::id_parse;
use crate::ThemeValueSource;
#[derive(Clone, Debug)]
pub struct InputDiagramThemeSources<'a> {
base: &'a InputDiagram<'static>,
overlay: &'a InputDiagram<'static>,
}
impl<'a> InputDiagramThemeSources<'a> {
pub fn new(base: &'a InputDiagram<'static>, overlay: &'a InputDiagram<'static>) -> Self {
Self { base, overlay }
}
pub fn base(&self) -> &'a InputDiagram<'static> {
self.base
}
pub fn overlay(&self) -> &'a InputDiagram<'static> {
self.overlay
}
pub fn style_alias_source(&self, alias_key: &str) -> ThemeValueSource {
let Some(alias) = id_parse::parse_style_alias(alias_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_default
.style_aliases
.contains_key(&alias)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn base_styles_entry_source(&self, entry_key: &str) -> ThemeValueSource {
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_default
.base_styles
.contains_key(&id_or_defaults)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn process_step_selected_styles_entry_source(&self, entry_key: &str) -> ThemeValueSource {
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_default
.process_step_selected_styles
.contains_key(&id_or_defaults)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn types_styles_key_source(&self, type_key: &str) -> ThemeValueSource {
let Some(entity_type_id) = id_parse::parse_entity_type_id(type_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_types_styles
.contains_key(&entity_type_id)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn types_styles_entry_source(&self, type_key: &str, entry_key: &str) -> ThemeValueSource {
let Some(entity_type_id) = id_parse::parse_entity_type_id(type_key) else {
return ThemeValueSource::BaseDiagram;
};
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
let theme_styles = self.overlay.theme_types_styles.get(&entity_type_id);
match theme_styles {
Some(theme_styles) if theme_styles.contains_key(&id_or_defaults) => {
ThemeValueSource::UserInput
}
_ => ThemeValueSource::BaseDiagram,
}
}
pub fn dependencies_included_entry_source(&self, entry_key: &str) -> ThemeValueSource {
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_thing_dependencies_styles
.things_included_styles
.contains_key(&id_or_defaults)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn dependencies_excluded_entry_source(&self, entry_key: &str) -> ThemeValueSource {
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_thing_dependencies_styles
.things_excluded_styles
.contains_key(&id_or_defaults)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn tag_focus_key_source(&self, tag_key: &str) -> ThemeValueSource {
let Some(tag_id_or_defaults) = id_parse::parse_tag_id_or_defaults(tag_key) else {
return ThemeValueSource::BaseDiagram;
};
if self
.overlay
.theme_tag_things_focus
.contains_key(&tag_id_or_defaults)
{
ThemeValueSource::UserInput
} else {
ThemeValueSource::BaseDiagram
}
}
pub fn tag_focus_entry_source(&self, tag_key: &str, entry_key: &str) -> ThemeValueSource {
let Some(tag_id_or_defaults) = id_parse::parse_tag_id_or_defaults(tag_key) else {
return ThemeValueSource::BaseDiagram;
};
let Some(id_or_defaults) = id_parse::parse_id_or_defaults(entry_key) else {
return ThemeValueSource::BaseDiagram;
};
let theme_styles = self.overlay.theme_tag_things_focus.get(&tag_id_or_defaults);
match theme_styles {
Some(theme_styles) if theme_styles.contains_key(&id_or_defaults) => {
ThemeValueSource::UserInput
}
_ => ThemeValueSource::BaseDiagram,
}
}
}