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.graphics.GC;
23 import org.eclipse.swt.graphics.Rectangle;
24 import org.eclipse.swt.printing.Printer;
25
26
27 import de.jaret.util.misc.Pair;
28 import de.jaret.util.ui.timebars.TimeBarViewerDelegate;
29 import de.jaret.util.ui.timebars.TimeBarViewerInterface;
30 import de.jaret.util.ui.timebars.swt.TimeBarViewer;
31
32
33
34
35
36
37 public class CombiningTimeScaleRenderer implements TimeScaleRenderer{
38 protected TimeScaleRenderer _outerRenderer;
39 protected TimeScaleRenderer _innerRenderer;
40
41 public CombiningTimeScaleRenderer(TimeScaleRenderer outerRenderer, TimeScaleRenderer innerRenderer) {
42 _outerRenderer = outerRenderer;
43 _innerRenderer = innerRenderer;
44 if (_outerRenderer == null || _innerRenderer==null) {
45 throw new IllegalArgumentException("renderes must both be set");
46 }
47 }
48
49
50 @Override
51 public void draw(GC gc, Rectangle drawingArea, TimeBarViewerDelegate delegate, boolean top, boolean printing) {
52 Pair<Rectangle, Rectangle> rects = getDrawingareas(drawingArea, delegate, top);
53 Rectangle outerRect = rects.getLeft();
54 Rectangle innerRect = rects.getRight();
55
56
57 _outerRenderer.draw(gc, outerRect, delegate, top, printing);
58 _innerRenderer.draw(gc, innerRect, delegate, top, printing);
59 }
60
61 @Override
62 public String getToolTipText(TimeBarViewer tbv, Rectangle drawingArea, int x, int y) {
63 Pair<Rectangle, Rectangle> rects = getDrawingareas(drawingArea, tbv.getDelegate(), tbv.getTimeScalePosition() == TimeBarViewerInterface.TIMESCALE_POSITION_TOP);
64 Rectangle outerRect = rects.getLeft();
65 Rectangle innerRect = rects.getRight();
66
67 if (outerRect.contains(x, y)) {
68 return _outerRenderer.getToolTipText(tbv, outerRect, x, y);
69 } else {
70 return _innerRenderer.getToolTipText(tbv, innerRect, x, y);
71 }
72 }
73
74 protected Pair<Rectangle, Rectangle> getDrawingareas(Rectangle drawingArea, TimeBarViewerDelegate delegate, boolean top) {
75 boolean horizontal = delegate.getOrientation().equals(TimeBarViewerInterface.Orientation.HORIZONTAL);
76 Rectangle da = drawingArea;
77
78 Rectangle outerRect = null;
79 Rectangle innerRect = null;
80 if (horizontal) {
81 if (top) {
82 outerRect = new Rectangle(da.x, da.y, da.width, _outerRenderer.getHeight());
83 innerRect = new Rectangle(da.x, da.y+outerRect.height, da.width, _innerRenderer.getHeight());
84 } else {
85
86 innerRect = new Rectangle(da.x, da.y, da.width, _innerRenderer.getHeight());
87 outerRect = new Rectangle(da.x, da.y+innerRect.height, da.width, _outerRenderer.getHeight());
88 }
89 } else {
90
91 if (top) {
92 outerRect = new Rectangle(da.x, da.y, _outerRenderer.getHeight(), da.height);
93 innerRect = new Rectangle(da.x+outerRect.width, da.y, _innerRenderer.getHeight(), da.height);
94 } else {
95
96 innerRect = new Rectangle(da.x, da.y, _innerRenderer.getHeight(), da.height);
97 outerRect = new Rectangle(da.x+innerRect.width, da.y, _outerRenderer.getHeight(), da.height);
98 }
99 }
100
101
102 Pair<Rectangle, Rectangle> result = new Pair<Rectangle, Rectangle>(outerRect, innerRect);
103 return result;
104 }
105
106
107 @Override
108 public int getHeight() {
109 return _outerRenderer.getHeight()+_innerRenderer.getHeight();
110 }
111
112 @Override
113 public void dispose() {
114 _outerRenderer.dispose();
115 _innerRenderer.dispose();
116 }
117
118 @Override
119 public TimeScaleRenderer createPrintRenderer(Printer printer) {
120 return new CombiningTimeScaleRenderer(_outerRenderer.createPrintRenderer(printer), _innerRenderer.createPrintRenderer(printer));
121 }
122
123
124
125
126 public boolean supportsOptimizedScrolling() {
127 return _outerRenderer.supportsOptimizedScrolling() && _innerRenderer.supportsOptimizedScrolling();
128 }
129
130
131 }