X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOverviewPanel.java;h=5f4f157af641c5ae69fa19c0756a9267570eb723;hb=6d06be2714c9cba8c69148d5e2d26b50b7051840;hp=3c94f26654d8cc0ffda22ee5b54ac987e98299a3;hpb=e04bcd38992def511190a30f98cb3db3a720e0fc;p=jalview.git diff --git a/src/jalview/gui/OverviewPanel.java b/src/jalview/gui/OverviewPanel.java index 3c94f26..5f4f157 100755 --- a/src/jalview/gui/OverviewPanel.java +++ b/src/jalview/gui/OverviewPanel.java @@ -21,6 +21,7 @@ package jalview.gui; import jalview.bin.Cache; +import jalview.renderer.OverviewRenderer; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.viewmodel.OverviewDimensions; @@ -69,6 +70,8 @@ public class OverviewPanel extends JPanel private boolean draggingBox = false; + private ProgressPanel progressPanel; + /** * Creates a new OverviewPanel object. * @@ -95,26 +98,47 @@ public class OverviewPanel extends JPanel && av.getAlignmentConservationAnnotation() != null)); } - setSize(od.getWidth(), od.getHeight()); - - oviewCanvas = new OverviewCanvas(od, av); setLayout(new BorderLayout()); + progressPanel = new ProgressPanel(OverviewRenderer.UPDATE, + MessageManager.getString("label.oview_calc"), getWidth()); + this.add(progressPanel, BorderLayout.SOUTH); + oviewCanvas = new OverviewCanvas(od, av, progressPanel); + add(oviewCanvas, BorderLayout.CENTER); av.getRanges().addPropertyChangeListener(this); + // without this the overview window does not size to fit the overview canvas + setPreferredSize(new Dimension(od.getWidth(), od.getHeight())); + addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent evt) { - if ((getWidth() != od.getWidth()) - || (getHeight() != (od.getHeight()))) + // Resize is called on the initial display of the overview. + // This code adjusts sizes to account for the progress bar if it has not + // already been accounted for, which triggers another resize call for + // the correct sizing, at which point the overview image is updated. + // (This avoids a double recalculation of the image.) + if (getWidth() == od.getWidth() && getHeight() == od.getHeight() + + progressPanel.getHeight()) { updateOverviewImage(); - setBoxPosition(); + } + else + { + if ((getWidth() > 0) && (getHeight() > 0)) + { + od.setWidth(getWidth()); + od.setHeight(getHeight() - progressPanel.getHeight()); + } + + setPreferredSize(new Dimension(od.getWidth(), + od.getHeight() + progressPanel.getHeight())); } } + }); addMouseMotionListener(new MouseMotionAdapter() @@ -208,8 +232,6 @@ public class OverviewPanel extends JPanel } } }); - - updateOverviewImage(); } /* @@ -277,10 +299,11 @@ public class OverviewPanel extends JPanel if ((getWidth() > 0) && (getHeight() > 0)) { od.setWidth(getWidth()); - od.setHeight(getHeight()); + od.setHeight(getHeight() - progressPanel.getHeight()); } - - setPreferredSize(new Dimension(od.getWidth(), od.getHeight())); + + setPreferredSize(new Dimension(od.getWidth(), + od.getHeight() + progressPanel.getHeight())); if (oviewCanvas.restartDraw()) { @@ -290,16 +313,21 @@ public class OverviewPanel extends JPanel Thread thread = new Thread(this); thread.start(); repaint(); + + } @Override public void run() { - oviewCanvas.draw(av.isShowSequenceFeatures(), - (av.isShowAnnotation() - && av.getAlignmentConservationAnnotation() != null), - ap.getSeqPanel().seqCanvas.getFeatureRenderer()); - setBoxPosition(); + if (oviewCanvas != null) + { + oviewCanvas.draw(av.isShowSequenceFeatures(), + (av.isShowAnnotation() + && av.getAlignmentConservationAnnotation() != null), + ap.getSeqPanel().seqCanvas.getFeatureRenderer()); + setBoxPosition(); + } } /** @@ -309,9 +337,12 @@ public class OverviewPanel extends JPanel */ private void setBoxPosition() { - od.setBoxPosition(av.getAlignment().getHiddenSequences(), - av.getAlignment().getHiddenColumns()); - repaint(); + if (od != null) + { + od.setBoxPosition(av.getAlignment().getHiddenSequences(), + av.getAlignment().getHiddenColumns()); + repaint(); + } } @Override @@ -328,8 +359,10 @@ public class OverviewPanel extends JPanel try { av.getRanges().removePropertyChangeListener(this); + oviewCanvas.dispose(); } finally { + progressPanel = null; av = null; oviewCanvas = null; ap = null;