floatingtextwidgetcontroller.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "floatingtextwidgetcontroller.h"
00014
00015 #include <kdebug.h>
00016
00017 #include "floatingtextwidget.h"
00018 #include "messagewidget.h"
00019 #include "objectwidget.h"
00020
00021 FloatingTextWidgetController::FloatingTextWidgetController(FloatingTextWidget *floatingTextWidget):
00022 UMLWidgetController(floatingTextWidget) {
00023 m_floatingTextWidget = floatingTextWidget;
00024 m_unconstrainedPositionX = 0;
00025 m_unconstrainedPositionY = 0;
00026 m_movementDirectionX = 0;
00027 m_movementDirectionY = 0;
00028 }
00029
00030 FloatingTextWidgetController::~FloatingTextWidgetController() {
00031 }
00032
00033 void FloatingTextWidgetController::saveWidgetValues(QMouseEvent *me) {
00034 UMLWidgetController::saveWidgetValues(me);
00035
00036 m_unconstrainedPositionX = m_widget->getX();
00037 m_unconstrainedPositionY = m_widget->getY();
00038 m_movementDirectionX = 0;
00039 m_movementDirectionY = 0;
00040 }
00041
00042 bool FloatingTextWidgetController::isInResizeArea(QMouseEvent *me) {
00043 return false;
00044 }
00045
00046 void FloatingTextWidgetController::moveWidgetBy(int diffX, int diffY) {
00047 if (m_floatingTextWidget->m_Role == Uml::tr_Seq_Message_Self)
00048 return;
00049
00050 if (m_floatingTextWidget->m_Role == Uml::tr_Seq_Message
00051 && ((MessageWidget*)m_floatingTextWidget->m_pLink)->getSelected()) {
00052 return;
00053 }
00054
00055 m_unconstrainedPositionX += diffX;
00056 m_unconstrainedPositionY += diffY;
00057 QPoint constrainedPosition = constrainPosition(diffX, diffY);
00058
00059 int newX = constrainedPosition.x();
00060 int newY = constrainedPosition.y();
00061
00062 if (!m_movementDirectionX) {
00063 if (m_unconstrainedPositionX != constrainedPosition.x()) {
00064 m_movementDirectionX = (diffX > 0)? 1: -1;
00065 }
00066 } else if ((m_movementDirectionX < 0 && m_unconstrainedPositionX > m_floatingTextWidget->getX()) ||
00067 (m_movementDirectionX > 0 && m_unconstrainedPositionX < m_floatingTextWidget->getX()) ) {
00068 newX = m_unconstrainedPositionX;
00069 m_movementDirectionX = 0;
00070 }
00071
00072 if (!m_movementDirectionY) {
00073 if (m_unconstrainedPositionY != constrainedPosition.y()) {
00074 m_movementDirectionY = (diffY > 0)? 1: -1;
00075 }
00076 } else if ((m_movementDirectionY < 0 && m_unconstrainedPositionY > m_floatingTextWidget->getY()) ||
00077 (m_movementDirectionY > 0 && m_unconstrainedPositionY < m_floatingTextWidget->getY()) ) {
00078 newY = m_unconstrainedPositionY;
00079 m_movementDirectionY = 0;
00080 }
00081
00082 m_floatingTextWidget->setX(newX);
00083 m_floatingTextWidget->setY(newY);
00084
00085 if (m_floatingTextWidget->m_pLink) {
00086 m_floatingTextWidget->m_pLink->calculateNameTextSegment();
00087 if (m_floatingTextWidget->m_Role == Uml::tr_Seq_Message) {
00088 MessageWidget* messageWidget = (MessageWidget*)m_floatingTextWidget->m_pLink;
00089 messageWidget->setY(newY + m_floatingTextWidget->getHeight());
00090
00091
00092 if (messageWidget->getSequenceMessageType() == Uml::sequence_message_creation) {
00093 const int objWidgetHalfHeight = messageWidget->getWidget(Uml::B)->getHeight() / 2;
00094 messageWidget->getWidget(Uml::B)->UMLWidget::setY(messageWidget->getY() - objWidgetHalfHeight);
00095 }
00096 }
00097 }
00098 }
00099
00100 void FloatingTextWidgetController::constrainMovementForAllWidgets(int &diffX, int &diffY) {
00101 QPoint constrainedPosition = constrainPosition(diffX, diffY);
00102
00103 diffX = constrainedPosition.x() - m_floatingTextWidget->getX();
00104 diffY = constrainedPosition.y() - m_floatingTextWidget->getY();
00105 }
00106
00107 QPoint FloatingTextWidgetController::constrainPosition(int diffX, int diffY) {
00108 int newX = m_floatingTextWidget->getX() + diffX;
00109 int newY = m_floatingTextWidget->getY() + diffY;
00110
00111 if (m_floatingTextWidget->m_pLink) {
00112 m_floatingTextWidget->m_pLink->constrainTextPos(newX, newY,
00113 m_floatingTextWidget->width(), m_floatingTextWidget->height(),
00114 m_floatingTextWidget->m_Role);
00115 }
00116
00117 return QPoint(newX, newY);
00118 }
00119
This file is part of the documentation for umbrello Version 3.1.0.