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; } }
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; } }
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::replaceFixtures(QList<Fixture*> newFixturesList) { // Delete all fixture instances QListIterator <quint32> fxit(m_fixtures.keys()); while (fxit.hasNext() == true) { Fixture* fxi = m_fixtures.take(fxit.next()); delete fxi; m_fixturesListCacheUpToDate = false; } m_latestFixtureId = 0; m_addresses.clear(); foreach(Fixture *fixture, newFixturesList) { quint32 id = fixture->id(); // create a copy of the original cause remapping will // destroy it later Fixture *newFixture = new Fixture(this); newFixture->setID(id); newFixture->setName(fixture->name()); newFixture->setAddress(fixture->address()); newFixture->setUniverse(fixture->universe()); if (fixture->fixtureDef() == NULL || (fixture->fixtureDef()->manufacturer() == KXMLFixtureGeneric && fixture->fixtureDef()->model() == KXMLFixtureGeneric)) { newFixture->setChannels(fixture->channels()); } else { QLCFixtureDef *def = fixtureDefCache()->fixtureDef(fixture->fixtureDef()->manufacturer(), fixture->fixtureDef()->model()); QLCFixtureMode *mode = NULL; if (def != NULL) mode = def->mode(fixture->fixtureMode()->name()); newFixture->setFixtureDefinition(def, mode); } newFixture->setExcludeFadeChannels(fixture->excludeFadeChannels()); m_fixtures.insert(id, newFixture); m_fixturesListCacheUpToDate = false; /* Patch fixture change signals thru Doc */ connect(newFixture, SIGNAL(changed(quint32)), this, SLOT(slotFixtureChanged(quint32))); /* Keep track of fixture addresses */ for (uint i = newFixture->universeAddress(); i < newFixture->universeAddress() + newFixture->channels(); i++) { m_addresses[i] = id; } m_latestFixtureId = 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&))); }
int Monitor::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: channelStyleChanged((*reinterpret_cast< Monitor::ChannelStyle(*)>(_a[1]))); break; case 1: valueStyleChanged((*reinterpret_cast< Monitor::ValueStyle(*)>(_a[1]))); break; case 2: slotChooseFont(); break; case 3: slotChannelStyleTriggered(); break; case 4: slotValueStyleTriggered(); break; case 5: slotFixtureAdded((*reinterpret_cast< quint32(*)>(_a[1]))); break; case 6: slotFixtureChanged((*reinterpret_cast< quint32(*)>(_a[1]))); break; case 7: slotFixtureRemoved((*reinterpret_cast< quint32(*)>(_a[1]))); break; case 8: slotTimeout(); break; default: ; } _id -= 9; } return _id; }
void EFXEditor::initGeneralPage() { connect(m_nameEdit, SIGNAL(textEdited(const QString&)), this, SLOT(slotNameEdited(const QString&))); connect(m_tree, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(slotFixtureItemChanged(QTreeWidgetItem*,int))); connect(m_addFixtureButton, SIGNAL(clicked()), this, SLOT(slotAddFixtureClicked())); connect(m_removeFixtureButton, SIGNAL(clicked()), this, SLOT(slotRemoveFixtureClicked())); connect(m_raiseFixtureButton, SIGNAL(clicked()), this, SLOT(slotRaiseFixtureClicked())); connect(m_lowerFixtureButton, SIGNAL(clicked()), this, SLOT(slotLowerFixtureClicked())); connect(m_parallelRadio, SIGNAL(toggled(bool)), this, SLOT(slotParallelRadioToggled(bool))); connect(m_serialRadio, SIGNAL(toggled(bool)), this, SLOT(slotSerialRadioToggled(bool))); connect(m_asymmetricRadio, SIGNAL(toggled(bool)), this, SLOT(slotAsymmetricRadioToggled(bool))); // Test slots connect(m_testButton, SIGNAL(clicked()), this, SLOT(slotTestClicked())); connect(m_raiseFixtureButton, SIGNAL(clicked()), this, SLOT(slotRestartTest())); connect(m_lowerFixtureButton, SIGNAL(clicked()), this, SLOT(slotRestartTest())); connect(m_parallelRadio, SIGNAL(toggled(bool)), this, SLOT(slotRestartTest())); connect(m_serialRadio, SIGNAL(toggled(bool)), this, SLOT(slotRestartTest())); connect(m_asymmetricRadio, SIGNAL(toggled(bool)), this, SLOT(slotRestartTest())); // Doc connect(m_doc, SIGNAL(fixtureRemoved(quint32)), this, SLOT(slotFixtureRemoved())); connect(m_doc, SIGNAL(fixtureChanged(quint32)), this, SLOT(slotFixtureChanged())); /* Set the EFX's name to the name field */ m_nameEdit->setText(m_efx->name()); m_nameEdit->setSelection(0, m_nameEdit->text().length()); /* Resize columns to fit contents */ m_tree->header()->setResizeMode(QHeaderView::ResizeToContents); /* Put all of the EFX's fixtures to the tree view */ updateFixtureTree(); /* Set propagation mode */ if (m_efx->propagationMode() == EFX::Serial) m_serialRadio->setChecked(true); else if (m_efx->propagationMode() == EFX::Asymmetric) m_asymmetricRadio->setChecked(true); else m_parallelRadio->setChecked(true); /* Disable test button if we're in operate mode */ if (m_doc->mode() == Doc::Operate) m_testButton->setEnabled(false); }