summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp b/umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp
new file mode 100644
index 00000000..da2a86cb
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/cppsourcecodeaccessormethod.cpp
@@ -0,0 +1,169 @@
+/***************************************************************************
+ * *
+ * 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 <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+/* This code generated by:
+ * Author : thomas
+ * Date : Fri Aug 31 2003
+ */
+
+// own header
+#include "cppsourcecodeaccessormethod.h"
+
+// qt/kde includes
+#include <kdebug.h>
+
+// 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 * parentField = getParentClassField();
+ CPPCodeClassField * cppfield = dynamic_cast<CPPCodeClassField*>(parentField);
+ CodeGenPolicyExt *pe = UMLApp::app()->getPolicyExt();
+ CPPCodeGenerationPolicy * policy = dynamic_cast<CPPCodeGenerationPolicy*>(pe);
+ bool isInlineMethod = policy->getAccessorsAreInline( );
+
+ QString variableName = cppfield->getFieldName();
+ QString itemClassName = cppfield->getTypeName();
+ QString 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 * parentField = getParentClassField();
+ ClassifierCodeDocument * doc = parentField->getParentDocument();
+ CodeGenPolicyExt *pe = UMLApp::app()->getPolicyExt();
+ CPPCodeGenerationPolicy * policy = dynamic_cast<CPPCodeGenerationPolicy*>(pe);
+ CPPCodeClassField * cppfield = dynamic_cast<CPPCodeClassField*>(parentField);
+ UMLClassifier * c = doc->getParentClassifier();
+
+ bool isInlineMethod = policy->getAccessorsAreInline( );
+
+ QString vectorClassName = policy->getVectorClassName();
+ QString fieldName = cppfield->getFieldName();
+ QString fieldType = cppfield->getTypeName();
+ QString objectType = cppfield->getListObjectType();
+ if(objectType.isEmpty())
+ objectType = fieldName;
+
+ QString methodReturnType = "void";
+ QString methodName;
+ QString methodParams;
+ QString headerText;
+ QString className = CodeGenerator::cleanName(c->getName());
+ QString 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"