class Ui::OrocosComposerWidget

UI window to instanciate compositions

Attributes

composer[R]
composer_widget[R]
composition_models[R]
engine[R]
main[R]
model_to_item[R]
robot[R]
system_model[R]
ui[R]

Public Class Methods

new(system_model, robot, engine) click to toggle source
Calls superclass method
# File lib/orocos/roby/gui/orocos_composer.rb, line 18
def initialize(system_model, robot, engine)
    @system_model = system_model
    @robot        = robot
    super()
    @model_to_item = Hash.new
    @engine = engine
end

Public Instance Methods

actual_selection() click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 30
def actual_selection
    composer.actual_selection
end
exec() click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 56
def exec
    main.exec
end
item_clicked(item, column) click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 49
def item_clicked(item, column)
    idx = item.data(column, Qt::UserRole)
    composer.model = composition_models[idx]
end
model() click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 26
def model
    composer.model
end
set(model, selection) click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 34
def set(model, selection)
    composer.disable_updates
    ui.compositionModels.current_item = model_to_item[model]
    composer.model = model
    composer.selection.merge!(selection)
    composer.enable_updates
    composer.update
end
setupUi(main) click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 60
def setupUi(main)
    @main = main

    @ui = Ui::OrocosComposer.new
    @ui.setupUi(main)
    @graph_holder_layout = Qt::VBoxLayout.new(ui.graphHolder)

    composer = @composer = Ui::InstanciateComposition.new(system_model, robot, ui.graphHolder, engine)
    @composer_widget = composer.view
    @graph_holder_layout.add_widget(@composer_widget)

    @ui.use_main_selection.checked = composer.engine.use_main_selection?
    @ui.use_main_selection.connect(SIGNAL('toggled(bool)')) do |value|
        composer.engine.use_main_selection = value
        composer.update
    end

    Qt::Object.connect(ui.compositionModels, SIGNAL('itemClicked(QTreeWidgetItem*,int)'),
                      self, SLOT('item_clicked(QTreeWidgetItem*,int)'))
    composer.connect(SIGNAL('updated()')) do
        begin
            text = composer.to_ruby
            ui.codeDisplay.text = text
            ui.btnDone.enabled = true
        rescue Exception => e
            ui.codeDisplay.text = e.message
            ui.btnDone.enabled = false
        end
    end
    
    @composition_models = []
    system_model.each_composition do |model|
        next if model.is_specialization?
        composition_models << model
        item = Qt::TreeWidgetItem.new(ui.compositionModels, [model.short_name])
        model_to_item[model] = item
        item.setData(0, Qt::UserRole, Qt::Variant.new(composition_models.size - 1))
    end

    ui.btnCancel.connect(SIGNAL('clicked()')) do
        main.reject
    end
    ui.btnDone.connect(SIGNAL('clicked()')) do
        main.accept
    end
    ui.btnSaveSVG.connect(SIGNAL('clicked()')) do
        if filename = Qt::FileDialog.get_save_file_name
            composer.save_svg(filename)
        end
    end

    settings = Qt::Settings.new('Orocos', 'SystemBuilder')
    main.restore_geometry(settings.value('composer/geometry').to_byte_array)
    ui.hsplitter.restore_state(
        settings.value('composer/hsplitter/state').to_byte_array)
    ui.vsplitter.restore_state(
        settings.value('composer/vsplitter/state').to_byte_array)

    class << main; attr_accessor :ui end
    main.ui = ui
    def main.closeEvent(event)
        settings = Qt::Settings.new('Orocos', 'SystemBuilder')
        settings.setValue("composer/geometry",
                          Qt::Variant.new(save_geometry))
        settings.setValue("composer/vsplitter/state",
                          Qt::Variant.new(ui.vsplitter.save_state))
        settings.setValue("composer/hsplitter/state",
                          Qt::Variant.new(ui.hsplitter.save_state))
        super
    end
end
state() click to toggle source
# File lib/orocos/roby/gui/orocos_composer.rb, line 43
def state
    model = composer.model
    actual_selection = composer.actual_selection
    return model, actual_selection
end