Este componente serve para dizer ao usuário que o programa está em atividade e não travado.
Muito útil quando o aplicativo precisa fazer várias tarefas e não fique parado aparentando não estar fazendo nada, como por exemplo, copiar ou renomear vários arquivos. Assim o usuário sabe que a ação está em andamento e quanto falta para terminar.
Veja o resultado (no Ubuntu 14.04, no windows será algo parecido):
Aqui vai o código fonte, todo comentado para estudos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
// Barra de progresso em Igbr //por Adalberto //permissão: Pode copiar, distribuir, modificar, fique a vontade para usar em seus programas sem custo algum inclua'igbr' //importando funcoes de interace gráfica inclua'classe'//importando funções para orientação a objetos //criando uma nova classe chamada Progresso_dados: Progresso_dados = Classe { janela = 0, barra_progresso = 0, temporizador = 0, modo_de_atividade = 0 } funcao progresso_tempo( Dados ) se Dados.modo_de_atividade entao ig.barra_progresso_pulse( Dados.barra_progresso); senao /**pega o valor atual da barra (fracao) e soma para aumentar o enchimento**// novo_val = ig.barra_progresso_obt_fracao(Dados.barra_progresso) + 0.01; se novo_val > 1.0 entao //1.0 é 100% entao volta para 0.0 por cento novo_val = 0.0; fim //define o novo valor ig.barra_progresso_def_fracao( Dados.barra_progresso , novo_val); fim //fim senao fim //funcoes call backs para modificar a aparencia do barra de progresso. //mostra o texto na barra de progresso: funcao bt_mostrar_texto_na_barra( Compo , Dados ) text = ig.barra_progresso_obt_texto( Dados.barra_progresso ); se text == 'Um texto aqui' entao ig.barra_progresso_def_texto( Dados.barra_progresso , ''); //para nao mostrar texto basta inserir aspas vazias senao ig.barra_progresso_def_texto( Dados.barra_progresso , 'Um texto aqui'); fim fim //call back para mudar o modo de atividade (se é encher ou pulsar) funcao bt_def_modo_de_atividade( compo , Dados ) Dados.modo_de_atividade = nao Dados.modo_de_atividade //inverte, se for verdadeiro fica falso e vice e versa se Dados.modo_de_atividade entao ig.barra_progresso_pulse( Dados.barra_progresso); //caso seja verdadeiro o modo é pulsar (ir para lá e para cá) senao ig.barra_progresso_def_fracao( Dados.barra_progresso , 0.0 ) //caso falso o modo é o enchimento fim fim //muda a orientação (posição da direita para esquerda ou vice versa) funcao bt_def_orientacao(compo, Dados ) _Orientacao = ig.barra_progresso_obt_orientacao(Dados.barra_progresso); se _Orientacao == ig.barra_progresso_esq_a_dir entao ig.barra_progresso_def_orientacao(Dados.barra_progresso , ig.barra_progresso_dir_a_esq ); senaose _Orientacao == ig.barra_progresso_dir_a_esq entao ig.barra_progresso_def_orientacao( Dados.barra_progresso, ig.barra_progresso_esq_a_dir ); fim fim // limpando a memória alocada e removendo o temporizador funcao Barra_progresso_destrua(Dados) imprima'Fechando o programa em 1 segundo'; ig.aguarde(1000 ); //pausa o programa por um segundo ig.temporizador_pare( Dados.temporizador); //para o temporizador //desnecessários esses comandos. Visto que Prisma tem um limpador de lixo automático Dados.temporizador = nulo; //desreferencia a variável. Dados.janela = nulo; //desreferencia outra variável ig.saia(); //fecha o programa fim pDados = Progresso_dados:novo(); //cria um objeto da classe Progresso_dados //======================== CRIANDO A JANELA E OS COMPONENTES ================== // pDados.janela = ig.janela(); //criando uma janela e armazenando seu id num campo do objeto pDados. ig.janela_def_redimensionavel( pDados.janela , falso); //faz com que a janela nao mude de tamanho ig.janela_def_posicao( pDados.janela , ig.janela_pos_centro); //coloca a janela no centro da tela ig.conecte( pDados.janela , ig.destruido , 'Barra_progresso_destrua(pDados)') ; //lembrando que esse é o modo antigo de conectar, //a funçao call back é chamada com o comando execute string interno de Prisma ig.janela_def_titulo( pDados.janela , 'IG Barra de progresso'); ig.conteiner_def_borda_largura( pDados.janela , 10 ); //o espaco entre o limite da janela e os componentes internos caixavertical = ig.caixa( V , falso , 5);//conteiner vertical ig.conteiner_def_borda_largura( caixavertical , 10 ); ig.ad( pDados.janela, caixavertical);//adiciona a caixa na janela ig.componente_mostre(caixavertical); //torna visível //cria um conteiner de alinhamento alin = ig.alinhamento( 0.5, 0.5, 0 , 0); ig.caixa_ad( caixavertical , alin , falso , falso , 5); ig.componente_mostre(alin); //cria a barra de progresso pDados.barra_progresso = ig.barra_progresso(); pDados.modo_de_atividade = falso; //falso = enchimento; verdadeiro = pulsante ig.conteiner_ad( alin , pDados.barra_progresso); //colocando a barra no alinhamento ig.componente_mostre(pDados.barra_progresso); //criando o temporizador para atualizar a barra de progresso pDados.temporizador = ig.temporizador(1, 100 , pDados.janela , 'progresso_tempo(pDados)'); ig.temporizador_inicie(pDados.temporizador, pDados.janela); /**o primeiro é o numero identificador, escolha entre 1 e 10 apenas --o segundo parametro é o tempo de repeticao em milissegundos --Terceiro a janela principal --e quarto a função com o parametro interno, tudo entre aspas. * **// //criando um separador separador = ig.separadorhorizontal(); ig.caixa_ad( caixavertical , separador , falso , falso , 0 ); ig.componente_mostre(separador); // criando uma caixa do tipo tabela com ( linhas, colunas , modo de espacamento ); Caixa_tabela = ig.tabela(2,3,falso); ig.caixa_ad( caixavertical , Caixa_tabela , falso , verdadeiro, 0 ); ig.componente_mostre(Caixa_tabela); // criando o botao de checagem para mostrar o texto bt_checagem_mostra_texto = ig.botao_checagem('Mostrar Texto'); //adicionando na tabela (modo mais difícil, existe um mais fácil: tabela_ad ig.tabela_preencha( Caixa_tabela, bt_checagem_mostra_texto, 0,1, 0, 1, ig.bit_ou( ig.expandir , ig.encher) , ig.bit_ou( ig.expandir , ig.encher) , 5, 5 ); //usando o metodo conecte_funcao : // parametros: (componente_conectado , evento , funcao , dados_Passados_para_funcao ); ig.conecte_funcao( bt_checagem_mostra_texto,ig.clique , bt_mostrar_texto_na_barra , pDados ); ig.componente_mostre( bt_checagem_mostra_texto ); //botao para o modo de atividade bt_checagem_mostra_texto = ig.botao_checagem('Modo de Atividade'); ig.tabela_preencha( Caixa_tabela, bt_checagem_mostra_texto, 0,1, 1, 2, ig.bit_ou( ig.expandir , ig.encher) , ig.bit_ou( ig.expandir , ig.encher) , 5, 5 ); ig.conecte_funcao( bt_checagem_mostra_texto,ig.clique , bt_def_modo_de_atividade, pDados ); ig.componente_mostre( bt_checagem_mostra_texto ); // botao para mudar a orientação: bt_checagem_orientacao = ig.botao_checagem('Direita para esquerda'); ig.tabela_preencha( Caixa_tabela, bt_checagem_orientacao, 0,1, 2, 3, ig.bit_ou( ig.expandir , ig.encher) , ig.bit_ou( ig.expandir , ig.encher) , 5, 5 ); ig.conecte_funcao( bt_checagem_orientacao, ig.clique , bt_def_orientacao, pDados ); ig.componente_mostre( bt_checagem_mostra_texto ); // botao para fechar o programa: botao = ig.botao('Fechar'); ig.conecte(botao , ig.clique , 'ig.saia()' ); ig.caixa_ad( caixavertical , botao , falso , falso , 0 ); //faz o foco padrao no botao : ig.componente_def_pode_padrao( botao , verdadeiro); ig.componente_def_padrao(botao); ig.componente_mostre(botao); ig.componente_mostre(pDados.janela); ig.fimprograma(); //fim do programa, inicia o loop de eventos do gtk. |
Bom pessoal, qualquer dúvida pode postar sua pergunta aqui ou no fórum oficial.