Motorista UI XML

Configurações do condutor / UI dinâmica

Objectivo e utilização

Cada componente de condutor e fluxo de trabalho contém um script XML. Isto descreve a interface do utilizador na aplicação Dashboard ou RIP (Front-end).

O front-end utiliza este XML para construir uma interface de utilizador (UI), de modo a que os utilizadores possam alterar as definições. Esta IU tem vários elementos, tais como caixas de verificação, popups, caixas de grupo, etc.

É claro, temos de nos certificar de que o fazemos:

  • Mostrar as definições actuais na IU
  • Alterar as definições actuais de acordo com as alterações na IU

Mas, para além disso, temos de o fazer:

  • instruir o front-end sobre quais os valores por defeito que devem ser utilizados na IU
  • desactivar configurações específicas se forem pré-determinadas pelo PrinterProfile
  • marcar combinações inválidas fora das definições com um símbolo de aviso
  • gerar uma cadeia legível pelo utilizador, mostrando todas as definições ( para voar por textos )

O XML gera elementos UI para o utilizador, que tornam possível a alteração de configurações. Quando o utilizador fecha um diálogo, as definições são então colocadas num XML de resultado.

Possíveis elementos de UI são:

  • POPUP
    • ITEM
  • VERIFIQUE
  • RÁDIO
  • EDIT
  • LABEL
  • IMAGEM
  • BOTÃO
  • GRUPO
  • TABGROUP
    • TAB

Todos os elementos da IU têm alguns atributos possíveis, juntamente com um valor.

Atributos possíveis:

  • ID( se precisarem de ser referenciados )
  • rótulo ( o seu nome na UI )
  • seleccionado ( o ID do ITEM que está actualmente seleccionado )

Secções

O XML tem tipicamente a seguinte estrutura:

  • UI
    • PÁGINA
      • Objectos
    • IMAGENS
UI

Este nó pode conter 1 ou mais nós PAGE e a lista global de IMAGENS.

PÁGINA

Um nó PAGE contém todos os elementos da interface do utilizador de 1 componente. Um condutor representará apenas 1 página. Os nós PAGE são utilizados para construir um diálogo de definições com uma faixa de cabeçalho (ver Preferências no Editor ou QueueManual? no RIP).

Atributo Descrição
*ID Identificação da página
LABEL Título da página
IMAGEM ID da imagem
IMAGENS

A lista de imagens contém a lista de imagens globalmente disponíveis que podem ser referidas pela sua identificação. Ver para mais informações IMAGEM nas secções OBJECTS.

Cada etiqueta IMAGE tem os seguintes atributos obrigatórios:

Atributo Descrição
*ID Identificação da página

O valor da etiqueta contém os dados hex-codificados da imagem em formato PSD.

Objectos

Todas as etiquetas de objectos de interface de utilizador não têm valores XML. Isto significa que qualquer objecto pode ter filhos, como acções de IU.

Todos os IDs da interface do utilizador não devem ter espaços vazios nos seus nomes.

Atributos gerais (opcional):

Atributo Descrição
LARGURA A largura fixa do objecto em pixels
ALTURA A altura fixa do objecto em pixels
TAB A ordem de tabulação para o objecto
IMAGEM ID da imagem, colocar uma imagem em frente ao LABEL
POPUP

Este elemento da IU denomina uma lista de itens a partir da qual se selecciona um. Os seus artigos são do tipo “ITEM” e têm dois atributos ( ID e etiqueta ) e um valor. O ID é utilizado para referenciá-los, a etiqueta é o texto mostrado na IU, o valor é o que é colocado no resultado XML.

Atributo Descrição
*ID Item ID
LABEL Título do menu popup
valor ID do item seleccionado por defeito
ITEM

Atributos ITEM (itens de menu do popup):

Atributo Descrição
*ID Item ID
*LABEL Título do artigo
*valor Valor directo para o artigo
VERIFIQUE

Este elemento UI apresenta uma caixa de verificação ao utilizador.

Os seus artigos são do tipo “CHECK” e têm dois atributos ( ID e etiqueta ) e um valor.

O ID é utilizado para referenciá-los, o LABEL é o texto mostrado no texto de resumo das definições que é mostrado quando se aponta para uma Fila (FlyBy/Tooltip), o valor é o que é colocado no resultado XML.

Atributo Descrição
*ID Item ID
LABEL Caixa de verificação título de controlo
valor ‘ON’ ou ‘OFF’, especifica que a caixa de verificação/grupo de verificação está activada ou desactivada na criação. Quando um nó de caixa de verificação contém crianças, tornar-se-á um grupo com uma etiqueta de verificação.
RÁDIO

Este elemento da IU denomina uma lista de itens, (estes podem ser botões de rádio, ou um popup também pode ser usado), a partir do qual se selecciona um. Os seus artigos são do tipo “ITEM” e têm dois atributos ( ID e etiqueta ), mais um valor. O ID é utilizado para referenciá-los, a etiqueta é o texto mostrado na IU, o valor é o que é colocado no resultado XML.

Atributo Descrição
*ID Item ID
LABEL Título de controlo de rádio
valor ‘ON’ ou ‘OFF’, especifica que o botão de rádio/grupo de rádio está activado ou desactivado na criação. Quando um botão de rádio contém crianças, ele tornar-se-á um grupo que será activado ou desactivado por um botão de rádio à sua frente.
SLIDER

O utilizador é apresentado com um elemento UI (pode ser um deslizador, mas pode ser um campo de texto), que tem um valor mínimo e máximo a partir do qual o utilizador pode escolher.

O atributo “ID” é utilizado para referenciá-los, o atributo “etiqueta” é o texto mostrado na IU, o valor é o que é colocado no resultado XML.

Atributo Descrição
*ID Item ID
LABEL Título do controlo deslizante
MIN Valor mínimo para o deslizador. Quando não especificado 0 é utilizado.
MAX Valor máximo para o deslizador. Quando não especificado 100 é utilizado.
MONTAGENS ‘ON’ ou ‘OFF’, mostrar ou esconder setas para cima/baixo. Quando não especificado ‘ON’ é utilizado.
SLIDER ‘ON’ ou ‘OFF’, mostrar ou esconder o controlo do deslizador real. O valor por defeito está OFF
TIPO ‘INTEGER’, ‘UNITS’, ‘PERCENTAGE’ ou ‘ANGLE’. Isto representa a unidade deslizante de valor. Quando não especificado ‘INTEGER’ é utilizado.
valor Valor inicial do deslizador. Quando não especificada é utilizada metade do MIN + MAX.
INPUT

O utilizador é apresentado com um elemento UI ( pode ser uma caixa de edição, ou um selector ), que tem um valor mínimo e máximo. Quando o utilizador introduz um valor fora do intervalo, o botão OK do diálogo deve ser desactivado.

O atributo “ID” é utilizado para referenciá-los, o atributo “etiqueta” é o texto mostrado na IU, o valor é o que é colocado no resultado XML.

Atributo Descrição
*ID Item ID
LABEL Título da caixa de edição
MIN Valor mínimo para a caixa de edição.
MAX Valor máximo para a caixa de edição.
TIPO ‘TEXTO’, ‘INTEGER’, ‘UNIDADES’, ‘PERCENTAGEM’ ou ‘ANGLE’. Isto representa a unidade de edição de valor. Quando não especificado ‘TEXTO’ é utilizado.
PRONTAMENTE ‘ON’ ou ‘OFF’, o valor por defeito se não estiver presente é ‘OFF’, o controlo é editável
valor Valor ou conteúdo inicial da caixa de edição.
TEXTAREA

Área livre para introduzir texto ou para mostrar texto (apenas leitura). Este pode ser um campo de edição multilinha.

Atributo Descrição
*ID Item ID
LABEL Título da caixa de edição
PRONTAMENTE ‘ON’ ou ‘OFF’, especifica se a área de texto será definida como apenas de leitura ou editável. Quando não é possível editá-lo é assumido.
valor Valor ou conteúdo inicial da caixa de edição.
BOTÃO

O elemento botão UI cria um botão de pressão.

Atributo Descrição
*ID Item ID
LABEL Título do botão
FOLDERBTN

Representa uma pasta ou um botão de selecção de ficheiros. Este botão apresentará uma pasta ou um selector de ficheiros que navegará remotamente no computador o nó especificado. Este tipo só pode, portanto, ser utilizado com nós ligados por computador.

Atributo Descrição
*ID Item ID
LABEL Título do botão
TIPO ‘FILE’ ou ‘FOLDER’, especifica se o navegador selecciona ficheiros ou pastas.
FILTRO Filtro opcional para o navegador
valor Caminho por defeito
IMAGEM

Este elemento da IU é utilizado para colocar uma imagem na IU.

O seu atributo “LABEL” determina qual a imagem a utilizar. Quando o valor está vazio, a imagem é pesquisada na lista IMAGENS.

Atributo Descrição
*ID Item ID
*LABEL Nome da imagem, o ID da lista global de imagens
GRUPO

Este elemento UI representa os elementos do GRUPO numa moldura, mostrando que eles pertencem juntos.

Atributo Descrição
*ID Item ID
LABEL Título da moldura do grupo
TABGROUP

Este elemento de IU é um grupo de abas que compreende múltiplas abas, que podem conter múltiplos elementos de IU. O TABGROUP é obrigado a encapsular um elemento mínimo de 1 TAB.

Atributo Descrição
*ID Item ID
valor O ID do separador seleccionado por defeito.
TAB

O elemento separador representa o separador de um TABGROUP e contém múltiplos outros elementos de IU.

Atributo Descrição
*ID Item ID
LABEL Título do separador

LAYOUT

Os layouts definem a forma como os seus elementos filhos são colocados na interface do utilizador. São definidos três tipos de layouts: horizontal, vertical e de grelha. Os layouts não têm uma identificação, por isso são transparentes em termos de propriedades de interface do utilizador. Podem ser inseridos em qualquer ponto do ficheiro XML e podem conter outros layouts quando crianças. Quando não é utilizado qualquer layout, o sistema está a utilizar layouts verticais por defeito. A forma mais comum de definir layouts complexos é utilizar layouts verticais e horizontais como na amostra seguinte, que coloca duas caixas de verificação na primeira linha, uma numa única linha e outras três noutra linha:

<UI>
   <PAGE ID="page1" LABEL="Page One">
      <VERTICAL>
            <HORIZONTAL>
               <CHECK ID="check1" LABEL="Check1"></CHECK>
               <CHECK ID="check2" LABEL="Check2"></CHECK>
            </HORIZONTAL>
            <CHECK ID="check3" LABEL="Check1"></CHECK>
            <HORIZONTAL>
               <CHECK ID="check4" LABEL="Check4"></CHECK>
               <CHECK ID="check5" LABEL="Check5"></CHECK>
               <CHECK ID="check6" LABEL="Check6"></CHECK>
            </HORIZONTAL>
      </VERTICAL>
   </PAGE>
</UI>
HORIZONTAL
Atributo Descrição
ALIGN (Opcional) Define a forma como os elementos infantis são alinhados. Os valores possíveis são JUSTIFY, CENTER, LEFT, RIGHT

Um esquema horizontal colocará todos os seus elementos infantis na mesma linha na UI.

Justificar ( por defeito ): os elementos de interface ocuparão toda a largura. Centro: um espaço vazio será acrescentado tanto à esquerda como à direita dos elementos da criança (que se sentarão no meio e crescerão conforme necessário). Esquerda: espaço vazio adicionado à direita. Direita: espaço vazio adicionado à esquerda. Parece óbvio, mas vale a pena mencionar!

VERTICAL
Atributo Descrição
ALIGN (Opcional) Define a forma como os elementos infantis são alinhados. Os valores possíveis são JUSTIFY, CENTER, LEFT, RIGHT

Uma disposição vertical colocará todos os seus elementos infantis um por baixo do outro.

GRID

Um esquema de grelha utiliza uma tabela que é semelhante a uma tabela HTML, para colocar elementos. A etiqueta GRID informa o sistema de que começa uma disposição da grelha. A estrutura real é determinada por duas outras etiquetas: ROW e CELL. A etiqueta ROW instrui uma nova linha de elementos que está a começar. A etiqueta CELL define o conteúdo de uma célula na tabela.

Atributo Descrição
colspan (Opcional) Define quantas colunas se estenderão pela actual célula
rowspan (Opcional) Define quantas filas se estenderão pela actual célula

Acções

Na XML podemos também definir acções que envolvam os elementos da IU. Uma acção é definida ao nível de um objecto que é controlado por esta acção, acrescentando-lhe um nó de criança CONDITION. Uma directiva de condições é composta por três itens que definem a acção e a condição em que essa acção é executada.

CONDIÇÃO DEEtiqueta

Atributo Descrição
*estado Especifica a acção que será executada sobre o objecto
*propriedade O nome do bem que será avaliado
*valor O valor do bem

A UI tem um sistema de propriedade. Isto dá aos utilizadores a possibilidade de abordar o valor de qualquer controlo de IU definido no mesmo XML (também em páginas diferentes, se o componente tiver mais do que uma página). Um nome de propriedade é uma cadeia separada pontilhada contendo os nomes de todos os elementos desde o elemento da página até ao elemento pretendido. O último fio é a verdadeira propriedade desse controlo.

Existem várias propriedades de controlo:

valor O valor real do controlo, tal como especificado acima nas definições
visível ON se o controlo for visível, OFF caso contrário
invisível ON se o controlo for invisível, OFF caso contrário
activado ON se o controlo estiver activado, OFF caso contrário
deficientes ON se o controlo estiver desactivado, OFF caso contrário
selecção Irá devolver o ID do ITEM seleccionado de um POPUP em vez do valor real ( irá devolver o valor para outros tipos de controlos )

O estado diz que acção deve ser executada quando o valor do imóvel devolvido durante o tempo de execução é igual ao valor especificado na condição. Possíveis acções:

visível o controlo só será mostrado quando a condição for cumprida
invisível o controlo será escondido quando a condição for cumprida
activado o controlo só será activado quando a condição for cumprida
deficientes o controlo será desactivado quando a condição for preenchida
valor o valor do controlo receberá o valor do bem. Útil para exibir algo num controlo de edição. O valor da CONDIÇÃO é ignorado.
selecção utilizado para POPUP: o POPUP irá seleccionar o item que é igual ao valor do tempo de execução do imóvel. O valor da CONDIÇÃO é ignorado.

Na amostra seguinte, o controlo de edição de texto chamado “Edit1” será activado apenas quando a caixa de verificação “check1” estiver marcada, enquanto o controlo de edição “Edit1” a partir de “Group2” ( reparar como podemos usar o mesmo ID desde que tenham pais diferentes ) exibirá o valor do botão de pasta “Folder1” ( o caminho seleccionado ).

<PAGE ID="Page">
<GROUP ID="Group" LABEL="Group">
     <CHECK ID="check1" LABEL="Check"></CHECK>
     <INPUT ID="Edit1">
          <CONDITION state="enabled" property="Page.Group.check1.value" value="ON">
     </INPUT>
     <FOLDERBTN ID="Folder1" value="C:\"></FOLDERBTN>
</GROUP>
<GROUP ID="Group2" LABEL="Group">
     <INPUT ID="Edit1">
          <CONDITION state="value" property="Page.Group2.Folder1.value" value="">
     </INPUT>
</GROUP>

</PAGE>
Sistema de configurações

O sistema UI Host oferece a possibilidade de carregar e guardar configurações para a interface. Se os objectos UI já estiverem expostos (ao carregar configurações), então eles mostrarão automaticamente as novas configurações carregadas.

As definições são guardadas num ficheiro XML. O objectivo é manter estes ficheiros de configuração limpos, pequenos e fáceis de ler pelos humanos, pelo que são aplicadas as seguintes regras:

  • Os objectos que não guardam valores, como um STATIC, não guardam nada no ficheiro de definições.
  • Um objecto guarda o seu valor como o valor de uma etiqueta nomeada com a identificação desse objecto.
<PAGE> 
<GROUP ID="Group1"> 
    <INPUT ID="TextEdit1" value="test text"></INPUT>
</GROUP>
<GROUP ID="Group2">
     <STATIC ID="static1" LABEL="Text"></STATIC>
</GROUP>
<CHECK ID="check" value="OFF">

    <INPUT ID="TextEdit2" value="test text"></INPUT>
</CHECK>
<CHECK ID="check2" value="OFF">
<RADIO ID="r1" value="OFF">
<RADIO ID="r2" value="ON">
</PAGE>

gera as configurações:

<Group1> 
    <TextEdit>test text</TextEdit>
</Group1>
<check2>OFF</check2>
<r2>ON</r2>
  • A estrutura em árvore da IU é mantida.
  • Os grupos que não têm objectos capazes de gerar configurações não são de todo guardados. ( Grupo2 acima )
  • Os grupos de verificação só serão salvos se forem verificados. Se na amostra acima o grupo de verificação “verificar” tivesse o valor ON, as definições conteriam:
<check>
   <TextEdit2>test text</TextEdit2>
</check>
  • Os botões de rádio guardam apenas o objecto activo, r2 no nosso caso.
Exemplo

Um exemplo xml: MARKER 1

Este XML resulta nesta IU:

ui_example_1

Os valores por defeito são preenchidos.

ui_example_2

Quando o popup Media é clicado, os seus ITEMS tornam-se visíveis. No exemplo, a implementação da IU coloca ” (!)” por detrás de todas as escolhas, o que resulta em configurações do condutor inválidas. Se o utilizador seleccionar “Papel Comum” neste popup, as definições tornar-se-ão inválidas ( e o botão OK será fantasma )

Nesta implementação, as configurações conflituosas são identificadas com os símbolos à sua frente:

ui_example_3

O utilizador pode corrigir esta configuração defeituosa, alterando a configuração do DPI ou dos Media.

Para saber que configurações estão em conflito, a XML contém CONSTRAINS.

CONSTRAINS

Os itens numa tabela CONSTRAINS são chamados “CONSTRAINS” e têm atributos que vêm aos pares:

IDx e SEL_ID_x, onde o x é um número.

Quando a selecção actual corresponde a um CONSTRAIN ( todos os elementos têm os valores de um CONSTRAIN ) então a combinação é inválida. No exemplo, a linha com:

ID1=”DPI” SEL_ID_1=”DPI_720″ ID2=”Media” SEL_ID_2=”Media_Plain”

significa que quando o elemento “DPI” está definido para =”DPI_720″ e o elemento =”Media” está definido para =”Media_Plain” as definições são inválidas. ( esta combinação de DPI e MEDIA )

containerString

Quando um Elemento UI tem o atributo contentorString, a entrada no resultado XML para este elemento não deve ser o valor ITEM directamente. Em vez disso, as sequências “$#” do contentorString devem ser substituídas pelo valor do ITEM escolhido, e a cadeia resultante deve ser introduzida no resultado XML.

exemplo:

containerString=”HEATERS=$# $# $#”

ITEM valor = “123” do que o resultado XML deve conter “HEATERS=123 123”.

Resultado XML

O resultado XML ( a versão abreviada das definições actuais ) é composto pelos elementos ID e o valor do ITEM seleccionado. Se o atributo contentorString estiver presente, esta string com os $#’s substituídos pelo valor do ITEM seleccionado é utilizado. Em vez de “DynamicUI” é utilizado o rótulo “DS”. MARKER 2

Esquema XML

O esquema XML ao qual o XML pode ser correspondido está localizado em http://www.aurelon.com/XML/Driver_Settings.xsd

O XDS também pode ser descarregado a partir daqui: Driver_Settings.xsd.

Exemplo

Configurações do condutor (do condutor)
<?xml version="1.0" encoding="UTF-8" ?>
<DriverSettings>
   <POPUP ID="DPI" label="DPI:" selected="DPI_720">
      <ITEM ID="DPI_360" label="360x360">360</ITEM>
      <ITEM ID="DPI_360_720" label="360x720">slightly better</ITEM>
      <ITEM ID="DPI_720" label="Higest possible">720</ITEM>
   </POPUP>
   <POPUP ID="Media" label="Media:" selected="Media_Canvas">
      <ITEM ID="Media_Plain" label="Plain paper">1010</ITEM>
      <ITEM ID="Media_Canvas" label="Canvas">4000</ITEM>
      <ITEM ID="Media_Coated" label="Coated Paper">1100</ITEM>
   </POPUP>
   <CHECKBOX ID="Cutter" label="Cutter" selected="Cutter_On" changable="true">
      <CHECK ID="Cutter_Off" label="Off">NOCUT</CHECK>
      <CHECK ID="Cutter_On" label="On">CUT</CHECK>
   </CHECKBOX>
   <CONSTRAINS>
      <CONSTRAIN ID1="DPI" SEL_ID_1="DPI_720" ID2="Media" SEL_ID_2="Media_Plain"/>
      <CONSTRAIN ID1="DPI" SEL_ID_1="DPI_360_720" ID2="Media" SEL_ID_2="Media_Plain" ID3="Cutter" SEL_ID_3="Cutter_On"/>
   </CONSTRAINS>
</DriverSettings>
Resultado das definições do condutor (ao condutor)
<?xml version="1.0" encoding="UTF-8" ?>
<DS>
    <DPI>slightly better</DPI>
    <Media>4000</Media>
    <Cutter>CUT</Cutter>
</DS>