Capítol 7. Interaccions lògiques entre elements de la IGU

Lògica de la IGU

Tots els conceptes bàsics de crear un connector per al RKWard s'han descrit en els capítols anteriors. Aquests conceptes bàsics haurien de ser suficients per a molts casos, si no la majoria. No obstant això, de vegades voleu més control sobre com es comporta la IGU del connector.

Per exemple, suposem que voleu ampliar l'exemple de la prova t utilitzat en aquesta documentació per a permetre: comparar una variable amb una altra variable (com es mostra), així com comparar una variable amb un valor constant. Ara, una manera de fer-ho seria afegir un control d'opcions que canviï entre els dos modes, i afegir un botó de selecció de valors per a introduir el valor constant amb el qual comparar. Considereu aquest exemple simplificat:

<!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>
        

Fins ara està bé, però hi ha una sèrie de problemes amb aquesta IGU. En primer lloc, sempre es mostren tant el «varslot» com el «spinbox», mentre que realment només s'utilitza un dels dos. Pitjor encara, el «varslot» sempre requereix una selecció vàlida, fins i tot si es compara amb una constant. Òbviament, si creem una IGU multiús com aquesta, volem més flexibilitat. Introduïu: la secció <logic> (inserida al mateix nivell que <code>, <dialog>, o <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">
        [...]
        

La primera línia dins de la secció «logic» és una etiqueta <convert>. Bàsicament, això proporciona una propietat booleana nova (activada o desactivada, certa o falsa), que es pot utilitzar més endavant. Aquesta propietat ("varmode") és certa, sempre que se seleccioni el botó d'opció superior, i fals quan se seleccioni el botó d'opció inferior. Com es fa això?

En primer lloc, sota sources, s'enumeren les propietats de les fonts («sources») en les quals treballar (en aquest cas només una cadascuna; es podrien llistar com a sources="mode.string;somethingelse", llavors "varmode" només seria cert, si tant "mode.string" com "somethingelse" són iguals a la cadena "variable"). Tingueu en compte que en aquest cas no només escrivim "mode" (com ho faríem a getString("mode")), sinó "mode.string". En realitat, aquesta és la manera interna en què funciona un control d'opcions: té una propietat «string», que té el seu valor de cadena. getString("mode") és només una abreviatura, i equival a getString("mode.string"). Vegeu la referència per a totes les propietats dels diferents elements de la IGU.

En segon lloc, hem establert el mode de conversió a mode="equals". Això vol dir que volem comprovar si la/es font/s és/són igual/s que un valor determinat. Finalment «standard» és el valor contra el qual comparar, de manera que amb standard="variable", es comprova si la propietat "mode.string" és igual que la cadena "variable" (el valor de l'opció del botó superior). Si és igual, llavors la propietat «varmode» és certa, altrament és falsa.

Passem a les coses reals: <connect> la propietat "varmode" a «y.visible», que controla si es mostra o no la gràfica "y". Tingueu en compte que qualsevol element que es fa invisible és implícitament no obligatori. Per tant, si se selecciona l'opció del botó superior, es requereix el «varslot» "y", i és visible. Si no, no és necessari ni ocult.

Per al botó de selecció de valors, volem exactament el contrari. Afortunadament, no necessitem un altre <convert> per a això: les propietats booleanes es poden negar molt fàcilment afegint el modificador "no", així que <connect> "varmode.not" a la propietat de visibilitat del botó de selecció de valors. En efecte, es mostra i es requereix el «varslot», o es mostra el botó de selecció de valors i es requereix (depenent de quina opció està seleccionada en el control d'opcions). La IGU està canviant segons l'opció del botó. Proveu l'exemple, si voleu.

Per a obtenir una llista completa de propietats, consulteu la referència. Una propietat més, però, és especial perquè tots els elements de la IGU la tenen: «enabled». Això és una mica menys dràstic que «visible». No mostra/oculta l'element de la IGU, però només l'activa/desactiva. Els elements desactivats es mostren normalment en gris i no reaccionen a l'entrada de l'usuari.

Nota

A més de <convert> i <connect>, hi ha diversos elements més per a utilitzar a la secció <logic>. Per exemple, les construccions condicionals també es poden implementar utilitzant l'element <switch>. Consulteu la referència sobre elements lògics per a més detalls.