arcadia 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,8 +1,8 @@
1
1
  = Arcadia Ide
2
- version 0.9.0
2
+ version 0.9.1
3
3
 
4
4
  by Antonio Galeone
5
- on Sep 19, 2010
5
+ on Oct 19, 2010
6
6
 
7
7
 
8
8
  == About
@@ -16,16 +16,16 @@ 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.0
19
+ == In this release 0.9.1
20
20
 
21
21
  [Improvements]
22
22
  commons:
23
- - a lot of bug-fixing
24
- - new default theme = dark
25
- - auto-hide scrollbar and auto post menu
23
+ - bug-fixing
26
24
  new features:
27
- - added process monitor (possibility to kill running sub process)
28
- - added first release of a configurable runners management (possibility to choose runner for current file)
25
+ editor
26
+ - added a button for close current tab
27
+ - added menu button for quick file selection
28
+ - "Edit/Prettify Current" now works
29
29
 
30
30
  == Dependencies
31
31
  - rubygems
@@ -6,7 +6,7 @@
6
6
 
7
7
  #:::::::::::::::: layout ::::::::::::::::::::::<begin>
8
8
  layout.splitter.length=5
9
- layout.exchange_panel_if_no_tabbed=false
9
+ layout.exchange_panel_if_no_tabbed=false
10
10
  arm::layout.splitter.length=10
11
11
  #layout.split=1,2
12
12
  #layout.split.1=0.0r70%
@@ -143,6 +143,14 @@ toolbar.=>>>panel
143
143
 
144
144
  toolbarbutton.=>>>button
145
145
  toolbarbutton.relief=flat
146
+ toolbarbutton.borderwidth=0
147
+
148
+ titletoolbarbutton.=>>>toolbarbutton
149
+ titletoolbarbutton.background=>>>titlelabel.background
150
+ titletoolbarbutton.foreground=>>>titlelabel.foreground
151
+ titletoolbarbutton.activebackground=>>>titlelabel.activebackground
152
+ titletoolbarbutton.activeforeground=>>>titlelabel.activeforeground
153
+
146
154
 
147
155
  label.background=>>>background
148
156
  label.foreground=>>>foreground
@@ -359,16 +359,32 @@ R0lGODlhCQAJAJEAAImCejYtJE1CN////ywAAAAACQAJAAACF4yPoismAwQY
359
359
  LUgIq5pR8+xkk8YoyBkUADs=
360
360
  EOS
361
361
 
362
-
363
- CLOSE_PAGE_GIF=<<EOS
364
- R0lGODlhYQANAIQaAAAAADU1FTo6Gz8/IEFBI0NDJkhIK0pKLk1NMVRUOYaG
365
- c4iIdYuLeI2NfY+PfpCQf5mZiZubjK+vo7W1q7e3sMjIwM/PyNTUz9vb193d
366
- 2v///////////////////////yH5BAEAAB8ALAAAAABhAA0AAAXA4CeOZGme
367
- aKqubKsySCDPdG3feK7v/I0oJksBgnEZj8hkCQMZVEgHiXJKrZ4mhJGjUQJ4
368
- RQCTNwwel7+k8Zf8CZvb75Fajoaj5yMIQ5S4pOVtXYBsYCtsh4WBKIiMgicZ
369
- ByJZf5SAiW9qhJZ2d3SanGdrdpyaAnx+m26OioOGqYmVsLCqhZ8ikCIOD113
370
- eJhxeKuMa3Gbs6HIIxELI1FWz9BIEwMkFgMQFNHa2yQUEU4mDAY95OXm5zoG
371
- QNzs7SohADs=
362
+ CLOSE_DOCUMENT_GIF=<<EOS
363
+ R0lGODlhEAAQAPcAAPn///v//wc7h/f77fz////48gBEkAo8g/n/0f/98P/+
364
+ 8vrHbPbNj/j/0fLTdv//9gJBhgE8igBChAA/ivjOePjOevj/1v3/lP/83gI9
365
+ ef//5fn88fb6mfb6m/f+//3LcvrNcPf///jPd/vId//wy//6//769/753P//
366
+ +//69fv9+Pr2kgs/eP/1o//5xfHTe/3/2v/Hd//22/36x//87fbTgf//yP//
367
+ 7v/5y//+1ff1xP35yvX5i//SigU+g//rxP/Qfv7owfvQi/r90PX65P/89f//
368
+ 4gQ9iv/60Pvxtv/14v/3iwA+lQZAiv784wRCj/n//ff/rQJFjP/KhP/32Pv7
369
+ s/3IePn94v/98fb+6QNBjvn7kPz/v/bTj/fNd/f/+v/2wfDZc/jNfgJCiv/z
370
+ ifnMiPXNhf/JfPjJcfT5///2/wU7gwZCfv7//f/RgwA7gfr//P3JgPb+8/3/
371
+ rQFDjf/2l/vlswVBh//Piv//8v7/9vj//QA+iP//xfnNhP/40QU/kP/xyQY9
372
+ ffn+1frhuf/53v76//3+///33vr///r/+Qk6ff/6yg48iQBHlfrcpv/7vvv+
373
+ //r/8f/6ov/3+v//sPH54QBChwY7ifr0nP331fXPev/wmvPIevXPbvj95/fJ
374
+ cQJGhf/Jb/761PjgsPz5/wY/hv30j/n51/b+//nOgAA+h//Pi/j7qv/8/wA/
375
+ ggBAi/jiuf//5gJEkP/5s/nNhgBAhv/6wP/9+v/00gJBkf//4fzUfP/+y//9
376
+ oPXQdQ02eP383vv8///xkv3+3/r+7/z26ABBgwFBmQc9eww+gwE7hP793/76
377
+ 7wVAhv78sf72ofrHdP/Pe/zhtP//3Qw9ivLbqf/Pg/v7sffIdv39///7//v8
378
+ sPj6/wg9f/n13P/7rQJCmQY9j//5/wJAi/v5+vv54v/KfwAAAAAAAAAAAAAA
379
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
380
+ AAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAj/AI0R6iEqmpBz
381
+ CBMi/KEklrVAhb4xM0exIsUuQa4hUfHlkBoj5QokaAZgmyREZRjkIkDuSYgs
382
+ CmQNgMNmggkZtcyQKDXmEjAAWIrlgZChCQAqfljpKKKoGrJkhgAIUHYnAI0/
383
+ ql4wQrABBaw1fJzpEnBjwC4cYvBwmWHDkh4psySYCvCJ2igXFayA6VVFkzZv
384
+ gkIdK+EEw5BbFEBga3CCwCtxAuhgOhCASB9IItxA09DGVqNlqXC9cbQoUg5w
385
+ DmpwSwMowipXg1Cl0GKAhZwkXjbNecDEx54dzyoFgxLuSCJaH6b4slCgG7FW
386
+ UVpMgiFs3BUyvEh54nShwzAOS7asG+BRJ9OpMHY8PIoBKpu0OCPOdALyC82C
387
+ aZQCAgA7
372
388
  EOS
373
389
 
374
390
  COPY_GIF=<<EOS
@@ -620,6 +636,24 @@ BBIqXAiAIMKFCQFIbHgQIkSKAh9exFjRokKOGj2CnEiSpMOSEw0OCPlRAMeV
620
636
  CQPIDMDQYcyZMiPaJIAzJwGQN3Hq7Ojxp8qjAwMCADs=
621
637
  EOS
622
638
 
639
+ DOCUMENT_COMBO_GIF=<<EOS
640
+ R0lGODlhEAAQAMZcADRUbihZhENYaDpbeTBdhy9fkDRfhzFhkDhghzVlkj1q
641
+ k41+QI1/RY2BR42CTY2CTo2CT42EVI2FVo2GWI2GXo2HX42HYI2JZY2JaI2K
642
+ Z42LbY2Lb42Mb42NdY2Ndo2Od0iZ342Pe42QfY2QgI2Rgkuc4o2ShVCh55en
643
+ soHR9//MV//OWqrX///PXv/PYP/QY//SZv/SaP/Sa//Tbv/UdP/Vc//Wdv/Y
644
+ f//ZgP/ag//cjP/djf/ekP/gmP/hmv/hnP/kpv/lpf/lqP/mqf/nrf/osP/o
645
+ sf/ps//ptP/qt//ru//svf/svv/txP/uw//uxf/vyP/wy//wzP/xz//z1v/0
646
+ 2v/13f/24f/35P/45//56//78v//////////////////////////////////
647
+ ////////////////////////////////////////////////////////////
648
+ /////////////////////////////////////////////////yH+EUNyZWF0
649
+ ZWQgd2l0aCBHSU1QACH5BAEKAH8ALAAAAAAQABAAAAeegH+Cg4SFhQADCIoG
650
+ AwCGgwopLCwnBY+ECSUgB5eFBAGXAqKjKCijo4ICW1pZV1ZVVFNSUE9MAqla
651
+ JiMhHRoXFBEODEm3fwJaUU1KRUE9Ojc1MMSpWCQiHhsZFRIPDQtFxQJXTkpG
652
+ QD47ODQxLUThVSIfHBgWExAzLytA4VdLR0I/eOSwIcOFCnCprhRZWATJwiFE
653
+ gOxLdariqU6XAgEAOw==
654
+ EOS
655
+
656
+
623
657
  EXIT_GIF=<<EOS
624
658
  R0lGODlhFAAUAOelAOlIDulLE+ldLPGUcvaxmPjKuvvk3OA5BOA6BeE+COhD
625
659
  CuBCDeFDD+BHFeBIGOBLHOZSI+hWJOZYLOhcLehjN+6HZfCNa++Pb/GScfjH
@@ -1769,4 +1803,4 @@ owSIBIP2gGyQ5wSUKySY9PgQYgAhRIQM/dkAKEWQMCWKzDgBA8GhQw8FVSDE
1769
1803
  YskZFVJ0uDABwI8gRH0OOShk4kkWG0R2TC7w8BAgRBkAdZGTJYaUJT9GBFhT
1770
1804
  57CdBzOUnEGzpcsRGhoAyOCCGFGZKDlEeNDQYUIFChFGFQR583AQoDZorCAB
1771
1805
  ouMGDyxZ3CAKCAA7
1772
- EOS
1806
+ EOS
@@ -79,8 +79,9 @@ hightlight.global_variable.foreground=#db66ca
79
79
  hightlight.constant.foreground=#bdc175
80
80
  hightlight.tag.foreground=#69a8d9
81
81
  hightlight.selected.background=#133e5e
82
- hightlight.sel.background=#160504
82
+ hightlight.sel.background=#660000
83
83
  hightlight.sel.foreground=white
84
+ hightlight.sel.borderwidth=0
84
85
  hightlight.link.foreground=orange
85
86
  #hightlight.sel.foreground=white
86
87
 
@@ -8,13 +8,30 @@
8
8
  #EOS
9
9
 
10
10
  W_MAX_GIF[0..-1]=<<EOS
11
- R0lGODlhCwAJAIAAAP///////yH5BAEKAAEALAAAAAALAAkAAAITDI4Ylrmw
12
- 4puSwmpovXdryTVKAQA7
11
+ R0lGODlhEAAQAKUlAGYAAJkAAP8TE4JPHP8qKoVSH4hVIotYJY1aJ5BdKpJf
12
+ LJRhLpZjMJhlMv9FRZlmM/9eXv95ec2bOM+fPtGiRdKmTf+UlNWqVdevX9m0
13
+ ady5c/+vr9++ff+zs+HEif+8vOTJlOfPnv/Kyv/Z2f/o6P//////////////
14
+ ////////////////////////////////////////////////////////////
15
+ /////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1Q
16
+ ACH5BAEKAD8ALAAAAAAQABAAAAZiwJ9wSCwahYHA0Rj4bADLYUAUgTigy8DI
17
+ UnUQsMUAqcO1EgRgYpJqBaTD7Gv0N+2+4fb5z+0+Pv5LBgUDQg8hfw0MCwoJ
18
+ CAcGEoQ/hiAeHBoZGBcVFBORhX8PiYuNj4N6RkEAOw==
13
19
  EOS
14
20
 
15
21
  W_NORM_GIF[0..-1]=<<EOS
16
- R0lGODlhCwAJAIAAAP///////yH5BAEKAAEALAAAAAALAAkAAAIUjIFpm7oB
17
- XjwtTlghk2j7r3HNUwAAOw==
22
+ R0lGODlhEAAQAOYAAABHvwBFqABBpgBQvQBLsghk0whewwhUsgpcwwpZvQ5g
23
+ whBo0BNkyABZuwdfww5nzxJz3hFqyRx75BxwzgBpzwpz2hFryheA7RNqwBp1
24
+ 0CZ81jCO7ne7/32+/obC/4vE/47H/4/H/5rM/6DP/6DQ/wp11gluywpy0g16
25
+ 3RNxyxRyyBZ0zBx70yWD2iuH2z2U5Euq/1Cr/1Cg6WKy/267/2+4/HG7/3O9
26
+ /3m//3m694LC/4PE/4fF/47I/47J/5XL/5nN/5vO/53R/6rX/7Xb/whyzAlx
27
+ yQpyyBaD3Bx+0Cqf/y2f/yiG1yuJ2S6I10Cn/zqU4TuR3Eyg6lyz/3zD/4bI
28
+ /4bJ/4vL/5jP/6rY/w57zheI3xeE2yOi/yaP4iiK2HnG/7bi/////wAAAAAA
29
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
30
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGIA
31
+ LAAAAAAQABAAAAeHgGKCg4SFhoeIhAcKDASJghNVV1RgGwCIGlYxME9LShKD
32
+ JSiCKzczUxkGDhBdAoJOQ2IqNTY0KYQXCIJJWVFNOzguhQUPgkZYQR06HCaF
33
+ AwuCRzkgHjxMDRSFCYJFMj8fIkBCYS+DEQGDXiMhPT5SLRWDFhiDW0QkUEgn
34
+ hSyEXF9aHgkc+CgQADs=
18
35
  EOS
19
36
 
20
37
  #TREE_NODE_CLASS_GIF[0..-1]=<<EOS
@@ -6,19 +6,19 @@ frames.names=editor,editor_outline
6
6
  active=yes
7
7
  require=ext/ae-editor/ae-editor
8
8
  class=AgMultiEditor
9
- #gems=coderay
10
- gems=coderay,rdp-rbeautify
11
- gems.rdp-rbeautify.repository=http://gems.github.com
12
- gems.rdp-rbeautify.events=PrettifyTextEvent
9
+ gems=coderay
10
+ #gems=coderay,rdp-rbeautify
11
+ #gems.rdp-rbeautify.repository=http://gems.github.com
12
+ #gems.rdp-rbeautify.events=PrettifyTextEvent
13
13
  tabs=0.5c left
14
14
  # to use tab key set tab-replace-width-space=0
15
15
  tab-replace-width-space=2
16
-
16
+ line-numbers=yes
17
17
  #tabs
18
18
  #tabs.font=courier 11
19
19
  #freebsd::tabs.font=courier 12
20
20
  #win::tabs.font={Courier New} 9
21
- ##tabs.side=bottom
21
+ #tabs.side=bottom
22
22
  tabs.side=top
23
23
  complete-code=yes
24
24
  close-last-if-not-modified=yes
@@ -45,7 +45,6 @@ max-file-open=3 #todo
45
45
  #hightlight.goto.color.foreground=blue
46
46
  #hightlight.goto.color.background=yellow
47
47
  #+--------------------------------------------------
48
- #+--------------------------------------------------
49
48
  hightlight.sel.foreground=>>>hightlight.sel.foreground
50
49
  hightlight.sel.background=>>>hightlight.sel.background
51
50
  hightlight.sel.borderwidth=>>>hightlight.sel.borderwidth
@@ -66,75 +65,20 @@ hightlight.spaces.relief=>>>hightlight.4.relief
66
65
  #hightlight.debug.relief=>>>hightlight.16.relief
67
66
 
68
67
 
69
- #color.background=#FFFFFF
70
- #color.foreground=#7F7F7F
71
- #color.insertbackground=#ff8000
72
- #hightlight.keyword.foreground=#00007F
73
- #hightlight.keyword.style=bold
74
- #hightlight.method_name.foreground=#007F7F
75
- #hightlight.method_name.style=bold
76
- #hightlight.class_name.foreground=#0000FF
77
- #hightlight.class_name.style=bold
78
- #hightlight.module_name.foreground=#0000FF
79
- #hightlight.module_name.style=bold
80
- #hightlight.instance_variable.color.foreground=#7F7F7F
81
- #hightlight.instance_variable.style=bold
82
- #hightlight.comment.color.foreground=#007F00
83
- #hightlight.string.color.foreground=#7F007F
84
- #hightlight.number.color.foreground=#007F7F
85
- ##hightlight.capitalize.color.foreground=#0000FF
86
- #hightlight.operator.foreground=#000000
87
- #hightlight.operator.style=bold
88
- #hightlight.sel.foreground=black
89
- #hightlight.sel.background=#68f914
90
- #hightlight.sel.borderwidth=1
91
- #hightlight.sel.relief=raised
92
- #hightlight.debug.foreground=black
93
- #hightlight.debug.background=#b3c1d9
94
- #hightlight.debug.borderwidth=2
95
- #hightlight.debug.relief=groove
96
- ##hightlight.goto.color.foreground=blue
97
- #hightlight.selected.background=yellow
98
- #hightlight.tabs.foreground=black
99
- #hightlight.tabs.background=#b1cfba
100
- #hightlight.tabs.borderwidth=1
101
- #hightlight.tabs.relief=raised
102
- #hightlight.spaces.foreground=black
103
- #hightlight.spaces.background=#d9f42b
104
- #hightlight.spaces.borderwidth=1
105
- #hightlight.spaces.relief=raised
106
- #+--------------------------------------------------
107
-
108
-
109
- # line number
110
- #line_number_panel.color.background=#6e6e6e
111
- #line_number_panel.color.foreground=white
112
-
113
- #line_number_panel.color.background=#e1e1e1
114
- ##line_number_panel.color.background=#FFFFFF
115
- #line_number_panel.color.foreground=#333333
116
- #
117
- #
118
- # tree explorer
119
- #explorer_panel.tree.color.background=#ffffff
120
- #explorer_panel.tree.color.foreground=white
121
- ##explorer_panel.tabs.side=bottom
122
68
  explorer_panel.tabs.side=top
123
- #
124
- #explorer_panel.tree.font=courier 11
125
- #freebsd::explorer_panel.tree.font=courier 12
126
- #win::explorer_panel.tree.font={Courier New} 9
127
- #explorer_panel.tree.class.color.foreground=#a42019
128
- #explorer_panel.tree.class.font=times 10 bold
129
- #win::explorer_panel.tree.class.font=times 10 bold
130
- #explorer_panel.tree.def.color.foreground=blue
131
- #explorer_panel.tree.def.font=times 10
132
- #win::explorer_panel.tree.def.font=times 10
133
- #explorer_panel.tree.module.color.foreground=#1b691e
134
- #explorer_panel.tree.module.font=times 8 bold
135
- #win::explorer_panel.tree.module.font={Courier New} 9 bold
136
69
 
137
70
  #:::::::::::::::: Editor group ::::::::::::::::::::::<end>
138
71
  popup.bind.shortcut=Button-3
139
72
  arm::popup.bind.shortcut=F4
140
- #keybinding.Control-Shift-KeyPress[Y]=ActionEvent.new(self,'action'=>close_raised)
73
+ #keybinding.Control-Shift-KeyPress[Y]=ActionEvent.new(self,'action'=>close_raised)
74
+
75
+ # menu items
76
+ user_menu.contexts=View
77
+ user_menu.View.context_path=/
78
+ user_menu.View=line_number
79
+ user_menu.View.line_number.hint=Show/Hide line numbers
80
+ user_menu.View.line_number.caption=Show/Hide line numbers
81
+ user_menu.View.line_number.underline=1
82
+ user_menu.View.line_number.action=ActionEvent.new(self,'action'=>show_hide_current_line_numbers)
83
+
84
+ #:::::::::::::::::::::::::::::::::::::::::::::::::<end>
@@ -10,6 +10,7 @@ require 'tktext'
10
10
  require "#{Dir.pwd}/lib/a-tkcommons"
11
11
  #require 'lib/a-commons'
12
12
  require "#{Dir.pwd}/lib/a-core"
13
+ require "#{Dir.pwd}/ext/ae-editor/lib/rbeautify"
13
14
 
14
15
  class TreeNode
15
16
  attr_reader :sons
@@ -34,15 +35,99 @@ end
34
35
 
35
36
  class SourceStructure
36
37
  attr_reader :root
38
+
39
+ def initialize
40
+ @root = TreeNode.new(nil, 'KRoot'){|_node|
41
+ _node.rif= 'root'
42
+ _node.label=''
43
+ }
44
+ end
45
+
46
+ def node_by_line(_from_node, _line)
47
+ _found_node = nil
48
+ _begin = _from_node.rif.to_i
49
+ _end = _from_node.rif_end.to_i
50
+ if _line.to_i <= _end && _line.to_i >= _begin
51
+ _found_node = _from_node
52
+ else
53
+ _sons = _from_node.sons
54
+ for inode in 0.._sons.length - 1
55
+ _son = _sons[inode]
56
+ _found_node = node_by_line(_son, _line)
57
+ break if _found_node
58
+ end
59
+ end
60
+ return _found_node
61
+ end
62
+
63
+ def deep_node_by_line(_from_node, _line, _found_node=nil)
64
+ _begin = _from_node.rif.to_i
65
+ _end = _from_node.rif_end.to_i
66
+ if _line.to_i <= _end && _line.to_i >= _begin
67
+ _found_node = _from_node
68
+ end
69
+ _sons = _from_node.sons
70
+ for inode in 0.._sons.length - 1
71
+ _son = _sons[inode]
72
+ _found_node = deep_node_by_line(_son, _line, _found_node)
73
+ end
74
+ return _found_node
75
+ end
76
+
77
+ def class_node_by_line(_line)
78
+ line_node = node_by_line(@root, _line)
79
+ class_node = line_node
80
+ while class_node != nil && class_node.kind != "KClass"
81
+ class_node = class_node.parent
82
+ end
83
+ return class_node
84
+ end
85
+
86
+ end
87
+
88
+ class CtagsSourceStructure < SourceStructure
89
+ def initialize(_file)
90
+ super()
91
+ @file = _file
92
+ build_structure
93
+ end
94
+
95
+ def build_structure
96
+ output = ctags
97
+ output.each {|line|
98
+ p line.split("\t")
99
+ }
100
+ end
101
+
102
+ def ctags
103
+ _cmd_ = "|ctags -x -u #{@file}"
104
+ to_ret = ''
105
+ open(_cmd_, "r"){|f|
106
+ to_ret = f.readlines
107
+ }
108
+ to_ret
109
+ end
110
+ end
111
+
112
+
113
+
114
+ class RubySourceStructure < SourceStructure
37
115
  attr_reader :injected_row
116
+
38
117
  def initialize(_source)
118
+ super()
119
+ parse_source(_source)
120
+ end
121
+
122
+
123
+ def parse_source(_source)
39
124
  _row = 1
40
125
  _liv = 0
41
126
  _livs = Array.new
42
- @root = TreeNode.new(nil, 'KRoot'){|_node|
43
- _node.rif= 'root'
44
- _node.label=''
45
- }
127
+ # @root = TreeNode.new(nil, 'KRoot'){|_node|
128
+ # _node.rif= 'root'
129
+ # _node.label=''
130
+ # }
46
131
  _livs[_liv]=@root
47
132
  _source.each_line{|line|
48
133
  line = "\s"+line.split("#")[0]+"\s"
@@ -134,7 +219,8 @@ class SourceStructure
134
219
  _row = _row +1
135
220
  }
136
221
  end
137
-
222
+
223
+
138
224
  def scheletor_from_node(_node, _source='', _injected_source='', _injected_class='')
139
225
  _hinner_source = ''
140
226
  #_sons = _node.sons.sort
@@ -163,59 +249,17 @@ class SourceStructure
163
249
  _source = "#{_source}end\n" if _node.kind == 'KClass' || _node.kind == 'KModule'
164
250
  _source
165
251
  end
166
-
167
-
168
252
 
169
- def node_by_line(_from_node, _line)
170
- _found_node = nil
171
- _begin = _from_node.rif.to_i
172
- _end = _from_node.rif_end.to_i
173
- if _line.to_i <= _end && _line.to_i >= _begin
174
- _found_node = _from_node
175
- else
176
- _sons = _from_node.sons
177
- for inode in 0.._sons.length - 1
178
- _son = _sons[inode]
179
- _found_node = node_by_line(_son, _line)
180
- break if _found_node
181
- end
182
- end
183
- return _found_node
184
- end
185
-
186
- def deep_node_by_line(_from_node, _line, _found_node=nil)
187
- _begin = _from_node.rif.to_i
188
- _end = _from_node.rif_end.to_i
189
- if _line.to_i <= _end && _line.to_i >= _begin
190
- _found_node = _from_node
191
- end
192
- _sons = _from_node.sons
193
- for inode in 0.._sons.length - 1
194
- _son = _sons[inode]
195
- _found_node = deep_node_by_line(_son, _line, _found_node)
196
- end
197
- return _found_node
198
- end
199
-
200
- def class_node_by_line(_line)
201
- line_node = node_by_line(@root, _line)
202
- class_node = line_node
203
- while class_node != nil && class_node.kind != "KClass"
204
- class_node = class_node.parent
205
- end
206
- return class_node
207
- end
208
-
253
+
209
254
  def classies
210
255
  end
211
256
  def modules
212
257
  end
213
258
  def class_methods(_class)
214
259
  end
215
-
216
-
217
260
  end
218
261
 
262
+
219
263
  class SafeCompleteCode
220
264
  attr_reader :modified_row, :modified_col
221
265
  attr_reader :filter
@@ -224,7 +268,7 @@ class SafeCompleteCode
224
268
  @file = _file
225
269
  @row = _row.to_i
226
270
  @col = _col.to_i
227
- @ss = SourceStructure.new(_source)
271
+ @ss = RubySourceStructure.new(_source)
228
272
  @filter=''
229
273
  @words = Array.new
230
274
  process_source
@@ -856,7 +900,8 @@ class AgEditorOutline
856
900
  #(re)build tree
857
901
  _txt = @editor.text.get('1.0','end')
858
902
  #@root = build_tree_from_source(_txt)
859
- @ss = SourceStructure.new(_txt)
903
+ #CtagsSourceStructure.new(@editor.file)
904
+ @ss = RubySourceStructure.new(_txt)
860
905
  #@root = @ss.root
861
906
  @selected = nil
862
907
  build_tree_from_node(@ss.root, _label_sel)
@@ -916,12 +961,37 @@ class AgEditor
916
961
  @loading=false
917
962
  @tabs_show = false
918
963
  @spaces_show = false
964
+ @line_numbers_visible = @controller.conf('line-numbers') == 'yes'
919
965
  end
920
966
 
921
967
  def modified_from_opening?
922
968
  @modified_from_opening
923
969
  end
924
970
 
971
+ def show_line_numbers
972
+ if !@line_numbers_visible
973
+ #@fm1.hide_right
974
+ @fm1.show_left
975
+ @line_numbers_visible = true
976
+ do_line_update
977
+ end
978
+ end
979
+
980
+ def hide_line_numbers
981
+ if @line_numbers_visible
982
+ @fm1.hide_left
983
+ @line_numbers_visible = false
984
+ end
985
+ end
986
+
987
+ def show_hide_line_numbers
988
+ if @line_numbers_visible
989
+ hide_line_numbers
990
+ else
991
+ show_line_numbers
992
+ end
993
+ end
994
+
925
995
  def xy_insert
926
996
  _index_now = @text.index('insert')
927
997
  _rx, _ry, _width, _heigth = @text.bbox(_index_now);
@@ -946,15 +1016,24 @@ class AgEditor
946
1016
  padx 0
947
1017
  tabs $arcadia['conf']['editor.tabs']
948
1018
  }
949
-
1019
+ _self_editor = self
950
1020
  class << @text
1021
+ attr_accessor :editor
951
1022
  def tag_adds(tag, *args)
952
1023
  tk_send_without_enc('tag', 'add', _get_eval_enc_str(tag),
953
1024
  *args.flatten)
954
1025
  self
955
1026
  end
1027
+
1028
+ def do_upper_case
1029
+ @editor.do_upper_case if @editor
1030
+ end
1031
+
1032
+ def do_lower_case
1033
+ @editor.do_lower_case if @editor
1034
+ end
956
1035
  end
957
-
1036
+ @text.editor = self
958
1037
  #do_tag_configure_global('debug')
959
1038
  @text.tag_configure('eval','foreground' => 'yellow', 'background' =>'red','borderwidth'=>1, 'relief'=>'raised')
960
1039
  @text.tag_configure('errline','borderwidth'=>1, 'relief'=>'groove')
@@ -1976,7 +2055,6 @@ class AgEditor
1976
2055
  :font => "#{Arcadia.conf('menu.font')} bold",
1977
2056
  :hidemargin => true
1978
2057
  )
1979
-
1980
2058
 
1981
2059
  #Arcadia.instance.main_menu.update_style(@pop_up)
1982
2060
  @pop_up.insert('end',
@@ -2226,32 +2304,14 @@ class AgEditor
2226
2304
  :command,
2227
2305
  :label=>'Selection to uppercase',
2228
2306
  :hidemargin => false,
2229
- :command=> proc{
2230
- _r = @text.tag_ranges('sel')
2231
- if _r.length>0
2232
- _text=@text.get(_r[0][0],_r[0][1])
2233
- if _text.length > 0
2234
- @text.delete(_r[0][0],_r[0][1])
2235
- @text.insert(_r[0][0],_text.upcase)
2236
- end
2237
- end
2238
- }
2307
+ :command=> proc{do_upper_case}
2239
2308
  )
2240
2309
 
2241
2310
  _sub_code.insert('end',
2242
2311
  :command,
2243
2312
  :label=>'Selection to downcase',
2244
2313
  :hidemargin => false,
2245
- :command=> proc{
2246
- _r = @text.tag_ranges('sel')
2247
- if _r.length>0
2248
- _text=@text.get(_r[0][0],_r[0][1])
2249
- if _text.length > 0
2250
- @text.delete(_r[0][0],_r[0][1])
2251
- @text.insert(_r[0][0],_text.downcase)
2252
- end
2253
- end
2254
- }
2314
+ :command=> proc{do_lower_case}
2255
2315
  )
2256
2316
 
2257
2317
 
@@ -2313,8 +2373,8 @@ class AgEditor
2313
2373
  proc{|x,y|
2314
2374
  _x = TkWinfo.pointerx(@text)
2315
2375
  _y = TkWinfo.pointery(@text)
2316
- @pop_up.entryconfigure(1, 'label'=>File.basename(@file)) if @file
2317
- #@pop_up.entryconfigure(0, 'label'=>File.basename(@file)) if @file
2376
+ #@pop_up.entryconfigure(1, 'label'=>File.basename(@file)) if @file
2377
+ @pop_up.entryconfigure(0, 'label'=>File.basename(@file)) if @file
2318
2378
  @pop_up.popup(_x,_y)
2319
2379
  },
2320
2380
  "%x %y")
@@ -2342,7 +2402,55 @@ class AgEditor
2342
2402
  def text_value
2343
2403
  return @text.value
2344
2404
  end
2405
+
2406
+ def text_selected
2407
+ _text = ''
2408
+ _r = @text.tag_ranges('sel')
2409
+ if _r.length>0
2410
+ _text=@text.get(_r[0][0],_r[0][1])
2411
+ end
2412
+ _text
2413
+ end
2414
+
2415
+ def text_replace_selected_with(_text_for_replace='')
2416
+ _r = @text.tag_ranges('sel')
2417
+ if _r.length>0
2418
+ bl = _r[0][0].split('.')[0].to_i
2419
+ @text.delete(_r[0][0],_r[0][1])
2420
+ @text.insert(_r[0][0],_text_for_replace)
2421
+ el = @text.index('insert').split('.')[0].to_i
2422
+ if highlighting
2423
+ reset_highlight(bl)
2424
+ rehighlightlines(bl,el,true)
2425
+ end
2426
+ end
2427
+ end
2428
+
2429
+ def text_replace_value_with(_text_for_replace='')
2430
+ pos_index = @text.index('insert')
2431
+ @text.delete('1.0','end')
2432
+ reset_highlight if @highlighting
2433
+ @text.insert('end',_text_for_replace)
2434
+ do_line_update
2435
+ @text.see(pos_index)
2436
+ @text.set_insert(pos_index)
2437
+ check_modify
2438
+ end
2439
+
2440
+ def do_upper_case
2441
+ _text = text_selected
2442
+ if _text.length > 0
2443
+ text_replace_selected_with(_text.upcase)
2444
+ end
2445
+ end
2345
2446
 
2447
+ def do_lower_case
2448
+ _text = text_selected
2449
+ if _text.length > 0
2450
+ text_replace_selected_with(_text.downcase)
2451
+ end
2452
+ end
2453
+
2346
2454
  # vertical scrollbar : ON/OFF
2347
2455
  def vscroll(mode)
2348
2456
  st = TkGrid.info(@v_scroll)
@@ -2611,8 +2719,6 @@ class AgEditor
2611
2719
  line_begin = line_begin_index.split('.')[0].to_i
2612
2720
  line_end = @text.index('@0,'+TkWinfo.height(@text).to_s).split('.')[0].to_i + 1
2613
2721
  wrap_on = @text.cget("wrap") != 'none'
2614
- # breakpoint
2615
- b = @controller.breakpoint_lines_on_file(@file)
2616
2722
  if @highlighting
2617
2723
  _zone_begin = ((line_begin) / @highlight_zone_length).to_i + 1
2618
2724
  _zone_end = ((line_end) / @highlight_zone_length).to_i + 1
@@ -2628,52 +2734,55 @@ class AgEditor
2628
2734
  @last_zone_begin = _zone_begin
2629
2735
  @last_zone_end = _zone_end
2630
2736
  end
2631
- @text_line_num.delete('1.0','end')
2632
-
2633
-
2634
- _rx, _ry, _width, _heigth = @text.bbox(line_begin_index);
2635
-
2636
- if _ry && _ry < 0
2637
- real_line_end = line_end + 1
2638
- else
2639
- real_line_end = line_end
2640
- end
2641
- #@fm1
2642
- _tags = Array.new
2643
- for j in line_begin...real_line_end
2644
- nline = j.to_s.rjust(line_end.to_s.length+2)
2645
- _index = @text_line_num.index('end')
2646
- _tags.clear
2647
- if @highlighting && @is_line_bold[j]
2648
- _tags << 'bold_case'
2737
+ if @line_numbers_visible
2738
+ # breakpoint
2739
+ b = @controller.breakpoint_lines_on_file(@file)
2740
+
2741
+ @text_line_num.delete('1.0','end')
2742
+ _rx, _ry, _width, _heigth = @text.bbox(line_begin_index);
2743
+
2744
+ if _ry && _ry < 0
2745
+ real_line_end = line_end + 1
2649
2746
  else
2650
- _tags << 'normal_case'
2747
+ real_line_end = line_end
2651
2748
  end
2652
-
2653
- if wrap_on
2654
- w_rx_b, w_ry_b, w_width_b, w_heigth_b = @text.bbox("#{(j).to_s}.0");
2655
- w_rx_e, w_ry_e, w_width_e, w_heigth_e = @text.bbox("#{(j).to_s}.0 lineend");
2656
- if w_ry_e && w_ry_b
2657
- delta = w_ry_e - w_ry_b
2658
- if delta > 1
2659
- _tag = "wrap_case_#{j}"
2660
- @text_line_num.tag_configure(_tag, 'spacing3'=>delta)
2661
- _tags << _tag
2749
+ #@fm1
2750
+ _tags = Array.new
2751
+ for j in line_begin...real_line_end
2752
+ nline = j.to_s.rjust(line_end.to_s.length+2)
2753
+ _index = @text_line_num.index('end')
2754
+ _tags.clear
2755
+ if @highlighting && @is_line_bold[j]
2756
+ _tags << 'bold_case'
2757
+ else
2758
+ _tags << 'normal_case'
2759
+ end
2760
+
2761
+ if wrap_on
2762
+ w_rx_b, w_ry_b, w_width_b, w_heigth_b = @text.bbox("#{(j).to_s}.0");
2763
+ w_rx_e, w_ry_e, w_width_e, w_heigth_e = @text.bbox("#{(j).to_s}.0 lineend");
2764
+ if w_ry_e && w_ry_b
2765
+ delta = w_ry_e - w_ry_b
2766
+ if delta > 1
2767
+ _tag = "wrap_case_#{j}"
2768
+ @text_line_num.tag_configure(_tag, 'spacing3'=>delta)
2769
+ _tags << _tag
2770
+ end
2662
2771
  end
2663
2772
  end
2773
+
2774
+ @text_line_num.insert(_index, "#{nline}\n",_tags)
2775
+ if b.include?(j.to_s)
2776
+ add_tag_breakpoint(j)
2777
+ end
2664
2778
  end
2665
-
2666
- @text_line_num.insert(_index, "#{nline}\n",_tags)
2667
- if b.include?(j.to_s)
2668
- add_tag_breakpoint(j)
2779
+ if _ry && _ry < 0
2780
+ @text_line_num.yview_scroll(_ry.abs+2,"pixels")
2669
2781
  end
2670
- end
2671
- if _ry && _ry < 0
2672
- @text_line_num.yview_scroll(_ry.abs+2,"pixels")
2782
+ resize_line_num
2673
2783
  end
2674
2784
  end
2675
2785
  refresh_outline if Tk.focus==@text
2676
- resize_line_num
2677
2786
  end
2678
2787
 
2679
2788
  def resize_line_num
@@ -2924,7 +3033,7 @@ class AgEditor
2924
3033
  @text.set_insert(pos_index)
2925
3034
  end
2926
3035
 
2927
- def init_editing(_ext='rb', _w1=150, _w2=60)
3036
+ def init_editing(_ext='rb')
2928
3037
  @is_ruby = _ext=='rb'|| _ext=='rbw'
2929
3038
  @classbrowsing = @is_ruby
2930
3039
  @lang_hash = @controller.languages_hash(_ext)
@@ -2937,7 +3046,7 @@ class AgEditor
2937
3046
  # else
2938
3047
  # @fm1 = AGTkVSplittedFrames.new(@page_frame,_w2)
2939
3048
  # end
2940
- @fm1 = AGTkVSplittedFrames.new(@page_frame,@page_frame,_w2)
3049
+ @fm1 = AGTkVSplittedFrames.new(@page_frame,@page_frame,0,5,false,false)
2941
3050
  @fm1.splitter_frame.configure('relief'=>'flat')
2942
3051
  initialize_text(@fm1.right_frame)
2943
3052
  initialize_highlight(_ext)
@@ -2950,7 +3059,7 @@ class AgEditor
2950
3059
  @outline.show
2951
3060
  else
2952
3061
  @outline=AgEditorOutline.new(self,@controller.frame(1).hinner_frame,@controller.outline_bar)
2953
- @outline.build_tree
3062
+ refresh
2954
3063
  end
2955
3064
  end
2956
3065
 
@@ -3325,8 +3434,60 @@ class AgMultiEditor < ArcadiaExt
3325
3434
  @outline_bar = AgEditorOutlineToolbar.new(self.frame(1).hinner_frame, self)
3326
3435
  create_find # this is the "find within current file" one
3327
3436
  pop_up_menu
3328
-
3329
- #self.open_last_files
3437
+ @buffer_menu = frame.root.add_menu_button(self.name, 'files', DOCUMENT_COMBO_GIF, 'right', {'relief'=>:raised, 'borderwidth'=>1}).cget('menu')
3438
+ frame.root.add_sep(self.name, 1)
3439
+ frame.root.add_button(
3440
+ self.name,
3441
+ 'close current',
3442
+ proc{Arcadia.process_event(CloseCurrentTabEvent.new(self))},
3443
+ CLOSE_DOCUMENT_GIF)
3444
+ end
3445
+
3446
+ def add_buffer_menu_item(_filename, is_file=true)
3447
+ index = 'end'
3448
+ i_end = @buffer_menu.index('end')
3449
+ if i_end
3450
+ 0.upto(i_end){|j|
3451
+ type = @buffer_menu.menutype(j)
3452
+ if type != 'separator'
3453
+ label = @buffer_menu.entrycget(j,'label')
3454
+ if label > _filename
3455
+ index=j
3456
+ break
3457
+ end
3458
+ end
3459
+ }
3460
+ end
3461
+
3462
+ @buffer_menu.insert(index,:command,
3463
+ :label=>_filename,
3464
+ :image=> Arcadia.file_icon(_filename),
3465
+ :compound=>'left',
3466
+ :command=>proc{
3467
+ if is_file
3468
+ open_file(_filename)
3469
+ else
3470
+ open_buffer(tab_name(_filename))
3471
+ end
3472
+ },
3473
+ :hidemargin => true
3474
+ )
3475
+ end
3476
+
3477
+ def del_buffer_menu_item(_file)
3478
+ to_del = -1
3479
+ i_end = @buffer_menu.index('end')
3480
+ 0.upto(i_end){|j|
3481
+ type = @buffer_menu.menutype(j)
3482
+ if type != 'separator'
3483
+ label = @buffer_menu.entrycget(j,'label')
3484
+ if label == _file
3485
+ to_del=j
3486
+ break
3487
+ end
3488
+ end
3489
+ }
3490
+ @buffer_menu.delete(to_del) if to_del != -1
3330
3491
  end
3331
3492
 
3332
3493
  def on_after_build(_event)
@@ -3643,11 +3804,24 @@ class AgMultiEditor < ArcadiaExt
3643
3804
  when CloseCurrentTabEvent
3644
3805
  close_raised
3645
3806
  when PrettifyTextEvent
3646
- require 'rbeautify.rb' # gem
3647
- self.raised.save # so we can beautify it kludgely here...
3648
- path = raised.file
3649
- RBeautify.beautify_file(path)
3650
- self.raised.reload
3807
+ # require 'rbeautify.rb' # gem
3808
+ # self.raised.save # so we can beautify it kludgely here...
3809
+ # path = raised.file
3810
+ # RBeautify.beautify_file(path)
3811
+ # self.raised.reload
3812
+
3813
+ rbea = RBeautify.beautify_string(raised.text_value_lines)
3814
+ if rbea && rbea.length >1 && !rbea[1]
3815
+ raised.text_replace_value_with(rbea[0])
3816
+ else
3817
+ msg = "Problems in prettify #{raised.tab_title}"
3818
+ Arcadia.dialog(self,
3819
+ 'type'=>'ok',
3820
+ 'title' => "(Arcadia) code prettify",
3821
+ 'msg'=>msg,
3822
+ 'level'=>'error')
3823
+ end
3824
+
3651
3825
  when MoveBufferEvent
3652
3826
  if _event.old_file && _event.new_file && editor_exist?(_event.old_file)
3653
3827
  #close_file(_event.old_file)
@@ -3671,6 +3845,11 @@ class AgMultiEditor < ArcadiaExt
3671
3845
  _e.find if _e
3672
3846
  end
3673
3847
 
3848
+ def show_hide_current_line_numbers
3849
+ _e = raised
3850
+ _e.show_hide_line_numbers if _e
3851
+ end
3852
+
3674
3853
  def on_finalize(_event)
3675
3854
  @batch_files = true
3676
3855
  _files =''
@@ -3856,6 +4035,10 @@ class AgMultiEditor < ArcadiaExt
3856
4035
  @main_frame.enb.itemcget(page_name(_tab), 'text')
3857
4036
  end
3858
4037
 
4038
+ def tab_title_by_tab_name(_tab_name)
4039
+ @main_frame.enb.itemcget(_tab_name, 'text')
4040
+ end
4041
+
3859
4042
  def page_name(_page_frame)
3860
4043
  TkWinfo.appname(_page_frame).sub('f','')
3861
4044
  end
@@ -3961,7 +4144,10 @@ class AgMultiEditor < ArcadiaExt
3961
4144
  end
3962
4145
  end
3963
4146
  if @arcadia.layout.headed?
3964
- frame.top_text(_new_caption)
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)
3965
4151
  #@arcadia.layout.domain(@arcadia['conf'][@name+'.frame'])['root'].top_text(_new_caption)
3966
4152
  end
3967
4153
  _title = @tabs_file[_name] != nil ? File.basename(@tabs_file[_name]) :_name
@@ -3983,7 +4169,7 @@ class AgMultiEditor < ArcadiaExt
3983
4169
 
3984
4170
  def tab_name(_str="")
3985
4171
  #_str = _str.downcase if is_windows?
3986
- 'ff'+_str.downcase.gsub("/","_").gsub(".","_").gsub(":","_").gsub("\\","_")
4172
+ 'ff'+_str.downcase.gsub("/","_").gsub(".","__").gsub(":","___").gsub("\\","____").gsub("*","_____")
3987
4173
  end
3988
4174
 
3989
4175
  def tab_file_name(_filename="")
@@ -4014,21 +4200,17 @@ class AgMultiEditor < ArcadiaExt
4014
4200
  open_buffer(_tab_name)
4015
4201
  else
4016
4202
  @tabs_file[_tab_name]= _filename
4017
- if _exp
4018
- open_buffer(_tab_name, _basefilename)
4019
- else
4020
- open_buffer(_tab_name, _basefilename,0)
4021
- end
4203
+ open_buffer(_tab_name, _basefilename, _filename)
4022
4204
  @tabs_editor[_tab_name].reset_highlight
4023
4205
  begin
4024
4206
  @tabs_editor[_tab_name].load_file(_filename)
4025
4207
  rescue RuntimeError => e
4026
4208
  p "RuntimeError : #{e.message}"
4027
- close_editor(@tabs_editor[_tab_name])
4209
+ close_editor(@tabs_editor[_tab_name], true)
4028
4210
  end
4029
4211
  end
4030
4212
 
4031
- if _text_index != nil && _text_index != '1.0'
4213
+ if _text_index != nil && _text_index != '1.0' && @tabs_editor[_tab_name]
4032
4214
  @tabs_editor[_tab_name].text_see(_text_index)
4033
4215
  @tabs_editor[_tab_name].mark_selected(_text_index) if _mark_selected
4034
4216
  end
@@ -4037,11 +4219,12 @@ class AgMultiEditor < ArcadiaExt
4037
4219
  end
4038
4220
 
4039
4221
 
4040
- def open_buffer(_buffer_name = nil, _title = nil, w1=150)
4222
+ def open_buffer(_buffer_name = nil, _title = nil, _filename=nil)
4041
4223
  _index = @main_frame.enb.index(_buffer_name)
4042
4224
  if _buffer_name == nil
4043
- _buffer_name = tab_name('new')
4044
4225
  _title_new = '*new'
4226
+ _buffer_name = tab_name(_title_new)
4227
+ #_buffer_name = tab_name('new')
4045
4228
  end
4046
4229
 
4047
4230
  if _index != -1
@@ -4051,7 +4234,8 @@ class AgMultiEditor < ArcadiaExt
4051
4234
  _n = 1
4052
4235
  while @main_frame.enb.index(_buffer_name) != -1
4053
4236
  _title_new = '*new'+_n.to_s
4054
- _buffer_name = tab_name('new')+_n.to_s
4237
+ _buffer_name = tab_name(_title_new)
4238
+ #_buffer_name = tab_name('new')+_n.to_s
4055
4239
  _n =_n+1
4056
4240
  end
4057
4241
  if _title == nil
@@ -4064,10 +4248,15 @@ class AgMultiEditor < ArcadiaExt
4064
4248
  'foreground'=> Arcadia.style("tabpanel.foreground"),
4065
4249
  'raisecmd'=>proc{do_buffer_raise(_buffer_name, _title)}
4066
4250
  )
4251
+ if _filename
4252
+ add_buffer_menu_item(_filename)
4253
+ else
4254
+ add_buffer_menu_item(_title, false)
4255
+ end
4067
4256
  _e = AgEditor.new(self, _tab)
4068
4257
  ext = Arcadia.file_extension(_title)
4069
4258
  ext='rb' if ext.nil?
4070
- _e.init_editing(ext, w1)
4259
+ _e.init_editing(ext)
4071
4260
  _e.text.set_focus
4072
4261
  #@tabs_file[_buffer_name]= nil
4073
4262
  @tabs_editor[_buffer_name]=_e
@@ -4132,39 +4321,26 @@ class AgMultiEditor < ArcadiaExt
4132
4321
  def close_editor(_editor, _force=false)
4133
4322
  if _force || can_close_editor?(_editor)
4134
4323
  _editor.destroy_outline
4135
- close_tab(_editor.page_frame)
4324
+ close_buffer(_editor.page_frame)
4136
4325
  else
4137
4326
  return
4138
4327
  end
4139
4328
  end
4140
4329
 
4141
-
4142
- # def close_editor(_editor, _mod=true)
4143
- # if ((_mod)&&(_editor.modified?))
4144
- # _message = @main_frame.enb.itemcget(page_name(_editor.page_frame), 'text')+"\n modified. Save?"
4145
- # _r = TkDialog2.new('message'=>_message, 'buttons'=>['Ok','No','Cancel']).show()
4146
- # if _r == 0
4147
- # _editor.save
4148
- # elsif _r == 1
4149
- # close_tab(_editor.page_frame)
4150
- # elsif _r == 2
4151
- # return
4152
- # end
4153
- # else
4154
- # close_tab(_editor.page_frame)
4155
- # end
4156
- # #EditorContract.instance.file_closed(self, 'file'=>_editor.file)
4157
- # end
4158
-
4159
- def close_tab(_page_frame)
4330
+ def close_buffer(_page_frame)
4160
4331
  _name = page_name(_page_frame)
4332
+ if @tabs_editor[_name] && @tabs_editor[_name].file
4333
+ del_buffer_menu_item(@tabs_editor[_name].file)
4334
+ else
4335
+ del_buffer_menu_item(tab_title_by_tab_name(_name))
4336
+ end
4161
4337
  @tabs_editor.delete(_name)
4162
4338
  _index = @main_frame.enb.index(_name)
4163
4339
  @main_frame.enb.delete(_name)
4164
4340
  if !@main_frame.enb.pages.empty?
4165
4341
  @main_frame.enb.raise(@main_frame.enb.pages[_index-1]) if TkWinfo.mapped?(@main_frame.enb)
4166
4342
  else
4167
- frame.top_text('') if TkWinfo.mapped?(frame.hinner_frame)
4343
+ frame.root.top_text('') if TkWinfo.mapped?(frame.hinner_frame)
4168
4344
  end
4169
4345
  end
4170
4346