/*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * copyright (C) 2004-2007 * * Umbrello UML Modeller Authors * ***************************************************************************/ /* This code generated by: * Author : thomas * Date : Fri Aug 31 2003 */ // own header #include "cppsourcecodeaccessormethod.h" // qt/kde includes #include // local includes #include "../attribute.h" #include "../classifiercodedocument.h" #include "../umlobject.h" #include "../umlrole.h" #include "../uml.h" #include "cppcodegenerator.h" #include "cppcodegenerationpolicy.h" #include "cppcodeclassfield.h" #include "cppcodedocumentation.h" // Constructors/Destructors // CPPSourceCodeAccessorMethod::CPPSourceCodeAccessorMethod ( CodeClassField * field, CodeAccessorMethod::AccessorType type) : CodeAccessorMethod ( field ) { setType(type); setEndMethodText("}"); } void CPPSourceCodeAccessorMethod::update() { updateMethodDeclaration(); updateContent(); } CPPSourceCodeAccessorMethod::~CPPSourceCodeAccessorMethod ( ) { } // Other // // we basically want to update the body of this method void CPPSourceCodeAccessorMethod::updateContent( ) { CodeClassField * tqparentField = getParentClassField(); CPPCodeClassField * cppfield = dynamic_cast(tqparentField); CodeGenPolicyExt *pe = UMLApp::app()->getPolicyExt(); CPPCodeGenerationPolicy * policy = dynamic_cast(pe); bool isInlineMethod = policy->getAccessorsAreInline( ); TQString variableName = cppfield->getFieldName(); TQString itemClassName = cppfield->getTypeName(); TQString text; if(isInlineMethod) { switch(getType()) { case CodeAccessorMethod::ADD: text = policy->getVectorMethodAppend(variableName, itemClassName); break; case CodeAccessorMethod::REMOVE: text = policy->getVectorMethodRemove(variableName, itemClassName); break; case CodeAccessorMethod::SET: text = variableName+" = value;"; break; case CodeAccessorMethod::LIST: case CodeAccessorMethod::GET: default: text = "return "+variableName+';'; break; } } setText(text); } // we basically want to update the start text of this method void CPPSourceCodeAccessorMethod::updateMethodDeclaration() { CodeClassField * tqparentField = getParentClassField(); ClassifierCodeDocument * doc = tqparentField->getParentDocument(); CodeGenPolicyExt *pe = UMLApp::app()->getPolicyExt(); CPPCodeGenerationPolicy * policy = dynamic_cast(pe); CPPCodeClassField * cppfield = dynamic_cast(tqparentField); UMLClassifier * c = doc->getParentClassifier(); bool isInlineMethod = policy->getAccessorsAreInline( ); TQString vectorClassName = policy->getVectorClassName(); TQString fieldName = cppfield->getFieldName(); TQString fieldType = cppfield->getTypeName(); TQString objectType = cppfield->getListObjectType(); if(objectType.isEmpty()) objectType = fieldName; TQString methodReturnType = "void"; TQString methodName; TQString methodParams; TQString headerText; TQString className = CodeGenerator::cleanName(c->getName()); TQString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars(); switch(getType()) { case CodeAccessorMethod::ADD: methodName = "add_"+fieldType; methodReturnType = "void"; methodParams = objectType+" value "; headerText = "Add a "+fieldName+" object to the "+fieldName+"List"+endLine+getParentObject()->getDoc()+endLine+"@return void"; break; case CodeAccessorMethod::REMOVE: methodName = "remove_"+fieldType; methodParams = objectType+" value "; methodReturnType = "void"; headerText = "Remove a "+fieldName+" object from the "+fieldName+"List"+endLine+getParentObject()->getDoc()+endLine+"@return void"; break; case CodeAccessorMethod::LIST: methodName = "get_"+fieldType+"_list"; methodReturnType = vectorClassName; headerText = "Get the "+fieldName+"List"+endLine+getParentObject()->getDoc()+endLine+"@return "+vectorClassName+"with list of objects"; break; case CodeAccessorMethod::SET: methodName = "set_"+fieldName; methodParams = fieldType+" value "; methodReturnType = "void"; headerText = "Set the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@param value the value of "+fieldName; break; case CodeAccessorMethod::GET: default: methodName = "get_"+fieldName; methodReturnType = fieldType; headerText = "Get the value of "+fieldName+endLine+getParentObject()->getDoc()+endLine+"@return the value of "+fieldName; break; } // set header CPPCodeDocumentation * header = new CPPCodeDocumentation(doc); if(!getParentObject()->getDoc().isEmpty()) header->setText(headerText); setComment(header); // set start method text (EndText never changes) setStartMethodText(methodReturnType+' '+className+"::"+methodName+" ("+methodParams+')' + " {"); setOverallIndentationLevel(0); // these ONLY appear if they arent inline if(isInlineMethod) setWriteOutText(false); } #include "cppsourcecodeaccessormethod.moc"