umbrello: ToolBarState Class Reference

umbrello 25.04.0 Umbrello UML Modeller is a Unified Modelling Language (UML) diagram program based on KDE Technology

Public Slots | Signals | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
ToolBarState Class Reference

`#include <toolbarstate.h>`

Inheritance diagram for ToolBarState:

## Public Slots
virtual void | slotAssociationRemoved (AssociationWidget *association)
virtual void | slotWidgetRemoved (UMLWidget *widget)

## Signals
void | finished ()

## Public Member Functions
virtual | ~ToolBarState ()
virtual void | init ()
virtual void | cleanBeforeChange ()
virtual void | mousePress (QGraphicsSceneMouseEvent *ome)
virtual void | mouseRelease (QGraphicsSceneMouseEvent *ome)
virtual void | mouseDoubleClick (QGraphicsSceneMouseEvent *ome)
virtual void | mouseMove (QGraphicsSceneMouseEvent *ome)

## Protected Member Functions
| ToolBarState (UMLScene *umlScene)
virtual void | setCurrentElement ()
virtual void | mousePressAssociation ()
virtual void | mousePressWidget ()
virtual void | mousePressEmpty ()
virtual void | mouseReleaseAssociation ()
virtual void | mouseReleaseWidget ()
virtual void | mouseReleaseEmpty ()
virtual void | mouseDoubleClickAssociation ()
virtual void | mouseDoubleClickWidget ()
virtual void | mouseDoubleClickEmpty ()
virtual void | mouseMoveAssociation ()
virtual void | mouseMoveWidget ()
virtual void | mouseMoveEmpty ()
virtual void | changeTool ()
virtual UMLWidget * | currentWidget () const
virtual void | setCurrentWidget (UMLWidget *widget)
virtual AssociationWidget * | currentAssociation () const
virtual void | setCurrentAssociation (AssociationWidget *association)
void | setMouseEvent (QGraphicsSceneMouseEvent *ome, const QEvent::Type &type)
AssociationWidget * | associationAt (const QPointF &pos)
MessageWidget * | messageAt (const QPointF &pos)
FloatingDashLineWidget * | floatingLineAt (const QPointF &pos)

## Protected Attributes
UMLScene * | m_pUMLScene
| The UMLScene.
QGraphicsSceneMouseEvent * | m_pMouseEvent
| The mouse event currently in use.

## Private Attributes
UMLWidget * | m_currentWidget
| The widget currently in use, if any.
AssociationWidget * | m_currentAssociation
| The association currently in use, if any.

## Detailed Description

Base class for toolbar states. All toolbar states inherit directly or indirectly from this class. Toolbar states represent tools that work with the diagram (for example, to create widgets, make associations...). All the mouse events received in the diagram are delivered to the toolbar state currently active. The events are handled in the tool and it executes the needed actions.

All the mouse event handlers can be overridden in subclasses. However, the behaviour of the main handlers shouldn't be modified (apart from extend it, that is, call the base implementation before any other actions in the derived method).

In order to handle the events, each main handler has three protected "sub-handlers" named like the main handler with the suffixes "Association", "Widget" and "Empty". The events received in the main handlers are delivered to the suitable handler, depending on if the event happened on an association, on a widget or on an empty space of the diagram. Those methods are the ones to override or extend to specify the behaviour of the toolbar state.

The mouse events received in main handlers are tweaked to use the inverse position. The modified event is saved in m_pMouseEvent. This is the event that must be used everywhere.

The association or widget that will receive the events is set in press event. How they are set can be tweaked in subclasses overriding setCurrentElement(). Once a press event happens, all the mouse events and the release event are sent to the same widget or association. Mouse events are delivered only when mouse tracking is enabled. It is enabled in press event, and disabled in release event. Also, it is disabled in the toolbar state initialization. Additionally, it can be enabled or disabled in other situations by subclasses if needed.

After handling a release event, the tool is changed if needed. Default implementation sets the default tool if the button released was the right button. Subclasses can override this behaviour if needed.

When a toolbar state is selected, method init is called to revert its state to the initial. Subclasses should extend that method as needed. Also, method cleanBeforeChange() is called before changing it to the new tool. Subclasses should extend that method as needed.

Todo
  Handle, for example, left press, right press, left release, right release and other similar strange combinations?

## Constructor & Destructor Documentation

## ◆ ~ToolBarState()

ToolBarState::~ToolBarState | ( |  | ) |
| virtual

Destroys this ToolBarState. Frees m_pMouseEvent.

## ◆ ToolBarState()

ToolBarState::ToolBarState | ( | UMLScene * | umlScene | ) |
| protected

Creates a new ToolBarState. UMLScene is set as parent of this QObject, and name is left empty. Protected to avoid classes other than derived to create objects of this class.

Parameters

  umlScene | The UMLScene to use.

## Member Function Documentation

## ◆ associationAt()

AssociationWidget * ToolBarState::associationAt | ( | const QPointF & | pos | ) |
| protected

Returns the AssociationWidget at the specified position, or null if there is none. If there are more than one association at this point, it returns the first found.

Parameters

  pos | The position to get the association.

Returns
  The AssociationWidget at the specified position, or null if there is none.

Todo
  Better handling for associations at the same point

## ◆ changeTool()

void ToolBarState::changeTool | ( |  | ) |
| protectedvirtual

Changes the current tool to the default one if the right button was released. It can be overridden in subclasses if needed.

Reimplemented in ToolBarStateArrow.

## ◆ cleanBeforeChange()

void ToolBarState::cleanBeforeChange | ( |  | ) |
| virtual

Called when the current tool is changed to use another tool. Subclasses can extend, but not override, this method as needed. Default implementation does nothing.

Reimplemented in ToolBarStateAssociation, ToolBarStateMessages, and ToolBarStateOneWidget.

## ◆ currentAssociation()

AssociationWidget * ToolBarState::currentAssociation | ( |  | ) | const
| protectedvirtual

Returns the association currently in use.

Returns
  The association currently in use.

## ◆ currentWidget()

UMLWidget * ToolBarState::currentWidget | ( |  | ) | const
| protectedvirtual

Returns the widget currently in use.

Returns
  The widget currently in use.

## ◆ finished

void ToolBarState::finished | ( |  | ) |
| signal

## ◆ floatingLineAt()

FloatingDashLineWidget * ToolBarState::floatingLineAt | ( | const QPointF & | pos | ) |
| protected

Returns the FloatingDashLineWidget at the specified position, or null if there is none. The floatingdashline is only returned if it is visible.

Parameters

  pos | The position to get the floatingLine.

Returns
  The MessageWidget at the specified position, or null if there is none.

## ◆ init()

void ToolBarState::init | ( |  | ) |
| virtual

Goes back to the initial state. Subclasses can extend, but not override, this method as needed.

Reimplemented in ToolBarStateArrow, ToolBarStateAssociation, ToolBarStateMessages, and ToolBarStateOneWidget.

## ◆ messageAt()

MessageWidget * ToolBarState::messageAt | ( | const QPointF & | pos | ) |
| protected

Returns the MessageWidget at the specified position, or null if there is none. The message is only returned if it is visible. If there are more than one message at this point, it returns the first found.

Parameters

  pos | The position to get the message.

Returns
  The MessageWidget at the specified position, or null if there is none.

Todo
  Better handling for messages at the same point

## ◆ mouseDoubleClick()

void ToolBarState::mouseDoubleClick | ( | QGraphicsSceneMouseEvent * | ome | ) |
| virtual

Handler for mouse double click events. The current association or widget is set (if any), and events are delivered to the specific methods, depending on where the cursor was pressed. After delivering the events, the current association or widget is cleaned.

Parameters

  ome | The received event.

## ◆ mouseDoubleClickAssociation()

void ToolBarState::mouseDoubleClickAssociation | ( |  | ) |
| protectedvirtual

Called when the double click event happened on an association. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mouseDoubleClickEmpty()

void ToolBarState::mouseDoubleClickEmpty | ( |  | ) |
| protectedvirtual

Called when the double click event happened on an empty space. Default implementation cleans the selection.

## ◆ mouseDoubleClickWidget()

void ToolBarState::mouseDoubleClickWidget | ( |  | ) |
| protectedvirtual

Called when the double click event happened on a widget. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mouseMove()

void ToolBarState::mouseMove | ( | QGraphicsSceneMouseEvent * | ome | ) |
| virtual

Handler for mouse move events. Events are delivered to the specific methods, depending on where the cursor was pressed. It uses the current widget or association set in press event, if any. Then, the scene is scrolled if needed (if the cursor is moved in any of the 30 pixels width area from left, top, right or bottom sides, and there is more diagram currently not being shown in that direction). This method is only called when mouse tracking is enabled and the mouse is moved.

Parameters

  ome | The received event.

Reimplemented in ToolBarStateAssociation, ToolBarStateMessages, and ToolBarStateOneWidget.

## ◆ mouseMoveAssociation()

void ToolBarState::mouseMoveAssociation | ( |  | ) |
| protectedvirtual

Called when the move event happened when an association is currently available. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mouseMoveEmpty()

void ToolBarState::mouseMoveEmpty | ( |  | ) |
| protectedvirtual

Called when the move event happened when no association nor widget are currently available. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mouseMoveWidget()

void ToolBarState::mouseMoveWidget | ( |  | ) |
| protectedvirtual

Called when the move event happened when a widget is currently available. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mousePress()

void ToolBarState::mousePress | ( | QGraphicsSceneMouseEvent * | ome | ) |
| virtual

Handler for mouse press events. Mouse tracking is enabled, any pop up menu removed, the position of the cursor set and paste state disabled. Then, the current association or widget are set (if any), and events are delivered to the specific methods, depending on where the cursor was pressed.

Parameters

  ome | The received event.

See also
  setCurrentElement()

## ◆ mousePressAssociation()

void ToolBarState::mousePressAssociation | ( |  | ) |
| protectedvirtual

Called when the press event happened on an association. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mousePressEmpty()

void ToolBarState::mousePressEmpty | ( |  | ) |
| protectedvirtual

Called when the press event happened on an empty space. Default implementation cleans the selection.

Reimplemented in ToolBarStateArrow.

## ◆ mousePressWidget()

void ToolBarState::mousePressWidget | ( |  | ) |
| protectedvirtual

Called when the press event happened on a widget. Default implementation does nothing.

Reimplemented in ToolBarStateArrow.

## ◆ mouseRelease()

void ToolBarState::mouseRelease | ( | QGraphicsSceneMouseEvent * | ome | ) |
| virtual

Handler for mouse release events. Mouse tracking is disabled and the position of the cursor set. The events are delivered to the specific methods, depending on where the cursor was released, and the current association or widget cleaned. Finally, the current tool is changed if needed.

Parameters

  ome | The received event.

## ◆ mouseReleaseAssociation()

void ToolBarState::mouseReleaseAssociation | ( |  | ) |
| protectedvirtual

Called when the release event happened on an association. Default implementation does nothing.

Reimplemented in ToolBarStateArrow, and ToolBarStateAssociation.

## ◆ mouseReleaseEmpty()

void ToolBarState::mouseReleaseEmpty | ( |  | ) |
| protectedvirtual

Called when the release event happened on an empty space. Default implementation does nothing.

Reimplemented in ToolBarStateArrow, ToolBarStateAssociation, ToolBarStateMessages, ToolBarStateOneWidget, and ToolBarStateOther.

## ◆ mouseReleaseWidget()

void ToolBarState::mouseReleaseWidget | ( |  | ) |
| protectedvirtual

Called when the release event happened on a widget. Default implementation does nothing.

Reimplemented in ToolBarStateArrow, ToolBarStateAssociation, ToolBarStateMessages, and ToolBarStateOneWidget.

## ◆ setCurrentAssociation()

void ToolBarState::setCurrentAssociation | ( | AssociationWidget * | association | ) |
| protectedvirtual

Sets the association currently in use. This method is called in main press events handler just before calling the press event for associations handler. Default implementation is set the specified association, although this behaviour can be overridden in subclasses if needed.

Parameters

  association | The association to be set.

## ◆ setCurrentElement()

void ToolBarState::setCurrentElement | ( |  | ) |
| protectedvirtual

Sets the current association or widget. It sets the current element when a press event happened. The element will be used until the next release event. Default implementation first checks for associations, then message widgets and then any other widgets. It can be overridden in subclasses if needed.

Reimplemented in ToolBarStateMessages, ToolBarStateOneWidget, and ToolBarStateOther.

## ◆ setCurrentWidget()

void ToolBarState::setCurrentWidget | ( | UMLWidget * | widget | ) |
| protectedvirtual

Sets the widget currently in use. This method is called in main press events handler just before calling the press event for widgets handler. Default implementation is set the specified widget, although this behaviour can be overridden in subclasses if needed.

Parameters

  widget | The widget to be set.

Reimplemented in ToolBarStateArrow.

## ◆ setMouseEvent()

void ToolBarState::setMouseEvent | ( | QGraphicsSceneMouseEvent * | ome,
|  | const QEvent::Type & | type )
| protected

Sets m_pMouseEvent as the equivalent of the received event after transforming it using the inverse world matrix in the UMLScene. This method is called at the beginning of the main event handler methods.

Parameters

  ome | The mouse event to transform.
  type | The type of the event.

## ◆ slotAssociationRemoved

void ToolBarState::slotAssociationRemoved | ( | AssociationWidget * | association | ) |
| virtualslot

An association was removed from the UMLScene. If the association removed was the current association, the current association is set to 0. It can be extended in subclasses if needed.

## ◆ slotWidgetRemoved

void ToolBarState::slotWidgetRemoved | ( | UMLWidget * | widget | ) |
| virtualslot

A widget was removed from the UMLScene. If the widget removed was the current widget, the current widget is set to nullptr. It can be extended in subclasses if needed.

## Member Data Documentation

## ◆ m_currentAssociation

AssociationWidget* ToolBarState::m_currentAssociation
| private

The association currently in use, if any.

## ◆ m_currentWidget

UMLWidget* ToolBarState::m_currentWidget
| private

The widget currently in use, if any.

## ◆ m_pMouseEvent

QGraphicsSceneMouseEvent* ToolBarState::m_pMouseEvent
| protected

The mouse event currently in use.

## ◆ m_pUMLScene

UMLScene* ToolBarState::m_pUMLScene
| protected

The UMLScene.

The documentation for this class was generated from the following files:

- umbrello/toolbarstate.h
- umbrello/toolbarstate.cpp