X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOverviewPanel.java;h=c530fdce40088bba6d8aedb7830005dc76023ff8;hb=3965e9e3bc4ca05dcc82b8dc72c380f208c9a1e6;hp=d87285c63079761b69151e3125d5724bbbf8f9fc;hpb=fce4313f5daea7f5b5914bfaefd11e946664942c;p=jalview.git diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index d87285c..c530fdc 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -20,7 +20,9 @@ */ package jalview.gui; +import jalview.datamodel.SequenceI; import jalview.renderer.AnnotationRenderer; +import jalview.renderer.seqfeatures.FeatureColourFinder; import jalview.viewmodel.OverviewDimensions; import java.awt.Color; @@ -69,7 +71,7 @@ public class OverviewPanel extends JPanel implements Runnable // main visible SeqCanvas private SequenceRenderer sr; - private jalview.renderer.seqfeatures.FeatureRenderer fr; + jalview.renderer.seqfeatures.FeatureRenderer fr; /** * Creates a new OverviewPanel object. @@ -86,9 +88,11 @@ public class OverviewPanel extends JPanel implements Runnable sr = new SequenceRenderer(av); sr.renderGaps = false; sr.forOverview = true; - fr = new FeatureRenderer(alPanel); + fr = new FeatureRenderer(ap); - od = new OverviewDimensions(av); + od = new OverviewDimensions(av.getRanges(), + (av.isShowAnnotation() && av + .getAlignmentConservationAnnotation() != null)); addComponentListener(new ComponentAdapter() { @@ -110,9 +114,9 @@ public class OverviewPanel extends JPanel implements Runnable { if (!av.getWrapAlignment()) { - // TODO: feature: jv2.5 detect shift drag and update selection from - // it. - od.setBoxPositionByMouse(evt.getX(), evt.getY()); + od.updateViewportFromMouse(evt.getX(), evt.getY(), av + .getAlignment().getHiddenSequences(), av + .getColumnSelection(), av.getRanges()); ap.setScrollValues(od.getScrollCol(), od.getScrollRow()); } } @@ -125,7 +129,9 @@ public class OverviewPanel extends JPanel implements Runnable { if (!av.getWrapAlignment()) { - od.setBoxPositionByMouse(evt.getX(), evt.getY()); + od.updateViewportFromMouse(evt.getX(), evt.getY(), av + .getAlignment().getHiddenSequences(), av + .getColumnSelection(), av.getRanges()); ap.setScrollValues(od.getScrollCol(), od.getScrollRow()); } } @@ -149,8 +155,8 @@ public class OverviewPanel extends JPanel implements Runnable if ((getWidth() > 0) && (getHeight() > 0)) { - od.setWidth(getWidth()); // width = getWidth(); - od.setHeight(getHeight()); // sequencesHeight = getHeight() - graphHeight; + od.setWidth(getWidth()); + od.setHeight(getHeight()); } setPreferredSize(new Dimension(od.getWidth(), od.getHeight())); @@ -181,15 +187,11 @@ public class OverviewPanel extends JPanel implements Runnable mg.setColor(Color.orange); mg.fillRect(0, 0, od.getWidth(), miniMe.getHeight()); - // calculate scale based on current alignment width and height - od.updateScales(); - // calculate sampleCol and sampleRow // alignment width is max number of residues/bases // alignment height is number of sequences int alwidth = av.getAlignment().getWidth(); - int alheight = av.getAlignment().getHeight() - + av.getAlignment().getHiddenSequences().getSize(); + int alheight = av.getAlignment().getAbsoluteHeight(); // sampleCol or sampleRow is the width/height allocated to each residue // in particular, sometimes we may need more than one row/col of the @@ -201,7 +203,9 @@ public class OverviewPanel extends JPanel implements Runnable buildImage(sampleRow, sampleCol); - if (av.getAlignmentConservationAnnotation() != null) + // check for conservation annotation to make sure overview works for DNA too + if (av.isShowAnnotation() + && (av.getAlignmentConservationAnnotation() != null)) { renderer.updateFromAlignViewport(av); for (int col = 0; col < od.getWidth() && !resizeAgain; col++) @@ -232,14 +236,18 @@ public class OverviewPanel extends JPanel implements Runnable setBoxPosition(); } + /* + * Build the overview panel image + */ private void buildImage(float sampleRow, float sampleCol) { int lastcol = -1; int lastrow = -1; - int color = Color.white.getRGB(); + int rgbColour = Color.white.getRGB(); + + SequenceI seq = null; + FeatureColourFinder finder = new FeatureColourFinder(fr); - jalview.datamodel.SequenceI seq = null; - final boolean hasHiddenRows = av.hasHiddenRows(); final boolean hasHiddenCols = av.hasHiddenColumns(); boolean hiddenRow = false; // get hidden row and hidden column map once at beginning. @@ -255,55 +263,28 @@ public class OverviewPanel extends JPanel implements Runnable lastrow = currentrow; - hiddenRow = false; - // should be method(s) in Alignment - if (hasHiddenRows) - { - seq = av.getAlignment().getHiddenSequences() - .getHiddenSequence(lastrow); - if (seq == null) - { - int index = av.getAlignment().getHiddenSequences() - .findIndexWithoutHiddenSeqs(lastrow); - - seq = av.getAlignment().getSequenceAt(index); - } - else - { - hiddenRow = true; - } - } - else - { - seq = av.getAlignment().getSequenceAt(lastrow); - } - // end of Alignment method(s) - } - - if (seq == null) - { - System.out.println(lastrow + " null"); - continue; + // get the sequence which would be at alignment index 'lastrow' if no + // rows were hidden, and determine whether it is hidden or not + hiddenRow = av.getAlignment().isHidden(lastrow); + seq = av.getAlignment().getSequenceAtAbsoluteIndex(lastrow); } for (int col = 0; col < od.getWidth() && !resizeAgain; col++) { if (doCopy) { - color = miniMe.getRGB(col, row - 1); + rgbColour = miniMe.getRGB(col, row - 1); } else if ((int) (col * sampleCol) != lastcol || (int) (row * sampleRow) != lastrow) { lastcol = (int) (col * sampleCol); - color = getColumnColourFromSequence(seq, hiddenRow, hasHiddenCols, - lastcol); + rgbColour = getColumnColourFromSequence(seq, hiddenRow, + hasHiddenCols, lastcol, finder); } - // else if ((int) (col * sampleCol) == lastcol && (int) (row * - // sampleRow) == lastrow)) - // we just use the color we already have , so don't need to set it + // else we just use the color we already have , so don't need to set it - miniMe.setRGB(col, row, color); + miniMe.setRGB(col, row, rgbColour); } } } @@ -311,33 +292,26 @@ public class OverviewPanel extends JPanel implements Runnable /* * Find the colour of a sequence at a specified column position */ - private int getColumnColourFromSequence(jalview.datamodel.SequenceI seq, - boolean hiddenRow, boolean hasHiddenCols, int lastcol) + private int getColumnColourFromSequence( + jalview.datamodel.SequenceI seq, + boolean hiddenRow, boolean hasHiddenCols, int lastcol, + FeatureColourFinder finder) { - int color; + Color color = Color.white; - if (seq.getLength() > lastcol) + if ((seq != null) && (seq.getLength() > lastcol)) { - color = sr.getResidueBoxColour(seq, lastcol).getRGB(); - - if (av.isShowSequenceFeatures()) - { - color = fr.findFeatureColour(color, seq, lastcol); - } - } - else - { - color = Color.white.getRGB(); // White + color = sr.getResidueColour(seq, lastcol, finder); } if (hiddenRow || (hasHiddenCols && !av.getColumnSelection() .isVisible(lastcol))) { - color = new Color(color).darker().darker().getRGB(); + color = color.darker().darker(); } - return color; + return color.getRGB(); } /** @@ -347,7 +321,8 @@ public class OverviewPanel extends JPanel implements Runnable */ public void setBoxPosition() { - od.setBoxPosition(); + od.setBoxPosition(av.getAlignment() + .getHiddenSequences(), av.getColumnSelection(), av.getRanges()); repaint(); } @@ -378,7 +353,7 @@ public class OverviewPanel extends JPanel implements Runnable g.fillRect(0, 0, getWidth(), getHeight()); } } - // TODO: render selected regions + g.setColor(Color.red); od.drawBox(g); }