1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package de.jaret.examples.timebars.pdi.swing;
21
22 import java.awt.Color;
23 import java.awt.Graphics;
24 import java.awt.Rectangle;
25 import java.awt.event.MouseEvent;
26 import java.util.Iterator;
27
28 import javax.swing.JComponent;
29
30 import de.jaret.examples.timebars.pdi.model.Assignment;
31 import de.jaret.examples.timebars.pdi.model.Duty;
32 import de.jaret.examples.timebars.pdi.model.Taetigkeit;
33 import de.jaret.util.date.Interval;
34 import de.jaret.util.date.JaretDateFormatter;
35 import de.jaret.util.swing.GraphicsHelper;
36 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
37 import de.jaret.util.ui.timebars.swing.TimeBarViewer;
38 import de.jaret.util.ui.timebars.swing.renderer.TimeBarRenderer;
39
40 public class PdiRenderer implements TimeBarRenderer {
41 DienstRenderer _component = new DienstRenderer();
42
43 /***
44 * {@inheritDoc}
45 */
46 public JComponent getTimeBarRendererComponent(TimeBarViewer tbv, Interval value, boolean isSelected, boolean overlapping) {
47 if (value instanceof Assignment) {
48 _component.setDienst((Taetigkeit) ((Assignment) value).getTaetigkeit());
49 } else {
50 _component.setDienst((Duty) value);
51 }
52 _component.setSelected(isSelected);
53 return _component;
54 }
55
56 class DienstRenderer extends JComponent {
57 Taetigkeit _taetigkeit;
58 boolean _selected;
59
60 public DienstRenderer() {
61 setLayout(null);
62 setOpaque(false);
63 }
64
65 public void setDienst(Taetigkeit t) {
66 _taetigkeit = t;
67 }
68
69 /***
70 * {@inheritDoc}
71 */
72 public String getToolTipText() {
73 if (_taetigkeit instanceof Duty) {
74 Duty dienst = (Duty) _taetigkeit;
75 return "<html><b>"
76 + dienst.getDienstNr()
77 + "</b><br/"
78 + _taetigkeit.getBegin().toDisplayString()
79 + " - "
80 + _taetigkeit.getEnd().toDisplayString()
81 + "<br/ Az.:"
82 + JaretDateFormatter.secondsToDisplayString(_taetigkeit.getEnd().diffSeconds(
83 _taetigkeit.getBegin())) + "</html>";
84 } else {
85 return "<html><b>" + "Ttigkeit" + "</b><br/" + _taetigkeit.getBegin().toDisplayString() + " - "
86 + _taetigkeit.getEnd().toDisplayString() + "</html>";
87 }
88 }
89
90 public void setSelected(boolean selected) {
91 _selected = selected;
92 }
93
94 /***
95 * {@inheritDoc}
96 */
97 protected void paintComponent(Graphics g) {
98 super.paintComponent(g);
99 int height = getHeight();
100 int width = getWidth();
101
102 int y = height / 3;
103 int bheight = height / 3;
104 int yEnd = y + bheight;
105
106
107 if (_selected) {
108 g.setColor(Color.BLUE);
109 } else {
110 g.setColor(Color.LIGHT_GRAY);
111 }
112
113 g.fillRect(0, y, width - 1, bheight);
114
115 if (_taetigkeit.getProbleme() != null && _taetigkeit.getProbleme().size() != 0) {
116 g.setColor(Color.RED);
117 g.fillRect(width - 1 - bheight / 2, y, bheight / 2, bheight / 2);
118 }
119
120 g.setColor(Color.BLACK);
121 g.drawRect(0, y, width - 1, bheight);
122
123
124 Rectangle containingRect = new Rectangle(0 + getX(), y + getY(), width - 1, bheight);
125 putClientProperty(CONTAINING_RECTANGLE, containingRect);
126
127 String name;
128 if (_taetigkeit instanceof Duty) {
129 name = ((Duty) _taetigkeit).getDienstNr();
130 } else {
131 name = "Ttigkeit";
132 }
133
134 int twidth = GraphicsHelper.getStringDrawingWidth(g, name);
135
136 if (getWidth() > twidth + 2) {
137 GraphicsHelper.drawStringCenteredVCenter(g, name, 0, width, height / 2);
138 }
139
140
141
142
143
144
145 }
146
147
148
149
150
151
152 public void setBounds(int x, int y, int width, int height) {
153 super.setBounds(x, y, width, height);
154
155 int bheight = height / 3;
156 int ys = height / 3;
157 Rectangle containingRect = new Rectangle(x, ys + y, width - 1, bheight);
158 putClientProperty(CONTAINING_RECTANGLE, containingRect);
159 }
160
161
162
163
164
165
166 public String getToolTipText(MouseEvent event) {
167 if (_taetigkeit.getProbleme() == null || _taetigkeit.getProbleme().size() == 0) {
168 return super.getToolTipText(event);
169 } else {
170 int bheight = getHeight() / 3;
171 int y = getHeight() / 3;
172 if (event.getX() >= getWidth() - 1 - bheight / 2 && event.getY() >= y
173 && event.getY() <= y + bheight / 2) {
174 return problemTT();
175 } else {
176 return getToolTipText();
177 }
178 }
179 }
180
181 /***
182 * @return
183 */
184 private String problemTT() {
185 StringBuffer buf = new StringBuffer();
186 buf.append("<html>");
187 Iterator it = _taetigkeit.getProbleme().iterator();
188 while (it.hasNext()) {
189 String problem = (String) it.next();
190 buf.append(problem);
191 if (it.hasNext()) {
192 buf.append("</br");
193 }
194 }
195
196 buf.append("</html>");
197 return buf.toString();
198 }
199
200
201
202
203
204
205 public boolean contains(int x, int y) {
206 if (y >= getHeight() / 3 && y <= getHeight() / 3 + getHeight() / 3) {
207 return true;
208 } else {
209 return false;
210 }
211 }
212 }
213 /***
214 * {@inheritDoc} Simple default implementation.
215 */
216 public Rectangle getPreferredDrawingBounds(Rectangle intervalDrawingArea,
217 TimeBarViewerDelegate delegate, Interval interval,
218 boolean selected, boolean overlap) {
219 return intervalDrawingArea;
220 }
221
222 }