From bd9e6617827818fd043452c08c606f07b78014a0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdesdk@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- umbrello/umbrello/umlview.h | 1255 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1255 insertions(+) create mode 100644 umbrello/umbrello/umlview.h (limited to 'umbrello/umbrello/umlview.h') diff --git a/umbrello/umbrello/umlview.h b/umbrello/umbrello/umlview.h new file mode 100644 index 00000000..99a39198 --- /dev/null +++ b/umbrello/umbrello/umlview.h @@ -0,0 +1,1255 @@ +/*************************************************************************** + * * + * 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-2007 * + * Umbrello UML Modeller Authors * + ***************************************************************************/ + +#ifndef UMLVIEW_H +#define UMLVIEW_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +// system includes +#include +#include +#include + +//local includes +#include "umlobjectlist.h" +#include "umlwidgetlist.h" +#include "associationwidgetlist.h" +#include "messagewidgetlist.h" +#include "optionstate.h" +#include "worktoolbar.h" + +// forward declarations +class ClassOptionsPage; +class IDChangeLog; +class ListPopupMenu; +class FloatingTextWidget; +class ObjectWidget; +class UMLFolder; +class UMLApp; +class UMLDoc; +class UMLAttribute; +class UMLCanvasObject; +class UMLClassifier; +class UMLViewImageExporter; + +class KPrinter; +class ToolBarState; +class ToolBarStateFactory; + +/** + * UMLView instances represent diagrams. + * The UMLApp instance manages a QWidgetStack of UMLView instances. + * The visible diagram is at the top of stack. + * The UMLView class inherits from QCanvasView and it owns the + * objects displayed on its related QCanvas (see m_WidgetList.) + * + * @author Paul Hensgen + * Bugs and comments to uml-devel@lists.sf.net or http://bugs.kde.org + */ +class UMLView : public QCanvasView { + Q_OBJECT +public: + friend class UMLViewImageExporterModel; + + /** + * Constructor + */ + UMLView(UMLFolder *parentFolder); + + /** + * Destructor + */ + virtual ~UMLView(); + + // Accessors and other methods dealing with loaded/saved data + + /** + * Return the UMLFolder in which this diagram lives. + */ + UMLFolder *getFolder() { + return m_pFolder; + } + + /** + * Set the UMLFolder in which this diagram lives. + */ + void setFolder(UMLFolder *folder) { + m_pFolder = folder; + } + + /** + * Return the documentation of the diagram. + */ + QString getDoc() const { + return m_Documentation; + } + + /** + * Set the documentation of the diagram. + */ + void setDoc( const QString &doc ) { + m_Documentation = doc; + } + + /** + * Return the name of the diagram. + */ + QString getName() const; + + /** + * Set the name of the diagram. + */ + void setName(const QString &name); + + /** + * Returns the type of the diagram. + */ + Uml::Diagram_Type getType() const { + return m_Type; + } + + /** + * Set the type of diagram. + */ + void setType( Uml::Diagram_Type type ) { + m_Type = type; + } + + /** + * Returns the fill color to use. + */ + QColor getFillColor() const; + + /** + * Set the background color. + * + * @param color The color to use. + */ + void setFillColor( const QColor &color ); + + /** + * Returns the line color to use. + */ + QColor getLineColor() const; + + /** + * Sets the line color. + * + * @param color The color to use. + */ + void setLineColor( const QColor &color ); + + /** + * Returns the line width to use. + */ + uint getLineWidth() const; + + /** + * Sets the line width. + * + * @param width The width to use. + */ + void setLineWidth( uint width ); + + /** + * Returns the ID of the diagram. + */ + Uml::IDType getID() const { + return m_nID; + } + + /** + * Sets the ID of the diagram. + */ + void setID( Uml::IDType id ) { + m_nID = id; + } + + /** + * Returns the zoom of the diagram. + */ + int getZoom() const { + return m_nZoom; + } + + /** + * Sets the zoom of the diagram. + */ + void setZoom(int zoom); + + /** + * Returns the height of the diagram. + */ + int getCanvasHeight() const { + return m_nCanvasHeight; + } + + /** + * Sets the height of the diagram. + */ + void setCanvasHeight(int height) { + m_nCanvasHeight = height; + } + + /** + * Returns the width of the diagram. + */ + int getCanvasWidth() const { + return m_nCanvasWidth; + } + + /** + * Sets the height of the diagram. + */ + void setCanvasWidth(int width) { + m_nCanvasWidth = width; + } + + /** + * Return whether to use snap to grid. + */ + bool getSnapToGrid() const { + return m_bUseSnapToGrid; + } + + /** + * Sets whether to snap to grid. + */ + void setSnapToGrid( bool bSnap ); + + /** + * Return whether to use snap to grid for component size. + */ + bool getSnapComponentSizeToGrid() const { + return m_bUseSnapComponentSizeToGrid; + } + + /** + * Returns the x grid size. + */ + int getSnapX() const { + return m_nSnapX; + } + + /** + * Returns the y grid size. + */ + int getSnapY() const { + return m_nSnapY; + } + + /** + * Returns the input coordinate with possible grid-snap applied. + */ + int snappedX(int x); + + /** + * Returns the input coordinate with possible grid-snap applied. + */ + int snappedY(int y); + + /** + * Returns whether to show snap grid or not. + */ + bool getShowSnapGrid() const; + + /** + * Sets whether to show snap grid. + */ + void setShowSnapGrid( bool bShow ); + + /** + * Sets whether to snap to grid for component size. + */ + void setSnapComponentSizeToGrid( bool bSnap ); + + /** + * Returns whether to use the fill/background color + */ + bool getUseFillColor() const; + + /** + * Sets whether to use the fill/background color + */ + void setUseFillColor(bool ufc); + + /** + * Returns the font to use + */ + QFont getFont() const; + + /** + * Sets the font for the view and optionally all the widgets on the view. + */ + void setFont(QFont font, bool changeAllWidgets = false); + + /** + * Returns whether to show operation signatures. + */ + bool getShowOpSig() const; + + /** + * Sets whether to show operation signatures. + */ + void setShowOpSig(bool bShowOpSig); + + /** + * Returns the options being used. + */ + const Settings::OptionState& getOptionState() const { + return m_Options; + } + + /** + * Sets the options to be used. + */ + void setOptionState( const Settings::OptionState& options) { + m_Options = options; + } + + /** + * Returns a reference to the association list. + */ + AssociationWidgetList& getAssociationList() { + return m_AssociationList; + } + + /** + * Returns a reference to the widget list. + */ + UMLWidgetList& getWidgetList() { + return m_WidgetList; + } + + /** + * Returns a reference to the message list. + */ + MessageWidgetList& getMessageList() { + return m_MessageList; + } + + // End of accessors and methods that only deal with loaded/saved data + //////////////////////////////////////////////////////////////////////// + + /** + * return the current zoom factor + */ + int currentZoom(); + + /** + * contains the implementation for printing functionality + */ + void print(KPrinter *pPrinter, QPainter & pPainter); + + /** + * Overrides the standard operation. + */ + void hideEvent(QHideEvent *he); + + /** + * Overrides the standard operation. + */ + void showEvent(QShowEvent *se); + + /** + * Sees if a message is relevant to the given widget. If it does delete it. + * @param w The widget to check messages against. + */ + void checkMessages(ObjectWidget * w); + + /** + * Finds a widget with the given ID. + * + * @param id The ID of the widget to find. + * + * @return Returns the widget found, returns 0 if no widget found. + */ + UMLWidget * findWidget(Uml::IDType id); + + /** + * Finds an association widget with the given ID. + * + * @param id The ID of the widget to find. + * + * @return Returns the widget found, returns 0 if no widget found. + */ + AssociationWidget * findAssocWidget(Uml::IDType id); + + /** + * Finds an association widget with the given type and widgets. + * + * @param at The Association_Type of the widget to find. + * @param pWidgetA Pointer to the UMLWidget of role A. + * @param pWidgetB Pointer to the UMLWidget of role B. + * + * @return Returns the widget found, returns 0 if no widget found. + */ + AssociationWidget * findAssocWidget(Uml::Association_Type at, + UMLWidget *pWidgetA, UMLWidget *pWidgetB); + + /** + * Finds an association widget with the given widgets and the given role B name. + * Considers the following association types: + * at_Association, at_UniAssociation, at_Composition, at_Aggregation + * This is used for seeking an attribute association. + * + * @param pWidgetA Pointer to the UMLWidget of role A. + * @param pWidgetB Pointer to the UMLWidget of role B. + * @param roleNameB Name at the B side of the association (the attribute name) + * + * @return Returns the widget found, returns 0 if no widget found. + */ + AssociationWidget * findAssocWidget(UMLWidget *pWidgetA, + UMLWidget *pWidgetB, const QString& roleNameB); + + /** + * Remove a widget from view. + * + * @param o The widget to remove. + */ + void removeWidget(UMLWidget * o); + + /** + * Sets a widget to a selected state and adds it to a list of selected widgets. + * + * @param w The widget to set to selected. + * @param me The mouse event containing the information about the selection. + */ + void setSelected(UMLWidget * w, QMouseEvent * me); + + /** + * Clear the selected widgets list. + */ + void clearSelected(); + + /** + * Move all the selected widgets by a relative X and Y offset. + * + * @param dX The distance to move horizontally. + * @param dY The distance to move vertically. + */ + void moveSelectedBy(int dX, int dY); + + /** + * Return the amount of widgets selected. + * + * @param filterText When true, do NOT count floating text widgets that + * belong to other widgets (i.e. only count tr_Floating.) + * Default: Count all widgets. + * @return Number of widgets selected. + */ + int getSelectCount(bool filterText = false) const; + + /** + * Set the useFillColor variable to all selected widgets + * + * @param useFC The state to set the widget to. + */ + void selectionUseFillColor(bool useFC); + + /** + * Set the font for all the currently selected items. + */ + void selectionSetFont( const QFont &font ); + + /** + * Set the line color for all the currently selected items. + */ + void selectionSetLineColor( const QColor &color ); + + /** + * Set the line width for all the currently selected items. + */ + void selectionSetLineWidth( uint width ); + + /** + * Set the fill color for all the currently selected items. + */ + void selectionSetFillColor( const QColor &color ); + + /** + * Toggles the show setting sel of all selected items. + */ + void selectionToggleShow(int sel); + + /** + * Delete the selected widgets list and the widgets in it. + */ + void deleteSelection(); + + /** + * Selects all widgets + */ + void selectAll(); + + /** + * Return a unique ID for the diagram. Used by the @ref ObjectWidget class. + * + * @return Return a unique ID for the diagram. + */ + Uml::IDType getLocalID(); + + /** + * Returns whether a widget is already on the diagram. + * + * @param id The id of the widget to check for. + * + * @return Returns true if the widget is already on the diagram, false if not. + */ + bool widgetOnDiagram(Uml::IDType id); + + /** + * Returns true if this diagram resides in an externalized folder. + * CHECK: It is probably cleaner to move this to the UMLListViewItem. + */ + bool isSavedInSeparateFile(); + + /** + * Get the pos variable. Used internally to keep track of the cursor. + */ + QPoint & getPos() { + return m_Pos; + } + + /** + * Set the pos variable. Used internally to keep track of the cursor. + * + * @param _pos The position to set to. + */ + void setPos(const QPoint &_pos) { + m_Pos = _pos; + } + + /** + * Sets the popup menu to use when clicking on a diagram background + * (rather than a widget or listView). + */ + void setMenu(); + + /** + * Reset the toolbar. + */ + void resetToolbar() { + emit sigResetToolBar(); + } + + /** + * Returns the status on whether in a paste state. + * + * @return Returns the status on whether in a paste state. + */ + bool getPaste() const { + return m_bPaste; + } + + /** + * Sets the status on whether in a paste state. + */ + void setPaste(bool paste) { + m_bPaste = paste; + } + + /** + * Returns a List of all the UMLObjects(Use Cases, Concepts and Actors) in the View + */ + UMLObjectList getUMLObjects(); + + /** + * Activate all the objects and associations after a load from the clipboard + */ + void activate(); + + /** + * Returns a list with all the selected associations from the diagram + */ + AssociationWidgetList getSelectedAssocs(); + + /** + * Fills the List with all the selected widgets from the diagram + * The list can be filled with all the selected widgets, or be filtered to prevent + * text widgets other than tr_Floating to be append. + * + * @param WidgetList The UMLWidgetList to fill. + * @param filterText Don't append the text, unless their role is tr_Floating + */ + bool getSelectedWidgets(UMLWidgetList& WidgetList, bool filterText = true); + + /** + * Activate the view after a load a new file + */ + void activateAfterLoad( bool bUseLog = false ); + + void endPartialWidgetPaste(); + void beginPartialWidgetPaste(); + + /** + * Removes a AssociationWidget from a diagram + * Physically deletes the AssociationWidget passed in. + * + * @param pAssoc Pointer to the AssociationWidget. + */ + void removeAssoc(AssociationWidget* pAssoc); + + /** + * Removes all the associations related to Widget + * + * @param pWidget Pointer to the widget to remove. + */ + void removeAssociations(UMLWidget* pWidget); + + /** + * Sets each association as selected if the widgets it associates are selected + */ + void selectAssociations(bool bSelect); + + /** + * Fills Associations with all the associations that includes a widget related to object + */ + void getWidgetAssocs(UMLObject* Obj, AssociationWidgetList & Associations); + + /** + * Removes All the associations of the diagram + */ + void removeAllAssociations(); + + /** + * Removes All the widgets of the diagram + */ + void removeAllWidgets(); + + /** + * Calls the same method in the DocWindow. + */ + void showDocumentation( UMLObject * object, bool overwrite ); + + /** + * Calls the same method in the DocWindow. + */ + void showDocumentation( UMLWidget * widget, bool overwrite ); + + /** + * Calls the same method in the DocWindow. + */ + void showDocumentation( AssociationWidget * widget, bool overwrite ); + + /** + * Calls the same method in the DocWindow. + */ + void updateDocumentation( bool clear ); + + /** + * Returns the PNG picture of the paste operation. + * + * @param rect the area of the diagram to copy + * @param diagram the class to store PNG picture of the paste operation. + */ + void getDiagram(const QRect &rect, QPixmap & diagram); + + /** + * Paint diagram to the paint device + */ + void getDiagram(const QRect &area, QPainter & painter); + + /** + * Returns the PNG picture of the paste operation. + */ + void copyAsImage(QPixmap*& pix); + + /** + * Returns the imageExporter used to export the view. + * + * @return The imageExporter used to export the view. + */ + UMLViewImageExporter* getImageExporter(); + + /** + * Adds an association to the view from the given data. + * Use this method when pasting. + */ + bool addAssociation( AssociationWidget* pAssoc , bool isPasteOperation = false); + + /** + * Removes an AssociationWidget from the association list + * and removes the corresponding UMLAssociation from the current UMLDoc. + */ + void removeAssocInViewAndDoc(AssociationWidget* assoc); + + /** + * Adds a widget to the view from the given data. + * Use this method when pasting. + */ + bool addWidget( UMLWidget * pWidget , bool isPasteOperation = false); + + /** + * Returns the offset point at which to place the paste from clipboard. + * Just add the amount to your co-ords. + * Only call this straight after the event, the value won't stay valid. + * Should only be called by Assoc widgets at the moment. no one else needs it. + */ + QPoint getPastePoint(); + + /** + * Reset the paste point. + */ + void resetPastePoint(); + + /** + * Called by the view or any of its children when they start a cut + * operation. + */ + void setStartedCut() { + m_bStartedCut = true; + } + + /** + * Creates automatically any Associations that the given @ref UMLWidget + * may have on any diagram. This method is used when you just add the UMLWidget + * to a diagram. + */ + void createAutoAssociations( UMLWidget * widget ); + + /** + * If the m_Type of the given widget is Uml::wt_Class then + * iterate through the class' attributes and create an + * association to each attribute type widget that is present + * on the current diagram. + */ + void createAutoAttributeAssociations(UMLWidget *widget); + + /** + * Refreshes containment association, i.e. removes possible old + * containment and adds new containment association if applicable. + * + * @param self Pointer to the contained object for which + * the association to the containing object is + * recomputed. + */ + void updateContainment(UMLCanvasObject *self); + + /** + * Sets the x grid size. + */ + void setSnapX( int x) { + m_nSnapX = x; + canvas() -> setAllChanged(); + } + + /** + * Sets the y grid size. + */ + void setSnapY( int y) { + m_nSnapY = y; + canvas() -> setAllChanged(); + } + + /** + * Shows the properties dialog for the view. + */ + bool showPropDialog(); + + /** + * Sets some options for all the @ref ClassifierWidget on the view. + */ + void setClassWidgetOptions( ClassOptionsPage * page ); + + /** + * Call before copying/cutting selected widgets. This will make sure + * any associations/message selected will make sure both the widgets + * widgets they are connected to are selected. + */ + void checkSelections(); + + /** + * This function checks if the currently selected items have all the same + * type (class, interface, ...). If true, the selection is unique and true + * will be returned. + * If there are no items selected, the function will return always true. + */ + bool checkUniqueSelection(); + + /** + * Asks for confirmation and clears everything on the diagram. + * Called from menus. + */ + void clearDiagram(); + + /** + * Changes snap to grid boolean. + * Called from menus. + */ + void toggleSnapToGrid(); + + /** + * Changes snap to grid for component size boolean. + * Called from menus. + */ + void toggleSnapComponentSizeToGrid(); + + /** + * Changes show grid boolean. + * Called from menus. + */ + void toggleShowGrid(); + + /** + * Changes the zoom to the currently set level (now loaded from file) + * Called from UMLApp::slotUpdateViews() + */ + void fileLoaded(); + + /** + * Sets the diagram width and height in pixels + */ + void setCanvasSize(int width, int height); + + /** + * Sets the size of the canvas to just fit on all the items + */ + void resizeCanvasToItems(); + + /** + * The width and height of a diagram canvas in pixels. + */ + static const int defaultCanvasSize; + + // Load/Save interface: + + /** + * Creates the "diagram" tag and fills it with the contents of the diagram. + */ + virtual void saveToXMI( QDomDocument & qDoc, QDomElement & qElement ); + + /** + * Loads the "diagram" tag. + */ + virtual bool loadFromXMI( QDomElement & qElement ); + + /** + * Loads the "UISDiagram" tag of Unisys.IntegratePlus.2 generated files. + */ + bool loadUISDiagram(QDomElement & qElement); + + /** + * Loads a "widget" element from XMI, used by loadFromXMI() and the clipboard. + */ + UMLWidget* loadWidgetFromXMI(QDomElement& widgetElement); + + /** + * Add an object to the application, and update the view. + */ + void addObject(UMLObject *object); + + /** + * Selects all the widgets within an internally kept rectangle. + */ + void selectWidgets(int px, int py, int qx, int qy); + + /** + * Determine whether on a sequence diagram we have clicked on a line + * of an Object. + * + * @return The widget thats line was clicked on. + * Returns 0 if no line was clicked on. + */ + ObjectWidget * onWidgetLine( const QPoint &point ); + + /** + * Return pointer to the first selected widget (for multi-selection) + */ + UMLWidget* getFirstMultiSelectedWidget() { + return m_SelectedList.first(); + } + + /** + * Tests the given point against all widgets and returns the + * widget for which the point is within its bounding rectangle. + * In case of multiple matches, returns the smallest widget. + * Returns NULL if the point is not inside any widget. + * Does not use or modify the m_pOnWidget member. + */ + UMLWidget *getWidgetAt(const QPoint& p); + + /** + * Initialize and announce a newly created widget. + * Auxiliary to contentsMouseReleaseEvent(). + */ + void setupNewWidget(UMLWidget *w); + + /** + * Return whether we are currently creating an object. + */ + bool getCreateObject() const { + return m_bCreateObject; + } + + /** + * Set whether we are currently creating an object. + */ + void setCreateObject(bool bCreate) { + m_bCreateObject = bCreate; + } + + /** + * Emit the sigRemovePopupMenu Qt signal. + */ + void emitRemovePopupMenu() { + emit sigRemovePopupMenu(); + } + + /** + * Used for creating unique name of collaboration messages. + */ + int generateCollaborationId(); + +protected: + + // Methods and members related to loading/saving + + bool loadWidgetsFromXMI( QDomElement & qElement ); + + bool loadMessagesFromXMI( QDomElement & qElement ); + + bool loadAssociationsFromXMI( QDomElement & qElement ); + + bool loadUisDiagramPresentation(QDomElement & qElement); + + /** + * Contains the unique ID to allocate to a widget that needs an + * ID for the view. @ref ObjectWidget is an example of this. + */ + Uml::IDType m_nLocalID; + + /** + * The ID of the view. Allocated by @ref UMLDoc + */ + Uml::IDType m_nID; + + /** + * The type of diagram to represent. + */ + Uml::Diagram_Type m_Type; + + /** + * The name of the diagram. + */ + QString m_Name; + + /** + * The documentation of the diagram. + */ + QString m_Documentation; + + /** + * Options used by view + */ + Settings::OptionState m_Options; + + /** + * Contains all the message widgets on the diagram. + */ + MessageWidgetList m_MessageList; + + /** + * Contains all the UMLWidgets on the diagram. + */ + UMLWidgetList m_WidgetList; + + /** + * Contains all the AssociationWidgets on the diagram. + */ + AssociationWidgetList m_AssociationList; + + /** + * The snap to grid x size. + */ + int m_nSnapX; + + /** + * The snap to grid y size. + */ + int m_nSnapY; + + /** + * Determines whether to use snap to grid. The default is off. + */ + bool m_bUseSnapToGrid; + + /** + * Determines whether to use snap to grid for component + * size. The default is off. + */ + bool m_bUseSnapComponentSizeToGrid; + + /** + * Determines whether to show the snap grid. The default will be on if the grid is on. + */ + bool m_bShowSnapGrid; + + /** + * The zoom level in percent, default 100 + */ + int m_nZoom; + + /** + * Width of canvas in pixels + */ + int m_nCanvasWidth; + + /** + * Height of canvas in pixels + */ + int m_nCanvasHeight; + + // End of methods and members related to loading/saving + //////////////////////////////////////////////////////////////////////// + + /** + * Override standard method. + */ + void closeEvent ( QCloseEvent * e ); + + /** + * Override standard method. + */ + void contentsDragEnterEvent(QDragEnterEvent* mouseEvent); + + /** + * Override standard method. + */ + void contentsDropEvent(QDropEvent* mouseEvent); + + + /** + * Gets the smallest area to print. + * + * @return Returns the smallest area to print. + */ + QRect getDiagramRect(); + + + /** + * Initializes key variables. + */ + void init(); + + /** + * Overrides the standard operation. + * Calls the same method in the current tool bar state. + */ + void contentsMouseReleaseEvent(QMouseEvent* mouseEvent); + + /** + * Overrides the standard operation. + * Calls the same method in the current tool bar state. + */ + void contentsMouseMoveEvent(QMouseEvent* mouseEvent); + + /** + * Override standard method. + * Calls the same method in the current tool bar state. + */ + void contentsMouseDoubleClickEvent(QMouseEvent* mouseEvent); + + /** + * Override standard method. + * Calls the same method in the current tool bar state. + */ + void contentsMousePressEvent(QMouseEvent* mouseEvent); + + + /** + * Selects all the widgets of the given association widget. + */ + void selectWidgetsOfAssoc (AssociationWidget * a); + + /** + * Calls setSelected on the given UMLWidget and enters + * it into the m_SelectedList while making sure it is + * there only once. + */ + void makeSelected (UMLWidget * uw); + + /** + * Updates the size of all components in this view. + */ + void updateComponentSizes(); + + /** + * Find the maximum bounding rectangle of FloatingTextWidget widgets. + * Auxiliary to copyAsImage(). + * + * @param ft Pointer to the FloatingTextWidget widget to consider. + * @param px X coordinate of lower left corner. This value will be + * updated if the X coordinate of the lower left corner + * of ft is smaller than the px value passed in. + * @param py Y coordinate of lower left corner. This value will be + * updated if the Y coordinate of the lower left corner + * of ft is smaller than the py value passed in. + * @param qx X coordinate of upper right corner. This value will be + * updated if the X coordinate of the upper right corner + * of ft is larger than the qx value passed in. + * @param qy Y coordinate of upper right corner. This value will be + * updated if the Y coordinate of the upper right corner + * of ft is larger than the qy value passed in. + */ + void findMaxBoundingRectangle(const FloatingTextWidget* ft, + int& px, int& py, int& qx, int& qy); + + void forceUpdateWidgetFontMetrics(QPainter *painter); + + /** + * Used for creating unique name of collaboration messages. + */ + int m_nCollaborationId; + + QPoint m_Pos; + bool m_bCreateObject, m_bDrawSelectedOnly, m_bPaste; + ListPopupMenu * m_pMenu; + UMLWidgetList m_SelectedList; + + /** + * Flag if view/children started cut operation. + */ + bool m_bStartedCut; + +private: + /** + * The folder in which this UMLView is contained + */ + UMLFolder *m_pFolder; + + /** + * set to true when a child has used the showDocumentation method, + * thus when one clicks on a child widget. + * Reset to false when clicking in an empty region of the view. + */ + bool m_bChildDisplayedDoc; + + ToolBarStateFactory* m_pToolBarStateFactory; + ToolBarState* m_pToolBarState; + + /** + * LocalID Changes Log for paste actions + */ + IDChangeLog * m_pIDChangesLog; + + /** + * + * True if the view was activated after the serialization(load) + */ + bool m_bActivated; + + /** + * Status of a popupmenu on view. + * true - a popup is on view + */ + bool m_bPopupShowing; + + /** + * The offset at which to paste the clipboard. + */ + QPoint m_PastePoint; + + /** + * Pointer to the UMLDoc + */ + UMLDoc* m_pDoc; + + /** + * The UMLViewImageExporter used to export the view. + */ + UMLViewImageExporter* m_pImageExporter; + + /** + * Create an association with the attribute attr associated with the UMLWidget + * widget if the UMLClassifier type is present on the current diagram. + */ + void createAutoAttributeAssociation(UMLClassifier *type, + UMLAttribute *attr, + UMLWidget *widget); + +public slots: + + void zoomIn(); + void zoomOut(); + + /** + * Changes the current tool to the selected tool. + * The current tool is cleaned and the selected tool initialized. + */ + void slotToolBarChanged(int c); + void slotObjectCreated(UMLObject * o); + void slotObjectRemoved(UMLObject * o); + + /** + * When a menu selection has been made on the menu + * that this view created, this method gets called. + */ + void slotMenuSelection(int sel); + + /** + * This slot is entered when an event has occurred on the views display, + * most likely a mouse event. Before it sends out that mouse event everyone + * that displays a menu on the views surface (widgets and this ) thould remove any + * menu. This stops more then one menu bieing displayed. + */ + void slotRemovePopupMenu(); + + /** + * makes this view the active view by asking the document to show us + */ + void slotActivate(); + + /** + * Connects to the signal that @ref UMLApp emits when a cut operation + * is successful. + * If the view or a child started the operation the flag m_bStartedCut will + * be set and we can carry out any operation that is needed, like deleting the selected + * widgets for the cut operation. + */ + void slotCutSuccessful(); + + /** + * Called by menu when to show the instance of the view. + */ + void slotShowView(); + + /** + * Overrides standard method from QWidget to resize canvas when + * it's shown. + */ + void show(); + +signals: + void sigResetToolBar(); + void sigColorChanged( Uml::IDType ); + void sigRemovePopupMenu(); + void sigClearAllSelected(); + void sigLineWidthChanged( Uml::IDType ); + void sigSnapToGridToggled(bool); + void sigSnapComponentSizeToGridToggled(bool); + void sigShowGridToggled(bool); + + /** + * Emitted when an association is removed. + */ + void sigAssociationRemoved(AssociationWidget*); + + /** + * Emitted when a widget is removed. + */ + void sigWidgetRemoved(UMLWidget*); +}; + +#endif // UMLVIEW_H -- cgit v1.2.3