Class: Glimmer::SWT::GWidget
- Inherits:
-
Object
- Object
- Glimmer::SWT::GWidget
show all
- Includes:
- Parent
- Defined in:
- lib/glimmer/swt/g_widget.rb
Constant Summary
collapse
- @@default_styles =
{
"text" => GSWT[:border],
"table" => GSWT[:border],
"spinner" => GSWT[:border],
"list" => GSWT[:border, :v_scroll],
"button" => GSWT[:push],
}
- @@default_initializers =
{
"composite" => Proc.new {|composite| composite.setLayout(GridLayout.new) },
"table" => Proc.new do |table|
table.(true)
table.setLinesVisible(true)
end,
"table_column" => Proc.new { |table_column| table_column.setWidth(80) },
"group" => Proc.new {|group| group.setLayout(GridLayout.new) },
}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(underscored_widget_name, parent, styles, &contents) ⇒ GWidget
styles is a comma separate list of symbols representing SWT styles in lower case
40
41
42
43
|
# File 'lib/glimmer/swt/g_widget.rb', line 40
def initialize(underscored_widget_name, parent, styles, &contents)
@widget = self.class.swt_widget_class_for(underscored_widget_name).new(parent, style(underscored_widget_name, styles))
@@default_initializers[underscored_widget_name].call(@widget) if @@default_initializers[underscored_widget_name]
end
|
Instance Attribute Details
Returns the value of attribute widget.
17
18
19
|
# File 'lib/glimmer/swt/g_widget.rb', line 17
def widget
@widget
end
|
Class Method Details
This supports widgets in and out of basic SWT
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/glimmer/swt/g_widget.rb', line 101
def self.swt_widget_class_for(underscored_widget_name)
swt_widget_name = underscored_widget_name.camelcase(:upper)
swt_widget_class = eval(swt_widget_name)
unless swt_widget_class.ancestors.include?(org.eclipse.swt.widgets.Widget)
Glimmer.logger.debug("Class #{swt_widget_class} matching #{underscored_widget_name} is not a subclass of org.eclipse.swt.widgets.Widget")
return nil
end
swt_widget_class
rescue NameError => e
Glimmer.logger.debug("#{e.message}\n#{e.backtrace.join("\n")}")
nil
rescue => e
Glimmer.logger.debug("#{e.message}\n#{e.backtrace.join("\n")}")
nil
end
|
96
97
98
|
# File 'lib/glimmer/swt/g_widget.rb', line 96
def self.widget_exists?(underscored_widget_name)
!!swt_widget_class_for(underscored_widget_name)
end
|
Instance Method Details
#add_listener(underscored_listener_name, &block) ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
# File 'lib/glimmer/swt/g_widget.rb', line 149
def add_listener(underscored_listener_name, &block)
listener_method_name = underscored_listener_name.camelcase(:lower)
@widget.getClass.getMethods.each do |widget_method|
if widget_method.getName.match(/add.*Listener/)
widget_method.getParameterTypes.each do |listener_type|
listener_type.getMethods.each do |listener_method|
if (listener_method.getName == listener_method_name)
listener_class = Class.new(Object)
listener_class.send :include, (eval listener_type.to_s.sub("interface", ""))
listener = listener_class.new
listener_type.getMethods.each do |t_method|
eval "def listener.#{t_method.getName}(event) end"
end
def listener.block=(block)
@block = block
end
listener.block=block
eval "def listener.#{listener_method.getName}(event) @block.call(event) if @block end"
@widget.send(widget_method.getName, listener)
return GWidgetListener.new(listener)
end
end
end
end
end
end
|
#apply_property_type_converters(attribute_name, args) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/glimmer/swt/g_widget.rb', line 83
def apply_property_type_converters(attribute_name, args)
if args.count == 1
value = args.first
converter = property_type_converters[attribute_name.to_sym]
args[0] = converter.call(value) if converter
end
if args.count == 1 && args.first.is_a?(GColor)
g_color = args.first
g_color.display = widget.display if g_color.display.nil? || g_color.display != widget.display
args[0] = g_color.color
end
end
|
#async_exec(&block) ⇒ Object
180
181
182
|
# File 'lib/glimmer/swt/g_widget.rb', line 180
def async_exec(&block)
@widget.getDisplay.asyncExec(GRunnable.new(&block))
end
|
#can_add_listener?(underscored_listener_name) ⇒ Boolean
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/glimmer/swt/g_widget.rb', line 133
def can_add_listener?(underscored_listener_name)
listener_method_name = underscored_listener_name.camelcase(:lower)
@widget.getClass.getMethods.each do |widget_method|
if widget_method.getName.match(/add.*Listener/)
widget_method.getParameterTypes.each do |listener_type|
listener_type.getMethods.each do |listener_method|
if (listener_method.getName == listener_method_name)
return true
end
end
end
end
end
return false
end
|
#dispose ⇒ Object
192
193
194
|
# File 'lib/glimmer/swt/g_widget.rb', line 192
def dispose
@widget.dispose
end
|
#has_attribute?(attribute_name, *args) ⇒ Boolean
49
50
51
|
# File 'lib/glimmer/swt/g_widget.rb', line 49
def has_attribute?(attribute_name, *args)
@widget.respond_to?(attribute_setter(attribute_name), args)
end
|
#has_style?(style) ⇒ Boolean
45
46
47
|
# File 'lib/glimmer/swt/g_widget.rb', line 45
def has_style?(swt_style)
pd(pd(@widget.getStyle) & swt_style) == pd(swt_style)
end
|
#process_block(block) ⇒ Object
176
177
178
|
# File 'lib/glimmer/swt/g_widget.rb', line 176
def process_block(block)
block.call(@widget)
end
|
#property_type_converters ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/glimmer/swt/g_widget.rb', line 58
def property_type_converters
color_converter = Proc.new do |value|
if value.is_a?(Symbol) || value.is_a?(String)
GColor.color_for(widget.getDisplay, value)
else
value
end
end
@property_type_converters ||= {
:text => Proc.new { |value| value.to_s },
:items => Proc.new { |value| value.to_java :string},
:visible => Proc.new { |value| !!value},
:background => color_converter,
:foreground => color_converter,
:font => Proc.new do |value|
if value.is_a?(Hash)
font_properties = value
GFont.for(self).font(font_properties)
else
value
end
end,
}
end
|
#set_attribute(attribute_name, *args) ⇒ Object
53
54
55
56
|
# File 'lib/glimmer/swt/g_widget.rb', line 53
def set_attribute(attribute_name, *args)
apply_property_type_converters(attribute_name, args)
@widget.send(attribute_setter(attribute_name), *args)
end
|
#sync_exec(&block) ⇒ Object
184
185
186
|
# File 'lib/glimmer/swt/g_widget.rb', line 184
def sync_exec(&block)
@widget.getDisplay.syncExec(GRunnable.new(&block))
end
|
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/glimmer/swt/g_widget.rb', line 117
def widget_listener_exists?(underscored_listener_name)
listener_method_name = underscored_listener_name.listener_method_name(:lower)
@widget.getClass.getMethods.each do |widget_method|
if widget_method.getName.match(/add.*Listener/)
widget_method.getParameterTypes.each do |listener_type|
listener_type.getMethods.each do |listener_method|
if (listener_method.getName == listener_method_name)
return true
end
end
end
end
end
return false
end
|