blob: 749b39ede6fe1302bced7f2d3515a5d404fd9c09 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2005, 2014 IBM Corporation, Ericsson
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
* Bernd Hufmann - Updated for TMF
**********************************************************************/
package org.eclipse.tracecompass.tmf.ui.views.uml2sd.core;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.drawings.IColor;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.drawings.IGC;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.preferences.ISDPreferences;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.preferences.SDViewPref;
/**
* Class to draw Ellipsis Message.
*
* @version 1.0
* @author sveyrier
*
*/
public class EllipsisMessage extends AsyncMessage {
@Override
public int getX() {
if (getStartLifeline() == null) {
return super.getX() + super.getWidth() - 16;
}
return super.getX();
}
@Override
public int getY() {
return super.getY() + 3;
}
@Override
public int getWidth() {
return 16;
}
@Override
protected void drawMessage(IGC context) {
// temporary store the coordinates to avoid more methods calls
int x = super.getX();
int y = getY();
int width = super.getWidth();
int height = getHeight();
// UML2 found message (always drawn from left to right)
if (getStartLifeline() == null && getEndLifeline() != null) {
// Draw the message label above the message and centered
// The label is truncated if it cannot fit between the two message end
// 2*Metrics.MESSAGES_NAME_SPACING = space above the label + space below the label
context.drawTextTruncatedCentred(getName(), x, y - Metrics.getMessageFontHeigth() - 2 * Metrics.MESSAGES_NAME_SPACING, width, 2 * Metrics.MESSAGES_NAME_SPACING + Metrics.getMessageFontHeigth(), !isSelected());
int currentStyle = context.getLineStyle();
context.setLineStyle(context.getLineSolidStyle());
// Draw the message main line
context.drawRectangle(x + width - 5, y, x + width - 6, y + height);
context.drawRectangle(x + width - 10, y, x + width - 11, y + height);
context.drawRectangle(x + width - 15, y, x + width - 16, y + height);
context.setLineStyle(currentStyle);
IColor storedColor = context.getBackground();
context.setBackground(context.getForeground());
context.fillRectangle(x + width - 5, y, x + width - 6, y + height);
context.fillRectangle(x + width - 10, y, x + width - 11, y + height);
context.fillRectangle(x + width - 15, y, x + width - 16, y + height);
context.setBackground(storedColor);
}
// UML2 lost message (always drawn from left to right)
else if (getEndLifeline() == null && getStartLifeline() != null) {
// Draw the message label above the message and centered
// The label is truncated if it cannot fit between the two message end
// 2*Metrics.MESSAGES_NAME_SPACING = space above the label + space below the label
context.drawTextTruncatedCentred(getName(), x, y - Metrics.getMessageFontHeigth() - 2 * Metrics.MESSAGES_NAME_SPACING, width, 2 * Metrics.MESSAGES_NAME_SPACING + Metrics.getMessageFontHeigth(), !isSelected());
int currentStyle = context.getLineStyle();
context.setLineStyle(context.getLineSolidStyle());
// Draw the message main line
context.drawRectangle(x + 5, y, 1, 1);
context.drawRectangle(x + 10, y, 1, 1);
context.drawRectangle(x + 15, y, 1, 1);
context.setLineStyle(currentStyle);
IColor storedColor = context.getBackground();
context.setBackground(context.getForeground());
context.fillRectangle(x + 5, y, 1, 1);
context.fillRectangle(x + 10, y, 1, 1);
context.fillRectangle(x + 15, y, 1, 1);
context.setBackground(storedColor);
} else {
super.draw(context);
}
}
@Override
public void draw(IGC context) {
if (!isVisible()) {
return;
}
ISDPreferences pref = SDViewPref.getInstance();
// Draw it selected?*/
if (isSelected()) {
/*
* Draw it twice First time, bigger inverting selection colors Second time, regular drawing using selection
* colors This create the highlight effect
*/
context.setForeground(pref.getBackGroundColorSelection());
context.setLineWidth(Metrics.SELECTION_LINE_WIDTH);
drawMessage(context);
context.setBackground(pref.getBackGroundColorSelection());
context.setForeground(pref.getForeGroundColorSelection());
// Second drawing is done after the else
} else {
context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_ASYNC_MESS));
context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_ASYNC_MESS));
}
if (hasFocus()) {
context.setDrawTextWithFocusStyle(true);
}
context.setLineWidth(Metrics.NORMAL_LINE_WIDTH);
drawMessage(context);
context.setLineWidth(Metrics.NORMAL_LINE_WIDTH);
if (hasFocus()) {
context.setDrawTextWithFocusStyle(false);
}
}
}