Commit | Line | Data |
---|---|---|
73005152 | 1 | /********************************************************************** |
11252342 | 2 | * Copyright (c) 2005, 2013 IBM Corporation, Ericsson |
73005152 BH |
3 | * All rights reserved. This program and the accompanying materials |
4 | * are made available under the terms of the Eclipse Public License v1.0 | |
5 | * which accompanies this distribution, and is available at | |
6 | * http://www.eclipse.org/legal/epl-v10.html | |
c8422608 AM |
7 | * |
8 | * Contributors: | |
9 | * IBM - Initial API and implementation | |
10 | * Bernd Hufmann - Updated for TMF | |
73005152 | 11 | **********************************************************************/ |
c8422608 | 12 | |
73005152 BH |
13 | package org.eclipse.linuxtools.tmf.ui.views.uml2sd.core; |
14 | ||
15 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.drawings.IGC; | |
df0b8ff4 | 16 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.ISDPreferences; |
3145ec83 | 17 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.preferences.SDViewPref; |
73005152 BH |
18 | |
19 | /** | |
df0b8ff4 BH |
20 | * <p> |
21 | * It is the UML2 stop graphical representation in the sequence diagram viewer. | |
22 | * This draw a cross on the lifeline. The stop y coordinate depend on the event occurrence when it appears. | |
23 | * A stop is never drawn it is assigned to a lifeline. | |
24 | * </p> | |
c8422608 | 25 | * |
df0b8ff4 | 26 | * @version 1.0 |
73005152 | 27 | * @author sveyrier |
73005152 BH |
28 | */ |
29 | public class Stop extends GraphNode { | |
30 | ||
df0b8ff4 BH |
31 | // ------------------------------------------------------------------------ |
32 | // Constants | |
33 | // ------------------------------------------------------------------------ | |
73005152 BH |
34 | /** |
35 | * The graphNode ID | |
36 | */ | |
37 | public static final String STOP = "STOP"; //$NON-NLS-1$ | |
c8422608 | 38 | |
df0b8ff4 BH |
39 | // ------------------------------------------------------------------------ |
40 | // Attributes | |
41 | // ------------------------------------------------------------------------ | |
42 | /** | |
43 | * The owning lifeline on which the stop appears | |
44 | */ | |
cab6c8ff | 45 | private Lifeline fLifeline = null; |
73005152 BH |
46 | /** |
47 | * This basically represents the time when the stop occurs on the owning Lifeline | |
c8422608 | 48 | * |
73005152 BH |
49 | * @see Lifeline Lifeline for more event occurence details |
50 | */ | |
cab6c8ff | 51 | private int fEventOccurrence = 0; |
73005152 | 52 | |
df0b8ff4 BH |
53 | // ------------------------------------------------------------------------ |
54 | // Methods | |
55 | // ------------------------------------------------------------------------ | |
56 | ||
73005152 BH |
57 | @Override |
58 | public int getX() { | |
eb63f5ff | 59 | if (fLifeline == null) { |
73005152 | 60 | return 0; |
df0b8ff4 | 61 | } |
eb63f5ff | 62 | return fLifeline.getX() + Metrics.getLifelineWidth() / 2 - Metrics.STOP_WIDTH / 2; |
73005152 BH |
63 | } |
64 | ||
65 | @Override | |
66 | public int getY() { | |
eb63f5ff | 67 | if (fLifeline == null) { |
73005152 | 68 | return 0; |
df0b8ff4 | 69 | } |
eb63f5ff | 70 | return fLifeline.getY() + fLifeline.getHeight() + (Metrics.getMessageFontHeigth() + Metrics.getMessagesSpacing()) * fEventOccurrence - Metrics.STOP_WIDTH / 2; |
73005152 BH |
71 | } |
72 | ||
73 | @Override | |
74 | public int getWidth() { | |
eb63f5ff | 75 | if (fLifeline == null) { |
73005152 | 76 | return 0; |
df0b8ff4 | 77 | } |
73005152 BH |
78 | return Metrics.STOP_WIDTH; |
79 | } | |
80 | ||
81 | @Override | |
82 | public int getHeight() { | |
eb63f5ff | 83 | if (fLifeline == null) { |
73005152 | 84 | return 0; |
df0b8ff4 | 85 | } |
73005152 BH |
86 | return Metrics.STOP_WIDTH; |
87 | } | |
88 | ||
89 | /** | |
90 | * Set the lifeline on which the stop must be draw | |
c8422608 | 91 | * |
73005152 BH |
92 | * @param theLifeline The the stop owing lifeline |
93 | */ | |
94 | public void setLifeline(Lifeline theLifeline) { | |
eb63f5ff | 95 | fLifeline = theLifeline; |
73005152 BH |
96 | } |
97 | ||
cab6c8ff BH |
98 | /** |
99 | * Get the lifeline on which the stop must be draw | |
100 | * | |
101 | * @return the the stop owing lifeline | |
102 | * @since 2.0 | |
103 | */ | |
104 | public Lifeline getLifeline() { | |
105 | return fLifeline; | |
106 | } | |
107 | ||
108 | /** | |
109 | * Get the event occurrence when this stop appears | |
110 | * | |
111 | * @return the eventOccurence to assign to the stop | |
112 | * @since 2.0 | |
113 | */ | |
114 | public int getEventOccurrence() { | |
115 | return fEventOccurrence; | |
116 | } | |
117 | ||
73005152 BH |
118 | /** |
119 | * Set the event occurrence when this stop appears | |
c8422608 | 120 | * |
73005152 BH |
121 | * @param occurrence the eventOccurence to assign to the stop |
122 | */ | |
123 | public void setEventOccurrence(int occurrence) { | |
eb63f5ff | 124 | fEventOccurrence = occurrence; |
73005152 BH |
125 | } |
126 | ||
127 | @Override | |
128 | public void draw(IGC context) { | |
3145ec83 BH |
129 | |
130 | ISDPreferences pref = SDViewPref.getInstance(); | |
131 | ||
73005152 | 132 | // Set the appropriate color depending if the graph node if selected or not |
eb63f5ff | 133 | if (fLifeline.isSelected()) { |
3145ec83 | 134 | context.setForeground(pref.getBackGroundColorSelection()); |
73005152 BH |
135 | context.setLineWidth(Metrics.SELECTION_LINE_WIDTH); |
136 | int lastWidth = context.getLineWidth(); | |
137 | context.setLineWidth(9); | |
138 | // Draw a cross on the lifeline | |
139 | context.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight()); | |
140 | context.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight()); | |
141 | // restore the context | |
142 | context.setLineWidth(lastWidth); | |
3145ec83 BH |
143 | context.setBackground(pref.getBackGroundColorSelection()); |
144 | context.setForeground(pref.getForeGroundColorSelection()); | |
73005152 | 145 | } else { |
3145ec83 BH |
146 | context.setBackground(pref.getBackGroundColor(ISDPreferences.PREF_LIFELINE)); |
147 | context.setForeground(pref.getForeGroundColor(ISDPreferences.PREF_LIFELINE)); | |
73005152 BH |
148 | } |
149 | int lastWidth = context.getLineWidth(); | |
150 | context.setLineWidth(3); | |
151 | // Draw a cross on the lifeline | |
152 | context.drawLine(getX(), getY(), getX() + getWidth(), getY() + getHeight()); | |
153 | context.drawLine(getX() + getWidth(), getY(), getX(), getY() + getHeight()); | |
154 | // restore the context | |
155 | context.setLineWidth(lastWidth); | |
156 | } | |
157 | ||
73005152 BH |
158 | @Override |
159 | public String getArrayId() { | |
160 | return STOP; | |
161 | } | |
162 | ||
73005152 BH |
163 | @Override |
164 | public boolean contains(int x, int y) { | |
73005152 BH |
165 | return false; |
166 | } | |
167 | } |