You are on page 1of 55

Programao para GTK/GNOME com C++ ca

Andr Lu Gobbi Sanches e s Grupo de Software Livre do Centro GeNESS Em parceria com PET - Cincias da Computao e ca 7 de Outubro de 2003

Conte do u
1 Programao C++ para GNU/Linux ca 1.1 Compilando . . . . . . . . . . . . . . . 1.1.1 Uso Bsico . . . . . . . . . . . a 1.1.2 Ligando Bibliotecas . . . . . . . 1.1.3 Incluso de Cabealhos . . . . . a c 1.2 O Programa pkg-cong . . . . . . . . . 1.2.1 Funcionamento do pkg-cong . 1.3 Otimizao do Processo de Compilao ca ca 1.3.1 Uso do Programa make . . . . Desenvolvimento de Interface Grca a 2.1 Programao Orientada a Eventos . ca 2.2 O Modelo MVC . . . . . . . . . . . . 2.3 O que o GTK+ . . . . . . . . . . . e 2.4 Arquitetura do GTK+ . . . . . . . . 2.5 Packing . . . . . . . . . . . . . . . . 2.5.1 Nenhuma Caixa . . . . . . . . 2.5.2 Caixa Horizontal . . . . . . . 2.5.3 Caixa Vertical . . . . . . . . . 2.5.4 Tabela . . . . . . . . . . . . . 2.5.5 Posicionamento Fixo . . . . . 2.5.6 Combinaes de Caixas . . . co A API GTKMM 3.1 Primeiro Programa . . . . . . . . . . 3.2 Compilao . . . . . . . . . . . . . . ca 3.2.1 Automatizando a Compilao ca 3.3 Tratamento de Sinais . . . . . . . . . 3.3.1 A Biblioteca libsigc ++ . . . 3.4 Gtk::Window . . . . . . . . . . . . . 3.5 Componentes Bsicos . . . . . . . . . a 3.5.1 Gtk::Label . . . . . . . . . . . 3.5.2 Gtk::Button . . . . . . . . . . 6 6 6 7 8 8 9 10 11 14 14 14 16 17 18 19 19 20 20 21 22 23 23 24 25 25 25 28 28 28 29

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

CONTEUDO 3.5.3 Gtk::ToggleButton 3.5.4 Gtk::CheckButton 3.5.5 Gtk::RadioButton 3.5.6 Gtk::Entry . . . . . 3.5.7 Separadores . . . . Caixas . . . . . . . . . . . 3.6.1 Gtk::Container . . 3.6.2 Gtk::Box . . . . . . 3.6.3 Gtk::Table . . . . . 3.6.4 Gtk::Fixed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 29 30 30 31 31 31 31 32 33 35 36

3.6

A Bibliotecas GTK+/GNOME

Lista de Figuras
1.1 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 3.1 Grafo de dependncias de uma aplicao . . . . . . . . . . . . e ca Modelo MVC . . . . . . . . . . . . . . . . . . Aplicao de Calendrio . . . . . . . . . . . . ca a Arquitetura do Gtk+ . . . . . . . . . . . . . . Nenhuma Caixa . . . . . . . . . . . . . . . . . Caixa Horizontal . . . . . . . . . . . . . . . . Caixa Vertical . . . . . . . . . . . . . . . . . . Organizao em Tabela . . . . . . . . . . . . ca Exemplo de Uso da Caixa Tabela . . . . . . . Combinao de Caixas Horizontais e Verticais ca Posicionamento Fixo . . . . . . . . . . . . . . Combinao de Caixas . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 15 16 18 19 19 20 20 20 21 21 21 24

Execuo do primeiro exemplo . . . . . . . . . . . . . . . . . ca

Lista de Tabelas
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Principais Principais Principais Principais Principais Principais Principais Principais Principais mtodos e mtodos e mtodos e mtodos e mtodos e mtodos e mtodos e mtodos e mtodos e de Gtk::Window . . . . . de Gtk::Label . . . . . . . e eventos de Gtk::Button de Gtk::ToogleButton . . de Gtk::RadioButton . . . de Gtk::Entry . . . . . . . de Gtk::Container . . . . de Gtk::Table . . . . . . . de Gtk::Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 29 29 30 30 31 32 34 35

Listings
O arquivo gtkmm2.0.pc . . . . . . . Exemplo de Makele . . . . . . . . . Exemplo de Makele com pkgcong Exemplo usando Glib::ustring . . . . Primeiro Programa GTKMM . . . . Makele para os Exemplos . . . . . . Exemplo com Tratamento de Sinais . Exemplo de Gtk::Container . . . . . Exemplo de Gtk::VBox e Gtk::HBox Exemplo de Gtk::Table . . . . . . . . Exemplo de Gtk::Fixed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 12 17 23 25 26 32 33 34 35

Cap tulo 1

Programao C++ para ca GNU/Linux


1.1 Compilando

Existem diversos compiladores para C++ dispon veis na plataforma GNU/Linux. Como exemplo podemos citar o GCC/G++ (GNU Compiler Collection) e o ICC (Intel C++ Compiler c ), entre outros. O GCC e provavelmente o mais popular, pois o padro da maioria das distribuies e a co e o compilador ocial do GNU/Linux. Por essas razes, foi o compilador o escolhido para testar os exemplos. A seguir ser feita uma breve demona strao de como utilizar o GCC para compilar seus programas C++. Todos ca os exemplos foram testados com este compilador. Entretanto, os exemplos foram escritos em puro cdigo ISO C++, e portanto os exemplos aplicam-se o aos demais compiladores. O conjunto de bibliotecas GTK+ possui uma verso para Windows c , a possibilitando o desenvolvimento de cdigo de fcil portabilidade. No eno a tanto, este texto abranger apenas o desenvolvimento para GNU/Linux, por a ser seu foco. Para utilizar o Gtk+ no Windows necessrio obter as bibe a liotecas e escolher um compilador, como os distribu dos pela Microsoft e pela Intel.

1.1.1

Uso Bsico a

Para compilar programas C++ com o GCC, digite: user@host:/home/user$ g++ o <programa> <programa>.cc Este comando gerar um executvel chamado <programa>, a partir do a a arquivo <programa>.cc. Caso o programa a ser compilado esteja dividido em vrios arquivos, todos devem ser listados: a 6

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

user@host:/home/user$ g++ o <programa> <arquivo1>.cc <arquivo2>.cc <...> Note que independentemente de quantos arquivos sejam usados, todo programa deve ter uma, e apenas uma, funo main(). ca Em caso de omisso, o gcc liga os arquivos-objeto e gera o executvel. a a Caso esse comportamento no seja desejado, poss a e vel utilizar a diretiva c:

user@host:/home/user$ gcc c <arquivo>.cc Com a diretiva c, o arquivo-objeto <arquivo>.o ser gerado. O nome a do arquivo-objeto pode ser denido com a diretiva o.

1.1.2

Ligando Bibliotecas

A maioria das instalaes GNU/Linux oferecem uma vasta coleo de bibco ca liotecas de funes, que geralmente so instaladas como pacotes -dev. Esco a tas bibliotecas oferecem praticamente qualquer funcionalidade encontrada em aplicaes livres para Windows, como reproduo de som, renderizao co ca ca de html, vericao ortogrca, etc. Uma das maiores vantagens do deca a senvolvimento de software para GNU/Linux a possibilidade de estender a e reusabilidade de cdigo. Para utilizar uma biblioteca em seu programa, voc o e deve ordenar explicitamente que o g++ a ligue ao seu programa, atravs da e diretiva l<nome da biblioteca>:

user@host:/home/user$ g++ o <programa> <programa>.cc lm No exemplo acima, a biblioteca libm (biblioteca de funes matemticas) co a ser ligada. Esta biblioteca oferece as funes trigonomtricas e aritmtica a co e e complexa, e portanto muito utilizada. e A diretiva l<nome> busca um arquivo chamado lib <nome>.a nos diretrios de bibliotecas do sistema e substitui a diretiva pela sua localizao. o ca O exemplo acima equivalente a: e

user@host:/home/user$ g++ o <programa> <programa>.cc /usr/lib/libm.a

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

As bibliotecas listadas na diretiva l so buscadas nos diretrios listados a o no arquivos /etc/ld.so.conf. Quando este arquivo for alterado, o comando ldcong deve ser chamado para atualizar a base de dados do sistema. O usurio pode denir diretrios adicionais para a pesquisas por bibliotecas a o e denindo a varivel de ambiente $LD LINK PATH ou atravs da diretiva a L:

user@host:/home/user$ export LD LINK PATH=/lib ou:

user@host:/home/user$ g++ o <programa> <programa>.cc lmylib L/lib Exportar as funcionalidades da sua aplicao atravs de bibliotecas pode ca e ajudar a promover a reusabilidade, como comum no desenvolvimento de e software livre.

1.1.3

Incluso de Cabealhos a c

A diretiva de pr-compilao #include <cabecalho.h> utilizada para ine ca e cluir cabealhos do sistema, enquanto que #include cabecalho.h deve ser c utilizada para incluir cabealhos denidos pelo prprio desenvolvedor da c o aplicao. De forma similar `s bibliotecas, os cabealhos a serem inclu ca a c dos tambm so procurados nos diretrios padro do sistema. e a o a Para especicar um diretrio com cabealhos, a diretiva I<diretorio> o c deve ser utilizada. O usurio tambm pode denir a varivel a e a $C INCLUDE PATH (para cdigo em C), $CPLUS INCLUDE PATH para o cdigo em C++, ou $CPATH para cabealhos que podem ser inclu o c dos em ambas as linguagens.

1.2

O Programa pkg-cong

O conjunto de bibliotecas que formam o GTK+/GNOME impe alguma o complexidade ` compilao, exigindo que um grande nmero de diretivas I, a ca u L e l sejam necessrias. Para facilitar a compilao de aplicaes que utia ca co lizem estas bibliotecas, um programa foi desenvolvido que inclui automaticamente as diretivas necessrias para utilizar cada biblioteca. Este programa, a distribu junto com o ambiente GNOME, chamado de pkg-config e sua do e sintaxe : e

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

user@host:/home/user$ pkgcong <opcoes> <biblioteca(s)> Para mostrar as diretivas I, L e l necessrias para utilizar o gtkmm, a digite:

user@host:/home/user$ pkgcong gtkmm2.0 cags libs Em um shell bash, podemos incluir o resultado de uma execuo do pkgca cong utilizando a construo <comando>, que substitui o <comando> ca entre as crases pelo contedo de sua sa padro. Assim, para compilar um u da a programa C++ que utiliza o gtkmm com o pkg-cong digite:

user@host:/home/user$ g++ o <programa> <programa>.cc pkgcong gtkmm2.0 cags libs

1.2.1

Funcionamento do pkg-cong

Para cada biblioteca que o programa pkg-cong suporta, existe um arquivo .pc no sistema de arquivos. O pkg-cong procura por arquivos .pc em todos os diretrios listados na varivel $PKG CONFIG PATH. Para visualizar o a seu valor, digite:

user@host:/home/user$ echo $PKG CONFIG PATH e para alterar seu valor:

user@host:/home/user$ export PKG CONFIG PATH= <diretorio>:<diretorio>:<...> ou adicione esta linha ao seu arquivo /.bashrc para ser carregado automaticamente. Caso um desenvolvedor queira que uma biblioteca seja suportada pelo pkg-cong, ele deve desenvolver um arquivo .pc. A sintaxe do arquivo e bem clara, e como exemplo a listagem a seguir demonstra o arquivo pc da

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

10

biblioteca gtkmm. Neste caso, o gtkmm (e todo o GNOME) foi instalado no diretrio /usr/garnome. o

prex =/usr/garnome exec prex =/usr/garnome libdir =/usr/garnome/lib includedir=/usr/garnome/include Name: GTKmm Description : C++ wrapper for GTK+ Requires: glibmm2.0 gdkmm2.0 pangomm1.0 atkmm1.0 gtk+2.0 Version : 2.2.7 Libs: L${libdir} lgtkmm2.0 Cags: I${includedir}/gtkmm2.0 I${libdir}/ gtkmm2.0/include

1.3

Otimizao do Processo de Compilao ca ca

A compilao de programas pode levar desde alguns minutos at vrias hoca e a ras, dependendo do porte do programa e da complexidade da linguagem. Compiladores da linguagem C costumam ser bastante ecientes, porm e mesmo a compilao de pequenos programas escritos em C++ costuma ser ca demorada. De forma a acelerar a compilao, geralmente o cdigo-fonte ca o e dividido em diversos arquivos, organizados de acordo com a estrutura funcional do programa. Assim, quando um arquivo modicado, apenas ele e recompilado, e no todo o restante do programa. Caso algum arquivo e a dependa do arquivo modicado (atravs de #include, por exemplo), este e arquivo tambm compilado. Em geral, a ligao do programa tambm e e ca e precisa ser refeita. Para garantir que todos os arquivos afetados pelas alteraes sejam reco compilados, necessrio que todas as dependncias entre arquivos sejam e a e especicadas. Como exemplo de dependncias, pode-se observar a gura e 1.1, que demonstra o grafo de dependncias de uma aplicao. e ca No exemplo o arquivo binrio app depende dos arquivos-objeto a interface .o e core.o. O arquivo interface .o depende de interface .c, o qual depende dos cabealhos interface .h e core.h. O arquivo core.o depende de c core.c, que por sua vez depende do cabealho core.h. c Caso o arquivo interface .h seja alterado, por exemplo, necessrio ree a compilar o arquivo-objeto interface .o, mas no o core.o. A recompilao de a ca interface .o ativaria a ligao para gerar novamente o arquivo binrio app. ca a

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX


binario

11

interface.o

core.o

interface.h

interface.c

core.h

core.c

Figura 1.1: Grafo de dependncias de uma aplicao e ca Este processo economiza tempo signicativamente em programas grandes. A maioria das su tes de desenvolvimento oferecem um programa chamado make que, baseado nas dependncias entre arquivos e nas ine strues de compilao, otimiza e automatiza o processo de compilao conco ca ca forme descrito acima.

1.3.1

Uso do Programa make

Para utilizar o programa make, necessrio criar um arquivo de congurao e a ca 1 . Neste arpara o projeto, geralmente denominado Makele ou makele quivo, so especicados alvos (targets) de compilao, suas dependncias, e a ca e os comandos necessrios para compil-los. As dependncias podem ser ara a e quivos ou outros alvos do make.Caso alguma das dependncias de um alvo e possua horrio de modicao mais recente do que o alvo, os comandos do a ca alvo so executados. a app : interface .o core.o gcc o app interface.o core.o interface .o : interface .h interface .c core.h @gcc c interface.c #interface.c inclui os #cabecalhos core.o : core.h core.c @gcc c core.c clean : @rm f core.o @rm f interface.o rm f app
1

#core.c inclui core.h

GNUMakele tambm pode ser utilizado para o make do projeto GNU e

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

12

Como exemplo, a listagem apresenta o Makele da aplicao apresentada ca na gura 1.1. O primeiro alvo de compilao do arquivo app, que depende ca e de interface .o e core.o. O comando de compilao desta regra ca e gcc o app interface.o core.o 2 . Comandos de compilao devem sempre ca ser precedidos por uma tabulao, caso contrrio o make tentar interpretca a a a poss los como alvos. E vel especicar qualquer nmero de comandos para u cada alvo, desde que todos sejam precedidos por tabulaes. O make esco creve todos os comandos na tela, exceto os precedidos pelo s mbolo @. A execuo de comandos para um alvo pra quando um comando falha, a ca a menos que o comando que falhou seja precedido pelo s mbolo -. E poss vel utilizar -e @no mesmo comando. O s mbolo #especica que o resto da linha um comentrio e deve ser ignorado pelo make. E costume incluir e a um alvo clean em arquivos makele para eliminar os arquivos gerados pelos outros alvos. No exemplo acima, o alvo clean no produz e no depende a a de nenhum arquivo, e portanto sempre executado. Os comandos das ree gras no necessariamente so comandos de compilao: qualquer comando a a ca vlido do sistema pode ser utilizado. Assim, o make pode ser utilizado para a automatizar qualquer tipo de tarefa, como por exemplo instalao. Vrios ca a sistemas complexos de instalao e gerenciamento de pacotes so baseados ca a em makeles: o sistema gar, o portage da distribuio GNU/Linux Gentoo ca e os ports do FreeBSD, por exemplo. Para invocar o make, basta digitar: make <alvo> E o alvo especicado ser processado. Caso nenhum alvo seja fornecido, a o primeiro alvo do makele ser processado. a Tambm poss e e vel denir variveis que tornem um makele ex a vel e congurvel. A listagem a seguir um exemplo. a e CC = gcc CFLAGS = pkgcong gtkmm2.0 cags LIBS = pkgcong gtkmm2.0 libs NAME = app ${NAME} : interface.o core.o ${CC} o app interface.o core.o interface .o : interface .h interface .c core.h @${CC} c interface.c ${CFLAGS} ${LIBS}
2

ld poderia ser usado ao invs de gcc, mas este foi escolhido por simplicidade e

CAP ITULO 1.

PROGRAMACAO C++ PARA GNU/LINUX

13

#interface.c inclui os cabecalhos core.o : core.h core.c @${CC} c core.c clean : @rm core.o @rm interface.o rm ${NAME} Conforme pode ser observado no exemplo, para referenciar uma varivel a utiliza-se ${VARIAVEL}.

#core.c inclui core.h

Cap tulo 2

Desenvolvimento de Interface Grca a


O conjunto de ferramentas GTK+ baseado no padro de projeto Modele a View-Controller, que a base de muitas bibliotecas modernas de interface e grca. Inicialmente introduzido no Smalltalk 80, este padro visa separar a a o objeto de aplicao (Model) da forma como ele apresentado (View) e da ca e forma como o usurio o controla (controller). Esta diviso vantajosa pois a a e cdigo de interface freqentemente alterado e pode ser baseado em um o e u framework. Trata-se de um modelo baseado em eventos, conforme descrito na seo 2.1. ca

2.1

Programao Orientada a Eventos ca

Na Programao Orientada a Eventos, toda ao iniciada pelo usurio ca ca a (clique do mouse, digitao) ou pelo sistema (chegada de um pacote pela ca rede, incremento do relgio) considerada um evento, que aciona um deo e terminado tratador de evento (event handler ). O tratador do evento a ser chamado determinado pelo tipo de evento, e pelo objeto que o gerou. e O programador deve denir quais eventos so signicativos para a a aplicao e sero tratados, e qual funo tratar cada evento. Eventos sem ca a ca a tratadores so ignorados pelo sistema. a

2.2

O Modelo MVC

O modelo MVC dene trs entidades distintas: e Model (Modelo): representao dos dados na aplicaes. E responsvel ca co a pela armazenagem dos dados e por oferecer as funes que os manipco ulam. O Modelo pode ser afetado por eventos do sistema (como o incremento do relgio), ou pelo resultado de clculos. o a 14

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 15


Altere Controlador Altere Modelo Notifique Visao Atualize Notifique Visao Altere

Figura 2.1: Modelo MVC View (Viso): representao visual dos dados. Constitui o que a ca e mostrado ao usurio. a Controller (Controlador): responsvel por gerenciar os eventos inicia ados pelo usurio, como um clique do mouse, por exemplo. a A interao entre estas trs entidades pode ser vista na gura 2.1. Elas ca e se relacionam atravs de troca de mensagens. Quando o usurio digita e a algum texto, um evento gerado e tratado pelo controlador do objeto em e questo (uma caixa de texto, por exemplo). Caso o evento altere os dados, o a controlador deve acessar o modelo atravs de suas rotinas para manipulao e ca dos objetos da aplicao. Caso o evento apenas altere a forma como os dados ca so mostrados na tela (maximizar uma janela, por exemplo), o controlador a deve apenas acessar a viso em questo atravs das suas funes pblicas a a e co u de manipulao. ca O contedo de um modelo pode ser apresentado por diversas vises. Um u o bom exemplo o relgio do sistema, que pode ser apresentados por diversas e o aplicaes ao mesmo tempo. O registro de hora atual do sistema operacional co constitui um modelo, que mantm uma lista de quais vises apresentam e o seu contedo, a m de notic-las quando houver qualquer alterao. Ao u a ca receberem uma noticao, as vises acessam o modelo para atualizarem ca o suas informaes. Desta forma, mantida a consistncia entre um modelo e co e e suas vises. Esta relao conhecida como o padro de projeto Observer. o ca e a Para ilustrar a relao entre modelos, vises e controladores, uma ca o aplicao de calendrio que permite alterar a data do sistema mostrada ca a e na gura 2.2. E poss que diversas instncias desta aplicao sejam exvel a ca ecutadas ao mesmo tempo, mas todas representam a mesma informao: a ca data do sistema. Trata-se de um caso de mltiplas vises para um mesmo u o modelo. Caso o relgio do sistema passe de uma hora para outra, todas as o instncias da aplicao sero automaticamente atualizadas, pois o modelo a ca a

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 16

Figura 2.2: Aplicao de Calendrio ca a notica todas as instncias de que elas devem se atualizar, e todas utilizam a as chamadas do sistema para vericar a data atual. Caso o usurio decida modicar a data, basta clicar em um dia qualquer a uma das instncias. O ambiente grco decidir qual aplicao sofreu um a a a ca evento pela posio do cursos do mouse, e acionar o tratador do evento ca a clique desta posio. Tambm com base na posio do cursor, o tratador ca e ca decidir qual dia foi clicado, e assim qual a nova data. O controlador utia lizar as funes do modelo para denir a nova data, e o modelo noticar a co a todas as instncias, que sero automaticamente atualizadas. Desta forma, a a a consistncia entre todas as janelas de calendrio do sistema ser mantida. e a a Para melhor entendimento do modelo MVC, recomendada e a leitura de http://rd13doc.cern.ch/Atlas/Notes/004/Note004-7.html e http://www.enode.com/x/markup/tutorial/mvc.html.

2.3

O que o GTK+ e

O Gtk+ um conjunto de ferramentas para desenvolver interfaces GUI. O e Gtk+ um conjunto bastante completo, e possui uma grande quantidade e a de extenses. E prtica comum que os projetos de software livre baseados o em Gtk+ liberem seus componentes mais genricos atravs de bibliotecas. e e O Gtk+ implementado na linguagem C, mas possui interfaces (wrape pers) para diversas outras linguagens, como C++, Python, Perl, Eiel, Ada, Ruby, etc, oferendo grande liberdade de escolha. O Gtk+ desenvolvido ese pecialmente para plataformas UNIX, mas possui tambm uma verso para e a Microsoft Windows c . O Gtk+ foi inicialmente desenvolvido para ser a base do aplicativo grco a GIMP, mas foi adotado no desenvolvimento do ambiente grco GNOME, a o que serviu para populariz-lo. a

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 17

Este texto focar-se- na interface C++ do Gtk+, conhecida como a GTKMM. Mais informaes sobre o GTK+ podem ser obtidas em co http://www.gtk.org, e tambm em http://developer.gnome.org. e Informaes espec co cas sobre GTKMM podem ser obtidas em http://www.gtkmm.org.

2.4

Arquitetura do GTK+

O Gtk+ foi projetado de forma modular, e portanto a biblioteca Gtk e baseada em outras 4 bibliotecas: Glib: biblioteca de utilitrios. a Atk: biblioteca que suporta acessibilidade. Pango: biblioteca que suporta internacionalizao do Gtk+ ca Gdk: biblioteca responsvel pelas funcionalidades visuais. Interage a com a Xlib. Estas bibliotecas so bsicas, e muitos programas Gtk+ raramente prea a cisam acess-las diretamente. A unica exceo a Glib, que dene os tipos a ca e de dados que devem ser usados nos programas Gtk para facilitar o porte para diferentes arquiteturas. Caso o programador utilize o GTKMM, ele deve utilizar tambm a bibe lioteca Glibmm, que oferece suporte a excees e a classe Glib :: ustring, que co similar a std :: string mas baseada em caracteres codicados no sistema e e unicode UTF-8. Ela suporta converso automtica de e para std :: string, a a como o exemplo a seguir demonstra: #include <string> #include <gtkmm.h> #include <iostream> int main(int argc, char argv) { std :: string s1(Teste de converses); o Glib :: ustring u(s1); std :: string s2(u); std :: cout << s2 << std::endl; } Os tipos de dados oferecidos pela glib esto descritos em a http://developer.gnome.org/doc/API/glib/glib-basic-types.html. As dependncias entre as bibliotecas podem ser observadas na gura 2.3. e

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 18


GTKMM

GLibmm

Gtk

Atk

Pango

Gdk

Glib Xlib

Figura 2.3: Arquitetura do Gtk+

2.5

Packing

Um aspecto importante de um framework GUI a forma como a apree sentao e organizao dos componentes grcos em uma janela feita. ca ca a e Vrios frameworks solicitam que o usurio especique a posio exata de a a ca cada componente em relao ` janela, em coordenadas cartesianas. Um exca a emplo deste tipo simples de organizao a su de desenvolvimento Delphi ca e te c. Outros frameworks requerem que o usurio informe apenas a organizao a ca lgica dos componentes e a posio relativa a outros componentes, e o posio ca cionamento nal calculado pelos algoritmos do framework. Tanto o GTK+ e como as GUIs Java mais populares (AWT e Swing) utilizam este mtodo. e No GTK+, a rea da janela dividida em caixas (boxes), e os compoa e nentes (chamados de widgets) so colocados nas caixas. Cada caixa dene a sua forma de posicionar os componentes, e assim denida a posio de cada e ca componente. As caixas tambm so consideradas componentes e repassam e a as chamadas aos seus componentes, conforme o padro de projeto Composa ite. Para denir a organizao e o posicionamento de uma janela, basta ca denir as caixas que a compem. o Componentes como janela e painis so capazes de armazenar compoe a nentes. Eles podem armazenar diretamente um e apenas um componente. Este unico componente pode ser uma caixa ou uma combinao de vrias ca a caixas, de forma que o nmero de componentes de uma janela no limu a e itado. H componentes que no podem armazenar outros, como rtulos e a a o botes. o Em GTK+, h basicamente 6 organizaes de componentes que uma a co janela pode ter: Nenhuma Caixa (apenas um componente), Caixa Horizontal, Caixa Vertical, Tabela, Posicionamento Fixo e Combinaes de Caixas. co Cada uma das caixas descrita nas sees a seguir. Os componentes que as e co representam na API do GTKMM so apresentados no cap a tulo 3. A grande vantagem de utilizar Packing a exibilidade no dimensione amento das janelas. Como os componentes no tem tamanho xo, caso o a

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 19

Figura 2.4: Nenhuma Caixa

Figura 2.5: Caixa Horizontal idioma da aplicao seja alterado, o tamanho dos componentes ainda ser ca a consistente. Esta capacidade facilita a internacionalizao das aplicaes deca co senvolvidas com Gtk+. Tambm facilita a ampliao ou reduo de janelas, e ca ca uma vez que a escala aplicada a janela tambm ser aplicada a todos os seus e a componentes. O navegador Mozilla utiliza este recurso.

2.5.1

Nenhuma Caixa

Este o estilo mais simples de posicionamento. No necessrio adicionar e a e a qualquer componente de caixa, mas apenas o componente desejado. A gura 2.4 mostra um exemplo em que apenas um boto adicionado. O boto foi a e a congurado para expandir-se e ocupar toda a rea da janela, mas tambm a e poss denir que ele deve ter um tamanho xo ou apenas o suciente e vel para mostrar seu texto.

2.5.2

Caixa Horizontal

O componente Caixa Horizontal permite dividir uma rea em colunas. O a nmero de colunas denido na criao da caixa ( poss alterar o nmero u e ca e vel u depois), assim como o sentido de posicionamento: da esquerda para a direita

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 20

Figura 2.6: Caixa Vertical

Figura 2.7: Organizao em Tabela ca ou vice-versa. Os componentes sero adicionados neste sentido, pela ordem a de adio. Tambm poss especicar a posio de um componente, como ca e e vel ca em uma lista. Um exemplo desta caixa pode ser visto na gura 2.5

2.5.3

Caixa Vertical

O componente Caixa Vertical muito similar ao Caixa Horizontal, exceto e por dividir a rea vertical e no horizontalmente. Sua interface tambm a a e e similar, e portanto tambm pode ser tratado como uma lista. Um exemplo e de Caixa Vertical pode ser visto na gura 2.6.

2.5.4

Tabela

A caixa Tabela divide a rea em linhas e colunas, conforme a gura 2.7. a Os componentes so posicionados em clulas, e podem ocupar uma ou mais a e clulas. Uma aplicao deste tipo de caixa pode ser observada na gura 2.8. e ca Esta janela poderia ser criada com uma caixa vertical com 2 linhas, cada uma contendo uma caixa horizontal. Ambas as caixas horizontais possuiriam

Figura 2.8: Exemplo de Uso da Caixa Tabela

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 21

Figura 2.9: Combinao de Caixas Horizontais e Verticais ca

Figura 2.10: Posicionamento Fixo um rtulo, um divisor horizontal e uma caixa de texto. Mas neste caso, seria o necessrio garantir o alinhamento dos divisores horizontais, o que a caixa a Tabela j faz. A gura 2.9 demonstra o problema do alinhamento. a

2.5.5

Posicionamento Fixo

Nesta caixa, a posio e o tamanho de cada componente especica pelo proca e gramador em coordenadas cartesianas, utilizando um pixel como unidade. A gura 2.10 exemplica esta caixa. O GTK+ no gerencias o posicionaa mento nesta caixa, e portanto o programador deve alterar o posicionamento manualmente quando o tamanho de algum componente modicado. Esta e caixa diculta a traduo de aplicaes onde as expresses nos diferentes ca co o idiomas possuem dimenses adversas. o

Figura 2.11: Combinao de Caixas ca

CAP ITULO 2.

DESENVOLVIMENTO DE INTERFACE GRAFICA 22

2.5.6

Combinaes de Caixas co

Dicilmente uma caixa oferece ao usurio exatamente o posicionamento de a componentes desejado. Entretanto, ao combinar as diversas caixas oferecidas, poss e vel especicar praticamente qualquer posicionamento. Como toda caixa um componente, poss posicionar caixas dentro de caixas. e e vel Desta forma, o programador tem grande exibilidade. A gura 2.11 mostra uma aplicao onde diversas caixas so utilizadas. ca a

Cap tulo 3

A API GTKMM
A API (Application Programming Interface) GTKMM oferece uma verso a C++ da biblioteca GTK+ para C. Assim, ela oferece ao programador todas as funcionalidades necessrias para o desenvolvidos de aplicativos grcos a a para as plataformas que suportam o GTK+, como vrios sistemas UNIX e a o Microsoft Windows. O ambiente grco GNOME baseado no GTK+, e a e oferece seus componentes como extenses. Entretanto, vrios destes compoo a nentes requerem o ambiente GNOME (ou parte dele, como o Bonobo) para funcionarem corretamente. Neste cap tulo, os principais componentes da API GTKMM sero aprea sentados. Este texto no visa descrever toda a API, mas apenas preparar a o leitor para entender a documentao prpria dos componentes. Assim, ca o apenas os principais componentes bsicos sero apresentados. A maioria a a dos restantes so variaes ou composies destes componentes bsicos, e a co co a portanto no ser dif para o leitor aprender a utiliz-los conforme a nea a cil a cessidade. A documentao completa da API GTKMM pode ser encontrada em ca http://www.gtkmm.org/gtkmm2/docs/, incluindo diversas extenses. o

3.1

Primeiro Programa

Para introduzir o leitor a programao com GTKMM, um programa simples ca apresentado na listagem a seguir. Este programa apenas cria um objeto e Gtk::Window, que representa uma janela. #include <gtkmm.h> int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela;

23

CAP ITULO 3.

A API GTKMM

24

Figura 3.1: Execuo do primeiro exemplo ca Gtk::Main::run(janela); } Este programa possui apenas 3 linhas de cdigo. A primeira cria uma o aplicao Gtk+. Este passo necessrio para repassar ao Gtk os arguca e a mentos do programa. Esta funo remover de argv todos os argumentos ca a reconhecidos, tanto pelo Gtk+ quanto pela Xlib. O comando seguinte cria o objeto janela, da classe Gtk::Main. O ultimo comando ordena ao Gtk+ que mostre e ative a janela. Esta a janela e principal da aplicao, e o quando ela for fechada o programa ser encerrado. ca a Note que todos os s mbolos do GTKMM esto denidos no espao de nomes a c Gtk, e portanto devem ser precedidos por Gtk, a menos que o espao de c nomes seja incorporado no escopo.

3.2

Compilao ca

Para testar o primeiro programa, salve-o com o nome exemplo1.cc e compileo com o comando:

user@host:/home/user$ g++ o exemplo1 exemplo1.cc pkgcong gtkmm2.0 cags libs Para execut-lo, digite: a

user@host:/home/user$ ./exemplo1 Aps este comando, a janela mostrada na gura 3.1 deve aparecer na o tela.

CAP ITULO 3.

A API GTKMM

25

3.2.1

Automatizando a Compilao ca

Para facilitar a compilao dos exemplos, pode-se utilizar o seguinte Makeca le:

FILE=$<$nome do exemplo$>$ LIBS=gtkmm2.0 CFLAGS=pkgcong ${LIBS} cags libs RUN=/bin/true ${FILE}: ${FILE}.cc g++ o ${FILE} ${FILE}.cc ${CFLAGS} && ${RUN} && (./${FILE} &) clean: rm ${FILE} E preciso denir a varivel FILE com o nome do exemplo a ser compilado, a sem extenso (ex: exemplo1) e a varivel LIBS com o nome das bibliotecas a a a serem ligadas. O programa pkgcong descrito na seo 1.2 na pgina e ca a 8 e o uso de Makeles na seo 1.3 na pgina 10. ca a

3.3

Tratamento de Sinais

Conforme descrito na seo 2.1, no modelo MVC preciso especicar rotinas ca e que respondam aos eventos gerados pelo usurio. Na terminologia Gtk+ os a eventos so chamados de sinais (signals). O suporte ao tratamento de sinais a do GTKMM fornecido pela biblioteca libsigc++. e

3.3.1

A Biblioteca libsigc++

A biblioteca libsigc++ oferece um tratamento muito ex vel de eventos atravs de classes altamente parametrizadas. Entretanto, a base de seu e funcionamento est em trs classes: a e SigC::Signal: esta classe representa os eventos. Cada componente dene seus eventos como objetos desta classe, permitindo a vinculao ca de tratadores para cada evento. SigC::Slot: esta classe representa os tratadores de eventos. O programador deve declarar as funes que trataro os eventos, e encapco a sul-las em objetos SigC::Slot. Apenas objetos desta classe podem a tratar os eventos representados pela classe SigC::Signal.

CAP ITULO 3.

A API GTKMM

26

SigC::Object: classes cujos mtodos so tratadores de eventos e a (mtodos SigC::Slot) devem sempre derivar desta classe. Logo, esta e classe a base dos controladores (ver seo 2.2). Assim, quando um e ca objeto da classe destru todos os seus tratadores so desvinculados e do, a automaticamente. Todos os componentes de GTKMM so derivados a de Sig :: Object. Os eventos de cada componente devem ser declarados como atributos (ou propriedades) do componente, e objetos da classe SigC::Signal. Atravs e do mtodo: e

SigC::Connection SigC::Signal::connect(SigC::Slot ); O mtodo connect() conecta um tratador e (SigC::Slot) a um evento (SigC::Signal). O mtodo retorna um objeto e SigC::Connection, que pode ser usado para desconectar o tratador de eventos. A biblioteca libsigc++ oferece funes para encapsular mtodos de co e classes e funes globais em objetos SigC::Slot. Estes construtores so, co a respectivamente:

SigC:: slot (void funcao(void)); // para funcoes globais SigC:: slot (objeto , void metodo(void)); // para metodos Caso a primeira funo seja usada, quando o evento acontecer, o sisca tema chamar funcao(). Caso a segunda seja usada, o sistema chamar a a objeto.metodo(). Os mtodos passados tambm podem ser estticos ou e e a virtuais. Todos os s mbolos da biblioteca libsigc++ pertencem ao espao c de nomes SigC. Esta biblioteca inclu juntamente com o GTKMM, e da pois base para todos os componentes. Para utilizar apenas a biblioteca e libsigc++ preciso incluir o cabealho <sigc++1.2/sigc++/sigc++.h> e e c passar libsigc++1.2como parmetro para o pkgcong. a O exemplo a seguir ilustra o tratamento de eventos com GTKMM. Para demonstrar o funcionamento de eventos, preciso utilizar mais um come ponente, Gtk::Button, que representa um boto. O cdigo do exemplo a o e mostrado a seguir:

#include <gtkmm.h> class Controlador : public SigC::Object { Gtk::Window& janela;

CAP ITULO 3.

A API GTKMM

27

public: Controlador(Gtk::Window& janela) : janela( janela ) { Object(); janela . set title (Cliques: ); } void botao pressionado() { janela . set title ( janela . get title () + +); } };

int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela; Controlador controlador(janela); Gtk::Button botao(Cliqueme); janela .add(botao); botao.show(); botao. signal clicked (). connect( SigC:: slot (controlador, &Controlador::botao pressionado) ); Gtk::Main::run(janela); } Neste exemplo, uma classe Controlador denida para tratar os evene tos da janela principal. Um boto criado e adicionado ` janela. Este a e a boto possui o evento signal clicked, que conectado ao mtodo tratador a e e botao pressionado da classe Controlador. Como este mtodo no esttico, e a e a necessrio especicar um objeto (controlador). e a Neste exemplo, apenas o evento signal clicked tratado. Os demais e eventos sero ignorados, pois o sistema dene um tratador nulo em caso de a omisso. a Alguns eventos podem passar alguns argumentos para seus tratadores. E necessrio sempre observar na documentao qual a interface esperada do a ca tratador para cada evento. A documentao de todas as classes do GTKMM ca pode ser acessada em http://www.gtkmm.org/docs/gtk/class index.html.

CAP ITULO 3.

A API GTKMM

28

explicit Window (GtkWindowType type=); Cria uma nova janela e dene seu tipo void set default size (gint width, gint heigth); Dene o tamanho padro da janela a void set position (GtkWindowPosition position); Dene a posio padro da janela ca a void set user resizeable (gboolean setting); Dene se o usurio pode ou no redimensionar a janela a a void add (Widget& p0); Agrega o componente p0 void remove (Widget& p0); Remove o componente p0 Tabela 3.1: Principais mtodos de Gtk::Window e

Nas sees a seguir, os principais componentes do GTKMM so apresenco a tados. Nenhum componente ser descrito em detalhes. A funo deste texto a ca apenas introduzir o usurio ` API. Para detalhes, veja a documentao do e a a ca GTKMM no link acima.

3.4

Gtk::Window

Conforme foi apresentado anteriormente, o componente Gtk::Window repre senta uma janela. E derivado da classe abstrata Gtk::Bin, que a base para e todos os componentes que podem possuir outros componentes, e fornece os mtodos necessrios para gerenciar o componente agregado. e a Os principais mtodos para gerenciar objetos Gtk::Window esto listados e a na tabela 3.1. Caso o leitor no encontre o mtodo necessrio nesta tabela, a e a deve buscar na documentao da classe e de suas bases. ca

3.5

Componentes Bsicos a

Os componentes bsicos do GTKMM sero descritos a seguir. Estes coma a ponentes so sucientes para pequenas aplicaes, e constituem a base dos a co demais.

3.5.1

Gtk::Label

O componente Gtk::Label (rtulo) utilizada para mostrar uma seqncia o e ue de caracteres em uma janela. Os principais mtodos deste componente esto e a listados na tabela 3.2

CAP ITULO 3.

A API GTKMM

29

explicit Label (const nstringi& label=0); Cria um rtulo o string get text () const; Retorna o texto do rtulo o void set justify (GtkJustication jtype); Dene o posicionamento do texto void set text (const string& str); Dene o texto do rtulo o Tabela 3.2: Principais mtodos de Gtk::Label e Button (); Cria um boto sem rtulo a o explicit Button (const string& label); Cria um boto e dene seu rtulo a o emitable signal void clicked (); Evento disparado quando o boto clicado a e emitable signal void enter (); Evento disparado quando o cursor entra no boto a emitable signal void leave (); Evento disparado quando o cursor sai do boto a Tabela 3.3: Principais mtodos e eventos de Gtk::Button e

3.5.2

Gtk::Button

Gtk::Button o componente base de botes do GTKMM. Todos os outros e o botes derivam desta classe. Todo boto possui um rtulo e dispara eventos. o a o A tabela 3.3 mostra os principais mtodos e eventos oferecidos por todos os e tipos de botes. o A classe Gtk::Button concreta e pode ser instanciada. Alm disso, o e e boto pode conter um outro componente. a

3.5.3

Gtk::ToggleButton

O componente Gtk::ToggleButton representa um boto que possui dois esa tados: pressionado e solto. Oferece os mtodos e eventos apresentados e na tabela 3.4, em adio aos oferecidos por Gtk::Button. Naturalmente, ca a denio dos construtores ToggleButton(...). Este componente possui ca e duas propriedades booleanas. A primeira o seu estado (active), que dene e se o boto est pressionado ou no. A segunda o seu modo (modo), que a a a e dene se o estado do boto deve alterar sua aparncia ou no. a e a

CAP ITULO 3.

A API GTKMM bool get active () const; Retorna o estado do boto a bool get mode () const; Retorna se o estado est sendo mostrado a void set active () const; Dene o estado (lig/desi) do boto a void set mode () const; Dene se o estado deve ser mostrado emitable signal void toggled (); Evento disparado quando muda de estado

30

Tabela 3.4: Principais mtodos de Gtk::ToogleButton e RadioButton (Group& groupx); Cria um boto de rdio pertencente ao grupo a a RadioButton (Group& groupx, const string& label); Cria um boto pertencente ao grupo e dene seu rtulo a o Group group (); Retorna o grupo ao qual o boto pertence a void set group (Group p0); Dene o grupo do boto a Tabela 3.5: Principais mtodos de Gtk::RadioButton e

3.5.4

Gtk::CheckButton

O componente Gtk::CheckButton comporta-se como o seu componente base, o Gtk::ToggleButton, mas difere na aparncia. Consiste de um pequeno e boto quadrado e um rtulo externo. O estado do boto mostrado pela a o a e presena ou ausncia de um marco no quadrado. c e Este componente no dene qualquer mtodo ou evento adicional. a e

3.5.5

Gtk::RadioButton

O componente Gtk::RadioButton se comporta como um Gtk::CheckButton exclusivo em um grupo de botes. O programador dene um grupo de botes o o onde apenas um pode estar ligado em cada tempo. Quando um boto do a grupo marcado, todos os restantes so desmarcados. Este componente ese a pecializa o Gtk::CheckButton, oferecendo os mtodos apresentados na tabela e 3.5.

CAP ITULO 3.

A API GTKMM

31

Entry (); Cria uma caixa de texto vazia string get text () const; Retorna o contedo da caixa de texto u void set text set text(const string& text); Dene o contedo da caixa de texto u void set visibility(bool visible); Dene se a caixa deve ser vis ou no vel a Tabela 3.6: Principais mtodos de Gtk::Entry e

3.5.6

Gtk::Entry

O componente representa uma caixa de texto de apenas uma linha. Este componente no derivado de Gtk::Button, e portanto no possui qualquer a e a mtodo ou evento associado a botes. Seus principais mtodos esto listados e o e a na tabela 3.6.

3.5.7

Separadores

A API GTKMM oferece dois componentes de separao: Gtk::HSeparator ca (horizontal) e Gtk::VSeparator (vertical). A funo destes componentes ca e traar uma linha separando os demais componentes na posio desejada. So c ca a componente visuais que no possuem muitos mtodos para manipulao e a e ca no geram eventos. a

3.6

Caixas

Conforme explicado na seo 2.5 (pgina 18, em Gtk+ os componentes deca a vem ser organizados em caixas, que podem ou no estar contidas em outras a caixas. A interface das caixas de Gtk+ bastante simples e a maior dicule dade no posicionamento est em entender o conceito de Packing e conseguir a imaginar e descrever a organizao desejada atravs das caixas dispon ca e veis. Os conceitos apresentados na seo 2.5 e um pouco de prtica devem ser ca a sucientes para a compreenso. a Nas sees a seguir as caixas dispon co veis em Gtk+ e seus mtodos so e a apresentados.

3.6.1

Gtk::Container

A classe Gtk::Container a base dos componentes que podem conter oute ros componentes, sendo caixas ou no. Alguns componentes podem conter a apenas um componente, enquanto que outros (na maioria caixas) podem

CAP ITULO 3.

A API GTKMM void add (Widget& p0); Adiciona o componente void remove (Widget& p0); Remove o componente void set focus child (Widget& p0); Repassa o foco para o componente

32

Tabela 3.7: Principais mtodos de Gtk::Container e

conter vrios. O mtodo add (...) adiciona um componente sem especicar a e a posio. As caixas oferecem mtodos mais especializados que devem ser ca e usados. A tabela 3.7 apresenta os principais mtodos desta classe. O exemplo a e seguir demonstra como adicionar um boto a uma janela. a #include <gtkmm.h> int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela; janela . set title ( Exemplo de Gtk::Container); Gtk::Button botao(Botao simples); janela .add(botao); botao.show(); Gtk::Main::run(janela); }

3.6.2

Gtk::Box

As caixas derivadas da classe Gtk::Box oferecem mtodos mais avanados e c para adicionar componentes. Ao adicionar um componente, poss e vel especicar se ele pode ser expandido e se deve ocupar toda a rea dispon a vel na caixa, ou manter seu tamanho padro. Em caso de omisso, ambas as a a propriedades sero verdadeiras. Tambm poss a e e vel especicar um valor padding, ou seja, distncia dos outros componentes. E preciso especicar a se o componente ser adicionado ao in ou ao nal da caixa. O mtodo a cio e pack\ start, que adiciona um componente ao in da caixa tem a seguinte cio interface: void pack start(Widget& child, bool expand=true,

CAP ITULO 3.

A API GTKMM

33

bool ll =true, guint padding=0); O mtodo pack end possui a mesma interface e adiciona um componente e ao nal da caixa. Os componentes Gtk::VBox e Gtk::HBox derivam da classe Gtk::Box e posicionam seus componentes no sentido vertical e horizontal, respectivamente. Ambos oferecem a mesma interface. O exemplo a seguir demonstra seu uso: #include <gtkmm.h> int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela; janela . set title ( Exemplo de Gtk::HBox e Gtk::VBox); janela . resize (300, 200); Gtk::Button botao1(1), botao2(2), botao3(3), botao4(4), botao5(5); Gtk::HBox hbox; Gtk::VBox vbox; janela .add(vbox); vbox.pack start(hbox,true,true,10); hbox.pack end(botao1); hbox.pack end(botao2); hbox.pack end(botao3); vbox.pack start(botao4, false , false ,10); vbox.pack start(botao5, false , false ,10); botao1.show(); botao2.show(); botao3.show(); botao4.show(); botao5.show(); vbox.show(); hbox.show(); Gtk::Main::run(janela); }

3.6.3

Gtk::Table

O componente Gtk::Table representa a tabela apresentada na seo 2.5.4 ca (pgina 20). Para adicionar componentes a esta caixa, necessrio especia e a

CAP ITULO 3.

A API GTKMM

34

Table (gint rows=1, gint columns=1, gint homogeneous=FALSE); Construtor da tabela void resize (guint rows, guint columns); Redimensiona a tabela void set homogeneous (bool homogeneous); Dene se os componentes devem ser igualmente espaados entre si c Tabela 3.8: Principais mtodos de Gtk::Table e

car quais clulas sero ocupadas por ele. Um mesmo componente pode e a ocupar mais de uma clula. O mtodo para adicionar componentes o e e e attach, que recebe como parmetros as coordenadas das clulas que o coma e ponente ocupar. Como parmetros opcionais, poss a a e vel especicar se os omponentes podem ser expandidos vertical ou horizontalmente e a distncia a dos outros componentes. O mtodo attach possui a seguinte interface: e

void attach(Widget& child, guint left attach , guint right attach , guint top attach , guint bottom attach, gint xoptions= (GTK FILL|GTK EXPAND), gint yoptions=(GTK FILL|GTK EXPAND), guint xpadding=0, guint ypadding=0); Outros mtodos do componente esto listados na tabela 3.8. O exemplo e a a seguir ilustra o uso da caixa Gtk::Table: #include <gtkmm.h> int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela; Gtk::Table tabela (3,2); janela . set title (Exemplo de Gtk::Table); janela . resize (300,200); janela .add(tabela); Gtk::Label labNome(Nome), labEndereco(Endereco); Gtk::Entry entNome, entEndereco; tabela.attach( tabela.attach( tabela.attach( tabela.attach( labNome , 1, 2, 1, 2 ); labEndereco , 1, 2, 2, 3 ); entNome , 2, 3, 1, 2 ); entEndereco , 2, 3, 2, 3 );

CAP ITULO 3.

A API GTKMM

35

Fixed (); Cria uma caixa de posies xas co void put (Widget& widget, gint16 x, gint16 y); Adiciona um componente na posio determinada ca void move (Widget& widget, gint16 x, gint16 y); Move um componente para a posio determinada ca Tabela 3.9: Principais mtodos de Gtk::Table e

janela . show all (); Gtk::Main::run( janela ); }

3.6.4

Gtk::Fixed

A caixa Gtk::Fixed usada quando o programador deseja especicar a e posio exata de cada componente. Ela fornece um mtodo para colocar ca e um componente em uma posio determinada, e outro para mov-lo (alm ca e e dos mtodos de Gtk::Container), conforme pode ser observado na tabela 3.9. e O exemplo a seguir demonstra o uso do componente Gtk::Fixed: #include <gtkmm.h> #include <string> int main(int argc, char argv) { Gtk::Main main(argc, argv); Gtk::Window janela; Gtk::Fixed xed ; janela . set title (Exemplo de Gtk::Fixed); janela . resize (300,200); janela .add(xed ); Gtk::Label labNome(Nome), labEndereco(Endereco); Gtk::Entry entNome, entEndereco; xed .put(labNome, 10, 10); xed .put(labEndereco, 10, 100); xed .put(entNome, 120, 10); xed .put(entEndereco, 120, 100); janela . show all (); Gtk::Main::run( janela ); }

Apndice A e

Bibliotecas GTK+/GNOME
AtkMM Descrio: ca Verso: a Dependncias: e C++ wrapper for atk 2.2.7 glibmm-2.0 atk

Atk Descrio: ca Verso: a Dependncias: e

Accessibility Toolkit 1.4.0 gobject-2.0 gmodule-2.0

audiole Descrio: ca Verso: a Dependncias: e

audiole 0.2.3 Nenhuma

Bonobo Activation Descrio: ca Object activation framework for GNOME Verso: a 2.4.0 Dependncias: glib-2.0 gmodule-2.0 ORBit-2.0 e

camel Descrio: ca Verso: a Dependncias: e

the Evolution mail library 1.4.5 gal-2.0 >= 1.99.8

36

APENDICE A. BIBLIOTECAS GTK+/GNOME cspi Descrio: ca Verso: a Dependncias: e

37

Accessibility Technology software simple client library 1.3.7 libspi-1.0

eel Descrio: ca Verso: a Dependncias: e

Eazel Extensions Library 2.4.0 gconf-2.0 gdk-pixbuf-2.0 glib-2.0 gmodule-2.0 gnomevfs-2.0 gthread-2.0 gtk+-2.0 libart-2.0 libgnome-2.0 libgnomeui-2.0 libxml-2.0 gail libglade-2.0

Epiphany Browser Descrio: ca GNOME Web Browser Verso: a 1.0 Dependncias: gtk+-2.0, libxml-2.0, libgnomeui-2.0, bonobo-activatione 2.0, libbonoboui-2.0 >= 2.1.1, ORBit-2.0, libglade-2.0, gnome-vfs-2.0, gnome-vfs-module-2.0, gconf-2.0

esound Descrio: ca Verso: a Dependncias: e

esound 0.2.32 audiole

evolution-addressbook Descrio: ca libraries needed for Evolution addressbook backends Verso: a 1.4.5 Dependncias: gconf-2.0 libbonobo-2.0 gal-2.0 >= 1.99.8 libgnome-2.0 e camel = 1.4.5

evolution-calendar Descrio: ca libraries needed for Evolution calendar backends Verso: a 1.4.5 Dependncias: libgnome-2.0 libbonobo-2.0 gal-2.0 >= 1.99.8 gnome-vfse 2.0

APENDICE A. BIBLIOTECAS GTK+/GNOME

38

evolution-shell Descrio: ca libraries needed for Evolution shell components Verso: a 1.4.5 Dependncias: libgnome-2.0 libgnomeui-2.0 libbonoboui-2.0 gal-2.0 >= e 1.99.8

Fontcong Descrio: ca Verso: a Dependncias: e

Font conguration and customization library 2.2.1 Nenhuma

fribidi Descrio: ca Verso: a Dependncias: e

Unicode BiDirectional algorithm library 0.10.4 Nenhuma

Gail Descrio: ca Verso: a Dependncias: e

GNOME Accessibility Implementation Library 1.4.0 atk gtk+-2.0 libgnomecanvas-2.0

GAL Descrio: ca Verso: a Dependncias: e

GNOME Application Library 1.99.9 gtk+-2.0 libxml-2.0 libglade-2.0 libgnomeprint-2.2

GAPI Descrio: ca Verso: a Dependncias: e

GObject .NET API Wrapping Tool 0.10 Nenhuma

gconf Descrio: ca Verso: a Dependncias: e

GNOME Cong System. 2.4.0.1 ORBit-2.0

APENDICE A. BIBLIOTECAS GTK+/GNOME

39

gDesklets Core Descrio: ca GNOME Desktop Utilities written in Python, Core Package Verso: a 0.21 Dependncias: gnome-python-2.0 >= 1.99.14 pygtk-2.0 >= 1.99.14 gdke 2.0 gtk+-2.0

GDK Descrio: ca Verso: a Dependncias: e

GIMP Drawing Kit ($target target) 2.2.4 gdk-pixbuf-2.0 pangoxft pangox

GDKmm Descrio: ca Verso: a Dependncias: e

C++ wrappers for GLib, GTK+, and Pango 2.2.7 glibmm-2.0 pangomm-1.0 gdk-2.0

GdkPixbuf Descrio: ca Verso: a Dependncias: e

Image loading and scaling 2.2.4 gobject-2.0,gmodule-2.0

GdkPixbuf Xlib Descrio: ca GdkPixbuf rendering for Xlib Verso: a 2.2.4 Dependncias: gobject-2.0,gmodule-2.0,gdk-pixbuf-2.0 e

GDK Descrio: ca Verso: a Dependncias: e

GIMP Drawing Kit ($target target) 2.2.4 gdk-pixbuf-2.0 pangoxft pangox

gedit Descrio: ca Verso: a Dependncias: e

gedit 2.4.0 libgnomeui-2.0 libglade-2.0 libgnomeprintui-2.2 eel-2.0 gtksourceview-1.0

APENDICE A. BIBLIOTECAS GTK+/GNOME GIMP Descrio: ca Verso: a Dependncias: e

40

GIMP Library 1.3.20 glib-2.0

GIMP UI Descrio: ca Verso: a Dependncias: e

GIMP User Interface Library 1.3.20 gimp-1.3 gtk+-2.0 >= 2.2.0

GKrellM Descrio: ca Verso: a Dependncias: e

Extensible GTK system monitoring application 2.1.19 gtk+-2.0 >= 2.0.0

GLib Descrio: ca Verso: a Dependncias: e

C Utility Library 2.2.3 Nenhuma

GLibmm Descrio: ca Verso: a Dependncias: e

C++ wrapper for GLib 2.2.7 gobject-2.0 sigc++-1.2

GModule Descrio: ca Verso: a Dependncias: e

Dynamic module loader for GLib 2.2.3 glib-2.0

Gnet Descrio: ca Verso: a Dependncias: e

A network compatibility layer library 1.1.9 Nenhuma

APENDICE A. BIBLIOTECAS GTK+/GNOME gnome-desktop-2.0 Descrio: ca Utility library for loading .desktop les Verso: a 2.4.0 Dependncias: gtk+-2.0 libgnomeui-2.0 libstartup-notication-1.0 e

41

gnome-mag Descrio: ca Verso: a Dependncias: e

Gnome Screen Magnier 0.10.3 libbonobo-2.0 gtk+-2.0

gnome-mime-data Descrio: ca Base set of le types and applications for GNOME Verso: a 2.4.0 Dependncias: Nenhuma e

Gnome Pilot Descrio: ca Verso: a Dependncias: e

No dispon a vel 2.0.10 (pilot-link version 0.11.5) libgnome-2.0 libgnomeui-2.0

GNOME-python Descrio: ca Python bindings for GNOME libraries Verso: a 2.0.0 Dependncias: Nenhuma e

gnome-speech Descrio: ca GNOME text to speech infrastructure Verso: a 0.2.7 Dependncias: libbonobo-2.0 e

gst Descrio: ca Verso: a Dependncias: e

Gnome System Tools 0.27.0 Nenhuma

APENDICE A. BIBLIOTECAS GTK+/GNOME gnome-vfs Descrio: ca Verso: a Dependncias: e

42

The GNOME virtual le-system libraries 2.4.0 bonobo-activation-2.0,gthread-2.0,gmodule-2.0

gnome-vfs-module Descrio: ca The GNOME virtual le-system module include info Verso: a 2.4.0 Dependncias: bonobo-activation-2.0,gthread-2.0,gmodule-2.0 e

gnome-window-settings-2.0 Descrio: ca Utility library for getting window manager settings Verso: a 2.4.0 Dependncias: gtk+-2.0 libgnomeui-2.0 e

gnopernicus Descrio: ca Verso: a Dependncias: e

Accessibility Technology Software 0.7.0 cspi-1.0 gtk+-2.0 libglade-2.0 libgnome-2.0 libgnomeui2.0 libxml-2.0

GObject Descrio: ca Verso: a Dependncias: e

GLib Type, Object, Parameter and Signal Library 2.2.3 glib-2.0

Gok Descrio: ca Verso: a Dependncias: e

GNOME On-screen Keyboard 0.8.1 libgnomeui-2.0 cspi-1.0 libspi-1.0 libbonobo-2.0 atk gtk+-2.0 gail libwnck-1.0 esound

APENDICE A. BIBLIOTECAS GTK+/GNOME GStreamer Descrio: ca Verso: a Dependncias: e

43

Streaming-media framework 0.6.3 glib-2.0, gobject-2.0, gmodule-2.0, gthread-2.0, libxml2.0

GStreamer control library Descrio: ca Dynamic parameters for plug-ins Verso: a 0.6.3 Dependncias: gstreamer-0.6 e

GStreamer GConf Library Descrio: ca Streaming media framework, GConf support library Verso: a 0.6.3 Dependncias: gstreamer-0.6 e

GStreamer Media-Specic Libraries Descrio: ca Streaming-media framework, media-specic libraries Verso: a 0.6.3 Dependncias: gstreamer-0.6 e

GStreamer Play Library Descrio: ca Streaming-media framework, play libraries Verso: a 0.6.3 Dependncias: gstreamer-0.6 gstreamer-control-0.6 e

GThread Descrio: ca Verso: a Dependncias: e

Thread support for GLib 2.2.3 glib-2.0

GTK+ Descrio: ca Verso: a Dependncias: e

GIMP Tool Kit ($target target) 2.2.4 gdk-$target-2.0 atk

APENDICE A. BIBLIOTECAS GTK+/GNOME gtk-doc Descrio: ca Verso: a Dependncias: e

44

API documentation generator 1.1 Nenhuma

gtk-engines-2 Descrio: ca Verso: a Dependncias: e

GTK+ Theme Engines 2.2.0 gtk+-2.0

gtkhex Descrio: ca Verso: a Dependncias: e

GtkHex - A hex display widget. 1.0.0 gail atk gtk+-2.0

GTKmm Descrio: ca Verso: a Dependncias: e

C++ wrapper for GTK+ 2.2.7 glibmm-2.0 gdkmm-2.0 pangomm-1.0 atkmm-1.0 gtk+2.0

Gtk# Descrio: ca Verso: a Dependncias: e

Gtk# - GNOME .NET Binding 0.10 Nenhuma

gtksourceview Descrio: ca GTK+ 2.0 Source Editing Widget Verso: a 0.6.0 Dependncias: gtk+-2.0 libxml-2.0 libgnomeprint-2.2 e

GTK+ Descrio: ca Verso: a Dependncias: e

GIMP Tool Kit ($target target) 2.2.4 gdk-$target-2.0 atk

APENDICE A. BIBLIOTECAS GTK+/GNOME gucharmap Descrio: ca Verso: a Dependncias: e

45

GTK+ Unicode Character Map 1.0.0 gtk+-2.0 glib-2.0 libgnomeui-2.0 libgnome-2.0

libart Descrio: ca Verso: a Dependncias: e

LGPL version of the libart library 2.3.16 Nenhuma

libbonobo Descrio: ca Verso: a Dependncias: e

libbonobo 2.4.0 glib-2.0 ORBit-2.0 bonobo-activation-2.0

libbonobui Descrio: ca Verso: a Dependncias: e

libbonoboui 2.4.0 glib-2.0 ORBit-2.0 libxml-2.0 libgnomecanvas-2.0 libgnome-2.0

libbonobo-2.0

libcroco Descrio: ca Verso: a Dependncias: e

a CSS2 Parsing Library in C. 0.3.0 glib-2.0

libgail-gnome Descrio: ca Verso: a Dependncias: e

GNOME Accessibility Implementation Library for gnomeui and libbonoboui 1.0.2 atk gtk+-2.0 libbonoboui-2.0

libgda Descrio: ca Verso: a Dependncias: e

GDA (GNOME Data Access) library 0.91.0 glib-2.0 libxml-2.0 libxslt

APENDICE A. BIBLIOTECAS GTK+/GNOME Libglade Descrio: ca Verso: a Dependncias: e

46

a library for dynamically loading GLADE interface les 2.0.1 gtk+-2.0 libxml-2.0

libgnome Descrio: ca Verso: a Dependncias: e

libgnome 2.4.0 glib-2.0 ORBit-2.0 libbonobo-2.0 gconf-2.0 gnome-vfs2.0

libgnomecanvas-2.0 Descrio: ca libgnomecanvas Verso: a 2.4.0 Dependncias: libart-2.0 pango pangoft2 gtk+-2.0 e

libgnomecups Descrio: ca Verso: a Dependncias: e

GNOME CUPS Library 0.1.6 glib-2.0 gobject-2.0

libgnomecups Descrio: ca Verso: a Dependncias: e

GNOME CUPS Library 0.17 libgnomecups-1.0 gtk+-2.0

libgnomedb Descrio: ca Verso: a Dependncias: e

libgnomedb 0.91.0 gtk+-2.0 >= 2.0.0 libgda >= 0.11.2 libgnomeui-2.0 >= 1.103 bonobo-activation-2.0 libbonoboui-2.0 libglade-2.0

libgnomeprint-2.0 Descrio: ca libgnomeprint Verso: a 1.116.1 Dependncias: libart-2.0 glib-2.0 libxml-2.0 libbonobo-2.0 pango e

APENDICE A. BIBLIOTECAS GTK+/GNOME

47

libgnomeprint-2.2 Descrio: ca libgnomeprint - Printing library for gtk+ based applications Verso: a 2.3.1 Dependncias: libart-2.0 glib-2.0 gmodule-2.0 gobject-2.0 libxml-2.0 e pango

libgnomeprintui-2.0 Descrio: ca libgnomeprintui Verso: a 1.116.0 Dependncias: libgnomeprint-2.0 libgnomecanvas-2.0 e

libgnomeprintui-2.2 Descrio: ca libgnomeprint - Printing library for gtk+ based applications Verso: a 2.3.1 Dependncias: libgnomeprint-2.2 libgnomecanvas-2.0 e

libgnomeui Descrio: ca Verso: a Dependncias: e

libgnomeui 2.4.0.1 libgnome-2.0 libgnomecanvas-2.0 gtk+-2.0 gdk-pixbuf2.0 libart-2.0 gconf-2.0 libbonoboui-2.0

libgsf-1 Descrio: ca Verso: a Dependncias: e

A library for reading and writing structured les (eg MS OLE and Zip) 1.8.2 glib-2.0 gobject-2.0 libxml-2.0

libgsf-gnome-1 Descrio: ca GNOME specic extensions to libgsf Verso: a 1.8.2 Dependncias: libgsf-1 e

APENDICE A. BIBLIOTECAS GTK+/GNOME libgtkhtml Descrio: ca Verso: a Dependncias: e

48

libgtkhtml 2.4.0 gtk+-2.0 gdk-pixbuf-2.0 libxml-2.0

libgtkhtml Descrio: ca Verso: a Dependncias: e

libgtkhtml 3.0.8 libgnomeui-2.0 >= 1.112.1 libgnomeprint-2.2 >= 2.2.0 libgnomeprintui-2.2 >= 2.2.1 libglade-2.0 >= 2.0.0 gal2.0 >= 0.0.2

libgtop Descrio: ca Verso: a Dependncias: e

Portable System Access Library 2.0.5 glib-2.0

libIDL Descrio: ca Verso: a Dependncias: e

IDL parsing library 0.8.2 glib-2.0

libmetacity-private Descrio: ca Metacity internals shared Verso: a 2.6.1 Dependncias: gtk+-2.0 e

libmrproject Descrio: ca Verso: a Dependncias: e

libmrproject 0.9.1 glib-2.0 gmodule-2.0 gobject-2.0 libxml-2.0 libgsf-1

libmusicbrainz Descrio: ca The Musicbrainz Client Library. Verso: a 2.0.2 Dependncias: Nenhuma e

APENDICE A. BIBLIOTECAS GTK+/GNOME libnautilus Descrio: ca Verso: a Dependncias: e

49

A library to create Nautilus components 2.4.0 eel-2.0 bonobo-activation-2.0 libbonobo-2.0 libbonoboui2.0

libpanel-applet-2 Descrio: ca libpanel-applet-2 Verso: a 2.4.0 Dependncias: gtk+-2.0 libgnomeui-2.0 libbonoboui-2.0 e

librsvg Descrio: ca Verso: a Dependncias: e

library that renders svg les using libart and pango 2.4.0 glib-2.0 gdk-pixbuf-2.0 libart-2.0 libxml-2.0 pangoft2 libgsf-1 libcroco

libspi Descrio: ca Verso: a Dependncias: e

Accessibility Technology software library 1.3.7 libbonobo-2.0 atk gtk+-2.0

libstartup-notication Descrio: ca Startup notication library Verso: a 0.5 Dependncias: Nenhuma e

libwnck Descrio: ca Verso: a Dependncias: e

Window Navigator Construction Kit library 2.4.0.1 gtk+-2.0 libstartup-notication-1.0

libxine Descrio: ca Verso: a Dependncias: e

The xine engine library 1.0.0 Nenhuma

APENDICE A. BIBLIOTECAS GTK+/GNOME libxklavier Descrio: ca Verso: a Dependncias: e

50

libxklavier library 0.71 libxml-2.0

libXML Descrio: ca Verso: a Dependncias: e

libXML library version2. 2.5.11 Nenhuma

libxslt Descrio: ca Verso: a Dependncias: e

XSLT library version 2. 1.0.32 libxml-2.0

libzvt-2.0 Descrio: ca Verso: a Dependncias: e

libzvt 2.0.1 gtk+-2.0 libart-2.0

linc Descrio: ca Verso: a Dependncias: e

ORBit2 network transport library 1.1.1 glib-2.0 gobject-2.0 gthread-2.0

libloudmouth Descrio: ca Verso: a Dependncias: e

libloudmouth 0.13.2 glib-2.0

Mono Descrio: ca Verso: a Dependncias: e

Mono Runtime 0.26 glib-2.0 gmodule-2.0

APENDICE A. BIBLIOTECAS GTK+/GNOME Mozilla Gtk Embedding Widget Descrio: ca Mozilla Embedding Widget for Gtk+ Verso: a 1.5b Dependncias: mozilla-xpcom = 1.5b e

51

JavaScript Descrio: ca Verso: a Dependncias: e

The Mozilla JavaScript Library 1.5b mozilla-nspr = 1.5b

NSPR Descrio: ca Verso: a Dependncias: e

The Netscape Portable Runtime 1.5b Nenhuma

NSS Descrio: ca Verso: a Dependncias: e

Mozilla Network Security Services 1.5b mozilla-nspr = 1.5b

Mozilla Plug-In API Descrio: ca Mozilla Plug-In API Verso: a 1.5b Dependncias: mozilla-xpcom = 1.5b e

XPCOM Descrio: ca Verso: a Dependncias: e

The Mozilla Cross Platform Component Library 1.5b mozilla-nspr = 1.5b

ORBit-2.0 Descrio: ca Verso: a Dependncias: e

High-performance CORBA Object Request Broker. 2.8.1 glib-2.0 gmodule-2.0

APENDICE A. BIBLIOTECAS GTK+/GNOME

52

ORBit-CosNaming-2.0 Descrio: ca High-performance CORBA Object Request Broker Naming Service. Verso: a 2.8.1 Dependncias: ORBit-2.0 e

ORBit-idl-2.0 Descrio: ca Verso: a Dependncias: e

ORBit-2.0 IDL Compiler Backend Interface 2.8.1 libIDL-2.0

ORBit-imodule-2.0 Descrio: ca ORBit runtime typelib generation service. Verso: a 2.8.1 Dependncias: ORBit-2.0 libIDL-2.0 e

Pango FT2 Descrio: ca Verso: a Dependncias: e

Freetype 2.0 font support for Pango 1.2.5 pango

Pangomm Descrio: ca Verso: a Dependncias: e

C++ wrapper for Pango 2.2.7 glibmm-2.0 pango

Pango Descrio: ca Verso: a Dependncias: e

Internationalized text handling 1.2.5 glib-2.0,gobject-2.0,gmodule-2.0

Pango Xft Descrio: ca Verso: a Dependncias: e

Xft font support for Pango 1.2.5 pango

APENDICE A. BIBLIOTECAS GTK+/GNOME Pango X Descrio: ca Verso: a Dependncias: e

53

X Window System font support for Pango 1.2.5 pango

PyGTK Descrio: ca Verso: a Dependncias: e

Python bindings for GTK+ and related libraries 2.0.0 gobject-2.0

PyORBit Descrio: ca Verso: a Dependncias: e

Python bindings for ORBit2 2.0.0 ORBit-2.0 >= 2.4.4

Render Descrio: ca Verso: a Dependncias: e

Render extension headers 0.8 Nenhuma

Rhythmbox Descrio: ca Verso: a Dependncias: e

Rhythmbox 0.5.3 Nenhuma

SigC++ Descrio: ca Verso: a Dependncias: e

Type-safe signal and callback system for C++ 1.2.5 Nenhuma

libsoup Descrio: ca Verso: a Dependncias: e

a glib-based HTTP library 1.99.23 glib-2.0

APENDICE A. BIBLIOTECAS GTK+/GNOME vte Descrio: ca Verso: a Dependncias: e

54

Vte terminal widget. 0.11.10 xft >= 2.0 glib-2.0 gobject-2.0 gtk+-2.0 >= 2.2 fontcong pangoxft >= 1.1.0 pangox

Xft Descrio: ca Verso: a Dependncias: e

X FreeType library 2.1.2 fontcong

Xrender Descrio: ca Verso: a Dependncias: e

X Render Library 0.8.3 Nenhuma