# File gstreamer/sample/gst-inspect.rb, line 114
def print_element_info(f)
    raise "Could not create element" unless e = f.create
    puts "Factory Details:"
    prefix do
        f.details.each do |key, val|
            puts key.capitalize.concat(":").ljust(15) + val
        end
    end
    puts ""
    print_hierarchy(e)
    puts ""
    puts "Pad Templates:"
    prefix do 
        f.each_pad_template do |p|
            dir = case p.direction
                when Gst::Pad::SRC  then "SRC"
                when Gst::Pad::SINK then "SINK"
                else "UNKNOWN"
            end
            puts dir + " template: " + p.name
            pres = case p.presence
                when Gst::Pad::ALWAYS    then "always"
                when Gst::Pad::SOMETIMES then "sometimes"
                when Gst::Pad::REQUEST   then "on request"
                else "unknown"
            end
            puts "Avaibility: " + pres
            if p.has_caps?
                puts "Capabilities:" + p.caps.to_s
            end
        end
    end
    puts ""
    puts "Element Flags:"
    prefix do
        flags = {
            e.complex?          => "GST_ELEMENT_COMPLEX", 
            e.decoupled?        => "GST_ELEMENT_DECOUPLED", 
            e.thread_suggested? => "GST_ELEMENT_THREADSUGGESTED",
            e.event_aware?      => "GST_ELEMENT_EVENT_AWARE" 
        }
        flags.each { |b, v| puts v if b }
        puts "no flags set" unless flags.has_key?(true) 
    end
    puts ""
    puts "Clock Interaction:"
    prefix do
        puts "element requires a clock" if e.requires_clock? 
        if e.provides_clock?
            if c = e.clock   
                puts "element provides a clock: " + c.name 
            else
                puts "element is supposed to provide a clock but returned nil"
            end
        end
        puts "none" unless (e.requires_clock? or e.provides_clock?)        
    end
    puts ""
    puts "Indexing capabilities:"
    prefix { puts((e.indexable?) ? "element can do indexing" : "none") }
    puts ""
    puts "Pads:"
    prefix do
        if e.pads.empty?
            puts "none"
        else
            e.pads.each { |pad| print_pad(pad) }
        end   
    end    
    puts ""
    puts "Element Arguments:"
    prefix do 
        e.each_property do |key, descr, val|
            puts key.concat(":").ljust(15) + descr
            puts " ".ljust(15) + "#{val.class.to_s} (default: '#{val}')"
        end
    end
    puts ""
    puts "Signals:"
    prefix do
        if e.class.signals.empty?
            puts "none"
        else
            e.class.signals.each { |x| puts x }
        end
    end
end