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