FgDgn<T>
 addInput(const T & defaultVal,const FgString & uid,bool binary=false)
 {
     FgDgn<T>    node = dg.addNode(defaultVal,uid.as_ascii());
     readNode(node,uid,binary);
     Input       inp;
     inp.nodeIdx = node.idx();
     inp.save = boost::bind(&FgGuiGraph::writeNode<T>,this,node,uid,binary);
     inp.defaultVal = FgVariant(defaultVal);
     m_inputSaves.push_back(inp);
     return node;
 }
static
void
textToVal(const FgString & text,FgDgn<double> valN,FgVect2D bounds)
{
    double  userVal = fgFromString<double>(text.as_ascii());
    // Behaviour for non-numerical strings varies even between debug and release, the
    // latter returning very small values for null string:
    if (userVal < bounds[0])
        userVal = bounds[0];
    if (userVal > bounds[1])
        userVal = bounds[1];
    g_gg.setVal(valN,userVal);
}