Skip to content

Working with Selections

In this chapter, we’re going to learn how to get selected elements, force to select particular elements, and do something by listening to selection changed events.

Users can select elements in a diagram or in Model Explorer. Sometimes we may need to access only the selected elements.

We need to distinguish between selected views and selected models. If you select the Book class in a diagram, then there is a selected view (UMLClassView) and a selected model (UMLClass). If you select the Author class in Model Explorer, then there is a selected model (UMLClass) and no selected views.

We can access selected elements using app.selections as following:

var selectedViews = app.selections.getSelectedViews()
var selectedModels = app.selections.getSelectedModels()
var selected = app.selections.getSelected() // === selectedModels[0]

To select a model element in Model Explorer, use ModelExplorerView module. (Assume that Book.mdj used in Accessing Elements were loaded)

var book = app.repository.select("Model::Book")[0]
app.modelExplorer.select(book)

To scroll automatically so as to show the element, pass true value as the second parameter.

app.modelExplorer.select(book, true)

To select a view element in diagram, use app.diagrams. You can find more functions about selection in Scripting API.

var diagram = app.repository.select("@Diagram")[0]
var view1 = diagram.ownedViews[0]
app.diagrams.selectInDiagram(view1)

app.selections also provides select(models, views), selectModel(model), selectViews(views) and deselectAll().

Now we will show how to listen and handle a selection change event. An array of selected model elements and an array of selected view elements are passed to the first and the second parameters respectively to the callback function. For other events, see Events.

app.selections.on('selectionChanged', function (models, views) {
console.log("Selected number of model elements: ", models.length)
console.log("Selected number of view elements: ", views.length)
})