1 # (c) 2006 3c5x9, dream@3c5x9.de
2 # 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!
5 from Screens.Screen import Screen
6 from Screens.MessageBox import MessageBox
7 from Screens.InputBox import InputBox
8 from Screens.ChoiceBox import ChoiceBox
9 from Components.ActionMap import ActionMap, NumberActionMap
10 from Components.ScrollLabel import ScrollLabel
11 from Components.Label import Label
12 from Components.GUIComponent import *
13 from Components.MenuList import MenuList
14 from Components.Input import Input
15 from Screens.Console import Console
16 from Plugins.Plugin import PluginDescriptor
17 from Screens.ImageWizard import ImageWizard
19 from Plugins.Plugin import PluginDescriptor
21 from enigma import ePoint, eSize, eServiceCenter
25 ###############################################################################
26 myname = "AntiScrollbar"
28 ###############################################################################
29 class AntiScrollMain(Screen):
31 def __init__(self, session, args = 0):
32 config = AntiScrollConfig()
34 profil = config.getLastProfile()
35 self.size = [profil["sizex"],profil["sizey"]]
36 self.position = [profil["posx"],profil["posy"]]
38 config.setProfile("standard",[200,200],[200,200])
39 config = AntiScrollConfig()
40 profil = config.getProfile("standard")
42 self.size = [profil["sizex"],profil["sizey"]]
43 self.position = [profil["posx"],profil["posy"]]
44 ss ="<screen position=\"%i,%i\" size=\"%i,%i\" title=\"%s\" flags=\"wfNoBorder\" >" %(profil["posx"],profil["posy"],profil["sizex"],profil["sizey"],myname)
45 ss +="<widget name=\"label\" position=\"0,0\" size=\"%i,%i\" backgroundColor=\"black\" />" %(profil["sizex"],profil["sizey"])
48 self.session = session
49 Screen.__init__(self, session)
51 self["label"] = Label()
52 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
56 "menu": self.openmenu,
71 self.session.open(AntiScrollMenu,callback=self.menuCallback,size=self.size,position=self.position)
72 def menuCallback(self,size,position):
74 self.position = position
75 self.move(self.position[0],self.position[1])
76 self.resize(self.size[0],self.size[1])
79 self.size= [self.size[0],self.size[1]-self.step]
80 self.resize(self.size[0],self.size[1])
82 self.size= [self.size[0],self.size[1]+self.step]
83 self.resize(self.size[0],self.size[1])
85 self.size= [self.size[0]-self.step,self.size[1]]
86 self.resize(self.size[0],self.size[1])
88 self.size= [self.size[0]+self.step,self.size[1]]
89 self.resize(self.size[0],self.size[1])
92 self.position = [self.position[0],self.position[1]+self.step]
93 self.move(self.position[0],self.position[1])
95 self.position = [self.position[0],self.position[1]-self.step]
96 self.move(self.position[0],self.position[1])
98 self.position = [self.position[0]-self.step,self.position[1]]
99 self.move(self.position[0],self.position[1])
101 self.position = [self.position[0]+self.step,self.position[1]]
102 self.move(self.position[0],self.position[1])
104 def move(self, x, y):
105 print "["+myname+"] moving to", str(x) + ":" + str(y)
106 self.instance.move(ePoint(x, y))
108 def resize(self, w, h):
109 print "["+myname+"] resizing to", str(w) + "x" + str(h)
110 self.instance.resize(eSize(*(w, h)))
111 self["label"].instance.resize(eSize(*(w, h)))
112 #############################
113 class AntiScrollMenu(Screen):
114 def __init__(self,session,callback=None,size=None,position=None,arg=0):
115 self.session = session
116 self.callBack = callback
118 self.position = position
119 ss ="<screen position=\"200,200\" size=\"300,200\" title=\"%s Menu\" >" % myname
120 ss +="<widget name=\"menu\" position=\"0,0\" size=\"300,150\" scrollbarMode=\"showOnDemand\" />"
121 ss +="<widget name=\"label\" position=\"0,150\" size=\"300,50\" font=\"Regular;18\" valign=\"center\" halign=\"center\" />"
124 Screen.__init__(self,session)
126 list.append(("load Profile",self.load))
127 list.append(("save Profile",self.save))
128 list.append(("save new Profile",self.savenew))
129 self["menu"] = MenuList(list)
130 self["label"] = Label("written by 3c5x9, V"+myversion)
131 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
137 selection = self["menu"].getCurrent()
141 config = AntiScrollConfig()
143 for i in config.getProfiles():
145 self.session.openWithCallback(self.loadProfile,ChoiceBox,_("select Profile to load"),liste)
147 def loadProfile(self,value):
148 if value is not None:
149 config = AntiScrollConfig()
150 profil = config.getProfile(value[1])
151 if profil is not False:
152 self.callBack([profil["sizex"],profil["sizey"]],[profil["posx"],profil["posy"]])
154 self.session.openWithCallback(self.profilnameEntered,InputBox, title=_("Please enter a name for the Profile"), text="Profil", maxSize=False, type=Input.TEXT)
156 def profilnameEntered(self,value):
157 if value is not None:
158 config = AntiScrollConfig()
159 config.setProfile(value,self.size,self.position)
161 config = AntiScrollConfig()
163 for i in config.getProfiles():
165 self.session.openWithCallback(self.saveProfile,ChoiceBox,_("select Profile to save"),liste)
166 def saveProfile(self,value):
167 if value is not None:
168 config = AntiScrollConfig()
169 config.setProfile(value[1],self.size,self.position)
172 ##############################
173 class AntiScrollConfig:
174 configfile = "/etc/enigma2/AntiScrollbar.conf"
177 self.configparser = ConfigParser.ConfigParser()
178 self.configparser.read(self.configfile)
179 def setLastProfile(self,name):
180 self.configparser.set(ConfigParser.DEFAULTSECT,"lastprofile",name)
182 def getLastProfile(self):
183 last = self.configparser.get(ConfigParser.DEFAULTSECT,"lastprofile")
184 return self.getProfile(last)
185 def getProfiles(self):
187 sections = self.configparser.sections()
188 for section in sections:
189 profiles.append(section)
192 def getProfile(self,name):
193 if self.configparser.has_section(name) is True:
194 print "loading profile ",name
196 l["sizex"] = int(self.configparser.get(name, "size_x"))
197 l["sizey"] = int(self.configparser.get(name, "size_y"))
198 l["posx"] = int(self.configparser.get(name, "position_x"))
199 l["posy"] = int(self.configparser.get(name, "position_y"))
200 self.setLastProfile(name)
203 print "couldnt find profil", name
205 def setProfile(self,name,size,position):
207 self.configparser.add_section(name)
208 self.configparser.set(name, "size_x",size[0])
209 self.configparser.set(name, "size_y",size[1])
210 self.configparser.set(name, "position_x",position[0])
211 self.configparser.set(name, "position_y",position[1])
214 except ConfigParser.DuplicateSectionError:
215 self.deleteProfile(name)
216 self.setProfile(name,size,position)
218 def deleteProfile(self,name):
219 self.configparser.remove_section(name)
222 def writeConfig(self):
223 fp = open(self.configfile,"w")
224 self.configparser.write(fp)
229 #############################
230 def main(session, **kwargs):
231 session.open(AntiScrollMain)
232 def Plugins(**kwargs):
233 return [PluginDescriptor(name=myname,description="overlay for scrolling bars",where = PluginDescriptor.WHERE_PLUGINMENU,fnc = main),
234 PluginDescriptor(name=myname,description="overlay for scrolling bars",where = PluginDescriptor.WHERE_EXTENSIONSMENU,fnc = main)]