Phase 3.1-3.3: ReactiveTracker with ElementId assignment during parsing, dependency scanning, variable change notification in app.rs
This commit is contained in:
19
src/app.rs
19
src/app.rs
@@ -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");
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
|
||||
Reference in New Issue
Block a user