1    let get_name (s : String) (items : obs/List<FileItem>) =
2        let are_equal (t : String) (u : String) =
3            if t == u
4            then true
5            else t.ends_with ".kd" && t.drop_last 3 == u
6    
7        if not items.as_slice.any { are_equal _.name s } then
8            return s
9        else
10           let mut index = 1
11           repeat
12               let name = "${s}_$index"
13               if not items.as_slice.any { are_equal _.name name } then
14                   return name
15   
16               index += 1
17   
18   type Editor
19       def create self (directory : bool) =
20           let tree = self.tree
21           let (parent, index) = case tree.selected_item.map { _ as FileItem } of
22               None -> (self.data, tree.data.items.size)
23               Some selected_item ->
24                   if selected_item.is_crate then
25                       let index = selected_item.items.size
26                       (selected_item, index)
27                   else
28                       let parent = selected_item.parent.unwrap
29                       let index = parent.items.index_of selected_item + 1
30                       (parent, index)
31   
32           let s = if directory then "directory" else "file"
33           let mut name = get_name s parent.items.as_readonly
34           if not directory then
35               name += ".kd"
36   
37           assert parent.path.is_not_empty
38           let directory_path = parent.path
39           let path = "$directory_path/$name"
40           let item = FileItem
41               is_root = false
42               =parent =name =path =directory_path
43               is_directory = directory
44               is_open = directory
45               foreground = Colors.tree_foreground
46   
47           parent.items.add index item
48           if not parent.is_open then
49               parent.is_open = true
50   
51           tree.selected_item = item
52           self.changed.add item
53                        add parent
54