rustdesk/libs/rust-sciter/examples/fire_event.rs

61 lines
1.6 KiB
Rust
Raw Normal View History

2021-05-23 10:55:19 +08:00
//! Fire event Sciter sample.
#![allow(unused_variables)]
#![allow(non_snake_case)]
extern crate sciter;
use sciter::Element;
use self::sciter::dom::event::*;
use self::sciter::dom::HELEMENT;
use self::sciter::value::Value;
struct FireEvent;
impl sciter::EventHandler for FireEvent {
fn on_event(&mut self, root: HELEMENT, source: HELEMENT, target: HELEMENT, code: BEHAVIOR_EVENTS, phase: PHASE_MASK, reason: EventReason) -> bool {
if phase != PHASE_MASK::BUBBLING {
return false;
}
if code == BEHAVIOR_EVENTS::BUTTON_CLICK {
// `root` points to attached element, usually it is an `<html>`.
let root = Element::from(root).root();
let message = root.find_first("#message").unwrap().expect("div#message not found");
let source = Element::from(source);
println!("our root is {:?}, message is {:?} and source is {:?}", root, message, source);
if let Some(id) = source.get_attribute("id") {
if id == "send" {
// just send a simple event
source.send_event(BEHAVIOR_EVENTS::CHANGE, None, Some(message.as_ptr())).expect("Failed to send event");
return true;
} else if id == "fire" {
// fire event with specified params
let data = Value::from("Rusty param");
source.fire_event(BEHAVIOR_EVENTS::CHANGE, None, Some(message.as_ptr()), false, Some(data)).expect("Failed to fire event");
return true;
}
};
};
false
}
}
fn main() {
let html = include_bytes!("fire_event.htm");
let mut frame = sciter::Window::new();
frame.event_handler(FireEvent);
frame.load_html(html, Some("example://fire_event.htm"));
frame.run_app();
}