//Copyright (C) 2007 Dominic Letourneau (Dominic.Letourneau@USherbrooke.ca)
#include "QtRunContext.h"
#include "Exception.h"
#include <sstream>
#include "flow_pref.h"
#include <unistd.h>
#include "UserException.h"
namespace FD
{
using namespace std;
QtRunContext::QtRunContext(UIDocument *doc, ParameterSet ¶ms)
: m_document(doc), m_parameters(params), m_network(NULL)
{
//Create GUI
}
bool QtRunContext::run()
{
bool success = false;
if (m_document)
{
//build document
try
{
m_network = m_document->build("MAIN", m_parameters);
//MAIN SHOULD NOT HAVE INPUT NODES
if (m_network->getInputNode())
{
throw new GeneralException ("QtRunContext::run() - main network has input node", __FILE__, __LINE__);
}
//processing buffer requests
for (int i = 0; ;i++)
{
if (!m_network->hasOutput(i)) break;
//empty request
ParameterSet req;
m_network->request(i,req);
}
//initializing
m_network->initialize();
//Getting all outputs
for (int i = 0; ;i++)
{
if (!m_network->hasOutput(i)) break;
if (1 /* FlowPref::getBool("VFLOW", "PrintOutput") */)
{
stringstream execOut;
execOut << *m_network->getOutput(i,0);
//PRINT IN GUI
cout<<execOut.str()<<endl;
}
else
{
m_network->getOutput(i,0);
}
}
//cerr << "Deleting in run()" << endl;
//gdk_threads_enter();
//less_print("Network ended normally");
cout << "Network ended normally" << endl;
success = true;
//gdk_threads_leave();
}
catch (BaseException *e)
{
cerr << "Base Exception" << endl;
stringstream excOut;
e->print (excOut);
//gdk_threads_enter();
//less_print(excOut.str());
cerr << excOut.str() <<endl;
//gdk_threads_leave();
delete e;
success = false;
}
catch (UserException *e)
{
cerr << "User stop caught" << endl;
delete e;
success = false;
}
catch (...)
{
//gdk_threads_enter();
//less_print("Unknown exception caught");
//gdk_threads_leave();
cerr << "Unknown exception caught "<<endl;
success = false;
}
//DELETE RUNNING NETWORK
if (m_network)
{
m_network->cleanupNotify();
delete m_network;
m_network=NULL;
}
} //if m_document
return success;
}
}//namespace FD
syntax highlighted by Code2HTML, v. 0.9.1