glimmer-cs-gladiator 0.2.4 → 0.5.0
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 +22 -15
- data/VERSION +1 -1
- data/bin/gladiator_runner.rb +2 -1
- data/lib/glimmer-cs-gladiator.rb +23 -0
- data/lib/models/glimmer/gladiator/command.rb +8 -4
- data/lib/models/glimmer/gladiator/dir.rb +55 -49
- data/lib/models/glimmer/gladiator/file.rb +119 -77
- data/lib/views/glimmer/gladiator.rb +421 -273
- data/lib/views/glimmer/gladiator/text_editor.rb +37 -19
- metadata +13 -13
@@ -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,202 +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
|
66
|
+
# project_dir.all_children # pre-caches children
|
154
67
|
}
|
155
68
|
|
156
69
|
## Uncomment after_body block to setup observers for widgets in body
|
157
70
|
#
|
158
71
|
after_body {
|
159
|
-
observe(
|
72
|
+
observe(project_dir, 'children') do
|
160
73
|
select_tree_item unless @rename_in_progress
|
161
74
|
end
|
162
|
-
observe(
|
75
|
+
observe(project_dir, 'selected_child') do |selected_file|
|
163
76
|
if selected_file
|
164
77
|
if Gladiator.drag && !@tab_folder2
|
165
|
-
@tab_folder1 = @
|
78
|
+
@tab_folder1 = @current_tab_folder
|
166
79
|
@tab_folder_sash_form.content {
|
167
|
-
@
|
168
|
-
@
|
80
|
+
@current_tab_folder = @tab_folder2 = tab_folder
|
81
|
+
@current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
|
169
82
|
}
|
170
83
|
end
|
171
84
|
select_tree_item unless @rename_in_progress
|
172
85
|
found_tab_item = selected_tab_item
|
173
86
|
if found_tab_item
|
174
|
-
@
|
175
|
-
@
|
176
|
-
@
|
177
|
-
@
|
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)
|
178
91
|
elsif selected_file
|
179
|
-
@
|
180
|
-
@
|
92
|
+
@current_tab_folder.content {
|
93
|
+
@current_tab_item = tab_item { |the_tab_item|
|
181
94
|
text selected_file.name
|
182
95
|
fill_layout :horizontal
|
183
|
-
@
|
184
|
-
@
|
185
|
-
@
|
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 {
|
186
99
|
on_focus_gained {
|
187
100
|
tab_folder = the_text_editor.swt_widget.getParent.getParent
|
188
|
-
@
|
189
|
-
@
|
190
|
-
@
|
191
|
-
@
|
192
|
-
@
|
193
|
-
|
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')
|
194
107
|
}
|
195
108
|
}
|
196
109
|
on_swt_show {
|
197
|
-
@
|
198
|
-
@
|
199
|
-
@
|
200
|
-
@
|
201
|
-
@
|
202
|
-
|
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
|
203
116
|
async_exec {
|
204
|
-
@
|
117
|
+
@current_text_editor&.text_widget&.setFocus
|
205
118
|
}
|
206
119
|
}
|
207
120
|
}
|
208
|
-
@
|
209
|
-
@
|
210
|
-
@
|
211
|
-
@
|
212
|
-
}
|
213
|
-
@
|
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)
|
214
127
|
body_root.pack_same_size
|
215
128
|
end
|
216
|
-
@
|
129
|
+
@current_text_editor&.text_widget&.setFocus
|
217
130
|
end
|
218
131
|
end
|
219
|
-
observe(
|
132
|
+
observe(project_dir, 'selected_child') do
|
220
133
|
save_config
|
221
134
|
end
|
222
|
-
observe(
|
135
|
+
observe(project_dir, 'selected_child.caret_position') do
|
223
136
|
save_config
|
224
137
|
end
|
225
|
-
observe(
|
138
|
+
observe(project_dir, 'selected_child.top_pixel') do
|
226
139
|
save_config
|
227
140
|
end
|
228
141
|
load_config
|
@@ -233,15 +146,20 @@ module Glimmer
|
|
233
146
|
#
|
234
147
|
body {
|
235
148
|
shell {
|
236
|
-
text "Gladiator - #{::File.expand_path(
|
149
|
+
text "Gladiator - #{::File.expand_path(project_dir.path)}"
|
237
150
|
minimum_size 520, 250
|
238
|
-
size 1440, 900
|
239
|
-
grid_layout
|
151
|
+
size 1440, 900
|
152
|
+
grid_layout(2, false)
|
153
|
+
on_swt_show {
|
154
|
+
swt_widget.setSize(@config[:shell_width], @config[:shell_height]) if @config[:shell_width] && @config[:shell_height]
|
155
|
+
swt_widget.setLocation(@config[:shell_x], @config[:shell_y]) if @config[:shell_x] && @config[:shell_y]
|
156
|
+
@loaded_config = true
|
157
|
+
}
|
240
158
|
on_swt_close {
|
241
|
-
|
159
|
+
project_dir.selected_child&.write_dirty_content
|
242
160
|
}
|
243
161
|
on_widget_disposed {
|
244
|
-
|
162
|
+
project_dir.selected_child&.write_dirty_content
|
245
163
|
}
|
246
164
|
on_control_resized {
|
247
165
|
save_config
|
@@ -250,8 +168,69 @@ module Glimmer
|
|
250
168
|
save_config
|
251
169
|
}
|
252
170
|
on_shell_deactivated {
|
253
|
-
@
|
254
|
-
}
|
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
|
+
|
255
234
|
composite {
|
256
235
|
grid_layout 1, false
|
257
236
|
layout_data(:fill, :fill, false, true) {
|
@@ -259,16 +238,16 @@ module Glimmer
|
|
259
238
|
}
|
260
239
|
@filter_text = text {
|
261
240
|
layout_data :fill, :center, true, false
|
262
|
-
text bind(
|
241
|
+
text bind(project_dir, 'filter')
|
263
242
|
on_key_pressed { |key_event|
|
264
|
-
if key_event.keyCode == swt(:tab) ||
|
265
|
-
key_event.keyCode == swt(:cr) ||
|
243
|
+
if key_event.keyCode == swt(:tab) ||
|
244
|
+
key_event.keyCode == swt(:cr) ||
|
266
245
|
key_event.keyCode == swt(:arrow_up) ||
|
267
246
|
key_event.keyCode == swt(:arrow_down)
|
268
247
|
@list.swt_widget.select(0) if @list.swt_widget.getSelectionIndex() == -1
|
269
248
|
@list.swt_widget.setFocus
|
270
249
|
end
|
271
|
-
}
|
250
|
+
}
|
272
251
|
}
|
273
252
|
composite {
|
274
253
|
fill_layout(:vertical) {
|
@@ -276,15 +255,15 @@ module Glimmer
|
|
276
255
|
}
|
277
256
|
layout_data(:fill, :fill, true, true)
|
278
257
|
@list = list(:border, :h_scroll, :v_scroll) {
|
279
|
-
#visible bind(
|
280
|
-
selection bind(
|
258
|
+
#visible bind(self, 'project_dir.filter') {|f| !!f}
|
259
|
+
selection bind(project_dir, :filtered_path)
|
281
260
|
on_mouse_up {
|
282
|
-
|
261
|
+
project_dir.selected_child_path = @list.swt_widget.getSelection.first
|
283
262
|
}
|
284
263
|
on_key_pressed { |key_event|
|
285
264
|
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
286
|
-
|
287
|
-
@
|
265
|
+
project_dir.selected_child_path = @list.swt_widget.getSelection.first
|
266
|
+
@current_text_editor&.text_widget&.setFocus
|
288
267
|
end
|
289
268
|
}
|
290
269
|
drag_source(DND::DROP_COPY) {
|
@@ -294,11 +273,11 @@ module Glimmer
|
|
294
273
|
list = event.widget.getControl
|
295
274
|
event.data = list.getSelection.first
|
296
275
|
}
|
297
|
-
}
|
276
|
+
}
|
298
277
|
}
|
299
|
-
@
|
300
|
-
#visible bind(
|
301
|
-
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)
|
302
281
|
drag_source(DND::DROP_COPY) {
|
303
282
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
304
283
|
on_drag_set_data { |event|
|
@@ -312,21 +291,21 @@ module Glimmer
|
|
312
291
|
@open_menu_item = menu_item {
|
313
292
|
text 'Open'
|
314
293
|
on_widget_selected {
|
315
|
-
|
294
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
316
295
|
}
|
317
296
|
}
|
318
297
|
menu_item(:separator)
|
319
298
|
menu_item {
|
320
299
|
text 'Delete'
|
321
300
|
on_widget_selected {
|
322
|
-
tree_item = @
|
301
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
323
302
|
delete_tree_item(tree_item)
|
324
303
|
}
|
325
304
|
}
|
326
305
|
menu_item {
|
327
306
|
text 'Refresh'
|
328
307
|
on_widget_selected {
|
329
|
-
|
308
|
+
project_dir.refresh
|
330
309
|
}
|
331
310
|
}
|
332
311
|
menu_item {
|
@@ -349,25 +328,25 @@ module Glimmer
|
|
349
328
|
}
|
350
329
|
}
|
351
330
|
on_swt_menudetect { |event|
|
352
|
-
path = extract_tree_item_path(@
|
331
|
+
path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
353
332
|
@open_menu_item.swt_widget.setEnabled(!::Dir.exist?(path)) if path
|
354
333
|
}
|
355
334
|
on_mouse_up {
|
356
335
|
if Gladiator.drag_and_drop
|
357
336
|
Gladiator.drag_and_drop = false
|
358
337
|
else
|
359
|
-
|
360
|
-
@
|
338
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
339
|
+
@current_text_editor&.text_widget&.setFocus
|
361
340
|
end
|
362
341
|
}
|
363
342
|
on_key_pressed { |key_event|
|
364
343
|
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
365
|
-
|
366
|
-
@
|
344
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
345
|
+
@current_text_editor&.text_widget&.setFocus
|
367
346
|
end
|
368
347
|
}
|
369
348
|
on_paint_control {
|
370
|
-
root_item = @
|
349
|
+
root_item = @file_tree.swt_widget.getItems.first
|
371
350
|
if root_item && !root_item.getExpanded
|
372
351
|
root_item.setExpanded(true)
|
373
352
|
end
|
@@ -375,10 +354,11 @@ module Glimmer
|
|
375
354
|
}
|
376
355
|
}
|
377
356
|
|
378
|
-
|
379
|
-
@
|
380
|
-
@
|
381
|
-
@
|
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;
|
382
362
|
|
383
363
|
}
|
384
364
|
@editor_container = composite {
|
@@ -386,17 +366,21 @@ module Glimmer
|
|
386
366
|
layout_data :fill, :fill, true, true
|
387
367
|
composite {
|
388
368
|
grid_layout 3, false
|
389
|
-
|
369
|
+
|
390
370
|
# row 1
|
391
|
-
|
371
|
+
|
372
|
+
label {
|
373
|
+
text 'File:'
|
374
|
+
}
|
375
|
+
|
392
376
|
@file_path_label = styled_text(:none) {
|
393
377
|
layout_data(:fill, :fill, true, false) {
|
394
|
-
horizontal_span
|
378
|
+
horizontal_span 2
|
395
379
|
}
|
396
380
|
background color(:widget_background)
|
397
381
|
editable false
|
398
382
|
caret nil
|
399
|
-
text bind(
|
383
|
+
text bind(project_dir, 'selected_child.path')
|
400
384
|
on_mouse_up {
|
401
385
|
@file_path_label.swt_widget.selectAll
|
402
386
|
}
|
@@ -404,9 +388,9 @@ module Glimmer
|
|
404
388
|
@file_path_label.swt_widget.setSelection(0, 0)
|
405
389
|
}
|
406
390
|
}
|
407
|
-
|
391
|
+
|
408
392
|
# row 2
|
409
|
-
|
393
|
+
|
410
394
|
label {
|
411
395
|
text 'Line:'
|
412
396
|
}
|
@@ -414,55 +398,55 @@ module Glimmer
|
|
414
398
|
layout_data(:fill, :fill, true, false) {
|
415
399
|
minimum_width 400
|
416
400
|
}
|
417
|
-
text bind(
|
401
|
+
text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
|
418
402
|
on_key_pressed { |key_event|
|
419
403
|
if key_event.keyCode == swt(:cr)
|
420
|
-
@
|
404
|
+
@current_text_editor&.text_widget&.setFocus
|
421
405
|
end
|
422
406
|
}
|
423
407
|
on_verify_text { |event|
|
424
|
-
event.doit = !event.text.match(/^\d*$/).to_a.empty?
|
408
|
+
event.doit = !event.text.match(/^\d*$/).to_a.empty?
|
425
409
|
}
|
426
410
|
}
|
427
411
|
label
|
428
|
-
|
412
|
+
|
429
413
|
# row 3
|
430
414
|
|
431
415
|
label {
|
432
416
|
text 'Find:'
|
433
417
|
}
|
434
418
|
@find_text = text {
|
435
|
-
layout_data(:fill, :
|
419
|
+
layout_data(:fill, :center, true, false) {
|
436
420
|
minimum_width 400
|
437
421
|
}
|
438
|
-
text bind(
|
422
|
+
text bind(project_dir, 'selected_child.find_text')
|
439
423
|
on_key_pressed { |key_event|
|
440
424
|
if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
|
441
|
-
|
442
|
-
|
425
|
+
project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
|
426
|
+
project_dir.selected_child&.find_next
|
443
427
|
end
|
444
428
|
if key_event.keyCode == swt(:cr)
|
445
|
-
|
429
|
+
project_dir.selected_child&.find_next
|
446
430
|
end
|
447
431
|
}
|
448
432
|
}
|
449
433
|
composite {
|
450
434
|
row_layout
|
451
435
|
button(:check) {
|
452
|
-
selection bind(
|
436
|
+
selection bind(project_dir, 'selected_child.case_sensitive')
|
453
437
|
on_key_pressed { |key_event|
|
454
438
|
if key_event.keyCode == swt(:cr)
|
455
|
-
|
439
|
+
project_dir.selected_child&.find_next
|
456
440
|
end
|
457
|
-
}
|
441
|
+
}
|
458
442
|
}
|
459
443
|
label {
|
460
444
|
text 'Case-sensitive'
|
461
445
|
}
|
462
446
|
}
|
463
|
-
|
447
|
+
|
464
448
|
# row 4
|
465
|
-
|
449
|
+
|
466
450
|
label {
|
467
451
|
text 'Replace:'
|
468
452
|
}
|
@@ -470,14 +454,14 @@ module Glimmer
|
|
470
454
|
layout_data(:fill, :fill, true, false) {
|
471
455
|
minimum_width 300
|
472
456
|
}
|
473
|
-
text bind(
|
474
|
-
on_focus_gained {
|
475
|
-
|
457
|
+
text bind(project_dir, 'selected_child.replace_text')
|
458
|
+
on_focus_gained {
|
459
|
+
project_dir.selected_child&.ensure_find_next
|
476
460
|
}
|
477
461
|
on_key_pressed { |key_event|
|
478
462
|
if key_event.keyCode == swt(:cr)
|
479
|
-
if
|
480
|
-
Command.do(
|
463
|
+
if project_dir.selected_child
|
464
|
+
Command.do(project_dir.selected_child, :replace_next!)
|
481
465
|
end
|
482
466
|
end
|
483
467
|
}
|
@@ -490,7 +474,8 @@ module Glimmer
|
|
490
474
|
height_hint 480
|
491
475
|
}
|
492
476
|
sash_width 10
|
493
|
-
|
477
|
+
orientation bind(self, :split_orientation)
|
478
|
+
@current_tab_folder = tab_folder {
|
494
479
|
drag_source(DND::DROP_COPY) {
|
495
480
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
496
481
|
event_data = nil
|
@@ -505,90 +490,104 @@ module Glimmer
|
|
505
490
|
}
|
506
491
|
}
|
507
492
|
}
|
508
|
-
@
|
493
|
+
@current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
|
509
494
|
}
|
510
495
|
}
|
511
496
|
}
|
512
497
|
}
|
513
498
|
|
499
|
+
def load_config_ignore_paths
|
500
|
+
# TODO eliminate duplication with load_config
|
501
|
+
if ::File.exists?(@config_file_path)
|
502
|
+
config_yaml = ::File.read(@config_file_path)
|
503
|
+
return if config_yaml.to_s.strip.empty?
|
504
|
+
@config = YAML.load(config_yaml)
|
505
|
+
project_dir.ignore_paths = @config[:ignore_paths] if @config[:ignore_paths]
|
506
|
+
project_dir.ignore_paths ||= ['packages', 'tmp']
|
507
|
+
else
|
508
|
+
@loaded_config = true
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
514
512
|
def load_config
|
515
513
|
if ::File.exists?(@config_file_path)
|
516
514
|
config_yaml = ::File.read(@config_file_path)
|
517
515
|
return if config_yaml.to_s.strip.empty?
|
518
516
|
@config = YAML.load(config_yaml)
|
517
|
+
project_dir.ignore_paths = @config[:ignore_paths] if @config[:ignore_paths]
|
518
|
+
project_dir.ignore_paths ||= ['packages', 'tmp']
|
519
519
|
open_file_paths1 = @config[:open_file_paths1] || @config[:open_file_paths]
|
520
520
|
open_file_paths2 = @config[:open_file_paths2]
|
521
521
|
open_file_paths1.to_a.each do |file_path|
|
522
|
-
|
522
|
+
project_dir.selected_child_path = file_path
|
523
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])
|
524
526
|
Gladiator.drag = true
|
525
527
|
open_file_paths2.to_a.each do |file_path|
|
526
|
-
|
528
|
+
project_dir.selected_child_path = file_path
|
527
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])
|
528
532
|
Gladiator.drag = false
|
529
|
-
|
530
|
-
|
531
|
-
Dir.local_dir.selected_child&.top_index = @config[:top_index].to_i if @config[:top_index]
|
532
|
-
body_root.on_swt_show {
|
533
|
-
swt_widget.setSize(@config[:shell_width], @config[:shell_height]) if @config[:shell_width] && @config[:shell_height]
|
534
|
-
swt_widget.setLocation(@config[:shell_x], @config[:shell_y]) if @config[:shell_x] && @config[:shell_y]
|
535
|
-
@loaded_config = true
|
536
|
-
}
|
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]
|
537
535
|
else
|
538
536
|
@loaded_config = true
|
539
537
|
end
|
540
538
|
end
|
541
|
-
|
539
|
+
|
542
540
|
def save_config
|
543
541
|
return unless @loaded_config
|
544
|
-
child =
|
542
|
+
child = project_dir.selected_child
|
545
543
|
return if child.nil?
|
546
|
-
tab_folder1 = @tab_folder1 || @
|
544
|
+
tab_folder1 = @tab_folder1 || @current_tab_folder
|
547
545
|
tab_folder2 = @tab_folder2
|
548
|
-
open_file_paths1 = tab_folder1&.swt_widget&.items
|
549
|
-
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')}
|
550
548
|
@config = {
|
551
549
|
selected_child_path: child.path,
|
552
550
|
caret_position: child.caret_position,
|
553
|
-
|
551
|
+
top_pixel: child.top_pixel,
|
554
552
|
shell_width: swt_widget&.getBounds&.width,
|
555
553
|
shell_height: swt_widget&.getBounds&.height,
|
556
554
|
shell_x: swt_widget&.getBounds&.x,
|
557
555
|
shell_y: swt_widget&.getBounds&.y,
|
558
556
|
open_file_paths1: open_file_paths1,
|
559
557
|
open_file_paths2: open_file_paths2,
|
558
|
+
ignore_paths: project_dir.ignore_paths
|
560
559
|
}
|
561
560
|
config_yaml = YAML.dump(@config)
|
562
561
|
::File.write(@config_file_path, config_yaml) unless config_yaml.to_s.empty?
|
563
562
|
rescue => e
|
564
563
|
puts e.full_message
|
565
564
|
end
|
566
|
-
|
565
|
+
|
567
566
|
def close_tab_folder
|
568
567
|
if @tab_folder2 && !selected_tab_item
|
569
|
-
if @
|
568
|
+
if @current_tab_folder == @tab_folder2
|
570
569
|
@tab_folder2.swt_widget.dispose
|
571
|
-
@
|
570
|
+
@current_tab_folder = @tab_folder1
|
572
571
|
else
|
573
572
|
@tab_folder1.swt_widget.dispose
|
574
|
-
@
|
573
|
+
@current_tab_folder = @tab_folder1 = @tab_folder2
|
575
574
|
end
|
576
|
-
@tab_folder2 = nil
|
577
|
-
|
578
|
-
@
|
579
|
-
@
|
580
|
-
|
581
|
-
|
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
|
+
|
582
581
|
body_root.pack_same_size
|
583
582
|
end
|
584
583
|
end
|
585
|
-
|
584
|
+
|
586
585
|
def selected_tab_item
|
587
|
-
@
|
586
|
+
@current_tab_folder.swt_widget.getItems.detect { |ti| ti.getData('file_path') == project_dir.selected_child&.path }
|
588
587
|
end
|
589
588
|
|
590
589
|
def other_tab_items
|
591
|
-
@
|
590
|
+
@current_tab_folder.swt_widget.getItems.reject { |ti| ti.getData('file_path') == project_dir.selected_child&.path }
|
592
591
|
end
|
593
592
|
|
594
593
|
def extract_tree_item_path(tree_item)
|
@@ -596,14 +595,14 @@ module Glimmer
|
|
596
595
|
if tree_item.getParentItem
|
597
596
|
::File.join(extract_tree_item_path(tree_item.getParentItem), tree_item.getText)
|
598
597
|
else
|
599
|
-
|
598
|
+
project_dir.path
|
600
599
|
end
|
601
600
|
end
|
602
|
-
|
601
|
+
|
603
602
|
def select_tree_item
|
604
|
-
return unless
|
605
|
-
tree_items_to_select = @
|
606
|
-
@
|
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)
|
607
606
|
end
|
608
607
|
|
609
608
|
def delete_tree_item(tree_item)
|
@@ -611,27 +610,27 @@ module Glimmer
|
|
611
610
|
file = tree_item.getData
|
612
611
|
parent_path = ::File.dirname(file.path)
|
613
612
|
file.delete! # TODO consider supporting command undo/redo
|
614
|
-
|
615
|
-
parent_tree_item = @
|
616
|
-
@
|
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)
|
617
616
|
parent_tree_item.setExpanded(true)
|
618
|
-
# TODO close text editor tab
|
617
|
+
# TODO close text editor tab
|
619
618
|
# if file.is_a?(::File)
|
620
619
|
# close tab
|
621
620
|
# end
|
622
621
|
rescue => e
|
623
|
-
puts e.full_message
|
622
|
+
puts e.full_message
|
624
623
|
end
|
625
|
-
|
624
|
+
|
626
625
|
def rename_selected_tree_item
|
627
|
-
|
628
|
-
tree_item = @
|
626
|
+
project_dir.pause_refresh
|
627
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
629
628
|
rename_tree_item(tree_item)
|
630
629
|
end
|
631
|
-
|
630
|
+
|
632
631
|
def add_new_directory_to_selected_tree_item
|
633
|
-
|
634
|
-
tree_item = @
|
632
|
+
project_dir.pause_refresh
|
633
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
635
634
|
directory_path = extract_tree_item_path(tree_item)
|
636
635
|
return if directory_path.nil?
|
637
636
|
if !::Dir.exist?(directory_path)
|
@@ -640,15 +639,15 @@ module Glimmer
|
|
640
639
|
end
|
641
640
|
new_directory_path = ::File.expand_path(::File.join(directory_path, 'new_directory'))
|
642
641
|
FileUtils.mkdir_p(new_directory_path)
|
643
|
-
|
644
|
-
new_tree_item = @
|
645
|
-
@
|
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)
|
646
645
|
rename_tree_item(new_tree_item, true)
|
647
646
|
end
|
648
|
-
|
647
|
+
|
649
648
|
def add_new_file_to_selected_tree_item
|
650
|
-
|
651
|
-
tree_item = @
|
649
|
+
project_dir.pause_refresh
|
650
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
652
651
|
directory_path = extract_tree_item_path(tree_item)
|
653
652
|
if !::Dir.exist?(directory_path)
|
654
653
|
tree_item = tree_item.getParentItem
|
@@ -657,24 +656,24 @@ module Glimmer
|
|
657
656
|
new_file_path = ::File.expand_path(::File.join(directory_path, 'new_file'))
|
658
657
|
FileUtils.touch(new_file_path)
|
659
658
|
# TODO look into refreshing only the parent directory to avoid slowdown
|
660
|
-
|
661
|
-
new_tree_item = @
|
662
|
-
@
|
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)
|
663
662
|
rename_tree_item(new_tree_item, true)
|
664
663
|
end
|
665
|
-
|
664
|
+
|
666
665
|
def rename_tree_item(tree_item, open_afterwards = false)
|
667
|
-
@
|
666
|
+
@file_tree.edit_tree_item(
|
668
667
|
tree_item,
|
669
668
|
after_write: -> (edited_tree_item) {
|
670
669
|
file = edited_tree_item.getData
|
671
670
|
file_path = file.path
|
672
671
|
# TODO rename file in tab title
|
673
|
-
|
674
|
-
|
672
|
+
project_dir.selected_child_path = file_path if open_afterwards
|
673
|
+
project_dir.resume_refresh
|
675
674
|
},
|
676
675
|
after_cancel: -> {
|
677
|
-
|
676
|
+
project_dir.resume_refresh
|
678
677
|
}
|
679
678
|
)
|
680
679
|
end
|
@@ -684,5 +683,154 @@ module Glimmer
|
|
684
683
|
rescue => e
|
685
684
|
nil
|
686
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
|
687
835
|
end
|
688
|
-
end
|
836
|
+
end
|