summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp b/umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp
new file mode 100644
index 00000000..ea5612c9
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/cppheaderclassdeclarationblock.cpp
@@ -0,0 +1,160 @@
+/***************************************************************************
+ * *
+ * 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-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+/* This code generated by:
+ * Author : thomas
+ * Date : Mon Sep 1 2003
+ */
+
+#include "cppheaderclassdeclarationblock.h"
+#include "cppcodegenerator.h"
+#include "cppcodegenerationpolicy.h"
+#include "cppcodedocumentation.h"
+#include "../model_utils.h"
+#include "../uml.h"
+
+// Constructors/Destructors
+//
+
+CPPHeaderClassDeclarationBlock::CPPHeaderClassDeclarationBlock
+ ( CPPHeaderCodeDocument * parentDoc, const QString &startText, const QString &endText, const QString &comment)
+ : OwnedHierarchicalCodeBlock(parentDoc->getParentClassifier(), parentDoc, startText, endText, comment)
+{
+ init(parentDoc, comment);
+}
+
+CPPHeaderClassDeclarationBlock::~CPPHeaderClassDeclarationBlock ( ) { }
+
+//
+// Methods
+//
+
+/**
+ * load params from the appropriate XMI element node.
+ */
+void CPPHeaderClassDeclarationBlock::loadFromXMI ( QDomElement & root )
+{
+ setAttributesFromNode(root);
+}
+
+/** set the class attributes from a passed object
+ */
+void CPPHeaderClassDeclarationBlock::setAttributesFromObject (TextBlock * obj)
+{
+ HierarchicalCodeBlock::setAttributesFromObject(obj);
+}
+
+/**
+ * Save the XMI representation of this object
+ */
+void CPPHeaderClassDeclarationBlock::saveToXMI ( QDomDocument & doc, QDomElement & root ) {
+ QDomElement blockElement = doc.createElement( "cppheaderclassdeclarationblock" );
+
+ setAttributesOnNode(doc, blockElement);
+
+ root.appendChild( blockElement );
+}
+
+// Accessor methods
+//
+
+// Other methods
+//
+
+/**
+ * update the start and end text for this hierarchicalcodeblock.
+ */
+void CPPHeaderClassDeclarationBlock::updateContent ( )
+{
+
+ CPPHeaderCodeDocument *parentDoc = dynamic_cast<CPPHeaderCodeDocument*>(getParentDocument());
+ UMLClassifier *c = parentDoc->getParentClassifier();
+ QString endLine = UMLApp::app()->getCommonPolicy()->getNewLineEndingChars();
+ bool isInterface = parentDoc->parentIsInterface(); // a little shortcut
+ QString CPPHeaderClassName = CodeGenerator::cleanName(c->getName());
+ bool forceDoc = UMLApp::app()->getCommonPolicy()->getCodeVerboseDocumentComments();
+
+ // COMMENT
+
+ //check if class is abstract.. it should have abstract methods
+ if(!isInterface && c->getAbstract() && !c->hasAbstractOps())
+ {
+ getComment()->setText("******************************* Abstract Class ****************************"+endLine
+ +CPPHeaderClassName+" does not have any pure virtual methods, but its author"+endLine
+ +" defined it as an abstract class, so you should not use it directly."+endLine
+ +" Inherit from it instead and create only objects from the derived classes"+endLine
+ +"*****************************************************************************");
+ } else {
+ if(isInterface)
+ getComment()->setText("Interface "+CPPHeaderClassName+endLine+c->getDoc());
+ else
+ getComment()->setText("Class "+CPPHeaderClassName+endLine+c->getDoc());
+ }
+
+ if(forceDoc || !c->getDoc().isEmpty())
+ getComment()->setWriteOutText(true);
+ else
+ getComment()->setWriteOutText(false);
+
+
+ // Now set START/ENDING Text
+ QString startText = "";
+
+ /*
+ */
+
+ /*
+ if(parentDoc->parentIsInterface())
+ startText.append("interface ");
+ else
+ */
+ startText.append("class ");
+
+ startText.append(CPPHeaderClassName);
+
+ // write inheritances out
+ UMLClassifierList superclasses = c->findSuperClassConcepts();
+ int nrof_superclasses = superclasses.count();
+
+ // write out inheritance
+ int i = 0;
+ if(nrof_superclasses >0)
+ startText.append(" : ");
+ for (UMLClassifier * concept= superclasses.first(); concept; concept = superclasses.next())
+ {
+ startText.append(concept->getVisibility().toString() + ' ' +
+ CodeGenerator::cleanName(concept->getName()));
+ if(i != (nrof_superclasses-1))
+ startText.append(", ");
+ i++;
+ }
+
+ // Set the header and end text for the hier.codeblock
+ setStartText(startText+" {");
+
+ // setEndText("}"); // not needed
+
+}
+
+void CPPHeaderClassDeclarationBlock::init (CPPHeaderCodeDocument *parentDoc, const QString &comment)
+{
+
+ setComment(new CPPCodeDocumentation(parentDoc));
+ getComment()->setText(comment);
+
+ setEndText("};");
+
+ updateContent();
+
+}
+
+
+#include "cppheaderclassdeclarationblock.moc"