Example #1
0
File: path.cpp Project: asenac/gsim
TypeDescriptor_ptr followPath(
    TypeDescriptor_ptr message,
    const ReflectivePath_t& path)
{
    TypeDescriptor_ptr res = message;

    ReflectivePath_t::const_iterator it = path.begin();

    for (; it != path.end() && res; ++it)
    {
        res = res->get_child(*it);
    }

    return res;
}
Example #2
0
UnionWidget::UnionWidget(
        TypeDescriptor_ptr reflective,
        WidgetFactory_t factory,
        QWidget * parent) :
    QWidget(parent), ReflectiveWidgetBase(reflective)
{
    assert(reflective->get_type() == core::TYPE_UNION);

    QGridLayout * layout = new QGridLayout(this);

    unsigned int count = reflective->get_children_count();

    m_widgets.resize(count, NULL);

    // discriminator
    {
        const char * child_name = reflective->get_child_name(0);

        core::reflective_base const * child = reflective->get_child(0);

        QWidget * child_widget = factory(child, this);
        
        child_widget->setObjectName(child_name);

        m_widgets[0] = 
            dynamic_cast< ReflectiveWidgetBase* >(child_widget);

        child_widget->setObjectName(child_name);

        layout->addWidget(new QLabel(child_name), 0, 0);
        layout->addWidget(child_widget, 0, 1);

        if (qobject_cast< QComboBox * >(child_widget))
        {
            connect(child_widget, 
                    SIGNAL(currentIndexChanged(int)),
                    this,
                    SLOT(discriminatorChanged()));
        }
        else if (qobject_cast< QSpinBox * >(child_widget))
        {
            connect(child_widget, 
                    SIGNAL(valueChanged(int)),
                    this,
                    SLOT(discriminatorChanged()));
        }
        else if (qobject_cast< QDoubleSpinBox * >(child_widget))
Example #3
0
File: path.cpp Project: asenac/gsim
bool followPath(
    TypeDescriptor_ptr message,
    Holder holder,
    const ReflectivePath_t& path,
    TypeDescriptor_ptr& descriptor,
    Holder& value)
{
    value = holder;
    descriptor = message;

    ReflectivePath_t::const_iterator it = path.begin();

    for (; it != path.end() && descriptor; ++it)
    {
        if (descriptor->is_variable_length())
            return false;

        value = descriptor->get_child_value(value, *it);
        descriptor = descriptor->get_child(*it);
    }

    // valid if descriptor not null
    return (descriptor);
}
Example #4
0
StructWidget::StructWidget(
        TypeDescriptor_ptr reflective,
        WidgetFactory_t factory,
        QWidget * parent) :
    qt::FormWidget(parent), ReflectiveWidgetBase(reflective)
{
    assert(reflective->get_type() == core::TYPE_STRUCT);

    unsigned int count = reflective->get_children_count();

    m_widgets.resize(count, NULL);

    for (unsigned int i = 0; i < count; i++) 
    {
        core::reflective_base const * child = 
            reflective->get_child(i);

        const char * child_name = reflective->get_child_name(i);

        QWidget * child_widget = factory(child, this);

        m_widgets[i] = dynamic_cast< ReflectiveWidgetBase* >(
                child_widget);

        child_widget->setObjectName(child_name);

        if (child->is_primitive() || child->is_enum())
        {
            addField(child_name, child_widget);
        }
        else
        {
            addBigField(child_name, child_widget);
        }
    }
}