codegenerator.h
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 : Thu Jun 19 2003 00015 * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org 00016 */ 00017 00018 00019 #ifndef CODEGENERATOR_H 00020 #define CODEGENERATOR_H 00021 00022 #include <qdict.h> 00023 #include <qdir.h> 00024 00025 #include "codegenerators/codegenpolicyext.h" 00026 #include "codegenerationpolicy.h" 00027 #include "umlpackagelist.h" 00028 #include "umlclassifierlist.h" 00029 #include "codedocumentlist.h" 00030 #include "codeviewerstate.h" 00031 #include "umlnamespace.h" 00032 00033 class UMLAttribute; 00034 class UMLDoc; 00035 class UMLObject; 00036 class UMLRole; 00037 class UMLOperation; 00038 00039 class ClassifierCodeDocument; 00040 class CodeAccessorMethod; 00041 class CodeBlock; 00042 class CodeBlockWithComments; 00043 class CodeClassField; 00044 class CodeClassFieldDeclarationBlock; 00045 class CodeComment; 00046 class CodeDocument; 00047 class CodeOperation; 00048 class CodeViewerDialog; 00049 00050 class KConfig; 00051 00082 class CodeGenerator : public QObject { 00083 Q_OBJECT 00084 00085 public: 00086 00087 // Constructors/Destructors 00088 // 00089 00098 CodeGenerator (); 00099 00105 CodeGenerator (QDomElement & element ); 00106 00110 virtual ~CodeGenerator ( ); 00111 00112 // Public attribute accessor methods 00113 // 00114 00119 bool addCodeDocument ( CodeDocument * add_object ); 00120 00128 // bool replaceCodeDocument ( CodeDocument * replace_doc=0, bool addIfPriorDocumentNotPresent=true, 00129 // bool deleteReplacedDocument=true ); 00130 00135 bool removeCodeDocument ( CodeDocument * remove_object ); 00136 00142 CodeDocumentList * getCodeDocumentList ( ); 00143 00144 // get a unique id for this codedocument 00145 QString getUniqueID ( CodeDocument * codeDoc ); 00146 00150 virtual void saveToXMI ( QDomDocument & doc, QDomElement & root ); 00151 00156 CodeDocument * findCodeDocumentByID (const QString &id ); 00157 00161 virtual void writeCodeToFile ( ); 00162 00163 // this method is here to provide class wizard the 00164 // ability to write out only those classes which 00165 // are selected by the user. 00166 virtual void writeCodeToFile(UMLClassifierList &list); 00167 00168 // these are utility methods for accessing the default 00169 // code gen policy object and *perhaps* should go away when we 00170 // finally implement the CodeGenDialog class -b.t. 00171 00172 void setModifyNamePolicy(CodeGenerationPolicy::ModifyNamePolicy p); 00173 CodeGenerationPolicy::ModifyNamePolicy modifyNamePolicy()const; 00174 00175 void setIncludeHeadings(bool i); 00176 bool includeHeadings() const; 00177 00178 void setHeadingFileDir(const QString &); 00179 QString headingFileDir() const; 00180 00181 void setForceDoc(bool f); 00182 bool forceDoc() const; 00183 00184 void setForceSections(bool f); 00185 bool forceSections() const; 00186 00187 00206 virtual QString getHeadingFile (const QString &file ); 00207 00217 virtual QString findFileName(CodeDocument * doc); 00218 00224 static QString cleanName ( const QString &name ); 00225 00234 QString formatDoc (const QString & text, const QString & linePrefix = " *", int lineWidth = 80 ); 00235 00244 static void findObjectsRelated(UMLClassifier *c, UMLPackageList &cList); 00245 00246 // a series of accessor method constructors that we need to define 00247 // for any particular language. 00248 virtual CodeDocument * newClassifierCodeDocument (UMLClassifier * classifier ) = 0; 00249 00253 virtual void loadFromXMI (QDomElement & element ); 00254 00259 virtual CodeDocument * newCodeDocument ( ); 00260 00264 virtual Uml::Programming_Language getLanguage() = 0; 00265 00271 //FIX 00272 // NOTE: this should be 'protected' or we could have problems with CPP code generator 00273 CodeDocument * findCodeDocumentByClassifier (UMLClassifier * classifier ); 00274 00279 virtual QStringList defaultDatatypes(); 00280 00283 virtual CodeViewerDialog * getCodeViewerDialog( QWidget* parent, CodeDocument * doc, 00284 Settings::CodeViewerState state); 00285 00293 virtual bool isReservedKeyword(const QString & rPossiblyReservedKeyword); 00294 00298 virtual const QStringList reservedKeywords() const; 00299 00303 virtual void createDefaultStereotypes (); 00304 00312 virtual void initFromParentDocument( ); 00313 00319 void connect_newcodegen_slots(); 00320 00321 protected: 00322 00327 // void removeAndDeleteAllAutoGeneratedCodeDocuments ( bool deleteRemovedDocs=true ); 00328 00344 QString overwritableName (const QString& name, const QString &extension ); 00345 00353 bool openFile (QFile& file, const QString &name); 00354 00357 void writeListedCodeDocsToFile(CodeDocumentList * docs); 00358 00359 static const char * hierarchicalCodeBlockNodeName; 00360 00361 // map of what code documents we currently have in this generator. 00362 QDict<CodeDocument> m_codeDocumentDictionary; 00363 00368 bool m_applyToAllRemaining; 00369 00373 UMLDoc* m_document; 00374 00375 private: 00376 00381 // this seems silly and overkill now. -b.t. 00382 // QMap<CodeDocument*,QString> *m_fileMap; 00383 00384 CodeDocumentList m_codedocumentVector; 00385 int lastIDIndex; 00386 00387 void initFields() ; 00388 00389 public slots: 00390 00392 virtual void checkAddUMLObject (UMLObject * obj); 00393 virtual void checkRemoveUMLObject (UMLObject * obj); 00394 00400 virtual void syncCodeToDocument ( ); 00401 00402 signals: 00403 00411 void codeGenerated(UMLClassifier* concept, bool generated); 00412 00413 }; 00414 00415 #endif // CODEGENERATOR_H 00416
