844b75f9e3c5b21e6d54e02cb5884eb7a6be22dc
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / SkinSelector / plugin.py
1 # -*- coding: iso-8859-1 -*-
2 # (c) 2006 Stephan Reichholf
3 # This Software is Free, use it where you want, when you want for whatever you want and modify it if you want but don't remove my copyright!
4
5 from enigma import *
6 from Screens.Screen import Screen
7 from Screens.MessageBox import MessageBox
8 from Components.ActionMap import NumberActionMap
9 from Components.Pixmap import Pixmap
10 from Components.GUIComponent import *
11 from Components.MenuList import MenuList
12 from Plugins.Plugin import PluginDescriptor
13
14 from Components.config import config
15 from Tools.Directories import SCOPE_SKIN
16
17 from Components.config import config
18
19 import os, sys
20
21 class SkinSelector(Screen):
22         # for i18n:
23         # _("Choose your Skin")
24         skin = """
25                 <screen position="75,138" size="600,320" title="Choose your Skin" >
26                         <widget name="SkinList" position="10,10" size="275,300" scrollbarMode="showOnDemand" />
27                         <widget name="Preview" position="305,45" size="280,210" alphatest="on"/>
28                 </screen>
29                 """
30
31         skinlist = []
32         root = "/usr/share/enigma2/"
33
34         def __init__(self, session, args = None):
35
36                 self.skin = SkinSelector.skin
37                 Screen.__init__(self, session)
38
39                 self.skinlist = []
40                 self.session = session
41                 self.previewPath = ""
42
43                 os.path.walk(self.root, self.find, "")
44
45                 self.skinlist.sort()
46                 self["SkinList"] = MenuList(self.skinlist)
47                 self["Preview"] = Pixmap()
48
49                 self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
50                 {
51                         "ok": self.ok,
52                         "back": self.close,
53                         "up": self.up,
54                         "down": self.down,
55                         "left": self.left,
56                         "right": self.right,
57                         "info": self.info,
58                 }, -1)
59                 
60                 self.onLayoutFinish.append(self.loadPreview)
61
62         def up(self):
63                 self["SkinList"].up()
64                 self.loadPreview()
65
66         def down(self):
67                 self["SkinList"].down()
68                 self.loadPreview()
69
70         def left(self):
71                 self["SkinList"].pageUp()
72                 self.loadPreview()
73
74         def right(self):
75                 self["SkinList"].pageDown()
76                 self.loadPreview()
77
78         def info(self):
79                 aboutbox = self.session.open(MessageBox,_("Enigma2 Skinselector v0.5 BETA\n\nIf you experience any problems please contact\nstephan@reichholf.net\n\n\xA9 2006 - Stephan Reichholf"), MessageBox.TYPE_INFO)
80                 aboutbox.setTitle(_("About..."))
81
82         def find(self, arg, dirname, names):
83                 for x in names:
84                         if x == "skin.xml":
85                                 if dirname <> self.root:
86                                         subdir = dirname[19:]
87                                         self.skinlist.append(subdir)
88                                 else:
89                                         subdir = "Default Skin"
90                                         self.skinlist.append(subdir)
91
92         def ok(self):
93                 if self["SkinList"].getCurrent() == "Default Skin":
94                         skinfile = "skin.xml"
95                 else:
96                         skinfile = self["SkinList"].getCurrent()+"/skin.xml"
97
98                 print "Skinselector: Selected Skin: "+self.root+skinfile
99                 config.skin.primary_skin.value = skinfile
100                 config.skin.primary_skin.save()
101                 restartbox = self.session.openWithCallback(self.restartGUI,MessageBox,_("GUI needs a restart to apply a new skin\nDo you want to Restart the GUI now?"), MessageBox.TYPE_YESNO)
102                 restartbox.setTitle(_("Restart GUI now?"))
103
104         def loadPreview(self):
105                 if self["SkinList"].getCurrent() == "Default Skin":
106                         pngpath = self.root+"/prev.png"
107                 else:
108                         pngpath = self.root+self["SkinList"].getCurrent()+"/prev.png"
109
110                 if not os.path.exists(pngpath):
111                         # FIXME: don't use hardcoded path
112                         pngpath = "/usr/lib/enigma2/python/Plugins/SystemPlugins/SkinSelector/noprev.png"
113
114                 if self.previewPath != pngpath:
115                         self.previewPath = pngpath
116
117                 self["Preview"].instance.setPixmapFromFile(self.previewPath)
118
119         def restartGUI(self, answer):
120                 if answer is True:
121                         quitMainloop(3)
122
123 def SkinSelMain(session, **kwargs):
124         session.open(SkinSelector)
125
126 def SkinSelSetup(menuid):
127         if menuid == "system":
128                 return [("Skin...", SkinSelMain)]
129         else:
130                 return []
131
132 def Plugins(**kwargs):
133         return PluginDescriptor(name="Skinselector", description="Select Your Skin", where = PluginDescriptor.WHERE_SETUP, fnc=SkinSelSetup)