arcadia 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. data/README +8 -10
  2. data/bin/arcadia +13 -13
  3. data/bin/arcadia.bat +0 -0
  4. data/conf/arcadia.conf +35 -18
  5. data/conf/arcadia.init.rb +0 -0
  6. data/conf/arcadia.res.rb +10 -0
  7. data/ext/ae-breakpoints/ae-breakpoints.conf +0 -0
  8. data/ext/ae-breakpoints/ae-breakpoints.rb +368 -349
  9. data/ext/ae-editor/ae-editor.conf +2 -2
  10. data/ext/ae-editor/ae-editor.rb +1248 -445
  11. data/ext/ae-editor/langs/conf.lang +0 -0
  12. data/ext/ae-editor/langs/lang.lang.bind +0 -0
  13. data/ext/ae-editor/langs/rb.lang +0 -0
  14. data/ext/ae-editor/langs/rbw.lang.bind +0 -0
  15. data/ext/ae-file-history/ae-file-history.conf +1 -1
  16. data/ext/ae-file-history/ae-file-history.rb +23 -17
  17. data/ext/ae-output/ae-output.conf +0 -0
  18. data/ext/ae-output/ae-output.rb +262 -200
  19. data/ext/ae-rad/ae-rad-inspector.rb +34 -26
  20. data/ext/ae-rad/ae-rad-libs.rb +0 -0
  21. data/ext/ae-rad/ae-rad-palette.rb +0 -0
  22. data/ext/ae-rad/ae-rad.conf +0 -0
  23. data/ext/ae-rad/ae-rad.rb +0 -0
  24. data/ext/ae-rad/lib/tk/al-tk.rb +6 -2
  25. data/ext/ae-rad/lib/tk/al-tk.res.rb +0 -0
  26. data/ext/ae-rad/lib/tk/al-tkarcadia.rb +0 -0
  27. data/ext/ae-rad/lib/tk/al-tkcustom.rb +0 -0
  28. data/ext/ae-rad/lib/tkext/al-bwidget.rb +0 -0
  29. data/ext/ae-rad/lib/tkext/al-iwidgets.rb +0 -0
  30. data/ext/ae-rad/lib/tkext/al-tile.rb +0 -0
  31. data/ext/ae-rad/lib/tkext/al-tktable.rb +0 -0
  32. data/ext/ae-ruby-debug/ae-ruby-debug.conf +0 -0
  33. data/ext/ae-ruby-debug/ae-ruby-debug.rb +1 -0
  34. data/ext/ae-search-in-files/ae-search-in-files.conf +0 -0
  35. data/ext/ae-search-in-files/ae-search-in-files.rb +14 -10
  36. data/ext/ae-shell/ae-shell.conf +0 -0
  37. data/ext/ae-shell/ae-shell.rb +1 -1
  38. data/ext/ae-shell/sh.rb +0 -0
  39. data/lib/a-commons.rb +5 -1
  40. data/lib/a-contracts.rb +1 -0
  41. data/lib/a-core.rb +40 -9
  42. data/lib/a-tkcommons.rb +229 -1
  43. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +0 -0
  44. data/tcl/BWidget-1.8.0/BWman/BWidget.html +0 -0
  45. data/tcl/BWidget-1.8.0/BWman/Button.html +0 -0
  46. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +0 -0
  47. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +0 -0
  48. data/tcl/BWidget-1.8.0/BWman/Dialog.html +0 -0
  49. data/tcl/BWidget-1.8.0/BWman/DragSite.html +0 -0
  50. data/tcl/BWidget-1.8.0/BWman/DropSite.html +0 -0
  51. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +0 -0
  52. data/tcl/BWidget-1.8.0/BWman/Entry.html +0 -0
  53. data/tcl/BWidget-1.8.0/BWman/Label.html +0 -0
  54. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +0 -0
  55. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +0 -0
  56. data/tcl/BWidget-1.8.0/BWman/ListBox.html +0 -0
  57. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +0 -0
  58. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +0 -0
  59. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +0 -0
  60. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +0 -0
  61. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +0 -0
  62. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +0 -0
  63. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +0 -0
  64. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +0 -0
  65. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +0 -0
  66. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +0 -0
  67. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +0 -0
  68. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +0 -0
  69. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +0 -0
  70. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +0 -0
  71. data/tcl/BWidget-1.8.0/BWman/Separator.html +0 -0
  72. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +0 -0
  73. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +0 -0
  74. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +0 -0
  75. data/tcl/BWidget-1.8.0/BWman/Tree.html +0 -0
  76. data/tcl/BWidget-1.8.0/BWman/Widget.html +0 -0
  77. data/tcl/BWidget-1.8.0/BWman/contents.html +0 -0
  78. data/tcl/BWidget-1.8.0/BWman/index.html +0 -0
  79. data/tcl/BWidget-1.8.0/BWman/navtree.html +0 -0
  80. data/tcl/BWidget-1.8.0/BWman/options.htm +0 -0
  81. data/tcl/BWidget-1.8.0/CHANGES.txt +0 -0
  82. data/tcl/BWidget-1.8.0/ChangeLog +0 -0
  83. data/tcl/BWidget-1.8.0/LICENSE.txt +0 -0
  84. data/tcl/BWidget-1.8.0/README.txt +0 -0
  85. data/tcl/BWidget-1.8.0/arrow.tcl +0 -0
  86. data/tcl/BWidget-1.8.0/bitmap.tcl +0 -0
  87. data/tcl/BWidget-1.8.0/button.tcl +0 -0
  88. data/tcl/BWidget-1.8.0/buttonbox.tcl +0 -0
  89. data/tcl/BWidget-1.8.0/color.tcl +0 -0
  90. data/tcl/BWidget-1.8.0/combobox.tcl +0 -0
  91. data/tcl/BWidget-1.8.0/demo/basic.tcl +0 -0
  92. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +0 -0
  93. data/tcl/BWidget-1.8.0/demo/demo.tcl +0 -0
  94. data/tcl/BWidget-1.8.0/demo/dnd.tcl +0 -0
  95. data/tcl/BWidget-1.8.0/demo/manager.tcl +0 -0
  96. data/tcl/BWidget-1.8.0/demo/select.tcl +0 -0
  97. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +0 -0
  98. data/tcl/BWidget-1.8.0/demo/tree.tcl +0 -0
  99. data/tcl/BWidget-1.8.0/demo/x1.xbm +0 -0
  100. data/tcl/BWidget-1.8.0/dialog.tcl +0 -0
  101. data/tcl/BWidget-1.8.0/dragsite.tcl +0 -0
  102. data/tcl/BWidget-1.8.0/dropsite.tcl +0 -0
  103. data/tcl/BWidget-1.8.0/dynhelp.tcl +0 -0
  104. data/tcl/BWidget-1.8.0/entry.tcl +0 -0
  105. data/tcl/BWidget-1.8.0/font.tcl +0 -0
  106. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  107. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  108. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  109. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  110. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  111. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  112. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  113. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  114. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  115. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  117. data/tcl/BWidget-1.8.0/images/minus.xbm +0 -0
  118. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/opcopy.xbm +0 -0
  120. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  121. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/oplink.xbm +0 -0
  123. data/tcl/BWidget-1.8.0/images/opmove.xbm +0 -0
  124. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  126. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  127. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/plus.xbm +0 -0
  129. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  131. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  132. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  133. data/tcl/BWidget-1.8.0/images/target.xbm +0 -0
  134. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  135. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  136. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  137. data/tcl/BWidget-1.8.0/init.tcl +0 -0
  138. data/tcl/BWidget-1.8.0/label.tcl +0 -0
  139. data/tcl/BWidget-1.8.0/labelentry.tcl +0 -0
  140. data/tcl/BWidget-1.8.0/labelframe.tcl +0 -0
  141. data/tcl/BWidget-1.8.0/lang/da.rc +0 -0
  142. data/tcl/BWidget-1.8.0/lang/de.rc +0 -0
  143. data/tcl/BWidget-1.8.0/lang/en.rc +0 -0
  144. data/tcl/BWidget-1.8.0/lang/es.rc +0 -0
  145. data/tcl/BWidget-1.8.0/lang/fr.rc +0 -0
  146. data/tcl/BWidget-1.8.0/listbox.tcl +0 -0
  147. data/tcl/BWidget-1.8.0/mainframe.tcl +0 -0
  148. data/tcl/BWidget-1.8.0/messagedlg.tcl +0 -0
  149. data/tcl/BWidget-1.8.0/notebook.tcl +0 -0
  150. data/tcl/BWidget-1.8.0/pagesmgr.tcl +0 -0
  151. data/tcl/BWidget-1.8.0/panedw.tcl +0 -0
  152. data/tcl/BWidget-1.8.0/panelframe.tcl +0 -0
  153. data/tcl/BWidget-1.8.0/passwddlg.tcl +0 -0
  154. data/tcl/BWidget-1.8.0/pkgIndex.tcl +0 -0
  155. data/tcl/BWidget-1.8.0/progressbar.tcl +0 -0
  156. data/tcl/BWidget-1.8.0/progressdlg.tcl +0 -0
  157. data/tcl/BWidget-1.8.0/scrollframe.tcl +0 -0
  158. data/tcl/BWidget-1.8.0/scrollview.tcl +0 -0
  159. data/tcl/BWidget-1.8.0/scrollw.tcl +0 -0
  160. data/tcl/BWidget-1.8.0/separator.tcl +0 -0
  161. data/tcl/BWidget-1.8.0/spinbox.tcl +0 -0
  162. data/tcl/BWidget-1.8.0/statusbar.tcl +0 -0
  163. data/tcl/BWidget-1.8.0/tests/entry.test +0 -0
  164. data/tcl/BWidget-1.8.0/titleframe.tcl +0 -0
  165. data/tcl/BWidget-1.8.0/tree.tcl +0 -0
  166. data/tcl/BWidget-1.8.0/utils.tcl +0 -0
  167. data/tcl/BWidget-1.8.0/widget.tcl +0 -0
  168. data/tcl/BWidget-1.8.0/wizard.tcl +0 -0
  169. data/tcl/BWidget-1.8.0/xpm2image.tcl +0 -0
  170. metadata +2 -25
  171. data/ext/ae-complete-code/ae-complete-code.conf +0 -6
  172. data/ext/ae-complete-code/ae-complete-code.rb +0 -74
  173. data/ext/ae-doc-code/ae-doc-code.conf +0 -15
  174. data/ext/ae-doc-code/ae-doc-code.rb +0 -300
  175. data/ext/ae-event-log/ae-event-log.conf +0 -5
  176. data/ext/ae-event-log/ae-event-log.rb +0 -46
  177. data/ext/ae-flag/ae-flag.conf +0 -6
  178. data/ext/ae-flag/ae-flag.rb +0 -12
  179. data/ext/ae-output-event/ae-output-event.conf +0 -15
data/README CHANGED
@@ -1,27 +1,26 @@
1
1
  = Arcadia Ruby Ide
2
- version 0.4.0
2
+ version 0.5.0
3
3
 
4
4
  by Antonio Galeone
5
- on Jul 29, 2008
5
+ on Aug 31, 2008
6
6
 
7
7
 
8
8
  == About
9
9
 
10
- Arcadia is a Integrated Development Environment (IDE) for Ruby language
10
+ Arcadia is a Light Integrated Development Environment (IDE) for Ruby language
11
11
  written in Ruby using the classic tcl/tk GUI toolkit.
12
12
 
13
13
  Some of Arcadia ruby ide project features include:
14
14
  * Editor with source browsing, syntax highlighting, code completion
15
15
  * Debugging support
16
- * Contextual ruby documentation
17
16
  * Working on any platform where ruby and tcl-tk work.
18
17
  * Highly extensibility architecture.
19
18
 
20
19
  == In this release
21
- * [fix] bug-fixing
22
- * [mod] Improved file-history
20
+ * [fix] fixed bug [#21385] Output window doesn't allow horizontal scrolling
21
+ * [fix] fixed bug [#21384] Hangs attempting intellisense
22
+ * [mod] rewritten intellisense logic
23
23
  * [mod] Improved editor
24
- * [mod] Improved debugger
25
24
 
26
25
  == How to install
27
26
  There are two way:
@@ -74,7 +73,6 @@ These are same editor short-cut:
74
73
  - Ctrl-shift-c => comment/uncomment the selected code block
75
74
  - F5 => execute the file
76
75
  - F3 => find/ find next
77
- - F1 => contextual ruby documentation (called from editor or from code completion item)
78
76
 
79
77
  - Double-Click on line number set or unset a debug breakpoint
80
78
 
@@ -112,8 +110,8 @@ under ~/.arcadia directory. The format of property definition are:
112
110
  == Requirement
113
111
  I include into distribution also the BWidget lib (under tcl directory) so
114
112
  are require realy only the standard tcl tk lib (tested on tcl tk 8.4 & tcl tk 8.5).
115
- I have tested arcadia with ruby 1.8.4, 1.8.5, 1.8.6 on
116
- * FreeBsd6.x,
113
+ I have tested arcadia with ruby 1.8.4, 1.8.5, 1.8.6, 1.8.7 on
114
+ * FreeBsd6.x, FreeBsd7.x,
117
115
  * Vector linux 5.*,
118
116
  * Archlinux
119
117
  * Windows 2000/XP,
@@ -1,13 +1,13 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # arcadia - Arcadia Ruby ide
4
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
5
- #
6
-
7
- $pwd = Dir.pwd
8
- Dir.chdir("#{File.dirname(__FILE__)}/..")
9
- if FileTest.exist?('conf/arcadia.init.rb')
10
- require 'conf/arcadia.init'
11
- end
12
- require "lib/a-core"
13
- Arcadia.new.run
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # arcadia - Arcadia Ruby ide
4
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
5
+ #
6
+
7
+ $pwd = Dir.pwd
8
+ Dir.chdir("#{File.dirname(__FILE__)}/..")
9
+ if FileTest.exist?('conf/arcadia.init.rb')
10
+ require 'conf/arcadia.init'
11
+ end
12
+ require "lib/a-core"
13
+ Arcadia.new.run
File without changes
@@ -10,10 +10,16 @@ arm::layout.splitter.length=10
10
10
  #layout.split=1,2
11
11
  #layout.split.1=0.0r70%
12
12
  #layout.split.2=0.0c20%
13
+
13
14
  layout.split=1,2
14
15
  layout.split.1=0.0c20%
15
16
  layout.split.2=0.1r70%
16
17
 
18
+ #layout.split=1,2,3
19
+ #layout.split.1=0.0c20%
20
+ #layout.split.2=0.0r30%
21
+ #layout.split.3=0.1r70%
22
+
17
23
  #:::::::::::::::: layout ::::::::::::::::::::::<end>
18
24
  #:::::::::::::::::::::::::::::::::::::::::::::::::<begin>
19
25
  font.h1=
@@ -52,6 +58,7 @@ scrollbar.background=>>>background
52
58
  scrollbar.highlightbackground=>>>background
53
59
  scrollbar.relief=flat
54
60
  scrollbar.borderwidth=1
61
+ scrollbar.elementborderwidth=1
55
62
 
56
63
  titlelabel.background=#303b50
57
64
  titlelabel.foreground=#e8e651
@@ -200,9 +207,9 @@ hightlight.16.relief=groove
200
207
 
201
208
  #:::::::::::::::::::::::::::::::::::::::::::::::::<end>
202
209
  #:::::::::::::::: toolbar ::::::::::::::::::::::<begin>
203
- user_toolbar.contexts=file,run
210
+ user_toolbar.contexts=file,run,debug
204
211
  #,sys
205
- user_toolbar.file=new,open,save
212
+ user_toolbar.file=new,open,save,find
206
213
  user_toolbar.file.new.name=new
207
214
  user_toolbar.file.new.hint=New file
208
215
  user_toolbar.file.new.image_data=PAGE_WHITE_ADD_GIF
@@ -218,7 +225,13 @@ user_toolbar.file.save.hint=Save current file
218
225
  user_toolbar.file.save.image_data=BACKUP_GIF
219
226
  user_toolbar.file.save.event_class=SaveBufferEvent
220
227
 
221
- user_toolbar.run=runcurr,runlast,debugcurr,debuglast,debugquit
228
+ user_toolbar.file.find.name=find
229
+ user_toolbar.file.find.hint=Search on current file
230
+ user_toolbar.file.find.image_data=LARGE_FIND_GIF
231
+ user_toolbar.file.find.event_class=SearchBufferEvent
232
+
233
+
234
+ user_toolbar.run=runcurr,runlast
222
235
 
223
236
  user_toolbar.run.runcurr.name=run_current
224
237
  user_toolbar.run.runcurr.hint=Run current
@@ -231,21 +244,25 @@ user_toolbar.run.runlast.image_data=RUN_LAST_GIF
231
244
  user_toolbar.run.runlast.event_class=RunRubyFileEvent
232
245
  user_toolbar.run.runlast.event_args={'file'=>"*LAST"}
233
246
 
234
- user_toolbar.run.debugcurr.name=debug
235
- user_toolbar.run.debugcurr.hint=Debug current
236
- user_toolbar.run.debugcurr.image_data=DEBUG_CURRENT_GIF
237
- user_toolbar.run.debugcurr.event_class=StartDebugEvent
238
-
239
- user_toolbar.run.debuglast.name=debug
240
- user_toolbar.run.debuglast.hint=Debug last
241
- user_toolbar.run.debuglast.image_data=DEBUG_LAST_GIF
242
- user_toolbar.run.debuglast.event_class=StartDebugEvent
243
- user_toolbar.run.debuglast.event_args={'file'=>"*LAST"}
244
-
245
- user_toolbar.run.debugquit.name=debugquit
246
- user_toolbar.run.debugquit.hint=Quit debug
247
- user_toolbar.run.debugquit.image_data=DEBUG_QUIT_GIF
248
- user_toolbar.run.debugquit.event_class=StopDebugEvent
247
+
248
+ user_toolbar.debug=debugcurr,debuglast,debugquit
249
+
250
+ user_toolbar.debug.debugcurr.name=debug
251
+ user_toolbar.debug.debugcurr.hint=Debug current
252
+ user_toolbar.debug.debugcurr.image_data=DEBUG_CURRENT_GIF
253
+ user_toolbar.debug.debugcurr.event_class=StartDebugEvent
254
+
255
+ user_toolbar.debug.debuglast.name=debug
256
+ user_toolbar.debug.debuglast.hint=Debug last
257
+ user_toolbar.debug.debuglast.image_data=DEBUG_LAST_GIF
258
+ user_toolbar.debug.debuglast.event_class=StartDebugEvent
259
+ user_toolbar.debug.debuglast.event_args={'file'=>"*LAST"}
260
+
261
+ user_toolbar.debug.debugquit.name=debugquit
262
+ user_toolbar.debug.debugquit.hint=Quit debug
263
+ user_toolbar.debug.debugquit.image_data=DEBUG_QUIT_GIF
264
+ user_toolbar.debug.debugquit.event_class=StopDebugEvent
265
+
249
266
 
250
267
  e.user_toolbar.contexts=sys
251
268
  e.user_toolbar.sys=exit
File without changes
@@ -1346,3 +1346,13 @@ ICON_FOLDER_OPEN_GIF=<<EOS
1346
1346
  R0lGODlhEAAQAIAAAGaZ/////yH5BAEAAAEALAAAAAAQABAAAAImjI+pq+DP
1347
1347
  wptgwXORi2kbCnpSSH2VdYlatanrCDen283khN0ZpxQAOw==
1348
1348
  EOS
1349
+
1350
+ LARGE_FIND_GIF=<<EOS
1351
+ R0lGODlhFwAUAMQQALa0tNra2kJCAZzO/m5uMLGtZWex+cXFxYC++sPDw8TE
1352
+ xNbo/05OTv/23Glpaf///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1353
+ AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAXABQAAAV4ICSOZGme
1354
+ aJo6bMuqpdPM9AuLMj07j6MqjCBDoXOhgIDAAjBkFU/AxWBgMCyGuobPxAAs
1355
+ vlID06U9MQIP8AJxzW5L50f6OwgwyG9SVz4fMN0nCQwLfAtACnhHXQEBTAQF
1356
+ gCgHQkMCjy55N5YFNymbnSgCAqCkpSghADs=
1357
+ EOS
1358
+
File without changes
@@ -1,349 +1,368 @@
1
- #
2
- # ae-breakpoints.rb - Arcadia Ruby ide
3
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
- #
5
-
6
- class Breakpoints < ArcadiaExt
7
- def on_before_build(_event)
8
- @ui_builded = false
9
- @breakpoints =Array.new
10
- Arcadia.attach_listener(self, DebugEvent)
11
- end
12
-
13
- def on_build(_event)
14
- load_persistent_breakpoints
15
- end
16
-
17
- def on_finalize(_event)
18
- _breakpoints = '';
19
- @breakpoints.each{|point|
20
- if point[:file] != nil
21
- _breakpoints=_breakpoints+'|' if _breakpoints.strip.length > 0
22
- _breakpoints=_breakpoints + "#{point[:file]}@@@#{point[:line]}@@@#{point[:active]}"
23
- # _file_node = file2node_name(point[:file])
24
- # _line_node = line2node_name(_file_node, point[:line])
25
- # _check = @tree_break.itemcget(_line_node, 'window')
26
- # if _check
27
- # _breakpoints="#{_breakpoints}@@@#{_check.cget('variable').value}"
28
- # end
29
- end
30
- }
31
- Arcadia.persistent('breakpoints', _breakpoints)
32
- end
33
-
34
- def load_persistent_breakpoints
35
- b = Arcadia.persistent('breakpoints')
36
- if b
37
- _files_list =b.split("|")
38
- _files_list.each do |value|
39
- _file,_line,_active = value.split('@@@')
40
- if _file && _line && _active
41
- Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'active'=>_active.to_i))
42
- end
43
- end
44
- end
45
- end
46
-
47
-
48
- def ensure_build_ui
49
- if !@ui_builded
50
- build_ui
51
- end
52
- end
53
-
54
- def build_ui
55
- do_select_item = proc{|_self|
56
- if _self.selection_get[0].length >0
57
- _selected = ""
58
- _self.selection_get[0].each{|_block|
59
- _selected = _selected + _block.to_s + "\s"
60
- }
61
- _selected = _selected.strip
62
- else
63
- _selected = _self.selection_get[0]
64
- end
65
- _node_name, _line = _selected.split('_')
66
- if _node_name && _line
67
- _file = _self.itemcget(_node_name, 'text')
68
- if _file
69
- Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line))
70
- end
71
- end
72
- #p "selected = #{_selected}"
73
- }
74
-
75
- @tree_break = Tk::BWidget::Tree.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
76
- #showlines true
77
- deltay 18
78
- padx 25
79
- selectcommand proc{ do_select_item.call(self) }
80
- }.place('relwidth' => 1,'relheight' => '1')
81
-
82
- build_popup
83
-
84
- @ui_builded = true
85
- end
86
-
87
-
88
- def unbuild_ui
89
- if @ui_builded
90
-
91
- @ui_builded = false
92
- end
93
- end
94
-
95
- def raise_clear_selected(_delete=false)
96
- _file, _line = get_tree_selection(@tree_break)
97
- if _file && _line
98
- Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'delete'=>_delete))
99
- elsif _file
100
- _node_name = file2node_name(_file)
101
- sons = @tree_break.nodes(_node_name)
102
- if sons
103
- sons.each{|son|
104
- _nil, _l = son.split('_')
105
- Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l, 'delete'=>_delete)) if _l
106
- }
107
- end
108
- end
109
- end
110
-
111
- def build_popup
112
- _pop_up = TkMenu.new(
113
- :parent=>@tree_break,
114
- :tearoff=>0,
115
- :title => 'Menu'
116
- )
117
- _pop_up.configure(Arcadia.style('menu'))
118
- _title_item = _pop_up.insert('end',
119
- :command,
120
- :label=>'...',
121
- :state=>'disabled',
122
- :background=>Arcadia.conf('titlelabel.background'),
123
- :hidemargin => true
124
- )
125
-
126
- _pop_up.insert('end',
127
- :command,
128
- :label=>'Clear breakpoint',
129
- :hidemargin => false,
130
- :command=> proc{raise_clear_selected}
131
- )
132
-
133
- _pop_up.insert('end',
134
- :command,
135
- :label=>'Delete breakpoint',
136
- :hidemargin => false,
137
- :command=> proc{raise_clear_selected(true)}
138
- )
139
-
140
-
141
- @tree_break.textbind_append("Button-3",
142
- proc{|*x|
143
- _x = TkWinfo.pointerx(@tree_break)
144
- _y = TkWinfo.pointery(@tree_break)
145
- _selected = @tree_break.selection_get[0]
146
- _file, _line = get_tree_selection(@tree_break)
147
- _label = _file
148
- if _line
149
- _label << " line: #{_line}"
150
- end
151
- _pop_up.entryconfigure(0,'label'=>_label)
152
-
153
- _pop_up.popup(_x,_y)
154
- })
155
- end
156
-
157
- def get_tree_selection(_tree)
158
- _ret = Array.new
159
- _selected = _tree.selection_get[0]
160
- _node_name, _line = _selected.split('_')
161
- _ret << _tree.itemcget(_node_name, 'text')
162
- _ret << _line if _line
163
- _ret
164
- end
165
-
166
-
167
- def on_debug(_event)
168
- case _event
169
- when SetBreakpointEvent
170
- ensure_build_ui
171
- @breakpoints << {:file=>_event.file,:line=>_event.row, :active=>_event.active}
172
- self.breakpoint_add(File.expand_path(_event.file), _event.row, _event.active==1)
173
- when UnsetBreakpointEvent
174
- if @ui_builded
175
- if _event.delete
176
- @breakpoints.delete_if{|b| (b[:file]==_event.file && b[:line]==_event.row)}
177
- else
178
- @breakpoints.collect! {|b|
179
- if b[:file]==_event.file && b[:line]==_event.row
180
- b[:active]=0
181
- end
182
- b
183
- }
184
- end
185
- self.breakpoint_del(File.expand_path(_event.file), _event.row, _event.delete)
186
- #self.breakpoint_del(File.expand_path(_event.file), _event.row, _event.sender != self)
187
- end
188
- end
189
- end
190
-
191
- def on_debug_step_info(_event)
192
- #Arcadia.console(self, :msg=> "ae-breakpoints -> DebugStepInfoEvent")
193
- if @ui_builded
194
- self.breakpoint_select(_event.file, _event.row)
195
- end
196
- end
197
-
198
- def file2node_name(_file)
199
- _file = File.expand_path(_file)
200
- #_file = File.basename(_file)
201
- _s = ""
202
- _file.gsub("/",_s).gsub(".",_s).gsub(":",_s).gsub("\\",_s).gsub("-",_s)
203
- end
204
-
205
- def new_check_button(_node_name, _value=1)
206
- _command = proc {|_checkbutton|
207
- _file_node_name, _line = _node_name.split('_')
208
- _file = @tree_break.itemcget(_file_node_name, 'text')
209
- if _checkbutton.cget('variable').value.to_i==0
210
- if _file && _line
211
- Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line))
212
- elsif _file
213
- sons = @tree_break.nodes(_node_name)
214
- if sons
215
- sons.each{|son|
216
- _nil, _l = son.split('_')
217
- Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l)) if _l
218
- }
219
- end
220
- end
221
- else
222
- if _file && _line
223
- Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'active'=>1))
224
- elsif _file
225
- sons = @tree_break.nodes(_node_name)
226
- if sons
227
- sons.each{|son|
228
- _nil, _l = son.split('_')
229
- Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l, 'active'=>1)) if _l
230
- }
231
- end
232
- end
233
-
234
- end
235
- }
236
- TkCheckButton.new(@tree_break, Arcadia.style('checkbox')){
237
- #text _label
238
- indicatoron true
239
- padx 0
240
- pady 0
241
- variable TkVariable.new(_value)
242
- background Arcadia.style('treepanel')['background']
243
- borderwidth 0
244
- command proc{_command.call(self)}
245
- relief 'flat'
246
- }
247
- # _item_on_img = TkPhotoImage.new('dat' => ON_GIF)
248
- # @item_off_img = TkPhotoImage.new('dat' => OFF_GIF)
249
- # @b_item_onoff = TkButton.new(@tree_break, Arcadia.style('button')){
250
- # image _item_on_img
251
- # anchor 'nw'
252
- # }.bind("1",proc{ })
253
- end
254
-
255
- def line2node_name(_parent, _line)
256
- "#{_parent}_#{_line.to_s}"
257
- end
258
-
259
- def breakpoint_add(_file,_line, _active=true)
260
- _file_node = file2node_name(_file)
261
- _line_node = line2node_name(_file_node, _line)
262
- (_active)?_check_value=1 : _check_value=0
263
- if !@tree_break.exist?(_file_node)
264
- @tree_break.insert('end', 'root' ,_file_node, {
265
- 'open'=>true,
266
- 'anchor'=>'w',
267
- 'text' => _file,
268
- 'deltax'=>-1,
269
- 'window' => new_check_button(_file_node, _check_value)
270
- }.update(Arcadia.style('treeitem')))
271
- elsif _active
272
- _check = @tree_break.itemcget(_file_node, 'window')
273
- _check.cget('variable').value=1
274
- end
275
-
276
- if !@tree_break.exist?(_line_node)
277
- @tree_break.insert('end', _file_node ,_line_node, {
278
- 'open'=>true,
279
- 'anchor'=>'w',
280
- 'text' => "line: #{_line}",
281
- 'deltax'=>-1,
282
- 'window' => new_check_button(_line_node, _check_value)
283
- }.update(Arcadia.style('treeitem')))
284
- @tree_break.reorder(_file_node,@tree_break.nodes(_file_node).sort)
285
- elsif _active
286
- _check = @tree_break.itemcget(_line_node, 'window')
287
- _check.cget('variable').value=1
288
- end
289
- end
290
-
291
- def breakpoint_del(_file,_line, _delete=false)
292
- _file_node = file2node_name(_file)
293
- _line_node = line2node_name(_file_node, _line)
294
- if @tree_break.exist?(_line_node)
295
- begin
296
- if _delete
297
- _sc = @tree_break.cget('selectcommand')
298
- @tree_break.configure('selectcommand'=>nil)
299
- @tree_break.delete(_line_node)
300
- else
301
- _check = @tree_break.itemcget(_line_node, 'window')
302
- _check.cget('variable').value=0
303
- end
304
- _bro = @tree_break.nodes(_file_node)
305
- if _bro.nil? || _bro.length == 0
306
- if _delete
307
- @tree_break.delete(_file_node)
308
- else
309
- _check = @tree_break.itemcget(_file_node, 'window')
310
- _check.cget('variable').value=0
311
- end
312
- elsif _bro.length > 0 && !_delete
313
- is_checked = false
314
- _bro.each{|n|
315
- _check = @tree_break.itemcget(n, 'window')
316
- v = _check.cget('variable').value
317
- is_checked = is_checked || v.to_i==1
318
- }
319
- if !is_checked
320
- _check = @tree_break.itemcget(_file_node, 'window')
321
- _check.cget('variable').value=0
322
- end
323
- end
324
- ensure
325
- @tree_break.configure('selectcommand'=>_sc) if _delete
326
- end
327
-
328
- end
329
- end
330
-
331
- def breakpoint_select(_file, _line)
332
- _file_node = file2node_name(_file)
333
- _line_node = line2node_name(_file_node, _line)
334
- @tree_break.selection_clear
335
- #p "line node = #{_line_node}"
336
- if @tree_break.exist?(_line_node)
337
- @tree_break.open_tree(_file_node, false)
338
- @tree_break.selection_add(_line_node)
339
- @tree_break.see(_line_node)
340
- end
341
- end
342
-
343
-
344
- def breakpoint_list_free
345
- @tree_break.delete(@tree_break.nodes('root'))
346
- end
347
-
348
-
349
- end
1
+ #
2
+ # ae-breakpoints.rb - Arcadia Ruby ide
3
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
+ #
5
+
6
+ class Breakpoints < ArcadiaExt
7
+ def on_before_build(_event)
8
+ @ui_builded = false
9
+ @breakpoints =Array.new
10
+ Arcadia.attach_listener(self, DebugEvent)
11
+ end
12
+
13
+ def on_build(_event)
14
+ load_persistent_breakpoints
15
+ end
16
+
17
+ def on_finalize(_event)
18
+ _breakpoints = '';
19
+ @breakpoints.each{|point|
20
+ if point[:file] != nil
21
+ _breakpoints=_breakpoints+'|' if _breakpoints.strip.length > 0
22
+ _breakpoints=_breakpoints + "#{point[:file]}@@@#{point[:line]}@@@#{point[:active]}"
23
+ # _file_node = file2node_name(point[:file])
24
+ # _line_node = line2node_name(_file_node, point[:line])
25
+ # _check = @tree_break.itemcget(_line_node, 'window')
26
+ # if _check
27
+ # _breakpoints="#{_breakpoints}@@@#{_check.cget('variable').value}"
28
+ # end
29
+ end
30
+ }
31
+ Arcadia.persistent('breakpoints', _breakpoints)
32
+ end
33
+
34
+ def load_persistent_breakpoints
35
+ b = Arcadia.persistent('breakpoints')
36
+ if b
37
+ _files_list =b.split("|")
38
+ _files_list.each do |value|
39
+ _file,_line,_active = value.split('@@@')
40
+ if _file && _line && _active
41
+ Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'active'=>_active.to_i))
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+
48
+ def ensure_build_ui
49
+ if !@ui_builded
50
+ build_ui
51
+ end
52
+ end
53
+
54
+ def build_ui
55
+ # do_select_item = proc{|_self|
56
+ # if _self.selection_get[0].length >0
57
+ # _selected = ""
58
+ # _self.selection_get[0].each{|_block|
59
+ # _selected = _selected + _block.to_s + "\s"
60
+ # }
61
+ # _selected = _selected.strip
62
+ # else
63
+ # _selected = _self.selection_get[0]
64
+ # end
65
+ # _node_name, _line = _selected.split('_')
66
+ # if _node_name && _line
67
+ # _file = _self.itemcget(_node_name, 'text')
68
+ # if _file
69
+ # Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line))
70
+ # end
71
+ # end
72
+ # }
73
+
74
+ @tree_break = Tk::BWidget::Tree.new(self.frame.hinner_frame, Arcadia.style('treepanel')){
75
+ #showlines true
76
+ deltay 18
77
+ padx 25
78
+ #selectcommand proc{ do_select_item.call(self) }
79
+ }.place('relwidth' => 1,'relheight' => '1')
80
+
81
+ build_popup
82
+
83
+ @ui_builded = true
84
+ end
85
+
86
+
87
+ def unbuild_ui
88
+ if @ui_builded
89
+
90
+ @ui_builded = false
91
+ end
92
+ end
93
+
94
+ def goto_select_item
95
+ _file, _line = get_tree_selection(@tree_break)
96
+ if _file && _line
97
+ Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line))
98
+ elsif _file
99
+ Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>0))
100
+ end
101
+ end
102
+
103
+
104
+
105
+ def raise_clear_selected(_delete=false)
106
+ _file, _line = get_tree_selection(@tree_break)
107
+ if _file && _line
108
+ Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'delete'=>_delete))
109
+ elsif _file
110
+ _node_name = file2node_name(_file)
111
+ sons = @tree_break.nodes(_node_name)
112
+ if sons
113
+ sons.each{|son|
114
+ _nil, _l = son.split('_')
115
+ Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l, 'delete'=>_delete)) if _l
116
+ }
117
+ end
118
+ end
119
+ end
120
+
121
+ def build_popup
122
+ _pop_up = TkMenu.new(
123
+ :parent=>@tree_break,
124
+ :tearoff=>0,
125
+ :title => 'Menu'
126
+ )
127
+ _pop_up.configure(Arcadia.style('menu'))
128
+ _title_item = _pop_up.insert('end',
129
+ :command,
130
+ :label=>'...',
131
+ :state=>'disabled',
132
+ :background=>Arcadia.conf('titlelabel.background'),
133
+ :hidemargin => true
134
+ )
135
+
136
+ _pop_up.insert('end',
137
+ :command,
138
+ :label=>'Clear breakpoint',
139
+ :hidemargin => false,
140
+ :command=> proc{raise_clear_selected}
141
+ )
142
+
143
+ _pop_up.insert('end',
144
+ :command,
145
+ :label=>'Delete breakpoint',
146
+ :hidemargin => false,
147
+ :command=> proc{raise_clear_selected(true)}
148
+ )
149
+
150
+ _pop_up.insert('end',
151
+ :command,
152
+ :label=>'Goto breakpoint',
153
+ :hidemargin => false,
154
+ :command=> proc{goto_select_item}
155
+ )
156
+
157
+
158
+ @tree_break.textbind_append("Button-3",
159
+ proc{|*x|
160
+ _x = TkWinfo.pointerx(@tree_break)
161
+ _y = TkWinfo.pointery(@tree_break)
162
+ _selected = @tree_break.selection_get[0]
163
+ _file, _line = get_tree_selection(@tree_break)
164
+ _label = _file
165
+ if _line
166
+ _label << " line: #{_line}"
167
+ end
168
+ _pop_up.entryconfigure(0,'label'=>_label)
169
+
170
+ _pop_up.popup(_x,_y)
171
+ })
172
+ end
173
+
174
+ def get_tree_selection(_tree)
175
+ _ret = Array.new
176
+ _selected = _tree.selection_get[0]
177
+ if _selected
178
+ _node_name, _line = _selected.split('_')
179
+ _ret << _tree.itemcget(_node_name, 'text')
180
+ _ret << _line if _line
181
+ end
182
+ _ret
183
+ end
184
+
185
+
186
+ def on_debug(_event)
187
+ case _event
188
+ when SetBreakpointEvent
189
+ ensure_build_ui
190
+ @breakpoints << {:file=>_event.file,:line=>_event.row, :active=>_event.active}
191
+ self.breakpoint_add(File.expand_path(_event.file), _event.row, _event.active==1)
192
+ when UnsetBreakpointEvent
193
+ if @ui_builded
194
+ if _event.delete
195
+ @breakpoints.delete_if{|b| (b[:file]==_event.file && b[:line]==_event.row)}
196
+ else
197
+ @breakpoints.collect! {|b|
198
+ if b[:file]==_event.file && b[:line]==_event.row
199
+ b[:active]=0
200
+ end
201
+ b
202
+ }
203
+ end
204
+ self.breakpoint_del(File.expand_path(_event.file), _event.row, _event.delete)
205
+ #self.breakpoint_del(File.expand_path(_event.file), _event.row, _event.sender != self)
206
+ end
207
+ end
208
+ end
209
+
210
+ def on_debug_step_info(_event)
211
+ #Arcadia.console(self, :msg=> "ae-breakpoints -> DebugStepInfoEvent")
212
+ if @ui_builded
213
+ self.breakpoint_select(_event.file, _event.row)
214
+ end
215
+ end
216
+
217
+ def file2node_name(_file)
218
+ _file = File.expand_path(_file)
219
+ #_file = File.basename(_file)
220
+ _s = ""
221
+ _file.gsub("/",_s).gsub(".",_s).gsub(":",_s).gsub("\\",_s).gsub("-",_s)
222
+ end
223
+
224
+ def new_check_button(_node_name, _value=1)
225
+ _command = proc {|_checkbutton|
226
+ _file_node_name, _line = _node_name.split('_')
227
+ _file = @tree_break.itemcget(_file_node_name, 'text')
228
+ if _checkbutton.cget('variable').value.to_i==0
229
+ if _file && _line
230
+ Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line))
231
+ elsif _file
232
+ sons = @tree_break.nodes(_node_name)
233
+ if sons
234
+ sons.each{|son|
235
+ _nil, _l = son.split('_')
236
+ Arcadia.process_event(UnsetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l)) if _l
237
+ }
238
+ end
239
+ end
240
+ else
241
+ if _file && _line
242
+ Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_line, 'active'=>1))
243
+ elsif _file
244
+ sons = @tree_break.nodes(_node_name)
245
+ if sons
246
+ sons.each{|son|
247
+ _nil, _l = son.split('_')
248
+ Arcadia.process_event(SetBreakpointEvent.new(self, 'file'=>_file, 'row'=>_l, 'active'=>1)) if _l
249
+ }
250
+ end
251
+ end
252
+
253
+ end
254
+ }
255
+ TkCheckButton.new(@tree_break, Arcadia.style('checkbox')){
256
+ #text _label
257
+ indicatoron true
258
+ padx 0
259
+ pady 0
260
+ variable TkVariable.new(_value)
261
+ background Arcadia.style('treepanel')['background']
262
+ borderwidth 0
263
+ command proc{_command.call(self)}
264
+ relief 'flat'
265
+ }
266
+ # _item_on_img = TkPhotoImage.new('dat' => ON_GIF)
267
+ # @item_off_img = TkPhotoImage.new('dat' => OFF_GIF)
268
+ # @b_item_onoff = TkButton.new(@tree_break, Arcadia.style('button')){
269
+ # image _item_on_img
270
+ # anchor 'nw'
271
+ # }.bind("1",proc{ })
272
+ end
273
+
274
+ def line2node_name(_parent, _line)
275
+ "#{_parent}_#{_line.to_s}"
276
+ end
277
+
278
+ def breakpoint_add(_file,_line, _active=true)
279
+ _file_node = file2node_name(_file)
280
+ _line_node = line2node_name(_file_node, _line)
281
+ (_active)?_check_value=1 : _check_value=0
282
+ if !@tree_break.exist?(_file_node)
283
+ @tree_break.insert('end', 'root' ,_file_node, {
284
+ 'open'=>true,
285
+ 'anchor'=>'w',
286
+ 'text' => _file,
287
+ 'deltax'=>-1,
288
+ 'window' => new_check_button(_file_node, _check_value)
289
+ }.update(Arcadia.style('treeitem')))
290
+ elsif _active
291
+ _check = @tree_break.itemcget(_file_node, 'window')
292
+ _check.cget('variable').value=1
293
+ end
294
+
295
+ if !@tree_break.exist?(_line_node)
296
+ @tree_break.insert('end', _file_node ,_line_node, {
297
+ 'open'=>true,
298
+ 'anchor'=>'w',
299
+ 'text' => "line: #{_line}",
300
+ 'deltax'=>-1,
301
+ 'window' => new_check_button(_line_node, _check_value)
302
+ }.update(Arcadia.style('treeitem')))
303
+ @tree_break.reorder(_file_node,@tree_break.nodes(_file_node).sort)
304
+ elsif _active
305
+ _check = @tree_break.itemcget(_line_node, 'window')
306
+ _check.cget('variable').value=1
307
+ end
308
+ end
309
+
310
+ def breakpoint_del(_file,_line, _delete=false)
311
+ _file_node = file2node_name(_file)
312
+ _line_node = line2node_name(_file_node, _line)
313
+ if @tree_break.exist?(_line_node)
314
+ begin
315
+ if _delete
316
+ _sc = @tree_break.cget('selectcommand')
317
+ @tree_break.configure('selectcommand'=>nil)
318
+ @tree_break.delete(_line_node)
319
+ else
320
+ _check = @tree_break.itemcget(_line_node, 'window')
321
+ _check.cget('variable').value=0
322
+ end
323
+ _bro = @tree_break.nodes(_file_node)
324
+ if _bro.nil? || _bro.length == 0
325
+ if _delete
326
+ @tree_break.delete(_file_node)
327
+ else
328
+ _check = @tree_break.itemcget(_file_node, 'window')
329
+ _check.cget('variable').value=0
330
+ end
331
+ elsif _bro.length > 0 && !_delete
332
+ is_checked = false
333
+ _bro.each{|n|
334
+ _check = @tree_break.itemcget(n, 'window')
335
+ v = _check.cget('variable').value
336
+ is_checked = is_checked || v.to_i==1
337
+ }
338
+ if !is_checked
339
+ _check = @tree_break.itemcget(_file_node, 'window')
340
+ _check.cget('variable').value=0
341
+ end
342
+ end
343
+ ensure
344
+ @tree_break.configure('selectcommand'=>_sc) if _delete
345
+ end
346
+
347
+ end
348
+ end
349
+
350
+ def breakpoint_select(_file, _line)
351
+ _file_node = file2node_name(_file)
352
+ _line_node = line2node_name(_file_node, _line)
353
+ @tree_break.selection_clear
354
+ #p "line node = #{_line_node}"
355
+ if @tree_break.exist?(_line_node)
356
+ @tree_break.open_tree(_file_node, false)
357
+ @tree_break.selection_add(_line_node)
358
+ @tree_break.see(_line_node)
359
+ end
360
+ end
361
+
362
+
363
+ def breakpoint_list_free
364
+ @tree_break.delete(@tree_break.nodes('root'))
365
+ end
366
+
367
+
368
+ end