int Doc::totalPowerConsumption(int& fuzzy) const { int totalPowerConsumption = 0; // Make sure fuzzy starts from zero fuzzy = 0; QListIterator <Fixture*> fxit(fixtures()); while (fxit.hasNext() == true) { Fixture* fxi(fxit.next()); Q_ASSERT(fxi != NULL); // Generic dimmer has no mode and physical if (fxi->isDimmer() == false && fxi->fixtureMode() != NULL) { QLCPhysical phys = fxi->fixtureMode()->physical(); if (phys.powerConsumption() > 0) totalPowerConsumption += phys.powerConsumption(); else fuzzy++; } else { fuzzy++; } } return totalPowerConsumption; }
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; }
bool Doc::saveXML(QDomDocument* doc, QDomElement* wksp_root) { QDomElement root; Q_ASSERT(doc != NULL); Q_ASSERT(wksp_root != NULL); /* Create the master Engine node */ root = doc->createElement(KXMLQLCEngine); wksp_root->appendChild(root); /* Write fixtures into an XML document */ QListIterator <Fixture*> fxit(fixtures()); while (fxit.hasNext() == true) { Fixture* fxi(fxit.next()); Q_ASSERT(fxi != NULL); fxi->saveXML(doc, &root); } /* Write functions into an XML document */ QListIterator <Function*> funcit(functions()); while (funcit.hasNext() == true) { Function* func(funcit.next()); Q_ASSERT(func != NULL); func->saveXML(doc, &root); } QListIterator <FixtureGroup*> grpit(fixtureGroups()); while (grpit.hasNext() == true) { FixtureGroup* grp(grpit.next()); Q_ASSERT(grp != NULL); grp->saveXML(doc, &root); } return true; }
void Doc::clearContents() { emit clearing(); // Delete all function instances QListIterator <quint32> funcit(m_functions.keys()); while (funcit.hasNext() == true) { Function* func = m_functions.take(funcit.next()); emit functionRemoved(func->id()); delete func; } // Delete all fixture instances QListIterator <quint32> fxit(m_fixtures.keys()); while (fxit.hasNext() == true) { Fixture* fxi = m_fixtures.take(fxit.next()); emit fixtureRemoved(fxi->id()); delete fxi; } // Delete all fixture groups QListIterator <quint32> grpit(m_fixtureGroups.keys()); while (grpit.hasNext() == true) { FixtureGroup* grp = m_fixtureGroups.take(grpit.next()); emit fixtureGroupRemoved(grp->id()); delete grp; } m_latestFunctionId = 0; m_latestFixtureId = 0; m_latestFixtureGroupId = 0; m_addresses.clear(); emit cleared(); }
void Doc::clearContents() { emit clearing(); m_clipboard->resetContents(); if (m_monitorProps != NULL) m_monitorProps->reset(); destroyAudioCapture(); // Delete all function instances QListIterator <quint32> funcit(m_functions.keys()); while (funcit.hasNext() == true) { Function* func = m_functions.take(funcit.next()); if (func == NULL) continue; emit functionRemoved(func->id()); delete func; } // Delete all fixture groups QListIterator <quint32> grpit(m_fixtureGroups.keys()); while (grpit.hasNext() == true) { FixtureGroup* grp = m_fixtureGroups.take(grpit.next()); quint32 grpID = grp->id(); delete grp; emit fixtureGroupRemoved(grpID); } // Delete all fixture instances QListIterator <quint32> fxit(m_fixtures.keys()); while (fxit.hasNext() == true) { Fixture* fxi = m_fixtures.take(fxit.next()); quint32 fxID = fxi->id(); delete fxi; emit fixtureRemoved(fxID); } // Delete all channels groups QListIterator <quint32> grpchans(m_channelsGroups.keys()); while (grpchans.hasNext() == true) { ChannelsGroup* grp = m_channelsGroups.take(grpchans.next()); emit channelsGroupRemoved(grp->id()); delete grp; } m_orderedGroups.clear(); m_latestFunctionId = 0; m_latestFixtureId = 0; m_latestFixtureGroupId = 0; m_latestChannelsGroupId = 0; m_addresses.clear(); emit cleared(); }
void VCXYPadProperties::slotAddClicked() { /* Put all fixtures already present into a list of fixtures that will be disabled in the fixture selection dialog */ QList <GroupHead> disabled; QTreeWidgetItemIterator twit(m_tree); while (*twit != NULL) { QVariant var((*twit)->data(KColumnFixture, Qt::UserRole)); VCXYPadFixture fxi(m_doc, var); disabled << fxi.head(); ++twit; } /* Disable all fixtures that don't have pan OR tilt channels */ QListIterator <Fixture*> fxit(m_doc->fixtures()); while (fxit.hasNext() == true) { Fixture* fixture(fxit.next()); Q_ASSERT(fixture != NULL); // If a channel with pan or tilt group exists, don't disable this fixture if (fixture->channel(QLCChannel::Pan) == QLCChannel::invalid() && fixture->channel(QLCChannel::Tilt) == QLCChannel::invalid()) { // Disable all fixtures without pan or tilt channels disabled << fixture->id(); } else { QVector <QLCFixtureHead> const& heads = fixture->fixtureMode()->heads(); for (int i = 0; i < heads.size(); ++i) { if (heads[i].panMsbChannel() == QLCChannel::invalid() && heads[i].tiltMsbChannel() == QLCChannel::invalid() && heads[i].panLsbChannel() == QLCChannel::invalid() && heads[i].tiltLsbChannel() == QLCChannel::invalid()) { // Disable heads without pan or tilt channels disabled << GroupHead(fixture->id(), i); } } } } /* Get a list of new fixtures to add to the pad */ QTreeWidgetItem* item = NULL; FixtureSelection fs(this, m_doc); fs.setMultiSelection(true); fs.setSelectionMode(FixtureSelection::Heads); fs.setDisabledHeads(disabled); if (fs.exec() == QDialog::Accepted) { QListIterator <GroupHead> it(fs.selectedHeads()); while (it.hasNext() == true) { VCXYPadFixture fxi(m_doc); fxi.setHead(it.next()); item = new QTreeWidgetItem(m_tree); updateFixtureItem(item, fxi); } } if (item != NULL) m_tree->setCurrentItem(item); m_tree->resizeColumnToContents(KColumnFixture); m_tree->resizeColumnToContents(KColumnXAxis); m_tree->resizeColumnToContents(KColumnYAxis); }