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