glimmer-cs-gladiator 0.6.4 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3cd0eb6cc355224d16ee58053749632dcc0efe0c94911fcb13b9902f179640a7
4
- data.tar.gz: 9f0d696fb116eb29c10ac749c9107263cecd93013189d56f722ba45e48787508
3
+ metadata.gz: d57a77e5086a7cab8a622d21e6ef4d4089d544e6c8d28f709fb19405523db22e
4
+ data.tar.gz: 8e36f9855229b227658b2873cfece17ea0fd214f447b5cb561d3126f05234f28
5
5
  SHA512:
6
- metadata.gz: 73f6aabe6c03813764d3adfd8f4778467e01b8f7a30710a207f8b05f4b58a87cb85455600f11b652bf61f95fa096a3ed892abf6eb204c0db6311e2a8c85415b8
7
- data.tar.gz: 3cab30bb643329cc6a3402836d85d48726b11fd4afe6c8d134fe983baba8a3d40eaeccf1fec868631fbe2819a463ff4fcc6c14c656eebe44e67a69d694b0deee
6
+ metadata.gz: b4795a89aab52db16e32c47b06fdf8800dff22418de7b07c5421704d9be285fdb8c1c230e3d9a068a74aaf85637e7c17a34c74fe3298f75d24c874e6d108b0c9
7
+ data.tar.gz: 8b811a0f1278860b79c334fdebb71eb0c1116e94cfceb028b87e03bc7d06fc904fef4549f789cc6a79e643b2509058268dd6e39623a1823279796d2b4138f5d8
@@ -1,5 +1,21 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.7.0
4
+
5
+ - Upgrade to glimmer-dsl-swt v4.18.0.0
6
+ - Implement sash form for separator between file area and editing area to make resizable
7
+ - Change shortcut for open project from CMD+SHIFT+P to CMD+O
8
+ - Unsplit pane Menu Item / Keyboard Shortcut (CMD+SHIFT+U)
9
+ - Maximize Split Pane Size Menu Item / Keyboard Shortcut (CMD+SHIFT+M)
10
+ - Reset Split Pane Menu Item / Keyboard Shortcut (CMD+SHIFT+M again while maximized or CMD+SHIFT+P to reset split widths)
11
+ - Maximize Editor Menu Item / Keyboard Shortcut (CMD+CTRL+M)
12
+ - Reset Editor Menu Item / Keyboard Shortcut (CMD+CTRL+M again while maximized or CMD+CTRL+R to reset all sizes)
13
+ - Make CMD R and CMD T shortcuts show the file lookup/file explorer if collapsed (just like CMD + F shows navigation area)
14
+ - Display Accelerators (keyboard shortcuts) on Mac Menu Items
15
+ - Show exception dialog on error when invoking Run -> Ruby
16
+ - Fix issue with creating a new directory in a different project from the main one open
17
+ - Fix issue with quitting gladiator when multiple projects are open requiring multiple presses of CMD+Q
18
+
3
19
  ## 0.6.4
4
20
 
5
21
  - Ensured Gladiator logo in the about menu has a white background
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # <img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=85 /> Gladiator 0.6.4 - [Ugliest Text Editor Ever](https://www.reddit.com/r/ruby/comments/hgve8k/gladiator_glimmer_editor_ugliest_text_editor_ever/)
1
+ # <img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=85 /> Gladiator 0.7.0 - [Ugliest Text Editor Ever](https://www.reddit.com/r/ruby/comments/hgve8k/gladiator_glimmer_editor_ugliest_text_editor_ever/)
2
2
  ## [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 /> Glimmer Custom Shell](https://github.com/AndyObtiva/glimmer-dsl-swt#custom-shell-gem)
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-cs-gladiator.svg)](http://badge.fury.io/rb/glimmer-cs-gladiator)
4
4
 
@@ -13,6 +13,8 @@ I leave building truly professional text editors to software tooling experts who
13
13
 
14
14
  Gladiator currently supports the following text editing features (including keyboard shortcuts with Mac CMD=CTRL on Windows/Linux)
15
15
 
16
+ ![Gladiator Demo](images/glimmer-gladiator.gif)
17
+
16
18
  ### Text Editor
17
19
 
18
20
  - Text Editor with Colored Ruby Syntax Highlighting
@@ -47,8 +49,18 @@ Gladiator currently supports the following text editing features (including keyb
47
49
 
48
50
  ### Menus
49
51
 
50
- - File Menu to Open Project (CMD+SHIFT+P) and open Scratchpad for running arbitrary Ruby/Glimmer code without saving to disk (CMD+SHIFT+S)
51
- - View Menu to Split Pane & Change Split Orientation to Horizontal/Vertical (CMD+SHIFT+O)
52
+ - File Menu:
53
+ - Open Project (CMD+O)
54
+ - Quit Project (CMD+ALT+Q)
55
+ - New Scratchpad for running arbitrary Ruby/Glimmer code without saving to disk (CMD+SHIFT+S)
56
+ - View Menu
57
+ - Split Pane
58
+ - Orientation change to Horizontal/Vertical (CMD+SHIFT+O)
59
+ - Maximize Pane: maximizes current pane in split pane to take entire area (CMD+SHIFT+M)
60
+ - Reset Panes: resets pane sizes if split width/height was adjusted (CMD+SHIFT+P)
61
+ - Unsplit: closes the second pane (CMD+SHIFT+U)
62
+ - Maximize Editor: maximizes editor area to hide file lookup list and file explorer tree (CMD+CTRL+M)
63
+ - Reset All: resizes sizes of all areas in the editor (CMD+CTRL+R)
52
64
  - Run Menu to run Ruby code (CMD+SHIFT+R)
53
65
 
54
66
  ### Watch External Changes
@@ -70,9 +82,9 @@ Gladiator currently supports the following text editing features (including keyb
70
82
 
71
83
  ## Pre-requisites
72
84
 
73
- - [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) (JRuby Desktop Development GUI Framework): '>= 4.17.2.0', '< 5.0.0.0' (dependency included in Ruby gem).
74
- - [JRuby](https://www.jruby.org/download): Same version required by [Glimmer](https://github.com/AndyObtiva/glimmer-dsl-swt)
75
85
  - [JDK](https://www.oracle.com/java/technologies/javase-downloads.html): Same version required by [Glimmer](https://github.com/AndyObtiva/glimmer-dsl-swt)
86
+ - [JRuby](https://www.jruby.org/download): Same version required by [Glimmer](https://github.com/AndyObtiva/glimmer-dsl-swt)
87
+ - [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) (JRuby Desktop Development GUI Framework): '>= 4.17.2.0', '< 5.0.0.0' (dependency included in Ruby gem).
76
88
 
77
89
  ## Setup Instructions
78
90
 
@@ -138,7 +150,7 @@ To reuse Gladiator as a Glimmer Custom Shell inside another Glimmer application,
138
150
  following to the application's `Gemfile`:
139
151
 
140
152
  ```
141
- gem 'glimmer-cs-gladiator', '>= 0.6.4'
153
+ gem 'glimmer-cs-gladiator', '>= 0.7.0'
142
154
  ```
143
155
 
144
156
  Run:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.4
1
+ 0.7.0
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: glimmer-cs-gladiator 0.6.4 ruby lib
5
+ # stub: glimmer-cs-gladiator 0.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "glimmer-cs-gladiator".freeze
9
- s.version = "0.6.4"
9
+ s.version = "0.7.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Andy Maleh".freeze]
14
- s.date = "2020-12-30"
14
+ s.date = "2021-01-11"
15
15
  s.description = "Gladiator (short for Glimmer Editor) is a Glimmer sample project under on-going development. It is not intended to be a full-fledged editor by any means, yet mostly a fun educational exercise in using Glimmer to build a text editor. Gladiator is also a personal tool for shaping an editor exactly the way I like. I leave building truly professional text editors to software tooling experts who would hopefully use Glimmer one day.".freeze
16
16
  s.email = "andy.am@gmail.com".freeze
17
17
  s.executables = ["gladiator".freeze]
@@ -38,20 +38,20 @@ Gem::Specification.new do |s|
38
38
  s.homepage = "http://github.com/AndyObtiva/glimmer-cs-gladiator".freeze
39
39
  s.licenses = ["MIT".freeze]
40
40
  s.rubygems_version = "3.0.6".freeze
41
- s.summary = "Gladiator (Glimmer Editor) - Glimmer Custom Shell".freeze
41
+ s.summary = "Gladiator (Glimmer Editor) - Glimmer Custom Shell - Text Editor Built in Ruby".freeze
42
42
 
43
43
  if s.respond_to? :specification_version then
44
44
  s.specification_version = 4
45
45
 
46
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
- s.add_runtime_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.17.10.3", "< 5.0.0.0"])
47
+ s.add_runtime_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.0.0", "< 5.0.0.0"])
48
48
  s.add_runtime_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
49
49
  s.add_runtime_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
50
50
  s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
51
51
  s.add_development_dependency(%q<jeweler>.freeze, ["= 2.3.9"])
52
52
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
53
53
  else
54
- s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.17.10.3", "< 5.0.0.0"])
54
+ s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.0.0", "< 5.0.0.0"])
55
55
  s.add_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
56
56
  s.add_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
57
57
  s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
59
59
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
60
60
  end
61
61
  else
62
- s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.17.10.3", "< 5.0.0.0"])
62
+ s.add_dependency(%q<glimmer-dsl-swt>.freeze, [">= 4.18.0.0", "< 5.0.0.0"])
63
63
  s.add_dependency(%q<filewatcher>.freeze, ["~> 1.1.1"])
64
64
  s.add_dependency(%q<clipboard>.freeze, ["~> 1.3.5"])
65
65
  s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
@@ -60,7 +60,7 @@ module Glimmer
60
60
  def name=(the_name)
61
61
  self.display_path = display_path.sub(/#{Regexp.escape(@name)}$/, the_name)
62
62
  @name = the_name
63
- new_path = ::File.expand_path(display_path)
63
+ new_path = @project_dir.nil? ? ::File.expand_path(display_path) : ::File.join(project_dir.path, display_path)
64
64
  FileUtils.mv(path, new_path)
65
65
  self.path = display_path
66
66
  end
@@ -512,16 +512,11 @@ module Glimmer
512
512
  end
513
513
 
514
514
  def run
515
- begin
516
- if scratchpad?
517
- eval content
518
- else
519
- write_dirty_content
520
- load path
521
- end
522
- rescue LoadError, SyntaxError, StandardError => e
523
- # TODO consider showing a message dialog or error message console in the future
524
- puts e.full_message
515
+ if scratchpad?
516
+ eval content
517
+ else
518
+ write_dirty_content
519
+ load path
525
520
  end
526
521
  end
527
522
 
@@ -42,7 +42,7 @@ module Glimmer
42
42
  def split_orientation=(value)
43
43
  @split_orientation = value
44
44
  save_config
45
- if @loaded_config && !split_pane?
45
+ if @loaded_config && !split_pane? && !value.nil?
46
46
  Gladiator.drag = true
47
47
  child_path = project_dir.selected_child_path
48
48
  project_dir.selected_child = nil
@@ -56,9 +56,11 @@ module Glimmer
56
56
  pane_count = @tab_folder_sash_form&.children&.size
57
57
  pane_count && pane_count > 1
58
58
  end
59
-
60
- attr_reader :find_text, :tab_folder1, :tab_folder2, :filter_text, :rename_in_progress, :line_number_text, :file_tree, :split_orientation
61
- attr_accessor :current_tab_item, :current_tab_folder, :current_text_editor
59
+
60
+ attr_reader :find_text, :filter_text, :rename_in_progress, :line_number_text, :file_tree, :split_orientation
61
+ attr_accessor :current_tab_item, :current_tab_folder, :current_text_editor, :tab_folder1, :tab_folder2, :maximized_pane, :maximized_editor
62
+ alias maximized_pane? maximized_pane
63
+ alias maximized_editor? maximized_editor
62
64
 
63
65
  ## Uncomment before_body block to pre-initialize variables to use in body
64
66
  #
@@ -105,12 +107,12 @@ module Glimmer
105
107
  observe(project_dir, 'selected_child') do |selected_file|
106
108
  if selected_file
107
109
  if Gladiator.drag && !@tab_folder2
108
- @tab_folder1 = @current_tab_folder
109
- async_exec { body_root.pack_same_size}
110
+ self.tab_folder1 = current_tab_folder
110
111
  @tab_folder_sash_form.content {
111
- @current_tab_folder = @tab_folder2 = tab_folder
112
+ self.current_tab_folder = self.tab_folder2 = tab_folder {}
112
113
  @current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
113
114
  }
115
+ body_root.pack_same_size
114
116
  end
115
117
  select_tree_item unless @rename_in_progress || Gladiator.startup
116
118
  found_tab_item = selected_tab_item
@@ -136,7 +138,7 @@ module Glimmer
136
138
  @current_text_editor.text_proxy.content {
137
139
  on_focus_gained {
138
140
  tab_folder = the_text_editor.swt_widget.getParent.getParent
139
- @current_tab_folder = tab_folder.getData('proxy')
141
+ self.current_tab_folder = tab_folder.getData('proxy')
140
142
  @current_tab_item = the_tab_item
141
143
  @current_text_editor = the_text_editor
142
144
  @current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
@@ -149,13 +151,11 @@ module Glimmer
149
151
  on_swt_show {
150
152
  @current_tab_item = the_tab_item
151
153
  @current_text_editor = the_text_editor
152
- @current_tab_folder = @current_tab_item.swt_widget.getParent.getData('proxy')
154
+ self.current_tab_folder = @current_tab_item.swt_widget.getParent.getData('proxy')
153
155
  @current_tab_folder.swt_widget.setData('selected_tab_item', @current_tab_item)
154
156
  @current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
155
157
  project_dir.selected_child = selected_file
156
- async_exec {
157
- @current_text_editor&.text_widget&.setFocus
158
- }
158
+ @current_text_editor&.text_widget&.setFocus
159
159
  }
160
160
  on_widget_disposed {
161
161
  project_dir.selected_child&.write_dirty_content
@@ -168,13 +168,21 @@ module Glimmer
168
168
  @current_tab_item.swt_tab_item.setData('proxy', @current_tab_item)
169
169
  }
170
170
  @current_tab_folder.swt_widget.setSelection(@current_tab_item.swt_tab_item)
171
-
172
171
  body_root.pack_same_size
173
- async_exec { body_root.pack_same_size}
174
172
  end
175
173
  @current_text_editor&.text_widget&.setFocus
176
174
  end
177
175
  end
176
+ observe(self, 'maximized_pane') do
177
+ if tab_folder2
178
+ @tab_folder_sash_form.maximized_control = (current_tab_folder.swt_widget if maximized_pane?)
179
+ end
180
+ end
181
+ observe(self, 'maximized_editor') do
182
+ @file_area_and_editor_area_sash_form.maximized_control = (@editor_area_composite.swt_widget if maximized_editor?)
183
+ @navigation_expand_item.swt_expand_item.set_expanded !maximized_editor?
184
+ body_root.pack_same_size
185
+ end
178
186
  observe(project_dir, 'selected_child') do
179
187
  save_config
180
188
  end
@@ -192,7 +200,6 @@ module Glimmer
192
200
  #
193
201
  body {
194
202
  shell {
195
- grid_layout(2, false)
196
203
  text "Gladiator - #{::File.expand_path(project_dir.path)}"
197
204
  minimum_size 520, 250
198
205
  size 1440, 900
@@ -235,7 +242,7 @@ module Glimmer
235
242
  display.swt_display.system_menu.items.find {|mi| mi.id == swt(:id_quit)}.add_selection_listener {
236
243
  save_config
237
244
  project_dir.selected_child&.write_dirty_content
238
- exit(0)
245
+ display.swt_display.shells.each(&:close)
239
246
  }
240
247
  end
241
248
 
@@ -245,37 +252,91 @@ module Glimmer
245
252
 
246
253
  menu_item {
247
254
  text 'New &Scratchpad'
255
+ accelerator COMMAND_KEY, :shift, :s
248
256
  on_widget_selected {
249
- begin
250
- project_dir.selected_child_path = ''
251
- rescue => e
252
- puts e.full_message
253
- end
257
+ project_dir.selected_child_path = ''
254
258
  }
255
259
  }
256
- menu_item(:separator)
257
260
  menu_item {
258
261
  text 'Open &Project...'
262
+ accelerator COMMAND_KEY, :o
259
263
  on_widget_selected {
260
264
  open_project
261
265
  }
262
266
  }
267
+ menu_item(:separator)
268
+ menu_item {
269
+ text '&Quit Project'
270
+ accelerator COMMAND_KEY, :alt, :q
271
+ on_widget_selected {
272
+ save_config
273
+ project_dir.selected_child&.write_dirty_content
274
+ body_root.close
275
+ }
276
+ }
263
277
  }
264
278
  menu {
265
279
  text '&View'
266
280
  menu {
267
- text '&Split'
268
- menu_item(:radio) {
269
- text '&Horizontal'
270
- selection bind(self, :split_orientation,
271
- on_read: ->(o) { split_pane? && o == swt(:horizontal) },
272
- on_write: ->(b) { b ? swt(:horizontal) : swt(:vertical) })
281
+ text '&Split Pane'
282
+ menu { |menu_proxy|
283
+ text '&Orientation'
284
+ menu_item(:radio) {
285
+ text '&Horizontal'
286
+ selection bind(self, :split_orientation,
287
+ on_read: ->(o) { split_pane? && o == swt(:horizontal) },
288
+ on_write: ->(b) { b.nil? ? nil : (b ? swt(:horizontal) : swt(:vertical)) })
289
+ }
290
+ menu_item(:radio) {
291
+ text '&Vertical'
292
+ selection bind(self, :split_orientation,
293
+ on_read: ->(o) { split_pane? && o == swt(:vertical) },
294
+ on_write: ->(b) { b.nil? ? nil : (b ? swt(:vertical) : swt(:horizontal)) })
295
+ }
273
296
  }
274
- menu_item(:radio) {
275
- text '&Vertical'
276
- selection bind(self, :split_orientation,
277
- on_read: ->(o) { split_pane? && o == swt(:vertical) },
278
- on_write: ->(b) { b ? swt(:vertical) : swt(:horizontal) })
297
+ menu_item(:check) {
298
+ text '&Maximize Pane'
299
+ enabled bind(self, :tab_folder2)
300
+ accelerator COMMAND_KEY, :shift, :m
301
+ selection bind(self, :maximized_pane)
302
+ }
303
+ menu_item {
304
+ text 'Reset &Panes'
305
+ enabled bind(self, :tab_folder2)
306
+ accelerator COMMAND_KEY, :shift, :p
307
+ on_widget_selected {
308
+ if tab_folder2
309
+ self.maximized_pane = false
310
+ @tab_folder_sash_form.weights = [1, 1]
311
+ end
312
+ }
313
+ }
314
+ menu_item {
315
+ text '&Unsplit'
316
+ enabled bind(self, :tab_folder2)
317
+ accelerator COMMAND_KEY, :shift, :u
318
+ on_widget_selected {
319
+ if tab_folder2
320
+ self.maximized_pane = false
321
+ navigate_to_next_tab_folder if current_tab_folder != tab_folder2
322
+ close_all_tabs(tab_folder2)
323
+ self.split_orientation = nil
324
+ body_root.pack_same_size
325
+ end
326
+ }
327
+ }
328
+ }
329
+ menu_item(:check) {
330
+ text '&Maximize Editor'
331
+ accelerator COMMAND_KEY, :ctrl, :m
332
+ selection bind(self, :maximized_editor)
333
+ }
334
+ menu_item {
335
+ text '&Reset All'
336
+ accelerator COMMAND_KEY, :ctrl, :r
337
+ on_widget_selected {
338
+ self.maximized_editor = false
339
+ @file_area_and_editor_area_sash_form.weights = [1, 5]
279
340
  }
280
341
  }
281
342
  }
@@ -296,8 +357,18 @@ module Glimmer
296
357
  # }
297
358
  menu_item {
298
359
  text '&Ruby'
360
+ accelerator COMMAND_KEY, :shift, :r
299
361
  on_widget_selected {
300
- project_dir.selected_child.run
362
+ begin
363
+ project_dir.selected_child.run
364
+ rescue Exception => e
365
+ dialog {
366
+ text 'Run - Ruby - Error Encountered!'
367
+ label {
368
+ text e.full_message
369
+ }
370
+ }.open
371
+ end
301
372
  }
302
373
  }
303
374
  }
@@ -305,468 +376,461 @@ module Glimmer
305
376
  text '&Help'
306
377
  menu_item {
307
378
  text '&About'
379
+ accelerator COMMAND_KEY, :shift, :a
308
380
  on_widget_selected {
309
381
  display_about_dialog
310
382
  }
311
383
  }
312
384
  }
313
385
  }
386
+
387
+ @file_area_and_editor_area_sash_form = sash_form(:horizontal) {
388
+ weights 1, 5
314
389
 
315
- composite {
316
- grid_layout(1, false) {
317
- margin_width 0
318
- margin_height 0
319
- }
320
-
321
- layout_data(:fill, :fill, false, true) {
322
- width_hint 300
323
- }
324
- @side_bar_sash_form = sash_form(:vertical) {
325
- layout_data(:fill, :fill, true, true)
326
- sash_width 4
327
-
328
- resize_expand_items = lambda { |event=nil|
329
- @file_lookup_expand_item&.swt_expand_item&.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
330
- @file_explorer_expand_item&.swt_expand_item&.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
390
+ composite {
391
+ grid_layout(1, false) {
392
+ margin_width 0
393
+ margin_height 0
331
394
  }
332
395
 
333
- @file_lookup_expand_bar = expand_bar {
334
- layout_data :fill, :fill, true, true
335
- font height: 17, style: :bold
336
- foreground @default_foreground
396
+ @side_bar_sash_form = sash_form(:vertical) {
397
+ layout_data(:fill, :fill, true, true)
398
+ sash_width 4
337
399
 
338
- on_swt_show {
339
- @file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
400
+ resize_expand_items = lambda { |event=nil|
401
+ @file_lookup_expand_item&.swt_expand_item&.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
402
+ @file_explorer_expand_item&.swt_expand_item&.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
340
403
  }
341
404
 
342
- on_swt_Resize(&resize_expand_items)
343
-
344
- @file_lookup_expand_item = expand_item {
345
- grid_layout {
346
- margin_width 0
347
- margin_height 0
405
+ @file_lookup_expand_bar = expand_bar {
406
+ layout_data :fill, :fill, true, true
407
+ font height: 17, style: :bold
408
+ foreground @default_foreground
409
+
410
+ on_swt_show {
411
+ @file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_bar.size.y - @file_lookup_expand_item.swt_expand_item.header_height
348
412
  }
349
- text 'File Lookup'
350
- height display.bounds.height
351
413
 
352
- @filter_text = text {
353
- layout_data :fill, :center, true, false
354
- text bind(project_dir, 'filter')
355
- on_key_pressed { |key_event|
356
- if key_event.keyCode == swt(:tab) ||
357
- key_event.keyCode == swt(:cr) ||
358
- key_event.keyCode == swt(:arrow_up) ||
359
- key_event.keyCode == swt(:arrow_down)
360
- @file_lookup_list.swt_widget.select(0) if @file_lookup_list.swt_widget.getSelectionIndex() == -1
361
- @file_lookup_list.swt_widget.setFocus
362
- end
414
+ on_swt_Resize(&resize_expand_items)
415
+
416
+ @file_lookup_expand_item = expand_item {
417
+ grid_layout {
418
+ margin_width 0
419
+ margin_height 0
363
420
  }
364
- }
365
-
366
- @file_lookup_list = list(:border, :h_scroll, :v_scroll) {
367
- layout_data :fill, :fill, true, true
368
- #visible bind(self, 'project_dir.filter') {|f| !!f}
369
- selection bind(project_dir, :filtered_path)
370
- foreground @default_foreground
371
- on_mouse_up {
372
- project_dir.selected_child_path = @file_lookup_list.swt_widget.getSelection.first
421
+ text 'File Lookup'
422
+ height display.bounds.height
423
+
424
+ @filter_text = text {
425
+ layout_data :fill, :center, true, false
426
+ text bind(project_dir, 'filter')
427
+ on_key_pressed { |key_event|
428
+ if key_event.keyCode == swt(:tab) ||
429
+ key_event.keyCode == swt(:cr) ||
430
+ key_event.keyCode == swt(:arrow_up) ||
431
+ key_event.keyCode == swt(:arrow_down)
432
+ @file_lookup_list.swt_widget.select(0) if @file_lookup_list.swt_widget.getSelectionIndex() == -1
433
+ @file_lookup_list.swt_widget.setFocus
434
+ end
435
+ }
373
436
  }
374
- on_key_pressed { |key_event|
375
- if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
437
+
438
+ @file_lookup_list = list(:border, :h_scroll, :v_scroll) {
439
+ layout_data :fill, :fill, true, true
440
+ #visible bind(self, 'project_dir.filter') {|f| !!f}
441
+ selection bind(project_dir, :filtered_path)
442
+ foreground @default_foreground
443
+ on_mouse_up {
376
444
  project_dir.selected_child_path = @file_lookup_list.swt_widget.getSelection.first
377
- @current_text_editor&.text_widget&.setFocus
378
- end
379
- }
380
- drag_source(DND::DROP_COPY) {
381
- transfer [TextTransfer.getInstance].to_java(Transfer)
382
- on_drag_set_data { |event|
383
- Gladiator.drag = true
384
- list = event.widget.getControl
385
- event.data = list.getSelection.first
445
+ }
446
+ on_key_pressed { |key_event|
447
+ if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
448
+ project_dir.selected_child_path = @file_lookup_list.swt_widget.getSelection.first
449
+ @current_text_editor&.text_widget&.setFocus
450
+ end
451
+ }
452
+ drag_source(DND::DROP_COPY) {
453
+ transfer [TextTransfer.getInstance].to_java(Transfer)
454
+ on_drag_set_data { |event|
455
+ Gladiator.drag = true
456
+ list = event.widget.getControl
457
+ event.data = list.getSelection.first
458
+ }
386
459
  }
387
460
  }
388
461
  }
389
- }
390
-
391
- on_item_collapsed { |event|
392
- if @file_explorer_expand_item.swt_expand_item.get_expanded
393
- @file_lookup_expand_item_height = @file_lookup_expand_item.swt_expand_item.height
394
- @file_lookup_expand_item.swt_expand_item.height = 0
395
- @file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
396
- @file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
397
- @side_bar_sash_form.weights = [@file_lookup_expand_item.swt_expand_item.header_height, @file_lookup_expand_bar_height + @file_explorer_expand_bar_height - @file_lookup_expand_item.swt_expand_item.header_height]
398
- end
399
- }
400
-
401
- on_item_expanded {
402
- @file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_item_height if @file_lookup_expand_item_height
403
- @side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
404
- }
405
-
406
- }
407
-
408
- @file_explorer_expand_bar = expand_bar {
409
- layout_data :fill, :fill, true, true
410
- font height: 17, style: :bold
411
- foreground @default_foreground
462
+
463
+ on_item_collapsed { |event|
464
+ if @file_explorer_expand_item.swt_expand_item.get_expanded
465
+ @file_lookup_expand_item_height = @file_lookup_expand_item.swt_expand_item.height
466
+ @file_lookup_expand_item.swt_expand_item.height = 0
467
+ @file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
468
+ @file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
469
+ @side_bar_sash_form.weights = [@file_lookup_expand_item.swt_expand_item.header_height, @file_lookup_expand_bar_height + @file_explorer_expand_bar_height - @file_lookup_expand_item.swt_expand_item.header_height]
470
+ end
471
+ }
412
472
 
413
- on_swt_show {
414
- @file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
473
+ on_item_expanded {
474
+ @file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_item_height if @file_lookup_expand_item_height
475
+ @side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
476
+ }
477
+
415
478
  }
416
479
 
417
- on_swt_Resize(&resize_expand_items)
418
-
419
- @file_explorer_expand_item = expand_item {
420
- grid_layout {
421
- margin_width 0
422
- margin_height 0
480
+ @file_explorer_expand_bar = expand_bar {
481
+ layout_data :fill, :fill, true, true
482
+ font height: 17, style: :bold
483
+ foreground @default_foreground
484
+
485
+ on_swt_show {
486
+ @file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_bar.size.y - @file_explorer_expand_item.swt_expand_item.header_height
423
487
  }
424
- text 'File Explorer'
425
- height display.bounds.height
426
488
 
427
- @file_tree = tree(:virtual, :border, :h_scroll, :v_scroll) {
428
- layout_data :fill, :fill, true, true
429
- #visible bind(self, 'project_dir.filter') {|f| !f}
430
- items bind(self, :project_dir), tree_properties(children: :children, text: :name)
431
- foreground @default_foreground
432
- drag_source(DND::DROP_COPY) {
433
- transfer [TextTransfer.getInstance].to_java(Transfer)
434
- on_drag_set_data { |event|
435
- Gladiator.drag = true
436
- tree = event.widget.getControl
437
- tree_item = tree.getSelection.first
438
- event.data = tree_item.getData.path
439
- }
489
+ on_swt_Resize(&resize_expand_items)
490
+
491
+ @file_explorer_expand_item = expand_item {
492
+ grid_layout {
493
+ margin_width 0
494
+ margin_height 0
440
495
  }
441
- menu {
442
- @open_menu_item = menu_item {
443
- text 'Open'
444
- on_widget_selected {
445
- project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
496
+ text 'File Explorer'
497
+ height display.bounds.height
498
+
499
+ @file_tree = tree(:virtual, :border, :h_scroll, :v_scroll) {
500
+ layout_data :fill, :fill, true, true
501
+ #visible bind(self, 'project_dir.filter') {|f| !f}
502
+ items bind(self, :project_dir), tree_properties(children: :children, text: :name)
503
+ foreground @default_foreground
504
+ drag_source(DND::DROP_COPY) {
505
+ transfer [TextTransfer.getInstance].to_java(Transfer)
506
+ on_drag_set_data { |event|
507
+ Gladiator.drag = true
508
+ tree = event.widget.getControl
509
+ tree_item = tree.getSelection.first
510
+ event.data = tree_item.getData.path
446
511
  }
447
512
  }
448
- menu_item(:separator)
449
- menu_item {
450
- text 'Delete'
451
- on_widget_selected {
452
- tree_item = @file_tree.swt_widget.getSelection.first
453
- delete_tree_item(tree_item)
513
+ menu {
514
+ @open_menu_item = menu_item {
515
+ text 'Open'
516
+ on_widget_selected {
517
+ project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
518
+ }
454
519
  }
455
- }
456
- menu_item {
457
- text 'Refresh'
458
- on_widget_selected {
459
- project_dir.refresh
520
+ menu_item(:separator)
521
+ menu_item {
522
+ text 'Delete'
523
+ on_widget_selected {
524
+ tree_item = @file_tree.swt_widget.getSelection.first
525
+ delete_tree_item(tree_item)
526
+ }
460
527
  }
461
- }
462
- menu_item {
463
- text 'Rename'
464
- on_widget_selected {
465
- rename_selected_tree_item
528
+ menu_item {
529
+ text 'Refresh'
530
+ on_widget_selected {
531
+ project_dir.refresh
532
+ }
466
533
  }
467
- }
468
- menu_item {
469
- text 'New Directory'
470
- on_widget_selected {
471
- add_new_directory_to_selected_tree_item
534
+ menu_item {
535
+ text 'Rename'
536
+ on_widget_selected {
537
+ rename_selected_tree_item
538
+ }
472
539
  }
473
- }
474
- menu_item {
475
- text 'New File'
476
- on_widget_selected {
477
- add_new_file_to_selected_tree_item
540
+ menu_item {
541
+ text 'New Directory'
542
+ on_widget_selected {
543
+ add_new_directory_to_selected_tree_item
544
+ }
545
+ }
546
+ menu_item {
547
+ text 'New File'
548
+ on_widget_selected {
549
+ add_new_file_to_selected_tree_item
550
+ }
478
551
  }
479
552
  }
480
- }
481
- on_swt_menudetect { |event|
482
- path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
483
- @open_menu_item.swt_widget.setEnabled(!::Dir.exist?(path)) if path
484
- }
485
- on_mouse_up {
486
- if Gladiator.drag_and_drop
487
- Gladiator.drag_and_drop = false
488
- else
489
- project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
490
- @current_text_editor&.text_widget&.setFocus
491
- end
492
- }
493
- on_key_pressed { |key_event|
494
- if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
495
- project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
496
- @current_text_editor&.text_widget&.setFocus
497
- end
498
- }
499
- on_paint_control {
500
- root_item = @file_tree.swt_widget.getItems.first
501
- if root_item && !root_item.getExpanded
502
- root_item.setExpanded(true)
503
- end
553
+ on_swt_menudetect { |event|
554
+ path = extract_tree_item_path(@file_tree.swt_widget.getSelection.first)
555
+ @open_menu_item.swt_widget.setEnabled(!::Dir.exist?(path)) if path
556
+ }
557
+ on_mouse_up {
558
+ if Gladiator.drag_and_drop
559
+ Gladiator.drag_and_drop = false
560
+ else
561
+ project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
562
+ @current_text_editor&.text_widget&.setFocus
563
+ end
564
+ }
565
+ on_key_pressed { |key_event|
566
+ if Glimmer::SWT::SWTProxy.include?(key_event.keyCode, :cr)
567
+ project_dir.selected_child_path = extract_tree_item_path(@file_tree.swt_widget.getSelection&.first)
568
+ @current_text_editor&.text_widget&.setFocus
569
+ end
570
+ }
571
+ on_paint_control {
572
+ root_item = @file_tree.swt_widget.getItems.first
573
+ if root_item && !root_item.getExpanded
574
+ root_item.setExpanded(true)
575
+ end
576
+ }
504
577
  }
505
578
  }
506
- }
579
+
580
+ on_item_collapsed { |event|
581
+ if @file_lookup_expand_item.swt_expand_item.get_expanded
582
+ @file_explorer_expand_item_height = @file_explorer_expand_item.swt_expand_item.height
583
+ @file_explorer_expand_item.swt_expand_item.height = 0
584
+ @file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
585
+ @file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
586
+ @side_bar_sash_form.weights = [@file_explorer_expand_bar_height + @file_explorer_expand_bar_height - @file_explorer_expand_item.swt_expand_item.header_height, @file_explorer_expand_item.swt_expand_item.header_height]
587
+ end
588
+ }
507
589
 
508
- on_item_collapsed { |event|
509
- if @file_lookup_expand_item.swt_expand_item.get_expanded
510
- @file_explorer_expand_item_height = @file_explorer_expand_item.swt_expand_item.height
511
- @file_explorer_expand_item.swt_expand_item.height = 0
512
- @file_explorer_expand_bar_height = @file_explorer_expand_bar.swt_widget.size.y
513
- @file_lookup_expand_bar_height = @file_lookup_expand_bar.swt_widget.size.y
514
- @side_bar_sash_form.weights = [@file_explorer_expand_bar_height + @file_explorer_expand_bar_height - @file_explorer_expand_item.swt_expand_item.header_height, @file_explorer_expand_item.swt_expand_item.header_height]
515
- end
516
- }
517
-
518
- on_item_expanded {
519
- @file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_item_height if @file_explorer_expand_item_height
520
- @side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
590
+ on_item_expanded {
591
+ @file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_item_height if @file_explorer_expand_item_height
592
+ @side_bar_sash_form.weights = [@file_lookup_expand_bar_height, @file_explorer_expand_bar_height]
593
+ }
594
+
521
595
  }
522
-
596
+
523
597
  }
524
-
525
- }
526
-
527
- # TODO see if you could replace some of this with Glimmer DSL/API syntax
528
- @file_tree_editor = TreeEditor.new(@file_tree.swt_widget);
529
- @file_tree_editor.horizontalAlignment = swt(:left);
530
- @file_tree_editor.grabHorizontal = true;
531
- @file_tree_editor.minimumHeight = 20;
532
-
533
- }
534
-
535
- composite {
536
- grid_layout(1, false) {
537
- margin_width 0
538
- margin_height 0
598
+
599
+ # TODO see if you could replace some of this with Glimmer DSL/API syntax
600
+ @file_tree_editor = TreeEditor.new(@file_tree.swt_widget);
601
+ @file_tree_editor.horizontalAlignment = swt(:left);
602
+ @file_tree_editor.grabHorizontal = true;
603
+ @file_tree_editor.minimumHeight = 20;
604
+
539
605
  }
540
- layout_data :fill, :fill, true, true
541
606
 
542
- @navigation_expand_bar = expand_bar {
543
- layout_data :fill, :top, true, false
544
- font height: 17, style: :bold
545
- foreground @default_foreground
607
+ @editor_area_composite = composite {
608
+ grid_layout(1, false) {
609
+ margin_width 0
610
+ margin_height 0
611
+ }
546
612
 
547
- @navigation_expand_item = expand_item {
548
- text 'Navigation'
549
- height 115
550
-
551
- grid_layout(5, false) {
552
- margin_right 5
553
- }
554
-
555
- stat_font = {name: 'Consolas', height: OS.mac? ? 15 : 12}
556
-
557
- # row 1
558
-
559
- label {
560
- layout_data(:left, :center, false, false)
561
- text 'File:'
562
- foreground @default_foreground
563
- }
613
+ @navigation_expand_bar = expand_bar {
614
+ layout_data :fill, :top, true, false
615
+ font height: 17, style: :bold
616
+ foreground @default_foreground
617
+
618
+ @navigation_expand_item = expand_item {
619
+ text 'Navigation'
620
+ height 115
564
621
 
565
- @file_path_label = styled_text(:none) {
566
- layout_data(:fill, :center, true, false) {
567
- horizontal_span 2
622
+ grid_layout(5, false) {
623
+ margin_right 5
568
624
  }
569
- background color(:widget_background)
570
- foreground @default_foreground
571
- editable false
572
- caret nil
573
- text bind(project_dir, 'selected_child.path')
574
- on_mouse_up {
575
- @file_path_label.swt_widget.selectAll
625
+
626
+ stat_font = {name: 'Consolas', height: OS.mac? ? 15 : 12}
627
+
628
+ # row 1
629
+
630
+ label {
631
+ layout_data(:left, :center, false, false)
632
+ text 'File:'
633
+ foreground @default_foreground
576
634
  }
577
- on_focus_lost {
578
- @file_path_label.swt_widget.setSelection(0, 0)
635
+
636
+ @file_path_label = styled_text(:none) {
637
+ layout_data(:fill, :center, true, false) {
638
+ horizontal_span 2
639
+ }
640
+ background color(:widget_background)
641
+ foreground @default_foreground
642
+ editable false
643
+ caret nil
644
+ text bind(project_dir, 'selected_child.path')
645
+ on_mouse_up {
646
+ @file_path_label.swt_widget.selectAll
647
+ }
648
+ on_focus_lost {
649
+ @file_path_label.swt_widget.setSelection(0, 0)
650
+ }
579
651
  }
580
- }
581
-
582
- label {
583
- layout_data(:left, :center, false, false)
584
- text 'Caret Position:'
585
- foreground @default_foreground
586
- }
587
- label(:right) {
588
- layout_data(:fill, :center, true, false)
589
- text bind(project_dir, 'selected_child.caret_position')
590
- foreground @default_foreground
591
- font stat_font
592
- }
593
-
594
- # row 2
595
-
596
- label {
597
- layout_data(:left, :center, false, false)
598
- text 'Line:'
599
- foreground @default_foreground
600
- }
601
- @line_number_text = text {
602
- layout_data(:fill, :center, true, false) {
603
- minimum_width 400
652
+
653
+ label {
654
+ layout_data(:left, :center, false, false)
655
+ text 'Caret Position:'
656
+ foreground @default_foreground
604
657
  }
605
- text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
606
- foreground @default_foreground
607
- font stat_font
608
- on_key_pressed { |key_event|
609
- if key_event.keyCode == swt(:cr)
610
- @current_text_editor&.text_widget&.setFocus
611
- end
658
+ label(:right) {
659
+ layout_data(:fill, :center, true, false)
660
+ text bind(project_dir, 'selected_child.caret_position')
661
+ foreground @default_foreground
662
+ font stat_font
612
663
  }
613
- on_verify_text { |event|
614
- event.doit = !event.text.match(/^\d*$/).to_a.empty?
664
+
665
+ # row 2
666
+
667
+ label {
668
+ layout_data(:left, :center, false, false)
669
+ text 'Line:'
670
+ foreground @default_foreground
615
671
  }
616
- }
617
- label # filler
618
-
619
- label {
620
- layout_data(:left, :center, false, false)
621
- text 'Line Position:'
622
- foreground @default_foreground
623
- }
624
- label(:right) {
625
- layout_data(:fill, :center, true, false)
626
- text bind(project_dir, 'selected_child.line_position')
627
- foreground @default_foreground
628
- font stat_font
629
- }
630
-
631
- # row 3
632
-
633
- label {
634
- layout_data(:left, :center, false, false)
635
- text 'Find:'
636
- foreground @default_foreground
637
- }
638
- @find_text = text {
639
- layout_data(:fill, :center, true, false) {
640
- minimum_width 400
672
+ @line_number_text = text {
673
+ layout_data(:fill, :center, true, false) {
674
+ minimum_width 400
675
+ }
676
+ text bind(project_dir, 'selected_child.line_number', on_read: :to_s, on_write: :to_i)
677
+ foreground @default_foreground
678
+ font stat_font
679
+ on_key_pressed { |key_event|
680
+ if key_event.keyCode == swt(:cr)
681
+ @current_text_editor&.text_widget&.setFocus
682
+ end
683
+ }
684
+ on_verify_text { |event|
685
+ event.doit = !event.text.match(/^\d*$/).to_a.empty?
686
+ }
641
687
  }
642
- text bind(project_dir, 'selected_child.find_text')
643
- foreground @default_foreground
644
- font stat_font
645
- on_key_pressed { |key_event|
646
- if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
647
- project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
648
- project_dir.selected_child&.find_next
649
- end
650
- if key_event.keyCode == swt(:cr)
651
- project_dir.selected_child&.find_next
652
- end
688
+ label # filler
689
+
690
+ label {
691
+ layout_data(:left, :center, false, false)
692
+ text 'Line Position:'
693
+ foreground @default_foreground
653
694
  }
654
- }
655
- composite {
656
- layout_data(:left, :center, true, false)
657
- row_layout {
658
- margin_width 0
659
- margin_height 0
695
+ label(:right) {
696
+ layout_data(:fill, :center, true, false)
697
+ text bind(project_dir, 'selected_child.line_position')
698
+ foreground @default_foreground
699
+ font stat_font
660
700
  }
661
- button(:check) {
662
- selection bind(project_dir, 'selected_child.case_sensitive')
701
+
702
+ # row 3
703
+
704
+ label {
705
+ layout_data(:left, :center, false, false)
706
+ text 'Find:'
707
+ foreground @default_foreground
708
+ }
709
+ @find_text = text {
710
+ layout_data(:fill, :center, true, false) {
711
+ minimum_width 400
712
+ }
713
+ text bind(project_dir, 'selected_child.find_text')
714
+ foreground @default_foreground
715
+ font stat_font
663
716
  on_key_pressed { |key_event|
717
+ if key_event.stateMask == swt(COMMAND_KEY) && key_event.keyCode == swt(:cr)
718
+ project_dir.selected_child.case_sensitive = !project_dir.selected_child.case_sensitive
719
+ project_dir.selected_child&.find_next
720
+ end
664
721
  if key_event.keyCode == swt(:cr)
665
722
  project_dir.selected_child&.find_next
666
723
  end
667
724
  }
668
725
  }
726
+ composite {
727
+ layout_data(:left, :center, true, false)
728
+ row_layout {
729
+ margin_width 0
730
+ margin_height 0
731
+ }
732
+ button(:check) {
733
+ selection bind(project_dir, 'selected_child.case_sensitive')
734
+ on_key_pressed { |key_event|
735
+ if key_event.keyCode == swt(:cr)
736
+ project_dir.selected_child&.find_next
737
+ end
738
+ }
739
+ }
740
+ label {
741
+ text 'Case-sensitive'
742
+ foreground @default_foreground
743
+ }
744
+ }
745
+
669
746
  label {
670
- text 'Case-sensitive'
747
+ layout_data(:left, :center, false, false)
748
+ text 'Selection Count:'
671
749
  foreground @default_foreground
672
750
  }
673
- }
674
-
675
- label {
676
- layout_data(:left, :center, false, false)
677
- text 'Selection Count:'
678
- foreground @default_foreground
679
- }
680
- label(:right) {
681
- layout_data(:fill, :center, true, false)
682
- text bind(project_dir, 'selected_child.selection_count')
683
- foreground @default_foreground
684
- font stat_font
685
- }
686
-
687
- # row 4
688
-
689
- label {
690
- layout_data(:left, :center, false, false)
691
- text 'Replace:'
692
- foreground @default_foreground
693
- }
694
- @replace_text = text {
695
- layout_data(:fill, :center, true, false) {
696
- minimum_width 400
751
+ label(:right) {
752
+ layout_data(:fill, :center, true, false)
753
+ text bind(project_dir, 'selected_child.selection_count')
754
+ foreground @default_foreground
755
+ font stat_font
697
756
  }
698
- text bind(project_dir, 'selected_child.replace_text')
699
- foreground @default_foreground
700
- font stat_font
701
- on_focus_gained {
702
- project_dir.selected_child&.ensure_find_next
757
+
758
+ # row 4
759
+
760
+ label {
761
+ layout_data(:left, :center, false, false)
762
+ text 'Replace:'
763
+ foreground @default_foreground
703
764
  }
704
- on_key_pressed { |key_event|
705
- if key_event.keyCode == swt(:cr)
706
- if project_dir.selected_child
707
- Command.do(project_dir.selected_child, :replace_next!)
765
+ @replace_text = text {
766
+ layout_data(:fill, :center, true, false) {
767
+ minimum_width 400
768
+ }
769
+ text bind(project_dir, 'selected_child.replace_text')
770
+ foreground @default_foreground
771
+ font stat_font
772
+ on_focus_gained {
773
+ project_dir.selected_child&.ensure_find_next
774
+ }
775
+ on_key_pressed { |key_event|
776
+ if key_event.keyCode == swt(:cr)
777
+ if project_dir.selected_child
778
+ Command.do(project_dir.selected_child, :replace_next!)
779
+ end
708
780
  end
709
- end
781
+ }
782
+ }
783
+ label # filler
784
+ label {
785
+ layout_data(:left, :center, false, false)
786
+ text 'Top Pixel:'
787
+ foreground @default_foreground
788
+ }
789
+ label(:right) {
790
+ layout_data(:fill, :center, true, false)
791
+ text bind(project_dir, 'selected_child.top_pixel')
792
+ foreground @default_foreground
793
+ font stat_font
710
794
  }
711
795
  }
712
- label # filler
713
- label {
714
- layout_data(:left, :center, false, false)
715
- text 'Top Pixel:'
716
- foreground @default_foreground
717
- }
718
- label(:right) {
719
- layout_data(:fill, :center, true, false)
720
- text bind(project_dir, 'selected_child.top_pixel')
721
- foreground @default_foreground
722
- font stat_font
796
+
797
+ on_item_collapsed {
798
+ collapse_navigation_expand_bar_height
723
799
  }
724
- }
725
800
 
726
- on_item_collapsed {
727
- @navigation_expand_item_height = @navigation_expand_item.swt_expand_item.height if @navigation_expand_item.swt_expand_item.height > 0
728
- @navigation_expand_item.swt_expand_item.height = 0
729
- async_exec {
730
- body_root.pack_same_size
801
+ on_item_expanded {
802
+ expand_navigation_expand_bar
731
803
  }
804
+
732
805
  }
733
-
734
- on_item_expanded {
735
- @navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
736
- async_exec {
737
- body_root.pack_same_size
806
+
807
+ @tab_folder_sash_form = sash_form {
808
+ layout_data(:fill, :fill, true, true) {
809
+ width_hint 768
810
+ height_hint 576
811
+ minimum_width 768
812
+ minimum_height 576
738
813
  }
739
- }
740
-
741
- }
742
-
743
- @tab_folder_sash_form = sash_form {
744
- layout_data(:fill, :fill, true, true) {
745
- width_hint 768
746
- height_hint 576
747
- minimum_width 768
748
- minimum_height 576
749
- }
750
- sash_width 10
751
- orientation bind(self, :split_orientation) {|value| async_exec { body_root.pack_same_size}; value}
752
- @current_tab_folder = tab_folder {
753
- drag_source(DND::DROP_COPY) {
754
- transfer [TextTransfer.getInstance].to_java(Transfer)
755
- event_data = nil
756
- on_drag_start {|event|
757
- Gladiator.drag = true
758
- tab_folder = event.widget.getControl
759
- tab_item = tab_folder.getItem(Point.new(event.x, event.y))
760
- event_data = tab_item.getData('file_path')
761
- }
762
- on_drag_set_data { |event|
763
- event.data = event_data
814
+ orientation bind(self, :split_orientation) {|value| async_exec { body_root.pack_same_size}; value}
815
+ self.current_tab_folder = self.tab_folder1 = tab_folder {
816
+ drag_source(DND::DROP_COPY) {
817
+ transfer [TextTransfer.getInstance].to_java(Transfer)
818
+ event_data = nil
819
+ on_drag_start {|event|
820
+ Gladiator.drag = true
821
+ tab_folder = event.widget.getControl
822
+ tab_item = tab_folder.getItem(Point.new(event.x, event.y))
823
+ event_data = tab_item.getData('file_path')
824
+ }
825
+ on_drag_set_data { |event|
826
+ event.data = event_data
827
+ }
764
828
  }
765
829
  }
830
+ @current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
766
831
  }
767
- @current_tab_folder.swt_widget.setData('proxy', @current_tab_folder)
768
832
  }
769
- }
833
+ } # end of sash form
770
834
  }
771
835
  }
772
836
 
@@ -792,7 +856,7 @@ module Glimmer
792
856
  project_dir.ignore_paths ||= ['packages', 'tmp']
793
857
  open_file_paths1 = @config[:open_file_paths1] || @config[:open_file_paths]
794
858
  open_file_paths2 = @config[:open_file_paths2]
795
- self.split_orientation = swt(@config[:split_orientation] || :horizontal) rescue swt(:horizontal)
859
+ self.split_orientation = (swt(@config[:split_orientation]) rescue swt(:horizontal)) if @config[:split_orientation]
796
860
  if @progress_bar_shell.nil?
797
861
  @progress_bar_shell = shell(body_root, :title) {
798
862
  text 'Gladiator'
@@ -869,16 +933,17 @@ module Glimmer
869
933
  end
870
934
 
871
935
  def save_config
872
- return unless @loaded_config
936
+ return if !@loaded_config || body_root.disposed?
873
937
  child = project_dir.selected_child
874
938
  return if child.nil?
875
939
  tab_folder1 = @tab_folder1 || @current_tab_folder
876
940
  tab_folder2 = @tab_folder2
877
941
  open_file_paths1 = tab_folder1&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
878
942
  open_file_paths2 = tab_folder2&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
943
+ split_orientation_value = split_orientation == swt(:horizontal) ? 'horizontal' : (split_orientation == swt(:vertical) ? 'vertical' : nil)
879
944
  @config = {
880
945
  selected_child_path: child.path,
881
- split_orientation: split_orientation == swt(:horizontal) ? 'horizontal' : 'vertical',
946
+ split_orientation: split_orientation_value,
882
947
  caret_position: child.caret_position,
883
948
  top_pixel: child.top_pixel,
884
949
  shell_width: swt_widget&.getBounds&.width,
@@ -894,23 +959,70 @@ module Glimmer
894
959
  rescue => e
895
960
  puts e.full_message
896
961
  end
962
+
963
+ def navigate_to_next_tab_folder
964
+ if tab_folder2
965
+ self.maximized_pane = false
966
+ if current_tab_folder == tab_folder1
967
+ self.current_tab_folder = tab_folder2
968
+ else
969
+ self.current_tab_folder = tab_folder1
970
+ end
971
+ self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
972
+ self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
973
+ self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
974
+ current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
975
+ end
976
+ end
897
977
 
898
- def close_tab_folder
978
+ def navigate_to_previous_tab_folder
979
+ if tab_folder2
980
+ self.maximized_pane = false
981
+ if current_tab_folder == tab_folder2
982
+ self.current_tab_folder = tab_folder1
983
+ else
984
+ self.current_tab_folder = tab_folder2
985
+ end
986
+ self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
987
+ self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
988
+ self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
989
+ current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
990
+ end
991
+ end
992
+
993
+ def close_all_tabs(closing_tab_folder = nil)
994
+ closing_tab_folder ||= current_tab_folder
995
+ closing_tab_folder.swt_widget.getItems.each do |tab_item|
996
+ project_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
997
+ tab_item.getData('proxy')&.dispose
998
+ end
999
+ close_tab_folder(closing_tab_folder)
1000
+ if self.current_tab_item.nil?
1001
+ filter_text.swt_widget.selectAll
1002
+ filter_text.swt_widget.setFocus
1003
+ end
1004
+ end
1005
+
1006
+ def close_tab_folder(closing_tab_folder = nil)
1007
+ closing_tab_folder ||= current_tab_folder
899
1008
  if @tab_folder2 && !selected_tab_item
900
- if @current_tab_folder == @tab_folder2
1009
+ if closing_tab_folder == @tab_folder2
901
1010
  @tab_folder2.swt_widget.dispose
902
- @current_tab_folder = @tab_folder1
1011
+ self.current_tab_folder = @tab_folder1
903
1012
  else
904
1013
  @tab_folder1.swt_widget.dispose
905
- @current_tab_folder = @tab_folder1 = @tab_folder2
1014
+ self.current_tab_folder = self.tab_folder1 = @tab_folder2
906
1015
  end
907
- @tab_folder2 = nil
1016
+ self.tab_folder2 = nil
1017
+ body_root.pack_same_size
908
1018
 
909
- @current_tab_item = @current_tab_folder.swt_widget.getData('selected_tab_item')
1019
+ @current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
910
1020
  @current_text_editor = @current_tab_item.swt_tab_item.getData('text_editor')
911
1021
  project_dir.selected_child = @current_tab_item.swt_tab_item.getData('file')
912
-
913
- async_exec { body_root.pack_same_size }
1022
+ @current_text_editor&.text_widget&.setFocus
1023
+ async_exec { @current_text_editor&.text_widget&.setFocus }
1024
+ else
1025
+ self.current_tab_item = self.current_text_editor = project_dir.selected_child = nil
914
1026
  end
915
1027
  end
916
1028
 
@@ -925,6 +1037,23 @@ module Glimmer
925
1037
  def other_tab_items
926
1038
  @current_tab_folder.swt_widget.getItems.reject { |ti| ti.getData('file_path') == project_dir.selected_child&.path }
927
1039
  end
1040
+
1041
+ def collapse_navigation_expand_bar_height
1042
+ @navigation_expand_item_height = @navigation_expand_item.swt_expand_item.height if @navigation_expand_item.swt_expand_item.height > 0
1043
+ @navigation_expand_item.swt_expand_item.height = 0
1044
+ body_root.pack_same_size
1045
+ async_exec {
1046
+ body_root.pack_same_size
1047
+ }
1048
+ end
1049
+
1050
+ def expand_navigation_expand_bar_height
1051
+ @navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
1052
+ body_root.pack_same_size
1053
+ async_exec {
1054
+ body_root.pack_same_size
1055
+ }
1056
+ end
928
1057
 
929
1058
  def extract_tree_item_path(tree_item)
930
1059
  return if tree_item.nil?
@@ -1018,22 +1147,24 @@ module Glimmer
1018
1147
  file = edited_tree_item.getData
1019
1148
  file_path = file.path
1020
1149
  file.name
1021
- if new_file
1022
- project_dir.selected_child_path = file_path
1023
- else
1024
- found_text_editor&.file = file
1025
- found_tab_item&.setData('file', file)
1026
- found_tab_item&.setData('file_path', file.path)
1027
- found_tab_item&.setText(file.name)
1028
- body_root.pack_same_size
1029
- if current_file
1150
+ if ::File.file?(file_path)
1151
+ if new_file
1030
1152
  project_dir.selected_child_path = file_path
1031
1153
  else
1032
- selected_tab_item&.getData('text_editor')&.text_widget&.setFocus
1154
+ found_text_editor&.file = file
1155
+ found_tab_item&.setData('file', file)
1156
+ found_tab_item&.setData('file_path', file.path)
1157
+ found_tab_item&.setText(file.name)
1158
+ body_root.pack_same_size
1159
+ if current_file
1160
+ project_dir.selected_child_path = file_path
1161
+ else
1162
+ selected_tab_item&.getData('text_editor')&.text_widget&.setFocus
1163
+ end
1164
+ async_exec {
1165
+ @file_tree.swt_widget.showItem(edited_tree_item)
1166
+ }
1033
1167
  end
1034
- async_exec {
1035
- @file_tree.swt_widget.showItem(edited_tree_item)
1036
- }
1037
1168
  end
1038
1169
  project_dir.resume_refresh
1039
1170
  },
@@ -1115,29 +1246,20 @@ module Glimmer
1115
1246
  find_action.call
1116
1247
  else
1117
1248
  @navigation_expand_item.swt_expand_item.set_expanded true
1118
- @navigation_expand_item.swt_expand_item.height = @navigation_expand_item_height if @navigation_expand_item_height
1119
1249
  async_exec {
1120
1250
  body_root.pack_same_size
1251
+ find_action.call
1121
1252
  }
1122
- async_exec(&find_action)
1123
1253
  end
1124
1254
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'c'
1125
1255
  Clipboard.copy(project_dir.selected_child.path)
1126
1256
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'g'
1127
1257
  project_dir.selected_child.find_previous
1128
- elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'p'
1129
- open_project
1130
- elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 's'
1131
- project_dir.selected_child_path = '' # scratchpad
1258
+ elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'o'
1259
+ self.maximized_pane = false
1260
+ self.split_orientation = split_pane? && split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
1132
1261
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'w'
1133
- current_tab_folder.swt_widget.getItems.each do |tab_item|
1134
- project_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
1135
- tab_item.getData('proxy')&.dispose
1136
- end
1137
- close_tab_folder
1138
- self.current_tab_item = self.current_text_editor = project_dir.selected_child = nil
1139
- filter_text.swt_widget.selectAll
1140
- filter_text.swt_widget.setFocus
1262
+ close_all_tabs
1141
1263
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :alt) && extract_char(key_event) == 'w'
1142
1264
  other_tab_items.each do |tab_item|
1143
1265
  project_dir.selected_child_path_history.delete(tab_item.getData('file_path'))
@@ -1156,8 +1278,6 @@ module Glimmer
1156
1278
  current_text_editor&.text_widget&.setFocus
1157
1279
  end
1158
1280
  end
1159
- elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'o'
1160
- self.split_orientation = split_pane? && split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
1161
1281
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
1162
1282
  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
1163
1283
  current_text_editor&.text_widget&.setFocus
@@ -1165,27 +1285,9 @@ module Glimmer
1165
1285
  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
1166
1286
  current_text_editor&.text_widget&.setFocus
1167
1287
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == ']'
1168
- if tab_folder2
1169
- if current_tab_folder == tab_folder1
1170
- self.current_tab_folder = tab_folder2
1171
- else
1172
- self.current_tab_folder = tab_folder1
1173
- end
1174
- self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
1175
- self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
1176
- current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
1177
- end
1288
+ navigate_to_next_tab_folder
1178
1289
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :ctrl) && extract_char(key_event) == '['
1179
- if tab_folder2
1180
- if current_tab_folder == tab_folder2
1181
- self.current_tab_folder = tab_folder1
1182
- else
1183
- self.current_tab_folder = tab_folder2
1184
- end
1185
- self.current_tab_item = current_tab_folder.swt_widget.getData('selected_tab_item')
1186
- self.project_dir.selected_child = current_tab_item&.swt_tab_item&.getData('file')
1187
- current_tab_item&.swt_tab_item&.getData('text_editor')&.text_widget&.setFocus
1188
- end
1290
+ navigate_to_previous_tab_folder
1189
1291
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == '1'
1190
1292
  current_tab_folder.swt_widget.setSelection(0) if current_tab_folder.swt_widget.getItemCount >= 1
1191
1293
  current_text_editor&.text_widget&.setFocus
@@ -1231,6 +1333,7 @@ module Glimmer
1231
1333
  line_number_text.swt_widget.setFocus
1232
1334
  end
1233
1335
  elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'r'
1336
+ self.maximized_editor = false
1234
1337
  unless @file_lookup_expand_item.swt_expand_item.get_expanded
1235
1338
  @file_lookup_expand_item.swt_expand_item.set_expanded true
1236
1339
  @file_lookup_expand_item.swt_expand_item.height = @file_lookup_expand_item_height if @file_lookup_expand_item_height
@@ -1239,6 +1342,7 @@ module Glimmer
1239
1342
  filter_text.swt_widget.selectAll
1240
1343
  filter_text.swt_widget.setFocus
1241
1344
  elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 't'
1345
+ self.maximized_editor = false
1242
1346
  unless @file_explorer_expand_item.swt_expand_item.get_expanded
1243
1347
  @file_explorer_expand_item.swt_expand_item.set_expanded true
1244
1348
  @file_explorer_expand_item.swt_expand_item.height = @file_explorer_expand_item_height if @file_explorer_expand_item_height