init {
variables := {
"a": {
"from": "001",
"to": "002"
}
}
}
native channel ScreenUpdate {
in screen(curSc: Json, update(curSc, nextSc)) = nextSc
}
native channel ChangeScreen {
out screen(curSc: Json, changeScreen(nextSc)) = nextSc
}
native channel SetLayout {
in screen.layout(curLayout: Bool, setLayout(nextLayout)) = nextLayout
}
native channel SetVisible(wid: Str) {
in screen.widgets.{wid}.visible(curVisible: Bool, setVisible(nextVisible)) = nextVisible
}
native channel SetText(wid: Str) {
in screen.widgets.{wid}.text(curText: Str, setText(nextText)) = nextText
}
native channel MouseEvent(wid: Str) {
out screen.widgets.{wid}.state(curState: Int, mouseEvent(nextState)) = nextState
}
native channel TextEvent(wid: Str) {
out screen.widgets.{wid}.text(curText: Str, textEvent(nextText)) = nextText
}
channel AddTextInput {
out screen.widgets(widgets: Map, addTextInput(wid: Str)) = insert(widgets, wid, {"type": "textInput", "text": "", "state": 0})
}
channel ChangeText(wid: Str) {
ref variables.a.from(from, updateText(from, to, newText))
ref variables.a.to(to, updateText(from, to, nexText))
in screen.widgets.{wid}.text(curText: Str, updateText(from, to, nexText)) = curText
out screen.widgets.{to}.text(curText: Str, updateText(from, to, nexText)) = if(wid == from, nextText, curText)
}