001    package ui.recognizer;
002    
003    import java.awt.*;
004    import javax.swing.*;
005    
006    public class YRule extends Rule {
007        public static final int SIZE = 35;
008    
009        public YRule(boolean isDataUnits, Calibration aCalibration) {
010            super(isDataUnits, aCalibration);
011        }
012    
013        public void setPreferredHeight(int ph) {
014            setPreferredSize(new Dimension(SIZE, ph));
015        }
016    
017        public void paintComponent(Graphics g) {
018            Graphics2D g2 = (Graphics2D) g;
019            Rectangle drawHere = g2.getClipBounds();
020    
021            // Fill clipping area with dirty brown/orange.
022            //g2.setColor(new Color(230, 163, 4));
023            //g2.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height);
024    
025            //TODO: Fill with gray gradient paint depending on calibration bounds.
026    
027            Point p1 = new Point(drawHere.x, drawHere.y);
028            Color c1 = new Color(1.0f, 1.0f, 1.0f);
029            Point p2 = new Point(drawHere.x, drawHere.y + drawHere.height);
030            Color c2 = new Color(0.0f, 0.0f, 0.0f);
031            g2.setPaint(new GradientPaint(p1, c1, p2, c2));
032            g2.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height);
033            
034            // Do the ruler labels in a small font that's black.
035            g2.setFont(new Font("SansSerif", Font.PLAIN, 10));
036            g2.setColor(Color.black);
037            
038            // Some vars we need.
039            
040            // Use clipping bounds to calculate first tick and last tick location.
041            
042            int start = (drawHere.y / increment) * increment;
043            int end = (((drawHere.y + drawHere.height) / increment) + 1) * increment;
044            
045            // ticks and labels
046            int tickLength = 0;
047                String text = null;
048                for (int i = start; i < end; i += increment) {
049                if (i % units == 0)  {
050                    tickLength = 10;
051                    text = Integer.toString(i/units);
052                } else {
053                    tickLength = 7;
054                    text = null;
055                }
056                if (tickLength != 0) {
057                    g.drawLine(SIZE-1, i, SIZE-tickLength-1, i);
058                    if (text != null)
059                        g.drawString(text, 9, i+3);
060                }
061            }
062        }
063    }