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/classifierwidget.h

391 lines
11 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) 2004-2006 *
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
***************************************************************************/
#ifndef CLASSIFIERWIDGET_H
#define CLASSIFIERWIDGET_H
#include "umlwidget.h"
class TQPainter;
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.trinitydesktop.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(TQPainter & 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(TQDomDocument & qDoc, TQDomElement & qElement);
/**
* Loads the "classwidget" or "interfacewidget" XML element.
*/
bool loadFromXMI(TQDomElement & 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 TQSize(0,0) if it doesn't.
*
* @return TQSize of the templates flap.
*/
TQSize calculateTemplatesBoxSize();
/**
* Overrides method from UMLWidget.
*/
TQSize calculateSize();
/**
* Draws the interface as a circle with name underneath.
* Only applies when m_pObject->getBaseType() is ot_Interface.
*/
void drawAsCircle(TQPainter& 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.
*/
TQSize 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 TQPainter 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(TQPainter & 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