From 09b64bea954c283bde1d21c0a230f51f1ae89373 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Mon, 21 Mar 2005 18:47:17 +0000 Subject: [PATCH] new method for outlining groups --- src/jalview/gui/SeqCanvas.java | 146 ++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 81 deletions(-) diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 96dea90..f9ab015 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -2,9 +2,7 @@ package jalview.gui; import java.awt.*; import javax.swing.*; -import java.awt.event.*; import jalview.datamodel.*; -import jalview.schemes.*; import jalview.analysis.*; @@ -157,111 +155,97 @@ public class SeqCanvas extends JPanel }*/ SequenceI nextSeq; - SequenceGroup group=null; - SequenceGroup [] groups=null; - boolean inGroup=false; // are we in a defined group? - boolean inRB=false; //Are we in a rubberband group? - int sx=-1, sy=-1, ex=-1, ey=-1; - int oldStartX=0,oldEndX=0,oldY=0; - int oldRStartX=0,oldREndX=0,oldRY=0; + + /// First draw the sequences + ///////////////////////////// for (int i = y1 ; i < y2 ;i++) { nextSeq = av.getAlignment().getSequenceAt(i); - group = av.alignment.findGroup( nextSeq ); - groups = av.alignment.findAllGroups( nextSeq ); - - sr.drawSequence(g, nextSeq, groups,x1,x2, + sr.drawSequence(g, nextSeq, av.alignment.findAllGroups( nextSeq ),x1,x2, (x1 - startx) * av.charWidth, offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight), av.charWidth,av.charHeight,null, i); if(av.showSequenceFeatures) { - fr.drawSequence(g, nextSeq, groups, x1, x2, + fr.drawSequence(g, nextSeq, av.alignment.findAllGroups( nextSeq ), x1, x2, (x1 - startx) * av.charWidth, offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight), av.charWidth, av.charHeight, null, i); } + } + // + ///////////////////////////////////// + // Now outline any areas if necessary + ///////////////////////////////////// + SequenceGroup group = av.getSelectionGroup(); + java.util.Vector groups = av.alignment.getGroups(); + int sx = -1, sy = -1, ex = -1; + int groupIndex = -1; + if (group == null && groups.size() > 0) + { + group = (SequenceGroup) groups.elementAt(0); + groupIndex = 0; + } - - if( group!=null ) - { - - g.setColor(Color.lightGray); - - sx = (group.getStartRes()-startx)*av.charWidth; - sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight); - ex = (group.getEndRes()+1-startx)*av.charWidth; - ey = offset + AlignmentUtil.getPixelHeight(starty, i+1, av.charHeight); - - - if (!inGroup) + if (group != null) + do + { + int oldY = -1; + int i = 0; + boolean inGroup = false; + for (i = y1; i < y2; i++) { - g.drawLine(sx, sy, ex, sy); // Horizontal, top of new box - inGroup=true; + sx = (group.getStartRes() - startx) * av.charWidth; + sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight); + ex = (group.getEndRes() + 1 - group.getStartRes()) * av.charWidth; + + if (group.sequences.contains(av.alignment.getSequenceAt(i)) + && sx < getWidth() + && ex > 0) + { + if (!inGroup) + { + oldY = sy; + inGroup = true; + if (group == av.getSelectionGroup()) + g.setColor(Color.RED.brighter()); + else + g.setColor(group.getOutlineColour()); + } + } + else + { + if (inGroup) + { + g.drawRect(sx, oldY, ex, (sy - oldY)); + inGroup = false; + } + } + } + if (inGroup) + { + sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight); + g.drawRect(sx, oldY, ex, (sy - oldY)); + inGroup = false; } - g.drawLine(sx, sy, sx, ey ); // vertical line, left hand side - g.drawLine( ex,sy,ex,ey); // vertical line, right hand side - if (i == y2 - 1)// last line of alignment, seal the box - g.drawLine(sx, ey, ex, ey); // Horizontal, bottom of old box - - oldStartX = sx; - oldEndX = ex; - oldY = ey; + groupIndex++; + if (groupIndex >= groups.size()) + break; - } - else if(inGroup) - { - g.setColor(Color.lightGray); - g.drawLine(oldStartX, oldY, oldEndX, oldY); // Horizontal, bottom of old box - } - else - inGroup = false; + group = (SequenceGroup) groups.elementAt(groupIndex); - group = av.getSelectionGroup(); - if( group != null && group.sequences.contains(nextSeq) ) - { - g.setColor(Color.RED.brighter()); - sx = (group.getStartRes() - startx) * av.charWidth; - sy = offset + - AlignmentUtil.getPixelHeight(starty, i, av.charHeight); - ex = (group.getEndRes() + 1 - startx) * av.charWidth; - ey = offset + - AlignmentUtil.getPixelHeight(starty, i + 1, av.charHeight); - - if (!inRB) - { - - g.drawLine(sx, sy, ex, sy); // Horizontal, top of new box - inRB = true; - } - - g.drawLine(sx, sy, sx, ey); // vertical line, left hand side - g.drawLine(ex, sy, ex, ey); // vertical line, right hand side - if (i == y2 - 1) // last line of alignment, seal the box - g.drawLine(sx, ey, ex, ey); // Horizontal, bottom of old box - - oldRStartX = sx; - oldREndX = ex; - oldRY = ey; - } - else if(inRB) - { - g.setColor(Color.RED.brighter()); - g.drawLine(oldRStartX, oldRY, oldREndX, oldRY); // Horizontal, bottom of old box - inRB = false; - } - else - inRB = false; + } + while (groupIndex < groups.size()); - } /// Highlight search Results once all sequences have been drawn + ////////////////////////////////////////////////////////// if(displaySearch) { for(int r=0; r