arcadia 0.3.1 → 0.4.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 +9 -5
  2. data/bin/arcadia +13 -13
  3. data/bin/arcadia.bat +1 -0
  4. data/conf/arcadia.conf +6 -5
  5. data/conf/arcadia.init.rb +34 -34
  6. data/conf/arcadia.res.rb +6 -0
  7. data/ext/ae-breakpoints/ae-breakpoints.conf +10 -0
  8. data/ext/ae-breakpoints/ae-breakpoints.rb +349 -0
  9. data/ext/ae-complete-code/ae-complete-code.conf +0 -0
  10. data/ext/ae-complete-code/ae-complete-code.rb +74 -76
  11. data/ext/ae-doc-code/ae-doc-code.conf +15 -15
  12. data/ext/ae-doc-code/ae-doc-code.rb +300 -295
  13. data/ext/ae-editor/ae-editor.conf +4 -4
  14. data/ext/ae-editor/ae-editor.rb +450 -140
  15. data/ext/ae-editor/langs/conf.lang +0 -0
  16. data/ext/ae-editor/langs/lang.lang.bind +0 -0
  17. data/ext/ae-editor/langs/rb.lang +0 -0
  18. data/ext/ae-editor/langs/rbw.lang.bind +0 -0
  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 +0 -0
  22. data/ext/ae-file-history/ae-file-history.rb +437 -373
  23. data/ext/ae-flag/ae-flag.conf +0 -0
  24. data/ext/ae-flag/ae-flag.rb +0 -0
  25. data/ext/ae-output-event/ae-output-event.conf +0 -0
  26. data/ext/ae-output/ae-output.conf +0 -0
  27. data/ext/ae-output/ae-output.rb +0 -0
  28. data/ext/ae-rad/ae-rad-inspector.rb +0 -0
  29. data/ext/ae-rad/ae-rad-libs.rb +0 -0
  30. data/ext/ae-rad/ae-rad-palette.rb +0 -0
  31. data/ext/ae-rad/ae-rad.conf +0 -0
  32. data/ext/ae-rad/ae-rad.rb +0 -0
  33. data/ext/ae-rad/lib/tk/al-tk.rb +4 -4
  34. data/ext/ae-rad/lib/tk/al-tk.res.rb +0 -0
  35. data/ext/ae-rad/lib/tk/al-tkarcadia.rb +25 -26
  36. data/ext/ae-rad/lib/tk/al-tkcustom.rb +0 -0
  37. data/ext/ae-rad/lib/tkext/al-bwidget.rb +0 -0
  38. data/ext/ae-rad/lib/tkext/al-iwidgets.rb +0 -0
  39. data/ext/ae-rad/lib/tkext/al-tile.rb +0 -0
  40. data/ext/ae-rad/lib/tkext/al-tktable.rb +0 -0
  41. data/ext/ae-ruby-debug/ae-ruby-debug.conf +0 -0
  42. data/ext/ae-ruby-debug/ae-ruby-debug.rb +1589 -1566
  43. data/ext/ae-search-in-files/ae-search-in-files.conf +0 -0
  44. data/ext/ae-search-in-files/ae-search-in-files.rb +0 -0
  45. data/ext/ae-shell/ae-shell.conf +0 -0
  46. data/ext/ae-shell/ae-shell.rb +0 -0
  47. data/ext/ae-shell/sh.rb +0 -0
  48. data/lib/a-commons.rb +27 -8
  49. data/lib/a-contracts.rb +3 -1
  50. data/lib/a-core.rb +33 -12
  51. data/lib/a-tkcommons.rb +17 -1
  52. data/tcl/BWidget-1.8.0/BWman/ArrowButton.html +0 -0
  53. data/tcl/BWidget-1.8.0/BWman/BWidget.html +0 -0
  54. data/tcl/BWidget-1.8.0/BWman/Button.html +0 -0
  55. data/tcl/BWidget-1.8.0/BWman/ButtonBox.html +0 -0
  56. data/tcl/BWidget-1.8.0/BWman/ComboBox.html +0 -0
  57. data/tcl/BWidget-1.8.0/BWman/Dialog.html +0 -0
  58. data/tcl/BWidget-1.8.0/BWman/DragSite.html +0 -0
  59. data/tcl/BWidget-1.8.0/BWman/DropSite.html +0 -0
  60. data/tcl/BWidget-1.8.0/BWman/DynamicHelp.html +0 -0
  61. data/tcl/BWidget-1.8.0/BWman/Entry.html +0 -0
  62. data/tcl/BWidget-1.8.0/BWman/Label.html +0 -0
  63. data/tcl/BWidget-1.8.0/BWman/LabelEntry.html +0 -0
  64. data/tcl/BWidget-1.8.0/BWman/LabelFrame.html +0 -0
  65. data/tcl/BWidget-1.8.0/BWman/ListBox.html +0 -0
  66. data/tcl/BWidget-1.8.0/BWman/MainFrame.html +0 -0
  67. data/tcl/BWidget-1.8.0/BWman/MessageDlg.html +0 -0
  68. data/tcl/BWidget-1.8.0/BWman/NoteBook.html +0 -0
  69. data/tcl/BWidget-1.8.0/BWman/PagesManager.html +0 -0
  70. data/tcl/BWidget-1.8.0/BWman/PanedWindow.html +0 -0
  71. data/tcl/BWidget-1.8.0/BWman/PanelFrame.html +0 -0
  72. data/tcl/BWidget-1.8.0/BWman/PasswdDlg.html +0 -0
  73. data/tcl/BWidget-1.8.0/BWman/ProgressBar.html +0 -0
  74. data/tcl/BWidget-1.8.0/BWman/ProgressDlg.html +0 -0
  75. data/tcl/BWidget-1.8.0/BWman/ScrollView.html +0 -0
  76. data/tcl/BWidget-1.8.0/BWman/ScrollableFrame.html +0 -0
  77. data/tcl/BWidget-1.8.0/BWman/ScrolledWindow.html +0 -0
  78. data/tcl/BWidget-1.8.0/BWman/SelectColor.html +0 -0
  79. data/tcl/BWidget-1.8.0/BWman/SelectFont.html +0 -0
  80. data/tcl/BWidget-1.8.0/BWman/Separator.html +0 -0
  81. data/tcl/BWidget-1.8.0/BWman/SpinBox.html +0 -0
  82. data/tcl/BWidget-1.8.0/BWman/StatusBar.html +0 -0
  83. data/tcl/BWidget-1.8.0/BWman/TitleFrame.html +0 -0
  84. data/tcl/BWidget-1.8.0/BWman/Tree.html +0 -0
  85. data/tcl/BWidget-1.8.0/BWman/Widget.html +0 -0
  86. data/tcl/BWidget-1.8.0/BWman/contents.html +0 -0
  87. data/tcl/BWidget-1.8.0/BWman/index.html +0 -0
  88. data/tcl/BWidget-1.8.0/BWman/navtree.html +0 -0
  89. data/tcl/BWidget-1.8.0/BWman/options.htm +0 -0
  90. data/tcl/BWidget-1.8.0/CHANGES.txt +0 -0
  91. data/tcl/BWidget-1.8.0/ChangeLog +0 -0
  92. data/tcl/BWidget-1.8.0/LICENSE.txt +0 -0
  93. data/tcl/BWidget-1.8.0/README.txt +0 -0
  94. data/tcl/BWidget-1.8.0/arrow.tcl +0 -0
  95. data/tcl/BWidget-1.8.0/bitmap.tcl +0 -0
  96. data/tcl/BWidget-1.8.0/button.tcl +0 -0
  97. data/tcl/BWidget-1.8.0/buttonbox.tcl +0 -0
  98. data/tcl/BWidget-1.8.0/color.tcl +0 -0
  99. data/tcl/BWidget-1.8.0/combobox.tcl +0 -0
  100. data/tcl/BWidget-1.8.0/demo/basic.tcl +0 -0
  101. data/tcl/BWidget-1.8.0/demo/bwidget.xbm +0 -0
  102. data/tcl/BWidget-1.8.0/demo/demo.tcl +0 -0
  103. data/tcl/BWidget-1.8.0/demo/dnd.tcl +0 -0
  104. data/tcl/BWidget-1.8.0/demo/manager.tcl +0 -0
  105. data/tcl/BWidget-1.8.0/demo/select.tcl +0 -0
  106. data/tcl/BWidget-1.8.0/demo/tmpldlg.tcl +0 -0
  107. data/tcl/BWidget-1.8.0/demo/tree.tcl +0 -0
  108. data/tcl/BWidget-1.8.0/demo/x1.xbm +0 -0
  109. data/tcl/BWidget-1.8.0/dialog.tcl +0 -0
  110. data/tcl/BWidget-1.8.0/dragsite.tcl +0 -0
  111. data/tcl/BWidget-1.8.0/dropsite.tcl +0 -0
  112. data/tcl/BWidget-1.8.0/dynhelp.tcl +0 -0
  113. data/tcl/BWidget-1.8.0/entry.tcl +0 -0
  114. data/tcl/BWidget-1.8.0/font.tcl +0 -0
  115. data/tcl/BWidget-1.8.0/images/bold.gif +0 -0
  116. data/tcl/BWidget-1.8.0/images/copy.gif +0 -0
  117. data/tcl/BWidget-1.8.0/images/cut.gif +0 -0
  118. data/tcl/BWidget-1.8.0/images/dragfile.gif +0 -0
  119. data/tcl/BWidget-1.8.0/images/dragicon.gif +0 -0
  120. data/tcl/BWidget-1.8.0/images/error.gif +0 -0
  121. data/tcl/BWidget-1.8.0/images/file.gif +0 -0
  122. data/tcl/BWidget-1.8.0/images/folder.gif +0 -0
  123. data/tcl/BWidget-1.8.0/images/hourglass.gif +0 -0
  124. data/tcl/BWidget-1.8.0/images/info.gif +0 -0
  125. data/tcl/BWidget-1.8.0/images/italic.gif +0 -0
  126. data/tcl/BWidget-1.8.0/images/minus.xbm +0 -0
  127. data/tcl/BWidget-1.8.0/images/new.gif +0 -0
  128. data/tcl/BWidget-1.8.0/images/opcopy.xbm +0 -0
  129. data/tcl/BWidget-1.8.0/images/open.gif +0 -0
  130. data/tcl/BWidget-1.8.0/images/openfold.gif +0 -0
  131. data/tcl/BWidget-1.8.0/images/oplink.xbm +0 -0
  132. data/tcl/BWidget-1.8.0/images/opmove.xbm +0 -0
  133. data/tcl/BWidget-1.8.0/images/overstrike.gif +0 -0
  134. data/tcl/BWidget-1.8.0/images/palette.gif +0 -0
  135. data/tcl/BWidget-1.8.0/images/passwd.gif +0 -0
  136. data/tcl/BWidget-1.8.0/images/paste.gif +0 -0
  137. data/tcl/BWidget-1.8.0/images/plus.xbm +0 -0
  138. data/tcl/BWidget-1.8.0/images/print.gif +0 -0
  139. data/tcl/BWidget-1.8.0/images/question.gif +0 -0
  140. data/tcl/BWidget-1.8.0/images/redo.gif +0 -0
  141. data/tcl/BWidget-1.8.0/images/save.gif +0 -0
  142. data/tcl/BWidget-1.8.0/images/target.xbm +0 -0
  143. data/tcl/BWidget-1.8.0/images/underline.gif +0 -0
  144. data/tcl/BWidget-1.8.0/images/undo.gif +0 -0
  145. data/tcl/BWidget-1.8.0/images/warning.gif +0 -0
  146. data/tcl/BWidget-1.8.0/init.tcl +0 -0
  147. data/tcl/BWidget-1.8.0/label.tcl +0 -0
  148. data/tcl/BWidget-1.8.0/labelentry.tcl +0 -0
  149. data/tcl/BWidget-1.8.0/labelframe.tcl +0 -0
  150. data/tcl/BWidget-1.8.0/lang/da.rc +0 -0
  151. data/tcl/BWidget-1.8.0/lang/de.rc +0 -0
  152. data/tcl/BWidget-1.8.0/lang/en.rc +0 -0
  153. data/tcl/BWidget-1.8.0/lang/es.rc +0 -0
  154. data/tcl/BWidget-1.8.0/lang/fr.rc +0 -0
  155. data/tcl/BWidget-1.8.0/listbox.tcl +0 -0
  156. data/tcl/BWidget-1.8.0/mainframe.tcl +0 -0
  157. data/tcl/BWidget-1.8.0/messagedlg.tcl +0 -0
  158. data/tcl/BWidget-1.8.0/notebook.tcl +0 -0
  159. data/tcl/BWidget-1.8.0/pagesmgr.tcl +0 -0
  160. data/tcl/BWidget-1.8.0/panedw.tcl +0 -0
  161. data/tcl/BWidget-1.8.0/panelframe.tcl +0 -0
  162. data/tcl/BWidget-1.8.0/passwddlg.tcl +0 -0
  163. data/tcl/BWidget-1.8.0/pkgIndex.tcl +0 -0
  164. data/tcl/BWidget-1.8.0/progressbar.tcl +0 -0
  165. data/tcl/BWidget-1.8.0/progressdlg.tcl +0 -0
  166. data/tcl/BWidget-1.8.0/scrollframe.tcl +0 -0
  167. data/tcl/BWidget-1.8.0/scrollview.tcl +0 -0
  168. data/tcl/BWidget-1.8.0/scrollw.tcl +0 -0
  169. data/tcl/BWidget-1.8.0/separator.tcl +0 -0
  170. data/tcl/BWidget-1.8.0/spinbox.tcl +0 -0
  171. data/tcl/BWidget-1.8.0/statusbar.tcl +0 -0
  172. data/tcl/BWidget-1.8.0/tests/entry.test +0 -0
  173. data/tcl/BWidget-1.8.0/titleframe.tcl +0 -0
  174. data/tcl/BWidget-1.8.0/tree.tcl +0 -0
  175. data/tcl/BWidget-1.8.0/utils.tcl +0 -0
  176. data/tcl/BWidget-1.8.0/widget.tcl +0 -0
  177. data/tcl/BWidget-1.8.0/wizard.tcl +0 -0
  178. data/tcl/BWidget-1.8.0/xpm2image.tcl +0 -0
  179. metadata +158 -154
data/README CHANGED
@@ -1,8 +1,8 @@
1
1
  = Arcadia Ruby Ide
2
- version 0.3.1
2
+ version 0.4.0
3
3
 
4
4
  by Antonio Galeone
5
- on Feb 23, 2008
5
+ on Jul 29, 2008
6
6
 
7
7
 
8
8
  == About
@@ -18,7 +18,10 @@ Some of Arcadia ruby ide project features include:
18
18
  * Highly extensibility architecture.
19
19
 
20
20
  == In this release
21
- * [fix] fixed a bug on code completion
21
+ * [fix] bug-fixing
22
+ * [mod] Improved file-history
23
+ * [mod] Improved editor
24
+ * [mod] Improved debugger
22
25
 
23
26
  == How to install
24
27
  There are two way:
@@ -108,10 +111,11 @@ under ~/.arcadia directory. The format of property definition are:
108
111
 
109
112
  == Requirement
110
113
  I include into distribution also the BWidget lib (under tcl directory) so
111
- are require realy only the standard tcl tk lib (tested on tcl tk 8.4).
114
+ are require realy only the standard tcl tk lib (tested on tcl tk 8.4 & tcl tk 8.5).
112
115
  I have tested arcadia with ruby 1.8.4, 1.8.5, 1.8.6 on
113
116
  * FreeBsd6.x,
114
- * Vector linux 5.8,
117
+ * Vector linux 5.*,
118
+ * Archlinux
115
119
  * Windows 2000/XP,
116
120
  * Cygwin (note: same page fault error on dll under cygwin may be solved in this way:
117
121
  by ash.exe exec "/bin/rebaseall").
@@ -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
@@ -0,0 +1 @@
1
+ ruby arcadia
@@ -18,9 +18,10 @@ layout.split.2=0.1r70%
18
18
  #:::::::::::::::::::::::::::::::::::::::::::::::::<begin>
19
19
  font.h1=
20
20
  font.h2=
21
- font.h3=courier 11
21
+ font.h3=courier 10
22
22
  freebsd::font.h3=courier 12
23
23
  win::font.h3={Courier New} 9
24
+ darwin::font.h3={Courier New} 12
24
25
  font.h4=
25
26
  font.h5=
26
27
  font.h6=
@@ -258,10 +259,10 @@ user_toolbar_show=yes
258
259
 
259
260
  #:::::::::::::::: splash group ::::::::::::::::::::::<begin>
260
261
  splash.show=yes
261
- splash.title.font=Courier 30 bold
262
- splash.subtitle.font=Courier 12 bold
263
- splash.version.font=Courier 10
264
- splash.credits.font=Courier 10
262
+ splash.title.font=Courier 28 bold
263
+ splash.subtitle.font=Courier 10 bold
264
+ splash.version.font=Courier 9
265
+ splash.credits.font=Courier 9
265
266
  splash.banner.font=Courier 8 italic
266
267
 
267
268
  win::splash.title.font=Ariel 26 bold
@@ -1,34 +1,34 @@
1
- # In this file init configuration
2
-
3
- begin
4
- require 'tk'
5
- rescue LoadError => e
6
- print <<EOL
7
- +--------------------------------------------+
8
- | Arcadia require ruby-tk extension |
9
- | and tcl/tk run-time |
10
- | you must install before run ... |
11
- +--------------------------------------------+
12
- EOL
13
- i=30
14
- l=i
15
- msg=e.message
16
- while l < msg.length
17
- while l < msg.length-1 && msg[l..l]!="\s"
18
- l=l+1
19
- end
20
- msg = msg[0..l]+"\n"+"\s"*4+msg[l+1..-1]
21
- l=l+i
22
- end
23
- print <<EOL
24
- ---Tk LoadError Details-----------------------
25
- Platform : "#{RUBY_PLATFORM}"
26
- Ruby version : "#{RUBY_VERSION}"
27
- Message :
28
- "#{msg}"
29
- ----------------------------------------------
30
- EOL
31
- exit
32
- end
33
-
34
- Tk.tk_call "eval","set auto_path [concat $::auto_path tcl]"
1
+ # In this file init configuration
2
+
3
+ begin
4
+ require 'tk'
5
+ rescue LoadError => e
6
+ print <<EOL
7
+ ----------------------------------------------
8
+ Arcadia require ruby-tk extension
9
+ and tcl/tk run-time
10
+ you must install before run ...
11
+ ----------------------------------------------
12
+ EOL
13
+ i=30
14
+ l=i
15
+ msg=e.message
16
+ while l < msg.length
17
+ while l < msg.length-1 && msg[l..l]!="\s"
18
+ l=l+1
19
+ end
20
+ msg = msg[0..l]+"\n"+"\s"*4+msg[l+1..-1]
21
+ l=l+i
22
+ end
23
+ print <<EOL
24
+ ---Tk LoadError Details-----------------------
25
+ Platform : "#{RUBY_PLATFORM}"
26
+ Ruby version : "#{RUBY_VERSION}"
27
+ Message :
28
+ "#{msg}"
29
+ ----------------------------------------------
30
+ EOL
31
+ exit
32
+ end
33
+
34
+ Tk.tk_call "eval","set auto_path [concat $::auto_path tcl]"
@@ -1340,3 +1340,9 @@ pBMKA7ykCEjW58fvoQCU9gYAcYIPMHcKeU0xBj4BBgNQM3gGRmqIFIQ/JYaX
1340
1340
  fRR4Ent9fwBqgoFphpZ5Pm0DRq1gAbJ6SqsVa11ZJZ+XFH0vwS9pvXkrVFNi
1341
1341
  awKVYxYIsw0D09TV1tcNGBEAOw==
1342
1342
  EOS
1343
+
1344
+
1345
+ ICON_FOLDER_OPEN_GIF=<<EOS
1346
+ R0lGODlhEAAQAIAAAGaZ/////yH5BAEAAAEALAAAAAAQABAAAAImjI+pq+DP
1347
+ wptgwXORi2kbCnpSSH2VdYlatanrCDen283khN0ZpxQAOw==
1348
+ EOS
@@ -0,0 +1,10 @@
1
+ #========================================
2
+ #========================================
3
+ name=breakpoints
4
+ labels=Breakpoints
5
+ frames=1.1
6
+ active=yes
7
+ require=ext/ae-breakpoints/ae-breakpoints
8
+ class=Breakpoints
9
+ #========================================
10
+ #========================================
@@ -0,0 +1,349 @@
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