define movepaths for MovingPixmaps and proof of concept in the start-wizard
[enigma2.git] / lib / python / Components / Pixmap.py
index 48eec23705a77714c29f7f47c1e69682e7d895d3..d25530ea71e8ca9980e37aedb31ba980c3e8d195 100644 (file)
@@ -1,26 +1,11 @@
-import skin
-from GUIComponent import *
+from ConditionalWidget import *
 
 from enigma import *
 
-class Pixmap(GUIComponent):
-       """Pixmap can be used for components which diplay a pixmap"""
-       
-       SHOWN = 0
-       HIDDEN = 1
-       
+class Pixmap(Widget):
        def __init__(self):
-               GUIComponent.__init__(self)
-               self.instance = None
-               self.state = self.SHOWN
-       
-       def GUIcreate(self, parent):
-               self.instance = self.createWidget(parent)
-       
-       def GUIdelete(self):
-               self.removeWidget(self.instance)
-               self.instance = None
-       
+               Widget.__init__(self)
+
        def getePixmap(self, parent):
                #pixmap = ePixmap(parent)
                #pixmap.setPixmapFromFile(self.filename)
@@ -31,48 +16,77 @@ class Pixmap(GUIComponent):
 
        def removeWidget(self, w):
                pass
-       
-       def showPixmap(self):
-               print "Show pixmap"
-               self.state = self.SHOWN
-               self.instance.show()
 
-       def hidePixmap(self):
-               print "Hide pixmap"
-               self.state = self.HIDDEN
-               self.instance.hide()
-       
-       def removeWidget(self, instance):
-               pass
+       def move(self, x, y):
+               self.instance.move(ePoint(int(x), int(y)))
 
-class PixmapConditional(Pixmap):
+class PixmapConditional(ConditionalWidget, Pixmap):
        def __init__(self, withTimer = True):
+               ConditionalWidget.__init__(self)
                Pixmap.__init__(self)
+
+class MovingPixmap(Pixmap):
+       def __init__(self):
+               Pixmap.__init__(self)
+               
+               self.moving = False
                
-               self.setConnect(None)
+               # TODO: get real values
+               self.x = 0.0
+               self.y = 0.0
                
-               if (withTimer):
-                       self.conditionCheckTimer = eTimer()
-                       self.conditionCheckTimer.timeout.get().append(self.update)
-                       self.conditionCheckTimer.start(1000)
+               self.clearPath()
                
-       def setConnect(self, conditionalFunction):
-               self.conditionalFunction = conditionalFunction
+               self.moveTimer = eTimer()
+               self.moveTimer.timeout.get().append(self.doMove)
+               
+       def clearPath(self, repeated = False):
+               if (self.moving):
+                       self.moving = False
+                       self.moveTimer.stop()
+                       
+               self.path = []
+               self.currDest = 0
+               self.repeated = repeated
                
-       def activateCondition(self, condition):
-               if (condition):
-                       if (self.state == self.HIDDEN):
-                               self.showPixmap()
-               else:
-                       if (self.state == self.SHOWN):
-                               self.hidePixmap()
+       def addMovePoint(self, x, y, time = 20):
+               self.path.append((x, y, time))
+       
+       def moveTo(self, x, y, time = 20):
+               self.clearPath()
+               self.addMovePoint(x, y, time)
+               
+       def startMoving(self):
+               if not self.moving:
+                       self.time = self.path[self.currDest][2]
+                       self.stepX = (self.path[self.currDest][0] - self.x) / float(self.time)
+                       self.stepY = (self.path[self.currDest][1] - self.y) / float(self.time)
 
-       def update(self):
-               if (self.conditionalFunction != None):
-                       try:
-                               self.conditionalFunction() # check, if the conditionalfunction is still valid
-                       except:
-                               self.conditionalFunction = None
-                               self.activateCondition(False)
+                       self.moving = True
+                       self.moveTimer.start(100)
+                       
+       def stopMoving(self):
+               self.moving = False
+               self.moveTimer.stop()
+               
+       def doMove(self):
+               self.x += self.stepX
+               self.y += self.stepY
+               self.time -= 1
+               try:
+                       self.move(int(self.x), int(self.y))
+               except: # moving not possible... widget not there any more... stop moving
+                       self.stopMoving()
                        
-                       self.activateCondition(self.conditionalFunction())
+               if (self.time == 0):
+                       self.currDest += 1
+                       self.moveTimer.stop()
+                       self.moving = False
+                       if (self.currDest >= len(self.path)): # end of path
+                               if (self.repeated):
+                                       self.currDest = 0
+                                       self.moving = False
+                                       self.startMoving()
+                       else:
+                               self.moving = False
+                               self.startMoving()