Vala + GTK + 3 i Granite (guardar valors en dconf)

Programant en Vala i GTK +, tot ens haurem preguntat mai ¿com fer que una aplicació escrita en Vala i GTK + pugui guardar els estats dels paràmetres de la mida de la finestra i altres ?. Són d'aquests típics casos que fem servir gschemes per guardar aquests valors (aquesta aplicació tan coneguda dconf-editor) que gestiona gràficament aquests esquemes.

Ara els mostro com fer això en senzills passos i sense complicacions usant la classe Granite.Services.Settings de la llibreria Granite.

Que necessitem?

Primerament necessitem tenir instal·lat les llibreries de GTK +, Granite i Vala per poder compilar el nostre codi. Per a això en Ubuntu / ElementaryOS fem servir la comanda:

sudo apt-get install libgtk-3-dev libgranite-dev granite-demo valac

I també necessitarem qualsevol editor de text que suporti sintaxi Vala / GTK + i XML com Scratch Text Editor (default de ElementaryOS), gedit, Sublim Text + Plugins, etc.

el Codi

A continuació els arxius de l'Exemple. Per a millor comprensió deixo el codi en PASTE amb comentaris en ells:

main.vala
tutorial.vala
settings.vala
org.tutorial.gschema.xml

explicacions

L'arxiu de l'Schema, si o si ha de ser XML i dir-ORG.APLICACION.GSCHEMA.XML. És a dir, tant el ORG com GSCHEMA.XML han d'estar perquè dconf la reconegui com a esquema. A més aquests esquemes han d'anar copiats a la ruta:

/usr/share/glib-2.0/schemas/

i necessiten ser compilat perquè DCONF les prengui, per això executem la comanda:

sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

compilant

Per a compilar el nostre programa hem de llançar la següent comanda en un terminal:

valac --pkg gtk+-3.0 --pkg granite main.vala tutorial.vala settings.vala

I executar el binari amb la comanda:

./main

Conclusions

És un dels millors mètodes per guardar l'estat de la nostra APP en GSCHEMA usant GLib. Qualsevol tipus de pregunta estaré content de respondre-la.

Aquí els deixo una captura de la meva Ubuntu i l'Exemple:

snap-tutorial


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Raül P va dir

    Bon article, no vénen mal uns tutorials de GTK en C ++. Les coses han canviat moltíssim, el lloc oficial del GTK, recomana llibres de l'any 2002, jo comeses l'error de comprar-lo.

    El devhelp ajuda més que qualsevol llibre.

    1.    Raül P va dir

      Perdon vaig voler dir C, no C ++. Quan obro el codeblocks, sempre escullo «Un projecte en C ++», però programe en C.

  2.   amenaça va dir

    Bon tut, m'agradaria saber i es que no ve a el cas, però en veritat m'he donat prou cops de cap per a poder realitzar aquest plantejament, necessito personalitzar el background i el login screen amb una imatge institucional d'on treball en els equips dels usuaris, els mateixos posseeixen una distro veneçolana anomenada Canaima, basada en Debian 7 Wheezy, els usuaris s'autentiquen via LDAP i diversos usuaris poden treballar en el mateix PC, de manera que es pot donar el cas que hi hagi diverses sessions en les quals ha de posseir el wallpaper, els equips són personalitzats pel script per facilitar l'treballs als tècnics i després les polítiques són injectades pel server puppetmaster.

    He intentat amb gsettings però només funciona amb l'usuari que aquest iniciant sessió, a l'semblar guarda la informació en una bd local per usuari la qual no he aconseguit encara, estic buscant alguna configuració que apliqui per a tot el sistema i no per a un sol usuari.

    Cal esmentar que la imgen canvia constantment per dates pàtries i caulquier altre motiu, així q no és només una imgen, les mateixes són pujades pel puppetmaster a cada client.

    No tinc idea si amb alguna cosa semblant a això es pot aplicar al meu cas.
    Salutacions.