View Javadoc

1   /*
2    *  File: OverviewEventRenderer.java 
3    *  Copyright (c) 2004-2007  Peter Kliem (Peter.Kliem@jaret.de)
4    *  A commercial license is available, see http://www.jaret.de.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation; either version 2 of the License, or
9    *  (at your option) any later version.
10   *
11   *  This program is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   *  GNU General Public License for more details.
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 }