ffi-efl 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Changelog CHANGED
@@ -1,3 +1,8 @@
1
+ 2011-05-xx Jérémy Zurcher <jeremy@asynk.ch>
2
+ * add REinaList#from_a ptrt
3
+ * add REinaList#to_a ptrt=nil
4
+ * rework EcoreGetopt
5
+
1
6
  2011-05-11 Jérémy Zurcher <jeremy@asynk.ch>
2
7
  * use ditz ass issure tracker
3
8
  * use FFI.attach_variable for EAPI extern ...
data/MIT-LICENSE CHANGED
@@ -6,10 +6,10 @@ deal in the Software without restriction, including without limitation the
6
6
  rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
7
  sell copies of the Software, and to permit persons to whom the Software is
8
8
  furnished to do so, subject to the following conditions:
9
-
9
+
10
10
  The above copyright notice and this permission notice shall be included in
11
11
  all copies or substantial portions of the Software.
12
-
12
+
13
13
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
14
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
15
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
data/README.rdoc CHANGED
@@ -8,23 +8,48 @@ A ruby-ffi binding to efl libraries (Enlightenment Foundation Libraries).
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
- * Not 1.8 compatible yet !!!
11
+ * pretty young project ...
12
12
 
13
13
  == SYNOPSIS:
14
14
 
15
- require 'efl'
16
- Efl::Eet.init
17
- Efl::Eet::REetFile.open('/tmp/_eet.cfg', :eet_file_mode_write) do |f|
18
- f.write 'config2', 'test--key'
15
+ require 'efl/elementary'
16
+
17
+ Efl::Elm.init
18
+
19
+ on_exit = Proc.new do |data, evas_object, event_info|
20
+ puts "EXIT #{data.read_string}"
21
+ Efl::Elm.exit
19
22
  end
20
- Efl::Eet::REetFile.open('/tmp/_eet.cfg', :eet_file_mode_read) do |f|
21
- puts f.read('config2')
23
+
24
+ win = Efl::Elm::ElmWin.new nil, "Window name" do |w|
25
+ w.title = "My title"
26
+ w.alpha = true
27
+ w.move 300, 300
28
+ w.resize 200, 100
29
+ bg = Efl::Elm::ElmBg.new w do |bg|
30
+ bg.size_hint_weight_expand
31
+ bg.size_hint_align_fill
32
+ bg.evas_object_color_set 200,255,100,150
33
+ bg.show
34
+ end
35
+ w.resize_object_add bg
36
+ lb = Efl::Elm::ElmLabel.new w do |lb|
37
+ lb.label_set "Hello World!"
38
+ lb.size_hint_weight_set 1.0, 1.0
39
+ end
40
+ lb.show
41
+ w.resize_object_add lb
42
+ w.smart_callback_add "delete,request", on_exit, FFI::MemoryPointer.from_string("my data")
22
43
  end
23
- Efl::Eet.shutdown
24
44
 
25
- For less minimalistic and more sane examples you may look at:
45
+ win.show
46
+
47
+ Efl::Elm.run
48
+ Efl::Elm.shutdown
49
+
50
+ For more examples you may look at:
26
51
 
27
- * the spec/ and test/ folders
52
+ * the spec/[https://github.com/jeremyz/ffi-efl/tree/master/spec] and test/[https://github.com/jeremyz/ffi-efl/tree/master/test] folders
28
53
 
29
54
  == REQUIREMENTS:
30
55
 
@@ -33,7 +33,7 @@ module Efl
33
33
  yield self if block_given?
34
34
  end
35
35
  def self.release p
36
- Native.ecore_evas_free p unless p.nil?
36
+ Native.ecore_evas_free p
37
37
  end
38
38
  def free p=nil
39
39
  @ptr.autorelease=false
@@ -19,6 +19,10 @@ module Efl
19
19
  :doublep, :double_p,
20
20
  :listp, :eina_list_p,
21
21
  :ptrp, :void_p
22
+
23
+ def value_ptr idx
24
+ Native::EcoreGetoptValue.new to_ptr+(idx*Native::EcoreGetoptValue.size)
25
+ end
22
26
  end
23
27
  #
24
28
  class EcoreGetoptDescStoreDef < FFI::Union
@@ -85,49 +89,112 @@ module Efl
85
89
  module EcoreGetopt
86
90
  #
87
91
  class REcoreGetopt
92
+ #
88
93
  def initialize desc
89
- @ecore_getopt = nil
94
+ @pts = []
95
+ @ecore_getopt_st = nil
96
+ @ecore_values_st = nil
90
97
  @desc = desc
91
98
  @options = [
92
99
  [ 0 ],
93
100
  ]
94
- @values = [
95
- [ :ptrp, FFI::Pointer::NULL ]
96
- ]
97
- @refs = [] # to prevent FFI::MemoryPointer.from_string from beeing GC'ed
98
- end
99
- def p_from_string r
100
- return r if r==FFI::Pointer::NULL
101
+ @values = {
102
+ :sentinel0 => [ :pointer, FFI::Pointer::NULL ]
103
+ }
104
+ @values_order = [ :sentinel0 ]
105
+ @types = {
106
+ :string => [ :ecore_getopt_type_str, :strv, :strp ],
107
+ :uchar => [ :ecore_getopt_type_bool, :boolv, :boolp ],
108
+ :short => [ :ecore_getopt_type_short, :shortv, :shortp ],
109
+ :int => [ :ecore_getopt_type_int, :intv, :intp ],
110
+ :long => [ :ecore_getopt_type_long, :longv, :longp ],
111
+ :ushort => [ :ecore_getopt_type_ushort, :ushortv, :ushortp ],
112
+ :uint => [ :ecore_getopt_type_uint, :uintv, :uintp ],
113
+ :ulong => [ :ecore_getopt_type_ulong, :ulongv, :ulongp ],
114
+ :double => [ :ecore_getopt_type_double, :doublev, :doublep ],
115
+ :list => [ :list, nil, :listp ],
116
+ :pointer=> [ :pointer, nil, :ptrp ],
117
+ :choice => [ :pointer, nil, :ptrp ]
118
+ }
119
+ end
120
+ def want_p r
121
+ return r if r.is_a? FFI::Pointer
122
+ return FFI::Pointer::NULL if r.nil?
101
123
  p = FFI::MemoryPointer.from_string r
102
- @refs << p
124
+ @pts << p
103
125
  p
104
126
  end
105
- private :p_from_string
106
- def << o
127
+ private :want_p
128
+ def set_option o
107
129
  @options.insert -2, o
108
130
  end
109
- def value type, ptr
110
- @values.insert -2, [ type, ptr ]
131
+ def set_value key, ptype, val=nil
132
+ skey = key.to_s
133
+ r = @values[skey]
134
+ if r.nil?
135
+ case ptype
136
+ when :list
137
+ p = FFI::MemoryPointer.new :pointer
138
+ p.write_pointer val[0]
139
+ r = @values[skey] = [ ptype, p, val[1] ] # add sub_type info
140
+ when :choice
141
+ p = FFI::MemoryPointer.new :pointer
142
+ p.write_pointer FFI::Pointer::NULL
143
+ r = @values[skey] = [ ptype, p ]
144
+ when :string
145
+ p = FFI::MemoryPointer.new :pointer
146
+ p.write_pointer FFI::Pointer::NULL
147
+ r = @values[skey] = [ ptype, p ]
148
+ when :pointer
149
+ r = @values[skey] = [ ptype, val ]
150
+ else
151
+ p = FFI::MemoryPointer.new ptype
152
+ p.send 'write_'+ptype.to_s, val unless val.nil?
153
+ r = @values[skey] = [ ptype, p ]
154
+ end
155
+ @pts << p
156
+ end
157
+ @values_order.insert -2, skey
158
+ r
159
+ end
160
+ def [] k
161
+ ptype, ptr, sub_type = @values[k.to_s]
162
+ return nil if ptype.nil?
163
+ case ptype
164
+ when:list
165
+ require 'efl/eina_list'
166
+ Efl::EinaList::REinaList.new(ptr.read_pointer).to_a sub_type
167
+ when :choice
168
+ p = ptr.read_pointer
169
+ ( p==FFI::Pointer::NULL ? nil : p.read_string )
170
+ when :string
171
+ p = ptr.read_pointer
172
+ (p==FFI::Pointer::NULL ? nil : p.read_string )
173
+ when :pointer
174
+ ptr.to_ptr
175
+ else
176
+ ptr.send 'read_'+ptype.to_s
177
+ end
111
178
  end
112
179
  def to_ptr
113
- @ecore_getopt.to_ptr
180
+ ( @ecore_getopt_st.nil? ? nil : @ecore_getopt_st.to_ptr )
114
181
  end
115
182
  def create
116
- @ecore_getopt = Native::EcoreGetopt.new( FFI::MemoryPointer.new( :uchar, Native::EcoreGetopt.size+Native::EcoreGetoptDesc.size*@options.length) )
183
+ @ecore_getopt_st = Native::EcoreGetopt.new( FFI::MemoryPointer.new( :uchar, Native::EcoreGetopt.size+Native::EcoreGetoptDesc.size*@options.length) )
117
184
  [:prog,:usage,:version,:copyright,:license,:description].each do |sym|
118
- @ecore_getopt[sym] = ( @desc.has_key?(sym) ? FFI::MemoryPointer.from_string(@desc[sym]) : FFI::Pointer::NULL )
185
+ @ecore_getopt_st[sym] = ( @desc.has_key?(sym) ? FFI::MemoryPointer.from_string(@desc[sym]) : FFI::Pointer::NULL )
119
186
  end
120
- @ecore_getopt[:strict] = @desc[:strict] if @desc.has_key? :strict
187
+ @ecore_getopt_st[:strict] = @desc[:strict] if @desc.has_key? :strict
121
188
  @options.each_with_index do |o,i|
122
- d = @ecore_getopt.desc_ptr i
189
+ d = @ecore_getopt_st.desc_ptr i
123
190
  if o[0]==0
124
191
  d[:shortname] = d[:longname] = d[:help] = d[:metavar] = d[:action] = d[:action_param][:dummy] = 0
125
192
  break
126
193
  end
127
194
  d[:shortname] = o[0].to_s.bytes.first
128
- d[:longname] = p_from_string o[1]
129
- d[:help] = p_from_string o[2]
130
- d[:metavar] = o[3]
195
+ d[:longname] = want_p o[1]
196
+ d[:help] = want_p o[2]
197
+ d[:metavar] = want_p o[3]
131
198
  d[:action] = o[4]
132
199
  k, v = o[5]
133
200
  case k
@@ -143,13 +210,7 @@ module Efl
143
210
  st = d[:action_param][:store]
144
211
  st[:type] = v[0]
145
212
  st[:arg_req] = v[1]
146
- if not v[2].nil?
147
- if v[2][0]==:strv
148
- st[:def][:strv] = p_from_string v[2][1]
149
- else
150
- st[:def][v[2][0]] = v[2][1]
151
- end
152
- end
213
+ st[:def][v[2]] = (v[2]==:strv ? want_p(v[3]) : v[3] ) unless v[3].nil?
153
214
  when :store_const
154
215
  d[:action_param][:store_const] = v
155
216
  when :choices
@@ -160,119 +221,139 @@ module Efl
160
221
  d[:action_param][:dummy] = FFI::Pointer::NULL
161
222
  end
162
223
  end
163
- @values_p = FFI::MemoryPointer.new Native::EcoreGetoptValue, @values.length, false
164
- @values.each_with_index do |v,i|
165
- Native::EcoreGetoptValue.new(@values_p+(i*Native::EcoreGetoptValue.size))[v[0]] = v[1]
224
+ @ecore_values_st = Native::EcoreGetoptValue.new FFI::MemoryPointer.new Native::EcoreGetoptValue, @values_order.length, false
225
+ @values_order.each_with_index do |k,i|
226
+ vtype, vpointer, *sub_type = @values[k]
227
+ vpointer.write_pointer @ecore_getopt_st.desc_ptr(i)[:action_param][:store][:def][:strv] if vtype==:string
228
+ etype, vfield, pfield = @types[vtype]
229
+ @ecore_values_st.value_ptr(i)[pfield] = vpointer
166
230
  end
231
+ self
167
232
  end
168
233
  def parse argv
169
234
  ptr = FFI::MemoryPointer.new(:pointer, argv.length+1)
170
235
  argv.each_with_index do |s, i|
171
- ptr[i].put_pointer 0, p_from_string(s)
236
+ ptr[i].put_pointer 0, want_p(s)
172
237
  end
173
238
  ptr[argv.length].put_pointer 0, FFI::Pointer::NULL
174
- Native.ecore_getopt_parse @ecore_getopt, @values_p, argv.length, ptr
239
+ Native.ecore_getopt_parse @ecore_getopt_st, @ecore_values_st, argv.length, ptr
175
240
  end
176
- def store_full short, long, help, meta, type, arg_req, def_val
177
- self << [ short, long, help, meta, :ecore_getopt_action_store, [:store, [type,arg_req, def_val] ] ]
241
+ def help short, long, key=nil
242
+ set_value key||short, :uchar, 0
243
+ set_option [ short, long, 'show this message.', FFI::Pointer::NULL, :ecore_getopt_action_help, [:dummy,FFI::Pointer::NULL] ]
178
244
  end
179
- def store short, long, help, type
180
- store_full short, long, help, FFI::Pointer::NULL, type, :ecore_getopt_desc_arg_requirement_yes, nil
245
+ def version short, long, key=nil
246
+ set_value key||short, :uchar, 0
247
+ set_option [ short, long, 'show program version.', FFI::Pointer::NULL, :ecore_getopt_action_version, [:dummy,FFI::Pointer::NULL] ]
181
248
  end
182
- def store_type type, short, long, help
183
- store short, long, help, ('ecore_getopt_type_'+type.to_s).to_sym
249
+ def copyright short, long, key=nil
250
+ set_value key||short, :uchar, 0
251
+ set_option [ short, long, 'show copyright.', FFI::Pointer::NULL, :ecore_getopt_action_copyright, [:dummy,FFI::Pointer::NULL] ]
184
252
  end
185
- def store_metavar short, long, help, meta, type
186
- store_full short, long, help, meta, type, :ecore_getopt_desc_arg_requirement_yes, nil
253
+ def license short, long, key=nil
254
+ set_value key||short, :uchar, 0
255
+ set_option [ short, long, 'show license.', FFI::Pointer::NULL, :ecore_getopt_action_license, [:dummy,FFI::Pointer::NULL] ]
187
256
  end
188
- def store_meta_type type, short, long, help, meta
189
- store_metavar short, long, help, meta, ('ecore_getopt_type_'+type.to_s).to_sym
257
+ def store_full short, long, help, meta, arg_req, type, def_val
258
+ vtype, vpointer = set_value short, type, def_val
259
+ etype, vfield, pfield = @types[vtype]
260
+ set_option [ short, long, help, meta, :ecore_getopt_action_store, [:store, [etype, arg_req, vfield, def_val] ] ]
190
261
  end
191
- def store_def short, long, help, type, def_val
192
- store_full short, long, help, FFI::Pointer::NULL, type, :ecore_getopt_desc_arg_requirement_optional, def_val
262
+ def store short, long, help, type, def_val=nil
263
+ store_full short, long, help, FFI::Pointer::NULL, :ecore_getopt_desc_arg_requirement_yes, type, def_val
193
264
  end
194
- def store_def_type type, short, long, help, def_val
195
- store_def short, long, help, ('ecore_getopt_type_'+type.to_s).to_sym, [ (type.to_s+'v').to_sym, def_val ]
265
+ def store_meta short, long, help, meta, type, def_val=nil
266
+ store_full short, long, help, meta, :ecore_getopt_desc_arg_requirement_yes, type, def_val
196
267
  end
197
- def store_full_type type, short, long, help, meta, arg_req, def_val
198
- store_full short, long, help, meta, ('ecore_getopt_type_'+type.to_s).to_sym, arg_req, [ (type.to_s+'v').to_sym, def_val ]
268
+ def store_def short, long, help, type, def_val
269
+ store_full short, long, help, FFI::Pointer::NULL, :ecore_getopt_desc_arg_requirement_optional, type, def_val
199
270
  end
200
- def store_const short, long, help, value
201
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_const, [:store_const, value] ]
271
+ def store_const short, long, help, def_val, value
272
+ set_value short, :int, def_val
273
+ set_option [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_const, [:store_const, value] ]
202
274
  end
203
275
  def store_true short, long, help
204
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_true, [:dummy,FFI::MemoryPointer::NULL] ]
276
+ set_value short, :uchar, 0
277
+ set_option [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_true, [:dummy,FFI::MemoryPointer::NULL] ]
205
278
  end
206
279
  def store_false short, long, help
207
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_false, [:dummy,FFI::MemoryPointer::NULL] ]
208
- end
209
- def choice short, long, help, choices
210
- ptr = FFI::MemoryPointer.new(:pointer, choices.length+1)
211
- choices.each_with_index do |s, i|
212
- ptr[i].put_pointer 0, p_from_string(s)
280
+ set_value short, :uchar, 1
281
+ set_option [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_store_false, [:dummy,FFI::MemoryPointer::NULL] ]
282
+ end
283
+ def count short, long, help, def_val
284
+ set_value short, :int, def_val
285
+ set_option [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_count, [:dummy,FFI::Pointer::NULL] ]
286
+ end
287
+ def append_meta short, long, help, meta, sub_type, def_val=nil
288
+ if def_val.nil?
289
+ p = FFI::Pointer::NULL
290
+ else
291
+ p = def_val.inject(FFI::Pointer::NULL) { |list,e|
292
+ ptr = FFI::MemoryPointer.new sub_type
293
+ @pts << ptr
294
+ ptr.send 'write_'+sub_type.to_s, e
295
+ Native.eina_list_append list, ptr
296
+ }
213
297
  end
214
- ptr[choices.length].put_pointer 0, FFI::Pointer::NULL
215
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_choice, [:choices,ptr] ]
298
+ set_value short, :list, [want_p(p),sub_type]
299
+ set_option [ short, long, help, meta, :ecore_getopt_action_append, [:append,@types[sub_type][0]] ]
216
300
  end
217
- def choice_metavar short, long, help, meta, choices
218
- ptr = FFI::MemoryPointer.new(:pointer, choices.length+1)
301
+ def append short, long, help, sub_type, def_val=nil
302
+ append_meta short, long, help, FFI::Pointer::NULL, sub_type, def_val
303
+ end
304
+ def choice_meta short, long, help, meta, choices
305
+ p = FFI::MemoryPointer.new(:pointer, choices.length+1)
306
+ @pts << p
219
307
  choices.each_with_index do |s, i|
220
- ptr[i].put_pointer 0, p_from_string(s)
308
+ p[i].put_pointer 0, want_p(s)
221
309
  end
222
- ptr[choices.length].put_pointer 0, FFI::Pointer::NULL
223
- self << [ short, long, help, meta, :ecore_getopt_action_choice, [:choices,ptr] ]
224
- end
225
- def append short, long, help, sub_type
226
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_append, [:append,sub_type] ]
227
- end
228
- def append_metavar short, long, help, meta, sub_type
229
- self << [ short, long, help, meta, :ecore_getopt_action_append, [:append,sub_type] ]
310
+ p[choices.length].put_pointer 0, FFI::Pointer::NULL
311
+ set_value short, :choice
312
+ set_option [ short, long, help, meta, :ecore_getopt_action_choice, [:choices,p] ]
230
313
  end
231
- def count short, long, help
232
- self << [ short, long, help, FFI::Pointer::NULL, :ecore_getopt_action_count, [:dummy,FFI::Pointer::NULL] ]
314
+ def choice short, long, help, choices
315
+ choice_meta short, long, help, FFI::Pointer::NULL, choices
233
316
  end
234
- def callback_full short, long, help, meta, cb, data, arg_req, def_val
235
- self << [ short, long, help, meta, :ecore_getopt_action_callback, [:callback, [cb, data, arg_req, def_val] ] ]
317
+ def callback_full short, long, help, meta, cb, data, arg_req, type, def_val
318
+ pt, ptr = set_value short, type, def_val
319
+ arg_req = ( arg_req ? :ecore_getopt_desc_arg_requirement_yes : :ecore_getopt_desc_arg_requirement_no )
320
+ set_option [ short, long, help, meta, :ecore_getopt_action_callback, [:callback, [cb, want_p(data), arg_req, ptr ] ] ]
236
321
  end
237
322
  def callback_noargs short, long, help, cb, data=nil
238
- callback_full short, long, help, FFI::Pointer::NULL, cb, data, :ecore_getopt_desc_arg_requirement_no, FFI::Pointer::NULL
239
- end
240
- def callback_args short, long, help, meta, cb, data=nil
241
- callback_full short, long, help, meta, cb, data, :ecore_getopt_desc_arg_requirement_yes, FFI::Pointer::NULL
242
- end
243
- def help short, long
244
- self << [ short, long, 'show this message.', FFI::Pointer::NULL, :ecore_getopt_action_help, [:dummy,FFI::Pointer::NULL] ]
323
+ callback_full short, long, help, FFI::Pointer::NULL, cb, data, false, :uchar, 0
245
324
  end
246
- def version short, long
247
- self << [ short, long, 'show program version.', FFI::Pointer::NULL, :ecore_getopt_action_version, [:dummy,FFI::Pointer::NULL] ]
325
+ def callback_args short, long, help, meta, cb, data, type, def_val
326
+ callback_full short, long, help, meta, cb, data, true, type, def_val
248
327
  end
249
- def copyright short, long
250
- self << [ short, long, 'show copyright.', FFI::Pointer::NULL, :ecore_getopt_action_copyright, [:dummy,FFI::Pointer::NULL] ]
251
- end
252
- def license short, long
253
- self << [ short, long, 'show license.', FFI::Pointer::NULL, :ecore_getopt_action_license, [:dummy,FFI::Pointer::NULL] ]
254
- end
255
- # def sentinel
256
- # self << [ 0, FFI::Pointer::NULL, FFI::Pointer::NULL, FFI::Pointer::NULL, 0, {:dummy=>FFI::Pointer::NULL} ]
257
- # end
258
328
  #
259
329
  def debug
260
330
  r = ''
261
- r << "#{self.class} : #{@ecore_getopt.to_ptr}\n"
331
+ r << "#{self.class} : #{@ecore_getopt_st.to_ptr}\n"
262
332
  [:prog,:usage,:version,:copyright,:license,:description].each do |sym|
263
- r<< " #{sym.to_s} : #{@ecore_getopt[sym]==FFI::Pointer::NULL ? 'NULL' : @ecore_getopt[sym].read_string}\n"
333
+ r<< " #{sym.to_s} : #{@ecore_getopt_st[sym]==FFI::Pointer::NULL ? 'NULL' : @ecore_getopt_st[sym].read_string}\n"
264
334
  end
265
- r << " strict : #{@ecore_getopt[:strict]}\n"
335
+ r << " strict : #{@ecore_getopt_st[:strict]}\n"
266
336
  i=0
337
+ r << " Descriptions\n"
267
338
  while true
268
- d = @ecore_getopt.desc_ptr i
269
- break if d[:shortname]==0 and d[:longname] == FFI::Pointer::NULL
270
- r << " desc #{d.to_ptr}\n"
271
- r << " short: #{d[:shortname].chr}\n" unless d[:shortname]==0
272
- r << " long: #{d[:longname].read_string}\n" unless d[:longname]==FFI::Pointer::NULL
273
- r << " help: #{d[:help].read_string}\n" unless d[:help]==FFI::Pointer::NULL
339
+ st = @ecore_getopt_st.desc_ptr i
340
+ break if st[:shortname]==0 and st[:longname] == FFI::Pointer::NULL
341
+ r << " desc #{st.to_ptr}\n"
342
+ r << " short: #{st[:shortname].chr}\n" unless st[:shortname]==0
343
+ r << " long: #{st[:longname].read_string}\n" unless st[:longname]==FFI::Pointer::NULL
344
+ r << " help: #{st[:help].read_string}\n" unless st[:help]==FFI::Pointer::NULL
274
345
  i+=1
275
346
  end
347
+ r << " Values\n"
348
+ @values_order.each_with_index do |k,i|
349
+ st = @ecore_values_st.value_ptr i
350
+ vtype, vpointer = @values[k]
351
+ etype, vfield, pfield = @types[vtype]
352
+ r << " value #{st.to_ptr}\n"
353
+ r << " key: #{k}\n"
354
+ r << " type: #{vtype}\n"
355
+ r << " value: #{self[k]}\n"
356
+ end
276
357
  r
277
358
  end
278
359
  end
data/lib/efl/edje.rb CHANGED
@@ -18,31 +18,31 @@ module Efl
18
18
  #
19
19
  def part_object_get part
20
20
  # EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part);
21
- Evas::RevasObject.new Native.edje_object_part_object_get @ptr, part
21
+ Evas::REvasObject.new Native.edje_object_part_object_get @ptr, part
22
22
  end
23
23
  def part_swallow_get part
24
24
  # EAPI Evas_Object *edje_object_part_swallow_get (const Evas_Object *obj, const char *part);
25
- Evas::RevasObject.new Native.edje_object_part_swallow_get @ptr, part
25
+ Evas::REvasObject.new Native.edje_object_part_swallow_get @ptr, part
26
26
  end
27
27
  def external_object_get part
28
28
  # EAPI Evas_Object *edje_object_part_external_object_get (const Evas_Object *obj, const char *part);
29
- Evas::RevasObject.new Native.edje_object_part_external_object_get @ptr, part
29
+ Evas::REvasObject.new Native.edje_object_part_external_object_get @ptr, part
30
30
  end
31
31
  def external_content_get part, content
32
32
  # EAPI Evas_Object *edje_object_part_external_content_get (const Evas_Object *obj, const char *part, const char *content);
33
- Evas::RevasObject.new Native.edje_object_part_external_content_get @ptr, part, content
33
+ Evas::REvasObject.new Native.edje_object_part_external_content_get @ptr, part, content
34
34
  end
35
35
  def part_box_remove part, child
36
36
  # EAPI Evas_Object *edje_object_part_box_remove (Evas_Object *obj, const char *part, Evas_Object *child);
37
- Evas::RevasObject.new Native.edje_object_part_box_remove @ptr, part, child
37
+ Evas::REvasObject.new Native.edje_object_part_box_remove @ptr, part, child
38
38
  end
39
39
  def part_box_remove_at part, pos
40
40
  # EAPI Evas_Object *edje_object_part_box_remove_at (Evas_Object *obj, const char *part, unsigned int pos);
41
- Evas::RevasObject.new Native.edje_object_part_box_remove_at @ptr, part, pos
41
+ Evas::REvasObject.new Native.edje_object_part_box_remove_at @ptr, part, pos
42
42
  end
43
43
  def part_table_child_get part, col, row
44
44
  # EAPI Evas_Object *edje_object_part_table_child_get (Evas_Object *obj, const char *part, unsigned int col, unsigned int row);
45
- Evas::RevasObject.new Native.edje_object_part_table_child_get @ptr, part, col, row
45
+ Evas::REvasObject.new Native.edje_object_part_table_child_get @ptr, part, col, row
46
46
  end
47
47
  def file_get
48
48
  f = FFI::MemoryPointer.new :pointer
data/lib/efl/eina_list.rb CHANGED
@@ -40,6 +40,13 @@ module Efl
40
40
  Native.eina_list_free @ptr
41
41
  @ptr = nil
42
42
  end
43
+ def self.from_a ary, ptrt
44
+ REinaList.new ary.inject(FFI::Pointer::NULL) { |p,e|
45
+ ptr = FFI::MemoryPointer.new ptrt
46
+ ptr.send 'write_'+ptrt.to_s, e
47
+ Native.eina_list_append p, ptr
48
+ }
49
+ end
43
50
  def each
44
51
  return if not block_given?
45
52
  p = @ptr
@@ -49,8 +56,9 @@ module Efl
49
56
  p = l[:next]
50
57
  end
51
58
  end
52
- def to_a
53
- inject([]) { |s,e| s<<e }
59
+ def to_a ptrt=nil
60
+ return inject([]) { |s,e| s<<e } if ptrt.nil?
61
+ inject([]) { |s,e| s<< e.send('read_'+ptrt.to_s) }
54
62
  end
55
63
  alias :to_ary :to_a
56
64
  # for fun and tests