Class: Glimmer::Gladiator::FileExplorerTree

Inherits:
Object
  • Object
show all
Includes:
UI::CustomWidget
Defined in:
lib/views/glimmer/gladiator/file_explorer_tree.rb

Instance Method Summary collapse

Instance Method Details

#add_new_directory_to_selected_tree_itemObject



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 = swt_widget.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.expand_path(::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
  swt_widget.showItem(new_tree_item)
  rename_tree_item(new_tree_item)
end

#add_new_file_to_selected_tree_itemObject



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 = swt_widget.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.expand_path(::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
  swt_widget.showItem(new_tree_item)
  rename_tree_item(new_tree_item, true)
end

#current_text_editorObject



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
  swt_widget.showItem(parent_tree_item)
  parent_tree_item.setExpanded(true)
rescue => e
  puts e.full_message
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_dirObject



113
114
115
# File 'lib/views/glimmer/gladiator/file_explorer_tree.rb', line 113

def project_dir
  gladiator.project_dir
end

#rename_selected_tree_itemObject



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 = swt_widget.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')&.text_widget&.setFocus
          end
          async_exec {
            swt_widget.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_itemObject



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 }
  swt_widget.setSelection(tree_items_to_select)
end