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.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 }