View Javadoc

1   /*
2    *  File: PdiTimeScaleRenderer.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.pdi.swing;
21  
22  import java.awt.Color;
23  import java.awt.Graphics;
24  
25  import javax.swing.JButton;
26  import javax.swing.JComponent;
27  
28  import de.jaret.examples.timebars.pdi.model.PdiCalendar;
29  import de.jaret.examples.timebars.pdi.model.PdiDay;
30  import de.jaret.util.date.JaretDate;
31  import de.jaret.util.ui.timebars.swing.TimeBarViewer;
32  import de.jaret.util.ui.timebars.swing.renderer.TimeScaleRenderer;
33  
34  /***
35   * @author Peter Kliem
36   * @version $Id: PdiTimeScaleRenderer.java 237 2007-02-10 21:11:50Z olk $
37   */
38  public class PdiTimeScaleRenderer implements TimeScaleRenderer {
39      protected static int RHEIGHT = 50;
40      Renderer _component = new Renderer();
41      PdiCalendar _kalender;
42  
43      public PdiTimeScaleRenderer(PdiCalendar kalender) {
44          _kalender = kalender;
45      }
46  
47      public JComponent getRendererComponent(TimeBarViewer tbv, boolean top) {
48          _component.setTimeBarViewer(tbv);
49          return _component;
50      }
51  
52      public int getHeight() {
53          return RHEIGHT;
54      }
55  
56      class Renderer extends JComponent {
57          JButton _button = new JButton();
58          TimeBarViewer _tbv;
59  
60          public void setTimeBarViewer(TimeBarViewer tbv) {
61              _tbv = tbv;
62          }
63  
64          private int xForDate(JaretDate date) {
65              long seconds = date.diffSeconds(_tbv.getStartDate());
66              int x = (int) ((double) seconds * _tbv.getPixelPerSecond());
67              return x;
68          }
69  
70          private JaretDate dateForX(int x) {
71              int diffSec = (int) ((double) x / _tbv.getPixelPerSecond());
72              JaretDate date = new JaretDate(_tbv.getStartDate());
73              date.advanceSeconds(diffSec);
74              return date;
75          }
76  
77          protected void paintComponent(Graphics g) {
78              JaretDate date = _tbv.getStartDate().copy();
79              date.setHours(0);
80              while (_tbv.getEndDate().compareTo(date) > 0) {
81                  PdiDay tag = _kalender.getTag(date);
82                  if (tag != null) {
83                      int x = xForDate(tag.getDate());
84                      _button.setText("<html>" + tag.getDate().toDisplayStringDate() + "<br/" + tag.getBetriebstag()
85                              + "</html>");
86                      int width = (int) (_tbv.getPixelPerSecond() * 24.0 * 60.0 * 60.0);
87                      g.setColor(Color.BLACK);
88                      _button.setBounds(x, 0, width, RHEIGHT);
89                      Graphics gg = g.create(x, 0, width, RHEIGHT);
90                      _button.paint(gg);
91                      gg.dispose();
92                  }
93                  date.advanceDays(1);
94              }
95          }
96      }
97  
98  }