diff --git a/bin/darkwallet/src/app/mod.rs b/bin/darkwallet/src/app/mod.rs index 575e6a23c..cfa9c1496 100644 --- a/bin/darkwallet/src/app/mod.rs +++ b/bin/darkwallet/src/app/mod.rs @@ -168,8 +168,8 @@ impl App { Window::new(me, self.render_api.clone(), self.event_pub.clone(), self.ex.clone()) }) .await; - self.sg_root.link(window.clone()); - schema::make_test(&self, window).await; + self.sg_root.clone().link(window.clone()); + schema::make(&self, window).await; debug!(target: "app", "Schema loaded"); diff --git a/bin/darkwallet/src/app/schema.rs b/bin/darkwallet/src/app/schema.rs index d3d888e25..33c76e9c1 100644 --- a/bin/darkwallet/src/app/schema.rs +++ b/bin/darkwallet/src/app/schema.rs @@ -125,7 +125,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { ); let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create button bg let node = create_vector_art("btnbg"); @@ -157,7 +157,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { let shape = VectorShape { verts, indices }; let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create the button let node = create_button("btn"); @@ -174,7 +174,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { //node.register("click", slot_click).unwrap(); let node = node.setup(|me| Button::new(me, app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create another mesh let node = create_vector_art("box"); @@ -205,7 +205,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { let shape = VectorShape { verts, indices }; let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Debugging tool let node = create_vector_art("debugtool"); @@ -235,7 +235,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { ); let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create KING GNU! let node = create_image("king"); @@ -247,7 +247,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { node.set_property_str(Role::App, "path", KING_PATH).unwrap(); node.set_property_u32(Role::App, "z_index", 1).unwrap(); let node = node.setup(|me| Image::new(me, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create some text let node = create_text("label"); @@ -278,11 +278,12 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // Text edit let node = create_editbox("editz"); node.set_property_bool(Role::App, "is_active", true).unwrap(); + node.set_property_bool(Role::App, "is_focused", true).unwrap(); let prop = node.get_property("rect").unwrap(); prop.set_f32(Role::App, 0, 150.).unwrap(); prop.set_f32(Role::App, 1, 150.).unwrap(); @@ -368,7 +369,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // ChatView let node = create_chatview("chatty"); @@ -452,7 +453,7 @@ pub(super) async fn make_test(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); } pub(super) async fn make(app: &App, window: SceneNodePtr) { @@ -498,7 +499,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ); let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create the toolbar bg let node = create_vector_art("toolbar_bg"); @@ -520,7 +521,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create some text let node = create_text("channel_label"); @@ -552,7 +553,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // ChatView let node = create_chatview("chatty"); @@ -642,7 +643,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // Create the editbox bg let node = create_vector_art("editbox_bg"); @@ -678,7 +679,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ); let node = node.setup(|me| VectorArt::new(me, shape, app.render_api.clone(), app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); // Create some text let node = create_text("send_label"); @@ -711,7 +712,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // Text edit let node = create_editbox("editz"); @@ -795,7 +796,7 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { ) }) .await; - layer_node.link(node); + layer_node.clone().link(node); // Create the send button let node = create_button("send_btn"); @@ -809,5 +810,5 @@ pub(super) async fn make(app: &App, window: SceneNodePtr) { prop.set_f32(Role::App, 3, EDITCHAT_HEIGHT).unwrap(); let node = node.setup(|me| Button::new(me, app.ex.clone())).await; - layer_node.link(node); + layer_node.clone().link(node); } diff --git a/bin/darkwallet/src/main.rs b/bin/darkwallet/src/main.rs index 19d163b66..027264adc 100644 --- a/bin/darkwallet/src/main.rs +++ b/bin/darkwallet/src/main.rs @@ -142,7 +142,6 @@ fn main() { let cv_started = app.is_started.clone(); let sg_root = app.sg_root.clone(); let ex2 = ex.clone(); - /* let darkirc_task = ex.spawn(async move { cv_started.wait().await; let darkirc_evgr = LocalDarkIRC::new(sg_root.clone(), ex2.clone()).await.unwrap(); @@ -152,7 +151,6 @@ fn main() { } }); async_runtime.push_task(darkirc_task); - */ /* // Nice to see which events exist diff --git a/bin/darkwallet/src/scene.rs b/bin/darkwallet/src/scene.rs index 2871e34a5..3caf4109f 100644 --- a/bin/darkwallet/src/scene.rs +++ b/bin/darkwallet/src/scene.rs @@ -160,10 +160,10 @@ impl SceneNode { self_ } - pub fn link(&self, child: SceneNodePtr) { + pub fn link(self: Arc, child: SceneNodePtr) { let mut childs_parent = child.parent.write().unwrap(); assert!(childs_parent.is_none()); - *childs_parent = Some(Arc::downgrade(&child)); + *childs_parent = Some(Arc::downgrade(&self)); drop(childs_parent); let mut children = self.children.write().unwrap(); @@ -349,11 +349,32 @@ impl SceneNode { let method_sub = method.pubsub.clone().subscribe(); Ok(method_sub) } + + pub fn get_full_path(&self) -> Option { + if self.typ == SceneNodeType::Root { + return Some("/".to_string()) + } + + let mut self_name = self.name.clone(); + + let parent = self.parent.read().unwrap().clone()?; + let Some(parent) = parent.upgrade() else { return None }; + + let parent_path = parent.get_full_path()?; + if parent_path == "/" { + return Some(format!("/{self_name}")) + } + Some(format!("{parent_path}/{self_name}")) + } } impl std::fmt::Debug for SceneNode { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "'{}':{}", self.name, self.id) + if let Some(path) = self.get_full_path() { + write!(f, "{path}") + } else { + write!(f, "{}:{}", self.name, self.id) + } } } diff --git a/bin/darkwallet/src/ui/chatview/mod.rs b/bin/darkwallet/src/ui/chatview/mod.rs index dc068a03b..9c6722ea3 100644 --- a/bin/darkwallet/src/ui/chatview/mod.rs +++ b/bin/darkwallet/src/ui/chatview/mod.rs @@ -741,15 +741,17 @@ impl UIObject for ChatView { KeyCode::PageUp => { let scroll = self.scroll.get() + 200.; self.scrollview(scroll).await; + return true } KeyCode::PageDown => { let scroll = self.scroll.get() - 200.; self.scrollview(scroll).await; + return true } _ => {} } - true + false } async fn handle_mouse_btn_down(&self, btn: MouseButton, mouse_pos: Point) -> bool { diff --git a/bin/darkwallet/src/ui/editbox.rs b/bin/darkwallet/src/ui/editbox.rs index f3e97a92d..7f088c913 100644 --- a/bin/darkwallet/src/ui/editbox.rs +++ b/bin/darkwallet/src/ui/editbox.rs @@ -110,7 +110,6 @@ impl PressedKeysSmoothRepeat { /* fn key_up(&mut self, key: &PressedKey) { //debug!(target: "PressedKeysSmoothRepeat", "key_up({:?})", key); - println!("{:?}", self.pressed_keys.keys()); assert!(self.pressed_keys.contains_key(key)); self.pressed_keys.remove(key).expect("key was pressed"); } diff --git a/bin/darkwallet/src/ui/layer.rs b/bin/darkwallet/src/ui/layer.rs index f7fbf176d..772c6643f 100644 --- a/bin/darkwallet/src/ui/layer.rs +++ b/bin/darkwallet/src/ui/layer.rs @@ -184,6 +184,7 @@ impl UIObject for Layer { for child in self.get_children() { let obj = get_ui_object3(&child); if obj.handle_key_down(key, mods, repeat).await { + //debug!(target: "layer", "handle_key_down({key:?}, {mods:?}, {repeat}) swallowed by {child:?}"); return true } }