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.timeline.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
28 import de.jaret.examples.timebars.timeline.model.TimelineEvent;
29 import de.jaret.util.date.Interval;
30 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
31 import de.jaret.util.ui.timebars.TimeBarViewerInterface;
32 import de.jaret.util.ui.timebars.swt.renderer.RendererBase;
33 import de.jaret.util.ui.timebars.swt.renderer.TimeBarRenderer;
34 import de.jaret.util.ui.timebars.swt.renderer.TimeBarRenderer2;
35
36 /***
37 * Renderer rendering a fixed size bar for points in time and the rectangle otherwise.
38 *
39 * @author Peter Kliem
40 * @version $Id: FancyEventRenderer.java 565 2007-09-16 13:25:48Z olk $
41 */
42 public class OverviewEventRenderer extends RendererBase implements TimeBarRenderer, TimeBarRenderer2 {
43 /*** width of the bar for points in time. */
44 private static final int SIZE = 2;
45
46 /*** corrected size (for printing). */
47 private int _size = SIZE;
48
49 /*** cache for the delegate supplying the orientation information. */
50 protected TimeBarViewerDelegate _delegate;
51
52
53
54 /***
55 * Create renderer for printing.
56 *
57 * @param printer printer device
58 */
59 public OverviewEventRenderer(Printer printer) {
60 super(printer);
61 _size = scaleX(SIZE);
62 }
63
64 /***
65 * Construct renderer for screen use.
66 *
67 */
68 public OverviewEventRenderer() {
69 super(null);
70 }
71
72 /***
73 * {@inheritDoc}
74 */
75 public Rectangle getPreferredDrawingBounds(Rectangle intervalDrawingArea, TimeBarViewerDelegate delegate,
76 Interval interval, boolean selected, boolean printing, boolean overlap) {
77
78 if (interval.getSeconds()>0) {
79 return intervalDrawingArea;
80 }
81 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
82 if (horizontal) {
83 return new Rectangle(intervalDrawingArea.x, intervalDrawingArea.y, intervalDrawingArea.width + _size , intervalDrawingArea.height);
84 } else {
85 return new Rectangle(intervalDrawingArea.x, intervalDrawingArea.y, intervalDrawingArea.width,
86 intervalDrawingArea.height + _size);
87 }
88 }
89
90 /***
91 * {@inheritDoc}
92 */
93 public void draw(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, Interval interval, boolean selected,
94 boolean printing, boolean overlap) {
95 _delegate = delegate;
96 defaultDraw(gc, drawingArea, delegate, interval, selected, printing, overlap);
97 }
98
99 /***
100 * {@inheritDoc}
101 */
102 public String getToolTipText(Interval interval, Rectangle drawingArea, int x, int y, boolean overlapping) {
103 return getToolTipText(_delegate, interval, drawingArea, x, y, overlapping);
104 }
105
106 /***
107 * {@inheritDoc}
108 */
109 public boolean contains(Interval interval, Rectangle drawingArea, int x, int y, boolean overlapping) {
110 return contains(_delegate, interval, drawingArea, x, y, overlapping);
111 }
112
113 /***
114 * {@inheritDoc}
115 */
116 public Rectangle getContainingRectangle(Interval interval, Rectangle drawingArea, boolean overlapping) {
117 return getContainingRectangle(_delegate, interval, drawingArea, overlapping);
118 }
119
120 /***
121 * {@inheritDoc}. Will create print renderes for all registered renderers.
122 */
123 public TimeBarRenderer createPrintrenderer(Printer printer) {
124 OverviewEventRenderer renderer = new OverviewEventRenderer(printer);
125 return renderer;
126 }
127
128 /***
129 * {@inheritDoc}
130 */
131 public void dispose() {
132 }
133
134 /***
135 * Drawing method for default rendering.
136 *
137 * @param gc GC
138 * @param drawingArea drawingArea
139 * @param delegate delegate
140 * @param interval interval to draw
141 * @param selected true for selected drawing
142 * @param printing true for printing
143 * @param overlap true if the interval overlaps with other intervals
144 */
145 private void defaultDraw(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, Interval interval,
146 boolean selected, boolean printing, boolean overlap) {
147
148 TimelineEvent event = (TimelineEvent) interval;
149
150 if (event.getSeconds()==0) {
151 drawingArea.width+=_size;
152 }
153
154
155 Color bg = gc.getBackground();
156
157 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_BLUE));
158 gc.fillRectangle(drawingArea);
159
160
161 gc.setBackground(bg);
162
163 }
164
165 /***
166 * Calculate the drawing area for the marking symbol.
167 *
168 * @param drawingArea drawing area as given for the time
169 * @return Rectangle for drawing the main symbol
170 */
171 private Rectangle getDrawingRect(Rectangle drawingArea, boolean horizontal) {
172 return drawingArea;
173 }
174
175 public String getToolTipText(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea, int x,
176 int y, boolean overlapping) {
177 if (contains(delegate, interval, drawingArea, x, y, overlapping)) {
178 return interval.toString();
179 }
180 return null;
181 }
182
183 public boolean contains(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea, int x, int y,
184 boolean overlapping) {
185 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
186 Rectangle da = getDrawingRect(drawingArea, horizontal);
187 return da.contains(drawingArea.x + x, drawingArea.y + y);
188 }
189
190 public Rectangle getContainingRectangle(TimeBarViewerDelegate delegate, Interval interval, Rectangle drawingArea,
191 boolean overlapping) {
192 boolean horizontal = delegate.getOrientation() == TimeBarViewerInterface.Orientation.HORIZONTAL;
193 Rectangle da = getDrawingRect(drawingArea, horizontal);
194 return da;
195 }
196
197 }