glimmer-cs-gladiator 0.4.0 → 0.5.3

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