GPL license added
[jalview.git] / src / jalview / appletgui / FeatureRenderer.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 \r
20 package jalview.appletgui;\r
21 \r
22 import jalview.datamodel.*;\r
23 import java.awt.*;\r
24 import java.util.*;\r
25 \r
26 public class FeatureRenderer\r
27 {\r
28   AlignViewport av;\r
29 \r
30   SequenceGroup currentSequenceGroup = null;\r
31   SequenceGroup [] allGroups = null;\r
32   Color resBoxColour;\r
33   Graphics graphics;\r
34 \r
35   public FeatureRenderer(AlignViewport av)\r
36   {\r
37     this.av = av;\r
38   }\r
39 \r
40 \r
41   public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)\r
42   {\r
43     Vector features = seq.getSequenceFeatures();\r
44     Enumeration e = features.elements();\r
45     while( e.hasMoreElements() )\r
46     {\r
47       SequenceFeature sf = (SequenceFeature)e.nextElement();\r
48       if(sf.getStart()>seq.getEnd())\r
49         continue;\r
50 \r
51       int fstart = seq.findIndex(sf.getStart())-1;\r
52       int fend = seq.findIndex(sf.getEnd())-1;\r
53 \r
54       if(   (fstart<=end && fend>=start)  )\r
55       {\r
56         if(fstart<0) // fix for if the feature we have starts before the sequence start,\r
57           fstart = 0;// but the feature end is still valid!!\r
58 \r
59         if(fstart==fend)\r
60         {\r
61           g.setColor(Color.red);\r
62           g.fillRoundRect( (fstart - start) * width, y1, width, height, 4,4);\r
63           g.setColor(Color.white);\r
64 \r
65           char s = seq.getSequence().charAt(fstart);\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), charOffset + x1 + width * (fstart - start), y1 + height - pady);\r
70 \r
71         }\r
72         else\r
73         {\r
74           for (int i = fstart; i <= fend; i++)\r
75           {\r
76             char s = seq.getSequence().charAt(i);\r
77             if( jalview.util.Comparison.isGap(s) )\r
78               continue;\r
79 \r
80             g.setColor(Color.blue);\r
81             g.fillRect( (i-start) * width, y1, width, height);\r
82 \r
83             g.setColor(Color.white);\r
84 \r
85             FontMetrics fm = g.getFontMetrics();\r
86             int charOffset = (width - fm.charWidth(s)) / 2;\r
87             int pady = height / 5;\r
88             g.drawString(String.valueOf(s),\r
89                          charOffset + x1 + width * (i-start),\r
90                          y1 + height - pady);\r
91           }\r
92         }\r
93       }\r
94 \r
95     }\r
96    }\r
97 \r
98 }\r