1    type Editor
2        def rename self =
3            let tree = self.tree
4            let display = self.app.display
5            let maybe_selected_tree_item = tree.selected_tree_item
6            if maybe_selected_tree_item.is_none then
7                return
8    
9            let selected_tree_item = maybe_selected_tree_item.unwrap
10           let text_box = selected_tree_item.edit
11           let file_item_tab_items = self.file_item_tab_items
12           display.focus = text_box
13           if text_box.on_enter.is_none then
14               assert text_box.on_escape.is_none
15               let margin = selected_tree_item.margin
16               let data = selected_tree_item.data as FileItem
17               text_box.on_enter = { s ->
18                   data.name = s
19                   text_box.is_visible = false
20                   margin.is_visible = true
21                   display.focus = tree
22                   let path = "${data.directory_path}/$s"
23                   data.path = path
24                   if data.is_directory then
25                       update_item_paths data
26                       self.add_all_to_changed data
27                   else
28                       self.changed.add data
29                       if file_item_tab_items.contains data then
30                           let tab_item = file_item_tab_items[data]
31                           tab_item.header = s }
32   
33               text_box.on_escape = { text_box.text = ""
34                                      text_box.is_visible = false
35                                      margin.is_visible = true
36                                      display.focus = tree }
37   
38       let remove_content (directory : FileItem) : Unit =
39           let items = directory.items
40           for item in items do
41               remove_content item
42   
43           items.clear
44           let parent = directory.parent.unwrap
45           directory.path = ""
46                     directory_path = ""
47                     parent = None
48   
49           changed.add directory
50                   add parent
51   
52       def remove =
53           if not app.os_window.is_control_pressed then
54               return
55   
56           let maybe_selected_item = tree.selected_item
57           if maybe_selected_item.is_none then
58               return
59   
60           let selected_item = maybe_selected_item.unwrap as FileItem
61           if selected_item.is_crate then
62               return
63   
64           let parent = selected_item.parent.unwrap
65           let items = parent.items
66           let index = items.index_of selected_item
67           tree.selected_item = None
68           items.remove selected_item
69           let maybe_next_index = if items.size > index then Some index
70                                  else if index > 0 then Some (index - 1)
71                                  else None
72   
73           if maybe_next_index ? Some next_index then
74               tree.selected_item = items[next_index]
75   
76           remove_content selected_item
77