Class: GObject::Value
- Inherits:
-
Object
- Object
- GObject::Value
- Defined in:
- lib/ffi-gobject/value.rb
Overview
Overrides for GValue, GObject’s generic value container structure.
Constant Summary collapse
- METHOD_MAP =
{ TYPE_BOOLEAN => [:get_boolean, :set_boolean], TYPE_BOXED => [:get_boxed, :set_boxed], TYPE_CHAR => [:get_char, :set_char], TYPE_DOUBLE => [:get_double, :set_double], TYPE_ENUM => [:get_enum_enhanced, :set_enum_enhanced], TYPE_FLAGS => [:get_flags, :set_flags], TYPE_FLOAT => [:get_float, :set_float], TYPE_GTYPE => [:get_gtype, :set_gtype], TYPE_INT => [:get_int, :set_int], TYPE_INT64 => [:get_int64, :set_int64], TYPE_LONG => [:get_long, :set_long], TYPE_OBJECT => [:get_object, :set_instance_enhanced], TYPE_PARAM => [:get_param, :set_param], TYPE_POINTER => [:get_pointer, :set_pointer], TYPE_STRING => [:get_string, :set_string], TYPE_UCHAR => [:get_uchar, :set_uchar], TYPE_UINT => [:get_uint, :set_uint], TYPE_UINT64 => [:get_uint64, :set_uint64], TYPE_ULONG => [:get_ulong, :set_ulong], TYPE_VARIANT => [:get_variant, :set_variant] }
- CLASS_TO_GTYPE_MAP =
{ TrueClass => TYPE_BOOLEAN, FalseClass => TYPE_BOOLEAN, Integer => TYPE_INT, String => TYPE_STRING }
Class Method Summary collapse
- .for_g_type(g_type) ⇒ Object
- .from(val) ⇒ Object
-
.wrap_instance(instance) ⇒ Object
TODO: Combine with wrap_ruby_value.
-
.wrap_ruby_value(val) ⇒ Object
TODO: Give more generic name.
Instance Method Summary collapse
- #current_fundamental_type ⇒ Object
- #current_gtype ⇒ Object
- #current_gtype_name ⇒ Object
- #get_value ⇒ Object
- #get_value_plain ⇒ Object
- #init_for_ruby_value(val) ⇒ Object
-
#set_ruby_value(val) ⇒ Object
TODO: Give more generic name.
- #set_value(val) ⇒ Object (also: #value=)
Class Method Details
.for_g_type(g_type) ⇒ Object
99 100 101 102 |
# File 'lib/ffi-gobject/value.rb', line 99 def self.for_g_type g_type return nil if g_type == TYPE_NONE new.tap { |it| it.init g_type } end |
.from(val) ⇒ Object
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/ffi-gobject/value.rb', line 88 def self.from val case val when self val when nil nil else wrap_ruby_value val end end |
.wrap_instance(instance) ⇒ Object
TODO: Combine with wrap_ruby_value
105 106 107 108 109 110 |
# File 'lib/ffi-gobject/value.rb', line 105 def self.wrap_instance instance new.tap {|it| it.init GObject.type_from_instance instance it.set_instance instance } end |
.wrap_ruby_value(val) ⇒ Object
TODO: Give more generic name
84 85 86 |
# File 'lib/ffi-gobject/value.rb', line 84 def self.wrap_ruby_value val new.tap { |gv| gv.set_ruby_value val } end |
Instance Method Details
#current_fundamental_type ⇒ Object
62 63 64 |
# File 'lib/ffi-gobject/value.rb', line 62 def current_fundamental_type GObject.type_fundamental current_gtype end |
#current_gtype ⇒ Object
58 59 60 |
# File 'lib/ffi-gobject/value.rb', line 58 def current_gtype @struct[:g_type] end |
#current_gtype_name ⇒ Object
66 67 68 |
# File 'lib/ffi-gobject/value.rb', line 66 def current_gtype_name GObject.type_name current_gtype end |
#get_value ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/ffi-gobject/value.rb', line 70 def get_value value = get_value_plain if current_fundamental_type == TYPE_BOXED wrap_boxed value else value end end |
#get_value_plain ⇒ Object
79 80 81 |
# File 'lib/ffi-gobject/value.rb', line 79 def get_value_plain send get_method end |
#init_for_ruby_value(val) ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/ffi-gobject/value.rb', line 48 def init_for_ruby_value val CLASS_TO_GTYPE_MAP.each do |klass, type| if val.is_a? klass init type return self end end raise "Can't handle #{val.class}" end |
#set_ruby_value(val) ⇒ Object
TODO: Give more generic name
7 8 9 10 |
# File 'lib/ffi-gobject/value.rb', line 7 def set_ruby_value val init_for_ruby_value val if current_gtype == 0 set_value val end |
#set_value(val) ⇒ Object Also known as: value=
35 36 37 |
# File 'lib/ffi-gobject/value.rb', line 35 def set_value val send set_method, val end |