summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/folder.h
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/folder.h')
-rw-r--r--umbrello/umbrello/folder.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/umbrello/umbrello/folder.h b/umbrello/umbrello/folder.h
new file mode 100644
index 00000000..2e4d23f6
--- /dev/null
+++ b/umbrello/umbrello/folder.h
@@ -0,0 +1,199 @@
+/***************************************************************************
+ * *
+ * 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) 2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+#ifndef UMLFOLDER_H
+#define UMLFOLDER_H
+
+#include "package.h"
+#include "umlviewlist.h"
+#include "optionstate.h"
+
+/**
+ * This class manages the UMLObjects and UMLViews of a Folder.
+ * This class inherits from UMLPackage which contains most
+ * of the information.
+ *
+ * The UMLDoc class allocates a fixed instance of this class for
+ * each of the predefined Logical, UseCase, Component, Deployment, and
+ * Entity-Relationship folders. Further instances are created on demand
+ * for user folders.
+ *
+ * @short Non-graphical management of objects and diagrams of a Folder
+ * @author Oliver Kellogg
+ * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org
+ */
+
+class UMLFolder : public UMLPackage {
+ Q_OBJECT
+public:
+ /**
+ * Sets up a Folder.
+ *
+ * @param name The name of the Folder.
+ * @param id The unique id of the Folder. A new ID will be generated
+ * if this argument is left away.
+ */
+ explicit UMLFolder(const QString & name = "", Uml::IDType id = Uml::id_None);
+
+ /**
+ * Empty deconstructor.
+ */
+ virtual ~UMLFolder();
+
+ /**
+ * Initializes key variables of the class.
+ */
+ virtual void init();
+
+ /**
+ * Make a clone of this object.
+ */
+ virtual UMLObject* clone() const;
+
+ /**
+ * Set the localized name of this folder.
+ * This is set for the predefined root views (Logical,
+ * UseCase, Component, Deployment, EntityRelationship,
+ * and the Datatypes folder inside the Logical View.)
+ */
+ void setLocalName(const QString& localName);
+
+ /**
+ * Return the localized name of this folder.
+ * Only useful for the predefined root folders.
+ */
+ QString getLocalName();
+
+ /**
+ * Add a view to the diagram list.
+ */
+ void addView(UMLView *view);
+
+ /**
+ * Remove a view from the diagram list.
+ */
+ void removeView(UMLView *view);
+
+ /**
+ * Append the views in this folder to the given diagram list.
+ *
+ * @param viewList The UMLViewList to which to append the diagrams.
+ * @param includeNested Whether to include diagrams from nested folders
+ * (default: true.)
+ */
+ void appendViews(UMLViewList& viewList, bool includeNested = true);
+
+ /**
+ * Acivate the views in this folder.
+ * "Activation": Some widgets require adjustments after loading from file,
+ * those are done here.
+ */
+ void activateViews();
+
+ /**
+ * Seek a view of the given ID in this folder.
+ *
+ * @param id ID of the view to find.
+ * @return Pointer to the view if found, NULL if no view found.
+ */
+ UMLView *findView(Uml::IDType id);
+
+ /**
+ * Seek a view by the type and name given.
+ *
+ * @param type The type of view to find.
+ * @param name The name of the view to find.
+ * @param searchAllScopes Search in all subfolders (default: true.)
+ * @return Pointer to the view found, or NULL if not found.
+ */
+ UMLView * findView(Uml::Diagram_Type type, const QString &name, bool searchAllScopes = true);
+
+ /**
+ * Set the options for the views in this folder.
+ */
+ void setViewOptions(const Settings::OptionState& optionState);
+
+ /**
+ * Remove all views in this folder.
+ */
+ void removeAllViews();
+
+ /**
+ * Set the folder file name for a separate submodel.
+ */
+ void setFolderFile(const QString& fileName);
+
+ /**
+ * Get the folder file name for a separate submodel.
+ */
+ QString getFolderFile();
+
+ /**
+ * Creates a UML:Model or UML:Package element:
+ * UML:Model is created for the predefined fixed folders,
+ * UML:Package with stereotype "folder" is created for all else.
+ */
+ void saveToXMI( QDomDocument & qDoc, QDomElement & qElement );
+
+protected:
+ /**
+ * Auxiliary to saveToXMI(): Save the contained objects and diagrams.
+ * Can be used regardless of whether saving to the main model file
+ * or to an external folder file (see m_folderFile.)
+ */
+ void saveContents(QDomDocument& qDoc, QDomElement& qElement);
+
+ /**
+ * Auxiliary to saveToXMI(): Creates a <UML:Model> element when saving
+ * a predefined modelview, or a <UML:Package> element when saving a
+ * user created folder. Invokes saveContents() with the newly created
+ * element.
+ */
+ void save(QDomDocument& qDoc, QDomElement& qElement);
+
+ /**
+ * Auxiliary to load():
+ * Load the diagrams from the "diagrams" in the <XMI.extension>
+ */
+ bool loadDiagramsFromXMI(QDomNode& diagrams);
+
+ /**
+ * Folders in the listview can be marked such that their contents
+ * are saved to a separate file.
+ * This method loads the separate folder file.
+ * CAVEAT: This is not XMI standard compliant.
+ * If standard compliance is an issue then avoid folder files.
+ *
+ * @param path Fully qualified file name, i.e. absolute directory
+ * plus file name.
+ * @return True for success.
+ */
+ bool loadFolderFile(const QString& path);
+
+ /**
+ * Loads the UML:Component element.
+ */
+ bool load(QDomElement & element);
+
+private:
+ QString m_localName; ///< i18n name, only used for predefined root folders
+ /**
+ * If m_folderFile is not empty then it contains a file name to which
+ * this folder is saved.
+ * In this case the folder file acts as a physically separate submodel.
+ * What is saved in the main model is not the folder contents but a
+ * reference to the folder file.
+ */
+ QString m_folderFile;
+ UMLViewList m_diagrams;
+};
+
+#endif