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
- PÁGINA
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:
Os valores por defeito são preenchidos.
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:
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>