class Glimmer::Gtk::WidgetProxy
Proxy for Gtk
widget objects
Follows the Proxy Design Pattern
Constants
- KEYWORD_ALIASES
Attributes
args[R]
gtk returns the contained Gtk
object
block[R]
gtk returns the contained Gtk
object
gtk[R]
gtk returns the contained Gtk
object
keyword[R]
gtk returns the contained Gtk
object
parent_proxy[R]
gtk returns the contained Gtk
object
Public Class Methods
constant_symbol(keyword)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 88 def gtk_constant_symbol(keyword) keyword.camelcase(:upper).to_sym end
keyword(constant_symbol)
click to toggle source
# 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: {})
click to toggle source
# 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
new(keyword, parent, args, &block)
click to toggle source
# 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
reset_descendant_keyword_constant_map()
click to toggle source
# 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
widget_proxy_class(keyword)
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 80 def widget_proxy_class(keyword) descendant_keyword_constant_map[keyword] || WidgetProxy end
Private Class Methods
add_aliases_to_keyword_constant_map(keyword_constant_map)
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 119 def add_aliases_to_keyword_constant_map(keyword_constant_map) KEYWORD_ALIASES.each do |keyword, alias_keyword| keyword_constant_map[alias_keyword] = keyword_constant_map[keyword] end keyword_constant_map end
Public Instance Methods
content(&block)
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 185 def content(&block) Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Gtk::WidgetExpression.new, @keyword, &block) end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# 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
post_add_content()
click to toggle source
Subclasses may override to perform post add_content work (normally must call super)
# File lib/glimmer/gtk/widget_proxy.rb, line 144 def post_add_content @parent_proxy&.post_initialize_child(self) end
post_initialize_child(child)
click to toggle source
Subclasses may override to perform post initialization work on an added child (normally must also call super)
# File lib/glimmer/gtk/widget_proxy.rb, line 149 def post_initialize_child(child) @gtk.add(child.gtk) if @gtk.respond_to?(:add) # && child.keyword != 'menu' # TODO consider moving this code to a MenuProxy child.gtk&.show if child.gtk&.respond_to?(:show) end
respond_to?(method_name, include_private = false, &block)
click to toggle source
Calls superclass method
# 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)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# 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
Private Instance Methods
build_widget()
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 191 def build_widget @gtk = ::Gtk.const_get(WidgetProxy.gtk_constant_symbol(@keyword)).new(*normalize_args(@args)) end
normalize_args(args)
click to toggle source
# File lib/glimmer/gtk/widget_proxy.rb, line 195 def normalize_args(args) if args.size == 1 && args.first.is_a?(Hash) hash_arg = args.first hash_arg = Hash[hash_arg.map do |key, value| normalized_value = value.respond_to?(:gtk) ? value.gtk : value [key, normalized_value] end] args[0] = hash_arg args elsif args.is_a?(Array) args.map do |arg| arg.is_a?(WidgetProxy) ? arg.gtk : arg end else args end end