umbrello  2.32.0
Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology
umldoc.h
Go to the documentation of this file.
1 /***************************************************************************
2  * This program is free software; you can redistribute it and/or modify *
3  * it under the terms of the GNU General Public License as published by *
4  * the Free Software Foundation; either version 2 of the License, or *
5  * (at your option) any later version. *
6  * *
7  * copyright (C) 2002-2020 *
8  * Umbrello UML Modeller Authors <umbrello-devel@kde.org> *
9  ***************************************************************************/
10 
11 #ifndef UMLDOC_H
12 #define UMLDOC_H
13 
14 // app includes
15 #include "basictypes.h"
16 #include "optionstate.h"
17 #include "umlobject.h"
18 #include "umlobjectlist.h"
19 #include "umlassociationlist.h"
20 #include "umlclassifierlist.h"
21 #include "umlentitylist.h"
22 #include "umlviewlist.h"
23 #include "umlstereotypelist.h"
24 #include "umlpackagelist.h"
25 
26 // kde includes
27 #if QT_VERSION < 0x050000
28 #include <kurl.h>
29 #endif
30 
31 // qt includes
32 #if QT_VERSION >= 0x050000
33 #include <QUrl>
34 #endif
35 #include <QMap>
36 
37 // system includes
38 #include <typeinfo>
39 
40 #define ENC_UNKNOWN 0
41 #define ENC_UNICODE 1
42 #define ENC_WINDOWS 2
43 #define ENC_OLD_ENC 3
44 
45 // forward declarations
46 class QDomNode;
47 class QDomElement;
48 class QPrinter;
49 
50 class IDChangeLog;
51 class DiagramsModel;
52 class ObjectsModel;
53 class StereotypesModel;
54 class UMLPackage;
55 class UMLFolder;
56 class DiagramPrintPage;
57 
74 class UMLDoc : public QObject
75 {
76  Q_OBJECT
77 public:
78 
79  UMLDoc();
80  ~UMLDoc();
81 
82  void init();
83 
84  void addView(UMLView *view);
85  void removeView(UMLView *view, bool enforceOneView = true);
86  void setMainViewID(Uml::ID::Type viewID);
88  void activateAllViews();
89  void removeAllViews();
90  void removeAllObjects();
91 
92  void setModified(bool modified = true);
93  bool isModified();
94  bool saveModified();
95 
96  bool newDocument();
97  void closeDocument();
98 #if QT_VERSION >= 0x050000
99  bool openDocument(const QUrl& url, const char *format = 0);
100  bool saveDocument(const QUrl& url, const char *format = 0);
101  const QUrl& url() const;
102  void setUrl(const QUrl& url);
103 #else
104  bool openDocument(const KUrl& url, const char *format = 0);
105  bool saveDocument(const KUrl& url, const char *format = 0);
106  const KUrl& url() const;
107  void setUrl(const KUrl& url);
108 #endif
109  void setUrlUntitled();
110 
111  void setupSignals();
112 
113  bool isUnique(const QString &name);
114  bool isUnique(const QString &name, UMLPackage *package);
115 
117 
118  void addAssociation(UMLAssociation *assoc);
119  void removeAssociation(UMLAssociation *assoc, bool doSetModified = true);
121  const UMLObject *roleAObj,
122  const UMLObject *roleBObj,
123  bool *swap = 0);
124 
125  QString createDiagramName(Uml::DiagramType::Enum type, bool askForName = true);
128  const QString& name,
130 
131  void removeDiagram(Uml::ID::Type id);
133  void renameDiagram(Uml::ID::Type id);
134 
135  void removeUMLObject(UMLObject* umlobject, bool deleteObject = false);
136  void renameUMLObject(UMLObject *o);
138 
140 
141  UMLObject* findUMLObject(const QString &name,
143  UMLObject *currentObj = 0);
144 
146  const QString &name,
148 
150  const QString &name,
152 
154  const QString &name,
156 
158  const QString &name,
160 
161  UMLClassifier * findUMLClassifier(const QString &name);
162 
164  UMLView * findView(Uml::DiagramType::Enum type, const QString &name,
165  bool searchAllScopes = false);
166 
167  void setName(const QString& name);
168  QString name() const;
169 
170  void setResolution(qreal resolution);
171  qreal resolution() const;
172  qreal dpiScale() const;
173 
174  Uml::ID::Type modelID() const;
175 
176  static bool tagEq (const QString& tag, const QString& pattern);
177 
178  virtual void saveToXMI1(QIODevice& file);
179 
180  short encoding(QIODevice & file);
181 
182  virtual bool loadFromXMI1(QIODevice& file, short encode = ENC_UNKNOWN);
183 
184  bool validateXMI1Header(QDomNode& headerNode);
185 
186  bool loadUMLObjectsFromXMI1(QDomElement & element);
187  void loadExtensionsFromXMI1(QDomNode & node);
188  bool loadDiagramsFromXMI1(QDomNode & node);
189 
190  void signalDiagramRenamed(UMLView * view);
192 
193  UMLClassifierList concepts(bool includeNested = true);
194  UMLClassifierList classesAndInterfaces(bool includeNested = true);
195  UMLEntityList entities(bool includeNested = true);
196  UMLFolder * datatypeFolder() const;
199  UMLPackageList packages(bool includeNested = true, Uml::ModelType::Enum model = Uml::ModelType::Logical);
200 
201  void print(QPrinter * pPrinter, DiagramPrintPage * selectPage);
202 
205 
206  bool assignNewIDs(UMLObject* obj);
207 
208  bool addUMLObject(UMLObject * object);
209  bool addUMLView(UMLView * pView);
210 
213 
215  void setCurrentRoot(Uml::ModelType::Enum rootType);
216 
217  virtual IDChangeLog* changeLog();
218 
219  void beginPaste();
220  void endPaste();
221 
223 
224  void setDocumentation(const QString &doc);
225  QString documentation() const;
226 
228 
229  QString uniqueViewName(const Uml::DiagramType::Enum type);
230 
231  bool loading() const;
232  void setLoading(bool state = true);
233 
234  bool importing() const;
235  void setImporting(bool state = true);
236 
237  bool closing() const;
238 
239  void addDefaultDatatypes();
240  void createDatatype(const QString &name);
241 
242  UMLStereotype *createStereotype(const QString &name);
243  UMLStereotype *findStereotype(const QString &name);
244  UMLStereotype *findOrCreateStereotype(const QString &name);
246  void addStereotype(UMLStereotype *s);
248  void addDefaultStereotypes();
249  const UMLStereotypeList& stereotypes() const;
250 
251  void writeToStatusBar(const QString &text);
252 
253  void resolveTypes();
254  bool loadDiagrams1();
255  void addDiagramToLoad(UMLFolder *folder, QDomNode node);
256 
260 
261  void setLoadingError(const QString &text);
262 
263 private:
264  void initSaveTimer();
265  void createDatatypeFolder();
266 
267  class Private;
268  Private *m_d;
269 
274 
280 
289 
290  QString m_Name;
292  int m_count;
294 #if QT_VERSION >= 0x050000
295  QUrl m_doc_url;
296 #else
297  KUrl m_doc_url;
298 #endif
299 
303 
308 
313 
317  QString m_Doc;
318 
323 
328 
333 
340 
345 
349 
355 
359  typedef QMap<UMLFolder*, QList<QDomNode>> DiagramsMap;
361 
362 public slots:
364  void slotAutoSave();
365  void slotDiagramPopupMenu(QWidget* umlview, const QPoint& point);
366 
367 signals:
372 
373  void sigObjectCreated(UMLObject *);
374  void sigObjectRemoved(UMLObject *);
375 
380 
386  void sigSetStatusbarProgressSteps(int totalSteps);
387 
393  void sigSetStatusbarProgress(int stepPosition);
394 
398  void sigWriteToStatusBar(const QString &text);
399 
404  void sigCurrentViewChanged();
405 
406 };
407 
408 #endif // UMLDOC_H
Uml::ModelType::Enum rootFolderType(UMLObject *obj)
Definition: umldoc.cpp:3211
void addDefaultStereotypes()
Definition: umldoc.cpp:1372
bool addUMLObject(UMLObject *object)
Definition: umldoc.cpp:1178
Definition: objectsmodel.h:20
Non-graphical information for a Package.
Definition: package.h:32
Uml::ID::Type m_modelID
xmi.id of this model in the <UML:Model>
Definition: umldoc.h:291
void addDefaultDatatypes()
Definition: umldoc.cpp:3461
UMLView * createDiagram(UMLFolder *folder, Uml::DiagramType::Enum type, const QString &name, Uml::ID::Type id=Uml::ID::None)
Definition: umldoc.cpp:1646
bool loadDiagramsFromXMI1(QDomNode &node)
Definition: umldoc.cpp:2890
void createDatatype(const QString &name)
Definition: umldoc.cpp:3480
bool addUMLView(UMLView *pView)
Definition: umldoc.cpp:3302
Information for a non-graphical Concept/Class.
Definition: classifier.h:39
ObjectsModel * objectsModel()
Definition: umldoc.cpp:2594
void setMainViewID(Uml::ID::Type viewID)
Definition: umldoc.cpp:2801
QString m_Doc
Definition: umldoc.h:317
bool newDocument()
Definition: umldoc.cpp:454
StereotypesModel * stereotypesModel()
Definition: umldoc.cpp:2604
void endPaste()
Definition: umldoc.cpp:3248
UMLDoc()
Definition: umldoc.cpp:108
UMLAssociation * findAssociation(Uml::AssociationType::Enum assocType, const UMLObject *roleAObj, const UMLObject *roleBObj, bool *swap=0)
Definition: umldoc.cpp:1427
OptionState & optionState()
Definition: optionstate.cpp:362
QList< UMLAssociation * > UMLAssociationList
Definition: umlassociationlist.h:18
void setImporting(bool state=true)
Definition: umldoc.cpp:1596
UMLFolder * m_root[Uml::ModelType::N_MODELTYPES]
Definition: umldoc.h:273
bool m_bClosing
Definition: umldoc.h:344
void setName(const QString &name)
Definition: umldoc.cpp:1997
Definition: basictypes.h:80
void sigObjectRemoved(UMLObject *)
Definition: moc_umldoc.cpp:336
UMLAssociation * createUMLAssociation(UMLObject *a, UMLObject *b, Uml::AssociationType::Enum type)
Definition: umldoc.cpp:1461
static bool tagEq(const QString &tag, const QString &pattern)
Definition: umldoc.cpp:3550
void setUrl(const KUrl &url)
Definition: umldoc.cpp:316
UMLViewList views(Uml::DiagramType::Enum type=Uml::DiagramType::Undefined)
Definition: umldoc.cpp:3111
void setResolution(qreal resolution)
Definition: umldoc.cpp:2015
UMLFolder * m_pCurrentRoot
Definition: umldoc.h:339
bool loadUMLObjectsFromXMI1(QDomElement &element)
Definition: umldoc.cpp:2638
Definition: idchangelog.h:26
QString a
Definition: petalnode.cpp:18
void writeToStatusBar(const QString &text)
Definition: umldoc.cpp:1206
Definition: umlview.h:34
QString uniqueViewName(const Uml::DiagramType::Enum type)
Definition: umldoc.cpp:1521
UMLFolder * m_datatypeRoot
Definition: umldoc.h:279
DiagramsModel * diagramsModel()
Definition: umldoc.cpp:2589
bool saveDocument(const KUrl &url, const char *format=0)
Definition: umldoc.cpp:775
void sigSetStatusbarProgressSteps(int totalSteps)
Definition: moc_umldoc.cpp:349
Sets up stereotype information.
Definition: stereotype.h:40
Definition: optionstate.h:314
QList< UMLEntity * > UMLEntityList
Definition: umlentitylist.h:17
bool loadDiagrams1()
Definition: umldoc.cpp:2559
void removeUMLObject(UMLObject *umlobject, bool deleteObject=false)
Definition: umldoc.cpp:1881
UMLStereotype * findStereotypeById(Uml::ID::Type id)
Definition: umldoc.cpp:1339
void setLoadingError(const QString &text)
Definition: umldoc.cpp:2599
Private * m_d
Definition: umldoc.h:267
void sigDiagramCreated(Uml::ID::Type id)
Definition: moc_umldoc.cpp:301
int m_count
auxiliary counter for the progress bar
Definition: umldoc.h:292
void signalDiagramRenamed(UMLView *view)
Definition: umldoc.cpp:3444
~UMLDoc()
Definition: umldoc.cpp:193
UMLFolder * datatypeFolder() const
Definition: umldoc.cpp:2981
QString m_Name
name of this model as stored in the <UML:Model> tag
Definition: umldoc.h:290
The base class for UML objects.
Definition: umlobject.h:73
Sets up association information.
Definition: association.h:32
bool loading() const
Definition: umldoc.cpp:1570
void removeStereotype(UMLStereotype *s)
Definition: umldoc.cpp:1362
QList< QPointer< UMLView > > UMLViewList
Definition: umlviewlist.h:26
void addAssociation(UMLAssociation *assoc)
Definition: umldoc.cpp:1479
void slotAutoSave()
Definition: umldoc.cpp:3385
UMLView * findView(Uml::ID::Type id)
Definition: umldoc.cpp:1003
QString createDiagramName(Uml::DiagramType::Enum type, bool askForName=true)
Definition: umldoc.cpp:1617
void sigSetStatusbarProgress(int stepPosition)
Definition: moc_umldoc.cpp:356
void removeDiagramCmd(Uml::ID::Type id)
Definition: umldoc.cpp:1825
bool assignNewIDs(UMLObject *obj)
Definition: umldoc.cpp:3155
void activateAllViews()
Definition: umldoc.cpp:3338
void loadExtensionsFromXMI1(QDomNode &node)
Definition: umldoc.cpp:2811
QMap< UMLFolder *, QList< QDomNode > > DiagramsMap
Definition: umldoc.h:359
short encoding(QIODevice &file)
Definition: umldoc.cpp:2208
QList< UMLStereotype * > UMLStereotypeList
Definition: umlstereotypelist.h:17
Enum
Definition: basictypes.h:77
const UMLStereotypeList & stereotypes() const
Definition: umldoc.cpp:1385
Definition: stereotypesmodel.h:24
QString documentation() const
Definition: umldoc.cpp:3277
bool isUnique(const QString &name)
Definition: umldoc.cpp:1232
void changeCurrentView(Uml::ID::Type id)
Definition: umldoc.cpp:1774
void setCurrentRoot(Uml::ModelType::Enum rootType)
Definition: umldoc.cpp:1868
void createDatatypeFolder()
Definition: umldoc.cpp:180
UMLClassifierList concepts(bool includeNested=true)
Definition: umldoc.cpp:2993
void sigObjectCreated(UMLObject *)
Definition: moc_umldoc.cpp:329
void removeAssociation(UMLAssociation *assoc, bool doSetModified=true)
Definition: umldoc.cpp:1396
#define ENC_UNKNOWN
Definition: umldoc.h:40
void slotDiagramPopupMenu(QWidget *umlview, const QPoint &point)
Definition: umldoc.cpp:3494
Enum
Definition: basictypes.h:106
QList< UMLClassifier * > UMLClassifierList
Definition: umlclassifierlist.h:17
bool validateXMI1Header(QDomNode &headerNode)
Definition: umldoc.cpp:2615
bool isModified()
Definition: umldoc.cpp:3142
UMLStereotypeList m_stereoList
Definition: umldoc.h:288
StereotypesModel * m_stereotypesModel
Definition: umldoc.h:348
void init()
Definition: umldoc.cpp:143
void addView(UMLView *view)
Definition: umldoc.cpp:224
QString name() const
Definition: umldoc.cpp:2005
void removeAllViews()
Definition: umldoc.cpp:2941
Non-graphical management of objects and diagrams of a Folder.
Definition: folder.h:34
QList< UMLPackage * > UMLPackageList
Definition: umlpackagelist.h:17
void setModified(bool modified=true)
Definition: umldoc.cpp:3127
void sigDiagramRenamed(Uml::ID::Type t)
Definition: moc_umldoc.cpp:315
Uml::ID::Type assignNewID(Uml::ID::Type oldID)
Definition: umldoc.cpp:3263
UMLViewList viewIterator()
Definition: umldoc.cpp:3096
void renameChildUMLObject(UMLObject *o)
Definition: umldoc.cpp:1738
void setupSignals()
Definition: umldoc.cpp:991
void sigResetStatusbarProgress()
Definition: moc_umldoc.cpp:343
qreal dpiScale() const
Definition: umldoc.cpp:2036
qreal m_resolution
Definition: umldoc.h:354
UMLClassifierList classesAndInterfaces(bool includeNested=true)
Definition: umldoc.cpp:3007
std::string Type
Definition: basictypes.h:351
UMLAssociationList associations()
Definition: umldoc.cpp:3051
UMLObject * findUMLObjectRecursive(Uml::ModelType::Enum, const QString &name, UMLObject::ObjectType type=UMLObject::ot_UMLObject)
Definition: umldoc.cpp:1132
UMLClassifierList datatypes()
Definition: umldoc.cpp:3033
DiagramsMap m_diagramsToLoad
Definition: umldoc.h:360
UMLEntityList entities(bool includeNested=true)
Definition: umldoc.cpp:3021
bool closing() const
Definition: umldoc.cpp:1605
UMLObject * findObjectById(Uml::ID::Type id)
Definition: umldoc.cpp:1036
void print(QPrinter *pPrinter, DiagramPrintPage *selectPage)
Definition: umldoc.cpp:3070
ObjectsModel * m_objectsModel
Definition: umldoc.h:347
UMLStereotype * findOrCreateStereotype(const QString &name)
Definition: umldoc.cpp:1325
Definition: diagramsmodel.h:25
ObjectType
Definition: umlobject.h:79
UMLStereotype * createStereotype(const QString &name)
Definition: umldoc.cpp:1297
void initSaveTimer()
Definition: umldoc.cpp:3365
void sigCurrentViewChanged()
Definition: moc_umldoc.cpp:370
Definition: basictypes.h:47
void settingsChanged(Settings::OptionState &optionState)
Definition: umldoc.cpp:3354
bool openDocument(const KUrl &url, const char *format=0)
Definition: umldoc.cpp:497
QTimer * m_pAutoSaveTimer
Definition: umldoc.h:322
bool b
Definition: cxx11-null-pointer-constant.h:6
void renameDiagram(Uml::ID::Type id)
Definition: umldoc.cpp:1678
void setLoading(bool state=true)
Definition: umldoc.cpp:1579
void closeDocument()
Definition: umldoc.cpp:402
virtual void saveToXMI1(QIODevice &file)
Definition: umldoc.cpp:2062
void removeDiagram(Uml::ID::Type id)
Definition: umldoc.cpp:1801
Definition: umlobject.h:82
IDChangeLog * m_pChangeLog
Definition: umldoc.h:302
bool m_bTypesAreResolved
Definition: umldoc.h:332
void renameUMLObject(UMLObject *o)
Definition: umldoc.cpp:1710
void sigDiagramRemoved(Uml::ID::Type id)
Definition: moc_umldoc.cpp:308
void setDocumentation(const QString &doc)
Definition: umldoc.cpp:3287
qreal resolution() const
Definition: umldoc.cpp:2026
Definition: basictypes.h:42
void sigWriteToStatusBar(const QString &text)
Definition: moc_umldoc.cpp:363
void removeAllObjects()
Definition: umldoc.cpp:2955
void removeView(UMLView *view, bool enforceOneView=true)
Definition: umldoc.cpp:263
UMLPackageList packages(bool includeNested=true, Uml::ModelType::Enum model=Uml::ModelType::Logical)
Definition: umldoc.cpp:2969
virtual bool loadFromXMI1(QIODevice &file, short encode=ENC_UNKNOWN)
Definition: umldoc.cpp:2310
UMLClassifier * findUMLClassifier(const QString &name)
Definition: umldoc.cpp:1164
bool m_modified
Definition: umldoc.h:293
A print dialog page.
Definition: diagramprintpage.h:37
void slotRemoveUMLObject(UMLObject *o)
Definition: umldoc.cpp:1215
void addDiagramToLoad(UMLFolder *folder, QDomNode node)
Definition: umldoc.cpp:2581
void setUrlUntitled()
Definition: umldoc.cpp:339
UMLStereotype * findStereotype(const QString &name)
Definition: umldoc.cpp:1310
bool saveModified()
Definition: umldoc.cpp:354
bool m_importing
Definition: umldoc.h:312
Uml::ID::Type modelID() const
Definition: umldoc.cpp:2050
Enum
Definition: basictypes.h:41
void addStereotype(UMLStereotype *s)
Definition: umldoc.cpp:1352
UMLObject * findUMLObjectRaw(Uml::ModelType::Enum, const QString &name, UMLObject::ObjectType type=UMLObject::ot_UMLObject)
Definition: umldoc.cpp:1097
virtual IDChangeLog * changeLog()
Definition: umldoc.cpp:3227
void sigDiagramChanged(Uml::DiagramType::Enum)
Definition: moc_umldoc.cpp:322
void beginPaste()
Definition: umldoc.cpp:3236
bool m_bLoading
Definition: umldoc.h:307
DiagramsModel * m_diagramsModel
Definition: umldoc.h:346
const Type None
special value for uninitialized ID
Definition: basictypes.h:353
Uml::ID::Type m_nViewID
Definition: umldoc.h:327
const KUrl & url() const
Definition: umldoc.cpp:330
UMLObject * findUMLObject(const QString &name, UMLObject::ObjectType type=UMLObject::ot_UMLObject, UMLObject *currentObj=0)
Definition: umldoc.cpp:1065
UMLFolder * currentRoot()
Definition: umldoc.cpp:1844
Definition: umldoc.cpp:96
bool importing() const
Definition: umldoc.cpp:1588
KUrl m_doc_url
Definition: umldoc.h:297
UMLFolder * rootFolder(Uml::ModelType::Enum mt)
Definition: umldoc.cpp:3196
void signalUMLObjectCreated(UMLObject *o)
Definition: umldoc.cpp:1983
void resolveTypes()
Definition: umldoc.cpp:2533
Definition: umldoc.h:74