From 599b4833362ca131ed4c4cd186a38de0764b1ec9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 12 Sep 2007 03:20:59 +0000 Subject: Fix manually specifying polyphony in load patch dialog. git-svn-id: http://svn.drobilla.net/lad/ingen@703 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/serialisation/Loader.cpp | 49 ++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 19 deletions(-) (limited to 'src/libs/serialisation') diff --git a/src/libs/serialisation/Loader.cpp b/src/libs/serialisation/Loader.cpp index 1a33dac9..e34b5503 100644 --- a/src/libs/serialisation/Loader.cpp +++ b/src/libs/serialisation/Loader.cpp @@ -64,24 +64,35 @@ Loader::load(SharedPtr engine, cerr << "[Loader] Loading " << patch_uri << " from " << document_uri << " under " << (string)(parent ? (string)parent.get() : "no parent") << endl; - /* Get polyphony (mandatory) */ - - // FIXME: polyphony datatype - RDF::Query query(*rdf_world, Glib::ustring( - "SELECT DISTINCT ?poly WHERE {\n") + - patch_uri + " ingen:polyphony ?poly\n }"); - - RDF::Query::Results results = query.run(*rdf_world, model); + size_t patch_poly = 1; + + /* Use parameter overridden polyphony, if given */ + Raul::Table::iterator poly_param = data.find("ingen:polyphony"); + if (poly_param != data.end() && poly_param->second.type() == Atom::INT) { + cerr << "Using overridden poly: " << poly_param->second.get_int32(); + patch_poly = poly_param->second.get_int32(); + + /* Get polyphony from file (mandatory if not specified in parameters) */ + } else { + cerr << "No overridden poly." << endl; + + // FIXME: polyphony datatype? + RDF::Query query(*rdf_world, Glib::ustring( + "SELECT DISTINCT ?poly WHERE {\n") + + patch_uri + " ingen:polyphony ?poly\n }"); + + RDF::Query::Results results = query.run(*rdf_world, model); + + if (results.size() == 0) { + cerr << "[Loader] ERROR: No polyphony found!" << endl; + return false; + } - if (results.size() == 0) { - cerr << "[Loader] ERROR: No polyphony found!" << endl; - return false; + const RDF::Node& poly_node = (*results.begin())["poly"]; + assert(poly_node.is_int()); + patch_poly = static_cast(poly_node.to_int()); } - RDF::Node poly_node = (*results.begin())["poly"]; - assert(poly_node.is_int()); - const size_t patch_poly = static_cast(poly_node.to_int()); - /* Get name (if available/necessary) */ if (patch_name == "") { @@ -89,11 +100,11 @@ Loader::load(SharedPtr engine, if (patch_name.substr(patch_name.length()-10) == ".ingen.ttl") patch_name = patch_name.substr(0, patch_name.length()-10); - query = RDF::Query(*rdf_world, Glib::ustring( + RDF::Query query(*rdf_world, Glib::ustring( "SELECT DISTINCT ?name WHERE {\n") + patch_uri + " ingen:name ?name\n}"); - results = query.run(*rdf_world, model); + RDF::Query::Results results = query.run(*rdf_world, model); if (results.size() > 0) patch_name = (*results.begin())["name"].to_string(); @@ -107,7 +118,7 @@ Loader::load(SharedPtr engine, /* Load (plugin) nodes */ - query = RDF::Query(*rdf_world, Glib::ustring( + RDF::Query query(*rdf_world, Glib::ustring( "SELECT DISTINCT ?name ?plugin ?floatkey ?floatval WHERE {\n") + patch_uri + " ingen:node ?node .\n" "?node ingen:name ?name ;\n" @@ -116,7 +127,7 @@ Loader::load(SharedPtr engine, " FILTER ( datatype(?floatval) = xsd:decimal ) }\n" "}"); - results = query.run(*rdf_world, model); + RDF::Query::Results results = query.run(*rdf_world, model); for (RDF::Query::Results::iterator i = results.begin(); i != results.end(); ++i) { -- cgit v1.2.1