From fad1d9c25b785e0d42bbe8cdcd82af1ca8c2276b Mon Sep 17 00:00:00 2001 From: gmungoc Date: Wed, 12 Apr 2017 11:30:37 +0100 Subject: [PATCH] JAL-1632 one PCA/Tree per panel, closed when panel is closed --- src/jalview/gui/AlignFrame.java | 14 ++++++++++++- src/jalview/gui/AlignmentPanel.java | 35 +++++++++++++++++++++++++++++++ src/jalview/gui/CalculationChooser.java | 23 +++++++++++++++++++- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index a69cd59..8fc106f 100644 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -372,7 +372,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, @Override public void actionPerformed(ActionEvent e) { - new CalculationChooser(AlignFrame.this); + openTreePcaDialog(); } }); buildColourMenu(); @@ -5641,6 +5641,18 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, ColourSchemeI colourScheme = viewport.getGlobalColourScheme(); ColourMenuHelper.setColourSelected(colourMenu, colourScheme); } + + /** + * Open a dialog (if not already open) that allows the user to select and + * calculate PCA or Tree analysis + */ + protected void openTreePcaDialog() + { + if (alignPanel.getCalculationDialog() == null) + { + new CalculationChooser(AlignFrame.this); + } + } } class PrintThread extends Thread diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 8ade5d6..ccb3464 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -106,6 +106,8 @@ public class AlignmentPanel extends GAlignmentPanel implements private PropertyChangeListener propertyChangeListener; + private CalculationChooser calculationDialog; + /** * Creates a new AlignmentPanel object. * @@ -1647,6 +1649,8 @@ public class AlignmentPanel extends GAlignmentPanel implements PaintRefresher.RemoveComponent(getIdPanel().getIdCanvas()); PaintRefresher.RemoveComponent(this); + closeChildFrames(); + /* * try to ensure references are nulled */ @@ -1678,6 +1682,17 @@ public class AlignmentPanel extends GAlignmentPanel implements } /** + * Close any open dialogs that would be orphaned when this one is closed + */ + protected void closeChildFrames() + { + if (calculationDialog != null) + { + calculationDialog.closeFrame(); + } + } + + /** * hides or shows dynamic annotation rows based on groups and av state flags */ public void updateAnnotation() @@ -1906,4 +1921,24 @@ public class AlignmentPanel extends GAlignmentPanel implements repaint(); } } + + /** + * Set the reference to the PCA/Tree chooser dialog for this panel. This + * reference should be nulled when the dialog is closed. + * + * @param calculationChooser + */ + public void setCalculationDialog(CalculationChooser calculationChooser) + { + calculationDialog = calculationChooser; + } + + /** + * Returns the reference to the PCA/Tree chooser dialog for this panel (null + * if none is open) + */ + public CalculationChooser getCalculationDialog() + { + return calculationDialog; + } } diff --git a/src/jalview/gui/CalculationChooser.java b/src/jalview/gui/CalculationChooser.java index d3b7cfc..7b3bf22 100644 --- a/src/jalview/gui/CalculationChooser.java +++ b/src/jalview/gui/CalculationChooser.java @@ -50,6 +50,8 @@ import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.JRadioButton; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; /** * A dialog where a user can choose and action Tree or PCA calculation options @@ -99,6 +101,7 @@ public class CalculationChooser extends JPanel { this.af = alignFrame; init(); + af.alignPanel.setCalculationDialog(this); } /** @@ -221,10 +224,28 @@ public class CalculationChooser extends JPanel int width = 350; int height = includeParams ? 400 : 220; + String title = MessageManager.getString("label.choose_calculation"); + if (af.getViewport().viewName != null) + { + title = title + " (" + af.getViewport().viewName + ")"; + } + Desktop.addInternalFrame(frame, - MessageManager.getString("label.choose_calculation"), width, + title, width, height, false); + /* + * null the AlignmentPanel's reference to the dialog when it is closed + */ + frame.addInternalFrameListener(new InternalFrameAdapter() + { + @Override + public void internalFrameClosed(InternalFrameEvent evt) + { + af.alignPanel.setCalculationDialog(null); + }; + }); + frame.setLayer(JLayeredPane.PALETTE_LAYER); } -- 1.7.10.2