X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPCAPanel.java;h=f96d4643d1135a8947f7e6dff1cd5cf8cc0186d5;hb=ff8c06845590fd9fd423aa59809dcce9610ab295;hp=cff91041bab8ef15f1159c1bc58b13a8c0861609;hpb=bd318fe40b8d07db486f47d788dcdc2df8cb9e9c;p=jalview.git diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index cff9104..f96d464 100644 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -20,6 +20,20 @@ */ 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; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.SeqCigar; +import jalview.datamodel.SequenceI; +import jalview.jbgui.GPCAPanel; +import jalview.util.MessageManager; +import jalview.viewmodel.AlignmentViewport; +import jalview.viewmodel.PCAModel; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; @@ -34,19 +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 jalview.datamodel.Alignment; -import jalview.datamodel.AlignmentView; -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; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; /** * DOCUMENT ME! @@ -58,7 +62,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, IProgressIndicator { - private ProgressBar progressBar; + private IProgressIndicator progressBar; RotatableCanvas rc; @@ -80,6 +84,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, */ public PCAPanel(AlignmentPanel ap) { + super(); this.av = ap.av; this.ap = ap; @@ -113,14 +118,23 @@ public class PCAPanel extends GPCAPanel implements Runnable, if (!sameLength) { - JOptionPane - .showMessageDialog( - Desktop.desktop, - MessageManager.getString("label.pca_sequences_not_aligned"), - MessageManager.getString("label.sequences_not_aligned"), JOptionPane.WARNING_MESSAGE); + JvOptionPane.showMessageDialog(Desktop.desktop, + MessageManager.getString("label.pca_sequences_not_aligned"), + MessageManager.getString("label.sequences_not_aligned"), + 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()) + jm.setText(MessageManager.getStringOrReturn("label.score_model_", + 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(); } } @@ -168,9 +189,11 @@ public class PCAPanel extends GPCAPanel implements Runnable, } } + @Override public void bgcolour_actionPerformed(ActionEvent e) { - Color col = JColorChooser.showDialog(this, MessageManager.getString("label.select_backgroud_colour"), + Color col = JColorChooser.showDialog(this, + MessageManager.getString("label.select_background_colour"), rc.bgColour); if (col != null) @@ -183,6 +206,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, /** * DOCUMENT ME! */ + @Override public void run() { long progId = System.currentTimeMillis(); @@ -288,6 +312,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * @param e * DOCUMENT ME! */ + @Override protected void xCombobox_actionPerformed(ActionEvent e) { doDimensionChange(); @@ -299,6 +324,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * @param e * DOCUMENT ME! */ + @Override protected void yCombobox_actionPerformed(ActionEvent e) { doDimensionChange(); @@ -310,11 +336,13 @@ public class PCAPanel extends GPCAPanel implements Runnable, * @param e * DOCUMENT ME! */ + @Override protected void zCombobox_actionPerformed(ActionEvent e) { doDimensionChange(); } + @Override public void outputValues_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); @@ -330,17 +358,20 @@ public class PCAPanel extends GPCAPanel implements Runnable, } } + @Override public void showLabels_actionPerformed(ActionEvent e) { rc.showLabels(showLabels.getState()); } + @Override public void print_actionPerformed(ActionEvent e) { PCAPrinter printer = new PCAPrinter(); printer.start(); } + @Override public void originalSeqData_actionPerformed(ActionEvent e) { // this was cut'n'pasted from the equivalent TreePanel method - we should @@ -374,8 +405,8 @@ public class PCAPanel extends GPCAPanel implements Runnable, { // AlignmentOrder origorder = new AlignmentOrder(alAndColsel[0]); - Alignment al = new Alignment((SequenceI[]) alAndColsel[0]); - Alignment dataset = (av != null && av.getAlignment() != null) ? av + AlignmentI al = new Alignment((SequenceI[]) alAndColsel[0]); + AlignmentI dataset = (av != null && av.getAlignment() != null) ? av .getAlignment().getDataset() : null; if (dataset != null) { @@ -397,8 +428,8 @@ public class PCAPanel extends GPCAPanel implements Runnable, // msaorder); Desktop.addInternalFrame(af, MessageManager.formatMessage( - "label.original_data_for_params", new String[] - { this.title }), AlignFrame.DEFAULT_WIDTH, + "label.original_data_for_params", + new String[] { this.title }), AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); } } @@ -414,6 +445,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, class PCAPrinter extends Thread implements Printable { + @Override public void run() { PrinterJob printJob = PrinterJob.getPrinterJob(); @@ -433,6 +465,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, } } + @Override public int print(Graphics pg, PageFormat pf, int pi) throws PrinterException { @@ -462,6 +495,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * @param e * DOCUMENT ME! */ + @Override public void eps_actionPerformed(ActionEvent e) { makePCAImage(jalview.util.ImageMaker.TYPE.EPS); @@ -473,6 +507,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * @param e * DOCUMENT ME! */ + @Override public void png_actionPerformed(ActionEvent e) { makePCAImage(jalview.util.ImageMaker.TYPE.PNG); @@ -488,21 +523,20 @@ public class PCAPanel extends GPCAPanel implements Runnable, if (type == jalview.util.ImageMaker.TYPE.PNG) { im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.TYPE.PNG, - "Make PNG image from PCA", width, height, null, null); + jalview.util.ImageMaker.TYPE.PNG, "Make PNG image from PCA", + width, height, null, null, null, 0, false); } else if (type == jalview.util.ImageMaker.TYPE.EPS) { im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.TYPE.EPS, - "Make EPS file from PCA", width, height, null, - this.getTitle()); + jalview.util.ImageMaker.TYPE.EPS, "Make EPS file from PCA", + width, height, null, this.getTitle(), null, 0, false); } else { im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.TYPE.SVG, "Make SVG file from PCA", - width, height, null, this.getTitle()); + width, height, null, this.getTitle(), null, 0, false); } @@ -518,6 +552,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, } } + @Override public void viewMenu_menuSelected() { buildAssociatedViewMenu(); @@ -553,6 +588,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, buttonGroup.add(item); item.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { rc.applyToAllViews = false; @@ -572,6 +608,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, itemf.setSelected(rc.applyToAllViews); itemf.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { rc.applyToAllViews = itemf.isSelected(); @@ -588,6 +625,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * jalview.jbgui.GPCAPanel#outputPoints_actionPerformed(java.awt.event.ActionEvent * ) */ + @Override protected void outputPoints_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); @@ -597,8 +635,8 @@ public class PCAPanel extends GPCAPanel implements Runnable, xCombobox.getSelectedIndex(), yCombobox.getSelectedIndex(), zCombobox.getSelectedIndex())); Desktop.addInternalFrame(cap, MessageManager.formatMessage( - "label.points_for_params", new String[] - { this.getTitle() }), 500, 500); + "label.points_for_params", new String[] { this.getTitle() }), + 500, 500); } catch (OutOfMemoryError oom) { new OOMWarning("exporting PCA points", oom); @@ -613,6 +651,7 @@ public class PCAPanel extends GPCAPanel implements Runnable, * jalview.jbgui.GPCAPanel#outputProjPoints_actionPerformed(java.awt.event * .ActionEvent) */ + @Override protected void outputProjPoints_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); @@ -622,14 +661,15 @@ public class PCAPanel extends GPCAPanel implements Runnable, xCombobox.getSelectedIndex(), yCombobox.getSelectedIndex(), zCombobox.getSelectedIndex())); Desktop.addInternalFrame(cap, MessageManager.formatMessage( - "label.transformed_points_for_params", new String[] - { this.getTitle() }), 500, 500); + "label.transformed_points_for_params", + new String[] { this.getTitle() }), 500, 500); } catch (OutOfMemoryError oom) { new OOMWarning("exporting transformed PCA points", oom); cap.dispose(); } } + /* * (non-Javadoc) *