Rename ObservableRole
variants
Also rename corresponding CSS classes and add methods to check roles.
This commit is contained in:
parent
677ef47544
commit
af2724f934
4 changed files with 30 additions and 16 deletions
|
@ -127,7 +127,7 @@ details[open]:has(li) .element-switch::after {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.observable.invalid {
|
.observable.invalid-constraint {
|
||||||
color: var(--text-invalid);
|
color: var(--text-invalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ details[open]:has(li) .element-switch::after {
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.observable.invalid > input[type=text] {
|
.observable.invalid-constraint > input[type=text] {
|
||||||
border-color: var(--border-invalid);
|
border-color: var(--border-invalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,11 +150,11 @@ details[open]:has(li) .element-switch::after {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
.constrained > .status::after, details:has(.constrained):not([open]) .status::after {
|
.valid-constraint > .status::after, details:has(.valid-constraint):not([open]) .status::after {
|
||||||
content: '🔗';
|
content: '🔗';
|
||||||
}
|
}
|
||||||
|
|
||||||
.invalid > .status::after, details:has(.invalid):not([open]) .status::after {
|
.invalid-constraint > .status::after, details:has(.invalid-constraint):not([open]) .status::after {
|
||||||
content: '⚠';
|
content: '⚠';
|
||||||
color: var(--text-invalid);
|
color: var(--text-invalid);
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,7 @@ pub fn AddRemove() -> View {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
let desired = create_signal(0.0);
|
let desired = create_signal(0.0);
|
||||||
let role = create_signal(ObservableRole::Measure);
|
let role = create_signal(ObservableRole::Measurement);
|
||||||
state.assembly.insert_observable(Observable {
|
state.assembly.insert_observable(Observable {
|
||||||
subjects: subjects,
|
subjects: subjects,
|
||||||
measured: measured,
|
measured: measured,
|
||||||
|
@ -242,7 +242,7 @@ pub fn AddRemove() -> View {
|
||||||
format!("Updated constraint with subjects ({}, {})", subjects.0, subjects.1)
|
format!("Updated constraint with subjects ({}, {})", subjects.0, subjects.1)
|
||||||
));
|
));
|
||||||
desired.track();
|
desired.track();
|
||||||
if role.with(|r| matches!(r, ObservableRole::Constrain)) {
|
if role.with(|rl| rl.is_valid_constraint()) {
|
||||||
state.assembly.realize();
|
state.assembly.realize();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -112,9 +112,17 @@ impl Element {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum ObservableRole {
|
pub enum ObservableRole {
|
||||||
Measure,
|
Measurement,
|
||||||
Constrain,
|
Constraint(bool)
|
||||||
Invalid
|
}
|
||||||
|
|
||||||
|
impl ObservableRole {
|
||||||
|
pub fn is_valid_constraint(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
ObservableRole::Measurement => false,
|
||||||
|
ObservableRole::Constraint(valid) => *valid
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -126,6 +134,12 @@ pub struct Observable {
|
||||||
pub role: Signal<ObservableRole>
|
pub role: Signal<ObservableRole>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Observable {
|
||||||
|
fn role_is_valid_constraint_untracked(&self) -> bool {
|
||||||
|
self.role.with_untracked(|role| role.is_valid_constraint())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// the velocity is expressed in uniform coordinates
|
// the velocity is expressed in uniform coordinates
|
||||||
pub struct ElementMotion<'a> {
|
pub struct ElementMotion<'a> {
|
||||||
pub key: ElementKey,
|
pub key: ElementKey,
|
||||||
|
@ -236,7 +250,7 @@ impl Assembly {
|
||||||
let mut gram_to_be = PartialMatrix::new();
|
let mut gram_to_be = PartialMatrix::new();
|
||||||
self.observables.with_untracked(|obsls| {
|
self.observables.with_untracked(|obsls| {
|
||||||
for (_, obs) in obsls {
|
for (_, obs) in obsls {
|
||||||
if obs.role.with_untracked(|role| matches!(role, ObservableRole::Constrain)) {
|
if obs.role_is_valid_constraint_untracked() {
|
||||||
let subjects = obs.subjects;
|
let subjects = obs.subjects;
|
||||||
let row = elts[subjects.0].column_index.unwrap();
|
let row = elts[subjects.0].column_index.unwrap();
|
||||||
let col = elts[subjects.1].column_index.unwrap();
|
let col = elts[subjects.1].column_index.unwrap();
|
||||||
|
|
|
@ -31,14 +31,14 @@ fn ObservableInput(observable: Observable) -> View {
|
||||||
let target: HtmlInputElement = event.target().unwrap().unchecked_into();
|
let target: HtmlInputElement = event.target().unwrap().unchecked_into();
|
||||||
let value = target.value();
|
let value = target.value();
|
||||||
if value.is_empty() {
|
if value.is_empty() {
|
||||||
observable.role.set(Measure);
|
observable.role.set(Measurement);
|
||||||
} else {
|
} else {
|
||||||
match target.value().parse::<f64>() {
|
match target.value().parse::<f64>() {
|
||||||
Ok(desired) => batch(|| {
|
Ok(desired) => batch(|| {
|
||||||
observable.desired.set(desired);
|
observable.desired.set(desired);
|
||||||
observable.role.set(Constrain);
|
observable.role.set(Constraint(true));
|
||||||
}),
|
}),
|
||||||
Err(_) => observable.role.set(Invalid)
|
Err(_) => observable.role.set(Constraint(false))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,9 +60,9 @@ fn ObservableOutlineItem(observable_key: ObservableKey, element_key: ElementKey)
|
||||||
let other_subject_label = assembly.elements.with(|elts| elts[other_subject].label.clone());
|
let other_subject_label = assembly.elements.with(|elts| elts[other_subject].label.clone());
|
||||||
let class = observable.role.map(
|
let class = observable.role.map(
|
||||||
|role| match role {
|
|role| match role {
|
||||||
Measure => "observable",
|
Measurement => "observable",
|
||||||
Constrain => "observable constrained",
|
Constraint(true) => "observable valid-constraint",
|
||||||
Invalid => "observable invalid"
|
Constraint(false) => "observable invalid-constraint"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
view! {
|
view! {
|
||||||
|
|
Loading…
Add table
Reference in a new issue