1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package de.jaret.util.ui.timebars.swt.renderer;
21
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.graphics.Color;
24 import org.eclipse.swt.graphics.GC;
25 import org.eclipse.swt.graphics.Rectangle;
26 import org.eclipse.swt.printing.Printer;
27 import org.eclipse.swt.widgets.Display;
28
29 import de.jaret.util.date.Interval;
30 import de.jaret.util.swt.SwtGraphicsHelper;
31 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
32 import de.jaret.util.ui.timebars.TimeBarViewerInterface;
33
34
35
36
37
38
39
40 public class DefaultRenderer extends AbstractTimeBarRenderer {
41
42 protected static final double BORDERFACTOR = 0.2;
43
44
45 protected TimeBarViewerDelegate _delegate;
46
47
48
49
50
51
52 public DefaultRenderer(Printer printer) {
53 super(printer);
54 }
55
56
57
58
59
60 public DefaultRenderer() {
61 super(null);
62 }
63
64
65
66
67 public void draw(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, Interval interval, boolean selected,
68 boolean printing, boolean overlap) {
69 _delegate = delegate;
70 if (!printing) {
71 defaultDraw(gc, drawingArea, delegate, interval, selected, printing, overlap);
72 } else {
73 print(gc, drawingArea, delegate, interval, overlap);
74 }
75 }
76
77
78
79
80 public String getToolTipText(Interval interval, Rectangle drawingArea, int x, int y, boolean overlapping) {
81 return getToolTipText(_delegate, interval, drawingArea, x, y, overlapping);
82 }
83
84
85
86
87 public boolean contains(Interval interval, Rectangle drawingArea, int x, int y, boolean overlapping) {
88 return contains(_delegate, interval, drawingArea, x, y, overlapping);
89 }
90
91
92
93
94 public Rectangle getContainingRectangle(Interval interval, Rectangle drawingArea, boolean overlapping) {
95 return getContainingRectangle(_delegate, interval, drawingArea, overlapping);
96 }
97
98
99
100
101 public TimeBarRenderer createPrintrenderer(Printer printer) {
102 DefaultRenderer renderer = new DefaultRenderer(printer);
103 return renderer;
104 }
105
106
107
108
109 public void dispose() {
110 }
111
112
113
114
115
116
117
118
119
120
121
122
123 private void defaultDraw(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, Interval interval,
124 boolean selected, boolean printing, boolean overlap) {
125
126 drawFocus(gc, drawingArea, delegate, interval, selected, printing, overlap);
127
128 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
129 Rectangle iRect = getIRect(horizontal, drawingArea, overlap);
130
131 Color bg = gc.getBackground();
132 String str = interval.toString();
133
134 if (!selected) {
135 gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY));
136 } else {
137 gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
138 }
139 gc.fillRectangle(iRect);
140 gc.drawRectangle(iRect);
141 SwtGraphicsHelper.drawStringCentered(gc, str, iRect);
142
143 gc.setBackground(bg);
144 }
145
146
147
148
149 public String getToolTipText(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea, int x,
150 int y, boolean overlapping) {
151 if (contains(delegate, interval, drawingArea, x, y, overlapping)) {
152 return interval.toString();
153 }
154 return null;
155 }
156
157
158
159
160 public boolean contains(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea, int x, int y,
161 boolean overlapping) {
162
163 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
164 Rectangle iRect = getIRect(horizontal, drawingArea, overlapping);
165 return iRect.contains(drawingArea.x + x, drawingArea.y + y);
166 }
167
168
169
170
171 public Rectangle getContainingRectangle(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea,
172 boolean overlapping) {
173
174 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
175 Rectangle iRect = getIRect(horizontal, drawingArea, overlapping);
176 return iRect;
177 }
178
179
180
181
182
183
184
185
186
187 private void print(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, Interval interval, boolean overlap) {
188 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
189 Rectangle iRect = getIRect(horizontal, drawingArea, overlap);
190
191 Color bg = gc.getBackground();
192 gc.setLineWidth(getDefaultLineWidth());
193 gc.setBackground(_printer.getSystemColor(SWT.COLOR_GRAY));
194 gc.fillRectangle(iRect);
195 gc.drawRectangle(iRect);
196 String str = interval.toString();
197 gc.setLineWidth(1);
198 SwtGraphicsHelper.drawStringCentered(gc, str, iRect);
199
200 gc.setBackground(bg);
201 }
202
203
204
205
206
207
208
209
210
211 protected Rectangle getIRect(boolean horizontal, Rectangle drawingArea, boolean overlap) {
212 if (horizontal) {
213 int borderHeight = (int) (drawingArea.height * BORDERFACTOR / 2);
214 int height = drawingArea.height - (overlap ? 0 : 2 * borderHeight);
215 int y = drawingArea.y + (overlap ? 0 : borderHeight);
216 return new Rectangle(drawingArea.x, y, drawingArea.width - 1, height - 1);
217 } else {
218 int borderWidth = (int) (drawingArea.width * BORDERFACTOR / 2);
219 int width = drawingArea.width - (overlap ? 0 : 2 * borderWidth);
220 int x = drawingArea.x + (overlap ? 0 : borderWidth);
221 return new Rectangle(x, drawingArea.y, width - 1, drawingArea.height - 1);
222 }
223 }
224
225 }