arcadia 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +122 -0
- data/arcadia.rb +748 -0
- data/base/a-contracts.rb +253 -0
- data/base/a-ext.rb +360 -0
- data/base/a-libs.rb +852 -0
- data/base/a-utils.rb +780 -0
- data/conf/arcadia.conf +198 -0
- data/conf/arcadia.init.rb +13 -0
- data/conf/arcadia.res.rb +1211 -0
- data/ext/ae-debug/ae-debug.conf +7 -0
- data/ext/ae-debug/ae-debug.rb +582 -0
- data/ext/ae-debug/debug1.57.rb +998 -0
- data/ext/ae-editor/ae-editor.conf +92 -0
- data/ext/ae-editor/ae-editor.rb +1744 -0
- data/ext/ae-event-log/ae-event-log.conf +5 -0
- data/ext/ae-event-log/ae-event-log.rb +44 -0
- data/ext/ae-file-history/ae-file-history.conf +17 -0
- data/ext/ae-file-history/ae-file-history.rb +280 -0
- data/ext/ae-inspector/ae-inspector.conf +7 -0
- data/ext/ae-inspector/ae-inspector.rb +1519 -0
- data/ext/ae-output-event/ae-output-event.conf +15 -0
- data/ext/ae-output/ae-output.conf +14 -0
- data/ext/ae-output/ae-output.rb +162 -0
- data/ext/ae-palette/ae-palette.conf +7 -0
- data/ext/ae-palette/ae-palette.rb +319 -0
- data/ext/ae-shell/ae-shell.conf +11 -0
- data/ext/ae-shell/ae-shell.rb +54 -0
- data/lib/tk/al-tk.rb +3078 -0
- data/lib/tk/al-tk.res.rb +217 -0
- data/lib/tk/al-tkarcadia.rb +26 -0
- data/lib/tk/al-tkcustom.rb +70 -0
- data/lib/tkext/al-bwidget.rb +194 -0
- data/lib/tkext/al-iwidgets.rb +25 -0
- data/lib/tkext/al-tile.rb +173 -0
- data/lib/tkext/al-tktable.rb +48 -0
- metadata +90 -0
data/base/a-contracts.rb
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
#
|
2
|
+
# a-contracts.rb - Arcadia Ruby ide
|
3
|
+
# by Antonio Galeone <antonio-galeone@rubyforge.org>
|
4
|
+
#
|
5
|
+
|
6
|
+
# Catalog of all contracts used by exstension. This astraction guarantees
|
7
|
+
# the separation of ext
|
8
|
+
# contract must extend AeContract
|
9
|
+
|
10
|
+
require "base/a-ext"
|
11
|
+
|
12
|
+
#---------------- contracts ----------------------
|
13
|
+
class MainContract < ArcadiaContract
|
14
|
+
class TMainObj < TObj
|
15
|
+
attr_accessor :obj, :domain, :extension
|
16
|
+
end
|
17
|
+
|
18
|
+
EXTENSION_BEFORE_BUILD = "EXTENSION_BEFORE_BUILD"
|
19
|
+
EXTENSION_BUILD = "EXTENSION_BUILD"
|
20
|
+
EXTENSION_AFTER_BUILD = "EXTENSION_AFTER_BUILD"
|
21
|
+
EXTENSION_FINALIZE = "EXTENSION_FINALIZE"
|
22
|
+
CONTRACT_RETRIVE = "CONTRACT_RETRIVE"
|
23
|
+
RAISE_EXTENSION = "RAISE_EXTENSION"
|
24
|
+
|
25
|
+
def extension_before_build(_tobj)
|
26
|
+
raise_event(EXTENSION_BEFORE_BUILD, _tobj)
|
27
|
+
end
|
28
|
+
|
29
|
+
def extension_build(_tobj)
|
30
|
+
raise_event(EXTENSION_BUILD, _tobj)
|
31
|
+
end
|
32
|
+
|
33
|
+
def extension_after_build(_tobj)
|
34
|
+
raise_event(EXTENSION_AFTER_BUILD, _tobj)
|
35
|
+
end
|
36
|
+
|
37
|
+
def raise_extension(_tobj)
|
38
|
+
raise_action(RAISE_EXTENSION, _tobj)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
class EditorContract < ArcadiaContract
|
45
|
+
class TEditorObj < TObj
|
46
|
+
attr_accessor :file, :line, :col, :title, :text
|
47
|
+
end
|
48
|
+
OPEN_FILE = "OPEN_FILE"
|
49
|
+
CLOSE_FILE = "CLOSE_FILE"
|
50
|
+
OPEN_TEXT = "OPEN_TEXT"
|
51
|
+
|
52
|
+
AFTER_CREATE = "AFTER_CREATE"
|
53
|
+
BREAKPOINT_AFTER_CREATE = "BREAKPOINT_AFTER_CREATE"
|
54
|
+
BREAKPOINT_AFTER_DELETE = "BREAKPOINT_AFTER_DELETE"
|
55
|
+
BREAKPOINTS_AFTER_CREATE = "BREAKPOINTS_AFTER_CREATE"
|
56
|
+
BREAKPOINTS_AFTER_DELETE = "BREAKPOINTS_AFTER_DELETE"
|
57
|
+
FILE_AFTER_OPEN = "FILE_AFTER_OPEN"
|
58
|
+
FILE_AFTER_CLOSE = "FILE_AFTER_CLOSE"
|
59
|
+
BUFFER_AFTER_RAISE = "BUFFER_AFTER_RAISE"
|
60
|
+
|
61
|
+
def open_file(_tobj)
|
62
|
+
raise_action(OPEN_FILE, _tobj)
|
63
|
+
end
|
64
|
+
|
65
|
+
def close_file(_tobj)
|
66
|
+
raise_action(CLOSE_FILE, _tobj)
|
67
|
+
end
|
68
|
+
|
69
|
+
def open_text(_tobj)
|
70
|
+
raise_action(OPEN_TEXT, _tobj)
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
def file_opened(_tobj=nil)
|
75
|
+
raise_event(FILE_AFTER_OPEN, _tobj)
|
76
|
+
end
|
77
|
+
|
78
|
+
def buffer_raised(_tobj=nil)
|
79
|
+
raise_event(BUFFER_AFTER_RAISE, _tobj)
|
80
|
+
end
|
81
|
+
|
82
|
+
def file_closed(_tobj=nil)
|
83
|
+
raise_event(FILE_AFTER_CLOSE, _tobj)
|
84
|
+
end
|
85
|
+
|
86
|
+
def breakpoint_created(_tobj=nil)
|
87
|
+
raise_event(BREAKPOINT_AFTER_CREATE, _tobj)
|
88
|
+
end
|
89
|
+
|
90
|
+
def breakpoint_deleted(_tobj=nil)
|
91
|
+
raise_event(BREAKPOINT_AFTER_DELETE, _tobj)
|
92
|
+
end
|
93
|
+
def breakpoints_created(_array_of_tobj=nil)
|
94
|
+
raise_event(BREAKPOINTS_AFTER_CREATE, _array_of_tobj)
|
95
|
+
end
|
96
|
+
def breakpoints_deleted(_array_of_tobj=nil)
|
97
|
+
raise_event(BREAKPOINTS_AFTER_DELETE, _array_of_tobj)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class MsgContract < ArcadiaContract
|
102
|
+
TYPE_SIMPLE = "TYPE_SIMPLE"
|
103
|
+
TYPE_DEBUG = "TYPE_DEBUG"
|
104
|
+
SObj = Struct.new("MsgState"
|
105
|
+
)
|
106
|
+
class TMsgObj < TObj
|
107
|
+
attr_accessor :type, :text
|
108
|
+
end
|
109
|
+
|
110
|
+
EVENT_EXT_MSG_OUT = "EVENT_EXT_MSG_OUT"
|
111
|
+
def out(_tobj)
|
112
|
+
raise_event(EVENT_EXT_MSG_OUT, _tobj)
|
113
|
+
end
|
114
|
+
|
115
|
+
def out_simple(_sender, _msg, _channel=nil)
|
116
|
+
_tobj = TMsgObj.new(_sender, 'channel'=>_channel)
|
117
|
+
_tobj.type = TYPE_SIMPLE
|
118
|
+
_tobj.text = _msg
|
119
|
+
self.out(_tobj)
|
120
|
+
end
|
121
|
+
|
122
|
+
def out_debug(_sender, _msg, _channel=nil)
|
123
|
+
_tobj = TMsgObj.new(_sender, 'channel'=>_channel)
|
124
|
+
_tobj.type = TYPE_DEBUG
|
125
|
+
_tobj.text = _msg
|
126
|
+
self.out(_tobj)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class ShellContract < ArcadiaContract
|
131
|
+
SObj = Struct.new("ShellState"
|
132
|
+
)
|
133
|
+
class TShellObj < TObj
|
134
|
+
attr_accessor :file
|
135
|
+
end
|
136
|
+
|
137
|
+
def run(_tobj)
|
138
|
+
end
|
139
|
+
def debug(_tobj)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
class DebugContract < ArcadiaContract
|
145
|
+
SObj = Struct.new("DebugState"
|
146
|
+
)
|
147
|
+
class TDebugObj < TObj
|
148
|
+
attr_accessor :file, :line, :error_text, :error_class,:callers, :variables
|
149
|
+
end
|
150
|
+
|
151
|
+
DEBUG_BEGIN="DEBUG_BEGIN"
|
152
|
+
DEBUG_END="DEBUG_END"
|
153
|
+
DEBUG_STEP="DEBUG_STEP"
|
154
|
+
|
155
|
+
def debug_begin(_tobj=nil)
|
156
|
+
raise_event(DEBUG_BEGIN, _tobj)
|
157
|
+
end
|
158
|
+
def debug_end(_tobj=nil)
|
159
|
+
raise_event(DEBUG_END, _tobj)
|
160
|
+
end
|
161
|
+
def debug_step(_tobj=nil)
|
162
|
+
raise_event(DEBUG_STEP, _tobj)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
class InspectorContract < ArcadiaContract
|
167
|
+
SObj = Struct.new("InspectorActionState"
|
168
|
+
)
|
169
|
+
class TInspectorObj < TObj
|
170
|
+
attr_accessor :wrapper, :requires, :property_family,:property_name,:property_value
|
171
|
+
end
|
172
|
+
|
173
|
+
SELECT_WRAPPER = "SELECT_WRAPPER"
|
174
|
+
#ACTIVATE_WRAPPER = "ACTIVATE_WRAPPER"
|
175
|
+
DELETE_WRAPPER = "DELETE_WRAPPER"
|
176
|
+
ADD_REQUIRE = "ADD_REQUIRE"
|
177
|
+
REGISTER_WRAPPER = "REGISTER_WRAPPER"
|
178
|
+
# UPDATE_PROPERTY = "UPDATE_PROPERTY"
|
179
|
+
DELETE_INSPECTOR = "DELETE_INSPECTOR"
|
180
|
+
RAISE_ACTIVE_OBJECT = "RAISE_ACTIVE_OBJECT"
|
181
|
+
RAISE_ACTIVE_TOPLEVEL = "RAISE_ACTIVE_TOPLEVEL"
|
182
|
+
|
183
|
+
def delete_wrapper(_tobj=nil)
|
184
|
+
raise_action(DELETE_WRAPPER, _tobj)
|
185
|
+
end
|
186
|
+
|
187
|
+
def raise_active_object(_tobj=nil)
|
188
|
+
raise_action(RAISE_ACTIVE_OBJECT, _tobj)
|
189
|
+
end
|
190
|
+
|
191
|
+
def raise_active_toplevel(_tobj=nil)
|
192
|
+
raise_action(RAISE_ACTIVE_OBJECT, _tobj)
|
193
|
+
end
|
194
|
+
|
195
|
+
def select(_tobj=nil)
|
196
|
+
raise_action(SELECT_WRAPPER, _tobj)
|
197
|
+
end
|
198
|
+
|
199
|
+
def add_require(_tobj=nil)
|
200
|
+
raise_action(ADD_REQUIRE, _tobj)
|
201
|
+
end
|
202
|
+
|
203
|
+
def register(_tobj=nil)
|
204
|
+
raise_action(REGISTER_WRAPPER, _tobj)
|
205
|
+
end
|
206
|
+
|
207
|
+
# def update_property(_tobj=nil)
|
208
|
+
# raise_action(UPDATE_PROPERTY, _tobj)
|
209
|
+
# end
|
210
|
+
|
211
|
+
def delete_inspector(_tobj=nil)
|
212
|
+
raise_action(DELETE_INSPECTOR, _tobj)
|
213
|
+
end
|
214
|
+
|
215
|
+
publish_action :raise_active_object
|
216
|
+
end
|
217
|
+
|
218
|
+
class PublishContract < ArcadiaContract
|
219
|
+
ADD_COMAND_ACTOR = "ADD_COMAND_ACTOR"
|
220
|
+
def add_command_actor(_tobj)
|
221
|
+
raise_action(ADD_COMAND_ACTOR, _tobj)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
class WrapperContract < ArcadiaContract
|
228
|
+
class TWrapperObj < TObj
|
229
|
+
attr_accessor :wrapper, :property_name, :property_family, :property_old_value, :property_new_value
|
230
|
+
end
|
231
|
+
WRAPPER_AFTER_CREATE="WRAPPER_AFTER_CREATE"
|
232
|
+
PROPERTY_AFTER_UPDATE="PROPERTY_AFTER_UPDATE"
|
233
|
+
UPDATE_PROPERTY="UPDATE_PROPERTY"
|
234
|
+
def update_property(_tobj)
|
235
|
+
raise_action(UPDATE_PROPERTY, _tobj)
|
236
|
+
end
|
237
|
+
def property_updated(_tobj)
|
238
|
+
raise_event(PROPERTY_AFTER_UPDATE, _tobj)
|
239
|
+
end
|
240
|
+
def wrapper_created(_tobj)
|
241
|
+
raise_event(WRAPPER_AFTER_CREATE, _tobj)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
class PaletteContract < ArcadiaContract
|
246
|
+
class TPaletteObj < TObj
|
247
|
+
attr_accessor :parent, :x, :y
|
248
|
+
end
|
249
|
+
MAKE_SELECTED_WRAPPER = "MAKE_SELECTED_WRAPPER"
|
250
|
+
def make_selected(_tobj)
|
251
|
+
raise_action(MAKE_SELECTED_WRAPPER, _tobj)
|
252
|
+
end
|
253
|
+
end
|
data/base/a-ext.rb
ADDED
@@ -0,0 +1,360 @@
|
|
1
|
+
#
|
2
|
+
# a-ext.rb - Arcadia Ruby ide
|
3
|
+
# by Antonio Galeone <antonio-galeone@rubyforge.org>
|
4
|
+
#
|
5
|
+
|
6
|
+
require "observer"
|
7
|
+
require 'singleton'
|
8
|
+
|
9
|
+
class ArcadiaExt
|
10
|
+
attr_reader :arcadia
|
11
|
+
|
12
|
+
def initialize(_arcadia, _name=nil)
|
13
|
+
@arcadia = _arcadia
|
14
|
+
@name = _name
|
15
|
+
unless self.respond_to? :build
|
16
|
+
raise NoMethodError, "ArcadiaExt needs to respond to `:build'"
|
17
|
+
end
|
18
|
+
unless self.respond_to? :before_build
|
19
|
+
raise NoMethodError, "ArcadiaExt needs to respond to `:before_build'"
|
20
|
+
end
|
21
|
+
unless self.respond_to? :after_build
|
22
|
+
raise NoMethodError, "ArcadiaExt needs to respond to `:after_build'"
|
23
|
+
end
|
24
|
+
if self.respond_to? :arcadia_update
|
25
|
+
ObserverCallback.new(@arcadia.main_contract, self, :arcadia_update)
|
26
|
+
end
|
27
|
+
ObjectSpace.define_finalizer(self, self.method(:finalize).to_proc)
|
28
|
+
end
|
29
|
+
|
30
|
+
def before_build
|
31
|
+
#must be implemented in child
|
32
|
+
end
|
33
|
+
|
34
|
+
def build
|
35
|
+
#must be implemented in child
|
36
|
+
end
|
37
|
+
|
38
|
+
def after_build
|
39
|
+
#must be implemented in child
|
40
|
+
end
|
41
|
+
|
42
|
+
def frame
|
43
|
+
if @frame == nil
|
44
|
+
@frame = @arcadia.layout.register_panel(@arcadia['conf'][@name+'.frame'],@name, @arcadia['conf'][@name+'.label'])
|
45
|
+
end
|
46
|
+
return @frame
|
47
|
+
end
|
48
|
+
|
49
|
+
def frame_free
|
50
|
+
@arcadia.layout.unregister_panel(@arcadia['conf'][@name+'.frame'],@name)
|
51
|
+
@frame = nil
|
52
|
+
end
|
53
|
+
|
54
|
+
def conf(_property)
|
55
|
+
@arcadia['conf'][@name+'.'+_property]
|
56
|
+
end
|
57
|
+
# def arcadia_update(_sender, _event)
|
58
|
+
#must be implemented to activate
|
59
|
+
# end
|
60
|
+
|
61
|
+
def can_exit_query
|
62
|
+
return true
|
63
|
+
end
|
64
|
+
|
65
|
+
def finalize
|
66
|
+
#may be extendeded in child
|
67
|
+
end
|
68
|
+
|
69
|
+
def verbose
|
70
|
+
'??????'
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
class ObserverCallback
|
77
|
+
def initialize(_publisher, _subscriber, _method_update_to_call=:update)
|
78
|
+
@publisher = _publisher
|
79
|
+
@subscriber = _subscriber
|
80
|
+
@method=_method_update_to_call
|
81
|
+
@publisher.add_observer(self)
|
82
|
+
end
|
83
|
+
def update(*args)
|
84
|
+
@subscriber.send(@method,*args)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class ObserverCallbackContract < ObserverCallback
|
89
|
+
def initialize(_publisher, _subscriber, _method_update_to_call=:update, _channel=nil)
|
90
|
+
super(_publisher, _subscriber, _method_update_to_call)
|
91
|
+
@channel = _channel
|
92
|
+
@channel_conf = @subscriber.conf(@publisher.class.to_s+'.channel') if @subscriber.respond_to?(:conf)
|
93
|
+
end
|
94
|
+
|
95
|
+
def filter(_event)
|
96
|
+
@channel_conf != nil && @channel_conf != _event.channel
|
97
|
+
end
|
98
|
+
|
99
|
+
def update(_event, *args)
|
100
|
+
super(_event, *args) if !filter(_event)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
class ObserverCallbackContractThread < ObserverCallbackContract
|
106
|
+
def update(*args)
|
107
|
+
Thread.new do
|
108
|
+
super(*args)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
# The contract define the interface beetwhen extension
|
116
|
+
# in particulare define method than raise event to observers client
|
117
|
+
# and a way to retreive state from client
|
118
|
+
|
119
|
+
class ArcadiaContract
|
120
|
+
include Observable
|
121
|
+
include Singleton
|
122
|
+
class ContractEvent
|
123
|
+
attr_reader :contract
|
124
|
+
attr_reader :signature
|
125
|
+
attr_reader :context
|
126
|
+
attr_reader :channel
|
127
|
+
attr_reader :time
|
128
|
+
attr_writer :action
|
129
|
+
|
130
|
+
SIGNATURE = "NOT_DEFINED"
|
131
|
+
def initialize(_contract, _signature=SIGNATURE, _context=nil)
|
132
|
+
@contract = _contract
|
133
|
+
@signature = _signature
|
134
|
+
@context = _context
|
135
|
+
_context.channel != nil ?@channel=_context.channel: @channel='0'
|
136
|
+
@time = Time.new
|
137
|
+
@action = false
|
138
|
+
end
|
139
|
+
|
140
|
+
def handled(_by)
|
141
|
+
@contract.event_handled(TObj.new(_by))
|
142
|
+
end
|
143
|
+
|
144
|
+
def is_action?
|
145
|
+
@action
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
class TObj
|
150
|
+
attr_reader :sender
|
151
|
+
attr_accessor :channel
|
152
|
+
DEFAULT_CHANNEL='0'
|
153
|
+
def initialize(_sender, _args=nil)
|
154
|
+
@sender=_sender
|
155
|
+
@channel = DEFAULT_CHANNEL
|
156
|
+
if _args
|
157
|
+
_args.each do |key, value|
|
158
|
+
self.send(key+'=', value)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
# properties.each do |prop|
|
165
|
+
# define_method(prop) {
|
166
|
+
# instance_variable_get("@#{prop}")
|
167
|
+
# }
|
168
|
+
# define_method("#{prop}=") do |value|
|
169
|
+
# instance_variable_set("@#{prop}", value)
|
170
|
+
# end
|
171
|
+
# end
|
172
|
+
|
173
|
+
# define_method(prop)
|
174
|
+
# attr_reader prop.to_sym # prop by itself also worked for me
|
175
|
+
# # code snip ? setter method
|
176
|
+
# end
|
177
|
+
|
178
|
+
|
179
|
+
# def TObj.property(*properties)
|
180
|
+
# properties.each { |property|
|
181
|
+
# class_eval(%Q[
|
182
|
+
# def #{property}
|
183
|
+
# @#{property}
|
184
|
+
# end
|
185
|
+
#
|
186
|
+
# def #{property}=(value)
|
187
|
+
# @#{property} = value
|
188
|
+
# end
|
189
|
+
# ])
|
190
|
+
# }
|
191
|
+
# end
|
192
|
+
end
|
193
|
+
|
194
|
+
class EventInfo
|
195
|
+
attr_reader :method
|
196
|
+
attr_reader :label
|
197
|
+
attr_reader :icon
|
198
|
+
def initialize(_method)
|
199
|
+
@method = @method
|
200
|
+
#TODO: load label and icon from config file
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
EVENT_HANDLED = "EVENT_HANDLED"
|
205
|
+
CONTRACT_CREATED = "CONTRACT_CREATED"
|
206
|
+
|
207
|
+
SObj = Struct.new("GenericState",
|
208
|
+
:caller
|
209
|
+
)
|
210
|
+
# TObj = Struct.new("GenericObj",
|
211
|
+
# :sender
|
212
|
+
# )
|
213
|
+
|
214
|
+
# def initialize(_sender=nil, _state_method=nil, _channel='0')
|
215
|
+
# @@instances = Array.new if !defined?(@@instances)
|
216
|
+
# #@@listeners_queue Array.new if !defined?(@@listeners_queue)
|
217
|
+
# @@instances << self
|
218
|
+
# @sender = _sender
|
219
|
+
# @state_method = _state_method
|
220
|
+
# @channel = _channel
|
221
|
+
# ObjectSpace.define_finalizer(self, self.class.method(:finalize).to_proc)
|
222
|
+
# #ArcadiaContract.source(self).raise_event(CONTRACT_CREATED, TObj.new(_sender))
|
223
|
+
# end
|
224
|
+
|
225
|
+
# def ArcadiaContract.instances
|
226
|
+
# @@instances
|
227
|
+
# end
|
228
|
+
|
229
|
+
# def ArcadiaContract.source(_sender=nil)
|
230
|
+
# if !defined?(@@source)
|
231
|
+
# (_sender==nil) ? @@source = ArcadiaContract.new : @@source = _sender
|
232
|
+
# end
|
233
|
+
# return @@source
|
234
|
+
# end
|
235
|
+
|
236
|
+
# def ArcadiaContract.finalize(id)
|
237
|
+
# raise_event(MainContract::EXTENSION_FINALIZE, id)
|
238
|
+
# end
|
239
|
+
|
240
|
+
# raise an event with event handled as context obj
|
241
|
+
def event_handled(_tobj)
|
242
|
+
raise_event(EVENT_HANDLED, _tobj)
|
243
|
+
end
|
244
|
+
|
245
|
+
def _event_forge(_event_signature, _tobj)
|
246
|
+
ContractEvent.new(self, _event_signature, _tobj)
|
247
|
+
end
|
248
|
+
private :_event_forge
|
249
|
+
|
250
|
+
|
251
|
+
def raise_event(_event_signature, _tobj, *args)
|
252
|
+
_raise_event(_event_forge(_event_signature, _tobj),*args)
|
253
|
+
end
|
254
|
+
|
255
|
+
def _raise_event(_event, *args)
|
256
|
+
changed
|
257
|
+
notify_observers(_event, *args)
|
258
|
+
if self.class != ArcadiaContract
|
259
|
+
self.class.superclass.instance._raise_event(_event, *args)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
#protected :_raise_event
|
263
|
+
|
264
|
+
def raise_action(_event_signature, _tobj, *args)
|
265
|
+
_raise_action(_event_forge(_event_signature, _tobj),*args)
|
266
|
+
end
|
267
|
+
|
268
|
+
def _raise_action(_event, *args)
|
269
|
+
_event.action = true
|
270
|
+
_raise_event(_event, *args)
|
271
|
+
end
|
272
|
+
private :_raise_action
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
# def retrieve_state(*args)
|
277
|
+
# unless @sender.respond_to? @state_method
|
278
|
+
# raise NoMethodError, self.class.to_s+" needs to respond to "+@state_method.to_s
|
279
|
+
# end
|
280
|
+
# return @sender.send(@state_method, *args)
|
281
|
+
# end
|
282
|
+
|
283
|
+
def ArcadiaContract.publish_action(_method)
|
284
|
+
_info = EventInfo.new(_method)
|
285
|
+
@@actions = Array.new if !defined?(@@actions)
|
286
|
+
@@actions << _info
|
287
|
+
end
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
class ArcadiaContractListener
|
292
|
+
def initialize(_subscriber, _class, _method, _channel=nil)
|
293
|
+
# @arcadia = _arcadia
|
294
|
+
@subscriber = _subscriber
|
295
|
+
@class = _class
|
296
|
+
@method = _method
|
297
|
+
@channel = _channel
|
298
|
+
create_callback(_class.instance)
|
299
|
+
# _klass = _class
|
300
|
+
# while _klass.kind_of?(ArcadiaContract)
|
301
|
+
# create_callback(_klass.instance)
|
302
|
+
# _klass = _klass.superclass
|
303
|
+
# end
|
304
|
+
|
305
|
+
# ObserverCallback.new(_class.instance, self, :do_main_event)
|
306
|
+
# ObserverCallback.new(MainContract.instance, self, :do_main_event)
|
307
|
+
# @class.instances.each do |_contract|
|
308
|
+
# create_callback(_contract) if _contract.kind_of?(@class)
|
309
|
+
# end
|
310
|
+
end
|
311
|
+
|
312
|
+
# def do_main_event(_event)
|
313
|
+
# if _event.signature == MainContract::CONTRACT_RETRIVE && _event.context.contract.kind_of?(@class)
|
314
|
+
# create_callback(_event.context.contract)
|
315
|
+
## elsif _event.signature == ArcadiaContract::CONTRACT_CREATED && _event.contract.kind_of?(@class)
|
316
|
+
## create_callback(_event.contract)
|
317
|
+
# end
|
318
|
+
# end
|
319
|
+
|
320
|
+
def create_callback(_contract)
|
321
|
+
ObserverCallbackContract.new(_contract, @subscriber, @method, @channel)
|
322
|
+
#ObserverCallback.new(_contract, _subscriber, _method)
|
323
|
+
end
|
324
|
+
|
325
|
+
# def update(*args)
|
326
|
+
# @subscriber.send(@method,*args)
|
327
|
+
# end
|
328
|
+
|
329
|
+
# def info
|
330
|
+
# @contract.retrieve_state if @contract
|
331
|
+
# end
|
332
|
+
|
333
|
+
# def delegate_action(_action, _obj=nil)
|
334
|
+
# if @contract && @contract.respond_to? :do_action
|
335
|
+
# @contract.do_action
|
336
|
+
# end
|
337
|
+
# end
|
338
|
+
end
|
339
|
+
|
340
|
+
class ArcadiaContractListenerThread < ArcadiaContractListener
|
341
|
+
|
342
|
+
def create_callback(_contract)
|
343
|
+
#Thread.new do super(_contract, _subscriber, _method) end
|
344
|
+
ObserverCallbackContractThread.new(_contract)
|
345
|
+
end
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
|
352
|
+
#class AeContractListener
|
353
|
+
# def initialize(_arcadia)
|
354
|
+
#
|
355
|
+
# end
|
356
|
+
# def listen_on(_aeclip_name, _method_update_to_call=:update)
|
357
|
+
# end
|
358
|
+
# def update(_tobj)
|
359
|
+
# end
|
360
|
+
#end
|