Interfaces gráficas podem ser criadas programaticamente, caso em que o programador cria e arranja os componentes um por um, ou criadas através de um criador de interfaces (interface builder), caso em que é utilizado um aplicativo gráfico que permite "desenhar" as interfaces arrastando e soltando componentes.
Na plataforma GNU, mais especificamente no toolkit GTK+, somos livres para utilizar ou não um construtor de interfaces. Em nosso exemplo usaremos um criador de interfaces, o GLADE, em conjunto com o toolkit GKT+, embora a técnica que recomendo para boa parte dos casos seja a criação de interfaces de maneira programática.
O GLADE pode ser utilizado de duas formas: pode gerar o código fonte que cria a interface desenhada, ou pode gerar uma descrição em XML da interface que é posteriormente usada por uma biblioteca (libglade) para reconstruir a interface em tempo de execução.
Utilizaremos a segunda técnica, ou seja, criaremos uma interface utilizando o software construtor de interfaces GLADE para gerar o arquivo XML que será utilizado para reconstruir a interface com a biblioteca libglade quando o aplicativo estiver "rodando".
Como qualquer criador gráfico de interfaces gráficas, o GLADE é operado basicamente de maneira intuitiva. Alguns minutos de experimentação são suficientes para aprender a operá-lo e começar a conhecer os componentes gráficos disponíveis para criar interfaces.
O GLADE tem a seguinte aparência:
No lado esquerdo está a barra de componentes, de onde são selecionados os componentes para inclusão na interface, ao centro há uma janela sendo criada, enquanto que no lado diretório está o editor de propriedades, onde são editadas as propriedades dos componentes.
Para nosso exemplo, utilizando o GLADE criamos uma janela principal e dois formulários, um para inserção de títulos:
E um para pesquisa:
Alguns componentes são propositalmente omitidos, pois serão criados programaticamente e, na fase em que estamos, apenas reservamos espaço para eles.
Tendo "desenhado" a interface, vamos programar seu comportamento.