- for(int i=0; i<aa.length; i++)\r
- {\r
- AlignmentAnnotation row = aa[i];\r
- if(!row.visible)\r
- continue;\r
-\r
- if(row.isGraph)\r
- {\r
- // this is so that we draw the characters below the graph\r
- y += row.height;\r
- if(row.hasText)\r
- y -= av.charHeight;\r
- }\r
- if(row.hasText)\r
- iconOffset = av.charHeight/2;\r
- else\r
- iconOffset = 0;\r
-\r
- for(j=startRes; j<endRes; j++)\r
- {\r
- if(row.annotations.length<=j || row.annotations[j]==null)\r
- validRes = false;\r
- else\r
- validRes = true;\r
-\r
- x = (j-startRes)*av.charWidth;\r
-\r
-\r
- if(activeRow==i)\r
- {\r
-\r
- g.setColor(Color.red);\r
-\r
- if(activeRes!=null)\r
- for (int n = 0; n < activeRes.size(); n++)\r
- {\r
- int v = Integer.parseInt(activeRes.get(n).toString()) ;\r
- if (v == j)\r
- g.fillRect( (j-startRes) * av.charWidth, y, av.charWidth, row.height);\r
- }\r
- }\r
-\r
-\r
-\r
- if(validRes && row.annotations[j].displayCharacter.length()>0)\r
- {\r
- int charOffset = (av.charWidth - fm.charWidth(row.annotations[j].displayCharacter.charAt(0)))/2;\r
- g.setColor( row.annotations[j].colour);\r
- if(j==0)\r
- {\r
- if (row.annotations[0].secondaryStructure == 'H'\r
- || row.annotations[0].secondaryStructure == 'E')\r
- g.drawString(row.annotations[j].displayCharacter, x,\r
- y + iconOffset + 2);\r
- }\r
- else if( (row.annotations[j].secondaryStructure=='H'\r
- || row.annotations[j].secondaryStructure=='E') &&\r
- (row.annotations[j-1]==null ||\r
- row.annotations[j].secondaryStructure!=row.annotations[j-1].secondaryStructure))\r
-\r
- g.drawString(row.annotations[j].displayCharacter, x, y + iconOffset + 2);\r
-\r
- if(!row.hasIcons)\r
- g.drawString(row.annotations[j].displayCharacter, x + charOffset,\r
- y + iconOffset + 2);\r
- }\r
-\r
- if(row.hasIcons)\r
- if(!validRes || row.annotations[j].secondaryStructure!=lastSS[i])\r
- {\r
- switch (lastSS[i])\r
- {\r
- case 'H':\r
- g.setColor(HELIX_COLOUR);\r
- g.fillRoundRect(lastSSX[i], y+4 + iconOffset, x-lastSSX[i], 7, 8, 8);\r
- break;\r
- case 'E':\r
- g.setColor(SHEET_COLOUR);\r
- g.fillRect(lastSSX[i], y + 4 + iconOffset, x-lastSSX[i]-4, 7);\r
- g.fillPolygon(new int[] {x - 4, x- 4, x }\r
- , new int[]{y+ iconOffset, y + 14+ iconOffset, y + 8+ iconOffset}, 3);\r
- break;\r
- case 'C':\r
- break;\r
- default :\r
- g.setColor(Color.gray);\r
- g.fillRect(lastSSX[i], y+6+ iconOffset, x-lastSSX[i], 2);\r
- break;\r
- }\r
-\r
- if(validRes)\r
- lastSS[i] = row.annotations[j].secondaryStructure;\r
- else\r
- lastSS[i] = ' ';\r
- lastSSX[i] = x;\r
- }\r
-\r
- if (validRes && row.isGraph)\r
- {\r
- g.setColor(new Color(0,0,180));\r
- int height = (int)((row.annotations[j].value / row.graphMax)*GRAPH_HEIGHT);\r
-\r
- if(row.windowLength>1)\r
- {\r
- int total =0;\r
- for(int i2=j- (row.windowLength/2); i2<j+(row.windowLength/2); i2++)\r
- {\r
- if(i2<0 || i2>=av.alignment.getWidth())\r
- continue;\r
-\r
- total += row.annotations[i2].value;\r
- }\r
-\r
- total/=row.windowLength;\r
- height = (int)( (total / row.graphMax) *GRAPH_HEIGHT);\r
-\r
- }\r
- g.setColor(row.annotations[j].colour);\r
- g.fillRect(x, y-height, av.charWidth, height );\r
- }\r
-\r
-\r
- }\r
-\r
- x+=av.charWidth;\r
-\r
- if(row.hasIcons)\r
- switch (lastSS[i])\r
- {\r
- case 'H':\r
- g.setColor(HELIX_COLOUR);\r
- g.fillRoundRect(lastSSX[i], y+4+ iconOffset, x - lastSSX[i], 7, 8, 8);\r
- break;\r
- case 'E':\r
- g.setColor(SHEET_COLOUR);\r
- g.fillRect(lastSSX[i], y + 4+ iconOffset, x - lastSSX[i] - 4, 7);\r
- g.fillPolygon(new int[]\r
- {x - 4, x - 4, x}\r
- , new int[]\r
- {y + iconOffset, y + 14+ iconOffset, y + 7+ iconOffset}\r
- , 3);\r
- break;\r
- case 'C':\r
- break;\r
- default:\r
- g.setColor(Color.gray);\r
- g.fillRect(lastSSX[i], y+6+ iconOffset, x-lastSSX[i], 2);\r
- break;\r
-\r
- }\r
-\r
- if(row.isGraph && row.hasText)\r
- y+=av.charHeight;\r
- if(!row.isGraph)\r
- y+=aa[i].height;\r
- }\r
- }\r
-\r
- // used by overview window\r
- public void drawGraph(Graphics g, AlignmentAnnotation aa,int width, int y)\r
- {\r
- g.setColor(Color.white);\r
- g.fillRect(0,0,width, y);\r
- g.setColor(new Color(0,0,180));\r
- int x = 0;\r
- for(int j=0; j<aa.annotations.length; j++)\r
- {\r
- g.setColor(new Color(0, 0, 180));\r
- int height = (int) ( (aa.annotations[j].value / aa.graphMax) * GRAPH_HEIGHT );\r
- g.fillRect(x, y - height, av.charWidth, height);\r
- x+=av.charWidth;\r