Embora conectar propriedades conforme descrito acima seja frequentemente suficiente, às vezes é mais flexível ou conveniente usar JS para programar a lógica da GUI. Dessa forma, o exemplo acima poderia ser reescrito como:
[...]
<code file="code.js"/>
'
<logic>
<script><![CDATA[
// [...] qualquer código no nível superior é chamado apenas uma vez.
gui.addChangeCommand("mode.string", function() {
// enquanto esta função anônima será chamada sempre que "mode.string" mudar
var varmode = (gui.getString("mode.string") == "variable");
gui.setValue("y.enabled", varmode);
gui.setValue("constant.enabled", !varmode);
});
]]></script>
</logic>
<dialog label="Test t">
[...]
Isso registra uma função anônima a ser chamada sempre que o valor da caixa de seleção id="mode" mudar. Dentro dessa função, definimos uma variável auxiliar "varmode" que é verdadeira quando o modo é "variable" e falsa quando é "constant". Em seguida, usamos gui.setValue() para definir as propriedades “enabled” de "y" e "constant", da mesma forma que fizemos usando as instruções <connect> anteriormente.
Nota
Se a mesma função precisar ser invocada para alterações em vários elementos, você também pode passar um array dos respectivos id=s para gui.addChangeCommand(). Além disso, para maior conveniência, gui.addChangeCommand() retorna seu segundo parâmetro, o que é útil se você quiser se referir a essa função em outro lugar (por exemplo, para gui.addChangeCommand() chamá-la uma vez durante a inicialização). Exemplo:
let update = gui.addChangeCommand(["mode.string", "y.available"], function() {
// faz algo a cada mudança de modo.string ou y.disponível
});
update(); // faz o mesmo durante a inicialização
A abordagem com scripts para lógica da GUI torna-se particularmente útil quando você deseja alterar a opção disponível de acordo com o tipo de objeto que o usuário selecionou. Consulte a referência para obter as funções disponíveis.
Observe que a abordagem com script para a lógica da GUI pode ser combinada com instruções <connect> e <convert> se desejar. Observe também que a tag <script> permite especificar um nome de arquivo de script, além de ou como alternativa à inclusão do código de script. Normalmente, a inclusão do código de script, como mostrado acima, é mais conveniente.