summaryrefslogtreecommitdiffstats
path: root/src/cppcheckplus/text/LineNumberHeaderView.java
blob: 85819fab095ef622273d6b207fb384ff5fd797ac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package cppcheckplus.text;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;

public class LineNumberHeaderView extends javax.swing.JComponent {  

	private final  Font DEFAULT_FONT = new Font("Serif", 0, 16);  
    public final Color DEFAULT_BACKGROUD = new Color(228, 228, 228);  
    public final Color DEFAULT_FOREGROUD = Color.BLACK;  
    public final int nHEIGHT = Integer.MAX_VALUE - 1000000;  
    public final int MARGIN = 2;  
    private int lineHeight;  
    private int fontLineHeight;  
    private int currentRowWidth;  
    private FontMetrics fontMetrics;  
  
    public LineNumberHeaderView() {  
        setFont(DEFAULT_FONT);  
        setForeground(DEFAULT_FOREGROUD);  
        setBackground(DEFAULT_BACKGROUD);  
        setPreferredSize(9999);  
    }  
  
    public void setPreferredSize(int row) {  
        int width = fontMetrics.stringWidth(String.valueOf(row));  
        if (currentRowWidth < width) {  
            currentRowWidth = width;  
            setPreferredSize(new Dimension(2 * MARGIN + width, nHEIGHT));  
        }  
    }  
  
    @Override  
    public void setFont(Font font) {  
        super.setFont(font);  
        fontMetrics = getFontMetrics(getFont());  
        fontLineHeight = fontMetrics.getHeight();  
    }  
  
    public int getLineHeight() {  
        if (lineHeight == 0) {  
            return fontLineHeight;  
        }  
        return lineHeight;  
    }  
  
    public void setLineHeight(int lineHeight) {  
        if (lineHeight > 0) {  
            this.lineHeight = lineHeight;  
        }  
    }  
  
    public int getStartOffset() {  
        return 0;  
    }  
  
    @Override  
    protected void paintComponent(Graphics g) {  
        int nlineHeight = getLineHeight();  
        int startOffset = getStartOffset();  
        Rectangle drawHere = g.getClipBounds();  
        g.setColor(getBackground());  
        g.fillRect(drawHere.x, drawHere.y, drawHere.width, drawHere.height);  
        g.setColor(getForeground());  
        int startLineNum = (drawHere.y / nlineHeight) + 1;  
        int endLineNum = startLineNum + (drawHere.height / nlineHeight);  
        int start = (drawHere.y / nlineHeight) * nlineHeight + nlineHeight - startOffset;  
        for (int i = startLineNum; i <= endLineNum; ++i) {  
            String lineNum = String.valueOf(i);  
            int width = fontMetrics.stringWidth(lineNum);  
            g.drawString(lineNum + " ", MARGIN + currentRowWidth - width - 1, start);  
            start += nlineHeight;  
        }  
        setPreferredSize(endLineNum);  
    }  
}