Class: Glimmer::Gladiator::FileExplorerTree
- Inherits:
-
Object
- Object
- Glimmer::Gladiator::FileExplorerTree
- Includes:
- UI::CustomWidget
- Defined in:
- lib/views/glimmer/gladiator/file_explorer_tree.rb
Instance Method Summary collapse
- #add_new_directory_to_selected_tree_item ⇒ Object
- #add_new_file_to_selected_tree_item ⇒ Object
- #current_text_editor ⇒ Object
- #delete_tree_item(tree_item) ⇒ Object
- #extract_tree_item_path(tree_item) ⇒ Object
- #project_dir ⇒ Object
- #rename_selected_tree_item ⇒ Object
- #rename_tree_item(tree_item, new_file = false) ⇒ Object
- #select_tree_item ⇒ Object
Instance Method Details
#add_new_directory_to_selected_tree_item ⇒ Object
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 162 def add_new_directory_to_selected_tree_item project_dir.pause_refresh tree_item = .getSelection.first directory_path = extract_tree_item_path(tree_item) return if directory_path.nil? if !::Dir.exist?(directory_path) tree_item = tree_item.getParentItem directory_path = ::File.dirname(directory_path) end new_directory_path = ::File.(::File.join(directory_path, 'new_directory')) FileUtils.mkdir_p(new_directory_path) project_dir.refresh(async: false, force: true) new_tree_item = body_root.depth_first_search {|ti| ti.getData.path == new_directory_path}.first .showItem(new_tree_item) rename_tree_item(new_tree_item) end |
#add_new_file_to_selected_tree_item ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 179 def add_new_file_to_selected_tree_item project_dir.pause_refresh tree_item = .getSelection.first directory_path = extract_tree_item_path(tree_item) if !::Dir.exist?(directory_path) tree_item = tree_item.getParentItem directory_path = ::File.dirname(directory_path) end new_file_path = ::File.(::File.join(directory_path, 'new_file')) FileUtils.touch(new_file_path) # TODO look into refreshing only the parent directory to avoid slowdown project_dir.refresh(async: false, force: true) new_tree_item = body_root.depth_first_search {|ti| ti.getData.path == new_file_path}.first .showItem(new_tree_item) rename_tree_item(new_tree_item, true) end |
#current_text_editor ⇒ Object
117 118 119 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 117 def current_text_editor gladiator.current_text_editor end |
#delete_tree_item(tree_item) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 136 def delete_tree_item(tree_item) return if tree_item.nil? file = tree_item.getData parent_path = ::File.dirname(file.path) if file.is_a?(Gladiator::Dir) file_paths = file.all_children.select {|f| f.is_a?(Gladiator::File)}.map(&:path) file.remove_all_observers else file_paths = [file.path] end file_paths.each do |file_path| found_tab_item = gladiator.find_tab_item(file_path) if found_tab_item project_dir.selected_child_path_history.delete(found_tab_item.getData('file_path')) found_tab_item.getData('proxy')&.dispose end end file.remove! # TODO consider supporting command undo/redo project_dir.refresh(async: false) parent_tree_item = body_root.depth_first_search {|ti| ti.getData.path == parent_path}.first .showItem(parent_tree_item) parent_tree_item.setExpanded(true) rescue => e puts e. end |
#extract_tree_item_path(tree_item) ⇒ Object
121 122 123 124 125 126 127 128 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 121 def extract_tree_item_path(tree_item) return if tree_item.nil? if tree_item.getParentItem ::File.join(extract_tree_item_path(tree_item.getParentItem), tree_item.getText) else project_dir.path end end |
#project_dir ⇒ Object
113 114 115 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 113 def project_dir gladiator.project_dir end |
#rename_selected_tree_item ⇒ Object
196 197 198 199 200 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 196 def rename_selected_tree_item project_dir.pause_refresh tree_item = .getSelection.first rename_tree_item(tree_item) end |
#rename_tree_item(tree_item, new_file = false) ⇒ Object
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 202 def rename_tree_item(tree_item, new_file = false) original_file = tree_item.getData current_file = project_dir.selected_child_path == original_file.path found_tab_item = gladiator.find_tab_item(original_file.path) found_text_editor = found_tab_item&.getData('text_editor') body_root.edit_tree_item( tree_item, after_write: -> (edited_tree_item) { file = edited_tree_item.getData file_path = file.path file.name if ::File.file?(file_path) if new_file project_dir.selected_child_path = file_path else found_text_editor&.file = file found_tab_item&.setData('file', file) found_tab_item&.setData('file_path', file.path) found_tab_item&.setText(file.name) if current_file project_dir.selected_child_path = file_path else gladiator.selected_tab_item&.getData('text_editor')&.&.setFocus end async_exec { .showItem(edited_tree_item) gladiator.body_root.pack_same_size } end end project_dir.resume_refresh }, after_cancel: -> { project_dir.resume_refresh } ) end |
#select_tree_item ⇒ Object
130 131 132 133 134 |
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 130 def select_tree_item return unless project_dir.selected_child&.name tree_items_to_select = body_root.depth_first_search { |ti| ti.getData.path == project_dir.selected_child.path } .setSelection(tree_items_to_select) end |