domenica 19 dicembre 2010

Mini-Howto Applet per Gnome Panel

Considerato che molte applet del pannello di gnome non mi piacciono e le vorrei molto piu' semplici e funzionali, mi sono cimentato nella scrittura di una semplice applet in pygtk per visualizzare lo spazio occupato su una specifica partizione. Da premettere che questo e' solo un esempio, quindi il codice sara' un po' una schifezza, ma quello che conta e' il modo in cui procedere.

Per realizzarne una si parte prima di tutto sul definire cosa si vuole visualizzare e come recuperarlo. Qui di seguito c'e' un piccolo script, scritto in python, che recupera lo spazio libero di una partizione (in base al punto di mount):

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')

import gtk
import gnomeapplet
import gobject
import commands

import os

interval = 1000

def get_space():
mount = "/home"
space = os.statvfs(mount)
return mount + " " + str((space.f_frsize * space.f_bavail)/(1024*1024*1024)) + " Gb"

def update_value(label):
label.set_text(get_space())
return True

def applet_factory(applet, iid):
label = gtk.Label(get_space())
applet.add(label)
applet.show_all()
gobject.timeout_add(interval, update_value, label)
return True

gnomeapplet.bonobo_factory("OAFIID:GNOME_DiskSpace_Factory", gnomeapplet.Applet.__gtype__, "DiskSpace", "0", applet_factory)


Ora per visualizzare la nostra applet nel pannello ci viene in aiuto un modulo di python denominato "gnomeapplet" che serve proprio per realizzare applet per il pannello di gnome.
Detto questo creiamo soltanto un file con tutte le specifiche da passare a Bonobo (uno dei componenti fondamentali di gnome). Quest'ultimo ci dara' la possibita' di aggiungere la nostra applet proprio dal menu del pannello di controllo! :)

Il file che andremo a creare si dovra' chiamare identicamente alla direttiva "gnomeapplet.bonobo_factory(...)" con l'aggiunta del suffisso ".server":

<oaf_info>


<oaf_server iid="OAFIID:GNOME_DiskSpace_Factory" type="exe" location="/usr/bin/diskspace.py">


<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:Bonobo/GenericFactory:1.0"/>
<item value="IDL:Bonobo/Unknown:1.0"/>
</oaf_attribute>
<oaf_attribute name="name" type="string" value="DiskSpace"/>
<oaf_attribute name="description" type="string" value="Semplice monitor dello spazio sull'hard disk"/>
</oaf_server>


<oaf_server iid="OAFIID:GNOME_DiskSpace" type="factory" location="OAFIID:GNOME_DiskSpace_Factory">
<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
<item value="IDL:Bonobo/Control:1.0"/>
<item value="IDL:Bonobo/Unknown:1.0"/>
</oaf_attribute>
<oaf_attribute name="name" type="string" value="DiskSpace"/>
<oaf_attribute name="description" type="string" value="Semplice monitor dello spazio sull'hard disk"/>
<oaf_attribute name="panel:category" type="string"
value="Utility"/>
<oaf_attribute name="panel:icon" type="string" value="disk.png"/>
</oaf_server>


</oaf_info>

Da notare che in quest'ultimo file si e' specificato il percoso in cui e' presente il primo script python (/usr/bin/diskspace.py) che deve essere reso eseguibile. A questo punto per far si che la nostra applet sia accessibile all'inserimento nel pannello ci basta posizionare il file GNOME_DiskSpace.server all'interno della cartella /usr/lib/bonobo/servers.

Il tutto e' fatto e ci possiamo godere la nostra piccola applet aggiungendola al pannello di gnome!


Link utile: http://projects.gnome.org/ORBit2/appletstutorial.html

0 commenti:

Posta un commento