module Syskit::GUI::ModelViews

Public Class Methods

render_instance_requirements(page, req, resolve_dependency_injection: false) click to toggle source
# File lib/syskit/gui/model_views/profile.rb, line 64
def self.render_instance_requirements(page, req, resolve_dependency_injection: false)
    # First, render the main model
    component_model = [req.component_model]
    req_component = req.to_component_model

    if !component_model.first # This is a service proxy
        component_model.pop
    end
    if req.model.respond_to?(:tag_name)
        tag_name = req.model.tag_name
        formatted = ["<a href=\"#tag_definition_#{tag_name}\">#{tag_name}_tag</a>"]
    else
        if req_component.model.respond_to?(:proxied_data_services)
            component_model.concat(req_component.model.proxied_data_services.sort_by(&:name).compact)
        end
        formatted = [component_model.map { |m| page.link_to(m) }.join(",")]
    end
    if !req.arguments.empty?
        arguments = req.arguments.map { |key, value| "#{key}: #{value}" }
        formatted[0] += ".with_arguments(#{MetaRuby::GUI::HTML.escape_html(arguments.join(", "))})"
    end

    if resolve_dependency_injection
        selections = req.resolved_dependency_injection
        if !selections.empty?
            formatted_selections = render_instance_requirements_selections(page, selections)
            formatted[-1] += "."
            formatted.concat formatted_selections
        end
    else
        pushed_selections = req.send(:pushed_selections)
        if !pushed_selections.empty?
            formatted_selections = render_instance_requirements_selections(page, pushed_selections, "use<0>")
            formatted[-1] += "."
            formatted.concat formatted_selections
            use_suffix = "<1>"
        end

        selections = req.send(:selections)
        if !selections.empty?
            formatted_selections = render_instance_requirements_selections(page, selections, "use#{use_suffix}")
            formatted[-1] += "."
            formatted.concat formatted_selections
        end
    end
    formatted
end
render_instance_requirements_selections(page, selections, use_method = "use") click to toggle source
# File lib/syskit/gui/model_views/profile.rb, line 40
def self.render_instance_requirements_selections(page, selections, use_method = "use")
    defaults = selections.defaults.map do |defsel|
        render_instance_requirements(page, defsel.to_instance_requirements)
    end
    explicit = render_selection_mapping(page, selections.explicit)
    all = defaults + explicit
    all = all.each_with_index.map do |block, i|
        if i == 0
            block[0] = "  use(" + block.first
        else
            block[0] = "      " + block.first
        end
        block = [block[0]] + block[1..-1].map do |line|
            line = "      " + line
        end
        if i == all.size - 1
            block[-1] = block.last + ")"
        else
            block[-1] = block.last + ","
        end
        block
    end.flatten
end
render_mapping(page, key, sel) click to toggle source
# File lib/syskit/gui/model_views/profile.rb, line 11
def self.render_mapping(page, key, sel)
    if key.respond_to?(:to_instance_requirements)
        key = render_instance_requirements(page, key.to_instance_requirements)
    else
        key = [key.to_s]
    end
    if sel.respond_to?(:to_instance_requirements)
        sel = render_instance_requirements(page, sel.to_instance_requirements)
    else
        sel = [sel.to_s]
    end
    longest_key_line = key.max { |l| l.size }.size
    if key.size < sel.size
        key += [" " * longest_key_line] * (sel.size - key.size)
    end
    key.each_with_index.map do |k, key_index|
        if v = sel[key_index]
            k += " " * (longest_key_line - k.size)
            if key_index == 0
                k += ": #{v}"
            else
                k += "  #{v}"
            end
        else
            k
        end
    end
end
render_selection_mapping(page, mapping) click to toggle source
# File lib/syskit/gui/model_views/profile.rb, line 5
def self.render_selection_mapping(page, mapping)
    mapping.each_with_index.map do |(key, sel), sel_index|
        render_mapping(page, key, sel)
    end
end