blob: 39c24bfd7eb7991190f4076ad31cd777947be409 [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.IGC;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.preferences.ISDPreferences;
import org.eclipse.tracecompass.tmf.ui.views.uml2sd.preferences.SDViewPref;
/**
* <p>
* It is the UML2 stop graphical representation in the sequence diagram viewer.
* This draw a cross on the lifeline. The stop y coordinate depend on the event occurrence when it appears.
* A stop is never drawn it is assigned to a lifeline.
* </p>
*
* @version 1.0
* @author sveyrier
*/
public class Stop extends GraphNode {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* The graphNode ID
*/
public static final String STOP = "STOP"; //$NON-NLS-1$
// ------------------------------------------------------------------------
// Attributes
// ------------------------------------------------------------------------
/**
* The owning lifeline on which the stop appears
*/
private Lifeline fLifeline = null;
/**
* This basically represents the time when the stop occurs on the owning Lifeline
*
* @see Lifeline Lifeline for more event occurence details
*/
private int fEventOccurrence = 0;
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
@Override
public int getX() {
if (fLifeline == null) {
return 0;
}
return fLifeline.getX() + Metrics.getLifelineWidth() / 2 - Metrics.STOP_WIDTH / 2;
}
@Override
public int getY() {
if (fLifeline == null) {
return 0;
}
return fLifeline.getY() + fLifeline.getHeight() + (Metrics.getMessageFontHeigth() + Metrics.getMessagesSpacing()) * fEventOccurrence - Metrics.STOP_WIDTH / 2;
}
@Override
public int getWidth() {
if (fLifeline == null) {
return 0;
}
return Metrics.STOP_WIDTH;
}
@Override
public int getHeight() {
if (fLifeline == null) {
return 0;
}
return Metrics.STOP_WIDTH;
}
/**
* Set the lifeline on which the stop must be draw
*
* @param theLifeline The the stop owing lifeline
*/
public void setLifeline(Lifeline theLifeline) {
fLifeline = theLifeline;
}
/**
* Get the lifeline on which the stop must be draw
*
* @return the the stop owing lifeline
*/
public Lifeline getLifeline() {
return fLifeline;
}
/**
* Get the event occurrence when this stop appears
*
* @return the eventOccurence to assign to the stop
*/
public int getEventOccurrence() {
return fEventOccurrence;
}
/**
* Set the event occurrence when this stop appears
*
* @param occurrence the eventOccurence to assign to the stop
*/
public void setEventOccurrence(int occurrence) {
fEventOccurrence = occurrence;
}
@Override
public void draw(IGC context) {
ISDPreferences pref = SDViewPref.getInstance();
// Set the appropriate color depending if the graph node if selected or not
if (fLifeline.isSelected()) {
context.setForeground(pref.getBackGroundColorSelection());
context.setLineWidth(Metrics.SELECTION_LINE_WIDTH);
int lastWidth = context.getLineWidth();
context.setLineWidth(9);
// Draw a cross on the lifeline
context.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight());
context.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight());
// restore the context
context.setLineWidth(lastWidth);
context.setBackground(pref.getBackGroundColorSelection());
context.setForeground(pref.getForeGroundColorSelection());
} else {
context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_LIFELINE));
context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_LIFELINE));
}
int lastWidth = context.getLineWidth();
context.setLineWidth(3);
// Draw a cross on the lifeline
context.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight());
context.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight());
// restore the context
context.setLineWidth(lastWidth);
}
@Override
public String getArrayId() {
return STOP;
}
@Override
public boolean contains(int x, int y) {
return false;
}
}