summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/assocrules.h
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/assocrules.h')
-rw-r--r--umbrello/umbrello/assocrules.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/umbrello/umbrello/assocrules.h b/umbrello/umbrello/assocrules.h
new file mode 100644
index 00000000..df33d6d8
--- /dev/null
+++ b/umbrello/umbrello/assocrules.h
@@ -0,0 +1,106 @@
+/***************************************************************************
+ * *
+ * 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) 2002-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+#ifndef ASSOCRULES_H
+#define ASSOCRULES_H
+
+#include "umlnamespace.h"
+namespace std
+ { class type_info; }
+
+class UMLWidget;
+
+/**
+ * Used to determine rules for associations.
+ *
+ * @author Paul Hensgen
+ * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org
+ */
+class AssocRules {
+public:
+ /**
+ * Constructor.
+ */
+ AssocRules();
+
+ /**
+ * Deconstructor.
+ */
+ ~AssocRules();
+
+ /**
+ * Returns whether an association is going to be allowed for the given
+ * values. This method is used to test if you can start an association.
+ */
+ static bool allowAssociation( Uml::Association_Type assocType, UMLWidget * widget );
+
+ static bool allowAssociation( Uml::Association_Type assocType, const std::type_info & );
+
+ /**
+ * Returns whether an association is valid with the given variables.
+ * This method is used to finish an association.
+ */
+ static bool allowAssociation( Uml::Association_Type assocType,
+ UMLWidget * widgetA, UMLWidget * widgetB,
+ bool extendedCheck = true );
+
+ /**
+ * Returns whether to allow a role text for the given association type.
+ */
+ static bool allowRole( Uml::Association_Type assocType );
+
+ /**
+ * Returns whether to allow a multiplicity text for the given
+ * association and widget type.
+ */
+ static bool allowMultiplicity( Uml::Association_Type assocType, Uml::Widget_Type widgetType );
+
+ /**
+ * Returns whether to allow an association to self for given variables.
+ */
+ static bool allowSelf( Uml::Association_Type assocType, Uml::Widget_Type widgetType );
+
+ /**
+ * Returns whether an implements association should be a Realisation or
+ * a Generalisation.
+ * as defined in m_AssocRules.
+ */
+ static Uml::Association_Type isGeneralisationOrRealisation(UMLWidget* widgetA, UMLWidget* widgetB);
+
+private:
+
+ /**
+ * Structure to help determine association rules.
+ */
+ struct Assoc_Rule {
+ Uml::Association_Type assoc_type; ///< association type
+ Uml::Widget_Type widgetA_type; ///< type of role A widget
+ Uml::Widget_Type widgetB_type; ///< type of role B widget
+ bool role; ///< role text
+ bool multiplicity; ///< multipliciy text on association
+ /// can have an association of same type going between widget each way
+ bool directional;
+
+ bool self; ///< association to self
+ };
+
+ /**
+ * Container that holds all the rules.
+ */
+ static Assoc_Rule m_AssocRules[];
+
+ /**
+ * The number of rules known about.
+ */
+ static int m_nNumRules;
+};
+
+#endif