glimmer-cs-gladiator 0.4.1 → 0.5.0

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