glimmer-cs-gladiator 0.4.1 → 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.
@@ -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