mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-03 07:04:34 +00:00
C++: add on_* funciton to connect to signals
This commit is contained in:
parent
a4efac920a
commit
b2a1a72450
2 changed files with 24 additions and 9 deletions
|
@ -5,16 +5,14 @@ int main()
|
||||||
{
|
{
|
||||||
static Hello component;
|
static Hello component;
|
||||||
|
|
||||||
component.foobar.set_handler([](auto...) { std::cout << "Hello from C++" << std::endl; });
|
component.on_foobar([](auto...) { std::cout << "Hello from C++" << std::endl; });
|
||||||
|
|
||||||
component.plus_clicked.set_handler([]() {
|
component.on_plus_clicked([]() {
|
||||||
auto &counter = component.counter;
|
component.set_counter(component.get_counter() + 1);
|
||||||
counter.set(counter.get() + 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
component.minus_clicked.set_handler([]() {
|
component.on_minus_clicked([]() {
|
||||||
auto &counter = component.counter;
|
component.set_counter(component.get_counter() - 1);
|
||||||
counter.set(counter.get() - 1);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
sixtyfps::ComponentWindow window;
|
sixtyfps::ComponentWindow window;
|
||||||
|
|
|
@ -97,11 +97,16 @@ mod cpp_ast {
|
||||||
/// The list of statement instead the function. When None, this is just a function
|
/// The list of statement instead the function. When None, this is just a function
|
||||||
/// declaration without the definition
|
/// declaration without the definition
|
||||||
pub statements: Option<Vec<String>>,
|
pub statements: Option<Vec<String>>,
|
||||||
|
/// What's inside template<...> if any
|
||||||
|
pub template_parameters: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Function {
|
impl Display for Function {
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
|
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
|
||||||
indent(f)?;
|
indent(f)?;
|
||||||
|
if let Some(tpl) = &self.template_parameters {
|
||||||
|
write!(f, "template<{}> ", tpl)?;
|
||||||
|
}
|
||||||
if self.is_static {
|
if self.is_static {
|
||||||
write!(f, "static ")?;
|
write!(f, "static ")?;
|
||||||
}
|
}
|
||||||
|
@ -428,8 +433,7 @@ fn generate_component(
|
||||||
for (cpp_name, property_decl) in component.root_element.borrow().property_declarations.iter() {
|
for (cpp_name, property_decl) in component.root_element.borrow().property_declarations.iter() {
|
||||||
let ty = if property_decl.property_type == Type::Signal {
|
let ty = if property_decl.property_type == Type::Signal {
|
||||||
if property_decl.expose_in_public_api && is_root {
|
if property_decl.expose_in_public_api && is_root {
|
||||||
let signal_emitter: Vec<String> = vec![format!("{}.emit();", cpp_name)];
|
let signal_emitter = vec![format!("{}.emit();", cpp_name)];
|
||||||
|
|
||||||
component_struct.members.push((
|
component_struct.members.push((
|
||||||
Access::Public,
|
Access::Public,
|
||||||
Declaration::Function(Function {
|
Declaration::Function(Function {
|
||||||
|
@ -439,6 +443,19 @@ fn generate_component(
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}),
|
}),
|
||||||
));
|
));
|
||||||
|
component_struct.members.push((
|
||||||
|
Access::Public,
|
||||||
|
Declaration::Function(Function {
|
||||||
|
name: format!("on_{}", cpp_name),
|
||||||
|
template_parameters: Some("typename Functor".into()),
|
||||||
|
signature: "(Functor && signal_handler)".into(),
|
||||||
|
statements: Some(vec![format!(
|
||||||
|
"{}.set_handler(std::forward<Functor>(signal_handler));",
|
||||||
|
cpp_name
|
||||||
|
)]),
|
||||||
|
..Default::default()
|
||||||
|
}),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
"sixtyfps::Signal".into()
|
"sixtyfps::Signal".into()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue