arcadia 0.1.1 → 0.1.2

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.
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