SequenceFeature display added
[jalview.git] / src / jalview / gui / DrawableSequence.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 DrawableSequence implements SequenceI {\r
9   protected boolean fastDraw = true;\r
10   protected Color   color = Color.black;\r
11 \r
12   protected SequenceI sequence;\r
13 \r
14   ColourSchemeI cs = null;\r
15 \r
16   public Vector sequenceFeatures = new Vector();\r
17   public void setSequenceFeatures(Vector v)\r
18   {   sequenceFeatures = v;  }\r
19   public Vector getSequenceFeatures()\r
20   {return sequenceFeatures; }\r
21 \r
22    String pdbId;\r
23   public void setPDBId(String id)\r
24   {    pdbId = id;  }\r
25   public String getPDBId()\r
26   {    return pdbId;  }\r
27 \r
28 \r
29   public DrawableSequence(SequenceI s) {\r
30     this.sequence = s;\r
31 \r
32     _init();\r
33   }\r
34 \r
35   public DrawableSequence(String name,String seq, int start, int end) {\r
36     sequence   = new Sequence(name,seq,start,end);\r
37 \r
38     _init();\r
39   }\r
40 \r
41   private void _init() {\r
42 \r
43   }\r
44 \r
45   public void setColourScheme(ColourSchemeI cs) {\r
46     this.cs = cs;\r
47   }\r
48 \r
49   public Color getResidueBoxColour(int i) {\r
50     Color c = cs.findColour( sequence.getSequence(i,i+1),i,null);\r
51     return c;\r
52   }\r
53 \r
54   public void drawSequence(Graphics g,int start, int end, int x1, int y1, int width, int height,boolean showScores, boolean displayBoxes, boolean displayText) {\r
55 \r
56     if (displayBoxes == true) {\r
57       drawBoxes(g,start,end,x1,y1,width, height);\r
58     }\r
59     if (displayText == true) {\r
60         drawText(g,start,end,x1,y1,width,height);\r
61     }\r
62   }\r
63 \r
64   public void drawBoxes(Graphics g,int start, int end, int x1, int y1, int width, int height) {\r
65     int i      = start;\r
66     int length = getSequence().length();\r
67 \r
68     Color currentColor = Color.white;\r
69 \r
70     int curStart = x1;\r
71     int curWidth = width;\r
72 \r
73     while (i <= end && i < length) {\r
74       Color c = getResidueBoxColour(i);\r
75 \r
76       if (c != currentColor || c != null) {\r
77         g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
78 \r
79         currentColor = c;\r
80         g.setColor(c);\r
81 \r
82         curStart = i;\r
83         curWidth = width;\r
84       } else {\r
85         curWidth += width;\r
86       }\r
87 \r
88       i++;\r
89     }\r
90     g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
91   }\r
92 \r
93   public void drawText(Graphics g, int start, int end, int x1, int y1, int width, int height) {\r
94     int pady = 2;\r
95     g.setColor(Color.black);\r
96 System.out.println("drawablesequence is drawing");\r
97     // Need to find the sequence position here.\r
98 \r
99     if (fastDraw) {\r
100         String s;\r
101         if (end < getSequence().length()) {\r
102             s = getSequence().substring(start,end+1);\r
103         } else {\r
104             s = getSequence().substring(start);\r
105         }\r
106         System.out.println(s+" "+x1+" "+y1);\r
107       g.drawString(s,x1,y1+height-pady);\r
108     } else {\r
109 \r
110       for (int i=start; i <= end; i++) {\r
111         String s = "";\r
112 \r
113         if (i < end && i < getSequence().length()) {\r
114           s = getSequence().substring(i,i+1);\r
115         } else {\r
116           s = getSequence().substring(i,i+1);\r
117         }\r
118 \r
119 \r
120         g.drawString(s,x1+width*(i-start),y1+height-pady);\r
121       }\r
122 \r
123     }\r
124   }\r
125 \r
126 \r
127   public int getPosition(int res) {\r
128 \r
129     return res;\r
130   }\r
131 \r
132   public int getResidue(int pos) {\r
133 \r
134     return pos;\r
135   }\r
136 \r
137   // SequenceI methods\r
138 \r
139   public void        setName(String name) {\r
140     sequence.setName(name);\r
141   }\r
142   public String      getName() {\r
143     return sequence.getName();\r
144   }\r
145   public String      getDisplayId() {\r
146     return sequence.getDisplayId();\r
147   }\r
148 \r
149   public void        setStart(int start) {\r
150     sequence.setStart(start);\r
151   }\r
152   public int         getStart() {\r
153     return sequence.getStart();\r
154   }\r
155 \r
156   public void        setEnd(int end) {\r
157     sequence.setEnd(end);\r
158   }\r
159   public int         getEnd() {\r
160     return sequence.getEnd();\r
161   }\r
162 \r
163   public int         getLength() {\r
164     return sequence.getLength();\r
165   }\r
166 \r
167   public void        setSequence(String seq) {\r
168     sequence.setSequence(seq);\r
169   }\r
170   public String      getSequence() {\r
171     return sequence.getSequence();\r
172   }\r
173   public String      getSequence(int start,int end) {\r
174     return sequence.getSequence(start,end);\r
175   }\r
176   public char        getCharAt(int i) {\r
177     return sequence.getCharAt(i);\r
178   }\r
179 \r
180   public void        setDescription(String desc) {\r
181     sequence.setDescription(desc);\r
182   }\r
183   public String      getDescription() {\r
184     return sequence.getDescription();\r
185   }\r
186 \r
187   public int         findIndex(int pos) {\r
188     return sequence.findIndex(pos);\r
189   }\r
190   public int         findPosition(int i) {\r
191     return sequence.findPosition(i);\r
192   }\r
193 \r
194 \r
195   public void deleteCharAt(int i) {\r
196     sequence.deleteCharAt(i);\r
197   }\r
198 \r
199   public void insertCharAt(int i,char c) {\r
200     sequence.insertCharAt(i,c);\r
201 \r
202   }\r
203 \r
204   public void       insertCharAt(int i,char c,boolean chop) {\r
205     sequence.insertCharAt(i,c,chop);\r
206 \r
207   }\r
208   public Color getColor() {\r
209     return this.color;\r
210   }\r
211 \r
212   public void setColor(Color c) {\r
213     this.color = c;\r
214   }\r
215 \r
216 }\r