arcadia 0.4.0 → 0.5.0

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