Aggiunto un oggetto Loader per caricare i file necessari
Leonardo Robol [2009-11-09 11:11]
Aggiunto un oggetto Loader per caricare i file necessari
indovinando il loro path
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 <leo@robol.it>"
+
+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()