void PropertyModel::buildUp(const std::map<std::string, std::vector<App::Property*> >& props) { // fill up the listview with the properties rootItem->reset(); // sort the properties into their groups std::map<std::string, std::vector<std::vector<App::Property*> > > propGroup; std::map<std::string, std::vector<App::Property*> > ::const_iterator jt; for (jt = props.begin(); jt != props.end(); ++jt) { App::Property* prop = jt->second.front(); const char* group = prop->getGroup(); std::string grp = group ? group : "Base"; propGroup[grp].push_back(jt->second); } std::map<std::string, std::vector<std::vector<App::Property*> > > ::const_iterator kt; for (kt = propGroup.begin(); kt != propGroup.end(); ++kt) { // set group item PropertyItem* group = static_cast<PropertyItem*>(PropertySeparatorItem::create()); group->setParent(rootItem); rootItem->appendChild(group); group->setPropertyName(QString::fromAscii(kt->first.c_str())); // setup the items for the properties std::vector<std::vector<App::Property*> >::const_iterator it; for (it = kt->second.begin(); it != kt->second.end(); ++it) { App::Property* prop = it->front(); QString editor = QString::fromAscii(prop->getEditorName()); if (!editor.isEmpty()) { Base::BaseClass* item = 0; try { item = static_cast<Base::BaseClass*>(Base::Type:: createInstanceByName(prop->getEditorName(),true)); } catch (...) { } if (!item) { qWarning("No property item for type %s found\n", prop->getEditorName()); continue; } if (item->getTypeId().isDerivedFrom(PropertyItem::getClassTypeId())) { PropertyItem* child = (PropertyItem*)item; child->setParent(rootItem); rootItem->appendChild(child); child->setPropertyName(QString::fromAscii(prop->getName())); child->setPropertyData(*it); } } } } reset(); }
void DynamicProperty::addDynamicProperties(const PropertyContainer* cont) { std::vector<std::string> names = cont->getDynamicPropertyNames(); for (std::vector<std::string>::iterator it = names.begin(); it != names.end(); ++it) { App::Property* prop = cont->getDynamicPropertyByName(it->c_str()); if (prop) { addDynamicProperty( prop->getTypeId().getName(), prop->getName(), prop->getGroup(), prop->getDocumentation(), prop->getType(), cont->isReadOnly(prop), cont->isHidden(prop)); } } }