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.
tdesdk/umbrello/umbrello/assocrules.h

107 lines
3.4 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) 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.trinitydesktop.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