00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "cppcodegenerationpolicy.h"
00019
00020 #include <qregexp.h>
00021 #include <kdebug.h>
00022 #include <kconfig.h>
00023
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 = "";
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
00046
00047
00048 CPPCodeGenerationPolicy::CPPCodeGenerationPolicy(KConfig *config)
00049 {
00050 init();
00051 setDefaults(config,false);
00052 }
00053
00054 CPPCodeGenerationPolicy::~CPPCodeGenerationPolicy ( ) { }
00055
00056
00057
00058
00059
00060
00061
00066 void CPPCodeGenerationPolicy::setAccessorsArePublic ( bool var )
00067 {
00068 m_publicAccessors = var;
00069
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
00265
00266
00267 void CPPCodeGenerationPolicy::writeConfig ( KConfig * config )
00268 {
00269
00270
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);
00294
00295
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);
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);
00329
00330
00331
00332
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);
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"