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)