Exemplo n.º 1
0
class Manager(object):
    def __init__(self, config_file, no_olad):
        self.no_olad = no_olad
        if not self.no_olad:
            self.wrapper = ClientWrapper()
        else:
            self.wrapper = None
        self._config = Config(config_file, self)
        self.fixture_types = self._config.load_fixture_types()
        self.constants = self._config.load_constants()
        self.fixtures = self._config.load_fixtures()
        self.scenes = self._config.load_scenes()
        self.set_scene(self.scenes[self._config.load_default_scene()])
        self.win = MyWindow(self)

    def set_scene(self, scene, reset=True):
        self.current_scene = scene
        if reset:
            self.current_scene.reset()
        if hasattr(self, 'win'):
            source = self.win.builder.get_object('source')
            model = source.get_model()
            for i, item in enumerate(model):
                if item[0] == self.current_scene.name:
                    source.set_active(i)

    def run(self):
        rdata = array.array('B')
        for i in range(0, 512):
            rdata.append(0)

        # Use the scene to set the fixtures values
        for fixture, values in self.current_scene.fixtures.iteritems():
            for chan, value in values.iteritems():
                # chan_value = self.fixtures[fixture.name].chans[chan]
                self.fixtures[fixture.name].values[chan] = cap(value)
                if not self.fixtures[fixture.name].override.get(chan, None):
                    self.fixtures[fixture.name].sliders[chan].set_value(value)

        for fixture_name, fixture in self.fixtures.iteritems():
            # print fixture.values
            for chan, value in fixture.values.iteritems():
                if self.fixtures[fixture.name].override.get(chan, None):
                    value = int(self.fixtures[fixture.name].sliders[chan].get_value())
                chan_value = self.fixtures[fixture.name].chans[chan]
                rdata[fixture.start_address + chan_value - 2] = value
        if not self.no_olad:
            try:
                self.wrapper.Client().SendDmx(1, rdata, DmxSent)
            except:
                st = time.time()
                self.wrapper.Stop()
                self.wrapper = ClientWrapper()
                print "We had to reset"
                print time.time() - st
        GObject.timeout_add(10, self.run)