O código desta página será iniciado a partir do arquivo "calculadora2.c" (sim, ignoraremos o arquivo de teste "calculadora3.c"). Então, baixe o arquivo
calculadora2.c e renomeie para "calculadora.c".
Compile com o seguinte comando:
gcc calculadora.c -o calculadora.out `pkg-config --cflags --libs gtk+-2.0`
Execute com:
./calculadora.out
Conectando os botões às funções
Antes de começarmos a desenvolver nossas funções, devemos conectar todos os botões a elas. A fim de testar se todos os botões estão conectados corretamente, criaremos as funções apenas com um "printf" interno para teste.
Criando as funções com Prints Internos
1. "inseri_numero_na_entrada": a primeira função que iremos criar é a função "inseri_numero_na_entrada", ela receberá um ponteiro "void" que pertence a uma estrutura GTK, então precisaremos passar toda a estrutura como argumento.
Declare a função dessa forma:
void inseri_numero_na_entrada (GtkButton *botao, gpointer numero){}
E, internamente à função, adicione um "printf" no valor do ponteiro que ela receberá como argumento dessa forma:
printf("%c
",*(char *)numero);
Ficando assim:
2. "registra_operador": esta função também receberá um ponteiro como argumento, então faremos o mesmo processo ao declarar ela com a seguinte função:
void registra_operador(GtkButton *botao, gpointer operador){}
E, obviamente, também adicionaremos um "printf" interno a ela do valor do ponteiro operador.
printf("%c
",*(char *)operador);
Ficando assim:
3. "imprimi_resultado_na_entrada": esta função não tem segredo, como ela não receberá nenhum argumento, basta declarar ela e adicionar um "printf" normal interno, desta forma :
void imprimi_resultado_na_entrada(void){}
printf("igual
");
4. "limpa": a função limpa a mesma coisa, basta declara-la e adicionar um "printf" interno:
void limpa(void){}
printf("limpa
");
Criando os Caracteres de Argumento
Como duas funções do nosso programa receberão "chars" como argumento, devemos declarar esses vetores dentro da função "main", então logo após o empacotamento via container, declare-os assim:
char numeros[] = "0123456789,", operadores[] = "+-*/";
Conectando o Sinal de Destruição
Para que nosso programa possa se fechar sozinho, devemos conectar o sinal de destruição (o xizinho da interface) à função "gtk_main_quit", que é responsável por fechar o programa, ficando assim:
g_signal_connect(G_OBJECT(janela), "destroy",G_CALLBACK(gtk_main_quit), NULL);
Conectando os Botões Numéricos
Agora faremos a conexão dos botões numéricos à função "inseri_numero_na_entrada", passando como argumento o endereço do vetor números (sim, será o ENDEREÇO, então não se esqueça de adicionar o "&" na frente). Ficando assim:
g_signal_connect (botao_de_exemplo, "clicked", G_CALLBACK (inseri_numero_na_entrada), &numeros[x]);
Todas as conexões ficam desse jeito:
Conectando os Botões Operadores
Assim como nos números, também passaremos um "char" como argumento, então a função ficará assim :
g_signal_connect (botao_de_exemplo, "clicked", G_CALLBACK (registra_operador), &operadores[x]);
A conexão dos 4 botões operadores, fica deste jeito:
Conectando o Botão Igual
O botão igual não passará nenhum argumento à função "imprimi_resultado_na_entrada", então passamos "NULL" como argumento, ficando assim :
g_signal_connect (botao_igual, "clicked", G_CALLBACK (imprimi_resultado_na_entrada), NULL);
Conectando o Botão Limpa
Assim, como o igual, ele também não passará argumentos, ficando assim :
g_signal_connect (botao_limpa, "clicked", G_CALLBACK (limpa), NULL);
Testando Todos os Botões
Compile e execute o código e veja se todas as funções estão conectadas , caso esteja tudo certo, toda vez que clicar em algum botão seu número aparecerá no console.
O código desta aula esta anexado como
calculadora4.c. Baixe e renomeie para "calculadora.c".
Compile com o seguinte comando:
gcc calculadora.c -o calculadora.out `pkg-config --cflags --libs gtk+-2.0`
Execute com:
./calculadora.out