Class: QtSourceGenerator
Class Method Summary
collapse
Instance Method Summary
collapse
#get_type, #id_type, #nativeTypeNameFor, #null_id, super_class, super_class_include
#_append, _use_by_files, _use_by_models, #get_classname, #get_pluralized_name, #get_singular_name, #get_type, #get_value, #id_type, #indent, #make_block, #null_id, prepare, #ptr_type, #should_generate_for, #should_generate_from_manifest, #should_skip_on_client?, sourcefile_to_destfile, #unindent, use
Class Method Details
.extension ⇒ Object
120
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 120
def extension ; ".cpp" ; end
|
.is_file_based? ⇒ Boolean
122
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 122
def is_file_based? ; true ; end
|
.make_file(filename, data) ⇒ Object
124
125
126
127
128
129
130
131
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 124
def make_file filename, data
source = <<CPP
#include "#{filename.split('/').last[0...-3]}.h"
#{collect_includes_for(filename).join "\n"}
#{data[:bodies].join "\n"}
CPP
end
|
Instance Method Details
#generate_constructor(object) ⇒ Object
31
32
33
34
35
36
37
38
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 31
def generate_constructor object
@state = :constructor
_append "#{@class_name}::#{@class_name}(QObject* parent) : #{super_class}(parent)"
make_block do
self.instance_eval &object[:block]
end
_append ""
end
|
#generate_for(object) ⇒ Object
13
14
15
16
17
18
19
20
21
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 13
def generate_for object
reset
@class_name = object[:name]
@inherits = object[:inherits]
generate_constructor object
generate_transient_members unless @transients.empty?
generate_methods object
@src
end
|
#generate_methods(object) ⇒ Object
47
48
49
50
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 47
def generate_methods object
@state = :methods
self.instance_eval &object[:block]
end
|
#generate_transient_members ⇒ Object
40
41
42
43
44
45
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 40
def generate_transient_members
@transients.each do |member|
list << "{#{member.inspect}}"
end
_append "const QStringList #{@class_name}::virtualPropertyNames = {#{list.join ','}};"
end
|
#has_many(type, name, options = {}) ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 94
def has_many type, name, options = {}
setter = "set#{name.camelcase}"
member_name = "m_#{name.lower_camelcase}"
signal = "#{name}Changed"
case @state
when :constructor
_append "registerRelationship(\"#{name}\", #{member_name});"
when :methods
_append "void #{@class_name}::#{setter}(const QList<#{type}*>& value)"
make_block do
_append "#{member_name} = value;"
_append "Q_EMIT #{signal}();"
end
end
end
|
#has_one(type, name, options = {}) ⇒ Object
87
88
89
90
91
92
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 87
def has_one type, name, options = {}
case @state
when :constructor
@transients << name
end
end
|
#order_by(name, flow = nil) ⇒ Object
116
117
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 116
def order_by name, flow = nil
end
|
#property(type, name, options = {}) ⇒ Object
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 52
def property type, name, options = {}
property_type = type.to_property_type(self)
type = property_type.name
member = "m_#{name.lower_camelcase}"
member = options[:qt][:member] if options[:qt] && options[:qt][:member]
getter = name.lower_camelcase
setter = "set#{name.camelcase}"
signal = "#{name.lower_camelcase}Changed"
case @state
when :constructor
_append "connect(this, &#{@class_name}::#{signal}, this, &#{@class_name}::attributeChanged);"
unless options[:qt].nil? || options[:qt][:member].nil?
_append "#{member} = #{get_value options[:default]};" unless options[:default].nil?
end
@transients << name if options[:db] && options[:db][:transient]
when :methods
getter_options = if options[:qt] && options[:qt][:getter] then options[:qt][:getter] else {} end
setter_options = if options[:qt] && options[:qt][:setter] then options[:qt][:setter] else {} end
getter_type = property_type.parameter_type getter_options
setter_type = property_type.parameter_type setter_options
_append "\n#{getter_type} #{@class_name}::#{getter}() const"
make_block do
_append "return #{member};"
end
_append "\nvoid #{@class_name}::#{setter}(#{setter_type} _value)"
make_block do
_append "if (_value != #{member})"
make_block do
_append "#{member} = _value;"
_append "Q_EMIT #{signal}();"
end
end
end
end
|
#reset ⇒ Object
4
5
6
7
8
9
10
11
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 4
def reset
super
@state = nil
@relations = {}
@fields = []
@transients = []
@signals = []
end
|
#resource_name(name) ⇒ Object
113
114
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 113
def resource_name name
end
|
#super_class ⇒ Object
23
24
25
26
27
28
29
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 23
def super_class
if @inherits.nil?
self.class.super_class
else
@inherits
end
end
|
#visibility(name) ⇒ Object
110
111
|
# File 'lib/metarecord/generators/qt/source_generator.rb', line 110
def visibility name
end
|