George Alexandre Sexta-feira, 08 de abril de 2005

Elementos XUL

A maioria dos elementos XUL são bem conhecidos daqueles que programam para desktop. Caixas de texto, botões, listas e painéis são comuns em linguagens como Java Swing, Visual C++, Delphi e Visual Basic. Entretanto, os elementos XML possuem um diferencial importante por possuírem uma declaração mais simples. O que, consequentemente, pode ser entendido também como uma maneira mais simples de programar. Esse raciocínio pode muito bem ser estendido aos elementos de orientação que vimos anteriormente.

A linguagem XUL, além disso, nos permite ainda trabalhar com uma ampla gama de outros elementos além daqueles já conhecidos na programação GUI conhecida. Para ilustrar a utilização de elementos XUL, construiremos um gerenciador de conteúdo básico. Mas antes faremos uma pequena explanação sobre os elementos que utilizaremos em nossa aplicação.

Elementos XUL

Em artigos anteriores já vimos alguns XUL como caixas (boxes) e elementos de agrupamentos (groupbox). Um box nos permite dividir a janela em uma série de caixas que podem ser combinadas de diferentes maneiras, criando disposições as mais diversas, seja horizontalmente, seja verticalmente (hbox e vbox). Ao combinar uma série de caixas, espaçadores, separadores e elementos com atributos flex, podemos controlar o layout de uma janela de uma maneira bem adaptável.

Veremos aqui alguns outros elementos muito utilizados em XUL, que são:

O gerenciador de conteúdo

A estrutura de nosso gerenciador de conteúdo será a seguinte:

Figura 1. Gerenciador de Conteúdo: clique para ampliar.

Figura 2. Gerenciador de Conteúdo: clique para ampliar.

De modo geral o código que conterá todos esses módulos pode ser resumido da seguinte maneira:

1    <?xml version="1.0"?>
2    <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
3    <script type="application/x-javascript" src="elementos.js"/>
4    <window
5         id="Elementos"
6         title="Elementos"
7         orient="horizontal"
8         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
9    <hbox flex="1">
10        <tabbox style="width: 200px">
11        ...
12        </tabbox>
13        <splitter collapse="before" resizebefore="closest" resizeafter="grow">
14        <grippy />
15        </splitter>
16        <vbox>
17        <tabbox flex="1" >
18        ...
19        </tabbox>
20        <vbox align="center">
21        ...
22        </vbox>
23        </vbox>
24  </hbox>
25 </window>

Esse será nosso código-mestre XUL, onde entrarão outros códigos. Segue uma explicação linha a linha:

Gerenciador de templates

O gerenciador de templates lista as páginas que estão dentro do nosso site. Antes de criarmos nosso box tabular, é interessante entender que, por padrão, as guias do painel tabular ficam acima do painel. Isso pode ser observado na maioria das aplicações GUI, de modo que o conteúdo do box é disposto internamente com as guias e em seguida com os painéis. As guias são referenciadas pelo elementos tabs e os painéis pelo elemento tabpanels, como a seguir:

1         <tabs>
2                 <tab label="Seções" />
3                 <tab label="Artigos" />
4         </tabs>
5         <tabpanels flex="1" >
6                 <listbox id="listainterna" style="width:18em" onselect="setFrame();">
7                         <listitem value="home" label="Home" selected="true" />
8                         <listitem value="entrevista" label="Entrevistas" />
9                         <listitem value="artigos" label="Artigos" />
10                       <listitem value="noticias" label="Noticias" />
11               </listbox>
12       <iframe type="content-primary" src="tree.xul" />
13       </tabpanels>

Eses código será acrescido na linha 11 do código-mestre. Linha por linha:

O conteúdo do arquivo tree.xul, ainda que não possa ser tratado aqui, mostrará uma árvore de elementos encadeados na segunda guia de página da janela, como pode ser visto na Figura 2. Note ainda que os ítens de nossa lista são estáticos, ou seja, fixos. No entanto, como veremos mais adiante, existem maneiras dentro do XUL de incluir dinamicamente ítens tanto em listas como em árvores (trees). O conteúdo do arquivo tree.xul é assunto da segunda parte desse arquivo.

Navegador e pesquisa

O segundo box tabular entra na linha 18 do nosso código-mestre. Ele conterá nosso navegador e um painel com uma lista de artigos para pesquisa, como a seguir:

1         <tabs>
2                 <tab label="Visualizar" />
3                 <tab label="Pesquisar" />
4         </tabs>
5         <tabpanels flex="1" >
6                 <browser height="80" id="brwser" type="content-primary" src="http://www.imasters.com.br"/>
7                 <iframe id="pesquisa" name="pesquisar" type="content-primary" src="list2.xul"/>
8         </tabpanels>

Por brevidade, o conteúdo do arquivo list2.xul também não é tratado aqui. Ele mostrará uma lista de ítens para pesquisa na segunda guia de página da janela, como pode ser visto na Figura 2. O conteúdo do arquivo list2.xul também é assunto da segunda parte desse arquivo.

Editor HTML

Nosso editor HTML entra logo abaixo do segundo box tabular, em uma caixa de orientação vertical, como segue:

1           <groupbox>
2           <caption label="Gerenciador" />
3           <hbox id="discussFormatBar">
4           <label style="width:2em" value="Titulo:" />
5           <textbox style="width:30em" id="titulo" multiline="false"/>
6             <toolbox>
7                   <toolbarbutton label="bold" id="boldButton" type="checkbox" autoCheck="false"/>
8                   <toolbarbutton label="italic" id="italicButton" type="checkbox" autoCheck="false"/>
9                   <toolbarbutton label="ul" id="ulButton" type="radio" autoCheck="false"/>
10                 <toolbarbutton label="ol" id="olButton" type="radio" autoCheck="false"/>
11           </toolbox>
12           <button label="Copiar texto" />
13           <button label="Publicar" />
14         </hbox>
15         <hbox>
16         <vbox>
17           <toolbox id="viewModeBar" orient="vertical" flex="1">
18             <box orient="vertical" id="discussViewMode" grippyhidden="true">
19                 <toolbarbutton label="HTML" id="htmlView" type="radio" group="view" autoCheck="true"/>
20                 <toolbarbutton label="Code" id="sourceView" type="radio" group="view" autoCheck="true"/>
21             </box>
22           </toolbox>
23         </vbox><spacer/>
24           <vbox>
25              <label style="width:10em" value="Texto:" />
26              <textbox id="edittext" multiline="true" rows="7" cols="144"/>
27           </vbox>
28         </hbox>
29         </groupbox>

O layout desse editor será basicamente: duas caixas de texto com rótulos "Título" e "Texto", respectivamente para entrada do título e conteúdo da página; botões para copiar o conteúdo do browser e publicar o texto contido na caixa "Texto"; e uma barra de ferramentas para tags HTML, como pode ser visto na Figura 1 e 2. Segue a explicação linha a linha:

O arquivo XUL completo está disponível para download.

Esse é o nosso esqueleto da aplicação. Na segunda parte desse artigo veremos como melhorar ainda mais a apresentação, trabalhando com imagens dentro dos botões e criando os outros dois XUL internos para nosso Gerenciador de Conteúdo.