umbrello API Documentation

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 
KDE Logo
This file is part of the documentation for umbrello Version 3.1.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Jun 26 08:07:58 2007 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003