Vsi osnovni koncepti ustvarjanja vtičnika za RKWard so bili opisani v prejšnjih poglavjih. Ti osnovni koncepti bi morali zadoščati za številne - če ne večino - primerov. Vendar včasih želite več nadzora nad tem, kako se obnaša GUI vašega vtičnika.
Na primer, recimo, da želite razširiti primer t-testa, uporabljen v tej dokumentaciji, da omogočite oboje: primerjavo spremenljivke z drugo spremenljivko (kot je prikazano) in primerjavo spremenljivke s konstantno vrednostjo. Eden od načinov za to bi bil dodati radijsko krmiljenje, ki preklaplja med obema načinoma, in dodajanje vrtilnega polja za vnos konstantne vrednosti za primerjavo. Razmislite o tem poenostavljenem primeru:
<!DOCTYPE rkplugin>
<document>
<code file="code.js"/>
<dialog label="T-Test">
<row>
<varselector id="vars"/>
<column>
<varslot id="x" types="number" source="vars" required="true" label="compare"/>
<radio id="mode" label="Compare against">
<option value="variable" checked="true" label="another variable (select below)"/>
<option value="constant" label="a constant value (set below)"/>
</radio>
<varslot id="y" types="number" source="vars" required="true" label="variable" i18n_context="Noun; a variable"/>
<spinbox id="constant" initial="0" label="constant" i18n_context="Noun; a constant"/>
</column>
</row>
</dialog>
</document>
Zaenkrat je vse v redu, vendar obstajajo številne težave s tem GUI. Prvič, tako varslot kot spinbox sta vedno prikazana, medtem ko je samo eden od obeh resnično uporabljen. Še huje, varslot vedno zahteva veljavno izbiro, tudi če primerjate s konstanto. Očitno, če ustvarimo večnamenski GUI kot je ta, želimo več prilagodljivosti. Vnesite: razdelek <logic> (vstavljen na isti ravni kot <code>, <dialog> ali <wizard>).
[...]
<code file="code.js"/>
<logic>
<convert id="varmode" mode="equals" sources="mode.string" standard="variable" />
<connect client="y.visible" governor="varmode" />
<connect client="constant.visible" governor="varmode.not" />
</logic>
<dialog label="T-Test">
[...]
Prva vrstica znotraj logičnega razdelka je oznaka <convert>. V bistvu to zagotavlja novo logično (vklopljeno ali izklopljeno, resnično ali napačno) lastnost, ki jo je mogoče uporabiti pozneje. Ta lastnost ("varmode") je resnična, kadar je izbran zgornji izbirni gumb, in napačna, ko je izbran spodnji izbirni gumb. Kako se to naredi?
Najprej so pod sources navedene lastnosti vira, na katerih je treba delati (v tem primeru vsaka samo po ena; navedete jih lahko več kot sources="mode.string; somethingelse", potem bi bil "varmode" resničen le, če sta oba "mode.string" in "somethingelse" enaka na niz "variable"). Upoštevajte, da v tem primeru ne pišemo le "mode" (kot bi v getString("mode")), ampak "mode.string". To je pravzaprav interni način delovanja radijskega krmilnika: ima lastnost “string”, ki hrani svojo vrednost niza. getString("mode") je samo okrajšava in enakovredno getString("mode.string"). Oglejte si referenco za vse lastnosti različnih GUI elementi.
Drugič, način pretvorbe nastavimo na mode="equals". To pomeni, da želimo preveriti, ali je vir(i) enak(i) določeni vrednosti. Končno je standard vrednost za primerjavo, zato s standard="variable" preverimo, ali je lastnost "mode.string" enaka na niz "variable" (vrednost zgornje radijske možnosti). Če je enako, potem je lastnost varmode resnična, drugače je napačna.
Zdaj pa k pravim stvarem: <connect> lastnost "varmode" povežemo z y.visible, ki nadzira, ali varslot "y" je prikazan ali ne. Upoštevajte, da kateri koli element, ki je neviden, implicitno ni potreben. Torej, če je izbrana zgornja radijska možnost, je varslot "y" zahtevan in viden. Sicer ni zahtevana in skrita.
Za spinbox želimo ravno obratno. Na srečo za to ne potrebujemo drugega <convert>: logične lastnosti je mogoče zelo enostavno zanikati z dodajanjem modifikatorja "not", zato <connect> "varmode.not" z lastnostjo vidnosti spinboxa. V bistvu je bodisi varslot prikazan in zahtevan, ali spinbox je prikazan in zahtevan - odvisno od tega, katera možnost je izbrana v radijskem nadzoru. GUI se spreminja glede na možnost radia. Poskusite primer, če želite.
Za celoten seznam lastnosti glejte referenco. Še ena lastnost pa je posebna v tem, da vsi GUI elementi imajo to: “omogočeno”. To je nekoliko manj drastično kot “vidno”. Ne prikaže/skrije GUI element, ampak ga samo omogoči/onemogoči. Onemogočeni elementi so običajno prikazani sivo in se ne odzivajo na uporabniški vnos.
Opomba
Poleg <convert> in <connect> obstaja več dodatnih elementov za uporabo v razdelku <logic>. Npr. pogojne konstrukcije je mogoče implementirati tudi z uporabo elementa <switch>. Za podrobnosti glejte referenco o logičnih elementih.