New function to highlight text search results
[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   boolean renderGaps = true;\r
13 \r
14   public void renderGaps(boolean b)\r
15   {\r
16     renderGaps = b;\r
17   }\r
18 \r
19   public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i)\r
20   {\r
21    Color c = Color.white;\r
22     try{\r
23        c = cs.findColour(seq, seq.getSequence(i, i + 1), i, null);\r
24     }catch(Exception ex){}\r
25 \r
26     return c;\r
27   }\r
28 \r
29 \r
30   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, boolean colourText,Vector freq, int seqnum) {\r
31 \r
32 \r
33     if (displayBoxes)\r
34         drawBoxes(g,cs,seq,start,end,x1,y1,(int)width, height,freq);\r
35 \r
36     if (displayText)\r
37     {\r
38         fm = g.getFontMetrics();\r
39         drawText(g,cs,colourText,seq,start,end,x1,y1,(int)width,height);\r
40     }\r
41   }\r
42 \r
43   public void drawBoxes(Graphics g,ColourSchemeI cs, SequenceI seq,int start, int end, int x1, int y1, int width, int height,Vector freq) {\r
44     int i      = start;\r
45     int length = seq.getLength();\r
46 \r
47     Color currentColor = Color.WHITE;\r
48 \r
49     int curStart = x1;\r
50     int curWidth = width;\r
51 \r
52   //  int threshold = 80;\r
53 \r
54     while (i <= end && i < length) {\r
55       Color c = getResidueBoxColour(cs,seq,i);\r
56 \r
57     //  Hashtable hash  = (Hashtable)freq.elementAt(i-start);\r
58     //  String    s     = (String)hash.get("maxResidue");\r
59     //  int       count = ((Integer)hash.get("maxCount")).intValue();\r
60   //    int       max   = ((Integer)hash.get("size")).intValue();\r
61    //   int       nongap = ((Integer)hash.get("nongap")).intValue();\r
62    //   float     frac  = (float)(count*1.0/(1.0*nongap));\r
63 \r
64       //System.out.println("Frac/count/nongap " + frac + " " + count + " " + nongap);\r
65     /*  if (!seq.getSequence().substring(i,i+1).equals(s) ||\r
66           s.equals("-") ||\r
67           s.equals(".") ||\r
68           s.equals(" "))\r
69       {\r
70         c = Color.white;\r
71       } else {\r
72         if (frac > 0.9) {\r
73           c = Color.red;\r
74         } else if (frac > 0.8) {\r
75           c = Color.orange;\r
76         } else if (frac > 0.7) {\r
77           c = Color.pink;\r
78         } else if (frac > 0.5) {\r
79           c = Color.yellow;\r
80         } else if (frac> 0.3) {\r
81             c = Color.lightGray;\r
82         }\r
83       }*/\r
84 \r
85       if (c != currentColor || c != null)\r
86       {\r
87         g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
88 \r
89         currentColor = c;\r
90         g.setColor(c);\r
91 \r
92         curStart = i;\r
93         curWidth = width;\r
94       }\r
95       else\r
96         curWidth += width;\r
97 \r
98       i++;\r
99     }\r
100     g.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
101   }\r
102 \r
103   public void drawText(Graphics g, ColourSchemeI cs, boolean colText, SequenceI seq,int start, int end, int x1, int y1, int width, int height)\r
104   {\r
105     int pady = height/5;\r
106     int charOffset=0;\r
107     g.setColor(Color.black);\r
108 \r
109     char s;\r
110     // Need to find the sequence position here.\r
111     for (int i = start; i <= end; i++)\r
112     {\r
113         if(i<seq.getLength())\r
114           s = seq.getSequence().charAt(i);\r
115         else\r
116           s = ' ';\r
117 \r
118         if(!renderGaps && (s=='-' || s=='.' || s==' '))\r
119           continue;\r
120 \r
121         if (colText)\r
122         {\r
123             Color c = getResidueBoxColour(cs, seq, i);\r
124             g.setColor(c.darker());\r
125         }\r
126 \r
127       charOffset =  (width - fm.charWidth(s))/2;\r
128 \r
129 \r
130       g.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);\r
131     }\r
132   }\r
133 \r
134   public void drawHighlightedText(Graphics g, SequenceI seq,int start, int end, int x1, int y1, int width, int height)\r
135   {\r
136     int pady = height/5;\r
137     int charOffset=0;\r
138     g.setColor(Color.BLACK);\r
139     g.fillRect(x1,y1,width*(end-start+1),height);\r
140     g.setColor(Color.white);\r
141 \r
142     char s='~';\r
143     // Need to find the sequence position here.\r
144     for (int i = start; i <= end; i++)\r
145     {\r
146        if(i<seq.getLength())\r
147           s = seq.getSequence().charAt(i);\r
148 \r
149       charOffset =  (width - fm.charWidth(s))/2;\r
150       g.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);\r
151     }\r
152   }\r
153 \r
154 \r
155 }\r