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); } } }
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); } }