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!
4 from Screens.Screen import Screen
5 from Screens.InputBox import InputBox
6 from Screens.ChoiceBox import ChoiceBox
7 from Components.ActionMap import ActionMap
8 from Components.Label import Label
9 from Components.MenuList import MenuList
10 from Components.Input import Input
11 from Plugins.Plugin import PluginDescriptor
13 from enigma import ePoint, eSize
15 from ConfigParser import ConfigParser, DEFAULTSECT, DuplicateSectionError
17 ###############################################################################
18 myname = "AntiScrollbar"
20 ###############################################################################
21 class AntiScrollMain(Screen):
23 def __init__(self, session, args = 0):
24 config = AntiScrollConfig()
26 profil = config.getLastProfile()
27 self.size = [profil["sizex"],profil["sizey"]]
28 self.position = [profil["posx"],profil["posy"]]
30 config.setProfile("standard",[200,200],[200,200])
31 config = AntiScrollConfig()
32 profil = config.getProfile("standard")
34 self.size = [profil["sizex"],profil["sizey"]]
35 self.position = [profil["posx"],profil["posy"]]
36 ss ="<screen position=\"%i,%i\" size=\"%i,%i\" title=\"%s\" flags=\"wfNoBorder\" >" %(profil["posx"],profil["posy"],profil["sizex"],profil["sizey"],myname)
37 ss +="<widget name=\"label\" position=\"0,0\" size=\"%i,%i\" backgroundColor=\"black\" />" %(profil["sizex"],profil["sizey"])
40 self.session = session
41 Screen.__init__(self, session)
43 self["label"] = Label()
44 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
48 "menu": self.openmenu,
64 self.session.open(AntiScrollMenu,callback=self.menuCallback,size=self.size,position=self.position)
66 def menuCallback(self,size,position):
68 self.position = position
69 self.move(self.position[0],self.position[1])
70 self.resize(self.size[0],self.size[1])
73 self.size= [self.size[0],self.size[1]-self.step]
74 self.resize(self.size[0],self.size[1])
77 self.size= [self.size[0],self.size[1]+self.step]
78 self.resize(self.size[0],self.size[1])
81 self.size= [self.size[0]-self.step,self.size[1]]
82 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])
89 self.position = [self.position[0],self.position[1]+self.step]
90 self.move(self.position[0],self.position[1])
93 self.position = [self.position[0],self.position[1]-self.step]
94 self.move(self.position[0],self.position[1])
97 self.position = [self.position[0]-self.step,self.position[1]]
98 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)))
113 #############################
114 class AntiScrollMenu(Screen):
115 def __init__(self,session,callback=None,size=None,position=None,arg=0):
116 self.session = session
117 self.callBack = callback
119 self.position = position
120 ss ="<screen position=\"200,200\" size=\"300,200\" title=\"%s Menu\" >" % myname
121 ss +="<widget name=\"menu\" position=\"0,0\" size=\"300,150\" scrollbarMode=\"showOnDemand\" />"
122 ss +="<widget name=\"label\" position=\"0,150\" size=\"300,50\" font=\"Regular;18\" valign=\"center\" halign=\"center\" />"
125 Screen.__init__(self,session)
127 list.append(("load Profile",self.load))
128 list.append(("save Profile",self.save))
129 list.append(("save new Profile",self.savenew))
130 self["menu"] = MenuList(list)
131 self["label"] = Label("written by 3c5x9, V"+myversion)
132 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
138 selection = self["menu"].getCurrent()
142 config = AntiScrollConfig()
144 for i in config.getProfiles():
146 self.session.openWithCallback(self.loadProfile,ChoiceBox,_("select Profile to load"),liste)
148 def loadProfile(self,value):
149 if value is not None:
150 config = AntiScrollConfig()
151 profil = config.getProfile(value[1])
152 if profil is not False:
153 self.callBack([profil["sizex"],profil["sizey"]],[profil["posx"],profil["posy"]])
156 self.session.openWithCallback(self.profilnameEntered,InputBox, title=_("Please enter a name for the Profile"), text="Profil", maxSize=False, type=Input.TEXT)
158 def profilnameEntered(self,value):
159 if value is not None:
160 config = AntiScrollConfig()
161 config.setProfile(value,self.size,self.position)
164 config = AntiScrollConfig()
166 for i in config.getProfiles():
168 self.session.openWithCallback(self.saveProfile,ChoiceBox,_("select Profile to save"),liste)
169 def saveProfile(self,value):
170 if value is not None:
171 config = AntiScrollConfig()
172 config.setProfile(value[1],self.size,self.position)
175 ##############################
176 class AntiScrollConfig:
177 configfile = "/etc/enigma2/AntiScrollbar.conf"
180 self.configparser = ConfigParser()
181 self.configparser.read(self.configfile)
182 def setLastProfile(self,name):
183 self.configparser.set(DEFAULTSECT,"lastprofile",name)
185 def getLastProfile(self):
186 last = self.configparser.get(DEFAULTSECT,"lastprofile")
187 return self.getProfile(last)
188 def getProfiles(self):
190 sections = self.configparser.sections()
191 for section in sections:
192 profiles.append(section)
195 def getProfile(self,name):
196 if self.configparser.has_section(name) is True:
197 print "loading profile ",name
199 l["sizex"] = int(self.configparser.get(name, "size_x"))
200 l["sizey"] = int(self.configparser.get(name, "size_y"))
201 l["posx"] = int(self.configparser.get(name, "position_x"))
202 l["posy"] = int(self.configparser.get(name, "position_y"))
203 self.setLastProfile(name)
206 print "couldnt find profil", name
208 def setProfile(self,name,size,position):
210 self.configparser.add_section(name)
211 self.configparser.set(name, "size_x",size[0])
212 self.configparser.set(name, "size_y",size[1])
213 self.configparser.set(name, "position_x",position[0])
214 self.configparser.set(name, "position_y",position[1])
217 except DuplicateSectionError:
218 self.deleteProfile(name)
219 self.setProfile(name,size,position)
221 def deleteProfile(self,name):
222 self.configparser.remove_section(name)
225 def writeConfig(self):
226 fp = open(self.configfile,"w")
227 self.configparser.write(fp)
232 #############################
233 def showhide(session, **kwargs):
235 if activebar is None:
236 activebar = session.instantiateDialog(AntiScrollMain)
244 def main(session, **kwargs):
245 session.open(AntiScrollMain)
247 def Plugins(**kwargs):
248 return [PluginDescriptor(name=myname,description="overlay for scrolling bars",where = PluginDescriptor.WHERE_PLUGINMENU,fnc = main, icon="plugin.png"),
249 PluginDescriptor(name=myname+" show/hide",where = PluginDescriptor.WHERE_EXTENSIONSMENU,fnc = showhide)]