Alguns plugins — e, aliás, o plot_options usado como exemplo acima é um deles — não são completos por si só. Eles simplesmente não têm os elementos de GUI para selecionar alguns valores importantes. Eles foram projetados para serem usados apenas incorporados a outros plugins.
Até que ponto o plugin plot_options está incompleto? Bem, para algumas configurações de opções, ele precisa saber o nome dos objetos/expressões para os eixos x e y (na verdade, funcionará bem se tiver apenas um deles, mas precisa de pelo menos um para funcionar corretamente). No entanto, ele não possui um mecanismo para selecionar esses objetos ou inseri-los de qualquer outra forma. Então, como ele sabe sobre eles?
Na seção de lógica do plugin plot_options, existem duas linhas adicionais, ainda não abordadas:
<logic>
<external id="xvar" />
<external id="yvar" />
[...]
</logic>
Isso define duas propriedades adicionais no plugin plot_options, cujo único propósito é ser conectado a algumas propriedades (ainda desconhecidas) do plugin de incorporação. No plugin plot_options, essas duas propriedades são simplesmente usadas como quaisquer outras e, por exemplo, existem chamadas para getString("xvar") no modelo JS do plot_options.
Agora, para o plugin incompleto, não há como saber onde ele será incorporado e quais serão os nomes das configurações relevantes no plugin de incorporação. Portanto, precisamos adicionar duas linhas adicionais na seção de lógica do plugin de incorporação:
<logic>
[...]
<connect client="plotoptions.xvar" governor="xvarslot.available" />
<connect client="plotoptions.yvar" governor="yvarslot.available" />
</logic>
Em princípio, isso não é novidade; já abordamos as instruções <connect> no capítulo da seção de lógica da GUI. Basta conectar os valores em dois varlots (chamados "xvarslot" e "yvarslot" neste exemplo) às propriedades “external” receptoras do plugin incorporado. É só isso. Todo o resto é tratado automaticamente.