glimmer-cs-gladiator 0.3.0 → 0.5.1

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