arcadia 0.9.2 → 0.9.3
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.
- data/README +11 -28
- data/ext/ae-breakpoints/ae-breakpoints.rb +44 -19
- data/ext/ae-dir-projects/ae-dir-projects.rb +38 -35
- data/ext/ae-editor/ae-editor.rb +252 -97
- data/ext/ae-file-history/ae-file-history.rb +30 -31
- data/ext/ae-output/ae-output.rb +137 -133
- data/ext/ae-ruby-debug/ae-ruby-debug.conf +4 -2
- data/ext/ae-ruby-debug/ae-ruby-debug.rb +95 -47
- data/ext/ae-search-in-files/ae-search-in-files.rb +32 -37
- data/ext/ae-shell/ae-shell.rb +1 -0
- data/lib/a-commons.rb +22 -16
- data/lib/a-contracts.rb +7 -2
- data/lib/a-core.rb +24 -12
- data/lib/a-tkcommons.rb +31 -3
- metadata +5 -5
data/README
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
= Arcadia Ide
|
2
|
-
version 0.9.
|
2
|
+
version 0.9.3
|
3
3
|
|
4
4
|
by Antonio Galeone
|
5
|
-
on
|
5
|
+
on Feb 12, 2011
|
6
6
|
|
7
7
|
|
8
8
|
== About
|
@@ -16,11 +16,10 @@ Some of Arcadia ide project features include:
|
|
16
16
|
* Working on any platform where ruby and tcl-tk work.
|
17
17
|
* Highly extensibility architecture.
|
18
18
|
|
19
|
-
== In this release 0.9.
|
19
|
+
== In this release 0.9.3
|
20
20
|
|
21
21
|
[Improvements]
|
22
|
-
- bugs fixed
|
23
|
-
- supported the maximized state saving of the main window
|
22
|
+
- bugs fixed
|
24
23
|
|
25
24
|
== Dependencies
|
26
25
|
- rubygems
|
@@ -29,7 +28,6 @@ Some of Arcadia ide project features include:
|
|
29
28
|
- ack (optional)
|
30
29
|
- gem coderay
|
31
30
|
- gem ruby-debug (ruby-debug19 on ruby 1.9)
|
32
|
-
- gem whichr
|
33
31
|
- gem win32-process (only on windows)
|
34
32
|
- gem ruby-wmi (only on windows)
|
35
33
|
|
@@ -42,7 +40,7 @@ There are two way:
|
|
42
40
|
b. unzip (on windows) arcadia-<version>.zip
|
43
41
|
|
44
42
|
== How to run
|
45
|
-
* exec on command line "ruby <path/>arcadia"
|
43
|
+
* exec on command line "arcadia" or "ruby <path/>arcadia"
|
46
44
|
|
47
45
|
|
48
46
|
== Short User guide
|
@@ -54,13 +52,11 @@ for the dynamic layout functions.
|
|
54
52
|
|
55
53
|
==== Main Toolbar
|
56
54
|
The toolbar button are in order:
|
57
|
-
- new, open, save
|
58
|
-
(relatively to edit operation)
|
55
|
+
- new, open, save, find
|
56
|
+
(relatively to edit/find operation)
|
59
57
|
- run current, run last
|
60
58
|
(for execute the raised file in the editor or the last runned file)
|
61
59
|
after "run current" there is a menubutton to choose a configurated runner to apply at current file
|
62
|
-
- show rad palette
|
63
|
-
(for tk rad need)
|
64
60
|
- debug current, debug last, quit debug panel
|
65
61
|
(for debug need)
|
66
62
|
- quit (to exit from arcadia)
|
@@ -102,21 +98,6 @@ It is a navigational tree:
|
|
102
98
|
The last used files are organizing in tree so you can reopen them or there
|
103
99
|
directory by clicking on the tree node.
|
104
100
|
|
105
|
-
==== Rad Palette (instable)
|
106
|
-
It contain the wrapper components for the tk gui building.
|
107
|
-
It is in very unstabled and incomplete state.
|
108
|
-
The first component is a TkTopLevel wrapper, when you click on it a new form is created and a
|
109
|
-
Object inspector appears.
|
110
|
-
The other components must be first selected and then created by clicking on container widget.
|
111
|
-
The so created widgets has a popup menu for deleting them or in the toplevel case to switch
|
112
|
-
to a code view.
|
113
|
-
On the palette there are also two button, one for deselect and other for copy from the selected
|
114
|
-
created widget. The copy action copy also the code into the clipboard, so you can copy the
|
115
|
-
code rapresenting the gui into the embedded editor or into external editor.
|
116
|
-
|
117
|
-
==== Rad Object Inspector (instable)
|
118
|
-
It is for modify the widget property at runtime
|
119
|
-
|
120
101
|
==== Debug
|
121
102
|
Require ruby-debug gem.
|
122
103
|
It is created when a debug session init.
|
@@ -133,10 +114,11 @@ under ~/.arcadia directory. The format of property definition are:
|
|
133
114
|
I have tested arcadia with ruby 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.9.1, 1.9.2 on
|
134
115
|
|
135
116
|
* Archlinux
|
117
|
+
* Fedora
|
136
118
|
* Ubuntu
|
137
119
|
* FreeBsd6.x, FreeBsd7.x,
|
138
120
|
* Vector linux 5.*,
|
139
|
-
* Windows 2000/XP,
|
121
|
+
* Windows 2000/XP/7,
|
140
122
|
* Cygwin (note: same page fault error on dll under cygwin may be solved in this way:
|
141
123
|
by ash.exe exec "/bin/rebaseall").
|
142
124
|
If you will test arcadia on other operating system sends me an e-mail.
|
@@ -154,6 +136,7 @@ For all questions:
|
|
154
136
|
antonio-galeone@rubyforge.org
|
155
137
|
|
156
138
|
For bugs, support request, features request:
|
157
|
-
http://
|
139
|
+
http://github.com/angal/arcadia/issues
|
140
|
+
|
158
141
|
Repository at:
|
159
142
|
http://github.com/angal/arcadia/tree/master
|
@@ -70,7 +70,7 @@ class Breakpoints < ArcadiaExt
|
|
70
70
|
# end
|
71
71
|
# }
|
72
72
|
|
73
|
-
@tree_break =
|
73
|
+
@tree_break = BWidgetTreePatched.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
|
74
74
|
#showlines true
|
75
75
|
deltay 18
|
76
76
|
padx 25
|
@@ -91,18 +91,15 @@ class Breakpoints < ArcadiaExt
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def goto_select_item
|
94
|
-
_file, _line = get_tree_selection
|
94
|
+
_file, _line = get_tree_selection
|
95
95
|
if _file && _line
|
96
96
|
Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line))
|
97
97
|
elsif _file
|
98
98
|
Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>0))
|
99
99
|
end
|
100
100
|
end
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
def raise_clear_selected(_delete=false)
|
105
|
-
_file, _line = get_tree_selection(@tree_break)
|
101
|
+
|
102
|
+
def clear_node(_file=nil, _line=nil, _delete=false)
|
106
103
|
if _file && _line
|
107
104
|
Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'delete'=>_delete))
|
108
105
|
elsif _file
|
@@ -117,6 +114,19 @@ class Breakpoints < ArcadiaExt
|
|
117
114
|
end
|
118
115
|
end
|
119
116
|
|
117
|
+
def raise_clear_selected(_delete=false)
|
118
|
+
_file, _line = get_tree_selection
|
119
|
+
clear_node(_file, _line, _delete)
|
120
|
+
end
|
121
|
+
|
122
|
+
def clear_all(_delete=false)
|
123
|
+
nodes = @tree_break.nodes('root')
|
124
|
+
nodes.each{|n|
|
125
|
+
_file, _line = node2file_line(n)
|
126
|
+
clear_node(_file, _line, _delete)
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
120
130
|
def build_popup
|
121
131
|
_pop_up = TkMenu.new(
|
122
132
|
:parent=>@tree_break,
|
@@ -135,21 +145,28 @@ class Breakpoints < ArcadiaExt
|
|
135
145
|
|
136
146
|
_pop_up.insert('end',
|
137
147
|
:command,
|
138
|
-
:label=>'Clear breakpoint',
|
148
|
+
:label=>'Clear selected breakpoint',
|
139
149
|
:hidemargin => false,
|
140
150
|
:command=> proc{raise_clear_selected}
|
141
151
|
)
|
142
152
|
|
143
153
|
_pop_up.insert('end',
|
144
154
|
:command,
|
145
|
-
:label=>'Delete breakpoint',
|
155
|
+
:label=>'Delete selected breakpoint',
|
146
156
|
:hidemargin => false,
|
147
157
|
:command=> proc{raise_clear_selected(true)}
|
148
158
|
)
|
149
159
|
|
150
160
|
_pop_up.insert('end',
|
151
161
|
:command,
|
152
|
-
:label=>'
|
162
|
+
:label=>'Delete all breakpoints',
|
163
|
+
:hidemargin => false,
|
164
|
+
:command=> proc{clear_all(true)}
|
165
|
+
)
|
166
|
+
|
167
|
+
_pop_up.insert('end',
|
168
|
+
:command,
|
169
|
+
:label=>'Goto selected breakpoint',
|
153
170
|
:hidemargin => false,
|
154
171
|
:command=> proc{goto_select_item}
|
155
172
|
)
|
@@ -159,8 +176,9 @@ class Breakpoints < ArcadiaExt
|
|
159
176
|
proc{|*x|
|
160
177
|
_x = TkWinfo.pointerx(@tree_break)
|
161
178
|
_y = TkWinfo.pointery(@tree_break)
|
162
|
-
_selected = @tree_break.selection_get[0]
|
163
|
-
|
179
|
+
#_selected = @tree_break.selection_get[0]
|
180
|
+
_selected = @tree_break.selected
|
181
|
+
_file, _line = get_tree_selection
|
164
182
|
_label = _file
|
165
183
|
if _line
|
166
184
|
_label << " line: #{_line}"
|
@@ -171,19 +189,26 @@ class Breakpoints < ArcadiaExt
|
|
171
189
|
})
|
172
190
|
end
|
173
191
|
|
174
|
-
def get_tree_selection
|
175
|
-
|
176
|
-
_selected =
|
192
|
+
def get_tree_selection
|
193
|
+
#_selected = @tree_break.selection_get[0]
|
194
|
+
_selected = @tree_break.selected
|
177
195
|
if _selected
|
178
|
-
|
179
|
-
|
180
|
-
|
196
|
+
return node2file_line(_selected)
|
197
|
+
else
|
198
|
+
return Array.new
|
181
199
|
end
|
182
|
-
_ret
|
183
200
|
end
|
184
201
|
|
202
|
+
def node2file_line(_node)
|
203
|
+
_ret = Array.new
|
204
|
+
_node_name, _line = _node.split('_')
|
205
|
+
_ret << @tree_break.itemcget(_node_name, 'text')
|
206
|
+
_ret << _line if _line
|
207
|
+
_ret
|
208
|
+
end
|
185
209
|
|
186
210
|
def on_debug(_event)
|
211
|
+
return if _event.file.nil?
|
187
212
|
case _event
|
188
213
|
when SetBreakpointEvent
|
189
214
|
ensure_build_ui
|
@@ -22,7 +22,6 @@ class Project
|
|
22
22
|
end
|
23
23
|
|
24
24
|
class DirProjects < ArcadiaExt
|
25
|
-
include Autils
|
26
25
|
attr_reader :htree
|
27
26
|
|
28
27
|
def sync_on
|
@@ -146,7 +145,7 @@ class DirProjects < ArcadiaExt
|
|
146
145
|
},"%K")
|
147
146
|
|
148
147
|
do_double_click = proc{
|
149
|
-
_selected = @htree.
|
148
|
+
_selected = @htree.selected
|
150
149
|
if File.ftype(node2file(_selected)) == 'directory'
|
151
150
|
if !_selected.nil? && @htree.open?(node2file(_selected))
|
152
151
|
@htree.close_tree(node2file(_selected))
|
@@ -167,9 +166,9 @@ class DirProjects < ArcadiaExt
|
|
167
166
|
@sync = false
|
168
167
|
begin
|
169
168
|
Arcadia.process_event(OpenBufferTransientEvent.new(self,'file'=>node2file(_selected)))
|
170
|
-
|
169
|
+
ensure
|
171
170
|
@sync = _sync_val
|
172
|
-
|
171
|
+
end
|
173
172
|
end
|
174
173
|
else
|
175
174
|
shure_delete_node(_selected)
|
@@ -180,7 +179,7 @@ class DirProjects < ArcadiaExt
|
|
180
179
|
def key_press(_keysym)
|
181
180
|
case _keysym
|
182
181
|
when 'F5'
|
183
|
-
_selected =
|
182
|
+
_selected = @htree.selected
|
184
183
|
do_refresh(_selected)
|
185
184
|
end
|
186
185
|
end
|
@@ -300,7 +299,7 @@ class DirProjects < ArcadiaExt
|
|
300
299
|
:label=>'New folder',
|
301
300
|
:hidemargin => false,
|
302
301
|
:command=> proc{
|
303
|
-
_selected =
|
302
|
+
_selected = @htree.selected
|
304
303
|
if _selected
|
305
304
|
do_new_folder(_selected)
|
306
305
|
end
|
@@ -312,7 +311,7 @@ class DirProjects < ArcadiaExt
|
|
312
311
|
:label=>'New file',
|
313
312
|
:hidemargin => false,
|
314
313
|
:command=> proc{
|
315
|
-
_selected =
|
314
|
+
_selected = @htree.selected
|
316
315
|
if _selected
|
317
316
|
do_new_file(_selected)
|
318
317
|
end
|
@@ -339,7 +338,7 @@ class DirProjects < ArcadiaExt
|
|
339
338
|
:label=>'Rename',
|
340
339
|
:hidemargin => false,
|
341
340
|
:command=> proc{
|
342
|
-
_selected =
|
341
|
+
_selected = @htree.selected
|
343
342
|
if _selected
|
344
343
|
do_rename(_selected)
|
345
344
|
end
|
@@ -350,7 +349,7 @@ class DirProjects < ArcadiaExt
|
|
350
349
|
:label=>'Move',
|
351
350
|
:hidemargin => false,
|
352
351
|
:command=> proc{
|
353
|
-
_selected =
|
352
|
+
_selected = @htree.selected
|
354
353
|
if _selected
|
355
354
|
_idir = File.split(_selected)[0]
|
356
355
|
_dir=Tk.chooseDirectory('initialdir'=>_idir,'mustexist'=>true)
|
@@ -379,7 +378,7 @@ class DirProjects < ArcadiaExt
|
|
379
378
|
:label=>'Find in files...',
|
380
379
|
:hidemargin => false,
|
381
380
|
:command=> proc{
|
382
|
-
_target =
|
381
|
+
_target = @htree.selected
|
383
382
|
if _target
|
384
383
|
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
385
384
|
Arcadia.process_event(SearchInFilesEvent.new(self,'dir'=>_target))
|
@@ -392,7 +391,7 @@ class DirProjects < ArcadiaExt
|
|
392
391
|
:label=>'Act in files...',
|
393
392
|
:hidemargin => false,
|
394
393
|
:command=> proc{
|
395
|
-
_target =
|
394
|
+
_target = @htree.selected
|
396
395
|
if _target
|
397
396
|
_target = File.dirname(_target) if File.ftype(_target) == 'file'
|
398
397
|
Arcadia.process_event(AckInFilesEvent.new(self,'dir'=>_target))
|
@@ -420,7 +419,7 @@ class DirProjects < ArcadiaExt
|
|
420
419
|
:label=>'Close Project',
|
421
420
|
:hidemargin => false,
|
422
421
|
:command=> proc{
|
423
|
-
_selected =
|
422
|
+
_selected = @htree.selected
|
424
423
|
if _selected
|
425
424
|
#p _selected
|
426
425
|
do_close_project(_selected)
|
@@ -432,7 +431,7 @@ class DirProjects < ArcadiaExt
|
|
432
431
|
:label=>'Refresh',
|
433
432
|
:hidemargin => false,
|
434
433
|
:command=> proc{
|
435
|
-
_selected =
|
434
|
+
_selected = @htree.selected
|
436
435
|
do_refresh(_selected)
|
437
436
|
}
|
438
437
|
)
|
@@ -441,7 +440,7 @@ class DirProjects < ArcadiaExt
|
|
441
440
|
:label=>'Delete',
|
442
441
|
:hidemargin => false,
|
443
442
|
:command=> proc{
|
444
|
-
_selected =
|
443
|
+
_selected = @htree.selected
|
445
444
|
if _selected
|
446
445
|
do_delete(_selected)
|
447
446
|
end
|
@@ -462,7 +461,7 @@ class DirProjects < ArcadiaExt
|
|
462
461
|
shure_select_node(@current_opened_folder)
|
463
462
|
@last_current_opened_folder = @current_opened_folder
|
464
463
|
else
|
465
|
-
_selected =
|
464
|
+
_selected = @htree.selected
|
466
465
|
if _selected && @htree.exist?(_selected)
|
467
466
|
_parent = @htree.parent(_selected)
|
468
467
|
if _parent && _parent != 'root'
|
@@ -474,25 +473,29 @@ class DirProjects < ArcadiaExt
|
|
474
473
|
end
|
475
474
|
end
|
476
475
|
|
477
|
-
def selected
|
478
|
-
if @htree.selection_get[0]
|
479
|
-
if @htree.selection_get[0].length >0
|
480
|
-
_selected = ""
|
481
|
-
if
|
482
|
-
|
483
|
-
else
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
476
|
+
# def selected
|
477
|
+
# if @htree.selection_get[0]
|
478
|
+
# if @htree.selection_get[0].length >0
|
479
|
+
# _selected = ""
|
480
|
+
# if @htree.selection_get[0].instance_of?(Array)
|
481
|
+
# selection_lines = @htree.selection_get[0]
|
482
|
+
# else
|
483
|
+
# if String.method_defined?(:lines)
|
484
|
+
# selection_lines = @htree.selection_get[0].lines
|
485
|
+
# else
|
486
|
+
# selection_lines = @htree.selection_get[0].split("\n")
|
487
|
+
# end
|
488
|
+
# end
|
489
|
+
# selection_lines.each{|_block|
|
490
|
+
# _selected = _selected + _block.to_s + "\s"
|
491
|
+
# }
|
492
|
+
# _selected = _selected.strip
|
493
|
+
# else
|
494
|
+
# _selected = @htree.selection_get[0]
|
495
|
+
# end
|
496
|
+
# end
|
497
|
+
# return _selected
|
498
|
+
# end
|
496
499
|
|
497
500
|
def do_new_project(_parent_folder_node=nil)
|
498
501
|
if _parent_folder_node.nil?
|
@@ -929,7 +932,7 @@ class DirProjects < ArcadiaExt
|
|
929
932
|
end
|
930
933
|
|
931
934
|
def on_before_save_as_buffer(_event)
|
932
|
-
_selected =
|
935
|
+
_selected = @htree.selected
|
933
936
|
if _selected
|
934
937
|
tpy = File.ftype(node2file(_selected))
|
935
938
|
if tpy == 'directory'
|
data/ext/ae-editor/ae-editor.rb
CHANGED
@@ -799,7 +799,8 @@ class AgEditorOutline
|
|
799
799
|
sync_val = @bar.sync
|
800
800
|
@bar.sync=false
|
801
801
|
begin
|
802
|
-
_line = _self.selection_get[0]
|
802
|
+
#_line = _self.selection_get[0]
|
803
|
+
_line = _self.selected
|
803
804
|
_index =_line.to_s+'.0'
|
804
805
|
_hinner_text = @tree_exp.itemcget(_line,'text').strip
|
805
806
|
_editor_line = @editor.text.get(_index, _index+ ' lineend')
|
@@ -812,7 +813,8 @@ class AgEditorOutline
|
|
812
813
|
build_tree(_line)
|
813
814
|
Tk.update
|
814
815
|
}
|
815
|
-
_line = _self.selection_get[0]
|
816
|
+
#_line = _self.selection_get[0]
|
817
|
+
_line = _self.selected
|
816
818
|
_index =_line.to_s+'.0'
|
817
819
|
end
|
818
820
|
@editor.text.set_focus
|
@@ -940,11 +942,14 @@ end
|
|
940
942
|
|
941
943
|
class AgEditor
|
942
944
|
attr_accessor :file
|
945
|
+
attr_accessor :line_numbers_visible
|
946
|
+
attr_accessor :id
|
943
947
|
attr_reader :read_only
|
944
948
|
attr_reader :page_frame
|
945
949
|
attr_reader :text, :root
|
946
950
|
attr_reader :outline
|
947
951
|
attr_reader :highlighting
|
952
|
+
attr_reader :last_tmp_file
|
948
953
|
def initialize(_controller, _page_frame)
|
949
954
|
@controller = _controller
|
950
955
|
@page_frame = _page_frame
|
@@ -962,6 +967,7 @@ class AgEditor
|
|
962
967
|
@tabs_show = false
|
963
968
|
@spaces_show = false
|
964
969
|
@line_numbers_visible = @controller.conf('line-numbers') == 'yes'
|
970
|
+
@id = -1
|
965
971
|
end
|
966
972
|
|
967
973
|
def modified_from_opening?
|
@@ -1050,7 +1056,11 @@ class AgEditor
|
|
1050
1056
|
|
1051
1057
|
def create_temp_file
|
1052
1058
|
if @file
|
1053
|
-
|
1059
|
+
n=0
|
1060
|
+
while File.exist?("#{@file}#{n*'_'}~~")
|
1061
|
+
n+=1
|
1062
|
+
end
|
1063
|
+
_file = "#{@file}#{n*'_'}~~"
|
1054
1064
|
else
|
1055
1065
|
n=0
|
1056
1066
|
while File.exist?(File.join(Arcadia.instance.local_dir,"buffer#{n}~~"))
|
@@ -1066,6 +1076,7 @@ class AgEditor
|
|
1066
1076
|
ensure
|
1067
1077
|
f.close unless f.nil?
|
1068
1078
|
end
|
1079
|
+
@last_tmp_file = _file
|
1069
1080
|
_file
|
1070
1081
|
end
|
1071
1082
|
|
@@ -1889,13 +1900,16 @@ class AgEditor
|
|
1889
1900
|
_i1 = _index+' linestart'
|
1890
1901
|
_i2 = _i1+' + 2 chars'
|
1891
1902
|
|
1892
|
-
if @controller.breakpoint_lines_on_file(@file).include?(_line)
|
1903
|
+
if @file && @controller.breakpoint_lines_on_file(@file).include?(_line)
|
1893
1904
|
#remove_tag_breakpoint(_index)
|
1894
|
-
@controller.breakpoint_del(@file, _line)
|
1905
|
+
@controller.breakpoint_del(@file, _line, @id)
|
1906
|
+
elsif @file.nil? && @controller.breakpoint_lines_on_file("__TMP__#{@id}").include?(_line)
|
1907
|
+
#remove_tag_breakpoint(_index)
|
1908
|
+
@controller.breakpoint_del(@file, _line, @id)
|
1895
1909
|
else
|
1896
1910
|
@text_line_num.tag_remove('current',_i1,_i2)
|
1897
1911
|
#add_tag_breakpoint(_index)
|
1898
|
-
@controller.breakpoint_add(@file, _line)
|
1912
|
+
@controller.breakpoint_add(@file, _line, @id)
|
1899
1913
|
end
|
1900
1914
|
end
|
1901
1915
|
end
|
@@ -1993,7 +2007,6 @@ class AgEditor
|
|
1993
2007
|
end
|
1994
2008
|
end
|
1995
2009
|
|
1996
|
-
|
1997
2010
|
def do_tag_configure_global(_name)
|
1998
2011
|
h = Hash.new
|
1999
2012
|
|
@@ -2038,7 +2051,6 @@ class AgEditor
|
|
2038
2051
|
end
|
2039
2052
|
end
|
2040
2053
|
|
2041
|
-
|
2042
2054
|
def pop_up_menu
|
2043
2055
|
@pop_up = TkMenu.new(
|
2044
2056
|
:parent=>@text,
|
@@ -2055,7 +2067,6 @@ class AgEditor
|
|
2055
2067
|
:font => "#{Arcadia.conf('menu.font')} bold",
|
2056
2068
|
:hidemargin => true
|
2057
2069
|
)
|
2058
|
-
|
2059
2070
|
#Arcadia.instance.main_menu.update_style(@pop_up)
|
2060
2071
|
@pop_up.insert('end',
|
2061
2072
|
:command,
|
@@ -2794,8 +2805,19 @@ class AgEditor
|
|
2794
2805
|
line_end_chars = _line_end.to_s.length
|
2795
2806
|
if @last_line_end_chars != line_end_chars
|
2796
2807
|
if @line_num_rx_e.nil?
|
2797
|
-
@line_num_rx_e, @line_num_ry_e, @line_num_width_e, @line_num_heigth_e = @text_line_num.bbox("0.1 lineend -
|
2808
|
+
@line_num_rx_e, @line_num_ry_e, @line_num_width_e, @line_num_heigth_e = @text_line_num.bbox("0.1 lineend - 1 chars");
|
2809
|
+
if @line_num_rx_e.nil?
|
2810
|
+
@line_num_rx_e = 0
|
2811
|
+
end
|
2812
|
+
if @line_num_width_e.nil?
|
2813
|
+
linfo_x, linfo_y, linfo_w, linfo_h, linfo_b = @text_line_num.dlineinfo('0.1')
|
2814
|
+
if linfo_w
|
2815
|
+
@line_num_width_e = linfo_w.to_f/(line_end_chars+1.5)
|
2816
|
+
end
|
2817
|
+
end
|
2798
2818
|
end
|
2819
|
+
|
2820
|
+
|
2799
2821
|
if @line_num_rx_e && @line_num_width_e && line_end_chars >0
|
2800
2822
|
actual_width = @line_num_rx_e + @line_num_width_e
|
2801
2823
|
need_width = (line_end_chars+1)*@line_num_width_e
|
@@ -2947,13 +2969,17 @@ class AgEditor
|
|
2947
2969
|
if file
|
2948
2970
|
new_file_name(file)
|
2949
2971
|
save
|
2950
|
-
|
2972
|
+
#@controller.change_file_name(@page_frame, file)
|
2973
|
+
@last_tmp_file = nil if @last_tmp_file != nil
|
2974
|
+
Arcadia.process_event(OpenBufferEvent.new(self,'file'=>file))
|
2975
|
+
@controller.do_buffer_raise(@controller.page_name(@page_frame))
|
2951
2976
|
#EditorContract.instance.file_created(self, 'file'=>@file)
|
2952
2977
|
end
|
2953
2978
|
end
|
2954
2979
|
|
2955
2980
|
def new_file_name(_new_file)
|
2956
2981
|
@file =_new_file
|
2982
|
+
@controller.change_file_name(@page_frame, file)
|
2957
2983
|
base_name= File.basename(_new_file)
|
2958
2984
|
if base_name.include?('.')
|
2959
2985
|
self.change_highlight(base_name.split('.')[-1])
|
@@ -3143,7 +3169,6 @@ class AgMultiEditorView
|
|
3143
3169
|
end
|
3144
3170
|
}
|
3145
3171
|
@enb.bind_append("Map",refresh_after_map)
|
3146
|
-
|
3147
3172
|
end
|
3148
3173
|
|
3149
3174
|
end
|
@@ -3302,15 +3327,17 @@ end
|
|
3302
3327
|
|
3303
3328
|
|
3304
3329
|
class AgMultiEditor < ArcadiaExt
|
3305
|
-
include Autils
|
3306
3330
|
include Configurable
|
3307
|
-
attr_reader :breakpoints
|
3331
|
+
# attr_reader :breakpoints
|
3308
3332
|
attr_reader :splitted_frame
|
3309
3333
|
attr_reader :outline_bar
|
3310
3334
|
def on_before_build(_event)
|
3311
3335
|
@breakpoints =Array.new
|
3312
3336
|
@tabs_file =Hash.new
|
3313
3337
|
@tabs_editor =Hash.new
|
3338
|
+
@raw_buffer_name = Hash.new
|
3339
|
+
@editor_seq=-1
|
3340
|
+
@editors =Array.new
|
3314
3341
|
Arcadia.attach_listener(self, BufferEvent)
|
3315
3342
|
Arcadia.attach_listener(self, DebugEvent)
|
3316
3343
|
# Arcadia.attach_listener(self, RunRubyFileEvent)
|
@@ -3450,8 +3477,10 @@ class AgMultiEditor < ArcadiaExt
|
|
3450
3477
|
0.upto(i_end){|j|
|
3451
3478
|
type = @buffer_menu.menutype(j)
|
3452
3479
|
if type != 'separator'
|
3453
|
-
label = @buffer_menu.entrycget(j,'label')
|
3454
|
-
if label > _filename
|
3480
|
+
#label = @buffer_menu.entrycget(j,'label')
|
3481
|
+
#if label > _filename
|
3482
|
+
value = @buffer_menu.entrycget(j,'value')
|
3483
|
+
if value > _filename
|
3455
3484
|
index=j
|
3456
3485
|
break
|
3457
3486
|
end
|
@@ -3459,18 +3488,20 @@ class AgMultiEditor < ArcadiaExt
|
|
3459
3488
|
}
|
3460
3489
|
end
|
3461
3490
|
|
3462
|
-
@buffer_menu.insert(index,:
|
3463
|
-
|
3464
|
-
|
3465
|
-
|
3466
|
-
|
3467
|
-
|
3468
|
-
|
3469
|
-
|
3470
|
-
|
3471
|
-
|
3472
|
-
|
3473
|
-
|
3491
|
+
@buffer_menu.insert(index,:radio,
|
3492
|
+
:label=>File.basename(_filename),
|
3493
|
+
# :variable=>TkVariable.new(_filename),
|
3494
|
+
:value=>_filename,
|
3495
|
+
:image=> Arcadia.file_icon(_filename),
|
3496
|
+
:compound=>'left',
|
3497
|
+
:command=>proc{
|
3498
|
+
if is_file
|
3499
|
+
open_file(_filename)
|
3500
|
+
else
|
3501
|
+
open_buffer(tab_name(_filename))
|
3502
|
+
end
|
3503
|
+
},
|
3504
|
+
:hidemargin => true
|
3474
3505
|
)
|
3475
3506
|
end
|
3476
3507
|
|
@@ -3480,8 +3511,10 @@ class AgMultiEditor < ArcadiaExt
|
|
3480
3511
|
0.upto(i_end){|j|
|
3481
3512
|
type = @buffer_menu.menutype(j)
|
3482
3513
|
if type != 'separator'
|
3483
|
-
label = @buffer_menu.entrycget(j,'label')
|
3484
|
-
if label == _file
|
3514
|
+
#label = @buffer_menu.entrycget(j,'label')
|
3515
|
+
#if label == _file
|
3516
|
+
value = @buffer_menu.entrycget(j,'value')
|
3517
|
+
if value == _file
|
3485
3518
|
to_del=j
|
3486
3519
|
break
|
3487
3520
|
end
|
@@ -3672,19 +3705,34 @@ class AgMultiEditor < ArcadiaExt
|
|
3672
3705
|
end
|
3673
3706
|
|
3674
3707
|
def on_before_debug(_event)
|
3675
|
-
"on_before_debug #{_event}"
|
3676
3708
|
case _event
|
3677
3709
|
when StartDebugEvent
|
3710
|
+
_event.persistent=true
|
3678
3711
|
_filename = _event.file
|
3679
|
-
if _filename
|
3712
|
+
if _filename == "*LAST"
|
3713
|
+
_event.file = Arcadia.persistent('run.file.last')
|
3714
|
+
elsif _filename.nil? || _filename == "*CURR"
|
3680
3715
|
current_editor = self.raised
|
3681
|
-
|
3716
|
+
if current_editor
|
3717
|
+
if current_editor.file
|
3718
|
+
_event.file=current_editor.file
|
3719
|
+
else
|
3720
|
+
_event.file=current_editor.create_temp_file
|
3721
|
+
_event.id=current_editor.id
|
3722
|
+
_event.persistent=false
|
3723
|
+
end
|
3724
|
+
end
|
3682
3725
|
end
|
3683
3726
|
self.debug_begin
|
3684
3727
|
when SetBreakpointEvent
|
3685
3728
|
if _event.active == 1
|
3686
|
-
|
3687
|
-
|
3729
|
+
if _event.file
|
3730
|
+
@breakpoints << {:file=>_event.file,:line=>_event.row}
|
3731
|
+
_e = @tabs_editor[tab_file_name(_event.file)]
|
3732
|
+
elsif _event.id
|
3733
|
+
@breakpoints << {:file=>"__TMP__#{_event.id}",:line=>_event.row}
|
3734
|
+
_e = @editors[_event.id]
|
3735
|
+
end
|
3688
3736
|
if _e
|
3689
3737
|
_index =_event.row+'.0'
|
3690
3738
|
_line = _e.text.get(_index, _index+ ' lineend')
|
@@ -3700,7 +3748,6 @@ class AgMultiEditor < ArcadiaExt
|
|
3700
3748
|
end
|
3701
3749
|
|
3702
3750
|
def on_after_debug(_event)
|
3703
|
-
"on_after_debug #{_event}"
|
3704
3751
|
case _event
|
3705
3752
|
when StepDebugEvent
|
3706
3753
|
if _event.command == :quit_yes
|
@@ -3717,8 +3764,13 @@ class AgMultiEditor < ArcadiaExt
|
|
3717
3764
|
when UnsetBreakpointEvent
|
3718
3765
|
#p "ae-editor : UnsetBreakpointEvent file : #{_event.file}"
|
3719
3766
|
#p "ae-editor : UnsetBreakpointEvent _event.row : #{_event.row}"
|
3720
|
-
|
3721
|
-
|
3767
|
+
if _event.file
|
3768
|
+
@breakpoints.delete_if{|b| (b[:file]==_event.file && b[:line]==_event.row)}
|
3769
|
+
_e = @tabs_editor[tab_file_name(_event.file)]
|
3770
|
+
elsif _event.id
|
3771
|
+
@breakpoints.delete_if{|b| (b[:file]=="__TMP__#{_event.id}" && b[:line]==_event.row)}
|
3772
|
+
_e = @editors[_event.id]
|
3773
|
+
end
|
3722
3774
|
_e.remove_tag_breakpoint(_event.row) if _e
|
3723
3775
|
end
|
3724
3776
|
end
|
@@ -3860,12 +3912,13 @@ class AgMultiEditor < ArcadiaExt
|
|
3860
3912
|
#_insert_index = editor.text.index('insert')
|
3861
3913
|
_insert_index = editor.text.index('@0,0')
|
3862
3914
|
_files=_files+'|' if _files.strip.length > 0
|
3863
|
-
_files=_files + "#{editor.file};#{_insert_index}"
|
3915
|
+
_files=_files + "#{editor.file};#{_insert_index};#{editor.line_numbers_visible.to_s}"
|
3864
3916
|
end
|
3865
3917
|
#p editor.text.dump_tag('0.1',editor.text.index('end'))
|
3866
3918
|
close_editor(editor,true)
|
3867
3919
|
}
|
3868
3920
|
Arcadia.persistent('editor.files.open', _files)
|
3921
|
+
clear_temp_files
|
3869
3922
|
# _breakpoints = '';
|
3870
3923
|
# @breakpoints.each{|point|
|
3871
3924
|
# if point[:file] != nil
|
@@ -3877,22 +3930,32 @@ class AgMultiEditor < ArcadiaExt
|
|
3877
3930
|
@batch_files = true
|
3878
3931
|
end
|
3879
3932
|
|
3933
|
+
|
3934
|
+
def clear_temp_files
|
3935
|
+
files = Dir[File.join(Arcadia.instance.local_dir,"*")]
|
3936
|
+
files.each{|f|
|
3937
|
+
if File.stat(f).file? && f[-2..-1] == '~~'
|
3938
|
+
File.delete(f)
|
3939
|
+
end
|
3940
|
+
}
|
3941
|
+
end
|
3942
|
+
|
3880
3943
|
def raised
|
3881
3944
|
_page = @main_frame.enb.raise
|
3882
|
-
return @tabs_editor[_page]
|
3945
|
+
return @tabs_editor[resolve_tab_name(_page)]
|
3883
3946
|
end
|
3884
3947
|
|
3885
3948
|
def close_raised
|
3886
|
-
_e = @tabs_editor[@main_frame.enb.raise]
|
3949
|
+
_e = @tabs_editor[resolve_tab_name(@main_frame.enb.raise)]
|
3887
3950
|
close_editor(_e) if _e
|
3888
3951
|
end
|
3889
3952
|
|
3890
|
-
def breakpoint_add(_file,_line)
|
3891
|
-
Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'active'=>1))
|
3953
|
+
def breakpoint_add(_file,_line,_id=-1)
|
3954
|
+
Arcadia.process_event(SetBreakpointEvent.new(self, 'id'=>_id, 'file'=>_file, 'row'=>_line, 'active'=>1))
|
3892
3955
|
end
|
3893
3956
|
|
3894
|
-
def breakpoint_del(_file,_line)
|
3895
|
-
Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line))
|
3957
|
+
def breakpoint_del(_file,_line,_id=-1)
|
3958
|
+
Arcadia.process_event(UnsetBreakpointEvent.new(self, 'id'=>_id, 'file'=>_file, 'row'=>_line))
|
3896
3959
|
end
|
3897
3960
|
|
3898
3961
|
def breakpoint_lines_on_file(_file)
|
@@ -3924,11 +3987,14 @@ class AgMultiEditor < ArcadiaExt
|
|
3924
3987
|
if Arcadia.persistent('editor.files.open')
|
3925
3988
|
_files_index =Arcadia.persistent('editor.files.open').split("|")
|
3926
3989
|
_files_index.each do |value|
|
3927
|
-
_file,_index = value.split(';')
|
3990
|
+
_file,_index,_line_numbers_visible_as_string = value.split(';')
|
3928
3991
|
if _file && _index
|
3929
|
-
open_file(_file,_index,false)
|
3992
|
+
ed = open_file(_file,_index,false)
|
3930
3993
|
else
|
3931
|
-
open_file(_file)
|
3994
|
+
ed = open_file(_file)
|
3995
|
+
end
|
3996
|
+
if ed && _line_numbers_visible_as_string && ed.line_numbers_visible
|
3997
|
+
ed.line_numbers_visible = _line_numbers_visible_as_string == 'true'
|
3932
3998
|
end
|
3933
3999
|
end
|
3934
4000
|
end
|
@@ -4036,13 +4102,33 @@ class AgMultiEditor < ArcadiaExt
|
|
4036
4102
|
end
|
4037
4103
|
|
4038
4104
|
def tab_title_by_tab_name(_tab_name)
|
4039
|
-
@main_frame.enb.itemcget(_tab_name, 'text')
|
4105
|
+
@main_frame.enb.itemcget(resolve_tab_name(_tab_name), 'text')
|
4040
4106
|
end
|
4041
4107
|
|
4108
|
+
def tab_name(_str="")
|
4109
|
+
tn = 'ff'+_str.downcase.gsub("/","_").gsub(".","__").gsub(":","___").gsub("\\","____").gsub("*","_____")
|
4110
|
+
resolve_tab_name(tn)
|
4111
|
+
end
|
4112
|
+
|
4113
|
+
def tab_file_name(_filename="")
|
4114
|
+
_fstr = File.expand_path(_filename)
|
4115
|
+
_fstr = _filename if _fstr == nil
|
4116
|
+
tab_name(_fstr)
|
4117
|
+
end
|
4118
|
+
|
4042
4119
|
def page_name(_page_frame)
|
4043
|
-
TkWinfo.appname(_page_frame).sub('f','')
|
4120
|
+
pn = TkWinfo.appname(_page_frame).sub('f','')
|
4121
|
+
resolve_tab_name(pn)
|
4044
4122
|
end
|
4045
|
-
|
4123
|
+
|
4124
|
+
def resolve_tab_name(_tab_name)
|
4125
|
+
if @raw_buffer_name[_tab_name]
|
4126
|
+
return @raw_buffer_name[_tab_name]
|
4127
|
+
else
|
4128
|
+
return _tab_name
|
4129
|
+
end
|
4130
|
+
end
|
4131
|
+
|
4046
4132
|
def change_tab_reset_modify(_tab)
|
4047
4133
|
#_new_name = @main_frame.enb.itemcget(@tabs_name[_tab], 'text').gsub!("(...)",'')
|
4048
4134
|
if @main_frame.enb.index(page_name(_tab))
|
@@ -4052,6 +4138,15 @@ class AgMultiEditor < ArcadiaExt
|
|
4052
4138
|
end
|
4053
4139
|
end
|
4054
4140
|
end
|
4141
|
+
|
4142
|
+
def change_frame_caption(_new_caption)
|
4143
|
+
if @arcadia.layout.headed?
|
4144
|
+
if frame.root.title == frame.title
|
4145
|
+
frame.root.top_text(_new_caption)
|
4146
|
+
end
|
4147
|
+
frame.root.save_caption(frame.name, _new_caption)
|
4148
|
+
end
|
4149
|
+
end
|
4055
4150
|
|
4056
4151
|
def change_tab_title(_tab, _new_text)
|
4057
4152
|
@main_frame.enb.itemconfigure(page_name(_tab), 'text'=> _new_text)
|
@@ -4070,10 +4165,16 @@ class AgMultiEditor < ArcadiaExt
|
|
4070
4165
|
end
|
4071
4166
|
|
4072
4167
|
def change_file_name(_tab, _new_file)
|
4168
|
+
@tabs_file[page_name(_tab)] = _new_file
|
4169
|
+
@raw_buffer_name[tab_file_name(_new_file)]=page_name(_tab)
|
4073
4170
|
_new_label = File.basename(_new_file)
|
4074
4171
|
change_tab_title(_tab, _new_label)
|
4075
4172
|
change_tab_icon(_tab, _new_label)
|
4076
|
-
|
4173
|
+
#change_frame_caption(_new_file)
|
4174
|
+
#@tabs_editor[tab_file_name(_new_file)]=@tabs_editor[page_name(_tab)]
|
4175
|
+
|
4176
|
+
#@tabs_file[tab_file_name(_new_file)] = _new_file
|
4177
|
+
#@tabs_editor[tab_file_name(_new_file)] = editor_of(_new_file)
|
4077
4178
|
end
|
4078
4179
|
|
4079
4180
|
def debug_begin
|
@@ -4102,11 +4203,17 @@ class AgMultiEditor < ArcadiaExt
|
|
4102
4203
|
#debug_reset
|
4103
4204
|
if _filename && _line && File.exists?(_filename)
|
4104
4205
|
@last_index = _line.to_s+'.0'
|
4105
|
-
_editor_exist = editor_exist?(_filename)
|
4106
|
-
|
4206
|
+
#_editor_exist = editor_exist?(_filename)
|
4207
|
+
_editor = editor_of(_filename)
|
4208
|
+
if _editor
|
4209
|
+
@last_e = raise_editor(_editor, @last_index, false, false)
|
4210
|
+
else
|
4211
|
+
@last_e = open_file(_filename, @last_index, false, false)
|
4212
|
+
end
|
4107
4213
|
#@last_e.hide_exp
|
4108
4214
|
@last_e.mark_debug(@last_index) if @last_e
|
4109
|
-
if !_editor_exist
|
4215
|
+
#if !_editor_exist
|
4216
|
+
if _editor.nil?
|
4110
4217
|
@editors_in_debug << @last_e
|
4111
4218
|
# workaround for hightlight
|
4112
4219
|
#p "add editor for close #{_filename}"
|
@@ -4127,13 +4234,13 @@ class AgMultiEditor < ArcadiaExt
|
|
4127
4234
|
end
|
4128
4235
|
|
4129
4236
|
def do_buffer_raise(_name, _title='...')
|
4130
|
-
_index = @main_frame.enb.index(_name)
|
4237
|
+
_index = @main_frame.enb.index(resolve_tab_name(_name))
|
4131
4238
|
_new_caption = '...'
|
4132
4239
|
if _index != -1
|
4133
4240
|
#_name = @main_frame.enb.pages(_index)
|
4134
4241
|
#_tab = get_tab_from_name(_name)
|
4135
4242
|
#@main_frame.enb.raise(_name)
|
4136
|
-
_e = @tabs_editor[_name]
|
4243
|
+
_e = @tabs_editor[resolve_tab_name(_name)]
|
4137
4244
|
change_outline(_e) if _e
|
4138
4245
|
if _e && _e.file != nil
|
4139
4246
|
_new_caption = _e.file
|
@@ -4143,48 +4250,62 @@ class AgMultiEditor < ArcadiaExt
|
|
4143
4250
|
_new_caption = _title
|
4144
4251
|
end
|
4145
4252
|
end
|
4146
|
-
|
4147
|
-
if frame.root.title == frame.title
|
4148
|
-
frame.root.top_text(_new_caption)
|
4149
|
-
end
|
4150
|
-
frame.root.save_caption(frame.name, _new_caption)
|
4151
|
-
#@arcadia.layout.domain(@arcadia['conf'][@name+'.frame'])['root'].top_text(_new_caption)
|
4152
|
-
end
|
4253
|
+
change_frame_caption(_new_caption)
|
4153
4254
|
_title = @tabs_file[_name] != nil ? File.basename(@tabs_file[_name]) :_name
|
4154
4255
|
Arcadia.broadcast_event(BufferRaisedEvent.new(self,'title'=>_title, 'file'=>@tabs_file[_name]))
|
4155
4256
|
#EditorContract.instance.buffer_raised(self, 'title'=>_title, 'file'=>@tabs_file[_name])
|
4156
4257
|
end
|
4157
4258
|
|
4259
|
+
def editor_of(_filename)
|
4260
|
+
_ret = nil
|
4261
|
+
@editors.each{|e|
|
4262
|
+
if e.file == _filename || e.last_tmp_file == _filename
|
4263
|
+
_ret = e
|
4264
|
+
break
|
4265
|
+
end
|
4266
|
+
}
|
4267
|
+
if _ret.nil?
|
4268
|
+
_basefilename = File.basename(_filename)
|
4269
|
+
_name = self.tab_file_name(_filename)
|
4270
|
+
_index = @main_frame.enb.index(resolve_tab_name(_name))
|
4271
|
+
if _index == -1
|
4272
|
+
_name = name_read_only(_name)
|
4273
|
+
_index = @main_frame.enb.index(resolve_tab_name(_name))
|
4274
|
+
end
|
4275
|
+
if _index != -1
|
4276
|
+
_ret = @tabs_editor[resolve_tab_name(_name)]
|
4277
|
+
end
|
4278
|
+
end
|
4279
|
+
_ret
|
4280
|
+
end
|
4281
|
+
|
4158
4282
|
def editor_exist?(_filename)
|
4159
4283
|
_basefilename = File.basename(_filename)
|
4160
4284
|
#_basename = _basefilename.split('.')[0]+'_'+_basefilename.split('.')[1]
|
4161
4285
|
|
4162
4286
|
_name = self.tab_file_name(_filename)
|
4163
|
-
_index = @main_frame.enb.index(_name)
|
4287
|
+
_index = @main_frame.enb.index(resolve_tab_name(_name))
|
4164
4288
|
if _index == -1
|
4165
|
-
_index = @main_frame.enb.index(name_read_only(_name))
|
4289
|
+
_index = @main_frame.enb.index(resolve_tab_name(name_read_only(_name)))
|
4290
|
+
end
|
4291
|
+
if _index == -1
|
4292
|
+
@editors.each{|e|
|
4293
|
+
if e.last_tmp_file == _filename
|
4294
|
+
_index = 0
|
4295
|
+
break
|
4296
|
+
end
|
4297
|
+
}
|
4166
4298
|
end
|
4167
4299
|
return _index != -1
|
4168
4300
|
end
|
4169
4301
|
|
4170
|
-
def tab_name(_str="")
|
4171
|
-
#_str = _str.downcase if is_windows?
|
4172
|
-
'ff'+_str.downcase.gsub("/","_").gsub(".","__").gsub(":","___").gsub("\\","____").gsub("*","_____")
|
4173
|
-
end
|
4174
|
-
|
4175
|
-
def tab_file_name(_filename="")
|
4176
|
-
_fstr = File.expand_path(_filename)
|
4177
|
-
_fstr = _filename if _fstr == nil
|
4178
|
-
tab_name(_fstr)
|
4179
|
-
end
|
4180
|
-
|
4181
4302
|
def raise_file(_filename=nil, _pos=nil)
|
4182
4303
|
if _filename && frame_def_visible?
|
4183
4304
|
tab_name=self.tab_file_name(_filename)
|
4184
4305
|
if @main_frame.enb.index(tab_name) != -1
|
4185
|
-
|
4186
|
-
|
4187
|
-
|
4306
|
+
@main_frame.enb.move(tab_name,_pos) if _pos
|
4307
|
+
@main_frame.enb.raise(tab_name)
|
4308
|
+
@main_frame.enb.see(tab_name)
|
4188
4309
|
end
|
4189
4310
|
end
|
4190
4311
|
end
|
@@ -4193,9 +4314,9 @@ class AgMultiEditor < ArcadiaExt
|
|
4193
4314
|
return if _filename == nil || !File.exist?(_filename) || File.ftype(_filename) != 'file'
|
4194
4315
|
_basefilename = File.basename(_filename)
|
4195
4316
|
_tab_name = self.tab_file_name(_filename)
|
4196
|
-
_index = @main_frame.enb.index(_tab_name)
|
4197
|
-
_exist_buffer = _index != -1
|
4198
|
-
|
4317
|
+
#_index = @main_frame.enb.index(_tab_name)
|
4318
|
+
#_exist_buffer = _index != -1
|
4319
|
+
_exist_buffer = @tabs_file[_tab_name] != nil
|
4199
4320
|
if _exist_buffer
|
4200
4321
|
open_buffer(_tab_name)
|
4201
4322
|
else
|
@@ -4205,35 +4326,38 @@ class AgMultiEditor < ArcadiaExt
|
|
4205
4326
|
begin
|
4206
4327
|
@tabs_editor[_tab_name].load_file(_filename)
|
4207
4328
|
rescue RuntimeError => e
|
4208
|
-
|
4329
|
+
Arcadia.dialog(self,'type'=>'ok', 'level'=>'error','title' => 'RuntimeError', 'msg'=>"RuntimeError : #{e.message}")
|
4330
|
+
#p "RuntimeError : #{e.message}"
|
4209
4331
|
close_editor(@tabs_editor[_tab_name], true)
|
4210
4332
|
end
|
4211
4333
|
end
|
4212
|
-
|
4213
|
-
if _text_index != nil && _text_index != '1.0' &&
|
4214
|
-
|
4215
|
-
|
4334
|
+
editor = @tabs_editor[_tab_name]
|
4335
|
+
if _text_index != nil && _text_index != '1.0' && editor
|
4336
|
+
editor.text_see(_text_index)
|
4337
|
+
editor.mark_selected(_text_index) if _mark_selected
|
4216
4338
|
end
|
4217
4339
|
|
4218
|
-
return
|
4340
|
+
return editor
|
4219
4341
|
end
|
4220
4342
|
|
4221
4343
|
|
4222
4344
|
def open_buffer(_buffer_name = nil, _title = nil, _filename=nil)
|
4223
|
-
_index = @main_frame.enb.index(_buffer_name)
|
4345
|
+
_index = @main_frame.enb.index(resolve_tab_name(_buffer_name))
|
4224
4346
|
if _buffer_name == nil
|
4225
4347
|
_title_new = '*new'
|
4348
|
+
tmp_buffer_num = 0
|
4226
4349
|
_buffer_name = tab_name(_title_new)
|
4227
4350
|
#_buffer_name = tab_name('new')
|
4228
4351
|
end
|
4229
4352
|
|
4230
4353
|
if _index != -1
|
4231
|
-
_tab = @main_frame.enb.get_frame(_buffer_name)
|
4232
|
-
@main_frame.enb.raise(_buffer_name) if frame_visible?
|
4354
|
+
_tab = @main_frame.enb.get_frame(resolve_tab_name(_buffer_name))
|
4355
|
+
@main_frame.enb.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
4233
4356
|
else
|
4234
4357
|
_n = 1
|
4235
4358
|
while @main_frame.enb.index(_buffer_name) != -1
|
4236
4359
|
_title_new = '*new'+_n.to_s
|
4360
|
+
tmp_buffer_num = _n
|
4237
4361
|
_buffer_name = tab_name(_title_new)
|
4238
4362
|
#_buffer_name = tab_name('new')+_n.to_s
|
4239
4363
|
_n =_n+1
|
@@ -4244,16 +4368,20 @@ class AgMultiEditor < ArcadiaExt
|
|
4244
4368
|
_tab = @main_frame.enb.insert('end', _buffer_name ,
|
4245
4369
|
'text'=> _title,
|
4246
4370
|
'image'=> Arcadia.file_icon(_title),
|
4247
|
-
'background'=> Arcadia.style("tabpanel
|
4248
|
-
'foreground'=> Arcadia.style("tabpanel
|
4371
|
+
'background'=> Arcadia.style("tabpanel")["background"],
|
4372
|
+
'foreground'=> Arcadia.style("tabpanel")["foreground"],
|
4249
4373
|
'raisecmd'=>proc{do_buffer_raise(_buffer_name, _title)}
|
4250
4374
|
)
|
4375
|
+
@raw_buffer_name[_buffer_name]=_buffer_name
|
4251
4376
|
if _filename
|
4252
4377
|
add_buffer_menu_item(_filename)
|
4253
4378
|
else
|
4254
4379
|
add_buffer_menu_item(_title, false)
|
4255
4380
|
end
|
4256
4381
|
_e = AgEditor.new(self, _tab)
|
4382
|
+
@editor_seq=@editor_seq+1
|
4383
|
+
_e.id=@editor_seq
|
4384
|
+
@editors[@editor_seq]=_e
|
4257
4385
|
ext = Arcadia.file_extension(_title)
|
4258
4386
|
ext='rb' if ext.nil?
|
4259
4387
|
_e.init_editing(ext)
|
@@ -4261,12 +4389,36 @@ class AgMultiEditor < ArcadiaExt
|
|
4261
4389
|
#@tabs_file[_buffer_name]= nil
|
4262
4390
|
@tabs_editor[_buffer_name]=_e
|
4263
4391
|
end
|
4264
|
-
@
|
4265
|
-
|
4266
|
-
|
4392
|
+
if raised != @tabs_editor[resolve_tab_name(_buffer_name)]
|
4393
|
+
@main_frame.enb.move(resolve_tab_name(_buffer_name), 1)
|
4394
|
+
@main_frame.enb.raise(resolve_tab_name(_buffer_name)) if frame_visible?
|
4395
|
+
@main_frame.enb.see(resolve_tab_name(_buffer_name))
|
4396
|
+
end
|
4267
4397
|
return _tab
|
4268
4398
|
end
|
4269
4399
|
|
4400
|
+
def raise_editor(_editor = nil, _text_index='0.0', _mark_selected=true, _exp=true)
|
4401
|
+
return if _editor == nil
|
4402
|
+
_tab_name = nil
|
4403
|
+
@tabs_editor.each{|tn,e|
|
4404
|
+
if e == _editor
|
4405
|
+
_tab_name = tn
|
4406
|
+
end
|
4407
|
+
}
|
4408
|
+
if _tab_name
|
4409
|
+
_index = @main_frame.enb.index(resolve_tab_name(_tab_name))
|
4410
|
+
_exist_buffer = _index != -1
|
4411
|
+
if _exist_buffer
|
4412
|
+
open_buffer(_tab_name)
|
4413
|
+
if _text_index != nil && _text_index != '0.0'
|
4414
|
+
_editor.text_see(_text_index)
|
4415
|
+
_editor.mark_selected(_text_index) if _mark_selected
|
4416
|
+
end
|
4417
|
+
end
|
4418
|
+
end
|
4419
|
+
return _editor
|
4420
|
+
end
|
4421
|
+
|
4270
4422
|
def close_others_editor(_editor, _mod=true)
|
4271
4423
|
@batch_files = true
|
4272
4424
|
@tabs_editor.values.each do |_e|
|
@@ -4335,6 +4487,9 @@ class AgMultiEditor < ArcadiaExt
|
|
4335
4487
|
del_buffer_menu_item(tab_title_by_tab_name(_name))
|
4336
4488
|
end
|
4337
4489
|
@tabs_editor.delete(_name)
|
4490
|
+
@tabs_file.delete(_name)
|
4491
|
+
@raw_buffer_name.delete_if {|key, value| value == _name }
|
4492
|
+
|
4338
4493
|
_index = @main_frame.enb.index(_name)
|
4339
4494
|
@main_frame.enb.delete(_name)
|
4340
4495
|
if !@main_frame.enb.pages.empty?
|