bool Doc::addFixture(Fixture* fixture, quint32 id) { Q_ASSERT(fixture != NULL); // No ID given, this method can assign one if (id == Fixture::invalidId()) id = createFixtureId(); if (m_fixtures.contains(id) == true || id == Fixture::invalidId()) { qWarning() << Q_FUNC_INFO << "a fixture with ID" << id << "already exists!"; return false; } else { fixture->setID(id); m_fixtures.insert(id, fixture); /* Patch fixture change signals thru Doc */ connect(fixture, SIGNAL(changed(quint32)), this, SLOT(slotFixtureChanged(quint32))); /* Keep track of fixture addresses */ for (uint i = fixture->universeAddress(); i < fixture->universeAddress() + fixture->channels(); i++) { m_addresses[i] = id; } // Add the fixture channels capabilities to the universe they belong QList<Universe *> universes = inputOutputMap()->claimUniverses(); int uni = fixture->universe(); // TODO !!! if a universe for this fixture doesn't exist, add it !!! QList<int> forcedHTP = fixture->forcedHTPChannels(); QList<int> forcedLTP = fixture->forcedLTPChannels(); for (quint32 i = 0 ; i < fixture->channels(); i++) { const QLCChannel* channel(fixture->channel(i)); if (forcedHTP.contains(i)) universes.at(uni)->setChannelCapability(fixture->address() + i, channel->group(), Universe::HTP); else if (forcedLTP.contains(i)) universes.at(uni)->setChannelCapability(fixture->address() + i, channel->group(), Universe::LTP); else universes.at(uni)->setChannelCapability(fixture->address() + i, channel->group()); ChannelModifier *mod = fixture->channelModifier(i); universes.at(uni)->setChannelModifier(fixture->address() + i, mod); } inputOutputMap()->releaseUniverses(true); emit fixtureAdded(id); setModified(); return true; } }
Monitor::Monitor(QWidget* parent, Doc* doc, Qt::WindowFlags f) : QWidget(parent, f) , m_doc(doc) , m_toolBar(NULL) , m_scrollArea(NULL) , m_monitorWidget(NULL) { Q_ASSERT(doc != NULL); m_props = m_doc->monitorProperties(); /* Master layout for toolbar and scroll area */ new QVBoxLayout(this); initView(); /* Listen to fixture additions and changes from Doc */ connect(m_doc, SIGNAL(fixtureAdded(quint32)), this, SLOT(slotFixtureAdded(quint32))); connect(m_doc, SIGNAL(fixtureChanged(quint32)), this, SLOT(slotFixtureChanged(quint32))); connect(m_doc, SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotFixtureRemoved(quint32))); connect(m_doc->inputOutputMap(), SIGNAL(universesWritten(int, const QByteArray&)), this, SLOT(slotUniversesWritten(int, const QByteArray&))); }
bool Doc::addFixture(Fixture* fixture, quint32 id) { Q_ASSERT(fixture != NULL); // No ID given, this method can assign one if (id == Fixture::invalidId()) id = createFixtureId(); if (m_fixtures.contains(id) == true || id == Fixture::invalidId()) { qWarning() << Q_FUNC_INFO << "a fixture with ID" << id << "already exists!"; return false; } else { fixture->setID(id); m_fixtures[id] = fixture; /* Patch fixture change signals thru Doc */ connect(fixture, SIGNAL(changed(quint32)), this, SLOT(slotFixtureChanged(quint32))); /* Keep track of fixture addresses */ for (uint i = fixture->universeAddress(); i < fixture->universeAddress() + fixture->channels(); i++) { m_addresses[i] = id; } emit fixtureAdded(id); setModified(); return true; } }
void SimpleDesk::initUniverseSliders() { qDebug() << Q_FUNC_INFO; quint32 start = (m_universePageSpin->value() - 1) * m_channelsPerPage; for (quint32 i = 0; i < m_channelsPerPage; i++) { ConsoleChannel* slider = NULL; const Fixture* fxi = m_doc->fixture(m_doc->fixtureForAddress(start + i)); if (fxi == NULL) slider = new ConsoleChannel(this, m_doc, Fixture::invalidId(), i, false); else { uint ch = (start + i) - fxi->universeAddress(); slider = new ConsoleChannel(this, m_doc, fxi->id(), ch, false); } m_universeGroup->layout()->addWidget(slider); m_universeSliders << slider; connect(slider, SIGNAL(valueChanged(quint32,quint32,uchar)), this, SLOT(slotUniverseSliderValueChanged(quint32,quint32,uchar))); } connect(m_doc, SIGNAL(fixtureAdded(quint32)), this, SLOT(slotUpdateUniverseSliders())); connect(m_doc, SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotUpdateUniverseSliders())); connect(m_doc, SIGNAL(fixtureChanged(quint32)), this, SLOT(slotUpdateUniverseSliders())); }
void Doc_Test::addFixture() { QVERIFY(m_doc->isModified() == false); QSignalSpy spy(m_doc, SIGNAL(fixtureAdded(quint32))); /* Add a completely new fixture */ Fixture* f1 = new Fixture(m_doc); f1->setName("One"); f1->setChannels(5); f1->setAddress(0); f1->setUniverse(0); QVERIFY(m_doc->addFixture(f1) == true); QVERIFY(f1->id() == 0); QVERIFY(m_doc->isModified() == true); QVERIFY(spy.size() == 1); QVERIFY(spy.at(0).at(0) == f1->id()); m_doc->resetModified(); /* Add another fixture but attempt to put assign it an already-assigned fixture ID. */ Fixture* f2 = new Fixture(m_doc); f2->setName("Two"); f2->setChannels(5); f2->setAddress(0); f2->setUniverse(0); QVERIFY(m_doc->addFixture(f2, f1->id()) == false); QVERIFY(m_doc->isModified() == false); QVERIFY(spy.size() == 1); QVERIFY(spy.at(0).at(0) == f1->id()); /* But, the fixture can be added if we give it an unassigned ID. */ QVERIFY(m_doc->addFixture(f2, f1->id() + 1) == true); QVERIFY(f1->id() == 0); QVERIFY(f2->id() == 1); QVERIFY(m_doc->isModified() == true); QVERIFY(spy.size() == 2); QVERIFY(spy.at(1).at(0) == f2->id()); m_doc->resetModified(); /* Add again a completely new fixture, with automatic ID assignment */ Fixture* f3 = new Fixture(m_doc); f3->setName("Three"); f3->setChannels(5); f3->setAddress(0); f3->setUniverse(0); QVERIFY(m_doc->addFixture(f3) == true); QVERIFY(f1->id() == 0); QVERIFY(f2->id() == 1); QVERIFY(f3->id() == 2); QVERIFY(m_doc->isModified() == true); QVERIFY(spy.size() == 3); QVERIFY(spy.at(2).at(0) == f3->id()); }
void FixtureManager::slotDocumentChanged(Doc* doc) { Q_ASSERT(doc != NULL); /* Connect fixture list change signals from the new document object */ connect(doc, SIGNAL(fixtureAdded(t_fixture_id)), this, SLOT(slotFixtureAdded(t_fixture_id))); connect(doc, SIGNAL(fixtureRemoved(t_fixture_id)), this, SLOT(slotFixtureRemoved(t_fixture_id))); }
void MonitorDmxMode::disconnectSignals() { disconnect(doc(), SIGNAL(fixtureAdded(quint32)), this, SLOT(slotFixtureAdded(quint32))); disconnect(doc(), SIGNAL(fixtureChanged(quint32)), this, SLOT(slotFixtureChanged(quint32))); disconnect(doc(), SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotFixtureRemoved(quint32))); disconnect(doc()->inputOutputMap(), SIGNAL(universesWritten(int, const QByteArray&)), this, SLOT(slotUniversesWritten(int, const QByteArray&))); }
void MonitorDmxMode::connectSignals() { /* Listen to fixture additions and changes from Doc */ connect(doc(), SIGNAL(fixtureAdded(quint32)), this, SLOT(slotFixtureAdded(quint32))); connect(doc(), SIGNAL(fixtureChanged(quint32)), this, SLOT(slotFixtureChanged(quint32))); connect(doc(), SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotFixtureRemoved(quint32))); connect(doc()->inputOutputMap(), SIGNAL(universesWritten(int, const QByteArray&)), this, SLOT(slotUniversesWritten(int, const QByteArray&))); }
Monitor::Monitor(QWidget* parent, Qt::WindowFlags f) : QWidget(parent, f) { /* Master layout for toolbar and scroll area */ new QVBoxLayout(this); /* Scroll area that contains the monitor widget */ m_scrollArea = new QScrollArea(this); m_scrollArea->setWidgetResizable(true); layout()->addWidget(m_scrollArea); /* Monitor widget that contains all MonitorFixtures */ m_monitorWidget = new QWidget(m_scrollArea); m_monitorWidget->setBackgroundRole(QPalette::Dark); m_monitorLayout = new MonitorLayout(m_monitorWidget); m_monitorLayout->setSpacing(1); m_monitorLayout->setMargin(1); /* Load global settings */ loadSettings(); /* Create toolbar */ initToolBar(); /* Create a bunch of MonitorFixtures for each fixture */ for (t_fixture_id i = 0; i < KFixtureArraySize; i++) { Fixture* fxi = _app->doc()->fixture(i); if (fxi != NULL) createMonitorFixture(fxi); } /* Show the master container widgets */ m_scrollArea->setWidget(m_monitorWidget); m_monitorWidget->show(); m_scrollArea->show(); /* Listen to Document changes */ connect(_app, SIGNAL(documentChanged(Doc*)), this, SLOT(slotDocumentChanged(Doc*))); /* Listen to fixture additions and changes from Doc */ connect(_app->doc(), SIGNAL(fixtureAdded(t_fixture_id)), this, SLOT(slotFixtureAdded(t_fixture_id))); connect(_app->doc(), SIGNAL(fixtureChanged(t_fixture_id)), this, SLOT(slotFixtureChanged(t_fixture_id))); m_timer = startTimer(1000 / 50); QWidget::show(); }
Monitor::Monitor(QWidget* parent, Doc* doc, Qt::WindowFlags f) : QWidget(parent, f) , m_doc(doc) , m_props(NULL) , m_toolBar(NULL) , m_scrollArea(NULL) , m_monitorWidget(NULL) , m_monitorLayout(NULL) , m_currentUniverse(Universe::invalid()) , m_splitter(NULL) , m_graphicsView(NULL) , m_fixtureItemEditor(NULL) , m_gridWSpin(NULL) , m_gridHSpin(NULL) , m_unitsCombo(NULL) , m_labelsAction(NULL) { Q_ASSERT(doc != NULL); m_props = m_doc->monitorProperties(); /* Master layout for toolbar and scroll area */ new QVBoxLayout(this); initView(); /* Listen to fixture additions and changes from Doc */ connect(m_doc, SIGNAL(fixtureAdded(quint32)), this, SLOT(slotFixtureAdded(quint32))); connect(m_doc, SIGNAL(fixtureChanged(quint32)), this, SLOT(slotFixtureChanged(quint32))); connect(m_doc, SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotFixtureRemoved(quint32))); connect(m_doc->masterTimer(), SIGNAL(functionStarted(quint32)), this, SLOT(slotFunctionStarted(quint32))); connect(m_doc->inputOutputMap(), SIGNAL(universesWritten(int, const QByteArray&)), this, SLOT(slotUniversesWritten(int, const QByteArray&))); }