# GTK+/O widget botão

Capítulo 7: O Widget Botão

## Botões Normais

Nós vimos quase tudo que há para ver sobre os widgets botões. É bem simples. Há, entretanto, mais do que uma maneira de criar botões. Você pode usar gtk_button_new_with_label ou gtk_button_new_with_mnemonic para criar um botão com rótulo, usamos gtk_button_new_from_stock para criar um botão com imagem e texto a partir de um item salvo ou gtk_button_new para criarmos um botão vazio. É interessante enpacotarmos um rótulo ou um pixmap a este novo botão. Para fazermos isto, criamos uma nova caixa, e então empacotamos nossos objetos dentro da caixa usando o usual gtk_box_pack_start, e então usamos gtk_container_add para empacotar a caixa dentro do botão.
Aqui está um exemplo do uso do gtk_button_new para criarmos um botão com uma imagem e um rótulo. Montamos o código para criamos uma caixa para que você possa usá-lo em seus programas esforço. Há mais exemplos do uso de imagens mais a frente neste tutorial.
A Função xpm_label_box poderia ser usada para empacotar imagens e rótulos em qualquer widget que possa ser um container.
O widget botão possui os signais a seguir:
* pressed - emitido quando um ponteiro de botão é pressionado dentro de um widget Botão.
* released - emitido quando um ponteiro de botão é solto dentro de um widget Botão.
* clicked - emitido quando um ponteiro de botão é pressionado e então solto dentro de um widget Botão.
* enter - emitido quando um ponteiro entra no widget Botão.
* leave - emitido quando um ponteiro deixa o widget Botão.

## Botões de Chaveamento (Toggle Buttons)

Botões de Chaveamento (Toggle Buttons) são derivados de botões normais e são muito similares, exceto por eles estarem sempre em um de dois estados, alternados por um clique. Eles podem estar abaixados e, quando você clica novamente, voltam ao estado de emergido normal. Clicando novamente ele, voltará ao estado de abaixado.
Toggle Buttons são a base para os Botões de Selação (Check Buttons) e para os Radio Buttons, como tal, muitas das chamadas usadas para os Toggle Buttons são herdadas pelos Radio Buttons e Check Buttons. Aponteramos tais características, quando chegarmos a elas.
Criando um novo Toggle Button: ,
Como você pode imaginar, essas funções são idênticas as funções de um botão normal. A primeira cria um botão vazio qualquer, e as duas ultimas criam um botão com um rótulo associado a eles. A variação _mnemonic adicionalmente analisa o rótulo dos caracteres mnemônicos prefixados com '_'.
Para obter um estado de um Toggle Widget, incluindo Radio Buttons e Check Buttons, nós usamos o contrutor como mostrado em nosso exemplo abaixo. Isso testa o estado de nosso Toggle Button, pelo acesso do campo active da estrutura do Toggle Widget, depois primeio usa a macro GTK_TOGGLE_BUTTON para o cast do ponteiro do widget para um ponteiro específico de um Toggle Button. O sinal de interesse para nós emitido pelo toggle button (o toggle button, check button, e o radio button widgets) é o sinal "toggled". Para checar o estado desse botão, nós configuramos um sinal handler para capturar o sinal "toggled" e acessar a estrutura que determina esse estado. A função de chamada (callback) irá parecer algo semelhante a isso:
Para forçar o estado de um toggle button, e seus filhos, os radios e os botões de checagem, use esta função:
A Chamada acima pode ser usada para configurar o estado do toggle button, e seus filhos radio buttons e botões de checagem. Passando como primeiro argumento do botão criado, e TRUE ou FALSE, como segundo argumento para especificar se deve estar abaixado (acionado) ou levantado (liberado). O Padrão é levantado, ou FALSE.
Note que quando você usa a função gtk_toggle_button_set_active e o estado é efetivamente, isso causa um sinal "clicked" e "toggled" para ser emitido atráves do botão.
Isso retorna o estado atual do toggle button como um valor booleano TRUE ou FALSE.

## Botões de Checagem (Check Buttons)

Botões de Checagem (Check Buttons) herdam muitas propriedades e funções dos Toggles Buttons acima, mas se parecem um pouco diferente. Em vez de serem botões com textos, eles são pequenos quadrados com textos ao lado. Eles são geralmente usados para marcar e desmarcar opções em uma aplicação.
A Função de criação são similares aos botões normais.
A Função gtk_check_button_new_with_label cria um Check Button com um texto ao seu lado.
Checar o estado de um Check Button é semelhante a checagem do Toggle Button.

## Radio Buttons

Radio Buttons são similares aos check buttons exceto pelo fato que eles são agrupados logo somente um deles pode ser selecionado naquele instante. Isso é interessante para a sua aplicação quando você precisa selecionar uma opção entre várias outras.
Criar um novo Radio Button é possível com uma destas chamadas:
Você notará o argumento extra para essas chamadas. Eles requerem um grupo para desempenhar sua principal propriedade. Na primeira chamada a gtk_radio_button_new ou gtk_radio_button_new_with_label devemos passar NULL como o primeiro argumento. E então criar um grupo usando:
Um detalhe importante a ser lembrado é que gtk_radio_button_get_group deve ser chamado para cada novo botão adicionado ao grupo, com o botão anterior passado como argumento. O resultado é então passado a nova chamada gtk_radio_button_new or gtk_radio_button_new_with_label. Isso permite uma sequência de botões a serem estabelecidos.
Você pode encurta isto levemente com o uso da sintaxe a seguir, na qual é removida a necessidade por uma variável exclusiva aos botões.
A variante da função de criação _from_widget permite encurtar o código mais ainda, omitindo a chamada a função gtk_radio_button_get_group. Esse formato é usado no exemplo da criação do terceiro botão:
É também uma boa ideia configurarmos qual botão será setado inicialmente com:
Isso é descrito na seção dos Toggled Buttons, e funciona exatamente da mesma forma. Uma vez que os Radios Buttons estão agrupados, somente um deles pode ser ativado naquele instante. Se um usuário clicar em um botão em dado instante e posteriormente clicar em outro, o primeiro botão irá emitir um sinal de "toggled" (para reportar a desativação) e depois o segundo botão também irá emitir um sinal de "toggled" (avisando que está ativo).
O próximo exemplo cria um grupo de Radio Buttons com três botões.

## Notas e Referências

Capítulo traduzido do Original: The Button Widget