Brief description of class still missing. More...
#include <ExtTarget.h>
Public Member Functions | |
QString | command () const |
ExtTarget () | |
ExtTarget (const ExtTarget &o) | |
bool | isOk (int nParams) |
void | setCommand (QString c) |
void | setWorkingDirectory (QString wd) |
QString | workingDirectory () const |
virtual const QString & | xml_tagName () const |
Static Public Attributes | |
static const QString | xmlExtTargetTag = "ExtTarget" |
Protected Member Functions | |
virtual XMLMember | xml_member (XML_MEMBER_ARGS) |
virtual bool | xml_setProperty (XML_SETPROPERTY_ARGS) |
virtual void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
Brief description of class still missing.
Full description of class still missing
ExtTarget::ExtTarget | ( | ) | [inline] |
{}
ExtTarget::ExtTarget | ( | const ExtTarget & | o | ) |
: XMLClass() { _command=o._command; _workingDirectory=o._workingDirectory; }
QString ExtTarget::command | ( | ) | const [inline] |
Referenced by ExtTargetWidget::setFrom().
{return _command;}
bool ExtTarget::isOk | ( | int | nParams | ) |
References QGpCoreTools::endl(), QGpCoreTools::tr(), and TRACE.
Referenced by Forward::setTarget().
{ TRACE; if(_command.isEmpty()) { App::stream() << tr("Empty command, computing of misfit disabled. A uniform null misfit will be returned for each model.") << endl; return true; } QDir d(_workingDirectory); // Write fake 'parameter' file QFile fp(d.absoluteFilePath("parameters")); if(!fp.open(QIODevice::WriteOnly)) { App::stream() << tr("Cannot write to file %1").arg(d.absoluteFilePath("parameters")) << endl; return false; } QTextStream s(&fp); for(int i=0;i<nParams;i++) { s << 0.0 << "\n"; } fp.close(); QProcess p; p.setWorkingDirectory(_workingDirectory); p.start(_command); while(!p.waitForStarted (1000) && p.state()==QProcess::Starting) {} while(!p.waitForFinished (1000) && p.state()==QProcess::Running) {} switch(p.error()) { case QProcess::FailedToStart: App::stream() << tr("%1 failed to start. Either %1 is missing, or you may have insufficient permissions to invoke it.") .arg(_command) << endl; return false; case QProcess::Crashed: App::stream() << tr("%1 crashed some time after starting successfully.").arg(_command) << endl; return false; default: break; } return true; }
void ExtTarget::setCommand | ( | QString | c | ) | [inline] |
Referenced by ExtTargetWidget::target().
{_command=c;}
void ExtTarget::setWorkingDirectory | ( | QString | wd | ) | [inline] |
Referenced by ExtTargetWidget::target().
{_workingDirectory=wd;}
QString ExtTarget::workingDirectory | ( | ) | const [inline] |
Referenced by ExtTargetWidget::setFrom().
{return _workingDirectory;}
XMLMember ExtTarget::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore (children and properties) support to your class.
From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:
Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):
static const QString tmp("childrenName"); XMLRestoreAttributeIterator it=map.find(tmp); if(it!=map.end()) { // found attribute "childrenName" }
If the map of attributes is not used:
Q_UNUSED(attributes); if(tag=="x1") return XMLMember(0); else if(tag=="y1") return XMLMember(1); else if(tag=="x2") return XMLMember(2); else if(tag=="y2") return XMLMember(3); else return XMLMember(XMLMember::Unknown);
Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.
if(tag=="anInteger") return XMLMember(0); else if(tag=="aString") return XMLMember(1); else if(tag=="aDouble") return XMLMember(2); return AbstractLine::xml_member(tag, attributes, context)+3;
For the arguments of this function use Macro XML_MEMBER_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References TRACE.
{ TRACE; Q_UNUSED(attributes) Q_UNUSED(context); if(tag=="command" ) return XMLMember(0); else if(tag=="workingDirectory" ) return XMLMember(1); else return XMLMember(XMLMember::Unknown); }
bool ExtTarget::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
Re-implement this function to offer XML restore properties support to your class.
From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).
For a general case:
Q_UNUSED(attributes); double val=content.toDouble(); switch (memberID) { case 0: _x1=val; return true; case 1: _y1=val; return true; case 2: _x2=val; return true; case 3: _y2=val; return true; default: return false; }
For classes inheriting other classes (see also xml_member())
switch (memberID) { case 0: _anInteger=content.toString(); return true; case 1: _aString=content.toInt(); return true; case 2: _aDouble=content.toDouble(); return true; default: return AbstractLine::xml_setProperty(memberID-3, map, content);
For the arguments of this function use Macro XML_SETPROPERTY_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References TRACE.
{ TRACE; Q_UNUSED(tag) Q_UNUSED(attributes) Q_UNUSED(context); switch (memberID) { case 0: _command=content.toString(); return true; case 1: _workingDirectory=content.toString(); return true; default: return false; } }
virtual const QString& ExtTarget::xml_tagName | ( | ) | const [inline, virtual] |
void ExtTarget::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from QGpCoreTools::XMLClass.
References TRACE, and QGpCoreTools::XMLClass::writeProperty().
{ TRACE; Q_UNUSED(context); writeProperty(s, "command", _command); writeProperty(s, "workingDirectory", _workingDirectory); }
const QString ExtTarget::xmlExtTargetTag = "ExtTarget" [static] |
Referenced by xml_tagName().