qmsk/dmx/heads.py
author Tero Marttila <terom@paivola.fi>
Thu, 01 May 2014 23:34:20 +0300
changeset 83 136e210fce82
child 84 9ebf1a2cee3a
permissions -rw-r--r--
qmsk.dmx: new Head-based model/view; output/updates not yet implemented
"""
    High-level DMX output.
"""

class Head (object) :
    CHANNELS = None

    def __init__ (self, channel) :
        self.channel = channel
        self.channels = self.init()
        self.attrs = { }

    def init (self) :
        if self.CHANNELS :
            return self.CHANNELS
        else :
            raise NotImplementedError()

    def __setitem__ (self, attr, value) :
        if attr in self.channels :
            self.attrs[attr] = value
        else :
            raise KeyError(attr)

    def __getitem__ (self, attr) :
        if attr in self.channels :
            return self.attrs.get(attr, 0)
        else :
            raise KeyError(attr)
 
    def alpha (self, alpha=None) :
        if alpha is not None :
            self['alpha'] = alpha
        
        if 'alpha' in self.channels :
            return dict(alpha=self['alpha'])
        else :
            return None

    def color (self, red=None, green=None, blue=None) :
        if red is not None :
            self['red'] = red
        if green is not None :
            self['green'] = green
        if blue is not None :
            self['blue'] = blue
        
        if 'red' in self.channels and 'green' in self.channels and 'blue' in self.channels :
            return dict(red=self['red'], green=self['green'], blue=self['blue'])
        else :
            return None

    def __iter__ (self) :
        for attr in self.channels :
            yield self.attrs.get(attr, 0)

    def __call__ (self, dmx) :
        dmx[self.channel] = tuple(self)

class Stairville_LEDPar56 (Head) :
    CHANNELS = [
        'control1',
        'red',
        'green',
        'blue',
        'control2',
    ]

class Dimmer (Head) :
    CHANNELS = [
        'alpha',
    ]

class AmericanDJ_MegaTri60_Mode2 (Head) :
    CHANNELS = [
        'red',
        'green',
        'blue',
        'control',
        'alpha',
    ]