Events
In this chapter, we’re going to learn how to listen events of StarUML.
Listening events
Section titled “Listening events”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 = initThe objects also provide once, off (removeListener), removeAllListeners, listenerCount and listeners.
Available events
Section titled “Available events”| 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,beforeUndoandbeforeRedoof StarUML 7 or earlier are not available. operationis an object{id, time, name, bypass}. The list of operators (ops) is not provided.- The elements passed to
deletedare already removed from the repository, so only_idcan 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.beforeExecuteCommandofapp.commands) are not available.