Mercurial > hg > easaier-soundaccess
changeset 251:2ea04b3f9141
support new queries and timeline info
author | lbajardsilogic |
---|---|
date | Thu, 12 Jun 2008 10:17:48 +0000 |
parents | c12986afc03c |
children | 3e35ed5332cb |
files | data/fileio/AudioSourceInfoReader.cpp data/fileio/ModelReader.cpp data/fileio/ModelReader.h data/fileio/SparqlResultsReader.cpp data/model/AudioSourceInfoModel.cpp sv/main/EasaierSessionManager.cpp sv/main/MainWindow.cpp widgets/InfoWidget.cpp |
diffstat | 8 files changed, 286 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/data/fileio/AudioSourceInfoReader.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/data/fileio/AudioSourceInfoReader.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -146,12 +146,12 @@ } else if (name == "result") { - m_model->addInfo("composer", m_composer); + /*m_model->addInfo("composer", m_composer); m_model->addInfo("arranger", m_arranger); m_composer.clear(); m_arranger.clear(); m_composer.append(" -"); - m_arranger.append(" -"); + m_arranger.append(" -");*/ } return true;
--- a/data/fileio/ModelReader.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/data/fileio/ModelReader.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -62,7 +62,9 @@ m_datasetSeparator(" "), m_inData(false), m_inRow(false), - m_rowNumber(0) + m_rowNumber(0), + m_inBinding(false), + m_sampleRate(44100) {} bool ModelHandler::startElement(const QString &namespaceURI, const QString &localName, @@ -73,17 +75,7 @@ bool ok = false; - // Valid element names: - // - // easaier - // data - // dataset - // model - // point - // row - // interval - - if (name == "easaier") { + /*if (name == "easaier") { // nothing needed ok = true; @@ -122,7 +114,42 @@ ok = addIntervalToDataset(attributes); - } + } */ + + if (name == "sparql") { + + // nothing needed + ok = true; + + } else if (name == "head") { + + // nothing needed + ok = true; + + } else if (name == "variable") { + + // nothing needed + ok = true; + + } else if (name == "results") { + + // nothing needed + ok = true; + + } else if (name == "result") { + + //m_resultsWidget->newResult(); + ok = true; + + } else if (name == "binding") { + + m_curBindingName = attributes.value("name"); + ok = true; + + } else if ( (name == "uri") || (name == "literal") ) { + m_inBinding = true; + ok = true; + } if (!ok) { std::cerr << "WARNING: ModelReader-XML: Failed to completely process element \"" @@ -135,7 +162,7 @@ bool ModelHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName) { - QString name = qName.toLower(); + /*QString name = qName.toLower(); if (name == "dataset") { @@ -156,21 +183,43 @@ else if (name == "row") { m_inRow = false; - } + } */ + QString name = qName.toLower(); + + if ( (name == "uri") || (name == "literal") ) + { + m_inBinding = false; + m_curBindingName = ""; + + } else if (name == "result") + { + /*m_resultsWidget->addInfo("composer", m_composer); + m_resultsWidget->addInfo("arranger", m_arranger); + m_composer.clear(); + m_arranger.clear(); + m_composer.append(" -"); + m_arranger.append(" -");*/ + + addNewData(); + } return true; } bool ModelHandler::characters(const QString &str) { - bool ok = false; + /*bool ok = false; if (m_inRow) { ok = readRowData(str); if (!ok) { std::cerr << "WARNING: ModelReader-XML: Failed to read row data content for row " << m_rowNumber << std::endl; } - } + }*/ + if (m_inBinding) + { + m_info[m_curBindingName] = str; + } return true; } @@ -197,6 +246,179 @@ return QXmlDefaultHandler::fatalError(exception); } +void ModelHandler::addNewData() +{ + m_layer = 0; + m_model = 0; + + if (m_info.find("beginsAt") != m_info.end()) + { + addDataInterval(); + } else if (m_info.find("at") != m_info.end()) + { + addDataTimeInstants(); + } + + m_info.clear(); +} + +void ModelHandler::addDataInterval() +{ + std::map<QString, QString>::iterator iter; + + std::map<QString, QString>::iterator iterEventLabel = m_info.find("event_label"); + if (iterEventLabel == m_info.end()) + return; + + QString eventLabel = iterEventLabel->second; + + std::set<Layer *> layers = m_document->getLayers(); + std::set<Layer *>::iterator iterLayer; + bool findLayer = false; + + for (iterLayer=layers.begin(); iterLayer != layers.end(); iterLayer++) + { + if ((*iterLayer)->objectName() == eventLabel) + { + m_layer = (*iterLayer); + findLayer = true; + m_model = m_layer->getModel(); + } + } + + if (!findLayer) + { + //create layer + m_layer = m_document->createLayer(LayerFactory::getInstance()->getLayerTypeForName("interval")); + + if (!m_layer) { + std::cerr << "WARNING: modelreader-XML: Failed to add layer of type interval" << std::endl; + return ; + } + m_layer->setObjectName(eventLabel); + + m_layer->setModelName(eventLabel); + //m_layer->setModelId(m_id); + + //create model + IntervalModel * model = new IntervalModel(m_sampleRate, 1, true); + m_model = model; + m_model->setObjectName(eventLabel); + + //link model, layer document and view + if (m_model && m_layer) + { + m_document->addImportedModel(m_model); + m_document->setModel(m_layer, m_model); + } + if (m_pane && m_layer) + { + m_document->addLayerToView(m_pane, m_layer); + } + } + + //add interval + IntervalModel *im = dynamic_cast<IntervalModel*> (m_model); + if (im) + { + //start + iter = m_info.find("beginsAt"); + if (iter == m_info.end()) + return; + QString beginAt = iter->second; + long start = beginAt.mid(2, beginAt.length()-3).toDouble()*m_sampleRate; + //end + iter = m_info.find("duration"); + if (iter == m_info.end()) + return; + QString duration = iter->second; + long end = duration.mid(2, duration.length()-3).toDouble()*m_sampleRate; + //label + QString label = ""; + for (iter = m_info.begin(); iter != m_info.end(); iter++) + { + QString propertylabel = iter->first; + if ((propertylabel != "beginsAt") && (propertylabel != "duration") && + (propertylabel != "event_label") && (propertylabel != "signal") ) + label += iter->second + " - "; + } + //value + float value = 0.5; + im->addInterval(start, end, label, value); + } +} + +void ModelHandler::addDataTimeInstants() +{ + std::map<QString, QString>::iterator iter; + + std::map<QString, QString>::iterator iterEventLabel = m_info.find("event_label"); + if (iterEventLabel == m_info.end()) + return; + + QString eventLabel = iterEventLabel->second; + + std::set<Layer *> layers = m_document->getLayers(); + std::set<Layer *>::iterator iterLayer; + bool findLayer = false; + + for (iterLayer=layers.begin(); iterLayer != layers.end(); iterLayer++) + { + if ((*iterLayer)->objectName() == eventLabel) + { + m_layer = (*iterLayer); + findLayer = true; + m_model = m_layer->getModel(); + } + } + + if (!findLayer) + { + //create layer + m_layer = m_document->createLayer(LayerFactory::getInstance()->getLayerTypeForName("timeinstants")); + + if (!m_layer) { + std::cerr << "WARNING: modelreader-XML: Failed to add layer of type timeinstants" << std::endl; + return ; + } + m_layer->setObjectName(eventLabel); + + m_layer->setModelName(eventLabel); + //m_layer->setModelId(m_id); + + //create model + SparseOneDimensionalModel *model = new SparseOneDimensionalModel(m_sampleRate, 512); + m_model = model; + m_model->setObjectName(eventLabel); + + //link model, layer document and view + if (m_model && m_layer) + { + m_document->addImportedModel(m_model); + m_document->setModel(m_layer, m_model); + } + if (m_pane && m_layer) + { + m_document->addLayerToView(m_pane, m_layer); + } + } + + //add point + SparseOneDimensionalModel *sodm = dynamic_cast<SparseOneDimensionalModel *> (m_model); + if (sodm) + { + //frame + iter = m_info.find("at"); + if (iter == m_info.end()) + return; + QString at = iter->second; + long frame = at.toDouble()*m_sampleRate; + + sodm->addPoint(SparseOneDimensionalModel::Point(frame, "")); + } + +} + #define READ_MANDATORY(TYPE, NAME, CONVERSION) \ TYPE NAME = attributes.value(#NAME).trimmed().CONVERSION(&ok); \ if (!ok) { \
--- a/data/fileio/ModelReader.h Tue Jun 10 16:06:57 2008 +0000 +++ b/data/fileio/ModelReader.h Thu Jun 12 10:17:48 2008 +0000 @@ -51,6 +51,10 @@ bool error(const QXmlParseException &exception); bool fatalError(const QXmlParseException &exception); + void addNewData(); + void addDataInterval(); + void addDataTimeInstants(); + bool readModel(const QXmlAttributes &attributes); bool readDatasetStart(const QXmlAttributes &attributes); bool readRowData(const QString &text); @@ -74,7 +78,13 @@ QString m_datasetSeparator; - QString m_modelName; + QString m_modelName; + + bool m_inBinding; + QString m_curBindingName; + std::map<QString, QString> m_info; + + int m_sampleRate; };
--- a/data/fileio/SparqlResultsReader.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/data/fileio/SparqlResultsReader.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -120,12 +120,12 @@ } else if (name == "result") { - m_resultsWidget->addInfo("composer", m_composer); + /*m_resultsWidget->addInfo("composer", m_composer); m_resultsWidget->addInfo("arranger", m_arranger); m_composer.clear(); m_arranger.clear(); m_composer.append(" -"); - m_arranger.append(" -"); + m_arranger.append(" -");*/ m_resultsWidget->saveCurResult(); } @@ -137,7 +137,7 @@ { if (m_inBinding) { - if (m_curBindingName.contains("composer")) + /*if (m_curBindingName.contains("composer")) { m_composer.append(" " + str); } @@ -146,9 +146,9 @@ m_arranger.append(" " + str); } else - { + {*/ m_resultsWidget->addInfo(m_curBindingName, str); - } + //} } return true;
--- a/data/model/AudioSourceInfoModel.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/data/model/AudioSourceInfoModel.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -28,7 +28,9 @@ { QStringList* infolist = info->second; if (!(infolist->contains(value))) + { infolist->push_back(value); + } } else {
--- a/sv/main/EasaierSessionManager.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/sv/main/EasaierSessionManager.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -488,9 +488,11 @@ void EasaierSessionManager::importMetadata(const QString& filename, Pane* pane) { - QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+filename; + QString query = m_httpClient->getServletName() + "?theme=getTimeLine&signal="+m_document->getAudioSourceInfoFileName()+"&event_label="+filename; - loadFile( query, filename, LoadedFile::METADATA); + QString file = "metadata/" + filename + ".txt"; + + loadFile( query, file, LoadedFile::METADATA); m_currentPane = pane; }
--- a/sv/main/MainWindow.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/sv/main/MainWindow.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -4086,7 +4086,7 @@ if (pane) { Layer *layer = pane->getSelectedLayer(); if (layer) { - m_document->removeLayerFromView(pane, layer); + m_document->/*deleteLayer(layer);*/removeLayerFromView(pane, layer); } } updateMenuStates();
--- a/widgets/InfoWidget.cpp Tue Jun 10 16:06:57 2008 +0000 +++ b/widgets/InfoWidget.cpp Thu Jun 12 10:17:48 2008 +0000 @@ -131,12 +131,28 @@ row++; } }*/ - - proper = new QLabel(iterInfo->first); - value = new QLabel(iterInfo->second->join(" ")); - //connect the main window to the linkActivated signal - //connect(value, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierLayer(QString))); - + if (iterInfo->first == "event_label") + { + proper = new QLabel(iterInfo->first); + value = new QLabel(iterInfo->second->join(" - ")); + QString label; + QStringList::const_iterator constIterator; + for (constIterator = iterInfo->second->constBegin(); constIterator != iterInfo->second->constEnd(); ++constIterator) + { + label += "<a href=\""; + label += *constIterator; + label += "\">"; + label += *constIterator; + label += "</a> - "; + } + value->setText(label); + //connect the main window to the linkActivated signal + connect(value, SIGNAL(linkActivated(QString)), MainWindow::instance(), SLOT(importEasaierLayer(QString))); + } + else { + proper = new QLabel(iterInfo->first); + value = new QLabel(iterInfo->second->join(" - ")); + } m_infoLayout->addWidget(proper, row, 2,1,1); m_infoLayout->addWidget(value, row, 4,1,1); row++;