no need to send pid, seqnum
[jalview.git] / src / jalview / gui / FeatureRenderer.java
1 package jalview.gui;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.schemes.*;\r
5 import java.awt.*;\r
6 import java.util.*;\r
7 \r
8 public class FeatureRenderer\r
9 {\r
10   AlignViewport av;\r
11 \r
12   SequenceGroup currentSequenceGroup = null;\r
13   SequenceGroup [] allGroups = null;\r
14   Color resBoxColour;\r
15   Graphics graphics;\r
16 \r
17   public FeatureRenderer(AlignViewport av)\r
18   {\r
19     this.av = av;\r
20   }\r
21 \r
22 \r
23   public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)\r
24   {\r
25     Vector features = seq.getSequenceFeatures();\r
26     Enumeration e = features.elements();\r
27     while( e.hasMoreElements() )\r
28     {\r
29       SequenceFeature sf = (SequenceFeature)e.nextElement();\r
30       if(sf.getStart()>seq.getEnd())\r
31         continue;\r
32 \r
33       int fstart = seq.findIndex(sf.getStart())-1;\r
34       int fend = seq.findIndex(sf.getEnd())-1;\r
35 \r
36       if(   (fstart<=end && fend>=start)  )\r
37       {\r
38         if(fstart<0) // fix for if the feature we have starts before the sequence start,\r
39           fstart = 0;// but the feature end is still valid!!\r
40 \r
41         if(fstart==fend)\r
42         {\r
43           g.setColor(Color.red);\r
44           g.fillRoundRect( (fstart - start) * width, y1, width, height, 4,4);\r
45           g.setColor(Color.white);\r
46 \r
47           char s = seq.getSequence().charAt(fstart);\r
48           FontMetrics fm = g.getFontMetrics();\r
49           int charOffset =  (width - fm.charWidth(s))/2;\r
50           int pady = height/5;\r
51           g.drawString(String.valueOf(s), charOffset + x1 + width * (fstart - start), y1 + height - pady);\r
52 \r
53         }\r
54         else\r
55         {\r
56           for (int i = fstart; i <= fend; i++)\r
57           {\r
58             char s = seq.getSequence().charAt(i);\r
59             if( jalview.util.Comparison.isGap(s) )\r
60               continue;\r
61 \r
62             g.setColor(Color.blue);\r
63             g.fillRect( (i-start) * width, y1, width, height);\r
64 \r
65             g.setColor(Color.white);\r
66 \r
67             FontMetrics fm = g.getFontMetrics();\r
68             int charOffset = (width - fm.charWidth(s)) / 2;\r
69             int pady = height / 5;\r
70             g.drawString(String.valueOf(s),\r
71                          charOffset + x1 + width * (i-start),\r
72                          y1 + height - pady);\r
73           }\r
74         }\r
75       }\r
76 \r
77     }\r
78    }\r
79 \r
80 }\r