Ejemplo n.º 1
0
class ToggleGroup(set):
    def __init__(self, default=None):
        set.__init__(self)
        self._value = None
        self._curSelect = None
        self._default = default
        self._byValue = {}
        self._toggleProxies = {}
        self.changed = Event()
        
    def _itemToggled(self, item, value, isSet):
        if self._curSelect and self._curSelect is not item:
            self._curSelect._toggleInner(False)
        if isSet:
            self._value = value
            self._curSelect = item
        else:
            self._value = self._default
            self._curSelect = None
        self.changed.trigger(self._value)
    
    def remove(self, x):
        x.toggled.removeResponder(self._toggleProxies[x])
        if self._curSelect is x:
            self._itemToggled(x, None, False)
        del self._byValue[x._value]
        set.remove(self, x)
        
    def add(self, x):
        if self._byValue.has_key(x._value):
            raise KeyError("This ToggleGroup already has a Toggle with value "+x._value)
        self._toggleProxies[x] = lambda value, isSet: self._itemToggled(x, value, isSet)
        x.toggled.addResponder(self._toggleProxies[x])
        set.add(self, x)
        self._byValue[x._value] = x
Ejemplo n.º 2
0
 def __init__(self):
     Widget.__init__(self)
     self._mouseIn = False
     self._focusLock = False
     self.mouseOver.addResponder(self._focused)
     self.mouseOut.addResponder(self._unfocused)
     self.focus = Event()
     self.unfocus = Event()
Ejemplo n.º 3
0
 def __init__(self):
     self.lastpos = None
     self.pos = None
     
     self.move = Event()
     self.down = Event()
     self.up = Event()
     self.items = [self.move, self.down, self.up]
Ejemplo n.º 4
0
class Keyboard(Input):
    def __init__(self):
        self.down = Event()
        self.up = Event()
        self.items = [self.down, self.up]
        
    def update(self, e):
        if e.type == KEYDOWN:
            self.down.trigger(e.key)
        elif e.type == KEYUP:
            self.up.trigger(e.key)
Ejemplo n.º 5
0
 def __init__(self, default=None):
     set.__init__(self)
     self._value = None
     self._curSelect = None
     self._default = default
     self._byValue = {}
     self._toggleProxies = {}
     self.changed = Event()
Ejemplo n.º 6
0
class Clickable(MouseTracking):
    def __init__(self):
        MouseTracking.__init__(self)
        self._clicking = False
        self.mouseDown.addResponder(self._clickStart)
        self.mouseUp.addResponder(self._clickEnd)
        self.clicked = Event()
    
    def _clickStart(self, button):
        if self._focused and not self._clicking:
            self._clicking = button
            self._focusLock = True
    
    def _clickEnd(self, button):
        if self._focused and self._clicking == button:
            self.clicked.trigger(button)
            self._clicking = False
            self._focusLock = False
Ejemplo n.º 7
0
class MouseTracking(Widget):
    def __init__(self):
        Widget.__init__(self)
        self._mouseIn = False
        self._focusLock = False
        self.mouseOver.addResponder(self._focused)
        self.mouseOut.addResponder(self._unfocused)
        self.focus = Event()
        self.unfocus = Event()
        
    def _focused(self):
        if not self._mouseIn:
            self._mouseIn = True
            self.focus.trigger()
        
    def _unfocused(self):
        if self._mouseIn and not self._focusLock:
            self._mouseIn = False
            self.unfocus.trigger()
Ejemplo n.º 8
0
 def __init__(self, curves=None):
     if not hasattr(curves, '__len__') and curves is not None:
         self._curve = curves
         curves = [curves]
     if curves is None:
         curves = []
     self._curves = filter(lambda c: c is not None, curves)
     self._lastUpdate = 0
     self.updated = Event()
     
     # these are triggered by Timelines
     self.started = Event()
     self.finished = Event()
Ejemplo n.º 9
0
class Toggle(Rectangle, Clickable):
    def __init__(self, unsetColor=(1.0,1.0,1.0), setColor=(0.0,0.0,0.0), opacity=1.0, 
        borderColor=(0.0,0.0,0.0), borderWidth=1.0, value=True):
        
        Rectangle.__init__(self)
        Clickable.__init__(self)
        self.clicked.addResponder(self._clicked)
        self.toggled = Event()
        
        self._value = value
        self._isSet = False
        
        self.unsetColor = unsetColor
        self.setColor = setColor
        self._setFillColor()
        
        self.fillOpacity = opacity
        self.borderColor = borderColor
        self.borderWidth = borderWidth
                
    def _setFillColor(self):
        if self._isSet:
            self.fillColor = self.setColor
        else:
            self.fillColor = self.unsetColor
            
    def _clicked(self, button):
        if button == 1:
            self.toggle()
            
    def _toggleInner(self, isSet):
        self._isSet = isSet
        self._setFillColor()
            
    def toggle(self, isSet=None):
        if isSet is None:
            isSet = (not self._isSet)
        self._toggleInner(isSet)
        self.toggled.trigger(self._value, self._isSet)
Ejemplo n.º 10
0
class Action:
    def __init__(self, curves=None):
        if not hasattr(curves, '__len__') and curves is not None:
            self._curve = curves
            curves = [curves]
        if curves is None:
            curves = []
        self._curves = filter(lambda c: c is not None, curves)
        self._lastUpdate = 0
        self.updated = Event()
        
        # these are triggered by Timelines
        self.started = Event()
        self.finished = Event()

    def conflictsWith(self, other):
        return False

    def overlaps(self, other):
        return ((other.start() <= self.start() <= other.end()) or
                (other.start() <= self.end() <= other.end()))

    def start(self):
        return min([c.start() for c in self._curves])

    def end(self):
        if self._curves is None:
            return None
        return max([c.end() for c in self._curves])

    def length(self):
        return self.end() - self.start()

    def _innerStarted(self):
        return self._lastUpdate >= self.start()

    def _innerFinished(self):
        return self._lastUpdate >= self.end()
        
    def started(self):
        c = Condition(self._innerStarted)
        self.updated.addResponder(c.poll)
        return c

    def finished(self):
        c = Condition(self._innerFinished)
        self.updated.addResponder(c.poll)
        return c
    
    def update(self, time):
        self._lastUpdate = time
        self.updated.trigger()
Ejemplo n.º 11
0
 def __init__(self, unsetColor=(1.0,1.0,1.0), setColor=(0.0,0.0,0.0), opacity=1.0, 
     borderColor=(0.0,0.0,0.0), borderWidth=1.0, value=True):
     
     Rectangle.__init__(self)
     Clickable.__init__(self)
     self.clicked.addResponder(self._clicked)
     self.toggled = Event()
     
     self._value = value
     self._isSet = False
     
     self.unsetColor = unsetColor
     self.setColor = setColor
     self._setFillColor()
     
     self.fillOpacity = opacity
     self.borderColor = borderColor
     self.borderWidth = borderWidth
Ejemplo n.º 12
0
class Mouse(Input):
    def __init__(self):
        self.lastpos = None
        self.pos = None
        
        self.move = Event()
        self.down = Event()
        self.up = Event()
        self.items = [self.move, self.down, self.up]
    def update(self, e):
        if e.type == MOUSEMOTION:
            self.lastpos = self.pos
            # solidfuel mouse is y-flipped
            self.pos = (e.pos[0], getDisplay().h - e.pos[1])
            self.move.trigger(e.rel)
        elif e.type == MOUSEBUTTONDOWN:
            self.down.trigger(e.button)
        elif e.type == MOUSEBUTTONUP:
            self.up.trigger(e.button)
Ejemplo n.º 13
0
 def __init__(self):
     MouseTracking.__init__(self)
     self._clicking = False
     self.mouseDown.addResponder(self._clickStart)
     self.mouseUp.addResponder(self._clickEnd)
     self.clicked = Event()
Ejemplo n.º 14
0
 def __init__(self):
     self.down = Event()
     self.up = Event()
     self.items = [self.down, self.up]