class Vizkit::PluginConnections::ConnectionManager
Attributes
disconnect_on_hide[RW]
Public Class Methods
new(owner)
click to toggle source
Calls superclass method
Vizkit::ConnectionManager.new
# File lib/vizkit/plugin_extensions.rb, line 101 def initialize(owner) super @disconnect_on_hide = true @filter = ShowHideEventFilter.new # we have to use an event filter because # c++ widgets cannot be overloaded owner.installEventFilter(@filter) if owner.is_a? Qt::Object @filter.on_hide do disconnect if @disconnect_on_hide end @filter.on_show do reconnect if @disconnect_on_hide end end
Public Instance Methods
callback_for(type_name)
click to toggle source
# File lib/vizkit/plugin_extensions.rb, line 117 def callback_for(type_name) fct = @owner.plugin_spec.find_callback! :argument => type_name, :callback_type => :display if fct fct.bind(@owner) else raise Orocos::NotFound,"#{@owner.class_name} has no callback for #{type_name}" end end
connect_to(port,callback=nil,options=Hash.new,&block)
click to toggle source
# File lib/vizkit/plugin_extensions.rb, line 126 def connect_to(port,callback=nil,options=Hash.new,&block) raise_error = lambda do raise "no callback found for#{port} and #{@owner}" end if(@owner.respond_to?(:config) && @owner.config(port,options,&block) == :do_not_connect) Vizkit.info "Disable auto connect for #{@owner} because config returned :do_not_connect" nil elsif !port.respond_to?(:type?) callback ||= callback_for(port) raise_error.call unless callback callback.call(port) else callback ||= if port.type? callback_for(port.type_name) else listener = port.once_on_reachable do @on_reachable_listeners[port].delete listener callback = callback_for(port.type_name) raise_error.call unless callback end @on_reachable_listeners[port] << listener end raise_error.call unless callback Vizkit.info "Create new Connection for #{port.name} and #{@owner || callback}" listener = port.on_data do |data| callback.call data,port.full_name end @on_data_listeners[port] << listener listener end end