glimmer-cs-gladiator 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -13
- data/VERSION +1 -1
- data/lib/models/glimmer/gladiator/dir.rb +43 -15
- data/lib/models/glimmer/gladiator/file.rb +78 -39
- data/lib/views/glimmer/gladiator.rb +106 -40
- data/lib/views/glimmer/gladiator/text_editor.rb +8 -7
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d31e7dd5189317eaeb3a91a175a050ffaaeb4e82d6c8709167477d26dd7bf237
|
4
|
+
data.tar.gz: 370a540665a9d7f3d08154f1e98530521f72e9a720f35fa83f982747e2e5bf5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7af2ad9407c442ad6634a843ad3b5fc6cac47dadbd84ec0dc0b19f8d38b858950648a951383be811f040232ab426cbf0dffc1ad1d003a33a6a3cefd07d6c6832
|
7
|
+
data.tar.gz: a9d30dc68de3f7de8fa25c9860c57885892e4ceeea734c63bc4fd2b257736afc0e1b0c7a062d03af93991d03d05907dbfbe058adcf6e13d695ce524167ce5aef
|
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.5.
|
1
|
+
# <img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=85 /> Gladiator 0.5.4 - [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,9 @@ 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
|
- Ruby Syntax Highlighting with colors
|
16
|
+
- Open Project from File Menu (CMD+SHIFT+P)
|
17
|
+
- Scratchpad for running arbitrary Ruby/Glimmer code without saving to disk (CMD+SHIFT+S)
|
18
|
+
- Run Ruby code (CMD+SHIFT+R)
|
16
19
|
- File explorer navigation with context menu to open file, rename, delete, add new file, add new directory, or refresh tree (CMD+T)
|
17
20
|
- File lookup by name ignoring slashes, underscores, and dots to ease lookup (CMD+R)
|
18
21
|
- Watch open file for external changes to automatically refresh in editor
|
@@ -30,10 +33,8 @@ Gladiator currently supports the following text editing features (including keyb
|
|
30
33
|
- Comment/Uncomment line/selection (CMD+/)
|
31
34
|
- Indent/Unindent line/selection (CMD+] & CMD+[)
|
32
35
|
- Insert/Prefix New Line (CMD+ENTER & CMD+SHIFT+ENTER)
|
33
|
-
-
|
34
|
-
-
|
35
|
-
- Scratchpad for running arbitrary Ruby/Glimmer code without saving to disk (CMD+SHIFT+S)
|
36
|
-
- Change Split Orientation to Horizontal/Vertical via View Menu (CMD+SHIFT+O)
|
36
|
+
- Split Pane & Change Split Orientation to Horizontal/Vertical via View Menu (CMD+SHIFT+O)
|
37
|
+
- Drag and Drop Text Editor Split Screen (drag a file from File Tree or File Lookup List, and it splits the pane)
|
37
38
|
|
38
39
|
## Platforms
|
39
40
|
|
@@ -77,6 +78,12 @@ You may run the `gladiator` command to bring up the text editor in the project d
|
|
77
78
|
gladiator
|
78
79
|
```
|
79
80
|
|
81
|
+
On Linux, you may need to run with extra memory via this command instead:
|
82
|
+
|
83
|
+
```
|
84
|
+
gladiator -J-Xmx1200M
|
85
|
+
```
|
86
|
+
|
80
87
|
On Windows, you may need to run with extra memory via this command instead:
|
81
88
|
|
82
89
|
```
|
@@ -103,7 +110,7 @@ To reuse Gladiator as a Glimmer Custom Shell inside another Glimmer application,
|
|
103
110
|
following to the application's `Gemfile`:
|
104
111
|
|
105
112
|
```
|
106
|
-
gem 'glimmer-cs-gladiator', '~> 0.5.
|
113
|
+
gem 'glimmer-cs-gladiator', '~> 0.5.4'
|
107
114
|
```
|
108
115
|
|
109
116
|
Run:
|
@@ -132,13 +139,9 @@ Opens Gladiator with "/Users/User/code" as the root directory.
|
|
132
139
|
Gladiator automatically saves configuration data in a `.gladiator` file at the directory it is run from.
|
133
140
|
|
134
141
|
It currently remembers:
|
135
|
-
- Last opened
|
136
|
-
-
|
137
|
-
-
|
138
|
-
- Window size
|
139
|
-
- Opened tabs
|
140
|
-
- Split tabs
|
141
|
-
- Ignore Paths
|
142
|
+
- Last opened files (in both split panes if split)
|
143
|
+
- Window size and position
|
144
|
+
- Ignore Paths (default: '.gladiator', '.git', 'coverage', 'packages', 'node_modules', 'tmp', 'vendor')
|
142
145
|
|
143
146
|
## Gotcha
|
144
147
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.4
|
@@ -6,8 +6,6 @@ module Glimmer
|
|
6
6
|
include Glimmer
|
7
7
|
include Glimmer::DataBinding::ObservableModel
|
8
8
|
|
9
|
-
REFRESH_DELAY = 7
|
10
|
-
|
11
9
|
attr_accessor :selected_child, :filter, :children, :filtered_path_options, :filtered_path, :display_path, :ignore_paths
|
12
10
|
attr_reader :name, :parent, :path
|
13
11
|
attr_writer :all_children
|
@@ -15,19 +13,30 @@ module Glimmer
|
|
15
13
|
def initialize(path, project_dir = nil)
|
16
14
|
@project_dir = project_dir
|
17
15
|
if is_local_dir
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
@filewatcher = Filewatcher.new(path)
|
17
|
+
Thread.new(@filewatcher) do |fw|
|
18
|
+
begin
|
19
|
+
fw.watch do |filename, event|
|
20
|
+
# TODO do fine grained processing of events for enhanced performance (e.g. dir refresh vs file change)
|
21
|
+
# TODO do fine grained file change only without a refresh delay for enhanced performance
|
22
|
+
begin
|
23
|
+
if !@refresh_in_progress && !filename.include?('new_file') && (event != :updated || find_child_file(filename).nil?)
|
24
|
+
Thread.new {
|
25
|
+
refresh
|
26
|
+
}
|
27
|
+
end
|
28
|
+
rescue => e
|
29
|
+
puts e.full_message
|
30
|
+
end
|
31
|
+
end
|
32
|
+
rescue => e
|
33
|
+
puts e.full_message
|
34
|
+
end
|
35
|
+
end
|
27
36
|
end
|
28
37
|
self.path = ::File.expand_path(path)
|
29
38
|
@name = ::File.basename(::File.expand_path(path))
|
30
|
-
@ignore_paths = ['.gladiator', '.git', 'coverage', 'packages', 'tmp', 'vendor']
|
39
|
+
@ignore_paths = ['.gladiator', '.git', 'coverage', 'packages', 'node_modules', 'tmp', 'vendor']
|
31
40
|
self.filtered_path_options = []
|
32
41
|
end
|
33
42
|
|
@@ -67,7 +76,7 @@ module Glimmer
|
|
67
76
|
result || p.include?(ignore_path)
|
68
77
|
end
|
69
78
|
end.map do |p|
|
70
|
-
::File.file?(p) ?
|
79
|
+
::File.file?(p) ? File.new(p, project_dir) : Dir.new(p, project_dir)
|
71
80
|
end.sort_by do |c|
|
72
81
|
c.path.to_s.downcase
|
73
82
|
end.sort_by do |c|
|
@@ -76,6 +85,22 @@ module Glimmer
|
|
76
85
|
child.retrieve_children if child.is_a?(Dir)
|
77
86
|
end
|
78
87
|
end
|
88
|
+
|
89
|
+
def find_child_file(child_path)
|
90
|
+
depth_first_search_file(self, child_path)
|
91
|
+
end
|
92
|
+
|
93
|
+
def depth_first_search_file(dir, file_path)
|
94
|
+
dir.children.each do |child|
|
95
|
+
if child.is_a?(File)
|
96
|
+
return child if child.path.include?(file_path)
|
97
|
+
else
|
98
|
+
result = depth_first_search_file(child, file_path)
|
99
|
+
return result unless result.nil?
|
100
|
+
end
|
101
|
+
end
|
102
|
+
nil
|
103
|
+
end
|
79
104
|
|
80
105
|
def selected_child_path_history
|
81
106
|
@selected_child_path_history ||= []
|
@@ -91,6 +116,7 @@ module Glimmer
|
|
91
116
|
|
92
117
|
def refresh(async: true, force: false)
|
93
118
|
return if @refresh_paused && !force
|
119
|
+
@refresh_in_progress = true
|
94
120
|
retrieve_children
|
95
121
|
collect_all_children
|
96
122
|
refresh_operation = lambda do
|
@@ -102,6 +128,7 @@ module Glimmer
|
|
102
128
|
else
|
103
129
|
sync_exec(&refresh_operation)
|
104
130
|
end
|
131
|
+
@refresh_in_progress = false
|
105
132
|
end
|
106
133
|
|
107
134
|
def filter=(value)
|
@@ -144,7 +171,7 @@ module Glimmer
|
|
144
171
|
def selected_child_path=(selected_path)
|
145
172
|
return (project_dir.selected_child = nil) if selected_path.nil?
|
146
173
|
# scratchpad scenario
|
147
|
-
if selected_path.empty? #
|
174
|
+
if selected_path.empty? # Scratchpad
|
148
175
|
@selected_child&.write_dirty_content
|
149
176
|
return (self.selected_child = File.new)
|
150
177
|
end
|
@@ -154,7 +181,7 @@ module Glimmer
|
|
154
181
|
selected_path = full_selected_path
|
155
182
|
if ::File.file?(selected_path)
|
156
183
|
@selected_child&.write_dirty_content
|
157
|
-
new_child =
|
184
|
+
new_child = find_child_file(selected_path)
|
158
185
|
begin
|
159
186
|
unless new_child.dirty_content.nil?
|
160
187
|
self.selected_child&.stop_filewatcher
|
@@ -175,6 +202,7 @@ module Glimmer
|
|
175
202
|
end
|
176
203
|
|
177
204
|
def selected_child=(new_child)
|
205
|
+
return if selected_child == new_child
|
178
206
|
file_properties = @selected_child&.backup_properties if @selected_child == new_child
|
179
207
|
@selected_child = new_child
|
180
208
|
@selected_child.restore_properties(file_properties) if file_properties
|
@@ -3,7 +3,7 @@ module Glimmer
|
|
3
3
|
class File
|
4
4
|
include Glimmer
|
5
5
|
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :line_numbers_content, :selection, :line_number, :find_text, :replace_text, :top_pixel, :display_path, :case_sensitive
|
7
7
|
attr_reader :name, :path, :project_dir
|
8
8
|
|
9
9
|
def initialize(path='', project_dir=nil)
|
@@ -15,31 +15,45 @@ module Glimmer
|
|
15
15
|
@top_pixel = 0
|
16
16
|
@selection_count = 0
|
17
17
|
@selection = Point.new(0, 0 + @selection_count)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
18
|
+
@line_number = 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def init_content
|
22
|
+
unless @init
|
23
|
+
@init = true
|
24
|
+
begin
|
25
|
+
# test read dirty content
|
26
|
+
observe(self, :dirty_content) do
|
27
|
+
lines_text_size = lines.size.to_s.size
|
28
|
+
old_top_pixel = top_pixel
|
29
|
+
self.line_numbers_content = lines.size.times.map {|n| (' ' * (lines_text_size - (n+1).to_s.size)) + (n+1).to_s }.join("\n")
|
30
|
+
self.top_pixel = old_top_pixel
|
31
|
+
end
|
32
|
+
the_dirty_content = read_dirty_content
|
33
|
+
the_dirty_content.split("\n") # test that it is not a binary file (crashes to rescue block otherwise)
|
34
|
+
self.dirty_content = the_dirty_content
|
35
|
+
observe(self, :selection) do
|
36
|
+
new_line_number = line_index_for_caret_position(caret_position) + 1
|
37
|
+
async_exec {
|
38
|
+
self.line_number = new_line_number
|
39
|
+
}
|
40
|
+
end
|
41
|
+
observe(self, :line_number) do
|
42
|
+
if line_number
|
43
|
+
line_index = line_number - 1
|
44
|
+
new_caret_position = caret_position_for_line_index(line_index)
|
45
|
+
current_caret_position = self.caret_position
|
46
|
+
async_exec {
|
47
|
+
self.caret_position = new_caret_position unless current_caret_position && line_index_for_caret_position(new_caret_position) == line_index_for_caret_position(current_caret_position)
|
48
|
+
}
|
49
|
+
end
|
36
50
|
end
|
51
|
+
rescue # in case of a binary file
|
52
|
+
stop_filewatcher
|
37
53
|
end
|
38
|
-
rescue
|
39
|
-
# no op in case of a binary file
|
40
54
|
end
|
41
55
|
end
|
42
|
-
|
56
|
+
|
43
57
|
def path=(the_path)
|
44
58
|
@path = the_path
|
45
59
|
generate_display_path
|
@@ -71,6 +85,7 @@ module Glimmer
|
|
71
85
|
def content=(value)
|
72
86
|
value = value.gsub("\t", ' ')
|
73
87
|
if dirty_content != value
|
88
|
+
# TODO fix this command recording hack by truly recording every text change as a proper command (add process_key command, paste command, cut command, etc...)
|
74
89
|
Command.do(self) # record a native (OS-widget) operation
|
75
90
|
self.dirty_content = value
|
76
91
|
end
|
@@ -107,9 +122,26 @@ module Glimmer
|
|
107
122
|
end
|
108
123
|
end
|
109
124
|
|
125
|
+
def dirty_content
|
126
|
+
init_content
|
127
|
+
@dirty_content
|
128
|
+
end
|
129
|
+
|
110
130
|
def dirty_content=(the_content)
|
131
|
+
# TODO set partial dirty content by line(s) for enhanced performance
|
111
132
|
@dirty_content = the_content
|
133
|
+
old_caret_position = caret_position
|
134
|
+
old_top_pixel = top_pixel
|
112
135
|
notify_observers(:content)
|
136
|
+
if @formatting_dirty_content_for_writing
|
137
|
+
self.caret_position = old_caret_position
|
138
|
+
self.selection_count = 0
|
139
|
+
self.top_pixel = old_top_pixel
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def read_dirty_content
|
144
|
+
path.empty? ? '' : ::File.read(path)
|
113
145
|
end
|
114
146
|
|
115
147
|
def start_filewatcher
|
@@ -117,15 +149,13 @@ module Glimmer
|
|
117
149
|
@filewatcher = Filewatcher.new(@path)
|
118
150
|
@thread = Thread.new(@filewatcher) do |fw|
|
119
151
|
fw.watch do |filename, event|
|
120
|
-
|
121
|
-
|
122
|
-
# test read dirty content
|
123
|
-
read_dirty_content.split("\n")
|
124
|
-
async_exec do
|
152
|
+
async_exec do
|
153
|
+
begin
|
125
154
|
self.dirty_content = read_dirty_content if read_dirty_content != dirty_content
|
155
|
+
rescue StandardError, Errno::ENOENT
|
156
|
+
# in case of a binary file
|
157
|
+
stop_filewatcher
|
126
158
|
end
|
127
|
-
rescue
|
128
|
-
# no op in case of a binary file
|
129
159
|
end
|
130
160
|
end
|
131
161
|
end
|
@@ -135,21 +165,26 @@ module Glimmer
|
|
135
165
|
@filewatcher&.stop
|
136
166
|
end
|
137
167
|
|
138
|
-
def format_dirty_content_for_writing!
|
139
|
-
new_dirty_content = dirty_content.split("\n").map {|line| line.strip.empty? ? line : line.rstrip }.join("\n")
|
140
|
-
new_dirty_content = "#{new_dirty_content.gsub("\r\n", "\n").gsub("\r", "\n").sub(/\n+\z/, '')}\n"
|
141
|
-
self.dirty_content = new_dirty_content if new_dirty_content != self.dirty_content
|
142
|
-
end
|
143
|
-
|
144
168
|
def write_dirty_content
|
145
|
-
|
169
|
+
# TODO write partial dirty content by line(s) for enhanced performance
|
170
|
+
return if scratchpad? || !::File.exist?(path) || !::File.exists?(path) || read_dirty_content == dirty_content
|
146
171
|
format_dirty_content_for_writing!
|
147
|
-
::File.write(path, dirty_content)
|
148
|
-
rescue => e
|
172
|
+
::File.write(path, dirty_content)
|
173
|
+
rescue StandardError, ArgumentError => e
|
149
174
|
puts "Error in writing dirty content for #{path}"
|
150
175
|
puts e.full_message
|
151
176
|
end
|
152
177
|
|
178
|
+
def format_dirty_content_for_writing!
|
179
|
+
new_dirty_content = dirty_content.split("\n").map {|line| line.strip.empty? ? line : line.rstrip }.join("\n")
|
180
|
+
new_dirty_content = "#{new_dirty_content.gsub("\r\n", "\n").gsub("\r", "\n").sub(/\n+\z/, '')}\n"
|
181
|
+
if new_dirty_content != self.dirty_content
|
182
|
+
@formatting_dirty_content_for_writing = true
|
183
|
+
self.dirty_content = new_dirty_content
|
184
|
+
@formatting_dirty_content_for_writing = false
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
153
188
|
def write_raw_dirty_content
|
154
189
|
return if scratchpad? || !::File.exist?(path)
|
155
190
|
::File.write(path, dirty_content) if ::File.exists?(path)
|
@@ -185,7 +220,7 @@ module Glimmer
|
|
185
220
|
self.caret_position = caret_position_for_line_index(line_number) + current_line_indentation.size
|
186
221
|
self.selection_count = 0
|
187
222
|
end
|
188
|
-
|
223
|
+
|
189
224
|
def comment_line!
|
190
225
|
old_lines = lines
|
191
226
|
return if old_lines.size < 1
|
@@ -219,6 +254,7 @@ module Glimmer
|
|
219
254
|
new_caret_position = old_caret_position + delta
|
220
255
|
new_caret_position = [new_caret_position, old_caret_position_line_caret_position].max
|
221
256
|
self.caret_position = new_caret_position
|
257
|
+
self.selection_count = 0
|
222
258
|
end
|
223
259
|
end
|
224
260
|
|
@@ -243,6 +279,7 @@ module Glimmer
|
|
243
279
|
self.selection_count = (caret_position_for_line_index(old_end_caret_line_index + 1) - self.caret_position)
|
244
280
|
else
|
245
281
|
self.caret_position = old_caret_position + delta
|
282
|
+
self.selection_count = 0
|
246
283
|
end
|
247
284
|
end
|
248
285
|
|
@@ -274,6 +311,7 @@ module Glimmer
|
|
274
311
|
new_caret_position = old_caret_position + delta
|
275
312
|
new_caret_position = [new_caret_position, old_caret_position_line_caret_position].max
|
276
313
|
self.caret_position = new_caret_position
|
314
|
+
self.selection_count = 0
|
277
315
|
end
|
278
316
|
end
|
279
317
|
|
@@ -311,6 +349,7 @@ module Glimmer
|
|
311
349
|
self.selection_count = (caret_position_for_line_index(old_end_caret_line_index + 1) - self.caret_position)
|
312
350
|
else
|
313
351
|
self.caret_position = old_caret_position + delta
|
352
|
+
self.selection_count = 0
|
314
353
|
end
|
315
354
|
end
|
316
355
|
|
@@ -35,8 +35,26 @@ module Glimmer
|
|
35
35
|
@project_dir ||= Dir.new(project_dir_path)
|
36
36
|
end
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
def split_orientation=(value)
|
39
|
+
@split_orientation = value
|
40
|
+
save_config
|
41
|
+
if @loaded_config && !split_pane?
|
42
|
+
Gladiator.drag = true
|
43
|
+
child_path = project_dir.selected_child_path
|
44
|
+
project_dir.selected_child = nil
|
45
|
+
project_dir.selected_child_path = child_path
|
46
|
+
Gladiator.drag = false
|
47
|
+
end
|
48
|
+
@split_orientation
|
49
|
+
end
|
50
|
+
|
51
|
+
def split_pane?
|
52
|
+
pane_count = @tab_folder_sash_form&.children&.size
|
53
|
+
pane_count && pane_count > 1
|
54
|
+
end
|
55
|
+
|
56
|
+
attr_reader :find_text, :tab_folder1, :tab_folder2, :filter_text, :rename_in_progress, :line_number_text, :file_tree, :split_orientation
|
57
|
+
attr_accessor :current_tab_item, :current_tab_folder, :current_text_editor
|
40
58
|
|
41
59
|
## Uncomment before_body block to pre-initialize variables to use in body
|
42
60
|
#
|
@@ -180,7 +198,7 @@ module Glimmer
|
|
180
198
|
begin
|
181
199
|
project_dir.selected_child_path = ''
|
182
200
|
rescue => e
|
183
|
-
|
201
|
+
puts e.full_message
|
184
202
|
end
|
185
203
|
}
|
186
204
|
}
|
@@ -198,11 +216,15 @@ module Glimmer
|
|
198
216
|
text '&Split'
|
199
217
|
menu_item(:radio) {
|
200
218
|
text '&Horizontal'
|
201
|
-
selection bind(self, :split_orientation,
|
219
|
+
selection bind(self, :split_orientation,
|
220
|
+
on_read: ->(o) { split_pane? && o == swt(:horizontal)},
|
221
|
+
on_write: ->(b) { b ? swt(:horizontal) : swt(:vertical) })
|
202
222
|
}
|
203
223
|
menu_item(:radio) {
|
204
224
|
text '&Vertical'
|
205
|
-
selection bind(self, :split_orientation,
|
225
|
+
selection bind(self, :split_orientation,
|
226
|
+
on_read: ->(o) { split_pane? && o == swt(:vertical)},
|
227
|
+
on_write: ->(b) { b ? swt(:vertical) : swt(:horizontal) })
|
206
228
|
}
|
207
229
|
}
|
208
230
|
}
|
@@ -248,11 +270,9 @@ module Glimmer
|
|
248
270
|
end
|
249
271
|
}
|
250
272
|
}
|
251
|
-
|
252
|
-
fill_layout(:vertical) {
|
253
|
-
spacing 5
|
254
|
-
}
|
273
|
+
sash_form(:vertical) {
|
255
274
|
layout_data(:fill, :fill, true, true)
|
275
|
+
sash_width 4
|
256
276
|
@list = list(:border, :h_scroll, :v_scroll) {
|
257
277
|
#visible bind(self, 'project_dir.filter') {|f| !!f}
|
258
278
|
selection bind(project_dir, :filtered_path)
|
@@ -517,20 +537,59 @@ module Glimmer
|
|
517
537
|
project_dir.ignore_paths ||= ['packages', 'tmp']
|
518
538
|
open_file_paths1 = @config[:open_file_paths1] || @config[:open_file_paths]
|
519
539
|
open_file_paths2 = @config[:open_file_paths2]
|
520
|
-
|
521
|
-
|
540
|
+
self.split_orientation = swt(@config[:split_orientation] || :horizontal) rescue swt(:horizontal)
|
541
|
+
if @progress_bar_shell.nil?
|
542
|
+
@progress_bar_shell = shell(body_root) {
|
543
|
+
text 'Opening Last Open Files'
|
544
|
+
fill_layout(:vertical) {
|
545
|
+
margin_width 15
|
546
|
+
margin_height 15
|
547
|
+
spacing 5
|
548
|
+
}
|
549
|
+
label(:center) {
|
550
|
+
text "Opening Last Open Files"
|
551
|
+
font height: 20
|
552
|
+
}
|
553
|
+
# @progress_bar = progress_bar(:horizontal, :indeterminate)
|
554
|
+
}
|
555
|
+
async_exec {
|
556
|
+
@progress_bar_shell.open
|
557
|
+
}
|
522
558
|
end
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
559
|
+
open_file_paths1.to_a.each do |file_path|
|
560
|
+
async_exec {
|
561
|
+
Gladiator.drag = false
|
562
|
+
project_dir.selected_child_path = file_path
|
563
|
+
}
|
528
564
|
end
|
529
565
|
# TODO replace the next line with one that selects the visible tab
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
566
|
+
async_exec {
|
567
|
+
Gladiator.drag = false
|
568
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path] && open_file_paths1.to_a.include?(@config[:selected_child_path])
|
569
|
+
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]
|
570
|
+
project_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
|
571
|
+
}
|
572
|
+
async_exec {
|
573
|
+
open_file_paths2.to_a.each do |file_path|
|
574
|
+
async_exec {
|
575
|
+
Gladiator.drag = true
|
576
|
+
project_dir.selected_child_path = file_path
|
577
|
+
}
|
578
|
+
end
|
579
|
+
# TODO replace the next line with one that selects the visible tab
|
580
|
+
async_exec {
|
581
|
+
Gladiator.drag = true
|
582
|
+
project_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path] && open_file_paths2.to_a.include?(@config[:selected_child_path])
|
583
|
+
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]
|
584
|
+
project_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
|
585
|
+
}
|
586
|
+
async_exec {
|
587
|
+
Gladiator.drag = false
|
588
|
+
@progress_bar_shell.close
|
589
|
+
@progress_bar_shell = nil
|
590
|
+
@loaded_config = true
|
591
|
+
}
|
592
|
+
}
|
534
593
|
else
|
535
594
|
@loaded_config = true
|
536
595
|
end
|
@@ -546,6 +605,7 @@ module Glimmer
|
|
546
605
|
open_file_paths2 = tab_folder2&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
|
547
606
|
@config = {
|
548
607
|
selected_child_path: child.path,
|
608
|
+
split_orientation: split_orientation == swt(:horizontal) ? 'horizontal' : 'vertical',
|
549
609
|
caret_position: child.caret_position,
|
550
610
|
top_pixel: child.top_pixel,
|
551
611
|
shell_width: swt_widget&.getBounds&.width,
|
@@ -612,17 +672,23 @@ module Glimmer
|
|
612
672
|
return if tree_item.nil?
|
613
673
|
file = tree_item.getData
|
614
674
|
parent_path = ::File.dirname(file.path)
|
675
|
+
if file.is_a?(Gladiator::Dir)
|
676
|
+
file_paths = file.all_children.select {|f| f.is_a?(Gladiator::File)}.map(&:path)
|
677
|
+
else
|
678
|
+
file_paths = [file.path]
|
679
|
+
end
|
680
|
+
file_paths.each do |file_path|
|
681
|
+
found_tab_item = find_tab_item(file_path)
|
682
|
+
if found_tab_item
|
683
|
+
project_dir.selected_child_path_history.delete(found_tab_item.getData('file_path'))
|
684
|
+
found_tab_item.getData('proxy')&.dispose
|
685
|
+
end
|
686
|
+
end
|
615
687
|
file.delete! # TODO consider supporting command undo/redo
|
616
688
|
project_dir.refresh(async: false)
|
617
689
|
parent_tree_item = @file_tree.depth_first_search {|ti| ti.getData.path == parent_path}.first
|
618
690
|
@file_tree.swt_widget.showItem(parent_tree_item)
|
619
691
|
parent_tree_item.setExpanded(true)
|
620
|
-
# TODO close text editor tab
|
621
|
-
found_tab_item = find_tab_item(file.path)
|
622
|
-
if found_tab_item
|
623
|
-
project_dir.selected_child_path_history.delete(found_tab_item.getData('file_path'))
|
624
|
-
found_tab_item.getData('proxy')&.dispose
|
625
|
-
end
|
626
692
|
rescue => e
|
627
693
|
puts e.full_message
|
628
694
|
end
|
@@ -691,6 +757,9 @@ module Glimmer
|
|
691
757
|
else
|
692
758
|
selected_tab_item&.getData('text_editor')&.text_widget&.setFocus
|
693
759
|
end
|
760
|
+
async_exec {
|
761
|
+
@file_tree.swt_widget.showItem(edited_tree_item)
|
762
|
+
}
|
694
763
|
end
|
695
764
|
project_dir.resume_refresh
|
696
765
|
},
|
@@ -721,19 +790,16 @@ module Glimmer
|
|
721
790
|
}
|
722
791
|
# @progress_bar = progress_bar(:horizontal, :indeterminate)
|
723
792
|
}
|
724
|
-
|
725
|
-
|
726
|
-
@progress_bar_shell.open
|
727
|
-
}
|
793
|
+
async_exec {
|
794
|
+
@progress_bar_shell.open
|
728
795
|
}
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
}
|
796
|
+
async_exec {
|
797
|
+
gladiator(project_dir_path: selected_directory) {
|
798
|
+
on_swt_show {
|
799
|
+
@progress_bar_shell.close
|
800
|
+
@progress_bar_shell = nil
|
801
|
+
}
|
802
|
+
}.open if selected_directory
|
737
803
|
}
|
738
804
|
end
|
739
805
|
|
@@ -780,7 +846,7 @@ module Glimmer
|
|
780
846
|
end
|
781
847
|
end
|
782
848
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'o'
|
783
|
-
self.split_orientation = split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
|
849
|
+
self.split_orientation = split_pane? && split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
|
784
850
|
elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
|
785
851
|
current_tab_folder.swt_widget.setSelection((current_tab_folder.swt_widget.getSelectionIndex() + 1) % current_tab_folder.swt_widget.getItemCount) if current_tab_folder.swt_widget.getItemCount > 0
|
786
852
|
current_text_editor&.text_widget&.setFocus
|
@@ -855,4 +921,4 @@ module Glimmer
|
|
855
921
|
end
|
856
922
|
end
|
857
923
|
end
|
858
|
-
end
|
924
|
+
end
|
@@ -21,7 +21,7 @@ module Glimmer
|
|
21
21
|
composite {
|
22
22
|
layout_data :fill, :fill, true, true
|
23
23
|
grid_layout 2, false
|
24
|
-
@line_numbers_text = styled_text(:multi, :border) {
|
24
|
+
@line_numbers_text = styled_text(:multi, :wrap, :border) {
|
25
25
|
layout_data(:right, :fill, false, true)
|
26
26
|
font name: 'Consolas', height: OS.mac? ? 15 : 12
|
27
27
|
background color(:widget_background)
|
@@ -33,6 +33,7 @@ module Glimmer
|
|
33
33
|
bottom_margin 5
|
34
34
|
left_margin 5
|
35
35
|
editable false
|
36
|
+
alignment swt(:right)
|
36
37
|
on_focus_gained {
|
37
38
|
@text&.swt_widget.setFocus
|
38
39
|
}
|
@@ -52,6 +53,10 @@ module Glimmer
|
|
52
53
|
focus true
|
53
54
|
selection bind(self, 'file.selection')
|
54
55
|
top_pixel bind(self, 'file.top_pixel')
|
56
|
+
top_margin 5
|
57
|
+
right_margin 5
|
58
|
+
bottom_margin 5
|
59
|
+
left_margin 5
|
55
60
|
drop_target(DND::DROP_COPY) {
|
56
61
|
transfer [TextTransfer.getInstance].to_java(Transfer)
|
57
62
|
on_drag_enter { |event|
|
@@ -132,12 +137,8 @@ module Glimmer
|
|
132
137
|
verify_event.text += file.current_line_indentation
|
133
138
|
end
|
134
139
|
when "\t"
|
135
|
-
|
136
|
-
|
137
|
-
verify_event.doit = false
|
138
|
-
else
|
139
|
-
verify_event.text = ' '
|
140
|
-
end
|
140
|
+
Command.do(file, :indent!)
|
141
|
+
verify_event.doit = false
|
141
142
|
end
|
142
143
|
}
|
143
144
|
}
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-cs-gladiator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-11-
|
11
|
+
date: 2020-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 4.17.
|
18
|
+
version: 4.17.10.0
|
19
19
|
- - "<"
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 5.0.0.0
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 4.17.
|
29
|
+
version: 4.17.10.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 5.0.0.0
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
requirements:
|
50
50
|
- - "~>"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.3.
|
52
|
+
version: 1.3.5
|
53
53
|
name: clipboard
|
54
54
|
prerelease: false
|
55
55
|
type: :runtime
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 1.3.
|
60
|
+
version: 1.3.5
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|