summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/classifierwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/classifierwidget.h')
-rw-r--r--umbrello/umbrello/classifierwidget.h390
1 files changed, 390 insertions, 0 deletions
diff --git a/umbrello/umbrello/classifierwidget.h b/umbrello/umbrello/classifierwidget.h
new file mode 100644
index 00000000..17172460
--- /dev/null
+++ b/umbrello/umbrello/classifierwidget.h
@@ -0,0 +1,390 @@
+/***************************************************************************
+ * *
+ * 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) 2004-2006 *
+ * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
+ ***************************************************************************/
+
+#ifndef CLASSIFIERWIDGET_H
+#define CLASSIFIERWIDGET_H
+
+#include "umlwidget.h"
+
+class QPainter;
+class UMLClassifier;
+class AssociationWidget;
+
+/**
+ * @short Common implementation for class widget and interface widget
+ * @author Oliver Kellogg
+ * @see UMLWidget
+ * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org
+ */
+class ClassifierWidget : public UMLWidget {
+public:
+
+ /**
+ * Constructs a ClassifierWidget.
+ *
+ * @param view The parent of this ClassifierWidget.
+ * @param o The UMLObject to represent.
+ */
+ ClassifierWidget(UMLView * view, UMLClassifier * o);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ClassifierWidget();
+
+ /**
+ * Toggles the status of whether to show StereoType.
+ */
+ void toggleShowStereotype();
+
+ /**
+ * Return the status of showing operations.
+ *
+ * @return Return the status of showing operations.
+ */
+ bool getShowOps() const;
+
+ /**
+ * Set the status of whether to show Operations
+ *
+ * @param _show True if operations shall be shown.
+ */
+ void setShowOps(bool _show);
+
+ /**
+ * Toggles the status of showing operations.
+ */
+ void toggleShowOps();
+
+ /**
+ * Return true if public operations/attributes are shown only.
+ */
+ bool getShowPublicOnly() const;
+
+ /**
+ * Set whether to show public operations/attributes only.
+ */
+ void setShowPublicOnly(bool _status);
+
+ /**
+ * Toggle whether to show public operations/attributes only.
+ */
+ void toggleShowPublicOnly();
+
+ /**
+ * Returns the status of whether to show visibility.
+ *
+ * @return True if visibility is shown.
+ */
+ bool getShowVisibility() const;
+
+ /**
+ * Set the status of whether to show visibility
+ *
+ * @param _visibility True if visibility shall be shown.
+ */
+ void setShowVisibility(bool _visibility);
+
+ /**
+ * Toggles the status of whether to show visibility
+ */
+ void toggleShowVisibility();
+
+ /**
+ * Return the status of showing operation signatures.
+ *
+ * @return Status of showing operation signatures.
+ */
+ Uml::Signature_Type getShowOpSigs() const;
+
+ /**
+ * Set the status of whether to show Operation signature
+ *
+ * @param _show True if operation signatures shall be shown.
+ */
+ void setShowOpSigs(bool _show);
+
+ /**
+ * Toggles the status of showing operation signatures.
+ */
+ void toggleShowOpSigs();
+
+ /**
+ * Returns the status of whether to show Package.
+ *
+ * @return True if package is shown.
+ */
+ bool getShowPackage() const;
+
+ /**
+ * Set the status of whether to show Package.
+ *
+ * @param _status True if package shall be shown.
+ */
+ void setShowPackage(bool _status);
+
+ /**
+ * Toggles the status of whether to show package.
+ */
+ void toggleShowPackage();
+
+ /**
+ * Set the type of signature to display for an Operation
+ *
+ * @param sig Type of signature to display for an operation.
+ */
+ void setOpSignature(Uml::Signature_Type sig);
+
+ /**
+ * Return the number of displayed attributes.
+ */
+ int displayedAttributes();
+
+ /**
+ * Return the number of displayed operations.
+ */
+ int displayedOperations();
+
+ /**
+ * Returns whether to show attributes.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ *
+ * @return True if attributes are shown.
+ */
+ bool getShowAtts() const {
+ return m_bShowAttributes;
+ }
+
+ /**
+ * Toggles whether to show attributes.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ */
+ void toggleShowAtts();
+
+ /**
+ * Returns whether to show attribute signatures.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ *
+ * @return Status of how attribute signatures are shown.
+ */
+ Uml::Signature_Type getShowAttSigs() {
+ return m_ShowAttSigs;
+ }
+
+ /**
+ * Toggles whether to show attribute signatures.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ */
+ void toggleShowAttSigs();
+
+ /**
+ * Sets whether to show attributes.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ *
+ * @param _show True if attributes shall be shown.
+ */
+ void setShowAtts(bool _show);
+
+ /**
+ * Sets whether to show attribute signature
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ *
+ * @param _show True if attribute signatures shall be shown.
+ */
+ void setShowAttSigs(bool _show);
+
+ /**
+ * Sets the type of signature to display for an attribute.
+ * Only applies when m_pObject->getBaseType() is ot_Class.
+ *
+ * @param sig Type of signature to display for an attribute.
+ */
+ void setAttSignature(Uml::Signature_Type sig);
+
+ /**
+ * Returns whether to draw as circle.
+ * Only applies when m_pObject->getBaseType() is ot_Interface.
+ *
+ * @return True if widget is drawn as circle.
+ */
+ bool getDrawAsCircle() const;
+
+ /**
+ * Toggles whether to draw as circle.
+ * Only applies when m_pObject->getBaseType() is ot_Interface.
+ */
+ void toggleDrawAsCircle();
+
+ /**
+ * Sets whether to draw as circle.
+ * Only applies when m_pObject->getBaseType() is ot_Interface.
+ *
+ * @param drawAsCircle True if widget shall be drawn as circle.
+ */
+ void setDrawAsCircle(bool drawAsCircle);
+
+ /**
+ * Changes this classifier from an interface to a class.
+ * Attributes and stereotype visibility is got from the view OptionState.
+ * This widget is also updated.
+ */
+ void changeToClass();
+
+ /**
+ * Changes this classifier from a class to an interface.
+ * Attributes are hidden and stereotype is shown.
+ * This widget is also updated.
+ */
+ void changeToInterface();
+
+ /**
+ * Set the AssociationWidget when this ClassWidget acts as
+ * an association class.
+ */
+ void setClassAssocWidget(AssociationWidget *assocwidget);
+
+ /**
+ * Return the AssociationWidget when this classifier acts as
+ * an association class (else return NULL.)
+ */
+ AssociationWidget *getClassAssocWidget();
+
+ /**
+ * Return the UMLClassifier which this ClassifierWidget
+ * represents.
+ */
+ UMLClassifier *getClassifier();
+
+ /**
+ * Overrides standard method.
+ * Auxiliary to reimplementations in the derived classes.
+ */
+ void draw(QPainter & p, int offsetX, int offsetY);
+
+ /**
+ * Extends base method to adjust also the association of a class
+ * association.
+ * Executes the base method and then, if file isn't loading and the
+ * classifier acts as a class association, the association position is
+ * updated.
+ *
+ * @param x The x-coordinate.
+ * @param y The y-coordinate.
+ */
+ virtual void adjustAssocs(int x, int y);
+
+ /**
+ * Creates the "classwidget" or "interfacewidget" XML element.
+ */
+ void saveToXMI(QDomDocument & qDoc, QDomElement & qElement);
+
+ /**
+ * Loads the "classwidget" or "interfacewidget" XML element.
+ */
+ bool loadFromXMI(QDomElement & qElement);
+
+public slots:
+ /**
+ * Will be called when a menu selection has been made from the
+ * popup menu.
+ *
+ * @param sel The selection id that has been selected.
+ */
+ void slotMenuSelection(int sel);
+
+protected:
+
+ /**
+ * Initializes key variables of the class.
+ */
+ void init();
+
+ /**
+ * Calculcates the size of the templates box in the top left
+ * if it exists, returns QSize(0,0) if it doesn't.
+ *
+ * @return QSize of the templates flap.
+ */
+ QSize calculateTemplatesBoxSize();
+
+ /**
+ * Overrides method from UMLWidget.
+ */
+ QSize calculateSize();
+
+ /**
+ * Draws the interface as a circle with name underneath.
+ * Only applies when m_pObject->getBaseType() is ot_Interface.
+ */
+ void drawAsCircle(QPainter& p, int offsetX, int offsetY);
+
+ /**
+ * Calculates the size of the object when drawn as a circle.
+ * Only applies when m_pObject->getBaseType() is ot_Interface.
+ */
+ QSize calculateAsCircleSize();
+
+ /**
+ * Updates m_ShowOpSigs to match m_bShowVisibility.
+ */
+ void updateSigs();
+
+ /**
+ * Return the number of displayed members of the given Object_Type.
+ * Takes into consideration m_bShowPublicOnly but not other settings,
+ */
+ int displayedMembers(Uml::Object_Type ot);
+
+ /**
+ * Auxiliary method for draw() of child classes:
+ * Draw the attributes or operations.
+ *
+ * @param p QPainter to paint to.
+ * @param ot Object type to draw, either ot_Attribute or ot_Operation.
+ * @param sigType Governs details of the member display.
+ * @param x X coordinate at which to draw the texts.
+ * @param y Y coordinate at which text drawing commences.
+ * @param fontHeight The font height.
+ */
+ void drawMembers(QPainter & p, Uml::Object_Type ot, Uml::Signature_Type sigType,
+ int x, int y, int fontHeight);
+
+ bool m_bShowOperations; ///< Loaded/saved item.
+ bool m_bShowPublicOnly; ///< Loaded/saved item.
+ bool m_bShowAccess; ///< Loaded/saved item.
+ bool m_bShowPackage; ///< Loaded/saved item.
+ bool m_bShowAttributes; ///< Loaded/saved item.
+ bool m_bDrawAsCircle; ///< Loaded/saved item.
+ Uml::Signature_Type m_ShowAttSigs; ///< Loaded/saved item.
+ Uml::Signature_Type m_ShowOpSigs; ///< Loaded/saved item.
+
+ /**
+ * Text width margin
+ */
+ static const int MARGIN;
+
+ /**
+ * Size of circle when interface is rendered as such
+ */
+ static const int CIRCLE_SIZE;
+
+ /// Auxiliary variable for size calculations and drawing
+ int m_bodyOffsetY;
+
+ /**
+ * The related AssociationWidget in case this classifier
+ * acts as an association class
+ */
+ AssociationWidget *m_pAssocWidget;
+
+};
+
+#endif