Use Arcs for the callbacks
So it becomes possible to reuse one callback for multiple parameters. This will be important for value change notifications.
This commit is contained in:
parent
c883e0000d
commit
44172da94f
|
@ -16,7 +16,9 @@
|
||||||
|
|
||||||
//! Convenience functions for formatting and parsing parameter values in common formats.
|
//! Convenience functions for formatting and parsing parameter values in common formats.
|
||||||
|
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Round an `f32` value to always have a specific number of decimal digits.
|
/// Round an `f32` value to always have a specific number of decimal digits.
|
||||||
pub fn f32_rounded(digits: usize) -> Option<Box<dyn Fn(f32) -> String + Send + Sync>> {
|
pub fn f32_rounded(digits: usize) -> Option<Arc<dyn Fn(f32) -> String + Send + Sync>> {
|
||||||
Some(Box::new(move |x| format!("{:.digits$}", x)))
|
Some(Arc::new(move |x| format!("{:.digits$}", x)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub type FloatParam = PlainParam<f32>;
|
pub type FloatParam = PlainParam<f32>;
|
||||||
pub type IntParam = PlainParam<i32>;
|
pub type IntParam = PlainParam<i32>;
|
||||||
|
@ -62,11 +63,11 @@ pub struct PlainParam<T> {
|
||||||
/// The parameter value's unit, added after `value_to_string` if that is set.
|
/// The parameter value's unit, added after `value_to_string` if that is set.
|
||||||
pub unit: &'static str,
|
pub unit: &'static str,
|
||||||
/// Optional custom conversion function from a plain **unnormalized** value to a string.
|
/// Optional custom conversion function from a plain **unnormalized** value to a string.
|
||||||
pub value_to_string: Option<Box<dyn Fn(T) -> String + Send + Sync>>,
|
pub value_to_string: Option<Arc<dyn Fn(T) -> String + Send + Sync>>,
|
||||||
/// Optional custom conversion function from a string to a plain **unnormalized** value. If the
|
/// Optional custom conversion function from a string to a plain **unnormalized** value. If the
|
||||||
/// string cannot be parsed, then this should return a `None`. If this happens while the
|
/// string cannot be parsed, then this should return a `None`. If this happens while the
|
||||||
/// parameter is being updated then the update will be canceled.
|
/// parameter is being updated then the update will be canceled.
|
||||||
pub string_to_value: Option<Box<dyn Fn(&str) -> Option<T> + Send + Sync>>,
|
pub string_to_value: Option<Arc<dyn Fn(&str) -> Option<T> + Send + Sync>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A simple boolean parmaeter.
|
/// A simple boolean parmaeter.
|
||||||
|
@ -77,11 +78,11 @@ pub struct BoolParam {
|
||||||
/// The parameter's human readable display name.
|
/// The parameter's human readable display name.
|
||||||
pub name: &'static str,
|
pub name: &'static str,
|
||||||
/// Optional custom conversion function from a boolean value to a string.
|
/// Optional custom conversion function from a boolean value to a string.
|
||||||
pub value_to_string: Option<Box<dyn Fn(bool) -> String + Send + Sync>>,
|
pub value_to_string: Option<Arc<dyn Fn(bool) -> String + Send + Sync>>,
|
||||||
/// Optional custom conversion function from a string to a boolean value. If the string cannot
|
/// Optional custom conversion function from a string to a boolean value. If the string cannot
|
||||||
/// be parsed, then this should return a `None`. If this happens while the parameter is being
|
/// be parsed, then this should return a `None`. If this happens while the parameter is being
|
||||||
/// updated then the update will be canceled.
|
/// updated then the update will be canceled.
|
||||||
pub string_to_value: Option<Box<dyn Fn(&str) -> Option<bool> + Send + Sync>>,
|
pub string_to_value: Option<Arc<dyn Fn(&str) -> Option<bool> + Send + Sync>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Describes a single parmaetre of any type.
|
/// Describes a single parmaetre of any type.
|
||||||
|
|
Loading…
Reference in a new issue