~ubuntu-branches/ubuntu/vivid/kdesdk/vivid

« back to all changes in this revision

Viewing changes to umbrello/umbrello/toolbarstatemessages.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2012-06-06 11:49:54 UTC
  • mfrom: (0.4.21)
  • Revision ID: package-import@ubuntu.com-20120606114954-rdls73fzlpzxglbx
Tags: 4:4.8.80-0ubuntu1
* New uptream beta release
* Update dont_export_private_classes.diff

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 *   the Free Software Foundation; either version 2 of the License, or     *
5
5
 *   (at your option) any later version.                                   *
6
6
 *                                                                         *
7
 
 *   copyright (C) 2004-2011                                               *
 
7
 *   copyright (C) 2004-2012                                               *
8
8
 *   Umbrello UML Modeller Authors <uml-devel@uml.sf.net>                  *
9
9
 ***************************************************************************/
10
10
 
31
31
 * @param umlScene The UMLScene to use.
32
32
 */
33
33
ToolBarStateMessages::ToolBarStateMessages(UMLScene *umlScene)
34
 
  : ToolBarStatePool(umlScene)
 
34
  : ToolBarStatePool(umlScene),
 
35
    m_firstObject(0),
 
36
    m_messageLine(0),
 
37
    m_isObjectWidgetLine(false),
 
38
    xclick(0),
 
39
    yclick(0)
35
40
{
36
 
    m_firstObject = 0;
37
 
    m_messageLine = 0;
38
 
    xclick = 0;
39
 
    yclick = 0;
40
41
}
41
42
 
42
43
/**
109
110
{
110
111
    m_isObjectWidgetLine = false;
111
112
 
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;
116
118
        return;
117
119
    }
118
 
 
 
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());
124
126
    if (widget) {
125
127
        setCurrentWidget(widget);
126
128
        return;
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) {
147
149
        cleanMessage();
148
150
        return;
149
151
    }
153
155
    }
154
156
 
155
157
    if (!m_isObjectWidgetLine) {
156
 
        setSecondWidget(static_cast<ObjectWidget*>(getCurrentWidget()), CreationMessage);
 
158
        setSecondWidget(static_cast<ObjectWidget*>(currentWidget()), CreationMessage);
157
159
        return;
158
160
    }
159
161
 
160
162
    if (!m_firstObject) {
161
 
        setFirstWidget(static_cast<ObjectWidget*>(getCurrentWidget()));
 
163
        setFirstWidget(static_cast<ObjectWidget*>(currentWidget()));
162
164
    } else {
163
 
        setSecondWidget(static_cast<ObjectWidget*>(getCurrentWidget()), NormalMessage);
 
165
        setSecondWidget(static_cast<ObjectWidget*>(currentWidget()), NormalMessage);
164
166
    }
165
167
}
166
168
 
174
176
    Uml::Sequence_Message_Type msgType = getMessageType();
175
177
 
176
178
    if (m_firstObject && msgType ==  Uml::sequence_message_lost) {
177
 
        xclick = m_pMouseEvent->x();
178
 
        yclick = m_pMouseEvent->y();
179
 
 
180
 
        MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject,xclick, yclick, msgType);
181
 
 
 
179
        xclick = m_pMouseEvent->scenePos().x();
 
180
        yclick = m_pMouseEvent->scenePos().y();
 
181
 
 
182
        MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject, xclick, yclick, msgType);
 
183
        setupMessageWidget(message);
182
184
        cleanMessage();
183
 
        m_pUMLScene->getMessageList().append(message);
184
185
        xclick = 0;
185
186
        yclick = 0;
186
 
 
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);
193
 
 
194
 
        UMLApp::app()->document()->setModified();
195
187
    }
196
188
 
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();
200
192
 
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));
204
197
 
205
198
        m_messageLine->setVisible(true);
206
199
 
207
 
        m_pUMLScene->viewport()->setMouseTracking(true);
 
200
        m_pUMLScene->view()->viewport()->setMouseTracking(true);
208
201
    }
209
202
    else {
210
203
        cleanMessage();
225
218
 
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);
228
222
        cleanMessage();
229
 
        m_pUMLScene->getMessageList().append(message);
230
 
 
231
223
        xclick = 0;
232
224
        yclick = 0;
233
 
 
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);
240
 
 
241
 
        UMLApp::app()->document()->setModified();
242
225
    }
243
226
    else {
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));
247
231
 
248
232
        m_messageLine->setVisible(true);
249
233
 
250
 
        m_pUMLScene->viewport()->setMouseTracking(true);
 
234
        m_pUMLScene->view()->viewport()->setMouseTracking(true);
251
235
    }
252
236
}
253
237
 
281
265
 
282
266
    MessageWidget* message = new MessageWidget(m_pUMLScene, m_firstObject,
283
267
                                               secondObject, y, msgType);
284
 
 
 
268
    setupMessageWidget(message);
285
269
    cleanMessage();
286
 
 
287
 
    m_pUMLScene->getMessageList().append(message);
288
 
 
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);
295
 
 
296
 
    UMLApp::app()->document()->setModified();
297
270
}
298
271
 
299
272
/**
327
300
    m_messageLine = 0;
328
301
}
329
302
 
 
303
void ToolBarStateMessages::setupMessageWidget(MessageWidget *message)
 
304
{
 
305
    m_pUMLScene->messageList().append(message);
 
306
    m_pUMLScene->addItem(message);
 
307
    message->activate();
 
308
 
 
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);
 
315
 
 
316
    UMLApp::app()->document()->setModified();
 
317
}
 
318
 
330
319
#include "toolbarstatemessages.moc"