summaryrefslogtreecommitdiff
path: root/rotord/graph.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@herge.(none)>2013-04-25 15:43:19 +0100
committerTim Redfern <tim@herge.(none)>2013-04-25 15:43:19 +0100
commitbee668c819c4d83c7492e296afb3a90ea1cd6d06 (patch)
treee70d3cb1fab2320443020bb40dfde7277ff98963 /rotord/graph.cpp
parent1de09c4f69fed0d4adc3d8c1ed19473db4a342b0 (diff)
file reorganisation
Diffstat (limited to 'rotord/graph.cpp')
-rw-r--r--rotord/graph.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/rotord/graph.cpp b/rotord/graph.cpp
new file mode 100644
index 0000000..7eeeec3
--- /dev/null
+++ b/rotord/graph.cpp
@@ -0,0 +1,74 @@
+#include "rotor.h"
+
+using namespace Rotor;
+const string Graph::toString(){
+ string xmlgraph;
+ if (loaded) {
+ xml.copyXmlToString(xmlgraph);
+ return xmlgraph;
+ }
+ else return "";
+}
+bool Graph::load(string &filename){
+ loaded=false;
+ printf("loading graph: %s\n",filename.c_str());
+ if(xml.loadFile(filename) ){
+ init(xml.getAttribute("patchbay","ID","",0),xml.getValue("patchbay","",0));
+ if(xml.pushTag("patchbay")) {
+ int n1=xml.getNumTags("node");
+ for (int i1=0;i1<n1;i1++){
+ map<string,string> settings;
+ vector<string> attrs;
+ xml.getAttributeNames("node",attrs,i1);
+ for (auto& attr: attrs) {
+ settings[attr]=xml.getAttribute("node",attr,"",i1);
+ //cerr << "Got attribute: " << attr << ":" << xml.getAttribute("node",attr,"",i1) << endl;
+ }
+ settings["description"]=xml.getValue("node","",i1);
+ Node* node=factory.create(settings);
+ if (node) {
+ cerr << "Rotor: created '" << xml.getAttribute("node","type","",i1) << "'" << endl;
+ string nodeID=xml.getAttribute("node","ID","",i1);
+ nodes[nodeID]=node;
+ if(xml.pushTag("node",i1)) {
+ int n2=xml.getNumTags("signal_input");
+ for (int i2=0;i2<n2;i2++){
+ nodes[nodeID]->create_signal_input(xml.getValue("signal_input","",i2));
+ string fromID=xml.getAttribute("signal_input","from","",i2);
+ if (nodes.find(fromID)!=nodes.end()) {
+ if (!nodes[nodeID]->inputs[i2]->connect((Signal_node*)nodes[fromID])){
+ cerr << "Rotor: graph loader cannot connect input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
+ return false;
+ }
+ else cerr << "Rotor: linked input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
+ }
+ else cerr << "Rotor: linking input " << i2 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl;
+ }
+ int n3=xml.getNumTags("image_input");
+ for (int i3=0;i3<n3;i3++){
+ ((Image_node*)nodes[nodeID])->create_image_input(xml.getValue("image_input","",i3));
+ string fromID=xml.getAttribute("image_input","from","",i3);
+ if (nodes.find(fromID)!=nodes.end()) {
+ if (!(((Image_node*)nodes[nodeID])->image_inputs[i3]->connect((Image_node*)nodes[fromID]))){
+ cerr << "Rotor: graph loader cannot connect image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
+ return false;
+ }
+ else cerr << "Rotor: linked image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
+ }
+ else cerr << "Rotor: linking image input " << i3 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl;
+ }
+ xml.popTag();
+ }
+ }
+ else {
+ cerr << "Rotor: graph loader cannot find node '" << xml.getAttribute("node","type","",i1) << "'" << endl;
+ return false;
+ }
+ }
+ xml.popTag();
+ }
+ loaded=true;
+ return true;
+ }
+ else return false;
+} \ No newline at end of file