Mercurial > hg > svcore
diff rdf/RDFImporter.cpp @ 510:af7b6e55895b
* Ensure text models are exported with text properties in RDF, and
imported back into text models again (instead of time/value models)
author | Chris Cannam |
---|---|
date | Mon, 08 Dec 2008 11:53:10 +0000 |
parents | 1b8c748fd7ea |
children | e340b2fb9471 |
line wrap: on
line diff
--- a/rdf/RDFImporter.cpp Mon Dec 08 11:15:13 2008 +0000 +++ b/rdf/RDFImporter.cpp Mon Dec 08 11:53:10 2008 +0000 @@ -30,6 +30,7 @@ #include "data/model/SparseTimeValueModel.h" #include "data/model/EditableDenseThreeDimensionalModel.h" #include "data/model/NoteModel.h" +#include "data/model/TextModel.h" #include "data/model/RegionModel.h" #include "data/model/WaveFileModel.h" @@ -566,6 +567,15 @@ ).arg(m_uristring); + QString textQueryString = prefixes + QString( + + " SELECT ?label FROM <%1> " + " WHERE { " + " <%2> af:text ?label . " + " } " + + ).arg(m_uristring); + SimpleSPARQLQuery query(s, queryString); query.setProgressReporter(reporter); @@ -626,8 +636,18 @@ bool haveTime = false; bool haveDuration = false; - QString label = SimpleSPARQLQuery::singleResultQuery - (s, labelQueryString.arg(thinguri), "label").value; + QString label = ""; + bool text = (type.contains("Text") || type.contains("text")); // Ha, ha + + if (text) { + label = SimpleSPARQLQuery::singleResultQuery + (s, textQueryString.arg(thinguri), "label").value; + } + + if (label == "") { + label = SimpleSPARQLQuery::singleResultQuery + (s, labelQueryString.arg(thinguri), "label").value; + } SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri)); SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute(); @@ -682,13 +702,25 @@ if (dimensions == 1) { -// std::cerr << "SparseOneDimensionalModel" << std::endl; - model = new SparseOneDimensionalModel(m_sampleRate, 1, false); + if (text) { + + model = new TextModel(m_sampleRate, 1, false); + + } else { + + model = new SparseOneDimensionalModel(m_sampleRate, 1, false); + } } else if (dimensions == 2) { -// std::cerr << "SparseTimeValueModel" << std::endl; - model = new SparseTimeValueModel(m_sampleRate, 1, false); + if (text) { + + model = new TextModel(m_sampleRate, 1, false); + + } else { + + model = new SparseTimeValueModel(m_sampleRate, 1, false); + } } else { @@ -699,7 +731,6 @@ // but it's hard to apply it because we don't have // all the necessary timing data yet... hmm -// std::cerr << "NoteModel" << std::endl; model = new NoteModel(m_sampleRate, 1, false); } @@ -710,7 +741,6 @@ // If our units are frequency or midi pitch, we // should be using a note model... hm -// std::cerr << "RegionModel" << std::endl; model = new RegionModel(m_sampleRate, 1, false); } else { @@ -722,7 +752,6 @@ // but it's hard to apply it because we don't have // all the necessary timing data yet... hmm -// std::cerr << "NoteModel" << std::endl; model = new NoteModel(m_sampleRate, 1, false); } } @@ -777,6 +806,17 @@ return; } + TextModel *tm = + dynamic_cast<TextModel *>(model); + if (tm) { + TextModel::Point point + (ftime, + values.empty() ? 0.5f : values[0] < 0.f ? 0.f : values[0] > 1.f ? 1.f : values[0], // I was young and feckless once too + label); + tm->addPoint(point); + return; + } + SparseTimeValueModel *stvm = dynamic_cast<SparseTimeValueModel *>(model); if (stvm) {