Jalview Imported Sources
[jalview.git] / src / jalview / gui / SequenceRenderer.java
1 package jalview.gui;\r
2 \r
3 import jalview.datamodel.*;\r
4 import jalview.schemes.*;\r
5 \r
6 import java.awt.*;\r
7 import java.util.*;\r
8 \r
9 public class SequenceRenderer implements RendererI\r
10 {\r
11   FontMetrics fm;\r
12   AlignViewport av;\r
13 \r
14   public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i) {\r
15     Color c = Color.WHITE;\r
16 \r
17     try{\r
18       if (cs != null)\r
19         c = cs.findColour(seq, seq.getSequence(i, i + 1), i, null);\r
20     }catch(Exception ex)\r
21     {    }\r
22 \r
23     return c;\r
24   }\r
25 \r
26   public void drawSequence(Graphics g,ColourSchemeI cs,SequenceI seq,int start, int end, int x1, int y1, double width, int height,boolean showScores, boolean displayBoxes, boolean displayText,Vector freq, int seqnum,AlignViewport av) {\r
27 \r
28     this.av = av;\r
29 \r
30     if (displayBoxes == true) {\r
31         drawBoxes(g,cs,seq,start,end,x1,y1,(int)width, height,freq);\r
32     }\r
33     if (displayText == true) {\r
34         fm = g.getFontMetrics();\r
35         drawText(g,cs,seq,start,end,x1,y1,(int)width,height);\r
36     }\r
37   }\r
38 \r
39   public void drawBoxes(Graphics g,ColourSchemeI cs, SequenceI seq,int start, int end, int x1, int y1, int width, int height,Vector freq) {\r
40     int i      = start;\r
41     int length = seq.getLength();\r
42 \r
43     Color currentColor = Color.WHITE;\r
44 \r
45     int curStart = x1;\r
46     int curWidth = width;\r
47 \r
48   //  int threshold = 80;\r
49 \r
50     while (i <= end && i < length) {\r
51       Color c = getResidueBoxColour(cs,seq,i);\r
52 \r
53     //  Hashtable hash  = (Hashtable)freq.elementAt(i-start);\r
54     //  String    s     = (String)hash.get("maxResidue");\r
55     //  int       count = ((Integer)hash.get("maxCount")).intValue();\r
56   //    int       max   = ((Integer)hash.get("size")).intValue();\r
57    //   int       nongap = ((Integer)hash.get("nongap")).intValue();\r
58    //   float     frac  = (float)(count*1.0/(1.0*nongap));\r
59 \r
60       //System.out.println("Frac/count/nongap " + frac + " " + count + " " + nongap);\r
61     /*  if (!seq.getSequence().substring(i,i+1).equals(s) ||\r
62           s.equals("-") ||\r
63           s.equals(".") ||\r
64           s.equals(" "))\r
65       {\r
66         c = Color.white;\r
67       } else {\r
68         if (frac > 0.9) {\r
69           c = Color.red;\r
70         } else if (frac > 0.8) {\r
71           c = Color.orange;\r
72         } else if (frac > 0.7) {\r
73           c = Color.pink;\r
74         } else if (frac > 0.5) {\r
75           c = Color.yellow;\r
76         } else if (frac> 0.3) {\r
77             c = Color.lightGray;\r
78         }\r
79       }*/\r
80 \r
81       if (c != currentColor || c != null)\r
82       {\r
83         g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
84 \r
85         currentColor = c;\r
86         g.setColor(c);\r
87 \r
88         curStart = i;\r
89         curWidth = width;\r
90       }\r
91       else\r
92         curWidth += width;\r
93 \r
94       i++;\r
95     }\r
96     g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
97   }\r
98 \r
99   public void drawText(Graphics g, ColourSchemeI cs, SequenceI seq,int start, int end, int x1, int y1, int width, int height)\r
100   {\r
101     int pady = height/5;\r
102     int charOffset=0;\r
103     g.setColor(Color.black);\r
104     boolean colourText = av.getColourText();\r
105     Color c;\r
106     char s;\r
107     // Need to find the sequence position here.\r
108     for (int i = start; i <= end; i++)\r
109     {\r
110         if (i < end && i < seq.getLength())\r
111           s = seq.getSequence().charAt(i);\r
112         else if(i<seq.getLength())\r
113           s = seq.getSequence().charAt(i);\r
114         else\r
115           s = ' ';\r
116 \r
117         if (colourText)\r
118         {\r
119             c = getResidueBoxColour(cs, seq, i);\r
120             g.setColor(c.darker());\r
121         }\r
122 \r
123       charOffset =  (width - fm.charWidth(s))/2;\r
124 \r
125 \r
126       g.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);\r
127     }\r
128   }\r
129 \r
130 }\r