Class: Redcar::Project
- Inherits:
-
Object
show all
- Defined in:
- plugins/project/lib/project.rb,
plugins/project/lib/project/recent.rb,
plugins/project/lib/project/manager.rb,
plugins/project/lib/project/commands.rb,
plugins/project/lib/project/file_list.rb,
plugins/project/lib/project/dir_mirror.rb,
plugins/project/lib/project/sub_project.rb,
plugins/project/lib/project/file_mirror.rb,
plugins/project/lib/project/drb_service.rb,
plugins/project/lib/project/support/trash.rb,
plugins/project/lib/project/dir_controller.rb,
plugins/project/spec/project/dir_mirror_spec.rb,
plugins/project/lib/project/find_file_dialog.rb,
plugins/project/lib/project/local_filesystem.rb,
plugins/project/spec/project/file_mirror_spec.rb,
plugins/project/lib/project/find_recent_dialog.rb,
plugins/project/spec/project/adapters/remote_spec.rb,
plugins/project_search/lib/project_search/project.rb,
plugins/project/lib/project/project_tree_controller.rb,
plugins/project/spec/project/adapters/remote_protocols/ftp_spec.rb,
plugins/project/spec/project/adapters/remote_protocols/sftp_spec.rb
Defined Under Namespace
Modules: LocalFilesystem, Trash
Classes: DirController, DirMirror, DirectoryOpenCommand, DrbService, FileList, FileMirror, FileReloadCommand, FindFileCommand, FindFileDialog, FindRecentCommand, FindRecentDialog, Manager, OpenCommand, OpenDirectoryInCommandLineCommand, OpenDirectoryInExplorerCommand, OpenFileCommand, ProjectTreeController, Recent, RefreshDirectoryCommand, RevealInProjectCommand, SaveAllFilesCommand, SaveFileAsCommand, SaveFileCommand, SubProject, ToggleRevealInProject
Constant Summary
- RECENT_FILES_LENGTH =
20
Instance Attribute Summary (collapse)
Class Method Summary
(collapse)
Instance Method Summary
(collapse)
Constructor Details
- (Project) initialize(path)
A new instance of Project
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'plugins/project/lib/project.rb', line 33
def initialize(path)
@path = File.expand_path(path)
@listeners ||= {}
dir_mirror = Project::DirMirror.new(@path)
if dir_mirror.exists?
@tree = Tree.new(dir_mirror, Project::DirController.new)
@window = nil
file_list_resource.compute
else
raise "#{path} doesn't seem to exist"
end
end
|
Instance Attribute Details
- (Object) listeners
Returns the value of attribute listeners
31
32
33
|
# File 'plugins/project/lib/project.rb', line 31
def listeners
@listeners
end
|
Returns the value of attribute path
30
31
32
|
# File 'plugins/project/lib/project.rb', line 30
def path
@path
end
|
Returns the value of attribute tree
30
31
32
|
# File 'plugins/project/lib/project.rb', line 30
def tree
@tree
end
|
Returns the value of attribute window
30
31
32
|
# File 'plugins/project/lib/project.rb', line 30
def window
@window
end
|
Class Method Details
+ (Object) window_projects
26
27
28
|
# File 'plugins/project/lib/project.rb', line 26
def self.window_projects
@window_projects ||= {}
end
|
Instance Method Details
- (Object) add_to_recent_files(new_file)
193
194
195
196
197
198
199
200
201
202
|
# File 'plugins/project/lib/project.rb', line 193
def add_to_recent_files(new_file)
new_file = File.expand_path(new_file)
if recent_files.include?(new_file)
recent_files.delete(new_file)
end
recent_files << new_file
if recent_files.length > RECENT_FILES_LENGTH
recent_files.shift
end
end
|
- (Object) all_files
221
222
223
|
# File 'plugins/project/lib/project.rb', line 221
def all_files
file_list.all_files
end
|
- (Object) attach_listeners
139
140
141
142
|
# File 'plugins/project/lib/project.rb', line 139
def attach_listeners
attach_notebook_listeners
window.treebook.add_listener(:tree_removed, &method(:tree_removed))
end
|
- (Object) attach_notebook_listeners
144
145
146
147
148
149
150
151
152
153
|
# File 'plugins/project/lib/project.rb', line 144
def attach_notebook_listeners
window.add_listener(:notebook_focussed, &method(:notebook_focussed))
window.add_listener(:notebook_removed, &method(:notebook_closed))
window.add_listener(:new_notebook, &method(:notebook_added))
if notebooks = window.notebooks
notebooks.each do |nb|
notebook_added(nb)
end
end
end
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'plugins/project/lib/project.rb', line 120
def close
return unless @window
this_window = window
@window = nil
this_window.treebook.remove_tree(@tree)
Project.window_projects.delete(this_window)
this_window.title = Window::DEFAULT_TITLE
Manager.open_project_sensitivity.recompute
Redcar.plugin_manager.objects_implementing(:project_closed).each do |i|
i.project_closed(self,this_window)
end
listeners = {}
unlock if locked?
end
|
- (Object) config_dir
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'plugins/project/lib/project.rb', line 46
def config_dir
if Redcar.platform == :windows && Redcar.environment != :test
dir = File.join(path, "._redcar")
else
dir = File.join(path, ".redcar")
end
unless File.directory? dir
FileUtils.mkdir_p(dir)
if Redcar.platform == :windows
system("attrib.exe +H \"#{dir}") end
end
dir
end
|
- (Object) config_files(glob)
249
250
251
252
|
# File 'plugins/project/lib/project.rb', line 249
def config_files(glob)
file_glob = File.join("{#{config_dir},#{Redcar.user_dir}}", glob)
Dir[file_glob]
end
|
- (Boolean) contains_path?(path)
182
183
184
|
# File 'plugins/project/lib/project.rb', line 182
def contains_path?(path)
File.expand_path(path) =~ /^#{Regexp.escape(@path)}($|\/|\\)/
end
|
- (Object) file_list
204
205
206
|
# File 'plugins/project/lib/project.rb', line 204
def file_list
@file_list ||= FileList.new(path)
end
|
- (Object) file_list_resource
208
209
210
211
212
213
|
# File 'plugins/project/lib/project.rb', line 208
def file_list_resource
@resource ||= Resource.new("refresh file list for #{@path}") do
file_list.update
send_refresh_to_plugins
end
end
|
- (Object) gained_focus
240
241
242
243
|
# File 'plugins/project/lib/project.rb', line 240
def gained_focus
refresh
@lost_application_focus = nil
end
|
- (Object) home_dir
245
246
247
|
# File 'plugins/project/lib/project.rb', line 245
def home_dir
@path
end
|
65
66
67
|
# File 'plugins/project/lib/project.rb', line 65
def inspect
"<Project #{path}>"
end
|
88
89
90
91
92
|
# File 'plugins/project/lib/project.rb', line 88
def lock
File.open(lock_filename, "w") do |fout|
fout.puts "#{$$}: Locked by #{$$} at #{Time.now}"
end
end
|
- (Object) lock_filename
94
95
96
|
# File 'plugins/project/lib/project.rb', line 94
def lock_filename
File.join(config_dir, "redcar.lock")
end
|
- (Boolean) locked?
98
99
100
|
# File 'plugins/project/lib/project.rb', line 98
def locked?
File.exist?(lock_filename)
end
|
- (Boolean) locked_by_this_process?
114
115
116
117
118
|
# File 'plugins/project/lib/project.rb', line 114
def locked_by_this_process?
return false unless locked?
locking_pid = File.read(lock_filename).split(":").first
locking_pid == $$.to_s
end
|
- (Object) lost_application_focus
236
237
238
|
# File 'plugins/project/lib/project.rb', line 236
def lost_application_focus
@lost_application_focus = true
end
|
- (Object) notebook_added(notebook)
161
162
163
164
165
|
# File 'plugins/project/lib/project.rb', line 161
def notebook_added(notebook)
@listeners.merge!(notebook => notebook.add_listener(:tab_focussed) do |tab|
RevealInProjectCommand.new.run if tree and window and Project::Manager.reveal_file?(self)
end)
end
|
- (Object) notebook_closed(notebook)
167
168
169
|
# File 'plugins/project/lib/project.rb', line 167
def notebook_closed(notebook)
@listeners.delete(notebook)
end
|
- (Object) notebook_focussed(notebook)
155
156
157
158
159
|
# File 'plugins/project/lib/project.rb', line 155
def notebook_focussed(notebook)
if notebook.focussed_tab and tree and Project::Manager.reveal_file?(self)
RevealInProjectCommand.new.run
end
end
|
- (Object) open(win)
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'plugins/project/lib/project.rb', line 69
def open(win)
lock
@window = win
if current_project = Project.window_projects[window]
current_project.close
end
window.treebook.add_tree(@tree)
attach_listeners
window.title = File.basename(@tree.tree_mirror.path)
Manager.open_project_sensitivity.recompute
Project.window_projects[window] = self
Redcar.plugin_manager.objects_implementing(:project_loaded).each do |i|
i.project_loaded(self)
end
Recent.store_path(path)
Manager.storage['last_open_dir'] = path
self
end
|
- (Boolean) ready?
61
62
63
|
# File 'plugins/project/lib/project.rb', line 61
def ready?
@tree && @path
end
|
- (Object) recent_files
A list of files previously opened in this session for this project
@return [Array<String>] an array of paths
189
190
191
|
# File 'plugins/project/lib/project.rb', line 189
def recent_files
@recent_files ||= []
end
|
Refresh the DirMirror Tree for the given Window, if there is one.
177
178
179
180
|
# File 'plugins/project/lib/project.rb', line 177
def refresh
@tree.refresh
file_list_resource.compute
end
|
- (Object) refresh_modified_file(path)
215
216
217
218
219
|
# File 'plugins/project/lib/project.rb', line 215
def refresh_modified_file(path)
file_list.update(path)
@tree.refresh
send_refresh_to_plugins
end
|
- (Object) search(query, options)
254
255
256
|
# File 'plugins/project/lib/project.rb', line 254
def search(query)
ProjectSearch::WordSearch.new(self, query, false, 0)
end
|
- (Object) send_refresh_to_plugins
225
226
227
228
229
230
231
232
233
234
|
# File 'plugins/project/lib/project.rb', line 225
def send_refresh_to_plugins
Redcar.plugin_manager.objects_implementing(:project_refresh_task_type).each do |object|
task = object.project_refresh_task_type.new(self)
if Redcar::Resource.compute_synchronously
task.execute
else
Redcar::Resource.task_queue.submit(task)
end
end
end
|
- (Object) storage(name)
135
136
137
|
# File 'plugins/project/lib/project.rb', line 135
def storage(name)
Redcar::Plugin::BaseStorage.new(File.join(config_dir, "storage"), name)
end
|
- (Object) tree_removed(tree)
171
172
173
|
# File 'plugins/project/lib/project.rb', line 171
def tree_removed(tree)
close if tree == @tree
end
|
102
103
104
105
106
107
108
109
110
111
112
|
# File 'plugins/project/lib/project.rb', line 102
def unlock
if locked?
if locked_by_this_process?
FileUtils.rm_rf(lock_filename)
else
raise "locked by another process"
end
else
raise "project not locked"
end
end
|