messagewidgetcontroller.cpp
00001 /*************************************************************************** 00002 * * 00003 * This program is free software; you can redistribute it and/or modify * 00004 * it under the terms of the GNU General Public License as published by * 00005 * the Free Software Foundation; either version 2 of the License, or * 00006 * (at your option) any later version. * 00007 * * 00008 * copyright (C) 2006-2007 * 00009 * Umbrello UML Modeller Authors <uml-devel@uml.sf.net> * 00010 ***************************************************************************/ 00011 00012 // own header 00013 #include "messagewidgetcontroller.h" 00014 00015 // kde includes 00016 #include <kcursor.h> 00017 #include <kdebug.h> 00018 00019 // app includes 00020 #include "messagewidget.h" 00021 #include "floatingtextwidget.h" 00022 #include "objectwidget.h" 00023 #include "listpopupmenu.h" 00024 00025 MessageWidgetController::MessageWidgetController(MessageWidget* messageWidget): 00026 UMLWidgetController(messageWidget) { 00027 m_messageWidget = messageWidget; 00028 m_unconstrainedPositionY = 0; 00029 } 00030 00031 MessageWidgetController::~MessageWidgetController() { 00032 } 00033 00034 void MessageWidgetController::saveWidgetValues(QMouseEvent *me) { 00035 UMLWidgetController::saveWidgetValues(me); 00036 00037 m_unconstrainedPositionY = m_widget->getY(); 00038 } 00039 00040 QCursor MessageWidgetController::getResizeCursor() { 00041 return KCursor::sizeVerCursor(); 00042 } 00043 00044 void MessageWidgetController::resizeWidget(int newW, int newH) { 00045 m_messageWidget->setSize(m_messageWidget->width(), newH); 00046 emit m_messageWidget->sigMessageMoved(); 00047 } 00048 00049 void MessageWidgetController::moveWidgetBy(int diffX, int diffY) { 00050 m_unconstrainedPositionY += diffY; 00051 int newY = constrainPositionY(diffY); 00052 00053 if (m_unconstrainedPositionY != newY) { 00054 if (m_unconstrainedPositionY > m_messageWidget->getY()) { 00055 newY = m_unconstrainedPositionY; 00056 } else { 00057 return; 00058 } 00059 } 00060 00061 m_messageWidget->setY(newY); 00062 00063 if (m_messageWidget->m_sequenceMessageType == Uml::sequence_message_creation) { 00064 const int objWidgetHalfHeight = m_messageWidget->m_pOw[Uml::B]->getHeight() / 2; 00065 m_messageWidget->m_pOw[Uml::B]->UMLWidget::setY(newY - objWidgetHalfHeight); 00066 } 00067 00068 m_messageWidget->moveEvent(0); 00069 } 00070 00071 void MessageWidgetController::constrainMovementForAllWidgets(int &diffX, int &diffY) { 00072 diffX = 0; 00073 diffY = constrainPositionY(diffY) - m_widget->getY(); 00074 } 00075 00076 void MessageWidgetController::doMouseDoubleClick(QMouseEvent *me) { 00077 if (m_messageWidget->m_pFText != NULL) { 00078 m_messageWidget->m_pFText->slotMenuSelection(ListPopupMenu::mt_Select_Operation); 00079 } 00080 } 00081 00082 int MessageWidgetController::constrainPositionY(int diffY) { 00083 int newY = m_widget->getY() + diffY; 00084 00085 int minY = m_messageWidget->getMinY(); 00086 if (m_messageWidget->m_pFText && !m_messageWidget->m_pFText->getDisplayText().isEmpty()) { 00087 minY += m_messageWidget->m_pFText->getHeight(); 00088 } 00089 00090 if (newY < minY) { 00091 newY = minY; 00092 } 00093 00094 return newY; 00095 } 00096
