Agradecimentos a Lars Wirzenius pela
versão original
deste tutorial escrito para o PyGtk. Mudanças no documento foram apenas para
refletir o estado atual da base de código do Gtk+ e para ser aplicável ao PHP-Gtk2.
A versão 2.0 do Gtk+ introduz a sua terceira geração de widgets de arvore e
lista. A versão 1.0 tinha GtkList e GtkTree, versão 1.2
tinha GtkCList e GtkCTree,
e agora a versão 2.0 tem GtkTreeView,
o qual serve como ambos arvore e lista. Com cada versão, a
força e utilidade dos widgets tem crescido.
GtkTreeView usa uma aproximação Modelo/Vista/Controlador.
Isto significa que o código é dividido em uma estrutura de dados representando
os dados do usuário ("o modelo"), o widget que exibem os dados e
interagem com o usuário ("a vista"), e alguma lógica para manter
as coisas felizmente unidas ("o controlador"). O modelo é implementado por
GtkTreeModel (atualmente, as classes que implementam esta interface), a
vista pelo GtkTreeView com alguns auxiliares e o controle pelo
código do usuário.
Isto parace desnecessáriamente complicado, mas a complexidade
é local, e esta aproximação atualmente simplifica a estrutura geral
do programa. Por exemplo, várias vezes é necessário ver os dados
(ex. modelo) de maneiras diferentes, ou em janelas diferentes. Pense,
por exemplo, de um editor de programação: o mesmo código-fonte
pode ser visto em várias janelas ao mesmo tempo, e mudanças em uma
vista devem ser exibidas em todas as outras também. Assim, faz
sentido separar o armazanamento do texto da sua exibição, ao invés
de armazanar o texto em cada widget em cada janela.
A aplicação de exemplo neste artigo permite ao usuário gerenciar
uma arvore de pastas. As pastas são virtuais, não diretórios reais no
sistema de arquivos, para manter o código simples. O exemplo é atualmente
derivado de Lodju, no qual as pastas não tem nada a ver com
o sistea de arquivos.
A documentação oficial
da referência da API do Gtk+ 2.0 para o GtkTreeView
deve ser lida em conjunto com este tutorial, mesmo sendo ela um pouco
dispersa em alguns detalhes.
Eu agradeço o pessoal no
Canal de IRC do Desenvolvedor Gtk+ pelo
encorajamento e apoio.