class Syskit::GUI::BatchManager

Constants

StartJob

Public Class Methods

new(syskit, parent = nil) click to toggle source
Calls superclass method
# File lib/syskit/gui/batch_manager.rb, line 6
def initialize(syskit, parent = nil)
    super(parent)
    @syskit = syskit

    @actions         = Qt::Widget.new
    actions_layout  = Qt::HBoxLayout.new(@actions)
    @process_btn = Qt::PushButton.new("Process")
    @cancel_btn  = Qt::PushButton.new("Cancel")

    actions_layout.add_widget(@process_btn)
    actions_layout.add_widget(@cancel_btn)
    add_widget(@actions, permanent: true)

    @process_btn.connect(SIGNAL(:clicked)) do
        process
    end
    @cancel_btn.connect(SIGNAL(:clicked)) do
        cancel
    end
    disable_actions

    @start_job = Array.new
    @drop_job = Array.new
end

Public Instance Methods

cancel() click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 49
def cancel
    clear
end
clear() click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 53
def clear
    clear_widgets
    @start_job.clear
    @drop_job.clear
    disable_actions
end
create_new_job(action_name, arguments = Hash.new) click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 88
def create_new_job(action_name, arguments = Hash.new)
    action_model = @syskit.actions.find { |m| m.name == action_name }
    if !action_model
        raise ArgumentError, "no action named #{action_name} found"
    end

    if action_model.arguments.empty?
        start_job(action_name, Hash.new)
        true
    else
        formatted_arguments = String.new
        action_model.arguments.each do |arg|
            default_arg     = arguments.fetch(
                arg.name.to_sym, arg.default)
            has_default_arg = arguments.has_key?(arg.name.to_sym) || !arg.required?

            if !formatted_arguments.empty?
                formatted_arguments << ",\n"
            end
            doc_lines = (arg.doc || "").split("\n")
            formatted_arguments << "\n  # #{doc_lines.join("\n  # ")}\n"
            if !has_default_arg
                formatted_arguments << "  #{arg.name}: "
            elsif default_arg.nil?
                formatted_arguments << "  #{arg.name}: nil"
            elsif default_arg.respond_to?(:name) && MetaRuby::Registration.accessible_by_name?(default_arg)
                formatted_arguments << "  #{arg.name}: #{default_arg.name}"
            elsif as_string = ToString.convert(default_arg)
                formatted_arguments << "  #{arg.name}: #{as_string}"
            elsif arg.required?
                formatted_arguments << "  #{arg.name}: "
            else
                formatted_arguments << "  # #{arg.name}'s default argument cannot be handled by the IDE\n"
                formatted_arguments << "  # #{arg.name}: #{default_arg}"

            end
        end
        formatted_action = "#{action_name}!(\n#{formatted_arguments}\n)"
        dialog = NewJobDialog.new(self, formatted_action)
        if dialog.exec == Qt::Dialog::Accepted
            action_name, action_options = dialog.result
            start_job(action_name, action_options)
            true
        else false
        end
    end
end
disable_actions() click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 62
def disable_actions
    emit active(false)
    @process_btn.enabled = false
    @cancel_btn.enabled = false
end
drop_job(job_widget) click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 76
def drop_job(job_widget)
    @drop_job << job_widget.job
    add_before(Qt::Label.new("<b>Drop</b> #{job_widget.label}"), @actions)
    enable_actions
end
enable_actions() click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 68
def enable_actions
    emit active(true)
    @process_btn.enabled = true
    @cancel_btn.enabled = true
end
process() click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 31
def process
    batch = @syskit.client.create_batch
    @drop_job.each do |j|
        batch.drop_job(j.job_id)
    end
    @start_job.each do |j|
        arguments = j.action_arguments
        arguments.delete(:job_id)
        batch.start_job(j.action_name, arguments)
    end
    begin
        batch.__process
    rescue Exception => e
        Qt::MessageBox.critical(self, "Syskit Process Batch", "failed to process batch: #{e.message}, see console output for more details")
    end
    clear
end
start_job(action_name, action_arguments) click to toggle source
# File lib/syskit/gui/batch_manager.rb, line 82
def start_job(action_name, action_arguments)
    @start_job << StartJob.new(action_name, action_arguments)
    add_before(Qt::Label.new("<b>Start</b> #{action_name}"), @actions)
    enable_actions
end