@startuml class PdmObject { name() fields(); referencingFields(); parentField(); template capability() void addCapability() --- std::vector m_fields; std::vector m_capabilities; } PdmObject --* "n" PdmObjectCapability class PdmUiItem{ } PdmObjectCapability <|- PdmUiObject PdmUiItem <|- PdmUiObject class PdmUiObject{ uiOrdering() = ?; uiTreeOrdering() = ? ; editorAttribute() = ?; objectEditorAttribute() = ? ; userDescriptionField(); objectToggleField() calculateValueOptions() = ?; fieldChangedByUi() = 0; --- m_descriptionField; m_objectToggleField; } PdmUiObject <|-- PdmCompleteObject PdmObject <|-- PdmCompleteObject PdmXmlSerializable <|-- PdmCompleteObject class PdmXmlSerializable { classKeyword() = 0; readFields (); writeFields(); } PdmObjectCapability <|- PdmXmlSerializable package FieldHandle{ PdmObject --> "n" PdmFieldHandle class PdmFieldHandle{ name() setOwnerObject(); ownerObject(); hasChildObjects() = 0; childObjects( ) = 0; --- std::vector m_attributes; } PdmFieldHandle --* "n" PdmFieldCapability class PdmUiFieldHandle{ uiValue() setValueFromUi() valueOptions( ) = 0; } PdmFieldCapability <|- PdmUiFieldHandle PdmUiItem <|- PdmUiFieldHandle class PdmXmlFieldHandle { setKeyword(); keyword(); readFieldData() = 0; writeFieldData() = 0; isIOReadable() isIOWritable() setIOWritable() setIOReadable() --- bool m_isReadable; bool m_isWritable; } PdmFieldCapability <|- PdmXmlFieldHandle PdmFieldHandle <|-- PdmCompleteFieldHandle PdmUiFieldHandle <|-- PdmCompleteFieldHandle PdmXmlFieldHandle <|-- PdmCompleteFieldHandle } package ToDoFields{ class "PdmFieldXmlCap>"{ } } package SplittedFields{ PdmFieldHandle <|--- "PdmField" "PdmField" --> "PdmFieldUiCap" "PdmField" --> "PdmFieldXmlCap" PdmFieldHandle <|--- "PdmProxyField" "PdmProxyField" --> "PdmFieldUiCap" "PdmProxyField" --> "PdmFieldXmlCap" PdmUiFieldHandle <|--- "PdmFieldUiCap" PdmXmlFieldHandle <|--- "PdmFieldXmlCap" PdmFieldHandle <|--- "PdmPtrField" "PdmPtrField" --> "PdmFieldUiCap" "PdmPtrField" --> "PdmFieldXmlCap" "PdmPtrField" ..> "Todo" "PdmFieldXmlCap>" PdmFieldHandle <|--- "PdmChildField" "PdmChildField"--> "PdmFieldUiCap>" "PdmChildField"--> "PdmFieldXmlCap>" PdmFieldHandle <|--- "PdmChildArrayField" "PdmChildArrayField"--> "PdmFieldUiCap>" "PdmChildArrayField"--> "PdmFieldXmlCap>" } package ToDoFields{ PdmFieldHandle <|-- "PdmProxyPtrField" "PdmProxyPtrField" --> "PdmFieldUiCap" "PdmProxyPtrField" ..> "Todo" "PdmFieldXmlCap>" PdmFieldHandle <|-- "PdmProxyChildField" "PdmProxyChildField"--> "PdmFieldUiCap>" "PdmProxyChildField"--> "PdmFieldXmlCap>" PdmFieldHandle <|-- "PdmProxyChildArrayField" "PdmProxyChildArrayField"--> "PdmFieldUiCap>" "PdmProxyChildArrayField"--> "PdmFieldXmlCap>" } @enduml