1 from Screens.Screen import Screen
2 from Screens.InputBox import InputBox
3 from Screens.ChoiceBox import ChoiceBox
4 from Components.ActionMap import ActionMap
5 from Components.Label import Label
6 from Components.MenuList import MenuList
7 from Components.Input import Input
8 from Plugins.Plugin import PluginDescriptor
10 from enigma import ePoint, eSize
12 from ConfigParser import ConfigParser, DEFAULTSECT, DuplicateSectionError
14 ###############################################################################
15 myname = "AntiScrollbar"
17 ###############################################################################
18 class AntiScrollMain(Screen):
20 def __init__(self, session, args = 0):
21 config = AntiScrollConfig()
23 profil = config.getLastProfile()
24 self.size = [profil["sizex"],profil["sizey"]]
25 self.position = [profil["posx"],profil["posy"]]
27 config.setProfile("standard",[200,200],[200,200])
28 config = AntiScrollConfig()
29 profil = config.getProfile("standard")
31 self.size = [profil["sizex"],profil["sizey"]]
32 self.position = [profil["posx"],profil["posy"]]
33 ss ="<screen position=\"%i,%i\" size=\"%i,%i\" title=\"%s\" flags=\"wfNoBorder\" >" %(profil["posx"],profil["posy"],profil["sizex"],profil["sizey"],myname)
34 ss +="<widget name=\"label\" position=\"0,0\" size=\"%i,%i\" backgroundColor=\"black\" />" %(profil["sizex"],profil["sizey"])
37 self.session = session
38 Screen.__init__(self, session)
40 self["label"] = Label()
41 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
45 "menu": self.openmenu,
61 self.session.open(AntiScrollMenu,callback=self.menuCallback,size=self.size,position=self.position)
63 def menuCallback(self,size,position):
65 self.position = position
66 self.move(self.position[0],self.position[1])
67 self.resize(self.size[0],self.size[1])
70 self.size= [self.size[0],self.size[1]-self.step]
71 self.resize(self.size[0],self.size[1])
74 self.size= [self.size[0],self.size[1]+self.step]
75 self.resize(self.size[0],self.size[1])
78 self.size= [self.size[0]-self.step,self.size[1]]
79 self.resize(self.size[0],self.size[1])
82 self.size= [self.size[0]+self.step,self.size[1]]
83 self.resize(self.size[0],self.size[1])
86 self.position = [self.position[0],self.position[1]+self.step]
87 self.move(self.position[0],self.position[1])
90 self.position = [self.position[0],self.position[1]-self.step]
91 self.move(self.position[0],self.position[1])
94 self.position = [self.position[0]-self.step,self.position[1]]
95 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 def move(self, x, y):
102 print "["+myname+"] moving to", str(x) + ":" + str(y)
103 self.instance.move(ePoint(x, y))
105 def resize(self, w, h):
106 print "["+myname+"] resizing to", str(w) + "x" + str(h)
107 self.instance.resize(eSize(*(w, h)))
108 self["label"].instance.resize(eSize(*(w, h)))
110 #############################
111 class AntiScrollMenu(Screen):
112 def __init__(self,session,callback=None,size=None,position=None,arg=0):
113 self.session = session
114 self.callBack = callback
116 self.position = position
117 ss ="<screen position=\"200,200\" size=\"300,200\" title=\"%s Menu\" >" % myname
118 ss +="<widget name=\"menu\" position=\"0,0\" size=\"300,150\" scrollbarMode=\"showOnDemand\" />"
119 ss +="<widget name=\"label\" position=\"0,150\" size=\"300,50\" font=\"Regular;18\" valign=\"center\" halign=\"center\" />"
122 Screen.__init__(self,session)
124 list.append(("load Profile",self.load))
125 list.append(("save Profile",self.save))
126 list.append(("save new Profile",self.savenew))
127 self["menu"] = MenuList(list)
128 self["label"] = Label("written by 3c5x9, V"+myversion)
129 self["actions"] = ActionMap(["WizardActions", "DirectionActions","MenuActions","NumberActions"],
135 selection = self["menu"].getCurrent()
139 config = AntiScrollConfig()
141 for i in config.getProfiles():
143 self.session.openWithCallback(self.loadProfile,ChoiceBox,_("select Profile to load"),liste)
145 def loadProfile(self,value):
146 if value is not None:
147 config = AntiScrollConfig()
148 profil = config.getProfile(value[1])
149 if profil is not False:
150 self.callBack([profil["sizex"],profil["sizey"]],[profil["posx"],profil["posy"]])
153 self.session.openWithCallback(self.profilnameEntered,InputBox, title=_("Please enter a name for the Profile"), text="Profil", maxSize=False, type=Input.TEXT)
155 def profilnameEntered(self,value):
156 if value is not None:
157 config = AntiScrollConfig()
158 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()
178 self.configparser.read(self.configfile)
179 def setLastProfile(self,name):
180 self.configparser.set(DEFAULTSECT,"lastprofile",name)
182 def getLastProfile(self):
183 last = self.configparser.get(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 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 showhide(session, **kwargs):
232 if activebar is None:
233 activebar = session.instantiateDialog(AntiScrollMain)
241 def main(session, **kwargs):
242 session.open(AntiScrollMain)
244 def Plugins(**kwargs):
245 return [PluginDescriptor(name=myname,description="overlay for scrolling bars",where = PluginDescriptor.WHERE_PLUGINMENU,fnc = main, icon="plugin.png"),
246 PluginDescriptor(name=myname+" show/hide",where = PluginDescriptor.WHERE_EXTENSIONSMENU,fnc = showhide)]