{"id":1250,"date":"2015-08-21T22:47:13","date_gmt":"2015-08-22T02:47:13","guid":{"rendered":"http:\/\/linguagemprisma.net\/blog\/?p=1250"},"modified":"2015-08-21T22:47:13","modified_gmt":"2015-08-22T02:47:13","slug":"barra-de-progresso","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/igprisma\/barra-de-progresso\/","title":{"rendered":"Barra de Progresso"},"content":{"rendered":"<p>Este componente serve para dizer ao usu\u00e1rio que o programa est\u00e1 em atividade e n\u00e3o travado.<\/p>\n<p>Muito \u00fatil quando o aplicativo precisa fazer v\u00e1rias tarefas e n\u00e3o fique parado aparentando n\u00e3o estar fazendo nada, como por exemplo, copiar ou renomear v\u00e1rios arquivos. Assim o usu\u00e1rio sabe que a a\u00e7\u00e3o est\u00e1 em andamento e quanto falta para terminar.<\/p>\n<p>Veja o resultado (no Ubuntu 14.04, no windows ser\u00e1 algo parecido):<\/p>\n<p><a href=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/08\/barra_progresso.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1251\" src=\"http:\/\/linguagemprisma.net\/blog\/wp-content\/uploads\/2015\/08\/barra_progresso-300x265.png\" alt=\"barra_progresso\" width=\"300\" height=\"265\" srcset=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/08\/barra_progresso-300x265.png 300w, https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/08\/barra_progresso.png 465w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Aqui vai o c\u00f3digo fonte, todo comentado para estudos:<\/p>\n<pre class=\"lang:prisma decode:true\" title=\"Barra de progresso em igbr\">\/\/ Barra de progresso em Igbr\r\n\/\/por Adalberto\r\n\r\n\/\/permiss\u00e3o: Pode copiar, distribuir, modificar, fique a vontade para usar em seus programas sem custo algum\r\n\r\n\r\ninclua'igbr' \/\/importando funcoes de interace gr\u00e1fica\r\ninclua'classe'\/\/importando fun\u00e7\u00f5es para orienta\u00e7\u00e3o a objetos\r\n\r\n\/\/criando uma nova classe chamada Progresso_dados:\r\nProgresso_dados = Classe {\r\n                janela = 0,\r\n                barra_progresso = 0,\r\n                temporizador = 0,\r\n                modo_de_atividade = 0\r\n                }\r\n\r\n funcao progresso_tempo( Dados )\r\n  \r\n   se Dados.modo_de_atividade entao\r\n       ig.barra_progresso_pulse( Dados.barra_progresso);\r\n   senao \r\n      \/**pega o valor atual da barra (fracao) e soma para aumentar o enchimento**\/\/\r\n       novo_val = ig.barra_progresso_obt_fracao(Dados.barra_progresso) + 0.01;\r\n       se novo_val &gt; 1.0 entao  \/\/1.0 \u00e9 100% entao volta para 0.0 por cento\r\n         novo_val = 0.0;\r\n       fim\r\n       \/\/define o novo valor\r\n          ig.barra_progresso_def_fracao( Dados.barra_progresso , novo_val);\r\n   fim \/\/fim senao\r\n  \r\n fim\r\n \r\n \r\n \r\n \r\n \/\/funcoes call backs para modificar a aparencia do barra de progresso.\r\n \r\n \/\/mostra o texto na barra de progresso: \r\nfuncao bt_mostrar_texto_na_barra( Compo , Dados )\r\n \r\n    text = ig.barra_progresso_obt_texto( Dados.barra_progresso );\r\n    se text == 'Um texto aqui' entao\r\n       ig.barra_progresso_def_texto( Dados.barra_progresso , ''); \r\n       \/\/para nao mostrar texto basta inserir aspas vazias\r\n    senao\r\n       ig.barra_progresso_def_texto( Dados.barra_progresso , 'Um texto aqui');\r\n     fim\r\n fim\r\n \r\n \r\n \/\/call back para mudar o modo de atividade (se \u00e9 encher ou pulsar)\r\n funcao bt_def_modo_de_atividade( compo , Dados )\r\n \r\n   Dados.modo_de_atividade = nao Dados.modo_de_atividade  \/\/inverte, se for verdadeiro fica falso e vice e versa\r\n   se Dados.modo_de_atividade entao\r\n      ig.barra_progresso_pulse( Dados.barra_progresso); \r\n      \/\/caso seja verdadeiro o modo \u00e9 pulsar (ir para l\u00e1 e para c\u00e1)\r\n   senao\r\n      ig.barra_progresso_def_fracao( Dados.barra_progresso , 0.0 ) \r\n    \/\/caso falso o modo \u00e9 o enchimento\r\n   fim\r\n \r\n fim\r\n \r\n \r\n\/\/muda a orienta\u00e7\u00e3o (posi\u00e7\u00e3o da direita para esquerda ou vice versa)\r\nfuncao bt_def_orientacao(compo, Dados )\r\n\r\n  _Orientacao = ig.barra_progresso_obt_orientacao(Dados.barra_progresso);\r\n  \r\n  se _Orientacao == ig.barra_progresso_esq_a_dir entao\r\n    ig.barra_progresso_def_orientacao(Dados.barra_progresso , ig.barra_progresso_dir_a_esq );\r\n    \r\n  senaose _Orientacao == ig.barra_progresso_dir_a_esq entao\r\n    ig.barra_progresso_def_orientacao( Dados.barra_progresso, \r\n                                     ig.barra_progresso_esq_a_dir\r\n                                    );\r\n  fim\r\nfim\r\n\r\n\r\n\/\/ limpando a mem\u00f3ria alocada e removendo o temporizador\r\nfuncao Barra_progresso_destrua(Dados)\r\n  imprima'Fechando o programa em 1 segundo';\r\n  ig.aguarde(1000 ); \/\/pausa o programa por um segundo\r\n  \r\n  ig.temporizador_pare( Dados.temporizador); \/\/para o temporizador\r\n  \r\n  \/\/desnecess\u00e1rios esses comandos. Visto que Prisma tem um limpador de lixo autom\u00e1tico\r\n  Dados.temporizador = nulo; \/\/desreferencia a vari\u00e1vel.\r\n  Dados.janela = nulo; \/\/desreferencia outra vari\u00e1vel\r\n  ig.saia(); \/\/fecha o programa\r\nfim\r\n\r\n                \r\npDados = Progresso_dados:novo(); \/\/cria um objeto da classe Progresso_dados\r\n\r\n\r\n\/\/======================== CRIANDO A JANELA E OS COMPONENTES ================== \/\/\r\n\r\npDados.janela = ig.janela(); \/\/criando uma janela e armazenando seu id num campo do objeto pDados.\r\nig.janela_def_redimensionavel( pDados.janela , falso); \/\/faz com que a janela nao mude de tamanho\r\nig.janela_def_posicao( pDados.janela , ig.janela_pos_centro); \/\/coloca a janela no centro da tela\r\n\r\n\r\nig.conecte( pDados.janela , ig.destruido , 'Barra_progresso_destrua(pDados)') ;\r\n\/\/lembrando que esse \u00e9 o modo antigo de conectar, \r\n\/\/a fun\u00e7ao call back \u00e9 chamada com o comando execute string interno de Prisma\r\n\r\nig.janela_def_titulo( pDados.janela , 'IG Barra de progresso');\r\nig.conteiner_def_borda_largura( pDados.janela , 10 ); \r\n\/\/o espaco entre o limite da janela e os componentes internos\r\n\r\ncaixavertical = ig.caixa( V , falso , 5);\/\/conteiner vertical\r\nig.conteiner_def_borda_largura( caixavertical , 10 );\r\nig.ad( pDados.janela, caixavertical);\/\/adiciona a caixa na janela\r\nig.componente_mostre(caixavertical); \/\/torna vis\u00edvel\r\n\r\n\/\/cria um conteiner de alinhamento\r\nalin = ig.alinhamento( 0.5, 0.5, 0 , 0);\r\nig.caixa_ad( caixavertical , alin , falso , falso , 5);\r\nig.componente_mostre(alin);\r\n\r\n\r\n\/\/cria a barra de progresso\r\npDados.barra_progresso = ig.barra_progresso();\r\npDados.modo_de_atividade = falso; \/\/falso = enchimento; verdadeiro = pulsante\r\n\r\nig.conteiner_ad( alin , pDados.barra_progresso); \/\/colocando a barra no alinhamento\r\nig.componente_mostre(pDados.barra_progresso);\r\n\r\n\/\/criando o temporizador para atualizar a barra de progresso\r\npDados.temporizador = ig.temporizador(1, 100 , pDados.janela , 'progresso_tempo(pDados)');\r\nig.temporizador_inicie(pDados.temporizador,  pDados.janela);\r\n\/**o primeiro \u00e9 o numero identificador, escolha entre 1 e 10 apenas\r\n--o segundo parametro \u00e9 o tempo de repeticao em milissegundos\r\n--Terceiro a janela principal\r\n--e quarto a fun\u00e7\u00e3o com o parametro interno, tudo entre aspas.\r\n* \r\n**\/\/\r\n\r\n\r\n\/\/criando um separador\r\nseparador = ig.separadorhorizontal();\r\nig.caixa_ad( caixavertical , separador , falso , falso , 0 );\r\nig.componente_mostre(separador);\r\n\r\n\/\/ criando uma caixa do tipo tabela com ( linhas, colunas , modo de espacamento );\r\nCaixa_tabela = ig.tabela(2,3,falso);\r\nig.caixa_ad( caixavertical , Caixa_tabela , falso , verdadeiro, 0 );\r\nig.componente_mostre(Caixa_tabela);\r\n\r\n\r\n\r\n\/\/ criando o botao de checagem para mostrar o texto\r\n\r\nbt_checagem_mostra_texto = ig.botao_checagem('Mostrar Texto');\r\n\r\n\/\/adicionando na tabela (modo mais dif\u00edcil, existe um mais f\u00e1cil: tabela_ad \r\nig.tabela_preencha( Caixa_tabela, bt_checagem_mostra_texto, 0,1, 0, 1,\r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 5, 5\r\n                );\r\n                \r\n\r\n\/\/usando o metodo conecte_funcao :\r\n\/\/ parametros: (componente_conectado , evento , funcao , dados_Passados_para_funcao );\r\nig.conecte_funcao( bt_checagem_mostra_texto,ig.clique , bt_mostrar_texto_na_barra , pDados );\r\nig.componente_mostre( bt_checagem_mostra_texto );\r\n\r\n\/\/botao para o modo de atividade\r\nbt_checagem_mostra_texto = ig.botao_checagem('Modo de Atividade');\r\nig.tabela_preencha( Caixa_tabela, bt_checagem_mostra_texto, 0,1, 1, 2,\r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 5, 5\r\n                );\r\n\r\nig.conecte_funcao( bt_checagem_mostra_texto,ig.clique , bt_def_modo_de_atividade, pDados );\r\nig.componente_mostre( bt_checagem_mostra_texto );\r\n\r\n\/\/ botao para mudar a orienta\u00e7\u00e3o:\r\n\r\nbt_checagem_orientacao = ig.botao_checagem('Direita para esquerda');\r\nig.tabela_preencha( Caixa_tabela, bt_checagem_orientacao, 0,1, 2, 3,\r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 ig.bit_ou(   ig.expandir  ,   ig.encher) , \r\n                 5, 5\r\n                );\r\n\r\nig.conecte_funcao( bt_checagem_orientacao, ig.clique , bt_def_orientacao, pDados );\r\nig.componente_mostre( bt_checagem_mostra_texto );\r\n\r\n\/\/ botao para fechar o programa:\r\n\r\nbotao = ig.botao('Fechar');\r\nig.conecte(botao , ig.clique , 'ig.saia()' );\r\n\r\nig.caixa_ad( caixavertical , botao , falso , falso , 0 );\r\n\r\n\/\/faz o foco padrao no botao :\r\nig.componente_def_pode_padrao( botao , verdadeiro);\r\nig.componente_def_padrao(botao);\r\nig.componente_mostre(botao);\r\n\r\n\r\nig.componente_mostre(pDados.janela);\r\nig.fimprograma(); \/\/fim do programa, inicia o loop de eventos do gtk.\r\n\r\n\r\n<\/pre>\n<p>Bom pessoal, qualquer d\u00favida pode postar sua pergunta aqui ou no <a href=\"http:\/\/linguagemprisma.net\/prisma_forum\" target=\"_blank\">f\u00f3rum oficial.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este componente serve para dizer ao usu\u00e1rio que o programa est\u00e1 em atividade e n\u00e3o travado. Muito \u00fatil quando o aplicativo precisa fazer v\u00e1rias tarefas e n\u00e3o fique parado aparentando n\u00e3o estar fazendo nada, como por exemplo, copiar ou renomear v\u00e1rios arquivos. Assim o usu\u00e1rio sabe que a a\u00e7\u00e3o est\u00e1 em andamento e quanto falta&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5],"tags":[],"class_list":["post-1250","post","type-post","status-publish","format-standard","hentry","category-igprisma","category-interface_grafica"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/1250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/comments?post=1250"}],"version-history":[{"count":1,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/1250\/revisions"}],"predecessor-version":[{"id":1252,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/1250\/revisions\/1252"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=1250"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=1250"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=1250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}