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