void wxSFDiagramManager::GetAssignedConnections(wxSFShapeBase* parent, wxClassInfo* shapeInfo, wxSFShapeBase::CONNECTMODE mode, ShapeList& lines) { wxSFLineShape* pLine; if( parent->GetId() == -1 ) return; SerializableList lstLines; // lines are children of root item only so we have not to search recursively... GetRootItem()->GetChildren( shapeInfo, lstLines ); if( !lstLines.IsEmpty() ) { SerializableList::compatibility_iterator node = lstLines.GetFirst(); while(node) { pLine = (wxSFLineShape*)node->GetData(); switch(mode) { case wxSFShapeBase::lineSTARTING: if( pLine->GetSrcShapeId() == parent->GetId() ) lines.Append(pLine); break; case wxSFShapeBase::lineENDING: if( pLine->GetTrgShapeId() == parent->GetId() ) lines.Append(pLine); break; case wxSFShapeBase::lineBOTH: if( ( pLine->GetSrcShapeId() == parent->GetId() ) || ( pLine->GetTrgShapeId() == parent->GetId() ) ) lines.Append(pLine); break; } node = node->GetNext(); } } }
bool wxXmlSerializer::Contains(wxClassInfo *type) { SerializableList lstItems; GetItems( type, lstItems ); return !lstItems.IsEmpty(); }
void udCPPClassElementProcessor::ProcessClassMembers(wxSFShapeBase* element) { SerializableList lstMembers; umlClassDiagram::GetClassMembers( (umlClassItem*)element, CLASSINFO(udMemberDataLinkItem), (udLanguage::ACCESSTYPE)-1, lstMembers ); if( !lstMembers.IsEmpty() ) { udMemberDataItem *pVar; udLanguage *pLang = m_pParentGenerator->GetActiveLanguage(); pLang->SingleLineCommentCmd( wxT("member data initialization") ); for( SerializableList::iterator it = lstMembers.begin(); it != lstMembers.end(); ++it ) { pVar = (udMemberDataItem*)((udMemberDataLinkItem*)*it)->GetOriginal(); if( !pVar->GetValue().IsEmpty() ) pLang->WriteCodeBlocks( pVar->ToString( udCodeItem::cfDEFINITION, pLang ) ); } pLang->NewLine(); } }
void udCPPClassElementProcessor::ProcessClassDefinition(wxSFShapeBase* element) { udLanguage *pLang = m_pParentGenerator->GetActiveLanguage(); int nAccessType = 0; udFunctionItem *pFcn; SerializableList lstMembers; while( pLang->GetAccessTypeString( (udLanguage::ACCESSTYPE) nAccessType ) != wxEmptyString ) { lstMembers.Clear(); umlClassDiagram::GetClassMembers( (umlClassItem*) element, CLASSINFO(udMemberFunctionLinkItem), (udLanguage::ACCESSTYPE) nAccessType, lstMembers); if( !lstMembers.IsEmpty() ) { pLang->SingleLineCommentCmd( pLang->GetAccessTypeString( (udLanguage::ACCESSTYPE) nAccessType ) + wxT(" function members of '") + udPROJECT::GetDiagramElement(element)->GetName() + wxT("' class") ); } for( SerializableList::iterator it = lstMembers.begin(); it != lstMembers.end(); ++it ) { pFcn = (udFunctionItem*)((udCodeLinkItem*)*it)->GetOriginal(); // generate non-abstract functions only if( pFcn->GetFunctionModifer() == udLanguage::FM_ABSTRACT ) continue; // write template definition if needed udClassTemplateElementItem *pClassTempl = wxDynamicCast( udPROJECT::GetDiagramElement(element), udClassTemplateElementItem ); if( pClassTempl ) { pLang->WriteCodeBlocks( wxT("template <typename ") + pClassTempl->GetTemplateName() + wxT(">") ); } if( pFcn->GetImplementation() == uddvFUNCTION_USERIMPLEMENTATION ) { pLang->WriteCodeBlocks( pFcn->ToString( udCodeItem::cfDEFINITION, pLang ) ); pLang->BeginCmd(); if( pFcn->IsKindOf( CLASSINFO(udConstructorFunctionItem) ) ) ProcessClassMembers( element ); /*if( pFcn->GetCode().IsEmpty() ) pLang->WriteCodeBlocks( pLang->Dummy() ); else {*/ // insert code marks here needed for code synchronization pLang->SingleLineCommentCmd( udGenerator::GetBeginCodeMark( pFcn ) ); pLang->WriteCodeBlocks( pFcn->GetCode() ); pLang->SingleLineCommentCmd( udGenerator::GetEndCodeMark( pFcn ) ); /*}*/ pLang->EndCmd(); pLang->NewLine(); } } nAccessType++; } }