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