Class: Glimmer::Gtk::WidgetProxy
- Inherits:
-
Object
- Object
- Glimmer::Gtk::WidgetProxy
show all
- Defined in:
- lib/glimmer/gtk/widget_proxy.rb,
lib/glimmer/gtk/widget_proxy/box_proxy.rb,
lib/glimmer/gtk/widget_proxy/window_proxy.rb,
lib/glimmer/gtk/widget_proxy/application_proxy.rb,
lib/glimmer/gtk/widget_proxy/drawing_area_proxy.rb,
lib/glimmer/gtk/widget_proxy/message_dialog_proxy.rb
Overview
Proxy for Gtk widget objects
Follows the Proxy Design Pattern
Defined Under Namespace
Classes: ApplicationProxy, BoxProxy, DrawingAreaProxy, MessageDialogProxy, WindowProxy
Constant Summary
collapse
- KEYWORD_ALIASES =
{
}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
-
#content(&block) ⇒ Object
-
#initialize(keyword, parent, args, &block) ⇒ WidgetProxy
constructor
A new instance of WidgetProxy.
-
#method_missing(method_name, *args, &block) ⇒ Object
-
#post_add_content ⇒ Object
Subclasses may override to perform post add_content work (normally must call super).
-
#post_initialize_child(child) ⇒ Object
Subclasses may override to perform post initialization work on an added child (normally must also call super).
-
#respond_to?(method_name, include_private = false, &block) ⇒ Boolean
-
#respond_to_gtk?(method_name, include_private = false, &block) ⇒ Boolean
-
#send_to_gtk(method_name, *args, &block) ⇒ Object
-
#window_proxy ⇒ Object
Constructor Details
#initialize(keyword, parent, args, &block) ⇒ WidgetProxy
Returns a new instance of WidgetProxy.
134
135
136
137
138
139
140
141
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 134
def initialize(keyword, parent, args, &block)
@keyword = keyword
@parent_proxy = parent
@args = args
@block = block
build_widget
post_add_content if @block.nil?
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
171
172
173
174
175
176
177
178
179
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 171
def method_missing(method_name, *args, &block)
if @gtk.respond_to?("set_#{method_name}", true) && !args.empty?
send_to_gtk("set_#{method_name}", *args, &block)
elsif @gtk.respond_to?(method_name, true)
send_to_gtk(method_name, *args, &block)
else
super
end
end
|
Instance Attribute Details
#args ⇒ Object
gtk returns the contained Gtk object
132
133
134
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 132
def args
@args
end
|
#block ⇒ Object
gtk returns the contained Gtk object
132
133
134
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 132
def block
@block
end
|
#gtk ⇒ Object
gtk returns the contained Gtk object
132
133
134
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 132
def gtk
@gtk
end
|
#keyword ⇒ Object
gtk returns the contained Gtk object
132
133
134
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 132
def keyword
@keyword
end
|
#parent_proxy ⇒ Object
gtk returns the contained Gtk object
132
133
134
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 132
def parent_proxy
@parent_proxy
end
|
Class Method Details
.constant_symbol(keyword) ⇒ Object
84
85
86
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 84
def constant_symbol(keyword)
"#{keyword.camelcase(:upper)}Proxy".to_sym
end
|
.create(keyword, parent, args, &block) ⇒ Object
76
77
78
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 76
def create(keyword, parent, args, &block)
widget_proxy_class(keyword).new(keyword, parent, args, &block)
end
|
.descendant_keyword_constant_map ⇒ Object
96
97
98
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 96
def descendant_keyword_constant_map
@descendant_keyword_constant_map ||= add_aliases_to_keyword_constant_map(map_descendant_keyword_constants_for(self))
end
|
.exist?(keyword) ⇒ Boolean
67
68
69
70
71
72
73
74
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 67
def exist?(keyword)
::Gtk.const_get(gtk_constant_symbol(keyword)) ||
widget_proxy_class(keyword)
rescue => e
Glimmer::Config.logger.debug {"No widget exists for keyword: #{keyword}"}
Glimmer::Config.logger.debug {e.full_message}
false
end
|
.gtk_constant_symbol(keyword) ⇒ Object
88
89
90
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 88
def gtk_constant_symbol(keyword)
keyword.camelcase(:upper).to_sym
end
|
.keyword(constant_symbol) ⇒ Object
92
93
94
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 92
def keyword(constant_symbol)
constant_symbol.to_s.underscore.sub(/_proxy$/, '')
end
|
.map_descendant_keyword_constants_for(klass, accumulator: {}) ⇒ Object
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 105
def map_descendant_keyword_constants_for(klass, accumulator: {})
klass.constants.map do |constant_symbol|
[constant_symbol, klass.const_get(constant_symbol)]
end.select do |constant_symbol, constant|
constant.is_a?(Module) && !accumulator.values.include?(constant)
end.each do |constant_symbol, constant|
accumulator[keyword(constant_symbol)] = constant
map_descendant_keyword_constants_for(constant, accumulator: accumulator)
end
accumulator
end
|
.reset_descendant_keyword_constant_map ⇒ Object
100
101
102
103
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 100
def reset_descendant_keyword_constant_map
@descendant_keyword_constant_map = nil
descendant_keyword_constant_map
end
|
80
81
82
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 80
def widget_proxy_class(keyword)
descendant_keyword_constant_map[keyword] || WidgetProxy
end
|
Instance Method Details
#content(&block) ⇒ Object
#post_add_content ⇒ Object
Subclasses may override to perform post add_content work (normally must call super)
144
145
146
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 144
def post_add_content
@parent_proxy&.post_initialize_child(self)
end
|
#post_initialize_child(child) ⇒ Object
Subclasses may override to perform post initialization work on an added child (normally must also call super)
149
150
151
152
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 149
def post_initialize_child(child)
@gtk.add(child.gtk) if @gtk.respond_to?(:add) child.gtk&.show if child.gtk&.respond_to?(:show)
end
|
#respond_to?(method_name, include_private = false, &block) ⇒ Boolean
162
163
164
165
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 162
def respond_to?(method_name, include_private = false, &block)
respond_to_gtk?(method_name, include_private, &block) ||
super(method_name, include_private)
end
|
#respond_to_gtk?(method_name, include_private = false, &block) ⇒ Boolean
167
168
169
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 167
def respond_to_gtk?(method_name, include_private = false, &block)
@gtk.respond_to?(method_name, include_private) || @gtk.respond_to?("set_#{method_name}", include_private)
end
|
#send_to_gtk(method_name, *args, &block) ⇒ Object
181
182
183
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 181
def send_to_gtk(method_name, *args, &block)
@gtk.send(method_name, *args, &block)
end
|
#window_proxy ⇒ Object
154
155
156
157
158
159
160
|
# File 'lib/glimmer/gtk/widget_proxy.rb', line 154
def window_proxy
found_proxy = self
until found_proxy.nil? || found_proxy.is_a?(WindowProxy)
found_proxy = found_proxy.parent_proxy
end
found_proxy
end
|