Skip to content

Events

In this chapter, we’re going to learn how to listen events of StarUML.

As in Node.js EventEmitter, you can listen an event by calling on(event, listener) of the objects in app.

function init () {
app.repository.on('created', function (elems) {
elems.filter(e => e instanceof type.UMLClass).forEach(c => console.log('created: ' + c.name))
})
app.selections.on('selectionChanged', function (models, views) {
console.log('selected: ' + models.length)
})
}
exports.init = init

The objects also provide once, off (removeListener), removeAllListeners, listenerCount and listeners.

Object Event (arguments)
app.repository created(elems), updated(elems), deleted(elems), reordered(elem), relocated(elem, field, oldParent, newParent), operationExecuted(operation), undo(operation), redo(operation), modified
app.selections selectionChanged(models, views)
app.project projectCreated(project), projectLoaded(filename, project), projectSaved(filename, project), beforeProjectClose(filename, project), projectClosed, imported(filename, elem), exported(filename, elem)
app.factory diagramCreated(diagram), elementCreated(model, view)
app.diagrams currentDiagramChanged(diagram, editor), workingDiagramAdd(diagram), workingDiagramRemove(diagram), workingDiagramsClear, selectionChanged(views), viewDoubleClicked(view, x, y), viewMoved(views, dx, dy), parasiticViewMoved(view, alpha, distance), containerViewChanged(views, dx, dy, containerView), nodeResized(node, left, top, right, bottom), edgeModified(edge, points), edgeReconnected(edge, points, newParticipant, isTailSide), zoom(scale)
app.preferences change(key, value)
  • Listeners are called right after the model is changed (when an API call of a script returns, or after a user action is handled). So beforeExecuteOperation, beforeUndo and beforeRedo of StarUML 7 or earlier are not available.
  • operation is an object {id, time, name, bypass}. The list of operators (ops) is not provided.
  • The elements passed to deleted are already removed from the repository, so only _id can be read.
  • An error thrown in a listener is printed in Script Console, and the other listeners are still called.
  • If a listener changes the model, the events are emitted again. When the nested events exceed 8 levels, the listeners are not called any more and an error is printed in Script Console.
  • The events of the application object (app.on(...)) and the events of other objects (e.g. beforeExecuteCommand of app.commands) are not available.