glimmer-cs-gladiator 0.3.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +13 -9
- data/VERSION +1 -1
- data/bin/gladiator_runner.rb +2 -1
- data/lib/glimmer-cs-gladiator.rb +1 -1
- data/lib/models/glimmer/gladiator/command.rb +8 -4
- data/lib/models/glimmer/gladiator/dir.rb +51 -43
- data/lib/models/glimmer/gladiator/file.rb +122 -72
- data/lib/views/glimmer/gladiator.rb +436 -283
- data/lib/views/glimmer/gladiator/text_editor.rb +40 -21
- metadata +4 -4
@@ -14,216 +14,127 @@ module Glimmer
|
|
14
14
|
# Gladiator (Glimmer Editor)
|
15
15
|
class Gladiator
|
16
16
|
include Glimmer::UI::CustomShell
|
17
|
-
|
17
|
+
|
18
|
+
APP_ROOT = ::File.expand_path('../../../..', __FILE__)
|
19
|
+
# TODO make sure COMMAND_KEY doesn't clash on Linux/Windows for CMD+CTRL shortcuts
|
18
20
|
COMMAND_KEY = OS.mac? ? :command : :ctrl
|
19
21
|
|
20
22
|
class << self
|
21
23
|
attr_accessor :drag_and_drop
|
22
24
|
attr_accessor :drag
|
23
25
|
end
|
24
|
-
|
26
|
+
|
25
27
|
## Add options like the following to configure CustomShell by outside consumers
|
26
28
|
#
|
27
29
|
# options :title, :background_color
|
28
30
|
# option :width, 320
|
29
31
|
# option :height, 240
|
32
|
+
option :project_dir_path
|
30
33
|
|
34
|
+
def project_dir
|
35
|
+
@project_dir ||= Dir.new(project_dir_path)
|
36
|
+
end
|
37
|
+
|
38
|
+
attr_reader :find_text, :tab_folder1, :tab_folder2, :filter_text, :rename_in_progress, :line_number_text, :file_tree
|
39
|
+
attr_accessor :split_orientation, :current_tab_item, :current_tab_folder, :current_text_editor
|
40
|
+
|
31
41
|
## Uncomment before_body block to pre-initialize variables to use in body
|
32
42
|
#
|
33
43
|
#
|
34
44
|
before_body {
|
45
|
+
# TODO consider doing loading project files after displaying the GUI instead of holding it up before
|
46
|
+
project_dir #pre-initialize directory
|
47
|
+
at_exit do
|
48
|
+
project_dir.selected_child&.write_raw_dirty_content
|
49
|
+
end
|
35
50
|
Display.setAppName('Gladiator')
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
@find_text.swt_widget.setFocus
|
44
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'c'
|
45
|
-
Clipboard.copy(Dir.local_dir.selected_child.path)
|
46
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'g'
|
47
|
-
Dir.local_dir.selected_child.find_previous
|
48
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'w'
|
49
|
-
@tab_folder.swt_widget.getItems.each do |tab_item|
|
50
|
-
Dir.local_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
|
51
|
-
tab_item.getData('proxy')&.dispose
|
52
|
-
end
|
53
|
-
close_tab_folder
|
54
|
-
@tab_item = @text_editor = Dir.local_dir.selected_child = nil
|
55
|
-
@filter_text.swt_widget.selectAll
|
56
|
-
@filter_text.swt_widget.setFocus
|
57
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :alt) && extract_char(key_event) == 'w'
|
58
|
-
other_tab_items.each do |tab_item|
|
59
|
-
Dir.local_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
|
60
|
-
tab_item.getData('proxy')&.dispose
|
61
|
-
end
|
62
|
-
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'w'
|
63
|
-
if selected_tab_item
|
64
|
-
Dir.local_dir.selected_child_path_history.delete(Dir.local_dir.selected_child.path)
|
65
|
-
selected_tab_item.getData('proxy')&.dispose
|
66
|
-
close_tab_folder
|
67
|
-
if selected_tab_item.nil?
|
68
|
-
@tab_item = @text_editor = Dir.local_dir.selected_child = nil
|
69
|
-
@filter_text.swt_widget.selectAll
|
70
|
-
@filter_text.swt_widget.setFocus
|
71
|
-
else
|
72
|
-
@text_editor&.text_widget&.setFocus
|
73
|
-
end
|
74
|
-
end
|
75
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
|
76
|
-
@tab_folder.swt_widget.setSelection((@tab_folder.swt_widget.getSelectionIndex() + 1) % @tab_folder.swt_widget.getItemCount) if @tab_folder.swt_widget.getItemCount > 0
|
77
|
-
@text_editor&.text_widget&.setFocus
|
78
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == '['
|
79
|
-
@tab_folder.swt_widget.setSelection((@tab_folder.swt_widget.getSelectionIndex() - 1) % @tab_folder.swt_widget.getItemCount) if @tab_folder.swt_widget.getItemCount > 0
|
80
|
-
@text_editor&.text_widget&.setFocus
|
81
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == ']'
|
82
|
-
if @tab_folder2
|
83
|
-
if @tab_folder == @tab_folder1
|
84
|
-
@tab_folder = @tab_folder2
|
85
|
-
else
|
86
|
-
@tab_folder = @tab_folder1
|
87
|
-
end
|
88
|
-
@tab_item = @tab_folder.swt_widget.getData('selected_tab_item')
|
89
|
-
Dir.local_dir.selected_child = @tab_item&.swt_tab_item&.getData('file')
|
90
|
-
@tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
91
|
-
end
|
92
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == '['
|
93
|
-
if @tab_folder2
|
94
|
-
if @tab_folder == @tab_folder2
|
95
|
-
@tab_folder = @tab_folder1
|
96
|
-
else
|
97
|
-
@tab_folder = @tab_folder2
|
98
|
-
end
|
99
|
-
@tab_item = @tab_folder.swt_widget.getData('selected_tab_item')
|
100
|
-
Dir.local_dir.selected_child = @tab_item&.swt_tab_item&.getData('file')
|
101
|
-
@tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
102
|
-
end
|
103
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '1'
|
104
|
-
@tab_folder.swt_widget.setSelection(0) if @tab_folder.swt_widget.getItemCount >= 1
|
105
|
-
@text_editor&.text_widget&.setFocus
|
106
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '2'
|
107
|
-
@tab_folder.swt_widget.setSelection(1) if @tab_folder.swt_widget.getItemCount >= 2
|
108
|
-
@text_editor&.text_widget&.setFocus
|
109
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '3'
|
110
|
-
@tab_folder.swt_widget.setSelection(2) if @tab_folder.swt_widget.getItemCount >= 3
|
111
|
-
@text_editor&.text_widget&.setFocus
|
112
|
-
@tab_folder.swt_widget.setSelection(3) if @tab_folder.swt_widget.getItemCount >= 4
|
113
|
-
@text_editor&.text_widget&.setFocus
|
114
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '5'
|
115
|
-
@tab_folder.swt_widget.setSelection(4) if @tab_folder.swt_widget.getItemCount >= 5
|
116
|
-
@text_editor&.text_widget&.setFocus
|
117
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '4'
|
118
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '6'
|
119
|
-
@tab_folder.swt_widget.setSelection(5) if @tab_folder.swt_widget.getItemCount >= 6
|
120
|
-
@text_editor&.text_widget&.setFocus
|
121
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '7'
|
122
|
-
@tab_folder.swt_widget.setSelection(6) if @tab_folder.swt_widget.getItemCount >= 7
|
123
|
-
@text_editor&.text_widget&.setFocus
|
124
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '8'
|
125
|
-
@tab_folder.swt_widget.setSelection(7) if @tab_folder.swt_widget.getItemCount >= 8
|
126
|
-
@text_editor&.text_widget&.setFocus
|
127
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '9'
|
128
|
-
@tab_folder.swt_widget.setSelection(@tab_folder.swt_widget.getItemCount - 1) if @tab_folder.swt_widget.getItemCount > 0
|
129
|
-
@text_editor&.text_widget&.setFocus
|
130
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'g'
|
131
|
-
Dir.local_dir.selected_child.find_next
|
132
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'l'
|
133
|
-
@line_number_text.swt_widget.selectAll
|
134
|
-
@line_number_text.swt_widget.setFocus
|
135
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'r'
|
136
|
-
@filter_text.swt_widget.selectAll
|
137
|
-
@filter_text.swt_widget.setFocus
|
138
|
-
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 't'
|
139
|
-
select_tree_item unless @rename_in_progress
|
140
|
-
@tree.swt_widget.setFocus
|
141
|
-
elsif key_event.keyCode == swt(:esc)
|
142
|
-
if @text_editor
|
143
|
-
Dir.local_dir.selected_child_path = @text_editor.file.path
|
144
|
-
@text_editor&.text_widget&.setFocus
|
145
|
-
end
|
146
|
-
end
|
51
|
+
# make sure the display events are only hooked once if multiple gladiators are created
|
52
|
+
unless defined?(@@display)
|
53
|
+
@@display = display {
|
54
|
+
on_swt_keydown { |key_event|
|
55
|
+
focused_gladiator = display.focus_control.shell&.get_data('custom_shell')
|
56
|
+
focused_gladiator.handle_display_shortcut(key_event) if !focused_gladiator.nil? && key_event.widget.shell == focused_gladiator&.swt_widget
|
57
|
+
}
|
147
58
|
}
|
148
|
-
|
59
|
+
end
|
149
60
|
|
150
|
-
|
151
|
-
@config_file_path = ::File.join(
|
61
|
+
@split_orientation = swt(:horizontal)
|
62
|
+
@config_file_path = ::File.join(project_dir.path, '.gladiator')
|
152
63
|
@config = {}
|
153
64
|
load_config_ignore_paths
|
154
|
-
#
|
65
|
+
# project_dir.all_children # pre-caches children
|
155
66
|
}
|
156
67
|
|
157
68
|
## Uncomment after_body block to setup observers for widgets in body
|
158
69
|
#
|
159
70
|
after_body {
|
160
|
-
observe(
|
71
|
+
observe(project_dir, 'children') do
|
161
72
|
select_tree_item unless @rename_in_progress
|
162
73
|
end
|
163
|
-
observe(
|
74
|
+
observe(project_dir, 'selected_child') do |selected_file|
|
164
75
|
if selected_file
|
165
76
|
if Gladiator.drag && !@tab_folder2
|
166
|
-
@tab_folder1 = @
|
77
|
+
@tab_folder1 = @current_tab_folder
|
167
78
|
@tab_folder_sash_form.content {
|
168
|
-
@
|
169
|
-
@
|
79
|
+
@current_tab_folder = @tab_folder2 = tab_folder
|
80
|
+
@current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
|
170
81
|
}
|
171
82
|
end
|
172
83
|
select_tree_item unless @rename_in_progress
|
173
84
|
found_tab_item = selected_tab_item
|
174
85
|
if found_tab_item
|
175
|
-
@
|
176
|
-
@
|
177
|
-
@
|
178
|
-
@
|
86
|
+
@current_tab_folder.swt_widget.setSelection(found_tab_item)
|
87
|
+
@current_tab_item = found_tab_item.getData('proxy')
|
88
|
+
@current_text_editor = found_tab_item.getData('text_editor')
|
89
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
179
90
|
elsif selected_file
|
180
|
-
@
|
181
|
-
@
|
91
|
+
@current_tab_folder.content {
|
92
|
+
@current_tab_item = tab_item { |the_tab_item|
|
182
93
|
text selected_file.name
|
183
94
|
fill_layout :horizontal
|
184
|
-
@
|
185
|
-
@
|
186
|
-
@
|
95
|
+
@current_text_editor = the_text_editor = text_editor(project_dir: project_dir, file: selected_file)
|
96
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
97
|
+
@current_text_editor.text_proxy.content {
|
187
98
|
on_focus_gained {
|
188
99
|
tab_folder = the_text_editor.swt_widget.getParent.getParent
|
189
|
-
@
|
190
|
-
@
|
191
|
-
@
|
192
|
-
@
|
193
|
-
@
|
194
|
-
|
100
|
+
@current_tab_folder = tab_folder.getData('proxy')
|
101
|
+
@current_tab_item = the_tab_item
|
102
|
+
@current_text_editor = the_text_editor
|
103
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
104
|
+
@current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
|
105
|
+
project_dir.selected_child = @current_tab_item.swt_tab_item.getData('file')
|
195
106
|
}
|
196
107
|
}
|
197
108
|
on_swt_show {
|
198
|
-
@
|
199
|
-
@
|
200
|
-
@
|
201
|
-
@
|
202
|
-
@
|
203
|
-
|
109
|
+
@current_tab_item = the_tab_item
|
110
|
+
@current_text_editor = the_text_editor
|
111
|
+
@current_tab_folder = @current_tab_item.swt_widget.getParent.getData('proxy')
|
112
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
113
|
+
@current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
|
114
|
+
project_dir.selected_child = selected_file
|
204
115
|
async_exec {
|
205
|
-
@
|
116
|
+
@current_text_editor&.text_widget&.setFocus
|
206
117
|
}
|
207
118
|
}
|
208
119
|
}
|
209
|
-
@
|
210
|
-
@
|
211
|
-
@
|
212
|
-
@
|
213
|
-
}
|
214
|
-
@
|
120
|
+
@current_tab_item.swt_tab_item.setData('file_path', selected_file.path)
|
121
|
+
@current_tab_item.swt_tab_item.setData('file', selected_file)
|
122
|
+
@current_tab_item.swt_tab_item.setData('text_editor', @current_text_editor)
|
123
|
+
@current_tab_item.swt_tab_item.setData('proxy', @current_tab_item)
|
124
|
+
}
|
125
|
+
@current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
|
215
126
|
body_root.pack_same_size
|
216
127
|
end
|
217
|
-
@
|
128
|
+
@current_text_editor&.text_widget&.setFocus
|
218
129
|
end
|
219
130
|
end
|
220
|
-
observe(
|
131
|
+
observe(project_dir, 'selected_child') do
|
221
132
|
save_config
|
222
133
|
end
|
223
|
-
observe(
|
134
|
+
observe(project_dir, 'selected_child.caret_position') do
|
224
135
|
save_config
|
225
136
|
end
|
226
|
-
observe(
|
137
|
+
observe(project_dir, 'selected_child.top_pixel') do
|
227
138
|
save_config
|
228
139
|
end
|
229
140
|
load_config
|
@@ -234,20 +145,20 @@ module Glimmer
|
|
234
145
|
#
|
235
146
|
body {
|
236
147
|
shell {
|
237
|
-
text "Gladiator - #{::File.expand_path(
|
148
|
+
text "Gladiator - #{::File.expand_path(project_dir.path)}"
|
238
149
|
minimum_size 520, 250
|
239
|
-
size 1440, 900
|
150
|
+
size 1440, 900
|
240
151
|
grid_layout(2, false)
|
241
152
|
on_swt_show {
|
242
153
|
swt_widget.setSize(@config[:shell_width], @config[:shell_height]) if @config[:shell_width] && @config[:shell_height]
|
243
|
-
swt_widget.setLocation(@config[:shell_x], @config[:shell_y]) if @config[:shell_x] && @config[:shell_y]
|
154
|
+
swt_widget.setLocation(@config[:shell_x], @config[:shell_y]) if @config[:shell_x] && @config[:shell_y]
|
244
155
|
@loaded_config = true
|
245
156
|
}
|
246
157
|
on_swt_close {
|
247
|
-
|
158
|
+
project_dir.selected_child&.write_dirty_content
|
248
159
|
}
|
249
160
|
on_widget_disposed {
|
250
|
-
|
161
|
+
project_dir.selected_child&.write_dirty_content
|
251
162
|
}
|
252
163
|
on_control_resized {
|
253
164
|
save_config
|
@@ -256,8 +167,69 @@ module Glimmer
|
|
256
167
|
save_config
|
257
168
|
}
|
258
169
|
on_shell_deactivated {
|
259
|
-
@
|
260
|
-
}
|
170
|
+
@current_text_editor&.file&.write_dirty_content
|
171
|
+
}
|
172
|
+
|
173
|
+
menu_bar {
|
174
|
+
menu {
|
175
|
+
text '&File'
|
176
|
+
|
177
|
+
menu_item {
|
178
|
+
text 'New &Scratchpad'
|
179
|
+
on_widget_selected {
|
180
|
+
begin
|
181
|
+
project_dir.selected_child_path = ''
|
182
|
+
rescue => e
|
183
|
+
pd e
|
184
|
+
end
|
185
|
+
}
|
186
|
+
}
|
187
|
+
menu_item(:separator)
|
188
|
+
menu_item {
|
189
|
+
text 'Open &Project...'
|
190
|
+
on_widget_selected {
|
191
|
+
open_project
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
menu {
|
196
|
+
text '&View'
|
197
|
+
menu {
|
198
|
+
text '&Split'
|
199
|
+
menu_item(:radio) {
|
200
|
+
text '&Horizontal'
|
201
|
+
selection bind(self, :split_orientation, on_read: ->(o) { o == swt(:horizontal)}, on_write: ->(b) { b ? swt(:horizontal) : swt(:vertical)})
|
202
|
+
}
|
203
|
+
menu_item(:radio) {
|
204
|
+
text '&Vertical'
|
205
|
+
selection bind(self, :split_orientation, on_read: ->(o) { o == swt(:vertical)}, on_write: ->(b) { b ? swt(:vertical) : swt(:horizontal)})
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
menu {
|
210
|
+
text '&Run'
|
211
|
+
# menu_item {
|
212
|
+
# text 'Launch Glimmer &App'
|
213
|
+
# on_widget_selected {
|
214
|
+
# parent_path = project_dir.path
|
215
|
+
## current_directory_name = ::File.basename(parent_path)
|
216
|
+
## assumed_shell_script = ::File.join(parent_path, 'bin', current_directory_name)
|
217
|
+
## assumed_shell_script = ::Dir.glob(::File.join(parent_path, 'bin', '*')).detect {|f| ::File.file?(f) && !::File.read(f).include?('#!/usr/bin/env')} if !::File.exist?(assumed_shell_script)
|
218
|
+
## load assumed_shell_script
|
219
|
+
# FileUtils.cd(parent_path) do
|
220
|
+
# system 'glimmer run'
|
221
|
+
# end
|
222
|
+
# }
|
223
|
+
# }
|
224
|
+
menu_item {
|
225
|
+
text '&Ruby'
|
226
|
+
on_widget_selected {
|
227
|
+
project_dir.selected_child.run
|
228
|
+
}
|
229
|
+
}
|
230
|
+
}
|
231
|
+
}
|
232
|
+
|
261
233
|
composite {
|
262
234
|
grid_layout 1, false
|
263
235
|
layout_data(:fill, :fill, false, true) {
|
@@ -265,16 +237,16 @@ module Glimmer
|
|
265
237
|
}
|
266
238
|
@filter_text = text {
|
267
239
|
layout_data :fill, :center, true, false
|
268
|
-
text bind(
|
240
|
+
text bind(project_dir, 'filter')
|
269
241
|
on_key_pressed { |key_event|
|
270
|
-
if key_event.keyCode == swt(:tab) ||
|
271
|
-
key_event.keyCode == swt(:cr) ||
|
242
|
+
if key_event.keyCode == swt(:tab) ||
|
243
|
+
key_event.keyCode == swt(:cr) ||
|
272
244
|
key_event.keyCode == swt(:arrow_up) ||
|
273
245
|
key_event.keyCode == swt(:arrow_down)
|
274
246
|
@list.swt_widget.select(0) if @list.swt_widget.getSelectionIndex() == -1
|
275
247
|
@list.swt_widget.setFocus
|
276
248
|
end
|
277
|
-
}
|
249
|
+
}
|
278
250
|
}
|
279
251
|
composite {
|
280
252
|
fill_layout(:vertical) {
|
@@ -282,15 +254,15 @@ module Glimmer
|
|
282
254
|
}
|
283
255
|
layout_data(:fill, :fill, true, true)
|
284
256
|
@list = list(:border, :h_scroll, :v_scroll) {
|
285
|
-
#visible bind(
|
286
|
-
selection bind(
|
257
|
+
#visible bind(self, 'project_dir.filter') {|f| !!f}
|
258
|
+
selection bind(project_dir, :filtered_path)
|
287
259
|
on_mouse_up {
|
288
|
-
|
260
|
+
project_dir.selected_child_path = @list.swt_widget.getSelection.first
|
289
261
|
}
|
290
262
|
on_key_pressed { |key_event|
|
291
263
|
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
292
|
-
|
293
|
-
@
|
264
|
+
project_dir.selected_child_path = @list.swt_widget.getSelection.first
|
265
|
+
@current_text_editor&.text_widget&.setFocus
|
294
266
|
end
|
295
267
|
}
|
296
268
|
drag_source(DND::DROP_COPY) {
|
@@ -300,11 +272,11 @@ module Glimmer
|
|
300
272
|
list = event.widget.getControl
|
301
273
|
event.data = list.getSelection.first
|
302
274
|
}
|
303
|
-
}
|
275
|
+
}
|
304
276
|
}
|
305
|
-
@
|
306
|
-
#visible bind(
|
307
|
-
items bind(
|
277
|
+
@file_tree = tree(:virtual, :border, :h_scroll, :v_scroll) {
|
278
|
+
#visible bind(self, 'project_dir.filter') {|f| !f}
|
279
|
+
items bind(self, :project_dir), tree_properties(children: :children, text: :name)
|
308
280
|
drag_source(DND::DROP_COPY) {
|
309
281
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
310
282
|
on_drag_set_data { |event|
|
@@ -318,21 +290,21 @@ module Glimmer
|
|
318
290
|
@open_menu_item = menu_item {
|
319
291
|
text 'Open'
|
320
292
|
on_widget_selected {
|
321
|
-
|
293
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
322
294
|
}
|
323
295
|
}
|
324
296
|
menu_item(:separator)
|
325
297
|
menu_item {
|
326
298
|
text 'Delete'
|
327
299
|
on_widget_selected {
|
328
|
-
tree_item = @
|
300
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
329
301
|
delete_tree_item(tree_item)
|
330
302
|
}
|
331
303
|
}
|
332
304
|
menu_item {
|
333
305
|
text 'Refresh'
|
334
306
|
on_widget_selected {
|
335
|
-
|
307
|
+
project_dir.refresh
|
336
308
|
}
|
337
309
|
}
|
338
310
|
menu_item {
|
@@ -355,25 +327,25 @@ module Glimmer
|
|
355
327
|
}
|
356
328
|
}
|
357
329
|
on_swt_menudetect { |event|
|
358
|
-
path = extract_tree_item_path(@
|
330
|
+
path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
359
331
|
@open_menu_item.swt_widget.setEnabled(!::Dir.exist?(path)) if path
|
360
332
|
}
|
361
333
|
on_mouse_up {
|
362
334
|
if Gladiator.drag_and_drop
|
363
335
|
Gladiator.drag_and_drop = false
|
364
336
|
else
|
365
|
-
|
366
|
-
@
|
337
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
338
|
+
@current_text_editor&.text_widget&.setFocus
|
367
339
|
end
|
368
340
|
}
|
369
341
|
on_key_pressed { |key_event|
|
370
342
|
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
371
|
-
|
372
|
-
@
|
343
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
344
|
+
@current_text_editor&.text_widget&.setFocus
|
373
345
|
end
|
374
346
|
}
|
375
347
|
on_paint_control {
|
376
|
-
root_item = @
|
348
|
+
root_item = @file_tree.swt_widget.getItems.first
|
377
349
|
if root_item && !root_item.getExpanded
|
378
350
|
root_item.setExpanded(true)
|
379
351
|
end
|
@@ -381,10 +353,11 @@ module Glimmer
|
|
381
353
|
}
|
382
354
|
}
|
383
355
|
|
384
|
-
|
385
|
-
@
|
386
|
-
@
|
387
|
-
@
|
356
|
+
# TODO see if you could replace some of this with Glimmer DSL/API syntax
|
357
|
+
@file_tree_editor = TreeEditor.new(@file_tree.swt_widget);
|
358
|
+
@file_tree_editor.horizontalAlignment = swt(:left);
|
359
|
+
@file_tree_editor.grabHorizontal = true;
|
360
|
+
@file_tree_editor.minimumHeight = 20;
|
388
361
|
|
389
362
|
}
|
390
363
|
@editor_container = composite {
|
@@ -392,17 +365,21 @@ module Glimmer
|
|
392
365
|
layout_data :fill, :fill, true, true
|
393
366
|
composite {
|
394
367
|
grid_layout 3, false
|
395
|
-
|
368
|
+
|
396
369
|
# row 1
|
397
|
-
|
370
|
+
|
371
|
+
label {
|
372
|
+
text 'File:'
|
373
|
+
}
|
374
|
+
|
398
375
|
@file_path_label = styled_text(:none) {
|
399
376
|
layout_data(:fill, :fill, true, false) {
|
400
|
-
horizontal_span
|
377
|
+
horizontal_span 2
|
401
378
|
}
|
402
379
|
background color(:widget_background)
|
403
380
|
editable false
|
404
381
|
caret nil
|
405
|
-
text bind(
|
382
|
+
text bind(project_dir, 'selected_child.path')
|
406
383
|
on_mouse_up {
|
407
384
|
@file_path_label.swt_widget.selectAll
|
408
385
|
}
|
@@ -410,9 +387,9 @@ module Glimmer
|
|
410
387
|
@file_path_label.swt_widget.setSelection(0, 0)
|
411
388
|
}
|
412
389
|
}
|
413
|
-
|
390
|
+
|
414
391
|
# row 2
|
415
|
-
|
392
|
+
|
416
393
|
label {
|
417
394
|
text 'Line:'
|
418
395
|
}
|
@@ -420,18 +397,18 @@ module Glimmer
|
|
420
397
|
layout_data(:fill, :fill, true, false) {
|
421
398
|
minimum_width 400
|
422
399
|
}
|
423
|
-
text bind(
|
400
|
+
text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
|
424
401
|
on_key_pressed { |key_event|
|
425
402
|
if key_event.keyCode == swt(:cr)
|
426
|
-
@
|
403
|
+
@current_text_editor&.text_widget&.setFocus
|
427
404
|
end
|
428
405
|
}
|
429
406
|
on_verify_text { |event|
|
430
|
-
event.doit = !event.text.match(/^\d*$/).to_a.empty?
|
407
|
+
event.doit = !event.text.match(/^\d*$/).to_a.empty?
|
431
408
|
}
|
432
409
|
}
|
433
410
|
label
|
434
|
-
|
411
|
+
|
435
412
|
# row 3
|
436
413
|
|
437
414
|
label {
|
@@ -441,34 +418,34 @@ module Glimmer
|
|
441
418
|
layout_data(:fill, :center, true, false) {
|
442
419
|
minimum_width 400
|
443
420
|
}
|
444
|
-
text bind(
|
421
|
+
text bind(project_dir, 'selected_child.find_text')
|
445
422
|
on_key_pressed { |key_event|
|
446
423
|
if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
|
447
|
-
|
448
|
-
|
424
|
+
project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
|
425
|
+
project_dir.selected_child&.find_next
|
449
426
|
end
|
450
427
|
if key_event.keyCode == swt(:cr)
|
451
|
-
|
428
|
+
project_dir.selected_child&.find_next
|
452
429
|
end
|
453
430
|
}
|
454
431
|
}
|
455
432
|
composite {
|
456
433
|
row_layout
|
457
434
|
button(:check) {
|
458
|
-
selection bind(
|
435
|
+
selection bind(project_dir, 'selected_child.case_sensitive')
|
459
436
|
on_key_pressed { |key_event|
|
460
437
|
if key_event.keyCode == swt(:cr)
|
461
|
-
|
438
|
+
project_dir.selected_child&.find_next
|
462
439
|
end
|
463
|
-
}
|
440
|
+
}
|
464
441
|
}
|
465
442
|
label {
|
466
443
|
text 'Case-sensitive'
|
467
444
|
}
|
468
445
|
}
|
469
|
-
|
446
|
+
|
470
447
|
# row 4
|
471
|
-
|
448
|
+
|
472
449
|
label {
|
473
450
|
text 'Replace:'
|
474
451
|
}
|
@@ -476,14 +453,14 @@ module Glimmer
|
|
476
453
|
layout_data(:fill, :fill, true, false) {
|
477
454
|
minimum_width 300
|
478
455
|
}
|
479
|
-
text bind(
|
480
|
-
on_focus_gained {
|
481
|
-
|
456
|
+
text bind(project_dir, 'selected_child.replace_text')
|
457
|
+
on_focus_gained {
|
458
|
+
project_dir.selected_child&.ensure_find_next
|
482
459
|
}
|
483
460
|
on_key_pressed { |key_event|
|
484
461
|
if key_event.keyCode == swt(:cr)
|
485
|
-
if
|
486
|
-
Command.do(
|
462
|
+
if project_dir.selected_child
|
463
|
+
Command.do(project_dir.selected_child, :replace_next!)
|
487
464
|
end
|
488
465
|
end
|
489
466
|
}
|
@@ -496,7 +473,8 @@ module Glimmer
|
|
496
473
|
height_hint 480
|
497
474
|
}
|
498
475
|
sash_width 10
|
499
|
-
|
476
|
+
orientation bind(self, :split_orientation)
|
477
|
+
@current_tab_folder = tab_folder {
|
500
478
|
drag_source(DND::DROP_COPY) {
|
501
479
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
502
480
|
event_data = nil
|
@@ -511,7 +489,7 @@ module Glimmer
|
|
511
489
|
}
|
512
490
|
}
|
513
491
|
}
|
514
|
-
@
|
492
|
+
@current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
|
515
493
|
}
|
516
494
|
}
|
517
495
|
}
|
@@ -523,89 +501,96 @@ module Glimmer
|
|
523
501
|
config_yaml = ::File.read(@config_file_path)
|
524
502
|
return if config_yaml.to_s.strip.empty?
|
525
503
|
@config = YAML.load(config_yaml)
|
526
|
-
|
527
|
-
|
504
|
+
project_dir.ignore_paths = @config[:ignore_paths] if @config[:ignore_paths]
|
505
|
+
project_dir.ignore_paths ||= ['packages', 'tmp']
|
528
506
|
else
|
529
507
|
@loaded_config = true
|
530
508
|
end
|
531
509
|
end
|
532
|
-
|
510
|
+
|
533
511
|
def load_config
|
534
512
|
if ::File.exists?(@config_file_path)
|
535
513
|
config_yaml = ::File.read(@config_file_path)
|
536
514
|
return if config_yaml.to_s.strip.empty?
|
537
515
|
@config = YAML.load(config_yaml)
|
538
|
-
|
539
|
-
|
516
|
+
project_dir.ignore_paths = @config[:ignore_paths] if @config[:ignore_paths]
|
517
|
+
project_dir.ignore_paths ||= ['packages', 'tmp']
|
540
518
|
open_file_paths1 = @config[:open_file_paths1] || @config[:open_file_paths]
|
541
519
|
open_file_paths2 = @config[:open_file_paths2]
|
542
520
|
open_file_paths1.to_a.each do |file_path|
|
543
|
-
|
521
|
+
project_dir.selected_child_path = file_path
|
544
522
|
end
|
523
|
+
# TODO replace the next line with one that selects the visible tab
|
524
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path] && open_file_paths1.to_a.include?(@config[:selected_child_path])
|
545
525
|
Gladiator.drag = true
|
546
526
|
open_file_paths2.to_a.each do |file_path|
|
547
|
-
|
527
|
+
project_dir.selected_child_path = file_path
|
548
528
|
end
|
529
|
+
# TODO replace the next line with one that selects the visible tab
|
530
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path] && open_file_paths2.to_a.include?(@config[:selected_child_path])
|
549
531
|
Gladiator.drag = false
|
550
|
-
|
551
|
-
|
552
|
-
Dir.local_dir.selected_child&.top_index = @config[:top_index].to_i if @config[:top_index]
|
532
|
+
project_dir.selected_child&.caret_position = project_dir.selected_child&.caret_position_for_caret_position_start_of_line(@config[:caret_position].to_i) if @config[:caret_position]
|
533
|
+
project_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
|
553
534
|
else
|
554
535
|
@loaded_config = true
|
555
536
|
end
|
556
537
|
end
|
557
|
-
|
538
|
+
|
558
539
|
def save_config
|
559
540
|
return unless @loaded_config
|
560
|
-
child =
|
541
|
+
child = project_dir.selected_child
|
561
542
|
return if child.nil?
|
562
|
-
tab_folder1 = @tab_folder1 || @
|
543
|
+
tab_folder1 = @tab_folder1 || @current_tab_folder
|
563
544
|
tab_folder2 = @tab_folder2
|
564
|
-
open_file_paths1 = tab_folder1&.swt_widget&.items
|
565
|
-
open_file_paths2 = tab_folder2&.swt_widget&.items
|
545
|
+
open_file_paths1 = tab_folder1&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
|
546
|
+
open_file_paths2 = tab_folder2&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
|
566
547
|
@config = {
|
567
548
|
selected_child_path: child.path,
|
568
549
|
caret_position: child.caret_position,
|
569
|
-
|
550
|
+
top_pixel: child.top_pixel,
|
570
551
|
shell_width: swt_widget&.getBounds&.width,
|
571
552
|
shell_height: swt_widget&.getBounds&.height,
|
572
553
|
shell_x: swt_widget&.getBounds&.x,
|
573
554
|
shell_y: swt_widget&.getBounds&.y,
|
574
555
|
open_file_paths1: open_file_paths1,
|
575
556
|
open_file_paths2: open_file_paths2,
|
576
|
-
ignore_paths:
|
557
|
+
ignore_paths: project_dir.ignore_paths
|
577
558
|
}
|
578
559
|
config_yaml = YAML.dump(@config)
|
579
560
|
::File.write(@config_file_path, config_yaml) unless config_yaml.to_s.empty?
|
580
561
|
rescue => e
|
581
562
|
puts e.full_message
|
582
563
|
end
|
583
|
-
|
564
|
+
|
584
565
|
def close_tab_folder
|
585
566
|
if @tab_folder2 && !selected_tab_item
|
586
|
-
if @
|
567
|
+
if @current_tab_folder == @tab_folder2
|
587
568
|
@tab_folder2.swt_widget.dispose
|
588
|
-
@
|
569
|
+
@current_tab_folder = @tab_folder1
|
589
570
|
else
|
590
571
|
@tab_folder1.swt_widget.dispose
|
591
|
-
@
|
572
|
+
@current_tab_folder = @tab_folder1 = @tab_folder2
|
592
573
|
end
|
593
|
-
@tab_folder2 = nil
|
594
|
-
|
595
|
-
@
|
596
|
-
@
|
597
|
-
|
598
|
-
|
574
|
+
@tab_folder2 = nil
|
575
|
+
|
576
|
+
@current_tab_item = @current_tab_folder.swt_widget.getData('selected_tab_item')
|
577
|
+
@current_text_editor = @current_tab_item.swt_tab_item.getData('text_editor')
|
578
|
+
project_dir.selected_child = @current_tab_item.swt_tab_item.getData('file')
|
579
|
+
|
599
580
|
body_root.pack_same_size
|
600
581
|
end
|
601
582
|
end
|
602
|
-
|
583
|
+
|
584
|
+
def find_tab_item(file_path)
|
585
|
+
@current_tab_folder.swt_widget.getItems.detect { |ti| ti.getData('file_path') == file_path }
|
586
|
+
end
|
587
|
+
|
603
588
|
def selected_tab_item
|
604
|
-
|
589
|
+
find_tab_item(project_dir.selected_child&.path)
|
605
590
|
end
|
606
591
|
|
607
592
|
def other_tab_items
|
608
|
-
@
|
593
|
+
@current_tab_folder.swt_widget.getItems.reject { |ti| ti.getData('file_path') == project_dir.selected_child&.path }
|
609
594
|
end
|
610
595
|
|
611
596
|
def extract_tree_item_path(tree_item)
|
@@ -613,14 +598,14 @@ module Glimmer
|
|
613
598
|
if tree_item.getParentItem
|
614
599
|
::File.join(extract_tree_item_path(tree_item.getParentItem), tree_item.getText)
|
615
600
|
else
|
616
|
-
|
601
|
+
project_dir.path
|
617
602
|
end
|
618
603
|
end
|
619
|
-
|
604
|
+
|
620
605
|
def select_tree_item
|
621
|
-
return unless
|
622
|
-
tree_items_to_select = @
|
623
|
-
@
|
606
|
+
return unless project_dir.selected_child&.name
|
607
|
+
tree_items_to_select = @file_tree.depth_first_search { |ti| ti.getData.path == project_dir.selected_child.path }
|
608
|
+
@file_tree.swt_widget.setSelection(tree_items_to_select)
|
624
609
|
end
|
625
610
|
|
626
611
|
def delete_tree_item(tree_item)
|
@@ -628,27 +613,23 @@ module Glimmer
|
|
628
613
|
file = tree_item.getData
|
629
614
|
parent_path = ::File.dirname(file.path)
|
630
615
|
file.delete! # TODO consider supporting command undo/redo
|
631
|
-
|
632
|
-
parent_tree_item = @
|
633
|
-
@
|
616
|
+
project_dir.refresh(async: false)
|
617
|
+
parent_tree_item = @file_tree.depth_first_search {|ti| ti.getData.path == parent_path}.first
|
618
|
+
@file_tree.swt_widget.showItem(parent_tree_item)
|
634
619
|
parent_tree_item.setExpanded(true)
|
635
|
-
# TODO close text editor tab
|
636
|
-
|
637
|
-
|
638
|
-
|
620
|
+
# TODO close text editor tab
|
621
|
+
found_tab_item = find_tab_item(file.path)
|
622
|
+
if found_tab_item
|
623
|
+
project_dir.selected_child_path_history.delete(found_tab_item.getData('file_path'))
|
624
|
+
found_tab_item.getData('proxy')&.dispose
|
625
|
+
end
|
639
626
|
rescue => e
|
640
|
-
puts e.full_message
|
641
|
-
end
|
642
|
-
|
643
|
-
def rename_selected_tree_item
|
644
|
-
Dir.local_dir.pause_refresh
|
645
|
-
tree_item = @tree.swt_widget.getSelection.first
|
646
|
-
rename_tree_item(tree_item)
|
627
|
+
puts e.full_message
|
647
628
|
end
|
648
|
-
|
629
|
+
|
649
630
|
def add_new_directory_to_selected_tree_item
|
650
|
-
|
651
|
-
tree_item = @
|
631
|
+
project_dir.pause_refresh
|
632
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
652
633
|
directory_path = extract_tree_item_path(tree_item)
|
653
634
|
return if directory_path.nil?
|
654
635
|
if !::Dir.exist?(directory_path)
|
@@ -657,15 +638,15 @@ module Glimmer
|
|
657
638
|
end
|
658
639
|
new_directory_path = ::File.expand_path(::File.join(directory_path, 'new_directory'))
|
659
640
|
FileUtils.mkdir_p(new_directory_path)
|
660
|
-
|
661
|
-
new_tree_item = @
|
662
|
-
@
|
663
|
-
rename_tree_item(new_tree_item
|
641
|
+
project_dir.refresh(async: false, force: true)
|
642
|
+
new_tree_item = @file_tree.depth_first_search {|ti| ti.getData.path == new_directory_path}.first
|
643
|
+
@file_tree.swt_widget.showItem(new_tree_item)
|
644
|
+
rename_tree_item(new_tree_item)
|
664
645
|
end
|
665
|
-
|
646
|
+
|
666
647
|
def add_new_file_to_selected_tree_item
|
667
|
-
|
668
|
-
tree_item = @
|
648
|
+
project_dir.pause_refresh
|
649
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
669
650
|
directory_path = extract_tree_item_path(tree_item)
|
670
651
|
if !::Dir.exist?(directory_path)
|
671
652
|
tree_item = tree_item.getParentItem
|
@@ -674,24 +655,47 @@ module Glimmer
|
|
674
655
|
new_file_path = ::File.expand_path(::File.join(directory_path, 'new_file'))
|
675
656
|
FileUtils.touch(new_file_path)
|
676
657
|
# TODO look into refreshing only the parent directory to avoid slowdown
|
677
|
-
|
678
|
-
new_tree_item = @
|
679
|
-
@
|
658
|
+
project_dir.refresh(async: false, force: true)
|
659
|
+
new_tree_item = @file_tree.depth_first_search {|ti| ti.getData.path == new_file_path}.first
|
660
|
+
@file_tree.swt_widget.showItem(new_tree_item)
|
680
661
|
rename_tree_item(new_tree_item, true)
|
681
662
|
end
|
682
|
-
|
683
|
-
def
|
684
|
-
|
663
|
+
|
664
|
+
def rename_selected_tree_item
|
665
|
+
project_dir.pause_refresh
|
666
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
667
|
+
rename_tree_item(tree_item)
|
668
|
+
end
|
669
|
+
|
670
|
+
def rename_tree_item(tree_item, new_file = false)
|
671
|
+
original_file = tree_item.getData
|
672
|
+
current_file = project_dir.selected_child_path == original_file.path
|
673
|
+
found_tab_item = find_tab_item(original_file.path)
|
674
|
+
found_text_editor = found_tab_item&.getData('text_editor')
|
675
|
+
@file_tree.edit_tree_item(
|
685
676
|
tree_item,
|
686
677
|
after_write: -> (edited_tree_item) {
|
687
678
|
file = edited_tree_item.getData
|
688
679
|
file_path = file.path
|
689
|
-
|
690
|
-
|
691
|
-
|
680
|
+
file.name
|
681
|
+
if new_file
|
682
|
+
project_dir.selected_child_path = file_path
|
683
|
+
else
|
684
|
+
found_text_editor&.file = file
|
685
|
+
found_tab_item&.setData('file', file)
|
686
|
+
found_tab_item&.setData('file_path', file.path)
|
687
|
+
found_tab_item&.setText(file.name)
|
688
|
+
body_root.pack_same_size
|
689
|
+
if current_file
|
690
|
+
project_dir.selected_child_path = file_path
|
691
|
+
else
|
692
|
+
selected_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
693
|
+
end
|
694
|
+
end
|
695
|
+
project_dir.resume_refresh
|
692
696
|
},
|
693
697
|
after_cancel: -> {
|
694
|
-
|
698
|
+
project_dir.resume_refresh
|
695
699
|
}
|
696
700
|
)
|
697
701
|
end
|
@@ -701,5 +705,154 @@ module Glimmer
|
|
701
705
|
rescue => e
|
702
706
|
nil
|
703
707
|
end
|
708
|
+
|
709
|
+
def open_project
|
710
|
+
selected_directory = directory_dialog.open
|
711
|
+
@progress_bar_shell = shell(body_root) {
|
712
|
+
text 'Opening Project'
|
713
|
+
fill_layout(:vertical) {
|
714
|
+
margin_width 15
|
715
|
+
margin_height 15
|
716
|
+
spacing 5
|
717
|
+
}
|
718
|
+
label(:center) {
|
719
|
+
text "Opening Project: #{::File.basename(selected_directory)}"
|
720
|
+
font height: 20
|
721
|
+
}
|
722
|
+
# @progress_bar = progress_bar(:horizontal, :indeterminate)
|
723
|
+
}
|
724
|
+
Thread.new {
|
725
|
+
async_exec {
|
726
|
+
@progress_bar_shell.open
|
727
|
+
}
|
728
|
+
}
|
729
|
+
Thread.new {
|
730
|
+
async_exec {
|
731
|
+
gladiator(project_dir_path: selected_directory) {
|
732
|
+
on_swt_show {
|
733
|
+
@progress_bar_shell.close
|
734
|
+
}
|
735
|
+
}.open if selected_directory
|
736
|
+
}
|
737
|
+
}
|
738
|
+
end
|
739
|
+
|
740
|
+
def handle_display_shortcut(key_event)
|
741
|
+
if key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'f'
|
742
|
+
if current_text_editor&.text_widget&.getSelectionText && current_text_editor&.text_widget&.getSelectionText&.size.to_i > 0
|
743
|
+
find_text.swt_widget.setText current_text_editor.text_widget.getSelectionText
|
744
|
+
end
|
745
|
+
find_text.swt_widget.selectAll
|
746
|
+
find_text.swt_widget.setFocus
|
747
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'c'
|
748
|
+
Clipboard.copy(project_dir.selected_child.path)
|
749
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'g'
|
750
|
+
project_dir.selected_child.find_previous
|
751
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'p'
|
752
|
+
open_project
|
753
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 's'
|
754
|
+
project_dir.selected_child_path = '' # scratchpad
|
755
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'w'
|
756
|
+
current_tab_folder.swt_widget.getItems.each do |tab_item|
|
757
|
+
project_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
|
758
|
+
tab_item.getData('proxy')&.dispose
|
759
|
+
end
|
760
|
+
close_tab_folder
|
761
|
+
self.current_tab_item = self.current_text_editor = project_dir.selected_child = nil
|
762
|
+
filter_text.swt_widget.selectAll
|
763
|
+
filter_text.swt_widget.setFocus
|
764
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :alt) && extract_char(key_event) == 'w'
|
765
|
+
other_tab_items.each do |tab_item|
|
766
|
+
project_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
|
767
|
+
tab_item.getData('proxy')&.dispose
|
768
|
+
end
|
769
|
+
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'w'
|
770
|
+
if selected_tab_item
|
771
|
+
project_dir.selected_child_path_history.delete(project_dir.selected_child.path)
|
772
|
+
selected_tab_item.getData('proxy')&.dispose
|
773
|
+
close_tab_folder
|
774
|
+
if selected_tab_item.nil?
|
775
|
+
self.current_tab_item = self.current_text_editor = project_dir.selected_child = nil
|
776
|
+
filter_text.swt_widget.selectAll
|
777
|
+
filter_text.swt_widget.setFocus
|
778
|
+
else
|
779
|
+
current_text_editor&.text_widget&.setFocus
|
780
|
+
end
|
781
|
+
end
|
782
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'o'
|
783
|
+
self.split_orientation = split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
|
784
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
|
785
|
+
current_tab_folder.swt_widget.setSelection((current_tab_folder.swt_widget.getSelectionIndex() + 1) % current_tab_folder.swt_widget.getItemCount) if current_tab_folder.swt_widget.getItemCount > 0
|
786
|
+
current_text_editor&.text_widget&.setFocus
|
787
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == '['
|
788
|
+
current_tab_folder.swt_widget.setSelection((current_tab_folder.swt_widget.getSelectionIndex() - 1) % current_tab_folder.swt_widget.getItemCount) if current_tab_folder.swt_widget.getItemCount > 0
|
789
|
+
current_text_editor&.text_widget&.setFocus
|
790
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == ']'
|
791
|
+
if tab_folder2
|
792
|
+
if current_tab_folder == tab_folder1
|
793
|
+
self.current_tab_folder = tab_folder2
|
794
|
+
else
|
795
|
+
self.current_tab_folder = tab_folder1
|
796
|
+
end
|
797
|
+
self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
|
798
|
+
self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
|
799
|
+
current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
800
|
+
end
|
801
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == '['
|
802
|
+
if tab_folder2
|
803
|
+
if current_tab_folder == tab_folder2
|
804
|
+
self.current_tab_folder = tab_folder1
|
805
|
+
else
|
806
|
+
self.current_tab_folder = tab_folder2
|
807
|
+
end
|
808
|
+
self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
|
809
|
+
self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
|
810
|
+
current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
811
|
+
end
|
812
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '1'
|
813
|
+
current_tab_folder.swt_widget.setSelection(0) if current_tab_folder.swt_widget.getItemCount >= 1
|
814
|
+
current_text_editor&.text_widget&.setFocus
|
815
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '2'
|
816
|
+
current_tab_folder.swt_widget.setSelection(1) if current_tab_folder.swt_widget.getItemCount >= 2
|
817
|
+
current_text_editor&.text_widget&.setFocus
|
818
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '3'
|
819
|
+
current_tab_folder.swt_widget.setSelection(2) if current_tab_folder.swt_widget.getItemCount >= 3
|
820
|
+
current_text_editor&.text_widget&.setFocus
|
821
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '4'
|
822
|
+
current_tab_folder.swt_widget.setSelection(3) if current_tab_folder.swt_widget.getItemCount >= 4
|
823
|
+
current_text_editor&.text_widget&.setFocus
|
824
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '5'
|
825
|
+
current_tab_folder.swt_widget.setSelection(4) if current_tab_folder.swt_widget.getItemCount >= 5
|
826
|
+
current_text_editor&.text_widget&.setFocus
|
827
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '6'
|
828
|
+
current_tab_folder.swt_widget.setSelection(5) if current_tab_folder.swt_widget.getItemCount >= 6
|
829
|
+
current_text_editor&.text_widget&.setFocus
|
830
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '7'
|
831
|
+
current_tab_folder.swt_widget.setSelection(6) if current_tab_folder.swt_widget.getItemCount >= 7
|
832
|
+
current_text_editor&.text_widget&.setFocus
|
833
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '8'
|
834
|
+
current_tab_folder.swt_widget.setSelection(7) if current_tab_folder.swt_widget.getItemCount >= 8
|
835
|
+
current_text_editor&.text_widget&.setFocus
|
836
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '9'
|
837
|
+
current_tab_folder.swt_widget.setSelection(current_tab_folder.swt_widget.getItemCount - 1) if current_tab_folder.swt_widget.getItemCount > 0
|
838
|
+
current_text_editor&.text_widget&.setFocus
|
839
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'g'
|
840
|
+
project_dir.selected_child.find_next
|
841
|
+
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'l'
|
842
|
+
line_number_text.swt_widget.selectAll
|
843
|
+
line_number_text.swt_widget.setFocus
|
844
|
+
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'r'
|
845
|
+
filter_text.swt_widget.selectAll
|
846
|
+
filter_text.swt_widget.setFocus
|
847
|
+
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 't'
|
848
|
+
select_tree_item unless rename_in_progress
|
849
|
+
file_tree.swt_widget.setFocus
|
850
|
+
elsif key_event.keyCode == swt(:esc)
|
851
|
+
if current_text_editor
|
852
|
+
project_dir.selected_child_path = current_text_editor.file.path
|
853
|
+
current_text_editor&.text_widget&.setFocus
|
854
|
+
end
|
855
|
+
end
|
856
|
+
end
|
704
857
|
end
|
705
|
-
end
|
858
|
+
end
|