FieldDefinition::FieldDefinition(const FieldDefinition& other) { for (TypeVector::const_iterator it = other.m_types.begin(); it != other.m_types.end(); ++it) { addFieldType(*(*it)); } }
void FieldDefinition::configure(Configurator& conf) { if (conf.getMode() == Configurator::TO_CONF) { Configurator ftRootConf; for (TypeVector::iterator it = m_types.begin(); it != m_types.end(); ++it) { Configurator ftConf; (*it)->configure(ftConf); ftRootConf.configure(_T("field_type"), ftConf.getMap()); } conf.configure(_T("type_define"), ftRootConf.getMap()); } else { Configurator::Iterator it = conf.findConf(_T("type_define")); if (it.hasNext()) { Configurator::ConfMap rootConfMap = AnyCast<Configurator::ConfMap>(it.next().second); Configurator rootConf(rootConfMap); Configurator::Iterator it2 = rootConf.iterator(); while (it2.hasNext()) { Configurator::KeyValuePair kv = it2.next(); if (kv.first == _T("field_type")) { FieldType* pType = new FieldType; Configurator::ConfMap ftMap = AnyCast<Configurator::ConfMap>( kv.second); Configurator ftConf(ftMap); pType->configure(ftConf); addFieldType(*pType); } } } } }
QtVCardWidget::QtVCardWidget(QWidget* parent) : QWidget(parent), ui(new ::Ui::QtVCardWidget) { ui->setupUi(this); ui->cardFields->setColumnStretch(0,0); ui->cardFields->setColumnStretch(1,0); ui->cardFields->setColumnStretch(2,2); ui->cardFields->setColumnStretch(3,1); ui->cardFields->setColumnStretch(4,2); menu = new QMenu(this); toolButton = new QToolButton(this); toolButton->setText(tr("Add Field")); toolButton->setArrowType(Qt::NoArrow); toolButton->setAutoRaise(false); toolButton->setPopupMode(QToolButton::InstantPopup); toolButton->hide(); toolButton->setMenu(menu); addFieldType(menu, std::make_shared<QtVCardInternetEMailField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardTelephoneField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardAddressField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardAddressLabelField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardBirthdayField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardJIDField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardDescriptionField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardRoleField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardTitleField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardOrganizationField::FieldInfo>()); addFieldType(menu, std::make_shared<QtVCardURLField::FieldInfo>()); setEditable(false); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); }
void DataDictionary::readFromDocument( DOMDocumentPtr pDoc ) throw( ConfigError ) { // VERSION DOMNodePtr pFixNode = pDoc->getNode("/fix"); if(!pFixNode.get()) throw ConfigError("Could not parse data dictionary file" ", or no <fix> node found at root"); DOMAttributesPtr attrs = pFixNode->getAttributes(); std::string type = "FIX"; if(attrs->get("type", type)) { if(type != "FIX" && type != "FIXT") throw ConfigError("type attribute must be FIX or FIXT"); } std::string major; if(!attrs->get("major", major)) throw ConfigError("major attribute not found on <fix>"); std::string minor; if(!attrs->get("minor", minor)) throw ConfigError("minor attribute not found on <fix>"); setVersion(type + "." + major + "." + minor); // FIELDS DOMNodePtr pFieldsNode = pDoc->getNode("/fix/fields"); if(!pFieldsNode.get()) throw ConfigError("<fields> section not found in data dictionary"); DOMNodePtr pFieldNode = pFieldsNode->getFirstChildNode(); if(!pFieldNode.get()) throw ConfigError("No fields defined"); while(pFieldNode.get()) { if(pFieldNode->getName() == "field") { DOMAttributesPtr attrs = pFieldNode->getAttributes(); std::string name; if(!attrs->get("name", name)) throw ConfigError("<field> does not have a name attribute"); std::string number; if(!attrs->get("number", number)) throw ConfigError("<field> " + name + " does not have a number attribute"); int num = atol(number.c_str()); std::string type; if(!attrs->get("type", type)) throw ConfigError("<field> " + name + " does not have a type attribute"); addField(num); addFieldType(num, XMLTypeToType(type)); addFieldName(num, name); DOMNodePtr pFieldValueNode = pFieldNode->getFirstChildNode(); while(pFieldValueNode.get()) { if(pFieldValueNode->getName() == "value") { DOMAttributesPtr attrs = pFieldValueNode->getAttributes(); std::string enumeration; if(!attrs->get("enum", enumeration)) throw ConfigError("<value> does not have enum attribute in field " + name); addFieldValue(num, enumeration); std::string description; if(attrs->get("description", description)) addValueName(num, enumeration, description); } RESET_AUTO_PTR(pFieldValueNode, pFieldValueNode->getNextSiblingNode()); } } RESET_AUTO_PTR(pFieldNode, pFieldNode->getNextSiblingNode()); } // HEADER if( type == "FIXT" || (type == "FIX" && major < "5") ) { DOMNodePtr pHeaderNode = pDoc->getNode("/fix/header"); if(!pHeaderNode.get()) throw ConfigError("<header> section not found in data dictionary"); DOMNodePtr pHeaderFieldNode = pHeaderNode->getFirstChildNode(); if(!pHeaderFieldNode.get()) throw ConfigError("No header fields defined"); while(pHeaderFieldNode.get()) { if(pHeaderFieldNode->getName() == "field" || pHeaderFieldNode->getName() == "group" ) { DOMAttributesPtr attrs = pHeaderFieldNode->getAttributes(); std::string name; if(!attrs->get("name", name)) throw ConfigError("<field> does not have a name attribute"); std::string required = "false"; attrs->get("required", required); addHeaderField(lookupXMLFieldNumber(pDoc.get(), name), required == "true"); } if(pHeaderFieldNode->getName() == "group") { DOMAttributesPtr attrs = pHeaderFieldNode->getAttributes(); std::string required; attrs->get("required", required); bool isRequired = (required == "Y" || required == "y"); addXMLGroup(pDoc.get(), pHeaderFieldNode.get(), "_header_", *this, isRequired); } RESET_AUTO_PTR(pHeaderFieldNode, pHeaderFieldNode->getNextSiblingNode()); } } // TRAILER if( type == "FIXT" || (type == "FIX" && major < "5") ) { DOMNodePtr pTrailerNode = pDoc->getNode("/fix/trailer"); if(!pTrailerNode.get()) throw ConfigError("<trailer> section not found in data dictionary"); DOMNodePtr pTrailerFieldNode = pTrailerNode->getFirstChildNode(); if(!pTrailerFieldNode.get()) throw ConfigError("No trailer fields defined"); while(pTrailerFieldNode.get()) { if(pTrailerFieldNode->getName() == "field" || pTrailerFieldNode->getName() == "group" ) { DOMAttributesPtr attrs = pTrailerFieldNode->getAttributes(); std::string name; if(!attrs->get("name", name)) throw ConfigError("<field> does not have a name attribute"); std::string required = "false"; attrs->get("required", required); addTrailerField(lookupXMLFieldNumber(pDoc.get(), name), required == "true"); } if(pTrailerFieldNode->getName() == "group") { DOMAttributesPtr attrs = pTrailerFieldNode->getAttributes(); std::string required; attrs->get("required", required); bool isRequired = (required == "Y" || required == "y"); addXMLGroup(pDoc.get(), pTrailerFieldNode.get(), "_trailer_", *this, isRequired); } RESET_AUTO_PTR(pTrailerFieldNode, pTrailerFieldNode->getNextSiblingNode()); } } // MSGTYPE DOMNodePtr pMessagesNode = pDoc->getNode("/fix/messages"); if(!pMessagesNode.get()) throw ConfigError("<messages> section not found in data dictionary"); DOMNodePtr pMessageNode = pMessagesNode->getFirstChildNode(); if(!pMessageNode.get()) throw ConfigError("No messages defined"); while(pMessageNode.get()) { if(pMessageNode->getName() == "message") { DOMAttributesPtr attrs = pMessageNode->getAttributes(); std::string msgtype; if(!attrs->get("msgtype", msgtype)) throw ConfigError("<field> does not have a name attribute"); addMsgType(msgtype); std::string name; if(attrs->get("name", name)) addValueName( 35, msgtype, name ); DOMNodePtr pMessageFieldNode = pMessageNode->getFirstChildNode(); while( pMessageFieldNode.get() ) { if(pMessageFieldNode->getName() == "field" || pMessageFieldNode->getName() == "group") { DOMAttributesPtr attrs = pMessageFieldNode->getAttributes(); std::string name; if(!attrs->get("name", name)) throw ConfigError("<field> does not have a name attribute"); int num = lookupXMLFieldNumber(pDoc.get(), name); addMsgField(msgtype, num); std::string required; if(attrs->get("required", required) && (required == "Y" || required == "y")) { addRequiredField(msgtype, num); } } else if(pMessageFieldNode->getName() == "component") { DOMAttributesPtr attrs = pMessageFieldNode->getAttributes(); std::string required; attrs->get("required", required); bool isRequired = (required == "Y" || required == "y"); addXMLComponentFields(pDoc.get(), pMessageFieldNode.get(), msgtype, *this, isRequired); } if(pMessageFieldNode->getName() == "group") { DOMAttributesPtr attrs = pMessageFieldNode->getAttributes(); std::string required; attrs->get("required", required); bool isRequired = (required == "Y" || required == "y"); addXMLGroup(pDoc.get(), pMessageFieldNode.get(), msgtype, *this, isRequired); } RESET_AUTO_PTR(pMessageFieldNode, pMessageFieldNode->getNextSiblingNode()); } } RESET_AUTO_PTR(pMessageNode, pMessageNode->getNextSiblingNode()); } }