{"id":650,"date":"2015-01-26T03:42:25","date_gmt":"2015-01-26T03:42:25","guid":{"rendered":"http:\/\/linguagemprisma.net\/?p=650"},"modified":"2016-02-13T08:55:18","modified_gmt":"2016-02-13T12:55:18","slug":"combo-box-listando-arquivos-criando-um-configurador-de-tema-do-gtk","status":"publish","type":"post","link":"https:\/\/linguagemprisma.br4.biz\/blog\/igprisma\/combo-box-listando-arquivos-criando-um-configurador-de-tema-do-gtk\/","title":{"rendered":"Combo box , listando arquivos, criando um configurador de tema do gtk"},"content":{"rendered":"<p>Vamos criar aqui um simples editor de configura\u00e7\u00e3o dos temas do gtk. Sim, o gtk possui diversos temas, copie o c\u00f3digo abaixo<\/p>\n<p>e execute, escolha um novo tema e abra o prismacod para ver o resultado.<\/p>\n<p>&nbsp;<\/p>\n<p>Para mudar o tema precisamos simplesmente escrever em um arquivo chamado gtkrc dentro da pasta etcgtk-2.0<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1343\" src=\"https:\/\/linguagemprisma.br4.biz\/blog\/wp-content\/uploads\/2015\/09\/caixa_combo_xp.png\" alt=\"caixa_combo_xp\" width=\"162\" height=\"82\" \/><\/p>\n<p>Segue o c\u00f3digo, todo comentado:<\/p>\n<pre class=\"lang:prisma decode:true  \">\/\/Alterando o tema do gtk\r\n\r\n\r\ninclua'igbr'  \/\/importando as fun\u00e7\u00f5es gr\u00e1ficas\r\n\r\ndir = inclua'igdir';\r\n\r\n\r\ntemadir = string.troque ( prismadir , 'bin' , 'share\\\\themes' );\r\n\r\nimprima(temadir);\r\n\r\ntema = dir.liste_somente_pastas( temadir ); \/\/listando os diretorios cujos nomes \u00e9 o comando de mudar o tema\r\n\r\n \/\/o arquivo que \u00e9 reponsavel por mudar o tema \u00e9 C:PrismaBRetcgtk-2.0gtkrc\r\n\r\n \/\/sem extens\u00e3o mesmo s\u00f3 gtkrc\r\n\r\n \/\/alterando o conte\u00fado dele podemos mudar o tema do gtk\r\n\r\n\r\nconf_tema_dir = string.troque ( prismadir , \"bin\" , 'etc\\\\gtk-2.0\\\\' )  ; \r\n\r\n\/\/ainda nao entendi por que depois da bin tem tr\u1ebds barras, mas vou consertar futuramente.\r\n\r\nconf_tema_dir = conf_tema_dir .. 'gtkrc';\r\n\r\nimprima( conf_tema_dir );\r\n\r\n arq = es.abra(conf_tema_dir , 'leitura' );\r\n\r\n tema_definido = arq:leia('*t' ); \/\/l\u00ea tudo\r\n\r\n arq:feche() ; \/\/fechando o arquivo. \r\n\r\n \/\/note que para ler e fechar precisamos usar os dois pontos, ok\r\n\r\n \/\/o conte\u00fado ser\u00e1 algo como:  gtk-theme-name = \"MS-Windows\"\r\n\r\n \/\/temos que processar para extrair somente o que esta entre aspas,\r\n\r\n \/\/usaremos o string.sub percorrendo todos os caracteres\r\n\r\n\r\naspa_inicial = 0;\r\naspa_final = 0;\r\n \r\n para i = 1 , #tema_definido inicio \r\n\r\n \r\n\/\/a funcao string.sub extrai uma sub string de outra maior\r\n\r\n\/\/sua sintaxe \u00e9 :  string.sub ( string_maior , pos_x , pos_y );\r\n\/\/onde pos_x e pos_y \u00e9 o n\u00famero que indica o inicio e o fim da substring dentro\r\n\/\/da maior:\r\n\r\n      local c = string.sub ( tema_definido , i , i );\r\n\r\n      se c == '\"'  entao    \/\/quando chega na aspa ele testa outra condi\u00e7\u00e3o: \r\n                           se aspa_inicial == 0 entao \/\/se aspa_inicial ainda \u00e9 zero entao \u00e9 a primeira aspa.\r\n                                                        aspa_inicial = i  \r\n                           senao  \/\/senao for zero, \u00e9 porque j\u00e1 tem outro valor entao \u00e9 a vez do aspa_final\r\n                                                        aspa_final = i\r\n                           fim\r\n                        \r\n     fim\r\n  \r\n     \r\n fim\r\n\r\n \/\/ja sabemos a posicao das duas aspas, basta usar outra vez string.sub\r\n \/\/mas com a posical que est\u00e1 entre as aspas\r\n \/\/para isso somo 1 na primeira aspa e diminuo 1 da ultima aspa\r\n \/\/e a\u00ed tenho a posi\u00e7\u00e3o entre elas, veja:\r\n\r\nTexto_definido = string.sub( tema_definido , aspa_inicial + 1 , aspa_final - 1 ) ;\r\n\r\n\r\n\r\n\r\n\/\/criando a janela:\r\n\r\njanela = ig.janela( 'Alterar Tema Gtk'  );\r\nig.conecte( janela , 'destroy' , 'ig.saia( )' ); \/\/ig.destruido = 'destroy', use qual preferir\r\n\r\ncaixav = ig.caixavertical (falso , 2 );  \/\/criando uma caixa vertical para organizar verticalmente os componentes\r\nig.ad( janela , caixav); \/\/colocando a caixa vertical na janela\r\n\r\n\/\/criando o combo combo box\r\nTexto_padrao = 'padrao';\r\n\r\ncombo = ig.caixa_combo(Texto_definido );\r\n\r\nig.caixa_combo_anexe_texto( combo , Texto_padrao );\r\n\r\npara i = 1 , #tema inicio\r\n\r\n    se tema[i] &lt;&gt; '.' e tema[i] &lt;&gt; '..' entao \/\/deixando de fora o ponto e os dois pontos\r\n\r\n         ig.caixa_combo_anexe_texto ( combo , tema[i]  );\r\n    fim\r\n\r\nfim\r\n\r\nig.caixa_ad( caixav , combo , falso , falso , 2 ); \/\/colocando combo na caixa vertical\r\n\r\n\r\n\r\nig.caixa_ad ( caixav , ig.rotulo 'Escolha um tema do combo e j\u00e1 estar\u00e1 definido' ,\r\nfalso , falso , 2 );\r\n\r\nfuncao mude_tema ( combo )\r\n\r\nlocal selecionado =  ig.caixa_combo_obt_texto_ativo ( combo ) ; \/\/obtendo o texto atual do combo\r\n\r\nse selecionado == 'padrao' entao selecionado = 'MS-Windows'  fim\r\n \/\/garantindo que o tema windows seja o padrao\r\n\r\n\/\/bom, a linha deve ser assim : gtk-theme-name = \"nometema\" \r\n\/\/entao vamos montar essa linha:\r\n\r\nlocal grava_selecionado = \"gtk-theme-name = \" .. \"\"\" .. selecionado .. \"\"\"\r\n\r\n\/\/vamos gravar no arquivo agora:\r\nlocal arq = es.abra( conf_tema_dir , 'escrita' ) ; \/\/abrindo arquivo em modo escita\r\n               arq:escreva ( grava_selecionado );\r\n       arq:feche();\r\n    \r\n\r\nimprima(  'mudado:  ' .. selecionado   );\r\nfim\r\nig.conecte( combo , ig.modificado , 'mude_tema(%s)' ); \/\/conectando a funcao ao combo\r\n\r\n\/\/com o evento ig.modificado (\"changed\");\r\n\r\n\r\n\r\n\r\nig.componente_mostre_todos( janela );\r\n\r\nig.fimprograma( );<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Para voltar ao tema padr\u00e3o selecione MS-Windows ou padrao na primeira linha.<\/p>\n<p>&nbsp;<\/p>\n<p>Falou pessoal,qualquer d\u00favida deixe um coment\u00e1rio ou abra um t\u00f3pico no f\u00f3rum Prisma.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos criar aqui um simples editor de configura\u00e7\u00e3o dos temas do gtk. Sim, o gtk possui diversos temas, copie o c\u00f3digo abaixo e execute, escolha um novo tema e abra o prismacod para ver o resultado. &nbsp; Para mudar o tema precisamos simplesmente escrever em um arquivo chamado gtkrc dentro da pasta etcgtk-2.0 &nbsp; Segue&#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],"tags":[10,11,12],"class_list":["post-650","post","type-post","status-publish","format-standard","hentry","category-igprisma","tag-box","tag-combo","tag-combo-box"],"_links":{"self":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/650","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=650"}],"version-history":[{"count":8,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/650\/revisions"}],"predecessor-version":[{"id":2473,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/posts\/650\/revisions\/2473"}],"wp:attachment":[{"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/media?parent=650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/categories?post=650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linguagemprisma.br4.biz\/blog\/wp-json\/wp\/v2\/tags?post=650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}