Forum und email

Tutorial GtkTreeView (básico)

Introdução

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.