Struct slint_interpreter::ComponentInstance
source · [−]#[repr(C)]pub struct ComponentInstance { /* private fields */ }
Expand description
This represent an instance of a dynamic component
You can create an instance with the ComponentDefinition::create
function.
Properties and callback can be accessed using the associated functions.
An instance can be put on screen with the ComponentInstance::run
function.
Implementations
sourceimpl ComponentInstance
impl ComponentInstance
sourcepub fn definition(&self) -> ComponentDefinition
pub fn definition(&self) -> ComponentDefinition
Return the ComponentDefinition
that was used to create this instance.
sourcepub fn get_property(&self, name: &str) -> Result<Value, GetPropertyError>
pub fn get_property(&self, name: &str) -> Result<Value, GetPropertyError>
Return the value for a public property of this component.
Examples
use slint_interpreter::{ComponentDefinition, ComponentCompiler, Value, SharedString};
let code = r#"
MyWin := Window {
property <int> my_property: 42;
}
"#;
let mut compiler = ComponentCompiler::default();
let definition = spin_on::spin_on(
compiler.build_from_source(code.into(), Default::default()));
assert!(compiler.diagnostics().is_empty(), "{:?}", compiler.diagnostics());
let instance = definition.unwrap().create();
assert_eq!(instance.get_property("my_property").unwrap(), Value::from(42));
sourcepub fn set_property(
&self,
name: &str,
value: Value
) -> Result<(), SetPropertyError>
pub fn set_property(
&self,
name: &str,
value: Value
) -> Result<(), SetPropertyError>
Set the value for a public property of this component
sourcepub fn set_callback(
&self,
name: &str,
callback: impl Fn(&[Value]) -> Value + 'static
) -> Result<(), SetCallbackError>
pub fn set_callback(
&self,
name: &str,
callback: impl Fn(&[Value]) -> Value + 'static
) -> Result<(), SetCallbackError>
Set a handler for the callback with the given name. A callback with that name must be defined in the document otherwise an error will be returned.
Note: Since the ComponentInstance
holds the handler, the handler itself should not
contain a strong reference to the instance. So if you need to capture the instance,
you should use Self::as_weak
to create a weak reference.
Examples
use slint_interpreter::{ComponentDefinition, ComponentCompiler, Value, SharedString, ComponentHandle};
use core::convert::TryInto;
let code = r#"
MyWin := Window {
callback foo(int) -> int;
property <int> my_prop: 12;
}
"#;
let definition = spin_on::spin_on(
ComponentCompiler::default().build_from_source(code.into(), Default::default()));
let instance = definition.unwrap().create();
let instance_weak = instance.as_weak();
instance.set_callback("foo", move |args: &[Value]| -> Value {
let arg: u32 = args[0].clone().try_into().unwrap();
let my_prop = instance_weak.unwrap().get_property("my_prop").unwrap();
let my_prop : u32 = my_prop.try_into().unwrap();
Value::from(arg + my_prop)
}).unwrap();
let res = instance.invoke_callback("foo", &[Value::from(500)]).unwrap();
assert_eq!(res, Value::from(500+12));
sourcepub fn invoke_callback(
&self,
name: &str,
args: &[Value]
) -> Result<Value, InvokeCallbackError>
pub fn invoke_callback(
&self,
name: &str,
args: &[Value]
) -> Result<Value, InvokeCallbackError>
Call the given callback with the arguments
Examples
See the documentation of Self::set_callback
for an example
sourcepub fn get_global_property(
&self,
global: &str,
property: &str
) -> Result<Value, GetPropertyError>
pub fn get_global_property(
&self,
global: &str,
property: &str
) -> Result<Value, GetPropertyError>
Return the value for a property within an exported global singleton used by this component.
The global
parameter is the exported name of the global singleton. The property
argument
is the name of the property
Examples
use slint_interpreter::{ComponentDefinition, ComponentCompiler, Value, SharedString};
let code = r#"
global Glob := {
property <int> my_property: 42;
}
export { Glob as TheGlobal }
MyWin := Window {
}
"#;
let mut compiler = ComponentCompiler::default();
let definition = spin_on::spin_on(
compiler.build_from_source(code.into(), Default::default()));
assert!(compiler.diagnostics().is_empty(), "{:?}", compiler.diagnostics());
let instance = definition.unwrap().create();
assert_eq!(instance.get_global_property("TheGlobal", "my_property").unwrap(), Value::from(42));
sourcepub fn set_global_property(
&self,
global: &str,
property: &str,
value: Value
) -> Result<(), SetPropertyError>
pub fn set_global_property(
&self,
global: &str,
property: &str,
value: Value
) -> Result<(), SetPropertyError>
Set the value for a property within an exported global singleton used by this component.
sourcepub fn set_global_callback(
&self,
global: &str,
name: &str,
callback: impl Fn(&[Value]) -> Value + 'static
) -> Result<(), SetCallbackError>
pub fn set_global_callback(
&self,
global: &str,
name: &str,
callback: impl Fn(&[Value]) -> Value + 'static
) -> Result<(), SetCallbackError>
Set a handler for the callback in the exported global singleton. A callback with that name must be defined in the specified global and the global must be exported from the main document otherwise an error will be returned.
Examples
use slint_interpreter::{ComponentDefinition, ComponentCompiler, Value, SharedString};
use core::convert::TryInto;
let code = r#"
export global Logic := {
callback to_uppercase(string) -> string;
}
MyWin := Window {
property <string> hello: Logic.to_uppercase("world");
}
"#;
let definition = spin_on::spin_on(
ComponentCompiler::default().build_from_source(code.into(), Default::default()));
let instance = definition.unwrap().create();
instance.set_global_callback("Logic", "to_uppercase", |args: &[Value]| -> Value {
let arg: SharedString = args[0].clone().try_into().unwrap();
Value::from(SharedString::from(arg.to_uppercase()))
}).unwrap();
let res = instance.get_property("hello").unwrap();
assert_eq!(res, Value::from(SharedString::from("WORLD")));
let abc = instance.invoke_global_callback("Logic", "to_uppercase", &[
SharedString::from("abc").into()
]).unwrap();
assert_eq!(abc, Value::from(SharedString::from("ABC")));
sourcepub fn invoke_global_callback(
&self,
global: &str,
callback_name: &str,
args: &[Value]
) -> Result<Value, InvokeCallbackError>
pub fn invoke_global_callback(
&self,
global: &str,
callback_name: &str,
args: &[Value]
) -> Result<Value, InvokeCallbackError>
Call the given callback within a global singleton with the arguments
Examples
See the documentation of Self::set_global_callback
for an example
Trait Implementations
sourceimpl ComponentHandle for ComponentInstance
impl ComponentHandle for ComponentInstance
sourcefn clone_strong(&self) -> Self
fn clone_strong(&self) -> Self
Returns a clone of this handle that’s a strong reference.
sourcefn show(&self)
fn show(&self)
Marks the window of this component to be shown on the screen. This registers
the window with the windowing system. In order to react to events from the windowing system,
such as draw requests or mouse/touch input, it is still necessary to spin the event loop,
using crate::run_event_loop
. Read more
sourcefn hide(&self)
fn hide(&self)
Marks the window of this component to be hidden on the screen. This de-registers the window from the windowing system and it will not receive any further events. Read more
sourcefn run(&self)
fn run(&self)
This is a convenience function that first calls Self::show
, followed by crate::run_event_loop()
and Self::hide
. Read more
sourceimpl From<ComponentInstance> for VRc<ComponentVTable, ErasedComponentBox>
impl From<ComponentInstance> for VRc<ComponentVTable, ErasedComponentBox>
sourcefn from(value: ComponentInstance) -> Self
fn from(value: ComponentInstance) -> Self
Performs the conversion.
Auto Trait Implementations
impl !RefUnwindSafe for ComponentInstance
impl !Send for ComponentInstance
impl !Sync for ComponentInstance
impl Unpin for ComponentInstance
impl !UnwindSafe for ComponentInstance
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more