summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp')
-rw-r--r--umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp390
1 files changed, 390 insertions, 0 deletions
diff --git a/umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp b/umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp
new file mode 100644
index 00000000..d0359603
--- /dev/null
+++ b/umbrello/umbrello/codegenerators/cppcodegenerationpolicy.cpp
@@ -0,0 +1,390 @@
+/***************************************************************************
+ * *
+ * 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 Jun 23 2003
+ */
+
+// own header
+#include "cppcodegenerationpolicy.h"
+// qt/kde includes
+#include <qregexp.h>
+#include <kdebug.h>
+#include <kconfig.h>
+// app includes
+#include "cppcodegenerationpolicypage.h"
+#include "../uml.h"
+
+const bool CPPCodeGenerationPolicy::DEFAULT_AUTO_GEN_ACCESSORS = true;
+const bool CPPCodeGenerationPolicy::DEFAULT_INLINE_ACCESSORS = false;
+const bool CPPCodeGenerationPolicy::DEFAULT_INLINE_OPERATIONS = false;
+const bool CPPCodeGenerationPolicy::DEFAULT_VIRTUAL_DESTRUCTORS = true;
+const bool CPPCodeGenerationPolicy::DEFAULT_PACKAGE_IS_NAMESPACE = true;
+const char * CPPCodeGenerationPolicy::DEFAULT_STRING_CLASS_NAME = "string";
+const char * CPPCodeGenerationPolicy::DEFAULT_STRING_CLASS_INCLUDE = "string";
+const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_CLASS_NAME = "vector";
+const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_CLASS_INCLUDE = "vector";
+const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_METHOD_APPEND = "%VARNAME%.push_back(value);";
+const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_METHOD_REMOVE = "int size = %VARNAME%.size();\nfor ( int i = 0; i < size; ++i) {\n\t%ITEMCLASS% item = %VARNAME%.at(i);\n\tif(item == value) {\n\t\tvector<%ITEMCLASS%>::iterator it = %VARNAME%.begin() + i;\n\t\t%VARNAME%.erase(it);\n\t\treturn;\n\t}\n }";
+const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_METHOD_INIT = ""; // nothing to do in std::vector
+const char * CPPCodeGenerationPolicy::DEFAULT_OBJECT_METHOD_INIT = "%VARNAME% = new %ITEMCLASS%( );";
+const bool CPPCodeGenerationPolicy::DEFAULT_STRING_INCLUDE_GLOBAL = true;
+const bool CPPCodeGenerationPolicy::DEFAULT_VECTOR_INCLUDE_GLOBAL = true;
+const bool CPPCodeGenerationPolicy::DEFAULT_PUBLIC_ACCESSORS = false;
+
+
+// Constructors/Destructors
+//
+
+CPPCodeGenerationPolicy::CPPCodeGenerationPolicy(KConfig *config)
+{
+ init();
+ setDefaults(config,false);
+}
+
+CPPCodeGenerationPolicy::~CPPCodeGenerationPolicy ( ) { }
+
+//
+// Methods
+//
+
+// Accessor methods
+//
+/**
+ * Set the value of m_publicAccessors
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setAccessorsArePublic ( bool var )
+{
+ m_publicAccessors = var;
+ // @todo we should probably use an own signal for this
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/**
+ * Get the value of m_publicAccessors
+ * @return value the boolean value of m_publicAccessors
+ */
+bool CPPCodeGenerationPolicy::getAccessorsArePublic( )
+{
+ return m_publicAccessors;
+}
+
+/**
+ * Set the value of m_inlineAccessors
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setAccessorsAreInline ( bool var )
+{
+ m_inlineAccessors = var;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/**
+ * Get the value of m_inlineAccessors
+ * @return value the boolean value of m_inlineAccessors
+ */
+bool CPPCodeGenerationPolicy::getAccessorsAreInline( )
+{
+ return m_inlineAccessors;
+}
+
+/**
+ * Set the value of m_inlineOperations
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setOperationsAreInline ( bool var )
+{
+ m_inlineOperations = var;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/**
+ * Get the value of m_inlineOperations
+ * @return value the boolean value of m_inlineOperations
+ */
+bool CPPCodeGenerationPolicy::getOperationsAreInline( )
+{
+ return m_inlineOperations;
+}
+
+/**
+ * Set the value of m_virtualDestructors
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setDestructorsAreVirtual ( bool var )
+{
+ m_virtualDestructors = var;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/**
+ * Get the value of m_virtualDestructors
+ * @return value the boolean value of m_virtualDestructors
+ */
+bool CPPCodeGenerationPolicy::getDestructorsAreVirtual( )
+{
+ return m_virtualDestructors;
+}
+
+/**
+ * Set the value of m_packageIsNamespace
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setPackageIsNamespace ( bool var ) {
+ m_packageIsNamespace = var;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/**
+ * Get the value of m_packageIsNamespace
+ * @return value the boolean value of m_packageIsNamespace
+ */
+bool CPPCodeGenerationPolicy::getPackageIsNamespace( ) {
+ return m_packageIsNamespace;
+}
+
+/**
+ * Set the value of m_autoGenerateAccessors
+ * @param new_var the new value
+ */
+void CPPCodeGenerationPolicy::setAutoGenerateAccessors( bool var ) {
+ m_autoGenerateAccessors = var;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+bool CPPCodeGenerationPolicy::getAutoGenerateAccessors( ){
+ return m_autoGenerateAccessors;
+}
+
+QString CPPCodeGenerationPolicy::getStringClassName() {
+ return m_stringClassName;
+}
+
+QString CPPCodeGenerationPolicy::getStringClassNameInclude() {
+ return m_stringClassNameInclude;
+}
+
+QString CPPCodeGenerationPolicy::getVectorClassName() {
+ return m_vectorClassName;
+}
+
+QString CPPCodeGenerationPolicy::getVectorClassNameInclude() {
+ return m_vectorClassNameInclude;
+}
+
+void CPPCodeGenerationPolicy::setStringClassName(const QString &value) {
+ m_stringClassName = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+void CPPCodeGenerationPolicy::setStringClassNameInclude(const QString &value) {
+ m_stringClassNameInclude = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+void CPPCodeGenerationPolicy::setVectorClassName(const QString &value) {
+ m_vectorClassName = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+void CPPCodeGenerationPolicy::setVectorClassNameInclude(const QString &value) {
+ m_vectorClassNameInclude = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+/** determine if the string include is global one */
+bool CPPCodeGenerationPolicy::stringIncludeIsGlobal () {
+ return m_stringIncludeIsGlobal;
+}
+
+bool CPPCodeGenerationPolicy::vectorIncludeIsGlobal () {
+ return m_vectorIncludeIsGlobal;
+}
+
+void CPPCodeGenerationPolicy::setStringIncludeIsGlobal(bool value) {
+ m_stringIncludeIsGlobal = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+void CPPCodeGenerationPolicy::setVectorIncludeIsGlobal(bool value) {
+ m_vectorIncludeIsGlobal = value;
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+QString CPPCodeGenerationPolicy::getVectorMethodAppend(const QString & variableName, const QString & itemClassName) {
+ QString value = m_vectorMethodAppendBase;
+ if(!variableName.isEmpty())
+ value.replace(QRegExp("%VARNAME%"),variableName);
+ value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
+ if(!itemClassName.isEmpty())
+ value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
+ return value;
+}
+
+QString CPPCodeGenerationPolicy::getVectorMethodRemove(const QString & variableName, const QString & itemClassName) {
+ QString value = m_vectorMethodRemoveBase;
+ if(!variableName.isEmpty())
+ value.replace(QRegExp("%VARNAME%"),variableName);
+ value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
+ if(!itemClassName.isEmpty())
+ value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
+ return value;
+}
+
+QString CPPCodeGenerationPolicy::getVectorMethodInit(const QString & variableName, const QString & itemClassName) {
+ QString value = m_vectorMethodInitBase;
+ if(!variableName.isEmpty())
+ value.replace(QRegExp("%VARNAME%"),variableName);
+ value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
+ if(!itemClassName.isEmpty())
+ value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
+ return value;
+}
+
+QString CPPCodeGenerationPolicy::getObjectMethodInit(const QString & variableName, const QString & itemClassName) {
+ QString value = m_objectMethodInitBase;
+ if(!variableName.isEmpty())
+ value.replace(QRegExp("%VARNAME%"),variableName);
+ value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
+ if(!itemClassName.isEmpty())
+ value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
+ return value;
+}
+
+// Other methods
+//
+
+void CPPCodeGenerationPolicy::writeConfig ( KConfig * config )
+{
+
+ // write ONLY the CPP specific stuff
+ config->setGroup("CPP Code Generation");
+
+ config->writeEntry("autoGenAccessors",getAutoGenerateAccessors());
+
+ config->writeEntry("inlineAccessors",getAccessorsAreInline());
+ config->writeEntry("publicAccessors",getAccessorsArePublic());
+ config->writeEntry("inlineOps",getOperationsAreInline());
+ config->writeEntry("virtualDestructors",getDestructorsAreVirtual());
+ config->writeEntry("packageIsNamespace",getPackageIsNamespace());
+
+ config->writeEntry("stringClassName",getStringClassName());
+ config->writeEntry("stringClassNameInclude",getStringClassNameInclude());
+ config->writeEntry("stringIncludeIsGlobal",stringIncludeIsGlobal());
+
+ config->writeEntry("vectorClassName",getVectorClassName());
+ config->writeEntry("vectorClassNameInclude",getVectorClassNameInclude());
+ config->writeEntry("vectorIncludeIsGlobal",vectorIncludeIsGlobal());
+
+}
+
+void CPPCodeGenerationPolicy::setDefaults ( CPPCodeGenerationPolicy * cppclone, bool emitUpdateSignal )
+{
+ blockSignals(true); // we need to do this because otherwise most of these
+ // settors below will each send the modifiedCodeContent() signal
+ // needlessly (we can just make one call at the end).
+
+ {
+ setAutoGenerateAccessors(cppclone->getAutoGenerateAccessors());
+
+ setAccessorsAreInline(cppclone->getAccessorsAreInline());
+ setOperationsAreInline(cppclone->getOperationsAreInline());
+ setDestructorsAreVirtual(cppclone->getDestructorsAreVirtual());
+ setPackageIsNamespace(cppclone->getPackageIsNamespace());
+
+ setStringClassName(cppclone->getStringClassName() );
+ setStringClassNameInclude(cppclone->getStringClassNameInclude());
+ setStringIncludeIsGlobal(cppclone->stringIncludeIsGlobal());
+
+ setVectorClassName(cppclone->getVectorClassName());
+ setVectorClassNameInclude(cppclone->getVectorClassNameInclude());
+ setVectorIncludeIsGlobal(cppclone->vectorIncludeIsGlobal());
+
+ }
+
+ blockSignals(false); // "as you were citizen"
+
+ if(emitUpdateSignal)
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+
+}
+
+void CPPCodeGenerationPolicy::setDefaults( KConfig * config, bool emitUpdateSignal )
+{
+
+ if(!config)
+ return;
+
+ blockSignals(true); // we need to do this because otherwise most of these
+ // settors below will each send the modifiedCodeContent() signal
+ // needlessly (we can just make one call at the end).
+
+ // now do cpp specific stuff
+ config -> setGroup("CPP Code Generation");
+
+ setAutoGenerateAccessors(config->readBoolEntry("autoGenAccessors",DEFAULT_AUTO_GEN_ACCESSORS));
+
+ setAccessorsAreInline(config->readBoolEntry("inlineAccessors",DEFAULT_INLINE_ACCESSORS));
+ setAccessorsArePublic(config->readBoolEntry("publicAccessors",DEFAULT_PUBLIC_ACCESSORS));
+ setOperationsAreInline(config->readBoolEntry("inlineOps",DEFAULT_INLINE_OPERATIONS));
+ setDestructorsAreVirtual(config->readBoolEntry("virtualDestructors",DEFAULT_VIRTUAL_DESTRUCTORS));
+ setPackageIsNamespace(config->readBoolEntry("packageIsNamespace",DEFAULT_PACKAGE_IS_NAMESPACE));
+
+ setStringClassName(config->readEntry("stringClassName",DEFAULT_STRING_CLASS_NAME) );
+ setStringClassNameInclude(config->readEntry("stringClassNameInclude",DEFAULT_STRING_CLASS_INCLUDE ) );
+ setStringIncludeIsGlobal(config->readBoolEntry("stringIncludeIsGlobal",DEFAULT_STRING_INCLUDE_GLOBAL) );
+
+ setVectorClassName(config->readEntry("vectorClassName",DEFAULT_VECTOR_CLASS_NAME) );
+ setVectorClassNameInclude(config->readEntry("vectorClassNameInclude",DEFAULT_VECTOR_CLASS_INCLUDE) );
+ setVectorIncludeIsGlobal(config->readBoolEntry("vectorIncludeIsGlobal",DEFAULT_VECTOR_INCLUDE_GLOBAL) );
+
+ blockSignals(false); // "as you were citizen"
+
+ if(emitUpdateSignal)
+ UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
+}
+
+
+/**
+ * Create a new dialog interface for this object.
+ * @return dialog object
+ */
+CodeGenerationPolicyPage * CPPCodeGenerationPolicy::createPage ( QWidget *parent, const char *name ) {
+ return new CPPCodeGenerationPolicyPage ( parent, name, this );
+}
+
+void CPPCodeGenerationPolicy::init() {
+
+ m_inlineAccessors = DEFAULT_INLINE_ACCESSORS;
+ m_publicAccessors = DEFAULT_PUBLIC_ACCESSORS;
+ m_inlineOperations = DEFAULT_INLINE_OPERATIONS;
+ m_virtualDestructors = DEFAULT_VIRTUAL_DESTRUCTORS;
+ m_packageIsNamespace = DEFAULT_PACKAGE_IS_NAMESPACE;
+
+ m_stringClassName = DEFAULT_STRING_CLASS_NAME;
+ m_stringClassNameInclude = DEFAULT_STRING_CLASS_INCLUDE;
+ m_stringIncludeIsGlobal = DEFAULT_STRING_INCLUDE_GLOBAL;
+
+ m_vectorClassName = DEFAULT_VECTOR_CLASS_NAME;
+ m_vectorClassNameInclude = DEFAULT_VECTOR_CLASS_INCLUDE;
+ m_vectorIncludeIsGlobal = DEFAULT_VECTOR_INCLUDE_GLOBAL;
+
+ m_vectorMethodAppendBase = DEFAULT_VECTOR_METHOD_APPEND;
+ m_vectorMethodRemoveBase = DEFAULT_VECTOR_METHOD_REMOVE;
+ m_vectorMethodInitBase = DEFAULT_VECTOR_METHOD_INIT;
+ m_objectMethodInitBase = DEFAULT_OBJECT_METHOD_INIT;
+
+}
+
+
+#include "cppcodegenerationpolicy.moc"