You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
391 lines
14 KiB
391 lines
14 KiB
/***************************************************************************
|
|
* *
|
|
* 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 <tqregexp.h>
|
|
#include <kdebug.h>
|
|
#include <tdeconfig.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(TDEConfig *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;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getStringClassName() {
|
|
return m_stringClassName;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getStringClassNameInclude() {
|
|
return m_stringClassNameInclude;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getVectorClassName() {
|
|
return m_vectorClassName;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getVectorClassNameInclude() {
|
|
return m_vectorClassNameInclude;
|
|
}
|
|
|
|
void CPPCodeGenerationPolicy::setStringClassName(const TQString &value) {
|
|
m_stringClassName = value;
|
|
UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
|
|
}
|
|
|
|
void CPPCodeGenerationPolicy::setStringClassNameInclude(const TQString &value) {
|
|
m_stringClassNameInclude = value;
|
|
UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
|
|
}
|
|
|
|
void CPPCodeGenerationPolicy::setVectorClassName(const TQString &value) {
|
|
m_vectorClassName = value;
|
|
UMLApp::app()->getCommonPolicy()->emitModifiedCodeContentSig();
|
|
}
|
|
|
|
void CPPCodeGenerationPolicy::setVectorClassNameInclude(const TQString &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();
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getVectorMethodAppend(const TQString & variableName, const TQString & itemClassName) {
|
|
TQString value = m_vectorMethodAppendBase;
|
|
if(!variableName.isEmpty())
|
|
value.replace(TQRegExp("%VARNAME%"),variableName);
|
|
value.replace(TQRegExp("%VECTORTYPENAME%"), m_vectorClassName);
|
|
if(!itemClassName.isEmpty())
|
|
value.replace(TQRegExp("%ITEMCLASS%"),itemClassName);
|
|
return value;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getVectorMethodRemove(const TQString & variableName, const TQString & itemClassName) {
|
|
TQString value = m_vectorMethodRemoveBase;
|
|
if(!variableName.isEmpty())
|
|
value.replace(TQRegExp("%VARNAME%"),variableName);
|
|
value.replace(TQRegExp("%VECTORTYPENAME%"), m_vectorClassName);
|
|
if(!itemClassName.isEmpty())
|
|
value.replace(TQRegExp("%ITEMCLASS%"),itemClassName);
|
|
return value;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getVectorMethodInit(const TQString & variableName, const TQString & itemClassName) {
|
|
TQString value = m_vectorMethodInitBase;
|
|
if(!variableName.isEmpty())
|
|
value.replace(TQRegExp("%VARNAME%"),variableName);
|
|
value.replace(TQRegExp("%VECTORTYPENAME%"), m_vectorClassName);
|
|
if(!itemClassName.isEmpty())
|
|
value.replace(TQRegExp("%ITEMCLASS%"),itemClassName);
|
|
return value;
|
|
}
|
|
|
|
TQString CPPCodeGenerationPolicy::getObjectMethodInit(const TQString & variableName, const TQString & itemClassName) {
|
|
TQString value = m_objectMethodInitBase;
|
|
if(!variableName.isEmpty())
|
|
value.replace(TQRegExp("%VARNAME%"),variableName);
|
|
value.replace(TQRegExp("%VECTORTYPENAME%"), m_vectorClassName);
|
|
if(!itemClassName.isEmpty())
|
|
value.replace(TQRegExp("%ITEMCLASS%"),itemClassName);
|
|
return value;
|
|
}
|
|
|
|
// Other methods
|
|
//
|
|
|
|
void CPPCodeGenerationPolicy::writeConfig ( TDEConfig * 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( TDEConfig * 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 ( TQWidget *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"
|