1    type Panel @abstract @mut =
2        inherit Container
3    
4        val items @dst = obs/List<Control>.new
5        items.bind { _ item -> item.origin = global_position } {} |> push_token
6    
7        def Container.get_slice = items.as_safe_slice
8    
9        do
10           let f (item : Control) =
11               assert item.parent.is_none
12               item.parent = self
13   
14           for item in items do
15               f item
16   
17           items.subscribe
18               { _ item -> f item }
19               { _ item -> assert item.parent.unwrap == self
20                           item.parent = None }
21           |> push_token
22