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,6 +1,6 @@
1
- name=flag
2
- label=Flag
3
- frame=0.0
4
- active=no
5
- require=ext/ae-flag/ae-flag
6
- class=ArcadiaFlag
1
+ name=flag
2
+ labels=Flag
3
+ frames=0.0
4
+ active=no
5
+ require=ext/ae-flag/ae-flag
6
+ class=ArcadiaFlag
@@ -1,12 +1,12 @@
1
-
2
-
3
- class ArcadiaFlag < ArcadiaExt
4
- def build
5
- @tkLabel3 = TkLabel.new(self.frame){
6
- image TkPhotoImage.new('format'=>'GIF','data' =>A_LOGO_GIF)
7
- background "#000000"
8
- place('x'=> 0,'y' => 0, 'relwidth' =>'1', 'relheight'=>'1')
9
- }
10
-
11
- end
12
- end
1
+
2
+
3
+ class ArcadiaFlag < ArcadiaExt
4
+ def on_build(_event)
5
+ @tkLabel3 = TkLabel.new(self.frame){
6
+ image TkPhotoImage.new('format'=>'GIF','data' =>A_LOGO_GIF)
7
+ background "#000000"
8
+ place('x'=> 0,'y' => 0, 'relwidth' =>'1', 'relheight'=>'1')
9
+ }
10
+
11
+ end
12
+ end
@@ -1,7 +1,7 @@
1
1
  name=objic
2
- label=Object Inspector
3
- frame=1.0
4
- active=yes
2
+ labels=Object Inspector
3
+ frames=1.0
4
+ active=no
5
5
  require=ext/ae-inspector/ae-inspector
6
6
  class=ObjiController
7
7
 
@@ -1277,12 +1277,12 @@ end
1277
1277
  class ObjiController < ArcadiaExt
1278
1278
  attr_reader :active
1279
1279
 
1280
- def before_build
1280
+ def on_before_build(_event)
1281
1281
  ArcadiaContractListener.new(self, InspectorContract, :do_inspector_event)
1282
1282
  ArcadiaContractListener.new(self, WrapperContract, :do_wrapper_event)
1283
1283
  end
1284
1284
 
1285
- def build
1285
+ def on_build(_event)
1286
1286
  #@main_frame = ObjiControllerView.new(self.frame)
1287
1287
  @objis = Hash.new
1288
1288
  @wrappers_obji = Hash.new
@@ -1,15 +1,15 @@
1
- name=output2
2
- label=Event Log
3
- frame=1.1
4
- active=no
5
- require=ext/ae-output/ae-output
6
- class=Output
7
- MsgContract.channel=CH1
8
-
9
-
10
- font=courier 10
11
- font.bold=courier 10 bold
12
- freebsd::font=courier 10
13
- freebsd::font.bold=courier 12 bold
14
- win::font={Courier New} 9
15
- win::font.bold={Courier New} 9 bold
1
+ name=output2
2
+ labels=Event Log
3
+ frames=1.1
4
+ active=no
5
+ require=ext/ae-output/ae-output
6
+ class=Output
7
+ MsgContract.channel=CH1
8
+
9
+
10
+ font=courier 10
11
+ font.bold=courier 10 bold
12
+ freebsd::font=courier 10
13
+ freebsd::font.bold=courier 12 bold
14
+ win::font={Courier New} 9
15
+ win::font.bold={Courier New} 9 bold
@@ -1,14 +1,16 @@
1
1
  name=output
2
- label=Output
3
- frame=1.1
2
+ labels=Output
3
+ frames=1.1
4
4
  active=yes
5
5
  require=ext/ae-output/ae-output
6
6
  class=Output
7
7
  MsgContract.channel=0
8
-
8
+ #--------------------------------------
9
9
  font=courier 10
10
10
  font.bold=courier 10 bold
11
11
  freebsd::font=courier 12
12
12
  freebsd::font.bold=courier 12 bold
13
13
  win::font={Courier New} 9
14
14
  win::font.bold={Courier New} 9 bold
15
+ hightlight.sel.color.foreground=black
16
+ hightlight.sel.color.background=#ff8000
@@ -4,7 +4,7 @@
4
4
  #
5
5
 
6
6
  require "tk"
7
- require "base/a-utils"
7
+ #require "base/a-utils"
8
8
 
9
9
  class OutputView
10
10
  attr_reader :text
@@ -55,6 +55,9 @@ class OutputView
55
55
  #'foreground' => '#b9b8b9'
56
56
  'foreground' => '#7c9b10'
57
57
  )
58
+ @text.tag_configure('sel',
59
+ 'background'=>parent.conf('hightlight.sel.color.background'),
60
+ 'foreground'=>parent.conf('hightlight.sel.color.foreground'))
58
61
 
59
62
  end
60
63
  end
@@ -62,55 +65,80 @@ end
62
65
  class Output < ArcadiaExt
63
66
  attr_reader :main_frame
64
67
 
65
- def before_build
66
- ArcadiaContractListener.new(self, MsgContract, :do_msg_event)
68
+ def on_before_build(_event)
69
+ #ArcadiaContractListener.new(self, MsgContract, :do_msg_event)
70
+ Arcadia.add_listener(self, MsgEvent)
67
71
  #_frame = @arcadia.layout.register_panel('_rome_',@name, 'Output')
68
72
  @main_frame = OutputView.new(self)
69
73
  @run_threads = Array.new
70
- @main_frame.text.tag_configure('error','foreground' => 'red')
71
74
  end
72
75
 
73
76
 
74
- def build
75
- #@ae_file_contract = @arcadia.retrieve_contract(self, EditorActionContract, :file_state)
76
- end
77
-
78
- def after_build
79
- MainContract.instance.raise_extension(self,
80
- 'domain'=>@arcadia['conf'][@name+'.frame'],
81
- 'extension' =>@name,
82
- 'channel'=>conf('MsgContract.channel'))
77
+ def on_after_build(_event)
78
+ self.frame_raise
79
+ # MainContract.instance.raise_extension(self,
80
+ # 'domain'=>@arcadia['conf'][@name+'.frame'],
81
+ # 'extension' =>@name,
82
+ # 'channel'=>conf('MsgContract.channel'))
83
83
  end
84
84
 
85
85
  def format_time(_time)
86
86
  _time.strftime("at %a %d-%b-%Y %H:%M:%S")
87
87
  end
88
-
89
- def do_msg_event(_event)
90
- #p _event.context.text.class
91
- _txt = "\n+--- "+format_time(_event.time)+" ---+\n"+_event.context.text.strip+"\n"
88
+
89
+ def on_msg(_event)
90
+ self.frame_raise
91
+ _txt = "\n+--- "+format_time(_event.time)+" ---+\n"+_event.msg.strip+"\n"
92
92
  _index_begin = @main_frame.text.index('end')
93
93
  @main_frame.text.insert(_index_begin,_txt)
94
94
  _index_end = @main_frame.text.index('end')
95
- if _event.context.type == MsgContract::TYPE_DEBUG
96
- @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
97
- @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
98
- @main_frame.text.tag_add('debug_msg',_index_begin, _index_end+ ' lineend')
99
- parse_debug(_index_begin.split('.')[0].to_i)
100
- elsif _event.context.type == MsgContract::TYPE_ERROR
101
- @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
102
- @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
103
- @main_frame.text.tag_add('error_msg',_index_begin, _index_end+ ' lineend')
104
- parse_debug(_index_begin.split('.')[0].to_i)
105
- else
106
- @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
107
- @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
108
- @main_frame.text.tag_add('simple_msg',_index_begin, _index_end+ ' lineend')
95
+ case _event
96
+ when DebugMsgEvent
97
+ @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
98
+ @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
99
+ @main_frame.text.tag_add('debug_msg',_index_begin, _index_end+ ' lineend')
100
+ parse_debug(_index_begin.split('.')[0].to_i)
101
+ when ErrorMsgEvent
102
+ @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
103
+ @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
104
+ @main_frame.text.tag_add('error_msg',_index_begin, _index_end+ ' lineend')
105
+ parse_debug(_index_begin.split('.')[0].to_i)
106
+ else
107
+ @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
108
+ @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
109
+ @main_frame.text.tag_add('simple_msg',_index_begin, _index_end+ ' lineend')
109
110
  end
110
111
  @main_frame.text.tag_add('bord_msg',_index_begin+' linestart', _index_begin+ ' lineend')
111
112
  @main_frame.text.tag_add('bord_msg',_index_end+' -1 lines linestart', _index_end+ ' -1 lines lineend')
112
113
  @main_frame.text.see(_index_end)
113
- end
114
+ end
115
+
116
+ # def do_msg_event(_event)
117
+ # self.frame_raise
118
+ # #p _event.context.text.class
119
+ # _txt = "\n+--- "+format_time(_event.time)+" ---+\n"+_event.context.text.strip+"\n"
120
+ # _index_begin = @main_frame.text.index('end')
121
+ # @main_frame.text.insert(_index_begin,_txt)
122
+ # _index_end = @main_frame.text.index('end')
123
+ # if _event.context.type == MsgContract::TYPE_DEBUG
124
+ # @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
125
+ # @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
126
+ # @main_frame.text.tag_add('debug_msg',_index_begin, _index_end+ ' lineend')
127
+ # parse_debug(_index_begin.split('.')[0].to_i)
128
+ # elsif _event.context.type == MsgContract::TYPE_ERROR
129
+ # @main_frame.text.tag_remove('simple_msg',_index_begin, _index_end+ ' lineend')
130
+ # @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
131
+ # @main_frame.text.tag_add('error_msg',_index_begin, _index_end+ ' lineend')
132
+ # parse_debug(_index_begin.split('.')[0].to_i)
133
+ # else
134
+ # @main_frame.text.tag_remove('error_msg',_index_begin, _index_end+ ' lineend')
135
+ # @main_frame.text.tag_remove('debug_msg',_index_begin, _index_end+ ' lineend')
136
+ # @main_frame.text.tag_add('simple_msg',_index_begin, _index_end+ ' lineend')
137
+ # end
138
+ # @main_frame.text.tag_add('bord_msg',_index_begin+' linestart', _index_begin+ ' lineend')
139
+ # @main_frame.text.tag_add('bord_msg',_index_end+' -1 lines linestart', _index_end+ ' -1 lines lineend')
140
+ # @main_frame.text.see(_index_end)
141
+ # end
114
142
 
115
143
  def parse_debug(_from_row=0)
116
144
  _row = 0
@@ -137,7 +165,8 @@ class Output < ArcadiaExt
137
165
  @main_frame.text.tag_add(_row,_ibegin,_iend)
138
166
  @main_frame.text.tag_bind(_row,"Double-ButtonPress-1",
139
167
  proc{
140
- EditorContract.instance.open_file(self, 'file'=>_file, 'line'=>_line)
168
+ Arcadia.process_event(OpenBufferEvent.new(self,'file'=>_file, 'row'=>_line))
169
+ #EditorContract.instance.open_file(self, 'file'=>_file, 'line'=>_line)
141
170
  }
142
171
  )
143
172
  @main_frame.text.tag_bind(_row,"Enter",
@@ -1,7 +1,7 @@
1
1
  name=palette
2
- label=Palette
3
- frame=0.0
4
- active=yes
2
+ labels=Palette
3
+ frames=0.0
4
+ active=no
5
5
  require=ext/ae-palette/ae-palette
6
6
  class=Palette
7
7
 
@@ -1,306 +1,265 @@
1
- #
2
- # ae-palette.rb - Arcadia Ruby ide
3
- # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
- #
5
-
6
- require 'base/a-libs'
7
- require 'lib/tk/al-tk'
8
- require 'tk'
9
- require 'tkmenubar'
10
- require 'tkextlib/bwidget'
11
-
12
-
13
- class Palette < ArcadiaExt
14
- attr_reader :buttons
15
- attr_reader :selected_wrapper
16
-
17
- def before_build
18
- ArcadiaContractListener.new(self, InspectorContract, :do_inspector_event)
19
- ArcadiaContractListener.new(self, PaletteContract, :do_palette_event)
20
- end
21
-
22
- def build
23
- @buttons = Hash.new
24
- create_palettes
25
- end
26
-
27
- def after_build
28
- end
29
-
30
- def do_inspector_event(_event)
31
- case _event.signature
32
- when InspectorContract::SELECT_WRAPPER
33
- @selected_wrapper=_event.context.wrapper
34
- end
35
- end
36
-
37
- def do_palette_event(_event)
38
- case _event.signature
39
- when PaletteContract::MAKE_SELECTED_WRAPPER
40
- give_me_obj(_event.context.parent)
41
- end
42
- end
43
-
44
- def eval_form_file(_filename)
45
- cod = '';
46
- IO.foreach(_filename) { |line| cod += line };
47
- Revparsel.new(cod, _filename)
48
- end
49
-
50
-
51
- def eval_file(_filename)
52
- cod = '';
53
- begin
54
- IO.foreach(_filename) { |line| cod += line }
55
- rescue SystemCallError
56
- handleException # defined elsewhere
57
- end
58
- eval(cod)
59
- end
60
-
61
- def create_palettes
62
- @cc = WrapperContainer.new(self){
63
- border 0
64
- borderwidth 1
65
- }
66
- @cc.pack('side' =>'left', 'fill' =>'both', 'anchor'=>'nw', :padx=>2, :pady=>2)
67
- @arcadia.libs.list.each{|lib|
68
- @cc.add_palette(lib)
69
- }
70
- end
71
-
72
- def give_me_obj(_owner)
73
- @cc.new_wrapper(_owner)
74
- end
75
-
76
- def give_me_code
77
- @cc.new_wrapper_code
78
- end
79
-
80
- end
81
-
82
- class WrapperContainer < TkFrame
83
-
84
- def initialize(_owner)
85
- super(_owner.frame)
86
- @owner = _owner
87
- _self = self
88
- frame = TkFrame.new(self).pack('side' =>'left', 'anchor'=>'n', :padx=>2, :pady=>2)
89
-
90
- @button_u = Tk::BWidget::Button.new(frame){
91
- image TkPhotoImage.new('dat' => CURSOR_GIF)
92
- helptext 'Select'
93
- text 'C'
94
- foreground 'blue'
95
- command proc{_self.unfill}
96
- relief 'groove'
97
- pack('side' =>'top', 'anchor'=>'n',:padx=>2, :pady=>2)
98
- }
99
- @button_m = Tk::BWidget::Button.new(frame){
100
- _command = proc{
101
- require 'tk/clipboard'
102
- _code = AG.active.renderer.class_code.to_s if AG.active
103
- TkClipboard::set(_code)
104
- eval(_code)
105
- _self.fill(
106
- self,
107
- _owner.selected_wrapper.class,
108
- nil,
109
- _owner.selected_wrapper.getInstanceClass
110
- )
111
- _self.new_wrapper if _owner.selected_wrapper.class.is_top
112
-
113
- }
114
- image TkPhotoImage.new('dat' => WIDGET_COPY_GIF)
115
- helptext 'Copy current selected'
116
- text 'C'
117
- foreground 'blue'
118
- command _command
119
- relief 'groove'
120
- pack('side' =>'left','anchor'=>'n', :padx=>2, :pady=>2)
121
- }
122
- @familyts = Tk::BWidget::NoteBook.new(self){
123
- tabbevelsize 0
124
- internalborderwidth 1
125
- activeforeground 'orange'
126
- font $arcadia['conf']['main.font']
127
- pack('side' =>'left','expand'=>'yes','fill'=>'both', :padx=>2, :pady=>2)
128
- }
129
- @objCollections = Array.new
130
- end
131
-
132
- def new_wrapper_code
133
- _code = ''
134
- if @selected_button != nil && @selected_class_obj != nil
135
- #objiinfo = @owner.ae_inspector_talker.info
136
- #_code = objiinfo.active_wrapper.renderer.class_code.to_s
137
- _code = AG.active.renderer.class_code.to_s
138
- @selected_button.configure('relief'=>'groove')
139
- @selected_button = @selected_class = @selected_require = nil
140
- end
141
- return _code
142
- end
143
-
144
-
145
- def new_wrapper(_parent = nil, _obj = nil)
146
- if @selected_button == nil
147
- return
148
- end
149
- # copy obj
150
- if @selected_class_obj != nil && _obj == nil
151
- _obj = eval(@selected_class_obj).new(_parent == nil ?nil:_parent.obj)
152
- end
153
-
154
- w = @selected_class.new(_parent, _obj)
155
- #$arcadia['objic'].active.select_last(true) if @selected_class_obj != nil
156
- #$arcadia.objects('objic').active.addRequire(@selected_require) if @selected_require != nil
157
-
158
-
159
- w.select.activate if @selected_class_obj != nil
160
- w.add_require([@selected_require]) if @selected_require != nil
161
-
162
- @selected_button.configure('relief'=>'groove')
163
- @selected_button = @selected_class = @selected_require = nil
164
- end
165
-
166
-
167
- def fill(_b, _class, _require, _class_obj = nil)
168
- _b.configure('relief'=>'sunken')
169
- if @selected_button != nil
170
- @selected_button.configure('relief'=>'groove')
171
- end
172
- @selected_button = _b
173
- @selected_class = _class
174
- @selected_require = _require
175
- @selected_class_obj = _class_obj
176
- Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].top_text(_class.class_wrapped)
177
-
178
- end
179
-
180
- def unfill
181
- if @selected_button != nil
182
- @selected_button.configure('relief'=>'groove')
183
- end
184
- @selected_button = nil
185
- @selected_class = nil
186
- @selected_require = nil
187
- @selected_class_obj = nil
188
- Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].top_text('')
189
- end
190
-
191
- def add_palette(_lib_obj)
192
- _name = _lib_obj.arcadia_lib_params.name
193
- _file = _lib_obj.arcadia_lib_params.require
194
- _img = nil
195
- @objCollections << {
196
- 'name'=>_name,
197
- 'collection'=>_lib_obj,
198
- 'file'=>_file,
199
- 'img'=>_img
200
- }
201
-
202
- @classes_panel = @familyts.insert('end',_name,
203
- 'text'=>_name#,
204
- )
205
-
206
- _background = @classes_panel.cget('background')
207
-
208
- @tpanel = TkText.new(@classes_panel){
209
- relief 'flat'
210
- background _background
211
- }.pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
212
-
213
-
214
- _lib_obj.classes.each{|value|
215
- _self = self
216
- _image = self.class_image(value)
217
- ewin = TkTextWindow.new(@tpanel, 'end',
218
- 'window'=> Tk::BWidget::Button.new(@tpanel){
219
- _command = proc{
220
- _self.fill(self, value, _file)
221
- _self.new_wrapper if value.is_top
222
- }
223
- text value.class_wrapped.to_s
224
- helptext value.class_wrapped.to_s
225
- image TkPhotoImage.new( 'dat' => _image )
226
- foreground 'blue'
227
- command _command
228
- font $arcadia['conf']['main.component.font']
229
- relief 'groove'
230
- height 25
231
- width 25
232
- #pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
233
- }
234
- )
235
- }
236
-
237
-
238
- # _lib_obj.classes.each{|value|
239
- # _self = self
240
- # _image = self.class_image(value)
241
- # ewin = TkTextWindow.new(@tpanel, 'end',
242
- # 'window'=> Tk::BWidget::Button.new(@tpanel){
243
- # _command = proc{
244
- # _self.fill(self, value, _file)
245
- # _self.new_wrapper if value.is_top
246
- # }
247
- # text value.class_wrapped.to_s
248
- # helptext value.class_wrapped.to_s
249
- # image TkPhotoImage.new( 'dat' => _image )
250
- # foreground 'blue'
251
- # command _command
252
- # font $arcadia['conf']['main.component.font']
253
- # relief 'groove'
254
- # pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
255
- # }
256
- # )
257
- # }
258
-
259
- # _lib_obj.classes.each{|value|
260
- # _self = self
261
- # _image = self.class_image(value)
262
- # Tk::BWidget::Button.new(@classes_panel){
263
- # _command = proc{
264
- # _self.fill(self, value, _file)
265
- # _self.new_wrapper if value.is_top
266
- # }
267
- # text value.class_wrapped.to_s
268
- # helptext value.class_wrapped.to_s
269
- # image TkPhotoImage.new( 'dat' => _image )
270
- # foreground 'blue'
271
- # command _command
272
- # font $arcadia['conf']['main.component.font']
273
- # relief 'groove'
274
- # pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
275
- # }
276
- #
277
- # }
278
-
279
- if @objCollections.length == 1
280
- @familyts.raise(_name)
281
- end
282
- end
283
-
284
- def class_image(_class=nil)
285
- _current_class = _class
286
- _found = false
287
- if _class
288
- _dir = File.dirname(_class.library.arcadia_lib_params.source)
289
- end
290
- while _current_class != nil && !_found
291
- if defined?(_current_class.library)
292
- _dir = File.dirname(_current_class.library.arcadia_lib_params.source)
293
- end
294
- _img = (_current_class.to_s+"_gif").upcase
295
- _data = eval(_img + ' if defined?('+_img+')' )
296
- #_file = _dir+"/res/"+_current_class.to_s+".gif"
297
- if _data
298
- #if FileTest.exist?(_file)
299
- _found = true
300
- else
301
- _current_class = _current_class.superclass
302
- end
303
- end
304
- return (_found)?_data:A_WIDGET_GIF
305
- end
306
- end
1
+ #
2
+ # ae-palette.rb - Arcadia Ruby ide
3
+ # by Antonio Galeone <antonio-galeone@rubyforge.org>
4
+ #
5
+
6
+ require 'base/a-libs'
7
+ require 'lib/tk/al-tk'
8
+ require 'tk'
9
+ require 'tkmenubar'
10
+ require 'tkextlib/bwidget'
11
+
12
+
13
+ class Palette < ArcadiaExt
14
+ attr_reader :buttons
15
+ attr_reader :selected_wrapper
16
+
17
+ def on_before_build(_event)
18
+ ArcadiaContractListener.new(self, InspectorContract, :do_inspector_event)
19
+ ArcadiaContractListener.new(self, PaletteContract, :do_palette_event)
20
+ end
21
+
22
+ def on_build(_event)
23
+ @buttons = Hash.new
24
+ create_palettes
25
+ end
26
+
27
+ def on_after_build(_event)
28
+ end
29
+
30
+ def do_inspector_event(_event)
31
+ case _event.signature
32
+ when InspectorContract::SELECT_WRAPPER
33
+ @selected_wrapper=_event.context.wrapper
34
+ end
35
+ end
36
+
37
+ def do_palette_event(_event)
38
+ case _event.signature
39
+ when PaletteContract::MAKE_SELECTED_WRAPPER
40
+ give_me_obj(_event.context.parent)
41
+ end
42
+ end
43
+
44
+ def eval_form_file(_filename)
45
+ cod = '';
46
+ IO.foreach(_filename) { |line| cod += line };
47
+ Revparsel.new(cod, _filename)
48
+ end
49
+
50
+
51
+ def eval_file(_filename)
52
+ cod = '';
53
+ begin
54
+ IO.foreach(_filename) { |line| cod += line }
55
+ rescue SystemCallError
56
+ handleException # defined elsewhere
57
+ end
58
+ eval(cod)
59
+ end
60
+
61
+ def create_palettes
62
+ @cc = WrapperContainer.new(self){
63
+ border 0
64
+ borderwidth 1
65
+ }
66
+ @cc.pack('side' =>'left', 'fill' =>'both', 'anchor'=>'nw', :padx=>2, :pady=>2)
67
+ @arcadia.libs.list.each{|lib|
68
+ @cc.add_palette(lib)
69
+ }
70
+ end
71
+
72
+ def give_me_obj(_owner)
73
+ @cc.new_wrapper(_owner)
74
+ end
75
+
76
+ def give_me_code
77
+ @cc.new_wrapper_code
78
+ end
79
+
80
+ end
81
+
82
+ class WrapperContainer < TkFrame
83
+
84
+ def initialize(_owner)
85
+ super(_owner.frame)
86
+ @owner = _owner
87
+ _self = self
88
+ frame = TkFrame.new(self).pack('side' =>'left', 'anchor'=>'n', :padx=>2, :pady=>2)
89
+
90
+ @button_u = Tk::BWidget::Button.new(frame){
91
+ image TkPhotoImage.new('dat' => CURSOR_GIF)
92
+ helptext 'Select'
93
+ text 'C'
94
+ foreground 'blue'
95
+ command proc{_self.unfill}
96
+ relief 'groove'
97
+ pack('side' =>'top', 'anchor'=>'n',:padx=>2, :pady=>2)
98
+ }
99
+ @button_m = Tk::BWidget::Button.new(frame){
100
+ _command = proc{
101
+ require 'tk/clipboard'
102
+ _code = AG.active.renderer.class_code.to_s if AG.active
103
+ TkClipboard::set(_code)
104
+ eval(_code)
105
+ _self.fill(
106
+ self,
107
+ _owner.selected_wrapper.class,
108
+ nil,
109
+ _owner.selected_wrapper.getInstanceClass
110
+ )
111
+ _self.new_wrapper if _owner.selected_wrapper.class.is_top
112
+
113
+ }
114
+ image TkPhotoImage.new('dat' => WIDGET_COPY_GIF)
115
+ helptext 'Copy current selected'
116
+ text 'C'
117
+ foreground 'blue'
118
+ command _command
119
+ relief 'groove'
120
+ pack('side' =>'left','anchor'=>'n', :padx=>2, :pady=>2)
121
+ }
122
+ @familyts = Tk::BWidget::NoteBook.new(self){
123
+ tabbevelsize 0
124
+ internalborderwidth 1
125
+ activeforeground 'orange'
126
+ font $arcadia['conf']['main.font']
127
+ pack('side' =>'left','expand'=>'yes','fill'=>'both', :padx=>2, :pady=>2)
128
+ }
129
+ @objCollections = Array.new
130
+ end
131
+
132
+ def new_wrapper_code
133
+ _code = ''
134
+ if @selected_button != nil && @selected_class_obj != nil
135
+ #objiinfo = @owner.ae_inspector_talker.info
136
+ #_code = objiinfo.active_wrapper.renderer.class_code.to_s
137
+ _code = AG.active.renderer.class_code.to_s
138
+ @selected_button.configure('relief'=>'groove')
139
+ @selected_button = @selected_class = @selected_require = nil
140
+ end
141
+ return _code
142
+ end
143
+
144
+
145
+ def new_wrapper(_parent = nil, _obj = nil)
146
+ if @selected_button == nil
147
+ return
148
+ end
149
+ # copy obj
150
+ if @selected_class_obj != nil && _obj == nil
151
+ _obj = eval(@selected_class_obj).new(_parent == nil ?nil:_parent.obj)
152
+ end
153
+
154
+ w = @selected_class.new(_parent, _obj)
155
+ #$arcadia['objic'].active.select_last(true) if @selected_class_obj != nil
156
+ #$arcadia.objects('objic').active.addRequire(@selected_require) if @selected_require != nil
157
+
158
+
159
+ w.select.activate if @selected_class_obj != nil
160
+ w.add_require([@selected_require]) if @selected_require != nil
161
+
162
+ @selected_button.configure('relief'=>'groove')
163
+ @selected_button = @selected_class = @selected_require = nil
164
+ end
165
+
166
+
167
+ def fill(_b, _class, _require, _class_obj = nil)
168
+ _b.configure('relief'=>'sunken')
169
+ if @selected_button != nil
170
+ @selected_button.configure('relief'=>'groove')
171
+ end
172
+ @selected_button = _b
173
+ @selected_class = _class
174
+ @selected_require = _require
175
+ @selected_class_obj = _class_obj
176
+ @owner.frame_title(_class.class_wrapped)
177
+ #Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].top_text(_class.class_wrapped)
178
+
179
+ end
180
+
181
+ def unfill
182
+ if @selected_button != nil
183
+ @selected_button.configure('relief'=>'groove')
184
+ end
185
+ @selected_button = nil
186
+ @selected_class = nil
187
+ @selected_require = nil
188
+ @selected_class_obj = nil
189
+ Arcadia.instance.layout.domain(Arcadia.instance['conf']['palette.frame'])['root'].top_text('')
190
+ end
191
+
192
+ def add_palette(_lib_obj)
193
+ _name = _lib_obj.arcadia_lib_params.name
194
+ _file = _lib_obj.arcadia_lib_params.require
195
+ _img = nil
196
+ @objCollections << {
197
+ 'name'=>_name,
198
+ 'collection'=>_lib_obj,
199
+ 'file'=>_file,
200
+ 'img'=>_img
201
+ }
202
+
203
+ @classes_panel = @familyts.insert('end',_name,
204
+ 'text'=>_name#,
205
+ )
206
+
207
+ _background = @classes_panel.cget('background')
208
+
209
+ @tpanel = TkText.new(@classes_panel){
210
+ relief 'flat'
211
+ background _background
212
+ }.pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
213
+
214
+
215
+ _lib_obj.classes.each{|value|
216
+ _self = self
217
+ _image = self.class_image(value)
218
+ ewin = TkTextWindow.new(@tpanel, 'end',
219
+ 'window'=> Tk::BWidget::Button.new(@tpanel){
220
+ _command = proc{
221
+ _self.fill(self, value, _file)
222
+ _self.new_wrapper if value.is_top
223
+ }
224
+ text value.class_wrapped.to_s
225
+ helptext value.class_wrapped.to_s
226
+ image TkPhotoImage.new( 'dat' => _image )
227
+ foreground 'blue'
228
+ command _command
229
+ font $arcadia['conf']['main.component.font']
230
+ relief 'groove'
231
+ height 25
232
+ width 25
233
+ #pack('side' =>'left', 'anchor'=>'nw', :padx=>2, :pady=>2)
234
+ }
235
+ )
236
+ }
237
+
238
+ if @objCollections.length == 1
239
+ @familyts.raise(_name)
240
+ end
241
+ end
242
+
243
+ def class_image(_class=nil)
244
+ _current_class = _class
245
+ _found = false
246
+ if _class
247
+ _dir = File.dirname(_class.library.arcadia_lib_params.source)
248
+ end
249
+ while _current_class != nil && !_found
250
+ if defined?(_current_class.library)
251
+ _dir = File.dirname(_current_class.library.arcadia_lib_params.source)
252
+ end
253
+ _img = (_current_class.to_s+"_gif").upcase
254
+ _data = eval(_img + ' if defined?('+_img+')' )
255
+ #_file = _dir+"/res/"+_current_class.to_s+".gif"
256
+ if _data
257
+ #if FileTest.exist?(_file)
258
+ _found = true
259
+ else
260
+ _current_class = _current_class.superclass
261
+ end
262
+ end
263
+ return (_found)?_data:A_WIDGET_GIF
264
+ end
265
+ end