From 3f63b276b21fa1d866ad183b11aacda6508a72bd Mon Sep 17 00:00:00 2001 From: Leonardo Robol Date: Mon, 9 Nov 2009 12:11:34 +0100 Subject: [PATCH] Aggiunto un oggetto Loader per caricare i file necessari indovinando il loro path --- RaiTV/Interface.py | 6 ++-- raitv.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/RaiTV/Interface.py b/RaiTV/Interface.py index 1d59ba9..696f35d 100644 --- a/RaiTV/Interface.py +++ b/RaiTV/Interface.py @@ -30,12 +30,14 @@ from ChannelLoader import ChannelList class UI(): - def __init__(self): + def __init__(self, loader): """Recupera tutti gli oggetti necessari aprendo il file .ui e costruisce quelli che mancano""" + self.loader = loader + self.builder = gtk.Builder() - self.builder.add_from_file("ui/RaiTV.ui") + self.builder.add_from_file( loader.UIPath("RaiTV.ui") ) self.win = self.builder.get_object("win") self.listacanali = self.builder.get_object("listacanali") diff --git a/raitv.py b/raitv.py index c73490f..8bfe359 100755 --- a/raitv.py +++ b/raitv.py @@ -16,14 +16,89 @@ # You should have received a copy of the GNU General Public License # along with RaiTV; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# +# +# Questo file contiene la classe Loader, che permette di caricare file +# esterni senza preoccuparsi di dove si trovano (a grandi linee). E' messa +# qui di modo che non ci si debba preoccupare di cercarla, altrimenti +# perderebbe tutta la sua utilità :) +# + +__author__ = "Leonardo Robol " + +import os, sys + +class Loader(): + + def __init__(self): + """Scopre in che directory è l'eseguibile e ne + deduce in che directory dovrebbero trovarsi i + vari oggetti utili""" + + # Determino la cartella di lavoro + self.pwd = os.getcwd() + + # e quella in cui sta il programma principale + self.bin = os.path.abspath(sys.argv[0]) + self.bin = os.path.dirname(self.bin) + + # Se questa è una cartella locale, allora + # cercheremo i file in locale, altrimenti + # nei luoghi atti allo scopo. + # Per determinarlo proviamo a cercare le directory che + # servono + + os.chdir(self.bin) + + try: + os.stat("ui") + os.stat("RaiTV") + self.local = True + except OSError: + self.local = False + + ## A questo punto dobbiamo determinare dove sono i moduli + ## e file dell'interfaccia + ## TODO: Farlo per davvero. + + def UIPath(self, filename): + """Ritorna il path di un file relativo all'interfaccia""" + if self.local: + return os.path.join(self.bin , "ui", filename) + + def ModulePath(self): + """Ritorna il path da cui importare i moduli""" + if self.local: + return os.path.join(self.bin, "RaiTV") + + +# +# Questo è il programma vero, che viene eseguito quando +# questo file viene eseguito direttamente +# + +if __name__ == "__main__": + + import gtk, pygtk + + ## Creiamo l'oggetto Loader che si occuperà di + ## determinare la posizione dei file interessanti + loader = Loader() + sys.path.insert(0, loader.ModulePath()) + ## Passiamo ad importare ciò che ci serve. + from RaiTV import Interface -import gtk, pygtk -from RaiTV import Interface + ## Passiamo all'interfaccia anche il loader di + ## modo che non si faccia troppi problemi + ## a caricare i suoi file + ui = Interface.UI(loader) -ui = Interface.UI() + ## Mostriamo tutto + ui.show_all() -ui.show_all() + ## Partiti :) + gtk.main() -gtk.main() -- 2.1.4