/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.appletgui; import java.awt.*; import jalview.datamodel.*; import jalview.analysis.*; public class IdCanvas extends Panel { protected AlignViewport av; protected boolean showScores = true; protected int maxIdLength = -1; protected String maxIdStr = null; Image image; Graphics gg; int imgHeight=0; boolean fastPaint = false; java.util.Vector searchResults; public IdCanvas(AlignViewport av) { setLayout(null); this.av = av; PaintRefresher.Register(this); } public void drawIdString(Graphics gg,SequenceI s,int i, int starty, int ypos) { int charHeight = av.getCharHeight(); if(searchResults!=null && searchResults.contains(s)) { gg.setColor(Color.black); gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight); gg.setColor(Color.white); } else if (av.getSelectionGroup()!=null && av.getSelectionGroup().sequences.contains(s)) { gg.setColor(Color.lightGray); gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight); gg.setColor(Color.white); } else { gg.setColor(s.getColor()); gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight); gg.setColor(Color.black); } String string = s.getName(); if(av.getShowFullId()) string = s.getDisplayId(); gg.drawString(string,0,AlignmentUtil.getPixelHeight(starty,i,charHeight) + ypos + charHeight- (charHeight/5)); } public void fastPaint(int vertical) { if(gg==null) { repaint(); return;} gg.copyArea( 0,0, getSize().width, imgHeight, 0, -vertical*av.charHeight ); int ss=av.startSeq, es=av.endSeq, transY = 0; if (vertical > 0) // scroll down { ss = es - vertical; if(ss av.endSeq) es = av.endSeq; } gg.translate(0, transY); drawIds(ss, es); gg.translate( 0, -transY ); fastPaint = true; repaint(); } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { if(getSize().height<0 || getSize().width<0) return; if (fastPaint) { fastPaint = false; g.drawImage(image, 0, 0, this); return; } imgHeight = getSize().height; imgHeight -= imgHeight % av.charHeight; if (imgHeight<1) return; if(image==null || imgHeight!=image.getHeight(this)) { image = createImage(getSize().width, imgHeight); gg = image.getGraphics(); gg.setFont(av.getFont()); } //Fill in the background gg.setColor(Color.white); Font italic = new Font(av.getFont().getName(), Font.ITALIC, av.getFont().getSize()); gg.setFont(italic); gg.fillRect(0, 0, getSize().width, getSize().height); drawIds( av.getStartSeq(), av.endSeq); g.drawImage(image, 0, 0, this); } void drawIds(int starty, int endy) { Color currentColor = Color.white; Color currentTextColor = Color.black; if (av.getWrapAlignment()) { int rowSize = av.getEndRes() - av.getStartRes(); // Draw the rest of the panels for(int ypos=2*av.charHeight, row=av.startRes; ypos <= getSize().height && row