void App::loadFixtureDefinition(const QString& path) { QLCFixtureDef* fixtureDef = NULL; /* Attempt to create a fixture definition from the selected file */ QString error(tr("Unrecognized file extension: %1").arg(path)); if (path.toLower().endsWith(KExtFixture) == true) fixtureDef = loadQXF(path, error); else if (path.toLower().endsWith(KExtAvolitesFixture) == true) fixtureDef = loadD4(path, error); else fixtureDef = NULL; if (fixtureDef != NULL) { /* Create a new sub window and put a fixture editor widget in that sub window with the newly-created fixture def */ QMdiSubWindow* sub = new QMdiSubWindow(centralWidget()); QLCFixtureEditor* editor = new QLCFixtureEditor(sub, fixtureDef, path); sub->setWidget(editor); sub->setAttribute(Qt::WA_DeleteOnClose); qobject_cast<QMdiArea*> (centralWidget())->addSubWindow(sub); editor->show(); sub->show(); } else { QMessageBox::warning(this, tr("Fixture loading failed"), tr("Unable to load fixture definition: ") + error); } }
bool QLCFixtureDefCache::load(const QDir& dir) { qDebug() << Q_FUNC_INFO << dir.path(); if (dir.exists() == false || dir.isReadable() == false) return false; /* Attempt to read all specified files from the given directory */ QStringListIterator it(dir.entryList()); while (it.hasNext() == true) { QString path(dir.absoluteFilePath(it.next())); if (path.toLower().endsWith(KExtFixture) == true) loadQXF(path); else if (path.toLower().endsWith(KExtAvolitesFixture) == true) loadD4(path); else qWarning() << Q_FUNC_INFO << "Unrecognized fixture extension:" << path; } return true; }
bool QLCFixtureDefCache::loadMap(const QDir &dir) { qDebug() << Q_FUNC_INFO << dir.path(); if (dir.exists() == false || dir.isReadable() == false) return false; QString mapPath(dir.absoluteFilePath(FIXTURES_MAP_NAME)); if (mapPath.isEmpty() == true) return false; // cache the map path to be used when composing the fixture // definition absolute path m_mapAbsolutePath = dir.absolutePath(); QXmlStreamReader *doc = QLCFile::getXMLReader(mapPath); if (doc == NULL || doc->device() == NULL || doc->hasError()) { qWarning() << Q_FUNC_INFO << "Unable to read from" << mapPath; return false; } while (!doc->atEnd()) { if (doc->readNext() == QXmlStreamReader::DTD) break; } if (doc->hasError()) { QLCFile::releaseXMLReader(doc); return false; } // make sure the doc type is FixtureMap if (doc->dtdName() != KXMLQLCFixtureMap) { qWarning() << Q_FUNC_INFO << mapPath << "is not a fixture map file"; QLCFile::releaseXMLReader(doc); return false; } if (doc->readNextStartElement() == false) { QLCFile::releaseXMLReader(doc); return false; } // make sure the root tag is FixtureMap if (doc->name() != KXMLQLCFixtureMap) { qWarning() << Q_FUNC_INFO << mapPath << "is not a fixture map file"; QLCFile::releaseXMLReader(doc); return false; } int fxCount = 0; QString manufacturer = ""; while (doc->readNextStartElement()) { if (doc->name() == "M") { if (doc->attributes().hasAttribute("n")) { manufacturer = doc->attributes().value("n").toString(); fxCount += loadMapManufacturer(doc, manufacturer); } } else { qWarning() << Q_FUNC_INFO << "Unknown Fixture Map tag: " << doc->name(); doc->skipCurrentElement(); } } qDebug() << fxCount << "fixtures found in map"; #if 0 /* Attempt to read all files not in FixtureMap */ QStringList definitionPaths; // Gather a list of manufacturers QListIterator <QLCFixtureDef*> mfit(m_defs); while (mfit.hasNext() == true) definitionPaths << mfit.next()->definitionSourceFile(); QStringListIterator it(dir.entryList()); while (it.hasNext() == true) { QString path(dir.absoluteFilePath(it.next())); if (definitionPaths.contains(path)) continue; qWarning() << path << "not in" << FIXTURES_MAP_NAME; if (path.toLower().endsWith(KExtFixture) == true) loadQXF(path); else if (path.toLower().endsWith(KExtAvolitesFixture) == true) loadD4(path); else qWarning() << Q_FUNC_INFO << "Unrecognized fixture extension:" << path; } #endif return true; }