Example #1
0
void ReflectivePlot::appendValue(Request_ptr req,
        TypeDescriptor_ptr reflec,
        Holder hold)
{
    if (reflec->is_primitive())
    {
        m_plot->append(reflec->to_double(hold));
    }
    else if(reflec->is_repeated() &&
            reflec->get_slice()->is_primitive())
    {
        QVector< double > values;

        const unsigned int length = reflec->get_length(hold);
        core::reflective_base const * slice = reflec->get_slice();

        for (unsigned int i = 0; i < length; i++)
        {
            const core::holder h = reflec->get_child_value(hold, i);
            values.push_back(slice->to_double(h));
        }

        if (!values.isEmpty())
            m_plot->append(values);
    }
    // N-dimensional types
    else if(reflec->is_repeated() &&
            reflec->get_slice()->is_repeated())
    {
        unsigned int length = reflec->get_length(hold);

        for (unsigned int i = 0; i < length; i++)
        {
            core::holder h = reflec->get_child_value(hold, i);

            // Recursive
            appendValue(req, reflec->get_slice(), h);
        }
    }
}
Example #2
0
StringWidget::StringWidget(TypeDescriptor_ptr reflective,
        QWidget * parent) :
    QLineEdit(parent), ReflectiveWidget(reflective)
{
    using namespace gsim::core;

    bool array = reflective->get_type() == TYPE_ARRAY 
        && reflective->get_slice()->get_type() == TYPE_CHAR;

    assert(reflective->get_type() == TYPE_STRING || array);

    if (array)
    {
        Holder dummy;
        unsigned length = reflective->get_length(dummy);

        setMaxLength((int) length);
    }
}