class Glimmer::JFX::ControlProxy
Proxy for JavaFX control objects
Follows the Proxy Design Pattern
Attributes
args[R]
block[R]
jfx[R]
keyword[R]
parent_proxy[R]
Public Class Methods
control_class(keyword)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 73 def control_class(keyword) unless flyweight_control_class[keyword] begin control_class_name = control_class_symbol(keyword).to_s control_class = eval(control_class_name) unless control_class.ancestors.include?(Java::JavafxScene::Node) control_class = control_class_manual_entries[keyword] if control_class.nil? Glimmer::Config.logger.debug {"Class #{control_class} matching #{keyword} is not a subclass of javafx.scene.Node"} return nil end end flyweight_control_class[keyword] = control_class rescue SyntaxError, NameError => e Glimmer::Config.logger.debug {e.full_message} nil rescue => e Glimmer::Config.logger.debug {e.full_message} nil end end flyweight_control_class[keyword] end
control_class_manual_entries()
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 65 def control_class_manual_entries # add mappings for any classes (minus the namespace) that conflict with standard Ruby classes { # example: # 'date_time' => Java::OrgEclipseSwtWidgets::DateTime } end
control_class_symbol(keyword)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 57 def control_class_symbol(keyword) keyword.camelcase(:upper).to_sym end
control_proxy_class(keyword)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 43 def control_proxy_class(keyword) begin class_name = control_proxy_class_symbol(keyword) Glimmer::JFX::ControlProxy.const_get(class_name) rescue => e Glimmer::Config.logger.debug e.full_message Glimmer::JFX::ControlProxy end end
control_proxy_class_symbol(keyword)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 53 def control_proxy_class_symbol(keyword) "#{keyword.camelcase(:upper)}Proxy".to_sym end
create(parent, keyword, *args, &block)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 39 def create(parent, keyword, *args, &block) control_proxy_class(keyword).new(parent, keyword, *args, &block) end
exist?(keyword)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 35 def exist?(keyword) !!control_class(keyword) end
flyweight_control_class()
click to toggle source
Flyweight Design Pattern memoization cache. Can be cleared if memory is needed.
# File lib/glimmer/jfx/control_proxy.rb, line 98 def flyweight_control_class @flyweight_control_class ||= {} end
keyword(control_proxy_class)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 61 def keyword(control_proxy_class) control_proxy_class.to_s.underscore.sub(/_proxy$/, '') end
new(parent, keyword, *args, &block)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 105 def initialize(parent, keyword, *args, &block) @parent_proxy = parent @keyword = keyword @args = args @block = block build post_add_content if @block.nil? end
Public Instance Methods
content(&block)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 149 def content(&block) Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::JFX::ControlExpression.new, @keyword, &block) end
method_missing(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/glimmer/jfx/control_proxy.rb, line 137 def method_missing(method_name, *args, &block) if respond_to?("#{method_name}=", true) && !args.empty? send("#{method_name}=", *args) elsif @jfx.respond_to?("set_#{method_name}", true) && !args.empty? send_to_jfx("set_#{method_name}", *args, &block) elsif @jfx.respond_to?(method_name, true) send_to_jfx(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/jfx/control_proxy.rb, line 115 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/jfx/control_proxy.rb, line 120 def post_initialize_child(child) children.add(child.jfx) if respond_to?(:children) && child.is_a?(ControlProxy) end
respond_to?(method_name, *args, &block)
click to toggle source
Calls superclass method
# File lib/glimmer/jfx/control_proxy.rb, line 124 def respond_to?(method_name, *args, &block) respond_to_jfx?(method_name, *args, &block) || super(method_name, true) end
respond_to_jfx?(method_name, *args, &block)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 129 def respond_to_jfx?(method_name, *args, &block) @jfx.respond_to?(method_name, true) || @jfx.respond_to?("set_#{method_name}", true) end
send_to_jfx(method_name, *args, &block)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 133 def send_to_jfx(method_name, *args, &block) @jfx.send(method_name, *normalize_args(args), &block) end
Private Instance Methods
build()
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 155 def build @jfx = ControlProxy.control_class(keyword).new(*normalize_args(args)) end
normalize_args(args)
click to toggle source
# File lib/glimmer/jfx/control_proxy.rb, line 159 def normalize_args(args) args.map do |arg| arg.is_a?(ControlProxy) ? arg.jfx : arg end end