umbrello API Documentation

cppcodegenerationpolicy.cpp

00001 /***************************************************************************
00002  *                                                                         *
00003  *   This program is free software; you can redistribute it and/or modify  *
00004  *   it under the terms of the GNU General Public License as published by  *
00005  *   the Free Software Foundation; either version 2 of the License, or     *
00006  *   (at your option) any later version.                                   *
00007  *                                                                         *
00008  *   copyright (C) 2004-2006                                               *
00009  *   Umbrello UML Modeller Authors <uml-devel@uml.sf.net>                  *
00010  ***************************************************************************/
00011 
00012 /*  This code generated by:
00013  *      Author : thomas
00014  *      Date   : Mon Jun 23 2003
00015  */
00016 
00017 // own header
00018 #include "cppcodegenerationpolicy.h"
00019 // qt/kde includes
00020 #include <qregexp.h>
00021 #include <kdebug.h>
00022 #include <kconfig.h>
00023 // app includes
00024 #include "cppcodegenerationpolicypage.h"
00025 #include "../uml.h"
00026 
00027 const bool CPPCodeGenerationPolicy::DEFAULT_AUTO_GEN_ACCESSORS = true;
00028 const bool CPPCodeGenerationPolicy::DEFAULT_INLINE_ACCESSORS = false;
00029 const bool CPPCodeGenerationPolicy::DEFAULT_INLINE_OPERATIONS = false;
00030 const bool CPPCodeGenerationPolicy::DEFAULT_VIRTUAL_DESTRUCTORS = true;
00031 const bool CPPCodeGenerationPolicy::DEFAULT_PACKAGE_IS_NAMESPACE = true;
00032 const char * CPPCodeGenerationPolicy::DEFAULT_STRING_CLASS_NAME = "string";
00033 const char * CPPCodeGenerationPolicy::DEFAULT_STRING_CLASS_INCLUDE = "string";
00034 const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_CLASS_NAME = "vector";
00035 const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_CLASS_INCLUDE = "vector";
00036 const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_METHOD_APPEND = "%VARNAME%.push_back(value);";
00037 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 }";
00038 const char * CPPCodeGenerationPolicy::DEFAULT_VECTOR_METHOD_INIT = ""; // nothing to do in std::vector
00039 const char * CPPCodeGenerationPolicy::DEFAULT_OBJECT_METHOD_INIT = "%VARNAME% = new %ITEMCLASS%( );";
00040 const bool CPPCodeGenerationPolicy::DEFAULT_STRING_INCLUDE_GLOBAL = true;
00041 const bool CPPCodeGenerationPolicy::DEFAULT_VECTOR_INCLUDE_GLOBAL = true;
00042 const bool CPPCodeGenerationPolicy::DEFAULT_PUBLIC_ACCESSORS = false;
00043 
00044 
00045 // Constructors/Destructors
00046 //
00047 
00048 CPPCodeGenerationPolicy::CPPCodeGenerationPolicy(KConfig *config)
00049 {
00050     init();
00051     setDefaults(config,false);
00052 }
00053 
00054 CPPCodeGenerationPolicy::~CPPCodeGenerationPolicy ( ) { }
00055 
00056 //
00057 // Methods
00058 //
00059 
00060 // Accessor methods
00061 //
00066 void CPPCodeGenerationPolicy::setAccessorsArePublic ( bool var )
00067 {
00068     m_publicAccessors = var;
00069     // @todo we should probably use an own signal for this
00070     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00071 }
00072 
00077 bool CPPCodeGenerationPolicy::getAccessorsArePublic( )
00078 {
00079     return m_publicAccessors;
00080 }
00081 
00086 void CPPCodeGenerationPolicy::setAccessorsAreInline ( bool var )
00087 {
00088     m_inlineAccessors = var;
00089     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00090 }
00091 
00096 bool CPPCodeGenerationPolicy::getAccessorsAreInline( )
00097 {
00098     return m_inlineAccessors;
00099 }
00100 
00105 void CPPCodeGenerationPolicy::setOperationsAreInline ( bool var )
00106 {
00107     m_inlineOperations = var;
00108     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00109 }
00110 
00115 bool CPPCodeGenerationPolicy::getOperationsAreInline( )
00116 {
00117     return m_inlineOperations;
00118 }
00119 
00124 void CPPCodeGenerationPolicy::setDestructorsAreVirtual ( bool var )
00125 {
00126     m_virtualDestructors = var;
00127     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00128 }
00129 
00134 bool CPPCodeGenerationPolicy::getDestructorsAreVirtual( )
00135 {
00136     return m_virtualDestructors;
00137 }
00138 
00143 void CPPCodeGenerationPolicy::setPackageIsNamespace ( bool var ) {
00144     m_packageIsNamespace = var;
00145     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00146 }
00147 
00152 bool CPPCodeGenerationPolicy::getPackageIsNamespace( ) {
00153     return m_packageIsNamespace;
00154 }
00155 
00160 void CPPCodeGenerationPolicy::setAutoGenerateAccessors( bool var ) {
00161     m_autoGenerateAccessors = var;
00162     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00163 }
00164 
00165 bool CPPCodeGenerationPolicy::getAutoGenerateAccessors( ){
00166     return m_autoGenerateAccessors;
00167 }
00168 
00169 QString CPPCodeGenerationPolicy::getStringClassName() {
00170     return m_stringClassName;
00171 }
00172 
00173 QString CPPCodeGenerationPolicy::getStringClassNameInclude() {
00174     return m_stringClassNameInclude;
00175 }
00176 
00177 QString CPPCodeGenerationPolicy::getVectorClassName() {
00178     return m_vectorClassName;
00179 }
00180 
00181 QString CPPCodeGenerationPolicy::getVectorClassNameInclude() {
00182     return m_vectorClassNameInclude;
00183 }
00184 
00185 void CPPCodeGenerationPolicy::setStringClassName(const QString &value) {
00186     m_stringClassName = value;
00187     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00188 }
00189 
00190 void CPPCodeGenerationPolicy::setStringClassNameInclude(const QString &value) {
00191     m_stringClassNameInclude = value;
00192     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00193 }
00194 
00195 void CPPCodeGenerationPolicy::setVectorClassName(const QString &value) {
00196     m_vectorClassName = value;
00197     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00198 }
00199 
00200 void CPPCodeGenerationPolicy::setVectorClassNameInclude(const QString &value) {
00201     m_vectorClassNameInclude = value;
00202     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00203 }
00204 
00206 bool CPPCodeGenerationPolicy::stringIncludeIsGlobal () {
00207     return m_stringIncludeIsGlobal;
00208 }
00209 
00210 bool CPPCodeGenerationPolicy::vectorIncludeIsGlobal () {
00211     return m_vectorIncludeIsGlobal;
00212 }
00213 
00214 void CPPCodeGenerationPolicy::setStringIncludeIsGlobal(bool value) {
00215     m_stringIncludeIsGlobal = value;
00216     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00217 }
00218 
00219 void CPPCodeGenerationPolicy::setVectorIncludeIsGlobal(bool value) {
00220     m_vectorIncludeIsGlobal = value;
00221     UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00222 }
00223 
00224 QString CPPCodeGenerationPolicy::getVectorMethodAppend(const QString & variableName, const QString & itemClassName) {
00225     QString value = m_vectorMethodAppendBase;
00226     if(!variableName.isEmpty())
00227         value.replace(QRegExp("%VARNAME%"),variableName);
00228     value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
00229     if(!itemClassName.isEmpty())
00230         value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
00231     return value;
00232 }
00233 
00234 QString CPPCodeGenerationPolicy::getVectorMethodRemove(const QString & variableName, const QString & itemClassName) {
00235     QString value = m_vectorMethodRemoveBase;
00236     if(!variableName.isEmpty())
00237         value.replace(QRegExp("%VARNAME%"),variableName);
00238     value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
00239     if(!itemClassName.isEmpty())
00240         value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
00241     return value;
00242 }
00243 
00244 QString CPPCodeGenerationPolicy::getVectorMethodInit(const QString & variableName, const QString & itemClassName) {
00245     QString value = m_vectorMethodInitBase;
00246     if(!variableName.isEmpty())
00247         value.replace(QRegExp("%VARNAME%"),variableName);
00248     value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
00249     if(!itemClassName.isEmpty())
00250         value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
00251     return value;
00252 }
00253 
00254 QString CPPCodeGenerationPolicy::getObjectMethodInit(const QString & variableName, const QString & itemClassName) {
00255     QString value = m_objectMethodInitBase;
00256     if(!variableName.isEmpty())
00257         value.replace(QRegExp("%VARNAME%"),variableName);
00258     value.replace(QRegExp("%VECTORTYPENAME%"), m_vectorClassName);
00259     if(!itemClassName.isEmpty())
00260         value.replace(QRegExp("%ITEMCLASS%"),itemClassName);
00261     return value;
00262 }
00263 
00264 // Other methods
00265 //
00266 
00267 void CPPCodeGenerationPolicy::writeConfig ( KConfig * config )
00268 {
00269 
00270     // write ONLY the CPP specific stuff
00271     config->setGroup("CPP Code Generation");
00272 
00273     config->writeEntry("autoGenAccessors",getAutoGenerateAccessors());
00274 
00275     config->writeEntry("inlineAccessors",getAccessorsAreInline());
00276     config->writeEntry("publicAccessors",getAccessorsArePublic());
00277     config->writeEntry("inlineOps",getOperationsAreInline());
00278     config->writeEntry("virtualDestructors",getDestructorsAreVirtual());
00279     config->writeEntry("packageIsNamespace",getPackageIsNamespace());
00280 
00281     config->writeEntry("stringClassName",getStringClassName());
00282     config->writeEntry("stringClassNameInclude",getStringClassNameInclude());
00283     config->writeEntry("stringIncludeIsGlobal",stringIncludeIsGlobal());
00284 
00285     config->writeEntry("vectorClassName",getVectorClassName());
00286     config->writeEntry("vectorClassNameInclude",getVectorClassNameInclude());
00287     config->writeEntry("vectorIncludeIsGlobal",vectorIncludeIsGlobal());
00288 
00289 }
00290 
00291 void CPPCodeGenerationPolicy::setDefaults ( CPPCodeGenerationPolicy * cppclone, bool emitUpdateSignal )
00292 {
00293     blockSignals(true); // we need to do this because otherwise most of these
00294     // settors below will each send the modifiedCodeContent() signal
00295     // needlessly (we can just make one call at the end).
00296 
00297     {
00298         setAutoGenerateAccessors(cppclone->getAutoGenerateAccessors());
00299 
00300         setAccessorsAreInline(cppclone->getAccessorsAreInline());
00301         setOperationsAreInline(cppclone->getOperationsAreInline());
00302         setDestructorsAreVirtual(cppclone->getDestructorsAreVirtual());
00303         setPackageIsNamespace(cppclone->getPackageIsNamespace());
00304 
00305         setStringClassName(cppclone->getStringClassName() );
00306         setStringClassNameInclude(cppclone->getStringClassNameInclude());
00307         setStringIncludeIsGlobal(cppclone->stringIncludeIsGlobal());
00308 
00309         setVectorClassName(cppclone->getVectorClassName());
00310         setVectorClassNameInclude(cppclone->getVectorClassNameInclude());
00311         setVectorIncludeIsGlobal(cppclone->vectorIncludeIsGlobal());
00312 
00313     }
00314 
00315     blockSignals(false); // "as you were citizen"
00316 
00317     if(emitUpdateSignal)
00318         UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00319 
00320 }
00321 
00322 void CPPCodeGenerationPolicy::setDefaults( KConfig * config, bool emitUpdateSignal )
00323 {
00324 
00325     if(!config)
00326         return;
00327 
00328     blockSignals(true); // we need to do this because otherwise most of these
00329     // settors below will each send the modifiedCodeContent() signal
00330     // needlessly (we can just make one call at the end).
00331 
00332     // now do cpp specific stuff
00333     config -> setGroup("CPP Code Generation");
00334 
00335     setAutoGenerateAccessors(config->readBoolEntry("autoGenAccessors",DEFAULT_AUTO_GEN_ACCESSORS));
00336 
00337     setAccessorsAreInline(config->readBoolEntry("inlineAccessors",DEFAULT_INLINE_ACCESSORS));
00338     setAccessorsArePublic(config->readBoolEntry("publicAccessors",DEFAULT_PUBLIC_ACCESSORS));
00339     setOperationsAreInline(config->readBoolEntry("inlineOps",DEFAULT_INLINE_OPERATIONS));
00340     setDestructorsAreVirtual(config->readBoolEntry("virtualDestructors",DEFAULT_VIRTUAL_DESTRUCTORS));
00341     setPackageIsNamespace(config->readBoolEntry("packageIsNamespace",DEFAULT_PACKAGE_IS_NAMESPACE));
00342 
00343     setStringClassName(config->readEntry("stringClassName",DEFAULT_STRING_CLASS_NAME) );
00344     setStringClassNameInclude(config->readEntry("stringClassNameInclude",DEFAULT_STRING_CLASS_INCLUDE ) );
00345     setStringIncludeIsGlobal(config->readBoolEntry("stringIncludeIsGlobal",DEFAULT_STRING_INCLUDE_GLOBAL) );
00346 
00347     setVectorClassName(config->readEntry("vectorClassName",DEFAULT_VECTOR_CLASS_NAME) );
00348     setVectorClassNameInclude(config->readEntry("vectorClassNameInclude",DEFAULT_VECTOR_CLASS_INCLUDE) );
00349     setVectorIncludeIsGlobal(config->readBoolEntry("vectorIncludeIsGlobal",DEFAULT_VECTOR_INCLUDE_GLOBAL) );
00350 
00351     blockSignals(false); // "as you were citizen"
00352 
00353     if(emitUpdateSignal)
00354         UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
00355 }
00356 
00357 
00362 CodeGenerationPolicyPage * CPPCodeGenerationPolicy::createPage ( QWidget *parent, const char *name ) {
00363     return new CPPCodeGenerationPolicyPage ( parent, name, this );
00364 }
00365 
00366 void CPPCodeGenerationPolicy::init() {
00367 
00368     m_inlineAccessors = DEFAULT_INLINE_ACCESSORS;
00369     m_publicAccessors = DEFAULT_PUBLIC_ACCESSORS;
00370     m_inlineOperations = DEFAULT_INLINE_OPERATIONS;
00371     m_virtualDestructors = DEFAULT_VIRTUAL_DESTRUCTORS;
00372     m_packageIsNamespace = DEFAULT_PACKAGE_IS_NAMESPACE;
00373 
00374     m_stringClassName = DEFAULT_STRING_CLASS_NAME;
00375     m_stringClassNameInclude = DEFAULT_STRING_CLASS_INCLUDE;
00376     m_stringIncludeIsGlobal = DEFAULT_STRING_INCLUDE_GLOBAL;
00377 
00378     m_vectorClassName = DEFAULT_VECTOR_CLASS_NAME;
00379     m_vectorClassNameInclude = DEFAULT_VECTOR_CLASS_INCLUDE;
00380     m_vectorIncludeIsGlobal = DEFAULT_VECTOR_INCLUDE_GLOBAL;
00381 
00382     m_vectorMethodAppendBase = DEFAULT_VECTOR_METHOD_APPEND;
00383     m_vectorMethodRemoveBase = DEFAULT_VECTOR_METHOD_REMOVE;
00384     m_vectorMethodInitBase = DEFAULT_VECTOR_METHOD_INIT;
00385     m_objectMethodInitBase = DEFAULT_OBJECT_METHOD_INIT;
00386 
00387 }
00388 
00389 
00390 #include "cppcodegenerationpolicy.moc"
KDE Logo
This file is part of the documentation for umbrello Version 3.1.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Jun 26 08:07:55 2007 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003