Phase 3.1-3.3: ReactiveTracker with ElementId assignment during parsing, dependency scanning, variable change notification in app.rs

This commit is contained in:
Glint Dev
2026-07-21 20:38:41 +03:00
parent a46c9bc9e7
commit d8d3f57a21
4 changed files with 249 additions and 20 deletions

View File

@@ -19,23 +19,36 @@ impl GlintApp {
pub fn update(&mut self, message: Message) -> iced::Task<Message> {
match message {
Message::WindowScrolled(y) => {
self.doc.variables.insert("__scroll_y".to_string(), Value::Float(y as f64));
let var = "__scroll_y".to_string();
self.doc.variables.insert(var.clone(), Value::Float(y as f64));
self.doc.tracker.on_variable_changed(&var);
}
Message::EventTriggered(script) => {
if !script.is_empty() {
let old_vars: Vec<String> = self.doc.variables.keys().cloned().collect();
self.rhei.execute_action(&script, &mut self.doc.variables);
let new_vars: Vec<String> = self.doc.variables.keys().cloned().collect();
for v in &new_vars {
if !old_vars.contains(v) || self.doc.variables.get(v) != old_vars.iter().find_map(|k| if k == v { self.doc.variables.get(k) } else { None }) {
self.doc.tracker.on_variable_changed(v);
}
}
}
}
Message::InputChanged(Some(var), val) => {
self.doc.variables.insert(var, Value::from(val));
self.doc.variables.insert(var.clone(), Value::from(val));
self.doc.tracker.on_variable_changed(&var);
}
Message::ToggleChanged(Some(var), val) => {
self.doc.variables.insert(var, Value::Bool(val));
self.doc.variables.insert(var.clone(), Value::Bool(val));
self.doc.tracker.on_variable_changed(&var);
}
Message::SliderChanged(Some(var), val) => {
self.doc.variables.insert(var.clone(), Value::Float(val));
self.doc.tracker.on_variable_changed(&var);
if var == "volume_level" {
self.doc.variables.insert("age".to_string(), Value::Float(val));
self.doc.tracker.on_variable_changed("age");
}
}
_ => {}