Class: RubyQt6::QtCore::Private::MetaObject

Inherits:
Object
  • Object
show all
Defined in:
lib/qt6/qtcore/private/metaobject.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(qlass) ⇒ MetaObject

Returns a new instance of MetaObject.



32
33
34
35
36
37
# File 'lib/qt6/qtcore/private/metaobject.rb', line 32

def initialize(qlass)
  @qlass = qlass
  @qlass_underlying = @qlass.name.start_with?("RubyQt6::") ? :libQt6 : :ruby
  @classinfo = {}
  @metamethods = []
end

Instance Attribute Details

#metamethodsObject (readonly)

Returns the value of attribute metamethods.



7
8
9
# File 'lib/qt6/qtcore/private/metaobject.rb', line 7

def metamethods
  @metamethods
end

Class Method Details

.find_receiver_metamethod!(receiver, receiver_metamethod_name, signal) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/qt6/qtcore/private/metaobject.rb', line 9

def self.find_receiver_metamethod!(receiver, receiver_metamethod_name, signal)
  if signal.nil?
    signature = "anonymous()"
    signal = QtCore::Private::MetaMethod.new(signature, :signal, :ruby)
  end

  name = QtCore::Private::MetaMethod.normalized_name(receiver_metamethod_name.to_s)
  compatible_methods = signal.parameters.count.downto(0).map do |n|
    QtCore::Private::MetaMethod.normalized_signature(name, signal.parameters[0...n])
  end

  receiver_class = receiver.is_a?(Class) ? receiver : receiver.class
  mo = receiver_class._rubyqt6_metaobject
  until mo.nil?
    mo.metamethods.each { |meth| return meth if compatible_methods.include?(meth.signature) }
    mo.metamethods.each { |meth| return meth if name == meth.name } if mo.ruby?
    mo = mo.super_class
  end

  qlass = receiver_class.name.split("::").last
  raise "No compatible metamethod: #{qlass}##{name}"
end

Instance Method Details

#add_classinfo(name, value) ⇒ Object Also known as: classinfo



39
40
41
# File 'lib/qt6/qtcore/private/metaobject.rb', line 39

def add_classinfo(name, value)
  @classinfo[name] = value
end

#add_signal(signature) ⇒ Object Also known as: signal



44
45
46
# File 'lib/qt6/qtcore/private/metaobject.rb', line 44

def add_signal(signature)
  @metamethods << QtCore::Private::MetaMethod.new(signature, :signal, @qlass_underlying)
end

#add_slot(signature) ⇒ Object Also known as: slot



49
50
51
# File 'lib/qt6/qtcore/private/metaobject.rb', line 49

def add_slot(signature)
  @metamethods << QtCore::Private::MetaMethod.new(signature, :slot, @qlass_underlying)
end

#class_nameObject



54
55
56
# File 'lib/qt6/qtcore/private/metaobject.rb', line 54

def class_name
  @qlass.name
end

#ruby?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/qt6/qtcore/private/metaobject.rb', line 63

def ruby?
  @qlass_underlying == :ruby
end

#super_classObject



58
59
60
61
# File 'lib/qt6/qtcore/private/metaobject.rb', line 58

def super_class
  return nil if @qlass == QObject
  @qlass.superclass._rubyqt6_metaobject
end

#to_qmetaobjectObject



67
68
69
70
71
72
73
74
75
76
# File 'lib/qt6/qtcore/private/metaobject.rb', line 67

def to_qmetaobject
  return @qlass._static_meta_object unless ruby?

  builder = QMetaObjectBuilder.new
  builder.set_class_name(@qlass.name)
  builder.set_super_class(@qlass.superclass._qmetaobject)
  @classinfo.each { |name, value| builder.add_class_info(name, value) }
  @metamethods.each { |meth| _to_qmetaobject_method(builder, meth) }
  builder.to_meta_object
end