arcadia 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. data/README +126 -123
  2. data/arcadia.rb +770 -756
  3. data/base/a-contracts.rb +130 -93
  4. data/base/a-ext.rb +280 -280
  5. data/base/a-libs.rb +5 -11
  6. data/base/a-utils.rb +235 -44
  7. data/conf/arcadia.conf +20 -16
  8. data/conf/arcadia.init.rb +0 -0
  9. data/conf/arcadia.res.rb +74 -0
  10. data/ext/ae-complete-code/ae-complete-code.conf +0 -0
  11. data/ext/ae-complete-code/ae-complete-code.rb +80 -79
  12. data/ext/ae-debug/ae-debug.conf +0 -0
  13. data/ext/ae-debug/ae-debug.rb +2 -6
  14. data/ext/ae-debug/debug1.57.rb +0 -0
  15. data/ext/ae-doc-code/ae-doc-code.conf +15 -0
  16. data/ext/ae-doc-code/ae-doc-code.rb +289 -0
  17. data/ext/ae-editor/ae-editor.conf +17 -8
  18. data/ext/ae-editor/ae-editor.rb +738 -396
  19. data/ext/ae-event-log/ae-event-log.conf +0 -0
  20. data/ext/ae-event-log/ae-event-log.rb +0 -0
  21. data/ext/ae-file-history/ae-file-history.conf +2 -2
  22. data/ext/ae-file-history/ae-file-history.rb +286 -290
  23. data/ext/ae-inspector/ae-inspector.conf +0 -0
  24. data/ext/ae-inspector/ae-inspector.rb +0 -0
  25. data/ext/ae-output-event/ae-output-event.conf +2 -2
  26. data/ext/ae-output/ae-output.conf +2 -2
  27. data/ext/ae-output/ae-output.rb +173 -178
  28. data/ext/ae-palette/ae-palette.conf +0 -0
  29. data/ext/ae-palette/ae-palette.rb +0 -0
  30. data/ext/ae-shell/ae-shell.conf +0 -0
  31. data/ext/ae-shell/ae-shell.rb +54 -54
  32. data/lib/tk/al-tk.rb +3076 -3082
  33. data/lib/tk/al-tk.res.rb +0 -0
  34. data/lib/tk/al-tkarcadia.rb +0 -0
  35. data/lib/tk/al-tkcustom.rb +0 -0
  36. data/lib/tkext/al-bwidget.rb +0 -0
  37. data/lib/tkext/al-iwidgets.rb +0 -0
  38. data/lib/tkext/al-tile.rb +0 -0
  39. data/lib/tkext/al-tktable.rb +0 -0
  40. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +276 -0
  41. data/tcl/BWidget-1.8.0/BWman/BWidget.html +228 -0
  42. data/tcl/BWidget-1.8.0/BWman/Button.html +273 -0
  43. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +264 -0
  44. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +402 -0
  45. data/tcl/BWidget-1.8.0/BWman/Dialog.html +314 -0
  46. data/tcl/BWidget-1.8.0/BWman/DragSite.html +139 -0
  47. data/tcl/BWidget-1.8.0/BWman/DropSite.html +254 -0
  48. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +248 -0
  49. data/tcl/BWidget-1.8.0/BWman/Entry.html +341 -0
  50. data/tcl/BWidget-1.8.0/BWman/Label.html +331 -0
  51. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +194 -0
  52. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +144 -0
  53. data/tcl/BWidget-1.8.0/BWman/ListBox.html +678 -0
  54. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +283 -0
  55. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +218 -0
  56. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +374 -0
  57. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +180 -0
  58. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +142 -0
  59. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +153 -0
  60. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +214 -0
  61. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +152 -0
  62. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +145 -0
  63. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +130 -0
  64. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +191 -0
  65. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +116 -0
  66. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +164 -0
  67. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +152 -0
  68. data/tcl/BWidget-1.8.0/BWman/Separator.html +77 -0
  69. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +250 -0
  70. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +147 -0
  71. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +107 -0
  72. data/tcl/BWidget-1.8.0/BWman/Tree.html +947 -0
  73. data/tcl/BWidget-1.8.0/BWman/Widget.html +502 -0
  74. data/tcl/BWidget-1.8.0/BWman/contents.html +84 -0
  75. data/tcl/BWidget-1.8.0/BWman/index.html +7 -0
  76. data/tcl/BWidget-1.8.0/BWman/navtree.html +41 -0
  77. data/tcl/BWidget-1.8.0/BWman/options.htm +458 -0
  78. data/tcl/BWidget-1.8.0/CHANGES.txt +266 -0
  79. data/tcl/BWidget-1.8.0/ChangeLog +1641 -0
  80. data/tcl/BWidget-1.8.0/LICENSE.txt +41 -0
  81. data/tcl/BWidget-1.8.0/README.txt +127 -0
  82. data/tcl/BWidget-1.8.0/arrow.tcl +551 -0
  83. data/tcl/BWidget-1.8.0/bitmap.tcl +94 -0
  84. data/tcl/BWidget-1.8.0/button.tcl +324 -0
  85. data/tcl/BWidget-1.8.0/buttonbox.tcl +403 -0
  86. data/tcl/BWidget-1.8.0/color.tcl +493 -0
  87. data/tcl/BWidget-1.8.0/combobox.tcl +809 -0
  88. data/tcl/BWidget-1.8.0/demo/basic.tcl +199 -0
  89. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +46 -0
  90. data/tcl/BWidget-1.8.0/demo/demo.tcl +212 -0
  91. data/tcl/BWidget-1.8.0/demo/dnd.tcl +42 -0
  92. data/tcl/BWidget-1.8.0/demo/manager.tcl +141 -0
  93. data/tcl/BWidget-1.8.0/demo/select.tcl +59 -0
  94. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +214 -0
  95. data/tcl/BWidget-1.8.0/demo/tree.tcl +260 -0
  96. data/tcl/BWidget-1.8.0/demo/x1.xbm +2258 -0
  97. data/tcl/BWidget-1.8.0/dialog.tcl +345 -0
  98. data/tcl/BWidget-1.8.0/dragsite.tcl +197 -0
  99. data/tcl/BWidget-1.8.0/dropsite.tcl +455 -0
  100. data/tcl/BWidget-1.8.0/dynhelp.tcl +625 -0
  101. data/tcl/BWidget-1.8.0/entry.tcl +469 -0
  102. data/tcl/BWidget-1.8.0/font.tcl +566 -0
  103. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  104. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  105. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  106. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  107. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  108. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  109. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  110. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  111. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  112. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  113. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  114. data/tcl/BWidget-1.8.0/images/minus.xbm +5 -0
  115. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/opcopy.xbm +5 -0
  117. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  118. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/oplink.xbm +5 -0
  120. data/tcl/BWidget-1.8.0/images/opmove.xbm +5 -0
  121. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  123. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  124. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/plus.xbm +5 -0
  126. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  127. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  129. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/target.xbm +9 -0
  131. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  132. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  133. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  134. data/tcl/BWidget-1.8.0/init.tcl +40 -0
  135. data/tcl/BWidget-1.8.0/label.tcl +271 -0
  136. data/tcl/BWidget-1.8.0/labelentry.tcl +100 -0
  137. data/tcl/BWidget-1.8.0/labelframe.tcl +160 -0
  138. data/tcl/BWidget-1.8.0/lang/da.rc +52 -0
  139. data/tcl/BWidget-1.8.0/lang/de.rc +52 -0
  140. data/tcl/BWidget-1.8.0/lang/en.rc +52 -0
  141. data/tcl/BWidget-1.8.0/lang/es.rc +53 -0
  142. data/tcl/BWidget-1.8.0/lang/fr.rc +52 -0
  143. data/tcl/BWidget-1.8.0/listbox.tcl +1638 -0
  144. data/tcl/BWidget-1.8.0/mainframe.tcl +711 -0
  145. data/tcl/BWidget-1.8.0/messagedlg.tcl +128 -0
  146. data/tcl/BWidget-1.8.0/notebook.tcl +1164 -0
  147. data/tcl/BWidget-1.8.0/pagesmgr.tcl +294 -0
  148. data/tcl/BWidget-1.8.0/panedw.tcl +381 -0
  149. data/tcl/BWidget-1.8.0/panelframe.tcl +246 -0
  150. data/tcl/BWidget-1.8.0/passwddlg.tcl +178 -0
  151. data/tcl/BWidget-1.8.0/pkgIndex.tcl +47 -0
  152. data/tcl/BWidget-1.8.0/progressbar.tcl +208 -0
  153. data/tcl/BWidget-1.8.0/progressdlg.tcl +87 -0
  154. data/tcl/BWidget-1.8.0/scrollframe.tcl +226 -0
  155. data/tcl/BWidget-1.8.0/scrollview.tcl +254 -0
  156. data/tcl/BWidget-1.8.0/scrollw.tcl +280 -0
  157. data/tcl/BWidget-1.8.0/separator.tcl +75 -0
  158. data/tcl/BWidget-1.8.0/spinbox.tcl +331 -0
  159. data/tcl/BWidget-1.8.0/statusbar.tcl +422 -0
  160. data/tcl/BWidget-1.8.0/tests/entry.test +173 -0
  161. data/tcl/BWidget-1.8.0/titleframe.tcl +170 -0
  162. data/tcl/BWidget-1.8.0/tree.tcl +2228 -0
  163. data/tcl/BWidget-1.8.0/utils.tcl +645 -0
  164. data/tcl/BWidget-1.8.0/widget.tcl +1576 -0
  165. data/tcl/BWidget-1.8.0/wizard.tcl +1028 -0
  166. data/tcl/BWidget-1.8.0/xpm2image.tcl +115 -0
  167. metadata +141 -5
File without changes
File without changes
@@ -7,8 +7,8 @@ class=FileH
7
7
 
8
8
  file.name=arcadia.history
9
9
  length=34
10
- font=courier 9
11
- font.bold=courier 9 bold
10
+ font=courier 12
11
+ font.bold=courier 12 bold
12
12
  color.background=#ffffff
13
13
  color.foreground=#000000
14
14
  i386-freebsd6::font=courier 12 italic
@@ -1,290 +1,286 @@
1
- #
2
- # ae-file-history.rb - Arcadia Ruby ide
3
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
- #
5
- require "base/a-ext"
6
-
7
-
8
- class TreeNode
9
- attr_reader :sons
10
- attr_reader :parent
11
- attr_reader :kind
12
- attr_reader :rif, :label, :helptext
13
- attr_writer :rif, :label, :helptext
14
- def initialize(parent=nil, kind='KClass')
15
- @sons = Array.new
16
- @parent = parent
17
- @kind = kind
18
- @label = ''
19
- if @parent !=nil
20
- @parent.sons << self
21
- end
22
- yield(self) if block_given?
23
- end
24
-
25
- def <=> (other)
26
- self.label.strip <=> other.label.strip
27
- end
28
-
29
- def path
30
- _path = @label
31
- if @parent != nil
32
- _path = @parent.path+_path
33
- end
34
- return _path
35
- end
36
-
37
- def dir(_path)
38
- node = nil
39
- sons.each{|_tree|
40
- if _path[0.._tree.label.length-1] == _tree.label
41
- res = _path[_tree.label.length.._path.length-1]
42
- if ["\\","/"].include?(res[0,1])
43
- node= _tree.dir(res)
44
- end
45
- end
46
- break if node != nil
47
- }
48
- if node == nil
49
- node = TreeNode.new(self,'KDir') do |_node|
50
- _node.label=_path
51
- _node.rif= self.path+_path
52
- end
53
- end
54
- return node
55
- end
56
- end
57
-
58
-
59
-
60
- class FileH < ArcadiaExt
61
- attr_reader :htree
62
-
63
- def before_build
64
- end
65
-
66
- def build
67
- @h_stack = Array.new
68
- do_select_item = proc{|_self|
69
- if _self.selection_get[0].length >0
70
- _selected = ""
71
- _self.selection_get[0].each{|_block|
72
- _selected = _selected + _block.to_s + "\s"
73
- }
74
- _selected = _selected.strip
75
- else
76
- _selected = _self.selection_get[0]
77
- end
78
- _dir, _file = _selected.split('@@@')
79
- if _file
80
- _file = File.expand_path( _file , _dir )
81
- else
82
- _file = Tk.getOpenFile('initialdir'=>_dir)
83
- end
84
- if _file
85
- EditorContract.instance.open_file(EditorContract::TEditorObj.new(self,'file'=>_file))
86
- end
87
- }
88
- _background = conf('color.background')
89
- _foreground = conf('color.foreground')
90
- @font = conf('font')
91
- @font_b = conf('font.bold')
92
-
93
- @htree = Tk::BWidget::Tree.new(self.frame){
94
- relief 'flat'
95
- showlines false
96
- deltay 18
97
- background _background
98
- crossfill _foreground
99
- #dragenabled true
100
- selectcommand proc{ do_select_item.call(self) }
101
- place('relwidth' => 1,'relx' => 0,'x' => '0','y' => '0','relheight' => '1')
102
- }
103
- self.build_tree
104
- end
105
-
106
- def after_build
107
- ArcadiaContractListener.new(self, EditorContract, :do_editor_event)
108
- end
109
-
110
- def history_file
111
- if !defined?(@arcadia_history_file)
112
- @arcadia_history_file = @arcadia.local_dir+'/'+conf('file.name')
113
- end
114
- return @arcadia_history_file
115
- end
116
-
117
- def do_editor_event(_event)
118
- case _event.signature
119
- when EditorContract::FILE_AFTER_OPEN
120
- if _event.context.file
121
- self.add2history(_event.context.file)
122
- add_to_tree(_event.context.file)
123
- end
124
- when EditorContract::FILE_AFTER_CLOSE
125
- if _event.context.file
126
- end
127
- end
128
- end
129
-
130
- def root
131
- if !defined?(@root)
132
- @root = TreeNode.new(nil, 'KRoot'){|_node|
133
- _node.rif= 'root'
134
- _node.label=''
135
- }
136
- end
137
- return @root
138
- end
139
-
140
- def build_tree
141
- file_dir = Hash.new
142
- nodes = Array.new
143
- if File.exist?(history_file)
144
- f = File::open(history_file,'r')
145
- f_open = $arcadia['pers']['editor.files.open'].split("|") if $arcadia['pers']['editor.files.open']
146
- begin
147
- _lines = f.readlines.collect!{| line | line.chomp+"\n" }.to_s
148
- _lines.sort.each{|_line|
149
- _file = _line.split(';')[0]
150
- if FileTest::exist?(_file)
151
- dir,fil =File.split(File.expand_path(_file))
152
- file_dir[dir] = Array.new if file_dir[dir] == nil
153
- file_dir[dir] << fil if !file_dir[dir].include?(fil)
154
- end
155
- }
156
- ensure
157
- f.close unless f.nil?
158
- end
159
- end
160
-
161
- file_dir.keys.sort.each{|_dir|
162
- node = root.dir(_dir)
163
- file_dir[_dir].each{|file|
164
- TreeNode.new(node, 'KFile'){|_node|
165
- _node.rif= _dir+'@@@'+file
166
- _node.label=file
167
- }
168
- }
169
- }
170
-
171
- build_tree_from_node(root)
172
- end
173
-
174
- def add_to_tree(_file)
175
- _d, _f = File.split(File.expand_path(_file))
176
- _foreground = conf('color.foreground')
177
- node = root.dir(_d)
178
- if !@htree.exist?(node.rif)
179
- @htree.insert('end', 'root' ,node.rif, {
180
- 'text' => _d ,
181
- 'helptext' => _d,
182
- 'deltax'=>-1,
183
- 'fill' => _foreground,
184
- 'font'=>@font,
185
- 'window'=> window('KDir')
186
- }
187
- )
188
- end
189
- _file_node_rif = _d+'@@@'+_f
190
- if !@htree.exist?(_file_node_rif)
191
- @htree.insert('end', node.rif ,_file_node_rif, {
192
- 'text' => _f ,
193
- 'helptext' => _f,
194
- 'deltax'=>-1,
195
- 'fill' => _foreground,
196
- 'font'=>@font_b,
197
- 'window'=> window('KFile',_f)
198
- }
199
- )
200
- end
201
-
202
- end
203
-
204
- def window(_kind, _label='.rb')
205
- _background = conf('color.background')
206
- _foreground = conf('color.foreground')
207
-
208
- if _kind == 'KDir'
209
- return TkLabel.new(self.frame){
210
- image TkPhotoImage.new('dat' => BOOK_GIF)
211
- background(_background)
212
- foreground(_foreground)
213
- }
214
- elsif _kind == 'KFile'
215
- if _label.include?('.rb')
216
- _image = RUBY_DOCUMENT_GIF
217
- else
218
- _image = DOCUMENT_GIF
219
- end
220
- return TkLabel.new(self.frame){
221
- image TkPhotoImage.new('dat' => _image)
222
- background(_background)
223
- foreground(_foreground)
224
- }
225
- end
226
- end
227
-
228
- def build_tree_from_node(_node)
229
- _foreground = conf('color.foreground')
230
- _sorted_sons = _node.sons.sort
231
- for inode in 0.._sorted_sons.length - 1
232
- _son = _sorted_sons[inode]
233
- _window = window(_son.kind, _son.label)
234
- @htree.insert('end', _son.parent.rif ,_son.rif, {
235
- 'text' => _son.label ,
236
- 'fill' => _foreground,
237
- 'helptext' => _son.helptext,
238
- 'deltax'=>-1,
239
- 'font'=>@font,
240
- 'window'=> _window
241
- }
242
- )
243
- build_tree_from_node(_son)
244
- end
245
- end
246
-
247
-
248
- def add2history(_filename, _text_index='1.0')
249
- if _filename
250
- _filename = _filename.downcase.sub(Dir::pwd.downcase+'/',"")
251
- _filename = File.expand_path(_filename)
252
- _filename_index = _filename+";"+_text_index
253
-
254
- if File.exist?(history_file)
255
- f = File::open(history_file,'r')
256
- begin
257
- _lines = f.readlines.collect!{| line | line.chomp}
258
- ensure
259
- f.close unless f.nil?
260
- end
261
- f = File.new(history_file, "w")
262
- begin
263
- if f
264
- _l= conf('length').to_i
265
- f.syswrite(_filename_index+"\n")
266
- _lines[0.._l-1].each{|_line|
267
- _lfile = _line.split(';')
268
- if _lfile
269
- f.syswrite(_line+"\n") if (_lfile[0] != _filename)&&(_line.length > 0)
270
- end
271
- }
272
- end
273
- ensure
274
- f.close unless f.nil?
275
- end
276
- else
277
- dir,fil =File.split(File.expand_path(history_file))
278
- if !File.exist?(dir)
279
- Dir.mkdir(dir)
280
- end
281
- f = File.new(history_file, "w+")
282
- begin
283
- f.syswrite(_filename+"\n") if f
284
- ensure
285
- f.close unless f.nil?
286
- end
287
- end
288
- end
289
- end
290
- end
1
+ #
2
+ # ae-file-history.rb - Arcadia Ruby ide
3
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
+ #
5
+ require "base/a-ext"
6
+
7
+
8
+ class TreeNode
9
+ attr_reader :sons
10
+ attr_reader :parent
11
+ attr_reader :kind
12
+ attr_reader :rif, :label, :helptext
13
+ attr_writer :rif, :label, :helptext
14
+ def initialize(parent=nil, kind='KClass')
15
+ @sons = Array.new
16
+ @parent = parent
17
+ @kind = kind
18
+ @label = ''
19
+ if @parent !=nil
20
+ @parent.sons << self
21
+ end
22
+ yield(self) if block_given?
23
+ end
24
+
25
+ def <=> (other)
26
+ self.label.strip <=> other.label.strip
27
+ end
28
+
29
+ def path
30
+ _path = @label
31
+ if @parent != nil
32
+ _path = @parent.path+_path
33
+ end
34
+ return _path
35
+ end
36
+
37
+ def dir(_path)
38
+ node = nil
39
+ sons.each{|_tree|
40
+ if _path[0.._tree.label.length-1] == _tree.label
41
+ res = _path[_tree.label.length.._path.length-1]
42
+ if ["\\","/"].include?(res[0,1])
43
+ node= _tree.dir(res)
44
+ end
45
+ end
46
+ break if node != nil
47
+ }
48
+ if node == nil
49
+ node = TreeNode.new(self,'KDir') do |_node|
50
+ _node.label=_path
51
+ _node.rif= self.path+_path
52
+ end
53
+ end
54
+ return node
55
+ end
56
+ end
57
+
58
+
59
+
60
+ class FileH < ArcadiaExt
61
+ attr_reader :htree
62
+
63
+ def before_build
64
+ end
65
+
66
+ def build
67
+ @h_stack = Array.new
68
+ do_select_item = proc{|_self|
69
+ if _self.selection_get[0].length >0
70
+ _selected = ""
71
+ _self.selection_get[0].each{|_block|
72
+ _selected = _selected + _block.to_s + "\s"
73
+ }
74
+ _selected = _selected.strip
75
+ else
76
+ _selected = _self.selection_get[0]
77
+ end
78
+ _dir, _file = _selected.split('@@@')
79
+ if _file
80
+ _file = File.expand_path( _file , _dir )
81
+ else
82
+ _file = Tk.getOpenFile('initialdir'=>_dir)
83
+ end
84
+ if _file
85
+ EditorContract.instance.open_file(self,'file'=>_file)
86
+ end
87
+ }
88
+ _background = conf('color.background')
89
+ _foreground = conf('color.foreground')
90
+ @font = conf('font')
91
+ @font_b = conf('font.bold')
92
+
93
+ @htree = Tk::BWidget::Tree.new(self.frame){
94
+ relief 'flat'
95
+ showlines false
96
+ deltay 18
97
+ background _background
98
+ crossfill _foreground
99
+ #dragenabled true
100
+ selectcommand proc{ do_select_item.call(self) }
101
+ place('relwidth' => 1,'relx' => 0,'x' => '0','y' => '0','relheight' => '1')
102
+ }
103
+ _scrollcommand = proc{|*args| @htree.yview(*args)}
104
+ _scrollbar = TkScrollbar.new(self.frame){|s|
105
+ width 8
106
+ command _scrollcommand
107
+ }.pack('side'=>'right', 'fill'=>'y')
108
+ @htree.yscrollcommand proc{|first,last| _scrollbar.set(first,last)}
109
+
110
+ self.build_tree
111
+ end
112
+
113
+ def after_build
114
+ ArcadiaContractListener.new(self, EditorContract, :do_editor_event)
115
+ end
116
+
117
+ def history_file
118
+ if !defined?(@arcadia_history_file)
119
+ @arcadia_history_file = @arcadia.local_dir+'/'+conf('file.name')
120
+ end
121
+ return @arcadia_history_file
122
+ end
123
+
124
+ def do_editor_event(_event)
125
+ case _event.signature
126
+ when EditorContract::FILE_AFTER_OPEN
127
+ if _event.context.file
128
+ self.add2history(_event.context.file)
129
+ add_to_tree(_event.context.file)
130
+ end
131
+ when EditorContract::FILE_AFTER_CLOSE
132
+ if _event.context.file
133
+ end
134
+ end
135
+ end
136
+
137
+ def root
138
+ if !defined?(@root)
139
+ @root = TreeNode.new(nil, 'KRoot'){|_node|
140
+ _node.rif= 'root'
141
+ _node.label=''
142
+ }
143
+ end
144
+ return @root
145
+ end
146
+
147
+ def build_tree
148
+ file_dir = Hash.new
149
+ nodes = Array.new
150
+ if File.exist?(history_file)
151
+ f = File::open(history_file,'r')
152
+ f_open = $arcadia['pers']['editor.files.open'].split("|") if $arcadia['pers']['editor.files.open']
153
+ begin
154
+ _lines = f.readlines.collect!{| line | line.chomp+"\n" }.to_s
155
+ _lines.sort.each{|_line|
156
+ _file = _line.split(';')[0]
157
+ if FileTest::exist?(_file)
158
+ dir,fil =File.split(File.expand_path(_file))
159
+ file_dir[dir] = Array.new if file_dir[dir] == nil
160
+ file_dir[dir] << fil if !file_dir[dir].include?(fil)
161
+ end
162
+ }
163
+ ensure
164
+ f.close unless f.nil?
165
+ end
166
+ end
167
+
168
+ file_dir.keys.sort.each{|_dir|
169
+ node = root.dir(_dir)
170
+ file_dir[_dir].each{|file|
171
+ TreeNode.new(node, 'KFile'){|_node|
172
+ _node.rif= _dir+'@@@'+file
173
+ _node.label=file
174
+ }
175
+ }
176
+ }
177
+
178
+ @image_kdir = TkPhotoImage.new('dat' => BOOK_GIF)
179
+ @image_kfile_rb = TkPhotoImage.new('dat' => RUBY_DOCUMENT_GIF)
180
+ @image_kfile = TkPhotoImage.new('dat' => DOCUMENT_GIF)
181
+
182
+ build_tree_from_node(root)
183
+ end
184
+
185
+ def add_to_tree(_file)
186
+ _d, _f = File.split(File.expand_path(_file))
187
+ _foreground = conf('color.foreground')
188
+ node = root.dir(_d)
189
+ if !@htree.exist?(node.rif)
190
+ @htree.insert('end', 'root' ,node.rif, {
191
+ 'text' => _d ,
192
+ 'helptext' => _d,
193
+ 'deltax'=>-1,
194
+ 'fill' => _foreground,
195
+ 'font'=>@font,
196
+ 'image'=> image('KDir')
197
+ }
198
+ )
199
+ end
200
+ _file_node_rif = _d+'@@@'+_f
201
+ if !@htree.exist?(_file_node_rif)
202
+ @htree.insert('end', node.rif ,_file_node_rif, {
203
+ 'text' => _f ,
204
+ 'helptext' => _f,
205
+ 'deltax'=>-1,
206
+ 'fill' => _foreground,
207
+ 'font'=>@font_b,
208
+ 'image'=> image('KFile',_f)
209
+ }
210
+ )
211
+ end
212
+
213
+ end
214
+
215
+ def image(_kind, _label='.rb')
216
+ if _kind == 'KDir'
217
+ return @image_kdir
218
+ elsif _kind == 'KFile' && _label.include?('.rb')
219
+ return @image_kfile_rb
220
+ else
221
+ return @image_kfile
222
+ end
223
+ end
224
+
225
+ def build_tree_from_node(_node)
226
+ _foreground = conf('color.foreground')
227
+ _sorted_sons = _node.sons.sort
228
+ for inode in 0.._sorted_sons.length - 1
229
+ _son = _sorted_sons[inode]
230
+ @htree.insert('end', _son.parent.rif ,_son.rif, {
231
+ 'text' => _son.label ,
232
+ 'fill' => _foreground,
233
+ 'helptext' => _son.helptext,
234
+ 'deltax'=>-1,
235
+ 'font'=>@font,
236
+ 'image'=> image(_son.kind, _son.label)
237
+ }
238
+ )
239
+ build_tree_from_node(_son)
240
+ end
241
+ end
242
+
243
+
244
+ def add2history(_filename, _text_index='1.0')
245
+ if _filename
246
+ _filename = _filename.downcase.sub(Dir::pwd.downcase+'/',"")
247
+ _filename = File.expand_path(_filename)
248
+ _filename_index = _filename+";"+_text_index
249
+
250
+ if File.exist?(history_file)
251
+ f = File::open(history_file,'r')
252
+ begin
253
+ _lines = f.readlines.collect!{| line | line.chomp}
254
+ ensure
255
+ f.close unless f.nil?
256
+ end
257
+ f = File.new(history_file, "w")
258
+ begin
259
+ if f
260
+ _l= conf('length').to_i
261
+ f.syswrite(_filename_index+"\n")
262
+ _lines[0.._l-1].each{|_line|
263
+ _lfile = _line.split(';')
264
+ if _lfile
265
+ f.syswrite(_line+"\n") if (_lfile[0] != _filename)&&(_line.length > 0)
266
+ end
267
+ }
268
+ end
269
+ ensure
270
+ f.close unless f.nil?
271
+ end
272
+ else
273
+ dir,fil =File.split(File.expand_path(history_file))
274
+ if !File.exist?(dir)
275
+ Dir.mkdir(dir)
276
+ end
277
+ f = File.new(history_file, "w+")
278
+ begin
279
+ f.syswrite(_filename+"\n") if f
280
+ ensure
281
+ f.close unless f.nil?
282
+ end
283
+ end
284
+ end
285
+ end
286
+ end