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.