arcadia 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/README +69 -77
  2. data/arcadia.rb +1097 -770
  3. data/base/a-commons.rb +480 -0
  4. data/base/a-contracts.rb +207 -322
  5. data/base/{a-utils.rb → a-tkcommons.rb} +933 -993
  6. data/conf/arcadia.conf +130 -203
  7. data/conf/arcadia.res.rb +1332 -1325
  8. data/ext/ae-action-dispatcher/ae-action-dispatcher.conf +6 -0
  9. data/ext/ae-action-dispatcher/ae-action-dispatcher.rb +22 -0
  10. data/ext/ae-complete-code/ae-complete-code.conf +2 -2
  11. data/ext/ae-complete-code/ae-complete-code.rb +82 -80
  12. data/ext/ae-doc-code/ae-doc-code.conf +2 -2
  13. data/ext/ae-doc-code/ae-doc-code.rb +114 -111
  14. data/ext/ae-editor/ae-editor.conf +110 -105
  15. data/ext/ae-editor/ae-editor.rb +2501 -2287
  16. data/ext/ae-editor/langs/conf.lang +15 -0
  17. data/ext/ae-editor/langs/lang.lang.bind +1 -0
  18. data/ext/ae-editor/langs/rb.lang +67 -0
  19. data/ext/ae-editor/langs/rbw.lang.bind +1 -0
  20. data/ext/ae-event-log/ae-event-log.rb +45 -52
  21. data/ext/ae-file-history/ae-file-history.conf +4 -4
  22. data/ext/ae-file-history/ae-file-history.rb +298 -286
  23. data/ext/ae-flag/ae-flag.conf +6 -6
  24. data/ext/ae-flag/ae-flag.rb +12 -12
  25. data/ext/ae-inspector/ae-inspector.conf +3 -3
  26. data/ext/ae-inspector/ae-inspector.rb +2 -2
  27. data/ext/ae-output-event/ae-output-event.conf +15 -15
  28. data/ext/ae-output/ae-output.conf +5 -3
  29. data/ext/ae-output/ae-output.rb +62 -33
  30. data/ext/ae-palette/ae-palette.conf +3 -3
  31. data/ext/ae-palette/ae-palette.rb +265 -306
  32. data/ext/ae-rad/ae-rad-inspector.rb +1534 -0
  33. data/{base/a-libs.rb → ext/ae-rad/ae-rad-libs.rb} +1118 -846
  34. data/ext/ae-rad/ae-rad-palette.rb +273 -0
  35. data/ext/ae-rad/ae-rad.conf +71 -0
  36. data/ext/ae-rad/ae-rad.rb +56 -0
  37. data/{lib → ext/ae-rad/lib}/tk/al-tk.rb +21 -110
  38. data/{lib → ext/ae-rad/lib}/tk/al-tk.res.rb +0 -0
  39. data/{lib → ext/ae-rad/lib}/tk/al-tkarcadia.rb +26 -26
  40. data/{lib → ext/ae-rad/lib}/tk/al-tkcustom.rb +70 -70
  41. data/{lib → ext/ae-rad/lib}/tkext/al-bwidget.rb +194 -194
  42. data/{lib → ext/ae-rad/lib}/tkext/al-iwidgets.rb +25 -25
  43. data/{lib → ext/ae-rad/lib}/tkext/al-tile.rb +173 -173
  44. data/{lib → ext/ae-rad/lib}/tkext/al-tktable.rb +0 -0
  45. data/ext/ae-ruby-debug/ae-ruby-debug.conf +7 -4
  46. data/ext/ae-ruby-debug/ae-ruby-debug.rb +278 -142
  47. data/ext/ae-search-in-files/ae-search-in-files.conf +15 -0
  48. data/ext/ae-search-in-files/ae-search-in-files.rb +284 -0
  49. data/ext/ae-shell/ae-shell.rb +88 -8
  50. data/ext/ae-shell/sh.rb +7 -0
  51. metadata +93 -79
  52. data/base/a-contracts-work.rb +0 -219
  53. data/base/a-ext.rb +0 -280
  54. data/ext/ae-debug/ae-debug.conf +0 -7
  55. data/ext/ae-debug/ae-debug.rb +0 -601
  56. data/ext/ae-debug/debug1.57.rb +0 -998
@@ -1,25 +1,25 @@
1
- #
2
- # al-iwidgets.rb - Arcadia Ruby ide
3
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
- #
5
-
6
- require 'lib/tk/arcadia-tk'
7
- require 'tkextlib/iwidgets'
8
-
9
-
10
-
11
- class AGTkIWidgets < AGTkBase
12
- def newobject
13
- @obj = Tk::Iwidgets::Calendar.new(@ag_parent.obj)
14
- end
15
- def properties
16
- super()
17
- end
18
- end
19
-
20
-
21
- class ArcadiaLibTkBWidget < ArcadiaLib
22
- def register_classes
23
- self.add_class(AGTkIWidgets)
24
- end
25
- end
1
+ #
2
+ # al-iwidgets.rb - Arcadia Ruby ide
3
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
+ #
5
+
6
+ require 'ext/ae-rad/lib/tk/arcadia-tk'
7
+ require 'tkextlib/iwidgets'
8
+
9
+
10
+
11
+ class AGTkIWidgets < AGTkBase
12
+ def newobject
13
+ @obj = Tk::Iwidgets::Calendar.new(@ag_parent.obj)
14
+ end
15
+ def properties
16
+ super()
17
+ end
18
+ end
19
+
20
+
21
+ class ArcadiaLibTkBWidget < ArcadiaLib
22
+ def register_classes
23
+ self.add_class(AGTkIWidgets)
24
+ end
25
+ end
@@ -1,173 +1,173 @@
1
- #
2
- # al-tile.rb - Arcadia Ruby ide
3
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
- #
5
-
6
- require 'lib/wrappers/tk/w-arcadia-tk'
7
- require 'tkextlib/tile'
8
- require "lib/arcadia/arcadia-ext"
9
-
10
- class AGTkCommonTile < AGTkLayoutManaged
11
- def properties
12
- super
13
- publish('property','name'=>'style',
14
- 'get'=> proc{@obj.cget('style')},
15
- 'set'=> proc{|j| @obj.configure('style'=>j)},
16
- 'def'=> ""
17
- )
18
- publish('property','name'=>'theme_use',
19
- 'get'=> proc{},
20
- 'set'=> proc{|j| Tk::Tile::Style.theme_use(j)},
21
- 'def'=> ""
22
- )
23
-
24
- end
25
-
26
- end
27
-
28
- class ATKTileLabel < AGTkCommonTile
29
- def ATKTileLabel.class_wrapped
30
- Tk::Tile::TLabel
31
- end
32
- def properties
33
- super
34
- publish('property','name'=>'text',
35
- 'default'=> @i_name,
36
- 'get'=> proc{@obj.cget('text')},
37
- 'set'=> proc{|t| @obj.configure('text'=>t)},
38
- 'def'=> ""
39
- )
40
- publish('property','name'=>'state',
41
- 'get'=> proc{@obj.cget('state')},
42
- 'set'=> proc{|j| @obj.configure('state'=>j)},
43
- 'def'=> "",
44
- 'type'=>TkType::TkagState
45
- )
46
- end
47
- end
48
-
49
-
50
-
51
- class ATKTileButton < AGTkCommonTile
52
- def ATKTileButton.class_wrapped
53
- Tk::Tile::TButton
54
- end
55
- def properties
56
- super
57
- publish('property','name'=>'text',
58
- 'default'=> @i_name,
59
- 'get'=> proc{@obj.cget('text')},
60
- 'set'=> proc{|t| @obj.configure('text'=>t)},
61
- 'def'=> ""
62
- )
63
- publish('property','name'=>'state',
64
- 'get'=> proc{@obj.cget('state')},
65
- 'set'=> proc{|j| @obj.configure('state'=>j)},
66
- 'def'=> "",
67
- 'type'=>TkType::TkagState
68
- )
69
- end
70
- end
71
-
72
-
73
- class ATKTileScrollbar < AGTkCommonTile
74
- def ATKTileScrollbar.class_wrapped
75
- Tk::Tile::TScrollbar
76
- end
77
- def properties
78
- super
79
- end
80
- end
81
-
82
- class ATKTileCombobox < AGTkCommonTile
83
- def ATKTileCombobox.class_wrapped
84
- Tk::Tile::TCombobox
85
- end
86
- def properties
87
- super
88
- publish('property','name'=>'values',
89
- 'get'=> proc{@obj.cget('values')},
90
- 'set'=> proc{|t| @obj.configure('values'=>t)},
91
- 'def'=> ""
92
- )
93
- end
94
- end
95
-
96
- class ATKTileSeparator < AGTkCommonTile
97
- def ATKTileSeparator.class_wrapped
98
- Tk::Tile::TSeparator
99
- end
100
- def properties
101
- super
102
- end
103
- end
104
-
105
-
106
- class ATKTileFrame < AGTkLayoutManagedContainer
107
- include Tk::Tile
108
- def ATKTileFrame.class_wrapped
109
- TFrame
110
- end
111
- end
112
-
113
- class ATKTileLabelframe < ATKTileFrame
114
- def ATKTileLabelframe.class_wrapped
115
- Tk::Tile::TLabelframe
116
- end
117
- def properties
118
- super
119
- publish('property','name'=>'text',
120
- 'default'=> @i_name,
121
- 'get'=> proc{@obj.cget('text')},
122
- 'set'=> proc{|t| @obj.configure('text'=>t)},
123
- 'def'=> ""
124
- )
125
- end
126
- end
127
-
128
-
129
- class ATkTileStyle < AGINTk
130
- class TkTileStyle
131
- include Tk::Tile::Style
132
- def style
133
- Tk::Tile::Style
134
- end
135
- end
136
- def ATkTileStyle.class_wrapped
137
- TkTileStyle
138
- end
139
- def properties
140
- super
141
- publish('property','name'=>'theme',
142
- 'get'=> proc{},
143
- 'set'=> proc{|j| @obj.style.theme_use(j)},
144
- 'def'=> "",
145
- 'type'=> EnumType.new(@obj.style.theme_names)
146
- )
147
-
148
- publish('property','name'=>'foreground',
149
- 'get'=> proc{},
150
- 'set'=> proc{|foreground| @obj.style.configure('foreground'=>foreground)},
151
- 'def'=> '',
152
- 'type'=> TkType::TkagColor
153
- )
154
-
155
-
156
- end
157
- end
158
-
159
- class ArcadiaLibTkTile < ArcadiaLib
160
- def register_classes
161
- self.add_class(ATkTileStyle)
162
- self.add_class(ATKTileLabel)
163
- self.add_class(ATKTileLabelframe)
164
- self.add_class(ATKTileButton)
165
- self.add_class(ATKTileFrame)
166
- self.add_class(ATKTileScrollbar)
167
- self.add_class(ATKTileCombobox)
168
- self.add_class(ATKTileSeparator)
169
- end
170
- end
171
-
172
-
173
-
1
+ #
2
+ # al-tile.rb - Arcadia Ruby ide
3
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
+ #
5
+
6
+ require 'lib/wrappers/tk/w-arcadia-tk'
7
+ require 'tkextlib/tile'
8
+ require "lib/arcadia/arcadia-ext"
9
+
10
+ class AGTkCommonTile < AGTkLayoutManaged
11
+ def properties
12
+ super
13
+ publish('property','name'=>'style',
14
+ 'get'=> proc{@obj.cget('style')},
15
+ 'set'=> proc{|j| @obj.configure('style'=>j)},
16
+ 'def'=> ""
17
+ )
18
+ publish('property','name'=>'theme_use',
19
+ 'get'=> proc{},
20
+ 'set'=> proc{|j| Tk::Tile::Style.theme_use(j)},
21
+ 'def'=> ""
22
+ )
23
+
24
+ end
25
+
26
+ end
27
+
28
+ class ATKTileLabel < AGTkCommonTile
29
+ def ATKTileLabel.class_wrapped
30
+ Tk::Tile::TLabel
31
+ end
32
+ def properties
33
+ super
34
+ publish('property','name'=>'text',
35
+ 'default'=> @i_name,
36
+ 'get'=> proc{@obj.cget('text')},
37
+ 'set'=> proc{|t| @obj.configure('text'=>t)},
38
+ 'def'=> ""
39
+ )
40
+ publish('property','name'=>'state',
41
+ 'get'=> proc{@obj.cget('state')},
42
+ 'set'=> proc{|j| @obj.configure('state'=>j)},
43
+ 'def'=> "",
44
+ 'type'=>TkType::TkagState
45
+ )
46
+ end
47
+ end
48
+
49
+
50
+
51
+ class ATKTileButton < AGTkCommonTile
52
+ def ATKTileButton.class_wrapped
53
+ Tk::Tile::TButton
54
+ end
55
+ def properties
56
+ super
57
+ publish('property','name'=>'text',
58
+ 'default'=> @i_name,
59
+ 'get'=> proc{@obj.cget('text')},
60
+ 'set'=> proc{|t| @obj.configure('text'=>t)},
61
+ 'def'=> ""
62
+ )
63
+ publish('property','name'=>'state',
64
+ 'get'=> proc{@obj.cget('state')},
65
+ 'set'=> proc{|j| @obj.configure('state'=>j)},
66
+ 'def'=> "",
67
+ 'type'=>TkType::TkagState
68
+ )
69
+ end
70
+ end
71
+
72
+
73
+ class ATKTileScrollbar < AGTkCommonTile
74
+ def ATKTileScrollbar.class_wrapped
75
+ Tk::Tile::TScrollbar
76
+ end
77
+ def properties
78
+ super
79
+ end
80
+ end
81
+
82
+ class ATKTileCombobox < AGTkCommonTile
83
+ def ATKTileCombobox.class_wrapped
84
+ Tk::Tile::TCombobox
85
+ end
86
+ def properties
87
+ super
88
+ publish('property','name'=>'values',
89
+ 'get'=> proc{@obj.cget('values')},
90
+ 'set'=> proc{|t| @obj.configure('values'=>t)},
91
+ 'def'=> ""
92
+ )
93
+ end
94
+ end
95
+
96
+ class ATKTileSeparator < AGTkCommonTile
97
+ def ATKTileSeparator.class_wrapped
98
+ Tk::Tile::TSeparator
99
+ end
100
+ def properties
101
+ super
102
+ end
103
+ end
104
+
105
+
106
+ class ATKTileFrame < AGTkLayoutManagedContainer
107
+ include Tk::Tile
108
+ def ATKTileFrame.class_wrapped
109
+ TFrame
110
+ end
111
+ end
112
+
113
+ class ATKTileLabelframe < ATKTileFrame
114
+ def ATKTileLabelframe.class_wrapped
115
+ Tk::Tile::TLabelframe
116
+ end
117
+ def properties
118
+ super
119
+ publish('property','name'=>'text',
120
+ 'default'=> @i_name,
121
+ 'get'=> proc{@obj.cget('text')},
122
+ 'set'=> proc{|t| @obj.configure('text'=>t)},
123
+ 'def'=> ""
124
+ )
125
+ end
126
+ end
127
+
128
+
129
+ class ATkTileStyle < AGINTk
130
+ class TkTileStyle
131
+ include Tk::Tile::Style
132
+ def style
133
+ Tk::Tile::Style
134
+ end
135
+ end
136
+ def ATkTileStyle.class_wrapped
137
+ TkTileStyle
138
+ end
139
+ def properties
140
+ super
141
+ publish('property','name'=>'theme',
142
+ 'get'=> proc{},
143
+ 'set'=> proc{|j| @obj.style.theme_use(j)},
144
+ 'def'=> "",
145
+ 'type'=> EnumType.new(@obj.style.theme_names)
146
+ )
147
+
148
+ publish('property','name'=>'foreground',
149
+ 'get'=> proc{},
150
+ 'set'=> proc{|foreground| @obj.style.configure('foreground'=>foreground)},
151
+ 'def'=> '',
152
+ 'type'=> TkType::TkagColor
153
+ )
154
+
155
+
156
+ end
157
+ end
158
+
159
+ class ArcadiaLibTkTile < ArcadiaLib
160
+ def register_classes
161
+ self.add_class(ATkTileStyle)
162
+ self.add_class(ATKTileLabel)
163
+ self.add_class(ATKTileLabelframe)
164
+ self.add_class(ATKTileButton)
165
+ self.add_class(ATKTileFrame)
166
+ self.add_class(ATKTileScrollbar)
167
+ self.add_class(ATKTileCombobox)
168
+ self.add_class(ATKTileSeparator)
169
+ end
170
+ end
171
+
172
+
173
+
File without changes
@@ -1,11 +1,13 @@
1
- #==============================================================
1
+ #========================================
2
+ #========================================
2
3
  name=ruby-debug
3
- label=Ruby Debug
4
- frame=1.0
4
+ labels=Ruby Debug
5
+ frames=0.0
5
6
  active=yes
6
7
  require=ext/ae-ruby-debug/ae-ruby-debug
7
8
  class=RubyDebug
8
- #==============================================================
9
+ #========================================
10
+ #========================================
9
11
  server.host=localhost
10
12
  server.port=8989
11
13
  server.timeout=10
@@ -17,4 +19,5 @@ freebsd::font=courier 10
17
19
  freebsd::font.bold=courier 10 bold
18
20
  win::font={Courier New} 8
19
21
  win::font.bold={Courier New} 8 bold
22
+ #========================================
20
23
 
@@ -3,7 +3,12 @@
3
3
  # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
4
  #
5
5
 
6
+
6
7
  class RubyDebugView
8
+ include TkUtil
9
+ B_STATE_ON = '+'
10
+ B_STATE_OFF = '-'
11
+ B_STATE_FREEZE = '='
7
12
  def initialize(_frame, _controller)
8
13
  @frame = _frame
9
14
  @controller = _controller
@@ -136,7 +141,8 @@ class RubyDebugView
136
141
  _text = @tree_process.itemcget(_selected, 'text')
137
142
  pos = match_position_from_stack(_text)
138
143
  if pos.length >0
139
- EditorContract.instance.open_file(self, 'file'=>pos[0], 'line'=>pos[1])
144
+ Arcadia.process_event(OpenBufferEvent.new(self,'file'=>pos[0], 'row'=>pos[1]))
145
+ #EditorContract.instance.open_file(self, 'file'=>pos[0], 'line'=>pos[1])
140
146
  end
141
147
  end
142
148
  })
@@ -159,6 +165,7 @@ class RubyDebugView
159
165
  @tree_var.delete(@tree_var.nodes('local_var'))
160
166
  @tree_var.delete(@tree_var.nodes('instance_var'))
161
167
  @tree_var.delete(@tree_var.nodes('global_var'))
168
+ #@tree_var.delete(@tree_var.nodes('class_var'))
162
169
  @tree_var.delete(@tree_var.nodes('eval')) if @tree_var.exist?('eval')
163
170
  end
164
171
 
@@ -166,6 +173,15 @@ class RubyDebugView
166
173
  @tree_process.delete(@tree_process.nodes('root'))
167
174
  end
168
175
 
176
+ def bnext_state(_state)
177
+ if _state == B_STATE_ON
178
+ return B_STATE_FREEZE
179
+ elsif _state == B_STATE_FREEZE
180
+ return B_STATE_OFF
181
+ elsif _state == B_STATE_OFF
182
+ return B_STATE_ON
183
+ end
184
+ end
169
185
 
170
186
  def build_var_panel(_frame)
171
187
  _open_proc = proc do |_arg|
@@ -189,12 +205,14 @@ class RubyDebugView
189
205
  }.pack('side'=>'right', 'fill'=>'y')
190
206
  @tree_var.yscrollcommand proc{|first,last| _scrollbar.set(first,last)}
191
207
 
192
- @local_on = true
193
- @instance_on = true
194
- @global_on = false
208
+ @local_state = B_STATE_ON
209
+ @instance_state = B_STATE_ON
210
+ #@class_state = B_STATE_ON
211
+ @global_state = B_STATE_OFF
195
212
 
196
213
  _i_on = TkPhotoImage.new('dat' => ON_GIF)
197
214
  _i_off = TkPhotoImage.new('dat' => OFF_GIF)
215
+ _i_freeze = TkPhotoImage.new('dat' => FREEZE_GIF)
198
216
 
199
217
  _b_relief = 'groove'
200
218
  @b_local_onoff = TkButton.new(@tree_var){
@@ -203,15 +221,17 @@ class RubyDebugView
203
221
  state 'disabled'
204
222
  anchor 'nw'
205
223
  }.bind("1",proc{
206
- @local_on = !@local_on
207
- if @local_on
224
+ @local_state = bnext_state(@local_state)
225
+ if @local_state == B_STATE_ON
208
226
  @b_local_onoff.image(_i_on)
209
227
  command_enabled(false)
210
228
  Thread.new{
211
229
  update_variables('local_var', @controller.rdc.variables('local_variables')) #if @tree_var.open?('local_var')
212
230
  command_enabled(true)
213
231
  }
214
- else
232
+ elsif @local_state == B_STATE_FREEZE
233
+ @b_local_onoff.image(_i_freeze)
234
+ elsif @local_state == B_STATE_OFF
215
235
  @b_local_onoff.image(_i_off)
216
236
  @tree_var.delete(@tree_var.nodes('local_var'))
217
237
  end
@@ -234,22 +254,22 @@ class RubyDebugView
234
254
  state 'disabled'
235
255
  anchor 'nw'
236
256
  }.bind("1",proc{
237
- @instance_on = !@instance_on
238
- if @instance_on
257
+ @instance_state = bnext_state(@instance_state)
258
+ if @instance_state == B_STATE_ON
239
259
  @b_instance_onoff.image(_i_on)
240
260
  command_enabled(false)
241
261
  Thread.new{
242
262
  update_variables('instance_var', @controller.rdc.variables('instance_variables')) #if @tree_var.open?('local_var')
243
263
  command_enabled(true)
244
264
  }
245
- else
265
+ elsif @instance_state == B_STATE_FREEZE
266
+ @b_instance_onoff.image(_i_freeze)
267
+ elsif @instance_state == B_STATE_OFF
246
268
  @b_instance_onoff.image(_i_off)
247
269
  @tree_var.delete(@tree_var.nodes('instance_var'))
248
270
  end
249
271
  })
250
272
  @tree_var.insert('end', 'root' ,'instance_var', {
251
- # 'deltax' => 0,
252
- # 'padx'=>2,
253
273
  'fill'=>'#892541',
254
274
  'open'=>true,
255
275
  'anchor'=>'w',
@@ -258,21 +278,52 @@ class RubyDebugView
258
278
  'window' => @b_instance_onoff
259
279
  })
260
280
 
281
+ # @b_class_onoff = TkButton.new(@tree_var){
282
+ # image _i_on
283
+ # relief _b_relief
284
+ # state 'disabled'
285
+ # anchor 'nw'
286
+ # }.bind("1",proc{
287
+ # @class_on = !@class_on
288
+ # if @class_on
289
+ # @b_class_onoff.image(_i_on)
290
+ # command_enabled(false)
291
+ # Thread.new{
292
+ # update_variables('class_var', @controller.rdc.variables('class_variables')) #if @tree_var.open?('local_var')
293
+ # command_enabled(true)
294
+ # }
295
+ # else
296
+ # @b_class_onoff.image(_i_off)
297
+ # @tree_var.delete(@tree_var.nodes('class_var'))
298
+ # end
299
+ # })
300
+ # @tree_var.insert('end', 'root' ,'class_var', {
301
+ # 'fill'=>'#230bd7',
302
+ # 'open'=>true,
303
+ # 'anchor'=>'w',
304
+ # 'font' => @controller.conf('font.bold'),
305
+ # 'text' => "Class variables",
306
+ # 'window' => @b_class_onoff
307
+ # })
308
+
309
+
261
310
  @b_global_onoff = TkButton.new(@tree_var){
262
311
  image _i_off
263
312
  relief _b_relief
264
313
  state 'disabled'
265
314
  anchor 'nw'
266
315
  }.bind("1",proc{
267
- @global_on = !@global_on
268
- if @global_on
316
+ @global_state = bnext_state(@global_state)
317
+ if @global_state == B_STATE_ON
269
318
  @b_global_onoff.image(_i_on)
270
319
  command_enabled(false)
271
320
  Thread.new{
272
321
  update_variables('global_var', @controller.rdc.variables('global_variables')) #if @tree_var.open?('local_var')
273
322
  command_enabled(true)
274
323
  }
275
- else
324
+ elsif @global_state == B_STATE_FREEZE
325
+ @b_global_onoff.image(_i_freeze)
326
+ elsif @global_state == B_STATE_OFF
276
327
  @b_global_onoff.image(_i_off)
277
328
  @tree_var.delete(@tree_var.nodes('global_var'))
278
329
  end
@@ -368,8 +419,8 @@ class RubyDebugView
368
419
 
369
420
 
370
421
  def rdebug_client_update(_command, _result)
371
- #MsgContract.instance.out_debug(self,"on command #{_command}")
372
- return if !@controller.rdc.is_debugging_ready?
422
+ #Arcadia.new_debug_msg(self,"on command #{_command}")
423
+ return if @controller.rdc.nil? || !@controller.rdc.is_debugging_ready?
373
424
  begin
374
425
  if _command == 'quit'
375
426
  msg = "Really quit debug ? (y/n)"
@@ -388,16 +439,17 @@ class RubyDebugView
388
439
  elsif _command != 'where' && _command != 'quit_yes'
389
440
  begin
390
441
  update_position
391
- update_variables('local_var', @controller.rdc.variables('local_variables')) if @local_on
392
- update_variables('instance_var', @controller.rdc.variables('instance_variables')) if @instance_on
393
- #MsgContract.instance.out_debug(self,"on command #{_command}:global_variables")
394
- update_variables('global_var', @controller.rdc.variables('global_variables')) if @global_on
442
+ update_variables('local_var', @controller.rdc.variables('local_variables')) if @local_state == B_STATE_ON
443
+ update_variables('instance_var', @controller.rdc.variables('instance_variables')) if @instance_state == B_STATE_ON
444
+ #update_variables('class_var', @controller.rdc.variables('class_variables')) if @instance_on
445
+ #Arcadia.new_debug_msg(self,"on command #{_command}:global_variables")
446
+ update_variables('global_var', @controller.rdc.variables('global_variables')) if @global_state == B_STATE_ON
395
447
  ensure
396
- command_enabled(true) if @controller.rdc.is_debugging_ready? && (!_command.include?('quit') || _command.include?('quit_no'))
448
+ command_enabled(true) if !@controller.rdc.nil? && @controller.rdc.is_debugging_ready? && (!_command.include?('quit') || _command.include?('quit_no'))
397
449
  end
398
450
  end
399
451
  rescue Exception => e
400
- MsgContract.instance.out_debug(self,"on command #{_command}:#{e.inspect}")
452
+ Arcadia.new_debug_msg(self,"on command #{_command}:#{e.inspect}")
401
453
  end
402
454
  end
403
455
 
@@ -416,25 +468,17 @@ class RubyDebugView
416
468
 
417
469
  def update_position
418
470
  stack = @controller.rdc.where
419
- #MsgContract.instance.out_debug(self,stack)
471
+ #Arcadia.new_debug_msg(self,stack)
420
472
  if !stack.nil?
421
473
  stack = stack.split(/\n/)
422
474
  line_no = -1
423
475
  if !stack[0].nil?
424
476
  pos = match_position_from_stack(stack[0])
425
- #matchline = stack[0].match(/-->.#[0-9]*.*:([0-9]*)/)
426
- ##matchline = stack[0].match(/.*:([0-9]*)/)
427
- #line_no = matchline[1].to_i if !matchline.nil? && matchline.length==2
428
-
429
- #matchfile = stack[0].match(/-->.#[0-9]*.(.*):[0-9]*/)
430
- ##matchfile = stack[0].match(/.(.*):[0-9]*/)
431
-
432
- #filename = matchfile[1].to_s if !matchfile.nil? && matchfile.length==2
433
477
  end
434
478
  if pos.length > 0
435
- #MsgContract.instance.out_debug(self,"'file'=> #{pos[0]}, 'line'=>#{pos[1]}")
436
479
  _file = File.expand_path(pos[0])
437
- DebugContract.instance.debug_step(self, 'file'=> _file, 'line'=>pos[1])
480
+ Arcadia.broadcast_event(DebugStepInfoEvent.new(self,'file'=> _file, 'row'=>pos[1]))
481
+ #DebugContract.instance.debug_step(self, 'file'=> _file, 'line'=>pos[1])
438
482
  break_list_select(_file, pos[1].to_s)
439
483
  end
440
484
  i = 0
@@ -454,13 +498,8 @@ class RubyDebugView
454
498
  end
455
499
  end
456
500
 
457
- def is_simple_class?(_class)
458
- ['Numeric','Fixnum','String','FalseClass','TrueClass','NilClass'].include?(_class)
459
- # _class == Numeric || _class.superclass == Numeric ||
460
- # _class == String || _class.superclass == String ||
461
- # _class == FalseClass || _class.superclass == FalseClass||
462
- # _class == TrueClass || _class.superclass == TrueClass||
463
- # _class == NilClass || _class.superclass == NilClass
501
+ def is_simple_class?(_var)
502
+ ['Numeric','Fixnum','String','FalseClass','TrueClass','NilClass'].include?(_var.value_class) && !_var.value.to_s.strip.include?("\n")
464
503
  end
465
504
 
466
505
  def show_expression(_exp, _hash)
@@ -481,8 +520,11 @@ class RubyDebugView
481
520
  begin
482
521
  _var = var_name(_node)
483
522
  _o = @controller.rdc.debug_dump(_var)
484
- #@tree_var.delete(@tree_var.nodes(_node))
485
- var_deep(_node, _o)
523
+ if _o.class == Hash
524
+ var_deep(_node, _o)
525
+ else
526
+ var_deep_string(_node, _o)
527
+ end
486
528
  ensure
487
529
  command_enabled(true)
488
530
  end
@@ -494,14 +536,20 @@ class RubyDebugView
494
536
  # @tree_var.itemconfigure(_var, 'text' => "#{_var_cla}:#{_var_len}")
495
537
  return nil if _hash.nil?
496
538
  return _hash.to_s if _hash.class != Hash
497
- _hash.keys.sort.each{|k|
539
+ if _hash['__CLASS__']=='Array'
540
+ _sorted_keys = _hash.keys.collect!{|x| x.to_i}.sort.collect!{|x| x.to_s}
541
+ else
542
+ _sorted_keys = _hash.keys.sort
543
+ end
544
+ _sorted_keys.each{|k|
545
+ #_hash.keys.sort.each{|k|
498
546
  v = _hash[k]
499
547
  next if k=='__CLASS__'
500
548
  _complex = v.class == Hash
501
549
  if _complex
502
550
  _text = var_format(k,v['__CLASS__'])
503
551
  elsif (k=='__LENGTH__') && v=='0'
504
- _text = '{...}'
552
+ _text = '{}'
505
553
  elsif (k=='__LENGTH__') && v!='0'
506
554
  next
507
555
  else
@@ -521,6 +569,23 @@ class RubyDebugView
521
569
  var_deep(_node,v) if _complex
522
570
  }
523
571
  end
572
+
573
+ def var_deep_string(_var, _str)
574
+ @tree_var.delete(@tree_var.nodes(_var))
575
+ return nil if _str.nil?
576
+ _str = _str.to_s if !_str.kind_of?(String)
577
+ a_str = _str.split("\n")
578
+ a_str.each_with_index{|v,i|
579
+ _node = node_name(i.to_s, _var)
580
+ @tree_var.insert('end', _var ,_node, {
581
+ 'font' => @controller.conf('font'),
582
+ 'text' => v,
583
+ 'fill' => '#79ca77',
584
+ 'anchor'=>'w'
585
+ })
586
+ }
587
+ end
588
+
524
589
 
525
590
  def var_format(_name, _class, _value=nil)
526
591
  if !_value.nil? && !_class.nil?
@@ -530,7 +595,7 @@ class RubyDebugView
530
595
  elsif !_value.nil? && _class.nil?
531
596
  return "#{_name.to_s.strip} => #{_value.to_s.strip}"
532
597
  elsif _value.nil? && _class.nil?
533
- return "#{_name.to_s.strip} => {...}"
598
+ return "#{_name.to_s.strip} => {}"
534
599
  end
535
600
  end
536
601
 
@@ -545,13 +610,13 @@ class RubyDebugView
545
610
  end
546
611
 
547
612
  def command_enabled(_value)
548
- #MsgContract.instance.out_debug(self,"command_enabled= #{_value.to_s}")
549
-
613
+ #Arcadia.new_debug_msg(self,"command_enabled= #{_value.to_s}")
550
614
  @c_on = _value
551
615
  _value ? _state = 'normal':_state = 'disabled'
552
616
  @debug_button_box.configure(:state=>_state)
553
617
  @b_local_onoff.configure(:state=>_state)
554
618
  @b_instance_onoff.configure(:state=>_state)
619
+ #@b_class_onoff.configure(:state=>_state)
555
620
  @b_global_onoff.configure(:state=>_state)
556
621
  Tk.update
557
622
  end
@@ -560,25 +625,32 @@ class RubyDebugView
560
625
  if _var.keys.sort == @tree_var.nodes(_parent_node).collect! {|x| var_name(x).to_s}.sort
561
626
  _var.each{|k,v|
562
627
  _n = node_name(k, _parent_node)
563
- if is_simple_class?(v.value_class)
628
+ if is_simple_class?(v)
564
629
  _text = var_format(k,v.value_class,v.value)
630
+ _drawcross = 'auto'
565
631
  else
566
632
  _text = var_format(k,v.value_class)
633
+ _drawcross = 'always'
634
+ @nodes_to_open << _n if !@nodes_to_open.include?(_n)
635
+ inspect_node(_n) if bool(@tree_var.itemcget(@tree_var.tagid(_n), 'open'))
567
636
  end
568
- _node = @tree_var.itemconfigure(_n, 'text' => _text)
637
+ _node = @tree_var.itemconfigure(_n,
638
+ 'text' => _text,
639
+ 'helptext' => v.value,
640
+ 'drawcross' => _drawcross
641
+ )
569
642
  }
570
643
  else
571
644
  @nodes_to_open.clear
572
645
  @tree_var.delete(@tree_var.nodes(_parent_node))
573
646
  #@nodes[_parent_node].clear
574
- _var.each{|k,v|
647
+ _var.keys.sort.each{|k|
648
+ v = _var[k]
575
649
  _n = node_name(k, _parent_node)
576
- if is_simple_class?(v.value_class)
577
- #MsgContract.instance.out_simple(self,"#{k} : simple")
650
+ if is_simple_class?(v)
578
651
  _text = var_format(k,v.value_class,v.value)
579
652
  _drawcross = 'auto'
580
653
  else
581
- #MsgContract.instance.out_simple(self,"#{k} : complex")
582
654
  _text = var_format(k,v.value_class)
583
655
  _drawcross = 'always'
584
656
  @nodes_to_open << _n
@@ -589,9 +661,7 @@ class RubyDebugView
589
661
  'helptext' => v.value,
590
662
  'drawcross' => _drawcross,
591
663
  'anchor'=>'w'
592
- # 'deltax' => 1
593
664
  })
594
- #@nodes[_parent_node] << k
595
665
  }
596
666
  end
597
667
  Tk.update
@@ -602,10 +672,13 @@ class RubyDebugView
602
672
  begin
603
673
  command_enabled(false)
604
674
  #@debug_button_box.configure(:state=>'disabled')
605
- Thread.new{@controller.rdc.send(_command)}
675
+ Thread.new do
676
+ Arcadia.process_event(StepDebugEvent.new(self, 'command'=>_command))
677
+ #@controller.rdc.send(_command)
678
+ end
606
679
  #@controller.rdc.send(_command)
607
680
  rescue Exception => e
608
- MsgContract.instance.out_debug(self,"---> "+e.to_s)
681
+ Arcadia.new_debug_msg(self,"---> "+e.to_s)
609
682
  end
610
683
  end
611
684
  end
@@ -616,11 +689,23 @@ end
616
689
 
617
690
  class RubyDebugServer
618
691
  include Observable
692
+ attr_accessor :quit_confirm_request
619
693
  RDS_QUIET = 'RDS_QUIET'
620
- def initialize(_caller)
694
+ def initialize(_caller, _arcadia=nil)
621
695
  if _caller.respond_to? :rdebug_server_update
622
696
  ObserverCallback.new(self,_caller,:rdebug_server_update)
623
697
  end
698
+ @arcadia = _arcadia
699
+ @quit_confirm_request = false
700
+ end
701
+
702
+ def start_session_new(_filename, _host='localhost', _remote_port='8989')
703
+ if is_windows?
704
+ commandLine = "rdebug.cmd --host #{_host} --port #{_remote_port} -sw #{_filename}"
705
+ else
706
+ commandLine = "rdebug --host #{_host} --port #{_remote_port} -sw #{_filename}"
707
+ end
708
+ Arcadia.process_event(SystemExecEvent.new(self, 'command'=>commandLine))
624
709
  end
625
710
 
626
711
  def start_session(_filename, _host='localhost', _remote_port='8989')
@@ -629,23 +714,35 @@ class RubyDebugServer
629
714
  else
630
715
  commandLine = "rdebug --host #{_host} --port #{_remote_port} -sw #{_filename}"
631
716
  end
632
- #MsgContract.instance.out_debug(self,commandLine)
633
717
  begin
634
718
  if is_windows?
635
719
  @tid = Thread.new {
636
- Kernel.system(commandLine)
637
- Kernel.system('y')
720
+ if Kernel.system(commandLine)
721
+ Kernel.system('y')
722
+ else
723
+ if @quit_confirm_request
724
+ Arcadia.new_msg(self,"#{$?.inspect}")
725
+ else
726
+ _event = Arcadia.process_event(RunRubyFileEvent.new(self, 'file'=>_filename))
727
+ Arcadia.new_debug_msg(self,"#{_event.results[0].output}")
728
+ end
729
+ end
638
730
  notify(RDS_QUIET)
639
731
  }
640
732
  else
641
733
  @pid = Process.fork {
642
- Kernel.system(commandLine)
643
- Kernel.exit!
734
+ if Kernel.system(commandLine)
735
+ Kernel.system('y')
736
+ else
737
+ Kernel.exit!
738
+ Arcadia.new_debug_msg(self,"#{$?.inspect}")
739
+ end
740
+ Process.wait
644
741
  notify(RDS_QUIET)
645
742
  }
646
743
  end
647
744
  rescue Exception => e
648
- MsgContract.instance.out_debug(self,"Error on start_server : #{e.class}:#{e.message}")
745
+ Arcadia.new_debug_msg(self,"Error on start_server : #{e.class}:#{e.message}")
649
746
  end
650
747
  end
651
748
 
@@ -659,13 +756,12 @@ class RubyDebugServer
659
756
  end
660
757
  notify(RDS_QUIET)
661
758
  rescue Exception => e
662
- MsgContract.instance.out_debug(self,"Error on start_server : #{e.class}:#{e.message}")
759
+ Arcadia.new_debug_msg(self,"Error on start_server : #{e.class}:#{e.message}")
663
760
  end
664
761
  end
665
762
 
666
763
  def is_windows?
667
764
  !(RUBY_PLATFORM =~ /(win|w)32$/).nil?
668
- #RUBY_PLATFORM.include?('win')
669
765
  end
670
766
 
671
767
  def notify(_state)
@@ -772,7 +868,7 @@ class RubyDebugClient
772
868
  end
773
869
 
774
870
  def notify(_command, _result=nil)
775
- #MsgContract.instance.out_debug(self,"notify=>#{_command}")
871
+ #Arcadia.new_debug_msg(self,"notify=>#{_command}")
776
872
  @busy = false
777
873
  changed
778
874
  notify_observers(_command, _result)
@@ -792,6 +888,7 @@ class RubyDebugClient
792
888
  end
793
889
 
794
890
  def socket_session
891
+ #Arcadia.new_debug_msg(self,"socket_session : passo")
795
892
  if @session.nil?
796
893
  begin
797
894
  #sleep(2)
@@ -803,11 +900,11 @@ class RubyDebugClient
803
900
  if @t > 0
804
901
  socket_session
805
902
  else
806
- MsgContract.instance.out_debug(self,"socket_session : #{e.inspect}")
903
+ Arcadia.new_debug_msg(self,"socket_session : #{e.inspect}")
807
904
  end
808
905
  end
809
906
  end
810
- #MsgContract.instance.out_debug(self,"session : #{@session.inspect}")
907
+ #Arcadia.new_debug_msg(self,"session : #{@session.inspect}")
811
908
  return @session
812
909
  end
813
910
 
@@ -816,7 +913,7 @@ class RubyDebugClient
816
913
  @session.close if is_alive?
817
914
  @session = nil
818
915
  rescue Exception => e
819
- MsgContract.instance.out_debug(self,"Error on close session : #{e.class}:#{e.message}")
916
+ Arcadia.new_debug_msg(self,"Error on close session : #{e.class}:#{e.message}")
820
917
  end
821
918
  end
822
919
 
@@ -824,13 +921,13 @@ class RubyDebugClient
824
921
  begin
825
922
  @t = @timeout
826
923
  if socket_session
827
- #MsgContract.instance.out_debug(self,"session : #{@session.inspect}")
924
+ #Arcadia.new_debug_msg(self,"session : #{@session.inspect}")
828
925
  notify('start', read)
829
926
  read("eval require 'yaml'")
830
927
  end
831
928
  return @session
832
929
  rescue Exception => e
833
- MsgContract.instance.out_debug(self,"Error on start_session : #{e.class}:#{e.message}")
930
+ Arcadia.new_debug_msg(self,"Error on start_session : #{e.class}:#{e.message}")
834
931
  end
835
932
  end
836
933
 
@@ -839,13 +936,13 @@ class RubyDebugClient
839
936
  quit if is_debugging_ready?
840
937
  @session.close if is_alive?
841
938
  rescue Exception => e
842
- MsgContract.instance.out_debug(self,"Error on stop_session : #{e.class}:#{e.inspect}")
939
+ Arcadia.new_debug_msg(self,"Error on stop_session : #{e.class}:#{e.inspect}")
843
940
  end
844
941
  end
845
942
 
846
943
  # send a command to the debugger via socket
847
944
  def command(_command)
848
- #MsgContract.instance.out_debug(self,"command=>#{_command}")
945
+ #Arcadia.new_debug_msg(self,"command=>#{_command}")
849
946
  begin
850
947
  return false if @busy
851
948
  if is_alive?
@@ -856,16 +953,15 @@ class RubyDebugClient
856
953
  end
857
954
  true
858
955
  rescue Errno::ECONNABORTED => e
859
- #kill
860
956
  notify("quit_yes")
861
- DebugContract.instance.debug_end(self)
862
- MsgContract.instance.out_debug(self,"Debugged has finished executing")
957
+ #DebugContract.instance.debug_end(self)
958
+ Arcadia.new_debug_msg(self,"Debugger has finished executing:\n #{e.class}:#{e.inspect}")
863
959
  @session = nil
864
960
  @pend = true
865
961
  false
866
962
  #raise RubyDebugException.new("Debugged has finished executing")
867
963
  rescue Exception => e
868
- MsgContract.instance.out_debug(self,"Error on command #{_command}: #{e.class}:#{e.inspect}")
964
+ Arcadia.new_debug_msg(self,"Error on command #{_command}: #{e.class}:#{e.inspect}")
869
965
  false
870
966
  end
871
967
  end
@@ -876,12 +972,11 @@ class RubyDebugClient
876
972
  socket_session.flush
877
973
  result = ""
878
974
  while _command !='y' && is_alive? && line = socket_session.gets
879
- #MsgContract.instance.out_debug(self, "read: letta riga => #{line}")
975
+ #Arcadia.new_debug_msg(self, "read: letta riga => #{line}")
880
976
  break if line =~ /^PROMPT (.*)$/ || line =~ /.(y\/n)./
881
977
  result << line
882
978
  #break if _command =~ /^eval./
883
979
  end
884
- #MsgContract.instance.out_simple(self, "read(#{_command}): result => #{result}")
885
980
  @busy = false
886
981
  result
887
982
 
@@ -921,7 +1016,7 @@ class RubyDebugClient
921
1016
 
922
1017
  def quit_yes
923
1018
  notify("quit_yes", read("y"))
924
- DebugContract.instance.debug_end(self)
1019
+ #DebugContract.instance.debug_end(self)
925
1020
  kill
926
1021
  end
927
1022
 
@@ -936,11 +1031,9 @@ class RubyDebugClient
936
1031
 
937
1032
 
938
1033
  def yaml_pseudo_load(_obj)
939
- #MsgContract.instance.out_simple(self,"_obj="+_obj.inspect)
940
1034
  just_present = @valuobjs.include?(_obj)
941
1035
  @valuobjs << _obj
942
1036
  if _obj.class == YAML::DomainType
943
- #MsgContract.instance.out_simple(self,"_obj DomainType="+_obj.inspect)
944
1037
  return _obj.type_id if just_present
945
1038
  ret = Hash.new
946
1039
  ret['__CLASS__']=_obj.type_id
@@ -953,7 +1046,7 @@ class RubyDebugClient
953
1046
  end
954
1047
  ret
955
1048
  elsif _obj.class == Hash
956
- #MsgContract.instance.out_simple(self,"_obj Hash="+_obj.inspect)
1049
+ #Arcadia.new_msg(self,"_obj Hash="+_obj.inspect)
957
1050
  return 'Hash' if just_present
958
1051
  ret = Hash.new
959
1052
  ret['__CLASS__']= 'Hash'
@@ -966,7 +1059,7 @@ class RubyDebugClient
966
1059
  end
967
1060
  ret
968
1061
  elsif _obj.class == Array
969
- #MsgContract.instance.out_simple(self,"_obj Array="+_obj.inspect)
1062
+ #Arcadia.new_msg(self,"_obj Array="+_obj.inspect)
970
1063
  return 'Array' if just_present
971
1064
  ret = Hash.new
972
1065
  ret['__CLASS__']= 'Array'
@@ -979,7 +1072,7 @@ class RubyDebugClient
979
1072
  end
980
1073
  ret
981
1074
  elsif _obj.class == Struct
982
- #MsgContract.instance.out_simple(self,"_obj Array="+_obj.inspect)
1075
+ #Arcadia.new_msg(self,"_obj Array="+_obj.inspect)
983
1076
  return 'Struct' if just_present
984
1077
  ret = Hash.new
985
1078
  ret['__CLASS__']= 'Struct'
@@ -993,7 +1086,7 @@ class RubyDebugClient
993
1086
  end
994
1087
  ret
995
1088
  else
996
- #MsgContract.instance.out_simple(self,"_obj ="+_obj.inspect)
1089
+ #Arcadia.new_msg(self,"_obj ="+_obj.inspect)
997
1090
 
998
1091
  _obj
999
1092
  end
@@ -1009,14 +1102,20 @@ class RubyDebugClient
1009
1102
  @valuobjs.clear
1010
1103
  end
1011
1104
  begin
1012
- _str = eval(read("eval YAML::dump(#{_exp})"))
1013
- #MsgContract.instance.out_simple(self,"value passato 1 ="+_str.to_s)
1014
- _str.gsub!('!ruby/object:', '!')
1015
- #MsgContract.instance.out_simple(self,"value passato 2 ="+_str.to_s)
1016
- _obj = YAML::load(_str)
1017
- var = yaml_pseudo_load(_obj)
1105
+ _to_eval = read("eval YAML::dump(#{_exp})")
1106
+ if _to_eval.include?('Exception:')
1107
+ _to_eval = read("eval require 'pp';eval #{_exp}.pretty_inspect")
1108
+ var = eval(_to_eval)
1109
+ #var = "?"
1110
+ else
1111
+ _str = eval(_to_eval)
1112
+ _str.gsub!('!ruby/object:', '!')
1113
+ _obj = YAML::load(_str)
1114
+ var = yaml_pseudo_load(_obj)
1115
+ end
1018
1116
  rescue Exception => e
1019
- MsgContract.instance.out_simple(self,"exception on eval #{_exp} :#{e.inspect}")
1117
+ Arcadia.new_msg(self,"exception on eval #{_exp} :#{e.inspect}")
1118
+ #Arcadia.new_msg(self,"exception on eval #{_exp} :#{e.inspect}")
1020
1119
  var = nil
1021
1120
  end
1022
1121
  return var
@@ -1039,11 +1138,11 @@ class RubyDebugClient
1039
1138
  # command("eval require 'pp'; #{var}.pretty_inspect() + '|||' + #{var}.class.to_s")
1040
1139
  command("eval YAML::dump(#{var})")
1041
1140
  _str = eval read
1042
- #MsgContract.instance.out_simple(self,"value passato 1 ="+_str)
1141
+ #Arcadia.new_msg(self,"value passato 1 ="+_str)
1043
1142
 
1044
1143
  _str.gsub!('!ruby/object:', '!')
1045
1144
 
1046
- #MsgContract.instance.out_simple(self,"value passato 2 ="+_str)
1145
+ #Arcadia.new_msg(self,"value passato 2 ="+_str)
1047
1146
 
1048
1147
  _obj = YAML::load(_str)
1049
1148
 
@@ -1055,10 +1154,10 @@ class RubyDebugClient
1055
1154
  end
1056
1155
  #_vvv = eval(_value)
1057
1156
 
1058
- #MsgContract.instance.out_simple(self,"vvv class="+_vvv.class.to_s)
1157
+ #Arcadia.new_msg(self,"vvv class="+_vvv.class.to_s)
1059
1158
 
1060
- #MsgContract.instance.out_simple(self,"value="+_xvalue.inspect)
1061
- #MsgContract.instance.out_simple(self,"class="+_xclass)
1159
+ #Arcadia.new_msg(self,"value="+_xvalue.inspect)
1160
+ #Arcadia.new_msg(self,"class="+_xclass)
1062
1161
  variable_values[var] = Var.new(_xvalue, _xclass)
1063
1162
  end
1064
1163
  return variable_values
@@ -1069,13 +1168,13 @@ class RubyDebugClient
1069
1168
  begin
1070
1169
  #variables = read[1..-2].split(', ').collect!{|x| x[1..-2]}
1071
1170
  to_eval = read("eval #{_type}")
1072
- #MsgContract.instance.out_simple(self,"to_eval="+to_eval.to_s)
1171
+ #Arcadia.new_msg(self,"to_eval="+to_eval.to_s)
1073
1172
  variables = eval(to_eval)
1074
- #MsgContract.instance.out_simple(self,"variables="+variables.to_s)
1173
+ #Arcadia.new_msg(self,"variables="+variables.to_s)
1075
1174
  rescue Exception => e
1076
1175
  variables = []
1077
1176
  #p "on command eval #{_type}:#{e.inspect}"
1078
- #MsgContract.instance.out_debug(self,"on command eval #{_type}:#{e.inspect}")
1177
+ #Arcadia.new_debug_msg(self,"on command eval #{_type}:#{e.inspect}")
1079
1178
  end
1080
1179
  variables = [] if variables.nil?
1081
1180
  variable_values = Hash.new
@@ -1150,30 +1249,67 @@ class RubyDebugClient
1150
1249
  end
1151
1250
 
1152
1251
  class RubyDebug < ArcadiaExt
1252
+ include Autils
1153
1253
  attr_reader :rds
1154
1254
  attr_reader :rdc
1155
- def before_build
1156
- ArcadiaContractListener.new(self, EditorContract, :do_editor_event)
1157
- @breakpoints = Hash.new
1158
- @static_breakpoints = Array.new
1255
+ def on_before_build(_event)
1256
+ if !full_in_path_command('rdebug').nil?
1257
+ #ArcadiaContractListener.new(self, EditorContract, :do_editor_event)
1258
+ Arcadia.add_listener(self, BufferEvent)
1259
+ @breakpoints = Hash.new
1260
+ @static_breakpoints = Array.new
1261
+ else
1262
+ Arcadia.new_error_msg(self, "Warning: Extension ae-ruby-debug depend upon rdebug command (install it or update system path!)")
1263
+ end
1159
1264
  end
1160
-
1161
- def build
1162
- end
1163
-
1164
- def do_editor_event(_event)
1165
- case _event.signature
1166
- when EditorContract::BREAKPOINT_AFTER_CREATE
1167
- self.breakpoint_add(File.expand_path(_event.context.file), _event.context.line)
1168
- when EditorContract::BREAKPOINT_AFTER_DELETE
1169
- self.breakpoint_del(File.expand_path(_event.context.file), _event.context.line)
1170
- when EditorContract::BUFFER_AFTER_RAISE
1171
- @raised_file=_event.context.file
1172
- when EditorContract::EVAL_EXPRESSION
1173
- eval_expression(_event.context.text)
1265
+
1266
+ def on_build(_event)
1267
+ Arcadia.add_listener(self, DebugEvent)
1268
+ end
1269
+
1270
+ def on_buffer(_event)
1271
+ case _event
1272
+ when BufferRaisedEvent
1273
+ @raised_file=_event.file
1174
1274
  end
1175
1275
  end
1176
1276
 
1277
+ def on_debug(_event)
1278
+ case _event
1279
+ when StartDebugEvent
1280
+ _filename = _event.file
1281
+ _filename = @arcadia['pers']['run.file.last'] if _filename == "*LAST"
1282
+ debug(_filename)
1283
+ when StepDebugEvent
1284
+ if (_event.command == :quit_yes)
1285
+ @rds.quit_confirm_request = true
1286
+ end
1287
+ @rdc.send(_event.command) if @rdc.is_alive?
1288
+ when SetBreakpointEvent
1289
+ self.breakpoint_add(File.expand_path(_event.file), _event.row)
1290
+ when UnsetBreakpointEvent
1291
+ self.breakpoint_del(File.expand_path(_event.file), _event.row)
1292
+ when EvalExpressionEvent
1293
+ eval_expression(_event.expression)
1294
+ when StopDebugEvent
1295
+ self.debug_quit
1296
+ end
1297
+ end
1298
+
1299
+
1300
+ # def do_editor_event(_event)
1301
+ # case _event.signature
1302
+ # when EditorContract::BREAKPOINT_AFTER_CREATE
1303
+ # self.breakpoint_add(File.expand_path(_event.context.file), _event.context.line)
1304
+ # when EditorContract::BREAKPOINT_AFTER_DELETE
1305
+ # self.breakpoint_del(File.expand_path(_event.context.file), _event.context.line)
1306
+ # when EditorContract::BUFFER_AFTER_RAISE
1307
+ # @raised_file=_event.context.file
1308
+ # when EditorContract::EVAL_EXPRESSION
1309
+ # eval_expression(_event.context.text)
1310
+ # end
1311
+ # end
1312
+
1177
1313
  def eval_expression(_exp)
1178
1314
  res = @rdc.debug_eval(_exp) if @rdc && @rdc.is_debugging_ready?
1179
1315
  hash = Hash.new
@@ -1200,14 +1336,14 @@ class RubyDebug < ArcadiaExt
1200
1336
  end
1201
1337
 
1202
1338
  def breakpoint_add_live(_file,_line)
1203
- if @rdc
1339
+ if @rdc && @rdc.is_alive?
1204
1340
  @breakpoints[breakpoint_suf(_file,_line)] = @rdc.set_breakpoint(_file, _line.to_i)
1205
1341
  @rdv.break_list_add(_file,_line) if @rdv
1206
1342
  end
1207
1343
  end
1208
1344
 
1209
1345
  def breakpoint_del_live(_file,_line)
1210
- if @rdc
1346
+ if @rdc && @rdc.is_alive?
1211
1347
  @rdc.unset_breakpoint(@breakpoints.delete(breakpoint_suf(_file,_line)))
1212
1348
  @rdv.break_list_del(_file,_line) if @rdv
1213
1349
  end
@@ -1247,55 +1383,55 @@ class RubyDebug < ArcadiaExt
1247
1383
  end
1248
1384
  end
1249
1385
 
1250
-
1251
-
1252
- def debug_begin
1253
- breakpoint_free_live
1254
- DebugContract.instance.debug_begin(self)
1255
- end
1256
-
1257
1386
  def debug_last
1258
- debug($arcadia['pers']['run.file.last'])
1387
+ Arcadia.process_event(StartDebugEvent.new(self, 'file'=>$arcadia['pers']['run.file.last']))
1388
+ #debug($arcadia['pers']['run.file.last'])
1259
1389
  end
1260
1390
 
1261
1391
  def debug_current
1262
- debug(@raised_file) if @raised_file!=nil
1392
+ Arcadia.process_event(StartDebugEvent.new(self, 'file'=>@raised_file)) if @raised_file!=nil
1393
+ #debug(@raised_file) if @raised_file!=nil
1263
1394
  end
1264
1395
  def debugging?
1265
1396
  !@rdc.nil? && @rdc.is_alive?
1266
1397
  end
1398
+
1399
+ def debug_begin
1400
+ breakpoint_free_live
1401
+ #DebugContract.instance.debug_begin(self)
1402
+ end
1403
+
1267
1404
  def debug(_filename=nil)
1268
1405
  if _filename && !debugging?
1269
1406
  begin
1270
1407
  self.debug_begin
1271
1408
  @arcadia['pers']['run.file.last']=_filename
1272
- @rds = RubyDebugServer.new(self) if @rds.nil?
1409
+ @rds = RubyDebugServer.new(self,@arcadia) if @rds.nil?
1273
1410
  @rds.start_session(_filename, conf('server.host'), conf('server.port'))
1274
- #MsgContract.instance.out_simple(self,@rds.to_s)
1411
+ #Arcadia.new_msg(self,@rds.to_s)
1275
1412
  @rdc = RubyDebugClient.new(conf('server.host'), conf('server.port'), conf('server.timeout')) if @rdc.nil?
1276
1413
  @rdv = RubyDebugView.new(self.frame, self) if @rdv.nil?
1277
1414
  @rdv.start_process(_filename)
1278
1415
  if @rdc.start_session
1279
1416
  @static_breakpoints.each{|_b|
1280
- #MsgContract.instance.out_simple(self," breakpoint_add #{_b[:file]}:#{_b[:line]}")
1417
+ #Arcadia.new_msg(self," breakpoint_add #{_b[:file]}:#{_b[:line]}")
1281
1418
  breakpoint_add_live(_b[:file], _b[:line])
1282
1419
  }
1283
1420
  end
1284
- #MsgContract.instance.out_simple(self,"\n<begin debug>")
1421
+ #Arcadia.new_msg(self,"\n<begin debug>")
1285
1422
 
1286
1423
  rescue Exception => e
1287
- MsgContract.instance.out_debug(self,"---> "+e.to_s)
1424
+ Arcadia.new_debug_msg(self,"---> "+e.to_s)
1288
1425
  end
1289
1426
  end
1290
1427
  end
1291
1428
 
1292
-
1293
1429
  def rdebug_server_update(_state)
1294
1430
  case _state
1295
- when RubyDebugServer::_RDS_QUIT_
1296
- debug_quit
1431
+ when RubyDebugServer::RDS_QUIET
1432
+ #debug_free
1297
1433
  end
1298
- p _state
1434
+ #p _state
1299
1435
  end
1300
1436
 
1301
1437
  def debug_free
@@ -1317,7 +1453,7 @@ class RubyDebug < ArcadiaExt
1317
1453
  begin
1318
1454
  debug_free
1319
1455
  rescue Exception => e
1320
- MsgContract.instance.out_debug(self, "debug_quit:---> "+e.to_s)
1456
+ Arcadia.new_debug_msg(self, "debug_quit:---> "+e.to_s)
1321
1457
  #@arcadia['shell'].outln("debug_quit:---> "+e.to_s )
1322
1458
  end
1323
1459
  end