#! /usr/bin/env ruby

require 'vizkit'
require 'orocos'
require 'optparse'

@show_all = false
@proxy = true
parser = OptionParser.new do |opt|

    opt.banner = <<-EOT

usage: rock-plot [--host hostname] task_name.port_name.field_name1:field_name2 ...

Plots data from one or more Orocos port sample fields

    EOT
    opt.on('--host=HOSTNAME', String, "the corba nameserver we should contact") do |name|
        Orocos::CORBA.name_service.ip = name
    end
    opt.on('--help') do
        puts parser
        exit 0
    end
end

remaining = parser.parse(ARGV)
if remaining.empty? 
    puts parser
    exit 1
end

Orocos.initialize
plot_widget = Vizkit.default_loader.Plot2d
remaining.each do |spec|
    plots = spec.split(' ')
    plots.each do |plot| 
        begin
            task,port_name = plot.split('.',2)
            
            raise "No task name was given!" if(!task)
            raise "No port name was given!" if(!port_name)

            task_proxy = Orocos::Async.proxy(task)
            task_proxy.port(port_name).once_on_reachable do
                puts "Connected to #{task}.#{port_name}"
                Vizkit.display task_proxy.port(port_name), :widget=> plot_widget
            end
            
        rescue ArgumentError,RuntimeError => e
            Vizkit.warn "cannot plot #{task}:#{port_name}:#{subfields.to_a.join(":")}"
            Vizkit.warn e
            Vizkit.warn e.backtrace
            exit 1
        end
    end
end
plot_widget.replot
Vizkit.exec

