EnumWidget::EnumWidget(TypeDescriptor_ptr reflective, QWidget * parent) : QComboBox(parent), ReflectiveWidgetBase(reflective) { assert(reflective->is_enum()); unsigned int count = reflective->get_children_count(); for (unsigned int i = 0; i < count; i++) { addItem(reflective->get_child_name(i)); } }
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))
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); } } }