glimmer-cs-gladiator 0.5.3 → 0.6.3
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/CHANGELOG.md +212 -0
- data/README.md +62 -27
- data/VERSION +1 -1
- data/glimmer-cs-gladiator.gemspec +70 -0
- data/images/glimmer-cs-gladiator-logo.png +0 -0
- data/lib/models/glimmer/gladiator/command.rb +41 -8
- data/lib/models/glimmer/gladiator/dir.rb +44 -16
- data/lib/models/glimmer/gladiator/file.rb +140 -71
- data/lib/views/glimmer/gladiator.rb +649 -253
- data/lib/views/glimmer/gladiator/text_editor.rb +123 -95
- metadata +16 -13
@@ -18,10 +18,14 @@ module Glimmer
|
|
18
18
|
APP_ROOT = ::File.expand_path('../../../..', __FILE__)
|
19
19
|
# TODO make sure COMMAND_KEY doesn't clash on Linux/Windows for CMD+CTRL shortcuts
|
20
20
|
COMMAND_KEY = OS.mac? ? :command : :ctrl
|
21
|
+
VERSION = ::File.read(::File.join(APP_ROOT, 'VERSION')).to_s.strip
|
22
|
+
LICENSE = ::File.read(::File.join(APP_ROOT, 'LICENSE.txt')).to_s.strip
|
23
|
+
ICON = ::File.expand_path(::File.join(APP_ROOT, 'images', 'glimmer-cs-gladiator-logo.png'))
|
21
24
|
|
22
25
|
class << self
|
23
26
|
attr_accessor :drag_and_drop
|
24
27
|
attr_accessor :drag
|
28
|
+
attr_accessor :startup
|
25
29
|
end
|
26
30
|
|
27
31
|
## Add options like the following to configure CustomShell by outside consumers
|
@@ -35,8 +39,26 @@ module Glimmer
|
|
35
39
|
@project_dir ||= Dir.new(project_dir_path)
|
36
40
|
end
|
37
41
|
|
38
|
-
|
39
|
-
|
42
|
+
def split_orientation=(value)
|
43
|
+
@split_orientation = value
|
44
|
+
save_config
|
45
|
+
if @loaded_config && !split_pane?
|
46
|
+
Gladiator.drag = true
|
47
|
+
child_path = project_dir.selected_child_path
|
48
|
+
project_dir.selected_child = nil
|
49
|
+
project_dir.selected_child_path = child_path
|
50
|
+
Gladiator.drag = false
|
51
|
+
end
|
52
|
+
@split_orientation
|
53
|
+
end
|
54
|
+
|
55
|
+
def split_pane?
|
56
|
+
pane_count = @tab_folder_sash_form&.children&.size
|
57
|
+
pane_count && pane_count > 1
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_reader :find_text, :tab_folder1, :tab_folder2, :filter_text, :rename_in_progress, :line_number_text, :file_tree, :split_orientation
|
61
|
+
attr_accessor :current_tab_item, :current_tab_folder, :current_text_editor
|
40
62
|
|
41
63
|
## Uncomment before_body block to pre-initialize variables to use in body
|
42
64
|
#
|
@@ -44,20 +66,29 @@ module Glimmer
|
|
44
66
|
before_body {
|
45
67
|
# TODO consider doing loading project files after displaying the GUI instead of holding it up before
|
46
68
|
project_dir #pre-initialize directory
|
47
|
-
at_exit do
|
69
|
+
TOPLEVEL_BINDING.receiver.send(:at_exit) do
|
48
70
|
project_dir.selected_child&.write_raw_dirty_content
|
49
71
|
end
|
50
72
|
Display.setAppName('Gladiator')
|
51
73
|
# make sure the display events are only hooked once if multiple gladiators are created
|
52
74
|
unless defined?(@@display)
|
53
75
|
@@display = display {
|
76
|
+
# TODO look into why a weird java dialog comes up on about (maybe a non-issue once packaged)
|
77
|
+
on_about {
|
78
|
+
display_about_dialog
|
79
|
+
}
|
54
80
|
on_swt_keydown { |key_event|
|
55
81
|
focused_gladiator = display.focus_control.shell&.get_data('custom_shell')
|
56
82
|
focused_gladiator.handle_display_shortcut(key_event) if !focused_gladiator.nil? && key_event.widget.shell == focused_gladiator&.swt_widget
|
57
83
|
}
|
84
|
+
on_swt_Close {
|
85
|
+
save_config
|
86
|
+
project_dir.selected_child&.write_dirty_content
|
87
|
+
}
|
58
88
|
}
|
59
89
|
end
|
60
90
|
|
91
|
+
@default_foreground = :dark_blue
|
61
92
|
@split_orientation = swt(:horizontal)
|
62
93
|
@config_file_path = ::File.join(project_dir.path, '.gladiator')
|
63
94
|
@config = {}
|
@@ -69,42 +100,52 @@ module Glimmer
|
|
69
100
|
#
|
70
101
|
after_body {
|
71
102
|
observe(project_dir, 'children') do
|
72
|
-
select_tree_item unless @rename_in_progress
|
103
|
+
select_tree_item unless @rename_in_progress || Gladiator.startup
|
73
104
|
end
|
74
105
|
observe(project_dir, 'selected_child') do |selected_file|
|
75
106
|
if selected_file
|
76
107
|
if Gladiator.drag && !@tab_folder2
|
77
108
|
@tab_folder1 = @current_tab_folder
|
109
|
+
async_exec { body_root.pack_same_size}
|
78
110
|
@tab_folder_sash_form.content {
|
79
111
|
@current_tab_folder = @tab_folder2 = tab_folder
|
80
112
|
@current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
|
81
113
|
}
|
82
114
|
end
|
83
|
-
select_tree_item unless @rename_in_progress
|
115
|
+
select_tree_item unless @rename_in_progress || Gladiator.startup
|
84
116
|
found_tab_item = selected_tab_item
|
85
117
|
if found_tab_item
|
86
118
|
@current_tab_folder.swt_widget.setSelection(found_tab_item)
|
87
119
|
@current_tab_item = found_tab_item.getData('proxy')
|
88
|
-
@current_text_editor = found_tab_item.getData('text_editor')
|
120
|
+
@current_text_editor = found_tab_item.getData('text_editor') unless found_tab_item.getData('text_editor').nil?
|
89
121
|
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
90
122
|
elsif selected_file
|
91
123
|
@current_tab_folder.content {
|
92
124
|
@current_tab_item = tab_item { |the_tab_item|
|
93
125
|
text selected_file.name
|
94
|
-
fill_layout
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
126
|
+
fill_layout(:horizontal) {
|
127
|
+
margin_width 0
|
128
|
+
margin_height 0
|
129
|
+
}
|
130
|
+
tab_folder = nil
|
131
|
+
the_text_editor = nil
|
132
|
+
the_tab_item.content {
|
133
|
+
@current_text_editor = the_text_editor = text_editor(project_dir: project_dir, file: selected_file)
|
134
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
135
|
+
the_tab_item.swt_tab_item.setData('text_editor', @current_text_editor)
|
136
|
+
@current_text_editor.text_proxy.content {
|
137
|
+
on_focus_gained {
|
138
|
+
tab_folder = the_text_editor.swt_widget.getParent.getParent
|
139
|
+
@current_tab_folder = tab_folder.getData('proxy')
|
140
|
+
@current_tab_item = the_tab_item
|
141
|
+
@current_text_editor = the_text_editor
|
142
|
+
@current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
|
143
|
+
@current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
|
144
|
+
project_dir.selected_child = @current_tab_item.swt_tab_item.getData('file')
|
145
|
+
}
|
106
146
|
}
|
107
147
|
}
|
148
|
+
|
108
149
|
on_swt_show {
|
109
150
|
@current_tab_item = the_tab_item
|
110
151
|
@current_text_editor = the_text_editor
|
@@ -116,14 +157,20 @@ module Glimmer
|
|
116
157
|
@current_text_editor&.text_widget&.setFocus
|
117
158
|
}
|
118
159
|
}
|
160
|
+
on_widget_disposed {
|
161
|
+
project_dir.selected_child&.write_dirty_content
|
162
|
+
tab_item_file = the_tab_item.swt_tab_item.get_data('file')
|
163
|
+
tab_item_file.close unless [@tab_folder1, @tab_folder2].compact.map(&:items).flatten(1).detect {|ti| ti.get_data('file') == tab_item_file}
|
164
|
+
}
|
119
165
|
}
|
120
166
|
@current_tab_item.swt_tab_item.setData('file_path', selected_file.path)
|
121
167
|
@current_tab_item.swt_tab_item.setData('file', selected_file)
|
122
|
-
@current_tab_item.swt_tab_item.setData('text_editor', @current_text_editor)
|
123
168
|
@current_tab_item.swt_tab_item.setData('proxy', @current_tab_item)
|
124
169
|
}
|
125
170
|
@current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
|
171
|
+
|
126
172
|
body_root.pack_same_size
|
173
|
+
async_exec { body_root.pack_same_size}
|
127
174
|
end
|
128
175
|
@current_text_editor&.text_widget&.setFocus
|
129
176
|
end
|
@@ -145,17 +192,31 @@ module Glimmer
|
|
145
192
|
#
|
146
193
|
body {
|
147
194
|
shell {
|
195
|
+
grid_layout(2, false)
|
148
196
|
text "Gladiator - #{::File.expand_path(project_dir.path)}"
|
149
197
|
minimum_size 520, 250
|
150
198
|
size 1440, 900
|
151
|
-
|
199
|
+
image ICON
|
200
|
+
|
152
201
|
on_swt_show {
|
153
202
|
swt_widget.setSize(@config[:shell_width], @config[:shell_height]) if @config[:shell_width] && @config[:shell_height]
|
154
203
|
swt_widget.setLocation(@config[:shell_x], @config[:shell_y]) if @config[:shell_x] && @config[:shell_y]
|
155
204
|
@loaded_config = true
|
156
205
|
}
|
157
|
-
|
206
|
+
|
207
|
+
on_shell_closed {
|
208
|
+
save_config
|
158
209
|
project_dir.selected_child&.write_dirty_content
|
210
|
+
if @tab_folder2
|
211
|
+
current_tab_folder.swt_widget.getItems.each do |tab_item|
|
212
|
+
tab_item.getData('proxy')&.dispose
|
213
|
+
end
|
214
|
+
close_tab_folder
|
215
|
+
end
|
216
|
+
current_tab_folder.swt_widget.getItems.each do |tab_item|
|
217
|
+
tab_item.getData('proxy')&.dispose
|
218
|
+
end
|
219
|
+
body_root.close unless current_tab_folder.swt_widget.getItems.empty?
|
159
220
|
}
|
160
221
|
on_widget_disposed {
|
161
222
|
project_dir.selected_child&.write_dirty_content
|
@@ -167,7 +228,13 @@ module Glimmer
|
|
167
228
|
save_config
|
168
229
|
}
|
169
230
|
on_shell_deactivated {
|
170
|
-
|
231
|
+
project_dir.selected_child&.write_dirty_content
|
232
|
+
}
|
233
|
+
|
234
|
+
display.swt_display.system_menu.items.find {|mi| mi.id == swt(:id_quit)}.add_selection_listener {
|
235
|
+
save_config
|
236
|
+
project_dir.selected_child&.write_dirty_content
|
237
|
+
exit(0)
|
171
238
|
}
|
172
239
|
|
173
240
|
menu_bar {
|
@@ -180,7 +247,7 @@ module Glimmer
|
|
180
247
|
begin
|
181
248
|
project_dir.selected_child_path = ''
|
182
249
|
rescue => e
|
183
|
-
|
250
|
+
puts e.full_message
|
184
251
|
end
|
185
252
|
}
|
186
253
|
}
|
@@ -198,11 +265,15 @@ module Glimmer
|
|
198
265
|
text '&Split'
|
199
266
|
menu_item(:radio) {
|
200
267
|
text '&Horizontal'
|
201
|
-
selection bind(self, :split_orientation,
|
268
|
+
selection bind(self, :split_orientation,
|
269
|
+
on_read: ->(o) { split_pane? && o == swt(:horizontal) },
|
270
|
+
on_write: ->(b) { b ? swt(:horizontal) : swt(:vertical) })
|
202
271
|
}
|
203
272
|
menu_item(:radio) {
|
204
273
|
text '&Vertical'
|
205
|
-
selection bind(self, :split_orientation,
|
274
|
+
selection bind(self, :split_orientation,
|
275
|
+
on_read: ->(o) { split_pane? && o == swt(:vertical) },
|
276
|
+
on_write: ->(b) { b ? swt(:vertical) : swt(:horizontal) })
|
206
277
|
}
|
207
278
|
}
|
208
279
|
}
|
@@ -228,129 +299,227 @@ module Glimmer
|
|
228
299
|
}
|
229
300
|
}
|
230
301
|
}
|
302
|
+
menu {
|
303
|
+
text '&Help'
|
304
|
+
menu_item {
|
305
|
+
text '&About'
|
306
|
+
on_widget_selected {
|
307
|
+
display_about_dialog
|
308
|
+
}
|
309
|
+
}
|
310
|
+
}
|
231
311
|
}
|
232
312
|
|
233
313
|
composite {
|
234
|
-
grid_layout
|
314
|
+
grid_layout(1, false) {
|
315
|
+
margin_width 0
|
316
|
+
margin_height 0
|
317
|
+
}
|
318
|
+
|
235
319
|
layout_data(:fill, :fill, false, true) {
|
236
320
|
width_hint 300
|
237
321
|
}
|
238
|
-
@
|
239
|
-
layout_data :fill, :center, true, false
|
240
|
-
text bind(project_dir, 'filter')
|
241
|
-
on_key_pressed { |key_event|
|
242
|
-
if key_event.keyCode == swt(:tab) ||
|
243
|
-
key_event.keyCode == swt(:cr) ||
|
244
|
-
key_event.keyCode == swt(:arrow_up) ||
|
245
|
-
key_event.keyCode == swt(:arrow_down)
|
246
|
-
@list.swt_widget.select(0) if @list.swt_widget.getSelectionIndex() == -1
|
247
|
-
@list.swt_widget.setFocus
|
248
|
-
end
|
249
|
-
}
|
250
|
-
}
|
251
|
-
composite {
|
252
|
-
fill_layout(:vertical) {
|
253
|
-
spacing 5
|
254
|
-
}
|
322
|
+
@side_bar_sash_form = sash_form(:vertical) {
|
255
323
|
layout_data(:fill, :fill, true, true)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
324
|
+
sash_width 4
|
325
|
+
|
326
|
+
resize_expand_items = lambda { |event=nil|
|
327
|
+
@file_lookup_expand_item&.swt_expand_item&.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
|
328
|
+
@file_explorer_expand_item&.swt_expand_item&.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
|
329
|
+
}
|
330
|
+
|
331
|
+
@file_lookup_expand_bar = expand_bar {
|
332
|
+
layout_data :fill, :fill, true, true
|
333
|
+
font height: 17, style: :bold
|
334
|
+
foreground @default_foreground
|
335
|
+
|
336
|
+
on_swt_show {
|
337
|
+
@file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
|
267
338
|
}
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
339
|
+
|
340
|
+
on_swt_Resize(&resize_expand_items)
|
341
|
+
|
342
|
+
@file_lookup_expand_item = expand_item {
|
343
|
+
grid_layout {
|
344
|
+
margin_width 0
|
345
|
+
margin_height 0
|
346
|
+
}
|
347
|
+
text 'File Lookup'
|
348
|
+
height display.bounds.height
|
349
|
+
|
350
|
+
@filter_text = text {
|
351
|
+
layout_data :fill, :center, true, false
|
352
|
+
text bind(project_dir, 'filter')
|
353
|
+
on_key_pressed { |key_event|
|
354
|
+
if key_event.keyCode == swt(:tab) ||
|
355
|
+
key_event.keyCode == swt(:cr) ||
|
356
|
+
key_event.keyCode == swt(:arrow_up) ||
|
357
|
+
key_event.keyCode == swt(:arrow_down)
|
358
|
+
@file_lookup_list.swt_widget.select(0) if @file_lookup_list.swt_widget.getSelectionIndex() == -1
|
359
|
+
@file_lookup_list.swt_widget.setFocus
|
360
|
+
end
|
361
|
+
}
|
362
|
+
}
|
363
|
+
|
364
|
+
@file_lookup_list = list(:border, :h_scroll, :v_scroll) {
|
365
|
+
layout_data :fill, :fill, true, true
|
366
|
+
#visible bind(self, 'project_dir.filter') {|f| !!f}
|
367
|
+
selection bind(project_dir, :filtered_path)
|
368
|
+
foreground @default_foreground
|
369
|
+
on_mouse_up {
|
370
|
+
project_dir.selected_child_path = @file_lookup_list.swt_widget.getSelection.first
|
371
|
+
}
|
372
|
+
on_key_pressed { |key_event|
|
373
|
+
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
374
|
+
project_dir.selected_child_path = @file_lookup_list.swt_widget.getSelection.first
|
375
|
+
@current_text_editor&.text_widget&.setFocus
|
376
|
+
end
|
377
|
+
}
|
378
|
+
drag_source(DND::DROP_COPY) {
|
379
|
+
transfer [TextTransfer.getInstance].to_java(Transfer)
|
380
|
+
on_drag_set_data { |event|
|
381
|
+
Gladiator.drag = true
|
382
|
+
list = event.widget.getControl
|
383
|
+
event.data = list.getSelection.first
|
384
|
+
}
|
385
|
+
}
|
274
386
|
}
|
275
387
|
}
|
388
|
+
|
389
|
+
on_item_collapsed { |event|
|
390
|
+
if @file_explorer_expand_item.swt_expand_item.get_expanded
|
391
|
+
@file_lookup_expand_item_height = @file_lookup_expand_item.swt_expand_item.height
|
392
|
+
@file_lookup_expand_item.swt_expand_item.height = 0
|
393
|
+
@file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
|
394
|
+
@file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
|
395
|
+
@side_bar_sash_form.weights = [@file_lookup_expand_item.swt_expand_item.header_height, @file_lookup_expand_bar_height + @file_explorer_expand_bar_height - @file_lookup_expand_item.swt_expand_item.header_height]
|
396
|
+
end
|
397
|
+
}
|
398
|
+
|
399
|
+
on_item_expanded {
|
400
|
+
@file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_item_height if @file_lookup_expand_item_height
|
401
|
+
@side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
|
402
|
+
}
|
403
|
+
|
276
404
|
}
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
tree_item = tree.getSelection.first
|
286
|
-
event.data = tree_item.getData.path
|
287
|
-
}
|
405
|
+
|
406
|
+
@file_explorer_expand_bar = expand_bar {
|
407
|
+
layout_data :fill, :fill, true, true
|
408
|
+
font height: 17, style: :bold
|
409
|
+
foreground @default_foreground
|
410
|
+
|
411
|
+
on_swt_show {
|
412
|
+
@file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
|
288
413
|
}
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
414
|
+
|
415
|
+
on_swt_Resize(&resize_expand_items)
|
416
|
+
|
417
|
+
@file_explorer_expand_item = expand_item {
|
418
|
+
grid_layout {
|
419
|
+
margin_width 0
|
420
|
+
margin_height 0
|
295
421
|
}
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
422
|
+
text 'File Explorer'
|
423
|
+
height display.bounds.height
|
424
|
+
|
425
|
+
@file_tree = tree(:virtual, :border, :h_scroll, :v_scroll) {
|
426
|
+
layout_data :fill, :fill, true, true
|
427
|
+
#visible bind(self, 'project_dir.filter') {|f| !f}
|
428
|
+
items bind(self, :project_dir), tree_properties(children: :children, text: :name)
|
429
|
+
foreground @default_foreground
|
430
|
+
drag_source(DND::DROP_COPY) {
|
431
|
+
transfer [TextTransfer.getInstance].to_java(Transfer)
|
432
|
+
on_drag_set_data { |event|
|
433
|
+
Gladiator.drag = true
|
434
|
+
tree = event.widget.getControl
|
435
|
+
tree_item = tree.getSelection.first
|
436
|
+
event.data = tree_item.getData.path
|
437
|
+
}
|
302
438
|
}
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
439
|
+
menu {
|
440
|
+
@open_menu_item = menu_item {
|
441
|
+
text 'Open'
|
442
|
+
on_widget_selected {
|
443
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
444
|
+
}
|
445
|
+
}
|
446
|
+
menu_item(:separator)
|
447
|
+
menu_item {
|
448
|
+
text 'Delete'
|
449
|
+
on_widget_selected {
|
450
|
+
tree_item = @file_tree.swt_widget.getSelection.first
|
451
|
+
delete_tree_item(tree_item)
|
452
|
+
}
|
453
|
+
}
|
454
|
+
menu_item {
|
455
|
+
text 'Refresh'
|
456
|
+
on_widget_selected {
|
457
|
+
project_dir.refresh
|
458
|
+
}
|
459
|
+
}
|
460
|
+
menu_item {
|
461
|
+
text 'Rename'
|
462
|
+
on_widget_selected {
|
463
|
+
rename_selected_tree_item
|
464
|
+
}
|
465
|
+
}
|
466
|
+
menu_item {
|
467
|
+
text 'New Directory'
|
468
|
+
on_widget_selected {
|
469
|
+
add_new_directory_to_selected_tree_item
|
470
|
+
}
|
471
|
+
}
|
472
|
+
menu_item {
|
473
|
+
text 'New File'
|
474
|
+
on_widget_selected {
|
475
|
+
add_new_file_to_selected_tree_item
|
476
|
+
}
|
477
|
+
}
|
308
478
|
}
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
on_widget_selected {
|
313
|
-
rename_selected_tree_item
|
479
|
+
on_swt_menudetect { |event|
|
480
|
+
path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
|
481
|
+
@open_menu_item.swt_widget.setEnabled(!::Dir.exist?(path)) if path
|
314
482
|
}
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
483
|
+
on_mouse_up {
|
484
|
+
if Gladiator.drag_and_drop
|
485
|
+
Gladiator.drag_and_drop = false
|
486
|
+
else
|
487
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
488
|
+
@current_text_editor&.text_widget&.setFocus
|
489
|
+
end
|
320
490
|
}
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
491
|
+
on_key_pressed { |key_event|
|
492
|
+
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
493
|
+
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
494
|
+
@current_text_editor&.text_widget&.setFocus
|
495
|
+
end
|
496
|
+
}
|
497
|
+
on_paint_control {
|
498
|
+
root_item = @file_tree.swt_widget.getItems.first
|
499
|
+
if root_item && !root_item.getExpanded
|
500
|
+
root_item.setExpanded(true)
|
501
|
+
end
|
326
502
|
}
|
327
503
|
}
|
328
504
|
}
|
329
|
-
|
330
|
-
|
331
|
-
@
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
338
|
-
@current_text_editor&.text_widget&.setFocus
|
339
|
-
end
|
340
|
-
}
|
341
|
-
on_key_pressed { |key_event|
|
342
|
-
if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
|
343
|
-
project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
|
344
|
-
@current_text_editor&.text_widget&.setFocus
|
505
|
+
|
506
|
+
on_item_collapsed { |event|
|
507
|
+
if @file_lookup_expand_item.swt_expand_item.get_expanded
|
508
|
+
@file_explorer_expand_item_height = @file_explorer_expand_item.swt_expand_item.height
|
509
|
+
@file_explorer_expand_item.swt_expand_item.height = 0
|
510
|
+
@file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
|
511
|
+
@file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
|
512
|
+
@side_bar_sash_form.weights = [@file_explorer_expand_bar_height + @file_explorer_expand_bar_height - @file_explorer_expand_item.swt_expand_item.header_height, @file_explorer_expand_item.swt_expand_item.header_height]
|
345
513
|
end
|
346
514
|
}
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
end
|
515
|
+
|
516
|
+
on_item_expanded {
|
517
|
+
@file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_item_height if @file_explorer_expand_item_height
|
518
|
+
@side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
|
352
519
|
}
|
520
|
+
|
353
521
|
}
|
522
|
+
|
354
523
|
}
|
355
524
|
|
356
525
|
# TODO see if you could replace some of this with Glimmer DSL/API syntax
|
@@ -360,120 +529,224 @@ module Glimmer
|
|
360
529
|
@file_tree_editor.minimumHeight = 20;
|
361
530
|
|
362
531
|
}
|
363
|
-
|
364
|
-
|
532
|
+
|
533
|
+
composite {
|
534
|
+
grid_layout(1, false) {
|
535
|
+
margin_width 0
|
536
|
+
margin_height 0
|
537
|
+
}
|
365
538
|
layout_data :fill, :fill, true, true
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
539
|
+
|
540
|
+
@navigation_expand_bar = expand_bar {
|
541
|
+
layout_data :fill, :top, true, false
|
542
|
+
font height: 17, style: :bold
|
543
|
+
foreground @default_foreground
|
544
|
+
|
545
|
+
@navigation_expand_item = expand_item {
|
546
|
+
text 'Navigation'
|
547
|
+
height 115
|
370
548
|
|
371
|
-
|
372
|
-
|
373
|
-
}
|
374
|
-
|
375
|
-
@file_path_label = styled_text(:none) {
|
376
|
-
layout_data(:fill, :fill, true, false) {
|
377
|
-
horizontal_span 2
|
549
|
+
grid_layout(5, false) {
|
550
|
+
margin_right 5
|
378
551
|
}
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
552
|
+
|
553
|
+
stat_font = {name: 'Consolas', height: OS.mac? ? 15 : 12}
|
554
|
+
|
555
|
+
# row 1
|
556
|
+
|
557
|
+
label {
|
558
|
+
layout_data(:left, :center, false, false)
|
559
|
+
text 'File:'
|
560
|
+
foreground @default_foreground
|
385
561
|
}
|
386
|
-
|
387
|
-
|
562
|
+
|
563
|
+
@file_path_label = styled_text(:none) {
|
564
|
+
layout_data(:fill, :center, true, false) {
|
565
|
+
horizontal_span 2
|
566
|
+
}
|
567
|
+
background color(:widget_background)
|
568
|
+
foreground @default_foreground
|
569
|
+
editable false
|
570
|
+
caret nil
|
571
|
+
text bind(project_dir, 'selected_child.path')
|
572
|
+
on_mouse_up {
|
573
|
+
@file_path_label.swt_widget.selectAll
|
574
|
+
}
|
575
|
+
on_focus_lost {
|
576
|
+
@file_path_label.swt_widget.setSelection(0, 0)
|
577
|
+
}
|
388
578
|
}
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
text 'Line:'
|
395
|
-
}
|
396
|
-
@line_number_text = text {
|
397
|
-
layout_data(:fill, :fill, true, false) {
|
398
|
-
minimum_width 400
|
399
|
-
}
|
400
|
-
text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
|
401
|
-
on_key_pressed { |key_event|
|
402
|
-
if key_event.keyCode == swt(:cr)
|
403
|
-
@current_text_editor&.text_widget&.setFocus
|
404
|
-
end
|
579
|
+
|
580
|
+
label {
|
581
|
+
layout_data(:left, :center, false, false)
|
582
|
+
text 'Caret Position:'
|
583
|
+
foreground @default_foreground
|
405
584
|
}
|
406
|
-
|
407
|
-
|
585
|
+
label(:right) {
|
586
|
+
layout_data(:fill, :center, true, false)
|
587
|
+
text bind(project_dir, 'selected_child.caret_position')
|
588
|
+
foreground @default_foreground
|
589
|
+
font stat_font
|
408
590
|
}
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
}
|
417
|
-
@find_text = text {
|
418
|
-
layout_data(:fill, :center, true, false) {
|
419
|
-
minimum_width 400
|
420
|
-
}
|
421
|
-
text bind(project_dir, 'selected_child.find_text')
|
422
|
-
on_key_pressed { |key_event|
|
423
|
-
if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
|
424
|
-
project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
|
425
|
-
project_dir.selected_child&.find_next
|
426
|
-
end
|
427
|
-
if key_event.keyCode == swt(:cr)
|
428
|
-
project_dir.selected_child&.find_next
|
429
|
-
end
|
591
|
+
|
592
|
+
# row 2
|
593
|
+
|
594
|
+
label {
|
595
|
+
layout_data(:left, :center, false, false)
|
596
|
+
text 'Line:'
|
597
|
+
foreground @default_foreground
|
430
598
|
}
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
599
|
+
@line_number_text = text {
|
600
|
+
layout_data(:fill, :center, true, false) {
|
601
|
+
minimum_width 400
|
602
|
+
}
|
603
|
+
text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
|
604
|
+
foreground @default_foreground
|
605
|
+
font stat_font
|
436
606
|
on_key_pressed { |key_event|
|
607
|
+
if key_event.keyCode == swt(:cr)
|
608
|
+
@current_text_editor&.text_widget&.setFocus
|
609
|
+
end
|
610
|
+
}
|
611
|
+
on_verify_text { |event|
|
612
|
+
event.doit = !event.text.match(/^\d*$/).to_a.empty?
|
613
|
+
}
|
614
|
+
}
|
615
|
+
label # filler
|
616
|
+
|
617
|
+
label {
|
618
|
+
layout_data(:left, :center, false, false)
|
619
|
+
text 'Line Position:'
|
620
|
+
foreground @default_foreground
|
621
|
+
}
|
622
|
+
label(:right) {
|
623
|
+
layout_data(:fill, :center, true, false)
|
624
|
+
text bind(project_dir, 'selected_child.line_position')
|
625
|
+
foreground @default_foreground
|
626
|
+
font stat_font
|
627
|
+
}
|
628
|
+
|
629
|
+
# row 3
|
630
|
+
|
631
|
+
label {
|
632
|
+
layout_data(:left, :center, false, false)
|
633
|
+
text 'Find:'
|
634
|
+
foreground @default_foreground
|
635
|
+
}
|
636
|
+
@find_text = text {
|
637
|
+
layout_data(:fill, :center, true, false) {
|
638
|
+
minimum_width 400
|
639
|
+
}
|
640
|
+
text bind(project_dir, 'selected_child.find_text')
|
641
|
+
foreground @default_foreground
|
642
|
+
font stat_font
|
643
|
+
on_key_pressed { |key_event|
|
644
|
+
if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
|
645
|
+
project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
|
646
|
+
project_dir.selected_child&.find_next
|
647
|
+
end
|
437
648
|
if key_event.keyCode == swt(:cr)
|
438
649
|
project_dir.selected_child&.find_next
|
439
650
|
end
|
440
651
|
}
|
441
652
|
}
|
653
|
+
composite {
|
654
|
+
layout_data(:left, :center, true, false)
|
655
|
+
row_layout {
|
656
|
+
margin_width 0
|
657
|
+
margin_height 0
|
658
|
+
}
|
659
|
+
button(:check) {
|
660
|
+
selection bind(project_dir, 'selected_child.case_sensitive')
|
661
|
+
on_key_pressed { |key_event|
|
662
|
+
if key_event.keyCode == swt(:cr)
|
663
|
+
project_dir.selected_child&.find_next
|
664
|
+
end
|
665
|
+
}
|
666
|
+
}
|
667
|
+
label {
|
668
|
+
text 'Case-sensitive'
|
669
|
+
foreground @default_foreground
|
670
|
+
}
|
671
|
+
}
|
672
|
+
|
673
|
+
label {
|
674
|
+
layout_data(:left, :center, false, false)
|
675
|
+
text 'Selection Count:'
|
676
|
+
foreground @default_foreground
|
677
|
+
}
|
678
|
+
label(:right) {
|
679
|
+
layout_data(:fill, :center, true, false)
|
680
|
+
text bind(project_dir, 'selected_child.selection_count')
|
681
|
+
foreground @default_foreground
|
682
|
+
font stat_font
|
683
|
+
}
|
684
|
+
|
685
|
+
# row 4
|
686
|
+
|
442
687
|
label {
|
443
|
-
|
688
|
+
layout_data(:left, :center, false, false)
|
689
|
+
text 'Replace:'
|
690
|
+
foreground @default_foreground
|
691
|
+
}
|
692
|
+
@replace_text = text {
|
693
|
+
layout_data(:fill, :center, true, false) {
|
694
|
+
minimum_width 400
|
695
|
+
}
|
696
|
+
text bind(project_dir, 'selected_child.replace_text')
|
697
|
+
foreground @default_foreground
|
698
|
+
font stat_font
|
699
|
+
on_focus_gained {
|
700
|
+
project_dir.selected_child&.ensure_find_next
|
701
|
+
}
|
702
|
+
on_key_pressed { |key_event|
|
703
|
+
if key_event.keyCode == swt(:cr)
|
704
|
+
if project_dir.selected_child
|
705
|
+
Command.do(project_dir.selected_child, :replace_next!)
|
706
|
+
end
|
707
|
+
end
|
708
|
+
}
|
709
|
+
}
|
710
|
+
label # filler
|
711
|
+
label {
|
712
|
+
layout_data(:left, :center, false, false)
|
713
|
+
text 'Top Pixel:'
|
714
|
+
foreground @default_foreground
|
715
|
+
}
|
716
|
+
label(:right) {
|
717
|
+
layout_data(:fill, :center, true, false)
|
718
|
+
text bind(project_dir, 'selected_child.top_pixel')
|
719
|
+
foreground @default_foreground
|
720
|
+
font stat_font
|
444
721
|
}
|
445
722
|
}
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
723
|
+
|
724
|
+
on_item_collapsed {
|
725
|
+
@navigation_expand_item_height = @navigation_expand_item.swt_expand_item.height if @navigation_expand_item.swt_expand_item.height > 0
|
726
|
+
@navigation_expand_item.swt_expand_item.height = 0
|
727
|
+
async_exec {
|
728
|
+
body_root.pack_same_size
|
729
|
+
}
|
451
730
|
}
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
on_focus_gained {
|
458
|
-
project_dir.selected_child&.ensure_find_next
|
459
|
-
}
|
460
|
-
on_key_pressed { |key_event|
|
461
|
-
if key_event.keyCode == swt(:cr)
|
462
|
-
if project_dir.selected_child
|
463
|
-
Command.do(project_dir.selected_child, :replace_next!)
|
464
|
-
end
|
465
|
-
end
|
731
|
+
|
732
|
+
on_item_expanded {
|
733
|
+
@navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
|
734
|
+
async_exec {
|
735
|
+
body_root.pack_same_size
|
466
736
|
}
|
467
737
|
}
|
468
|
-
|
738
|
+
|
469
739
|
}
|
740
|
+
|
470
741
|
@tab_folder_sash_form = sash_form {
|
471
742
|
layout_data(:fill, :fill, true, true) {
|
472
|
-
width_hint
|
473
|
-
height_hint
|
743
|
+
width_hint 768
|
744
|
+
height_hint 576
|
745
|
+
minimum_width 768
|
746
|
+
minimum_height 576
|
474
747
|
}
|
475
748
|
sash_width 10
|
476
|
-
orientation bind(self, :split_orientation)
|
749
|
+
orientation bind(self, :split_orientation) {|value| async_exec { body_root.pack_same_size}; value}
|
477
750
|
@current_tab_folder = tab_folder {
|
478
751
|
drag_source(DND::DROP_COPY) {
|
479
752
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
@@ -517,20 +790,77 @@ module Glimmer
|
|
517
790
|
project_dir.ignore_paths ||= ['packages', 'tmp']
|
518
791
|
open_file_paths1 = @config[:open_file_paths1] || @config[:open_file_paths]
|
519
792
|
open_file_paths2 = @config[:open_file_paths2]
|
520
|
-
|
521
|
-
|
793
|
+
self.split_orientation = swt(@config[:split_orientation] || :horizontal) rescue swt(:horizontal)
|
794
|
+
if @progress_bar_shell.nil?
|
795
|
+
@progress_bar_shell = shell(body_root, :title) {
|
796
|
+
text 'Gladiator'
|
797
|
+
fill_layout(:vertical) {
|
798
|
+
margin_width 15
|
799
|
+
margin_height 15
|
800
|
+
spacing 5
|
801
|
+
}
|
802
|
+
label(:center) {
|
803
|
+
text "Opening Last Open Files"
|
804
|
+
font height: 20
|
805
|
+
}
|
806
|
+
# @progress_bar = progress_bar(:horizontal, :indeterminate)
|
807
|
+
}
|
808
|
+
async_exec {
|
809
|
+
@progress_bar_shell.open
|
810
|
+
}
|
522
811
|
end
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
812
|
+
open_file_paths1.to_a.each do |file_path|
|
813
|
+
async_exec {
|
814
|
+
Gladiator.drag = false
|
815
|
+
Gladiator.startup = file_path != open_file_paths1.to_a[-1]
|
816
|
+
project_dir.selected_child_path = file_path
|
817
|
+
}
|
528
818
|
end
|
529
819
|
# TODO replace the next line with one that selects the visible tab
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
820
|
+
async_exec {
|
821
|
+
# TODO check why this is not working
|
822
|
+
if open_file_paths1.to_a.include?(@config[:selected_child_path])
|
823
|
+
Gladiator.drag = false
|
824
|
+
Gladiator.startup = false
|
825
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path]
|
826
|
+
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]
|
827
|
+
project_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
|
828
|
+
end
|
829
|
+
}
|
830
|
+
async_exec {
|
831
|
+
open_file_paths2.to_a.each do |file_path|
|
832
|
+
async_exec {
|
833
|
+
Gladiator.drag = true
|
834
|
+
Gladiator.startup = file_path != open_file_paths2.to_a[-1]
|
835
|
+
project_dir.selected_child_path = file_path
|
836
|
+
}
|
837
|
+
end
|
838
|
+
# TODO replace the next line with one that selects the visible tab
|
839
|
+
async_exec {
|
840
|
+
# TODO check why this is not working
|
841
|
+
if open_file_paths2.to_a.include?(@config[:selected_child_path])
|
842
|
+
Gladiator.drag = true
|
843
|
+
Gladiator.startup = false
|
844
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path]
|
845
|
+
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]
|
846
|
+
project_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
|
847
|
+
end
|
848
|
+
}
|
849
|
+
async_exec {
|
850
|
+
Gladiator.drag = false
|
851
|
+
@progress_bar_shell&.close
|
852
|
+
@progress_bar_shell = nil
|
853
|
+
@loaded_config = true
|
854
|
+
}
|
855
|
+
}
|
856
|
+
async_exec {
|
857
|
+
Thread.new {
|
858
|
+
all_files = open_file_paths1.to_a + open_file_paths2.to_a
|
859
|
+
all_files.each do |file|
|
860
|
+
project_dir.find_child_file(file)&.dirty_content
|
861
|
+
end
|
862
|
+
}
|
863
|
+
}
|
534
864
|
else
|
535
865
|
@loaded_config = true
|
536
866
|
end
|
@@ -546,6 +876,7 @@ module Glimmer
|
|
546
876
|
open_file_paths2 = tab_folder2&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
|
547
877
|
@config = {
|
548
878
|
selected_child_path: child.path,
|
879
|
+
split_orientation: split_orientation == swt(:horizontal) ? 'horizontal' : 'vertical',
|
549
880
|
caret_position: child.caret_position,
|
550
881
|
top_pixel: child.top_pixel,
|
551
882
|
shell_width: swt_widget&.getBounds&.width,
|
@@ -576,8 +907,8 @@ module Glimmer
|
|
576
907
|
@current_tab_item = @current_tab_folder.swt_widget.getData('selected_tab_item')
|
577
908
|
@current_text_editor = @current_tab_item.swt_tab_item.getData('text_editor')
|
578
909
|
project_dir.selected_child = @current_tab_item.swt_tab_item.getData('file')
|
579
|
-
|
580
|
-
body_root.pack_same_size
|
910
|
+
|
911
|
+
async_exec { body_root.pack_same_size }
|
581
912
|
end
|
582
913
|
end
|
583
914
|
|
@@ -612,17 +943,24 @@ module Glimmer
|
|
612
943
|
return if tree_item.nil?
|
613
944
|
file = tree_item.getData
|
614
945
|
parent_path = ::File.dirname(file.path)
|
946
|
+
if file.is_a?(Gladiator::Dir)
|
947
|
+
file_paths = file.all_children.select {|f| f.is_a?(Gladiator::File)}.map(&:path)
|
948
|
+
file.remove_all_observers
|
949
|
+
else
|
950
|
+
file_paths = [file.path]
|
951
|
+
end
|
952
|
+
file_paths.each do |file_path|
|
953
|
+
found_tab_item = find_tab_item(file_path)
|
954
|
+
if found_tab_item
|
955
|
+
project_dir.selected_child_path_history.delete(found_tab_item.getData('file_path'))
|
956
|
+
found_tab_item.getData('proxy')&.dispose
|
957
|
+
end
|
958
|
+
end
|
615
959
|
file.delete! # TODO consider supporting command undo/redo
|
616
960
|
project_dir.refresh(async: false)
|
617
961
|
parent_tree_item = @file_tree.depth_first_search {|ti| ti.getData.path == parent_path}.first
|
618
962
|
@file_tree.swt_widget.showItem(parent_tree_item)
|
619
963
|
parent_tree_item.setExpanded(true)
|
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
|
626
964
|
rescue => e
|
627
965
|
puts e.full_message
|
628
966
|
end
|
@@ -691,6 +1029,9 @@ module Glimmer
|
|
691
1029
|
else
|
692
1030
|
selected_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
693
1031
|
end
|
1032
|
+
async_exec {
|
1033
|
+
@file_tree.swt_widget.showItem(edited_tree_item)
|
1034
|
+
}
|
694
1035
|
end
|
695
1036
|
project_dir.resume_refresh
|
696
1037
|
},
|
@@ -708,8 +1049,9 @@ module Glimmer
|
|
708
1049
|
|
709
1050
|
def open_project
|
710
1051
|
selected_directory = directory_dialog.open
|
711
|
-
|
712
|
-
|
1052
|
+
return if selected_directory.nil?
|
1053
|
+
@progress_bar_shell = shell(body_root, :title) {
|
1054
|
+
text 'Gladiator'
|
713
1055
|
fill_layout(:vertical) {
|
714
1056
|
margin_width 15
|
715
1057
|
margin_height 15
|
@@ -721,29 +1063,61 @@ module Glimmer
|
|
721
1063
|
}
|
722
1064
|
# @progress_bar = progress_bar(:horizontal, :indeterminate)
|
723
1065
|
}
|
724
|
-
|
725
|
-
|
726
|
-
@progress_bar_shell.open
|
727
|
-
}
|
1066
|
+
async_exec {
|
1067
|
+
@progress_bar_shell.open
|
728
1068
|
}
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
}
|
1069
|
+
async_exec {
|
1070
|
+
gladiator(project_dir_path: selected_directory) {
|
1071
|
+
on_swt_show {
|
1072
|
+
@progress_bar_shell.close
|
1073
|
+
@progress_bar_shell = nil
|
1074
|
+
}
|
1075
|
+
}.open if selected_directory
|
737
1076
|
}
|
738
1077
|
end
|
739
1078
|
|
1079
|
+
def display_about_dialog
|
1080
|
+
dialog {
|
1081
|
+
grid_layout(2, false) {
|
1082
|
+
margin_width 15
|
1083
|
+
margin_height 15
|
1084
|
+
}
|
1085
|
+
|
1086
|
+
image ICON
|
1087
|
+
text 'About'
|
1088
|
+
background :white
|
1089
|
+
|
1090
|
+
label {
|
1091
|
+
layout_data :center, :center, false, false
|
1092
|
+
image ICON, height: 260
|
1093
|
+
}
|
1094
|
+
label {
|
1095
|
+
layout_data :fill, :fill, true, true
|
1096
|
+
text "Gladiator v#{VERSION}\n\n#{LICENSE}\n\nGladiator icon made by Freepik from www.flaticon.com"
|
1097
|
+
background :white
|
1098
|
+
}
|
1099
|
+
}.open
|
1100
|
+
end
|
1101
|
+
|
740
1102
|
def handle_display_shortcut(key_event)
|
741
1103
|
if key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'f'
|
742
|
-
|
743
|
-
|
1104
|
+
find_action = lambda do
|
1105
|
+
if current_text_editor&.text_widget&.getSelectionText && current_text_editor&.text_widget&.getSelectionText&.size.to_i > 0
|
1106
|
+
find_text.swt_widget.setText current_text_editor.text_widget.getSelectionText
|
1107
|
+
end
|
1108
|
+
find_text.swt_widget.selectAll
|
1109
|
+
find_text.swt_widget.setFocus
|
1110
|
+
end
|
1111
|
+
if @navigation_expand_item.swt_expand_item.get_expanded
|
1112
|
+
find_action.call
|
1113
|
+
else
|
1114
|
+
@navigation_expand_item.swt_expand_item.set_expanded true
|
1115
|
+
@navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
|
1116
|
+
async_exec {
|
1117
|
+
body_root.pack_same_size
|
1118
|
+
}
|
1119
|
+
async_exec(&find_action)
|
744
1120
|
end
|
745
|
-
find_text.swt_widget.selectAll
|
746
|
-
find_text.swt_widget.setFocus
|
747
1121
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'c'
|
748
1122
|
Clipboard.copy(project_dir.selected_child.path)
|
749
1123
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'g'
|
@@ -780,7 +1154,7 @@ module Glimmer
|
|
780
1154
|
end
|
781
1155
|
end
|
782
1156
|
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)
|
1157
|
+
self.split_orientation = split_pane? && split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
|
784
1158
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
|
785
1159
|
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
1160
|
current_text_editor&.text_widget&.setFocus
|
@@ -839,12 +1213,34 @@ module Glimmer
|
|
839
1213
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'g'
|
840
1214
|
project_dir.selected_child.find_next
|
841
1215
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'l'
|
842
|
-
|
843
|
-
|
1216
|
+
unless @navigation_expand_item.swt_expand_item.get_expanded
|
1217
|
+
@navigation_expand_item.swt_expand_item.set_expanded true
|
1218
|
+
@navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
|
1219
|
+
async_exec {
|
1220
|
+
body_root.pack_same_size
|
1221
|
+
}
|
1222
|
+
async_exec {
|
1223
|
+
line_number_text.swt_widget.selectAll
|
1224
|
+
line_number_text.swt_widget.setFocus
|
1225
|
+
}
|
1226
|
+
else
|
1227
|
+
line_number_text.swt_widget.selectAll
|
1228
|
+
line_number_text.swt_widget.setFocus
|
1229
|
+
end
|
844
1230
|
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'r'
|
1231
|
+
unless @file_lookup_expand_item.swt_expand_item.get_expanded
|
1232
|
+
@file_lookup_expand_item.swt_expand_item.set_expanded true
|
1233
|
+
@file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_item_height if @file_lookup_expand_item_height
|
1234
|
+
@side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
|
1235
|
+
end
|
845
1236
|
filter_text.swt_widget.selectAll
|
846
1237
|
filter_text.swt_widget.setFocus
|
847
1238
|
elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 't'
|
1239
|
+
unless @file_explorer_expand_item.swt_expand_item.get_expanded
|
1240
|
+
@file_explorer_expand_item.swt_expand_item.set_expanded true
|
1241
|
+
@file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_item_height if @file_explorer_expand_item_height
|
1242
|
+
@side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
|
1243
|
+
end
|
848
1244
|
select_tree_item unless rename_in_progress
|
849
1245
|
file_tree.swt_widget.setFocus
|
850
1246
|
elsif key_event.keyCode == swt(:esc)
|