X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPCAPanel.java;h=f96d4643d1135a8947f7e6dff1cd5cf8cc0186d5;hb=ff8c06845590fd9fd423aa59809dcce9610ab295;hp=51d247d4ce659230218ca4280504b9e5f6db05f2;hpb=37de9310bec3501cbc6381e0c3dcb282fcaad812;p=jalview.git diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index 51d247d..f96d464 100644 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -20,6 +20,9 @@ */ package jalview.gui; +import jalview.analysis.scoremodels.ScoreMatrix; +import jalview.analysis.scoremodels.ScoreModels; +import jalview.api.analysis.ScoreModelI; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; @@ -27,7 +30,6 @@ import jalview.datamodel.ColumnSelection; import jalview.datamodel.SeqCigar; import jalview.datamodel.SequenceI; import jalview.jbgui.GPCAPanel; -import jalview.schemes.ResidueProperties; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; import jalview.viewmodel.PCAModel; @@ -46,8 +48,9 @@ import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JColorChooser; import javax.swing.JMenuItem; -import javax.swing.JOptionPane; import javax.swing.JRadioButtonMenuItem; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; /** * DOCUMENT ME! @@ -81,6 +84,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, */ public PCAPanel(AlignmentPanel ap) { + super(); this.av = ap.av; this.ap = ap; @@ -114,13 +118,23 @@ public class PCAPanel extends GPCAPanel implements Runnable, if (!sameLength) { - JOptionPane.showMessageDialog(Desktop.desktop, + JvOptionPane.showMessageDialog(Desktop.desktop, MessageManager.getString("label.pca_sequences_not_aligned"), MessageManager.getString("label.sequences_not_aligned"), - JOptionPane.WARNING_MESSAGE); + JvOptionPane.WARNING_MESSAGE); return; } + + addInternalFrameListener(new InternalFrameAdapter() + { + @Override + public void internalFrameClosed(InternalFrameEvent e) + { + close_actionPerformed(); + } + }); + pcaModel = new PCAModel(seqstrings, seqs, nucleotide); PaintRefresher.Register(this, av.getSequenceSetId()); @@ -130,34 +144,41 @@ public class PCAPanel extends GPCAPanel implements Runnable, worker.start(); } + /** + * Ensure references to potentially very large objects (the PCA matrices) are + * nulled when the frame is closed + */ + protected void close_actionPerformed() + { + pcaModel = null; + } + @Override protected void scoreMatrix_menuSelected() { scoreMatrixMenu.removeAll(); - for (final String sm : ResidueProperties.scoreMatrices.keySet()) + for (ScoreModelI sm : ScoreModels.getInstance().getModels()) { - if (ResidueProperties.getScoreMatrix(sm) != null) + if (sm instanceof ScoreMatrix) { + final String name = sm.getName(); // create an entry for this score matrix for use in PCA JCheckBoxMenuItem jm = new JCheckBoxMenuItem(); jm.setText(MessageManager.getStringOrReturn("label.score_model_", - sm)); - jm.setSelected(pcaModel.getScore_matrix().equals(sm)); - if ((ResidueProperties.scoreMatrices.get(sm).isDNA() && ResidueProperties.scoreMatrices - .get(sm).isProtein()) - || pcaModel.isNucleotide() == ResidueProperties.scoreMatrices - .get(sm).isDNA()) + name)); + jm.setSelected(pcaModel.getScore_matrix().equals(name)); + if ((!pcaModel.isNucleotide() && !sm.isDNA()) + || (pcaModel.isNucleotide() && sm.isDNA())) { - final PCAPanel us = this; jm.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (!pcaModel.getScore_matrix().equals(sm)) + if (!pcaModel.getScore_matrix().equals(name)) { - pcaModel.setScore_matrix(sm); - Thread worker = new Thread(us); + pcaModel.setScore_matrix(name); + Thread worker = new Thread(PCAPanel.this); worker.start(); } } @@ -172,7 +193,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, public void bgcolour_actionPerformed(ActionEvent e) { Color col = JColorChooser.showDialog(this, - MessageManager.getString("label.select_backgroud_colour"), + MessageManager.getString("label.select_background_colour"), rc.bgColour); if (col != null)