Events and delegates

Event

Yue uses the signal/slot pattern for the event system, each event is a signal that can be connected by multiple slots, and event handlers are slots that can connect to multiple signals.

In Yue each signal is an instance of Signal class, while slot is just a function.

const {app} = require('gui')
app.onReady.connect(() => console.log('on ready'))

It is also possible to connect a slot to a signal by assignment, which is a shorthand of calling connect.

app.onReady = () => console.log('on ready')

Preventing the default behavior

Certain events have default behaviors that can be prevented.

Returning true means preventing the default behavior, and other slots of the event will not be executed. While returning nothing or false means the slot is only observing the event.

const {Container} = require('gui')
let view = Container.create()
view.onMouseDown.connect((self, event) => true)

Delegate

Unlike event that can have multiple handlers connected, a delegate is a single Function that can only be assigned by one function.

const {Window} = require('gui')
let window = Window.create({})
window.shouldClose = (self) => false

The delegates are usually used over events when the library is requesting data dynamically.