4
4
* the Free Software Foundation; either version 2 of the License, or *
5
5
* (at your option) any later version. *
7
* copyright (C) 2004-2011 *
7
* copyright (C) 2004-2012 *
8
8
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
9
9
***************************************************************************/
31
31
* @param umlScene The UMLScene to use.
33
33
ToolBarStateMessages::ToolBarStateMessages(UMLScene *umlScene)
34
: ToolBarStatePool(umlScene)
34
: ToolBarStatePool(umlScene),
37
m_isObjectWidgetLine(false),
110
111
m_isObjectWidgetLine = false;
112
ObjectWidget* objectWidgetLine = m_pUMLScene->onWidgetLine(m_pMouseEvent->pos());
113
ObjectWidget* objectWidgetLine = m_pUMLScene->onWidgetLine(m_pMouseEvent->scenePos());
113
114
if (objectWidgetLine) {
115
uDebug() << Q_FUNC_INFO << "Object detected";
114
116
setCurrentWidget(objectWidgetLine);
115
117
m_isObjectWidgetLine = true;
120
uDebug() << Q_FUNC_INFO << "Object NOT detected";
119
121
//commit 515177 fixed a setting creation messages only working properly at 100% zoom
120
122
//However, the applied patch doesn't seem to be necessary no more, so it was removed
121
123
//The widgets weren't got from UMLView, but from a method in this class similarto the
122
124
//one in UMLView but containing special code to handle the zoom
123
UMLWidget *widget = m_pUMLScene->widgetAt(m_pMouseEvent->pos());
125
UMLWidget *widget = m_pUMLScene->widgetAt(m_pMouseEvent->scenePos());
125
127
setCurrentWidget(widget);
143
145
//TODO When an association between UMLObjects of invalid types is made, an error message
144
146
//is shown. Shouldn't also a message be used here?
145
147
if (m_pMouseEvent->button() != Qt::LeftButton ||
146
getCurrentWidget()->baseType() != WidgetBase::wt_Object) {
148
currentWidget()->baseType() != WidgetBase::wt_Object) {
155
157
if (!m_isObjectWidgetLine) {
156
setSecondWidget(static_cast<ObjectWidget*>(getCurrentWidget()), CreationMessage);
158
setSecondWidget(static_cast<ObjectWidget*>(currentWidget()), CreationMessage);
160
162
if (!m_firstObject) {
161
setFirstWidget(static_cast<ObjectWidget*>(getCurrentWidget()));
163
setFirstWidget(static_cast<ObjectWidget*>(currentWidget()));
163
setSecondWidget(static_cast<ObjectWidget*>(getCurrentWidget()), NormalMessage);
165
setSecondWidget(static_cast<ObjectWidget*>(currentWidget()), NormalMessage);
174
176
Uml::Sequence_Message_Type msgType = getMessageType();
176
178
if (m_firstObject && msgType == Uml::sequence_message_lost) {
177
xclick = m_pMouseEvent->x();
178
yclick = m_pMouseEvent->y();
180
MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject,xclick, yclick, msgType);
179
xclick = m_pMouseEvent->scenePos().x();
180
yclick = m_pMouseEvent->scenePos().y();
182
MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject, xclick, yclick, msgType);
183
setupMessageWidget(message);
183
m_pUMLScene->getMessageList().append(message);
187
FloatingTextWidget *ft = message->floatingTextWidget();
188
//TODO cancel doesn't cancel the creation of the message, only cancels setting an operation.
189
//Shouldn't it cancel also the whole creation?
190
ft->showOperationDialog();
191
message->setTextPosition();
192
m_pUMLScene->getWidgetList().append(ft);
194
UMLApp::app()->document()->setModified();
197
189
else if (!m_firstObject && msgType == Uml::sequence_message_found && xclick == 0 && yclick == 0) {
198
xclick = m_pMouseEvent->x();
199
yclick = m_pMouseEvent->y();
190
xclick = m_pMouseEvent->scenePos().x();
191
yclick = m_pMouseEvent->scenePos().y();
201
m_messageLine = new UMLSceneLineItem(m_pUMLScene->canvas());
193
m_messageLine = new UMLSceneLineItem();
194
m_messageLine->setCanvas(m_pUMLScene->canvas());
202
195
m_messageLine->setPoints(m_pMouseEvent->x(), m_pMouseEvent->y(), m_pMouseEvent->x(), m_pMouseEvent->y());
203
196
m_messageLine->setPen(QPen(m_pUMLScene->lineColor(), m_pUMLScene->lineWidth(), Qt::DashLine));
205
198
m_messageLine->setVisible(true);
207
m_pUMLScene->viewport()->setMouseTracking(true);
200
m_pUMLScene->view()->viewport()->setMouseTracking(true);
226
219
if (msgType == Uml::sequence_message_found && xclick!=0 && yclick!=0) {
227
220
MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject,xclick, yclick, msgType);
221
setupMessageWidget(message);
229
m_pUMLScene->getMessageList().append(message);
234
FloatingTextWidget *ft = message->floatingTextWidget();
235
//TODO cancel doesn't cancel the creation of the message, only cancels setting an operation.
236
//Shouldn't it cancel also the whole creation?
237
ft->showOperationDialog();
238
message->setTextPosition();
239
m_pUMLScene->getWidgetList().append(ft);
241
UMLApp::app()->document()->setModified();
244
m_messageLine = new UMLSceneLineItem(m_pUMLScene->canvas());
227
m_messageLine = new UMLSceneLineItem();
228
m_messageLine->setCanvas(m_pUMLScene->canvas());
245
229
m_messageLine->setPoints(m_pMouseEvent->x(), m_pMouseEvent->y(), m_pMouseEvent->x(), m_pMouseEvent->y());
246
230
m_messageLine->setPen(QPen(m_pUMLScene->lineColor(), m_pUMLScene->lineWidth(), Qt::DashLine));
248
232
m_messageLine->setVisible(true);
250
m_pUMLScene->viewport()->setMouseTracking(true);
234
m_pUMLScene->view()->viewport()->setMouseTracking(true);
282
266
MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject,
283
267
secondObject, y, msgType);
268
setupMessageWidget(message);
287
m_pUMLScene->getMessageList().append(message);
289
FloatingTextWidget *ft = message->floatingTextWidget();
290
//TODO cancel doesn't cancel the creation of the message, only cancels setting an operation.
291
//Shouldn't it cancel also the whole creation?
292
ft->showOperationDialog();
293
message->setTextPosition();
294
m_pUMLScene->getWidgetList().append(ft);
296
UMLApp::app()->document()->setModified();
327
300
m_messageLine = 0;
303
void ToolBarStateMessages::setupMessageWidget(MessageWidget *message)
305
m_pUMLScene->messageList().append(message);
306
m_pUMLScene->addItem(message);
309
FloatingTextWidget *ft = message->floatingTextWidget();
310
//TODO cancel doesn't cancel the creation of the message, only cancels setting an operation.
311
//Shouldn't it cancel also the whole creation?
312
ft->showOperationDialog();
313
message->setTextPosition();
314
m_pUMLScene->widgetList().append(ft);
316
UMLApp::app()->document()->setModified();
330
319
#include "toolbarstatemessages.moc"