X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FTreePanel.java;h=2727db14171e6e947b19801acb9db2e2061e7aa6;hb=8f750561f9693fbe9bbc7deb48b3d94815d49073;hp=32c5702fe47ca14cbaa04877afee31f76791a318;hpb=136c0793b90b72b928c4d77dc109dd5c644e00d3;p=jalview.git diff --git a/src/jalview/gui/TreePanel.java b/src/jalview/gui/TreePanel.java index 32c5702..2727db1 100755 --- a/src/jalview/gui/TreePanel.java +++ b/src/jalview/gui/TreePanel.java @@ -55,6 +55,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; @@ -63,6 +64,8 @@ import javax.imageio.ImageIO; import javax.swing.ButtonGroup; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; +import javax.swing.event.InternalFrameAdapter; +import javax.swing.event.InternalFrameEvent; import org.jibble.epsgraphics.EpsGraphics2D; @@ -141,7 +144,35 @@ public class TreePanel extends GTreePanel buildAssociatedViewMenu(); - av.addPropertyChangeListener(new java.beans.PropertyChangeListener() + final PropertyChangeListener listener = addAlignmentListener(); + + /* + * remove listener when window is closed, so that this + * panel can be garbage collected + */ + addInternalFrameListener(new InternalFrameAdapter() + { + @Override + public void internalFrameClosed(InternalFrameEvent evt) + { + if (av != null) + { + av.removePropertyChangeListener(listener); + } + } + }); + + TreeLoader tl = new TreeLoader(newTree, inputData); + tl.start(); + + } + + /** + * @return + */ + protected PropertyChangeListener addAlignmentListener() + { + final PropertyChangeListener listener = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) @@ -158,8 +189,8 @@ public class TreePanel extends GTreePanel } if (evt.getNewValue() == null) { - System.out - .println("new alignment sequences vector value is null"); + System.out.println( + "new alignment sequences vector value is null"); } tree.updatePlaceHolders((List) evt.getNewValue()); @@ -168,11 +199,9 @@ public class TreePanel extends GTreePanel repaint(); } } - }); - - TreeLoader tl = new TreeLoader(newTree, inputData); - tl.start(); - + }; + av.addPropertyChangeListener(listener); + return listener; } @Override @@ -183,8 +212,8 @@ public class TreePanel extends GTreePanel void buildAssociatedViewMenu() { - AlignmentPanel[] aps = PaintRefresher.getAssociatedPanels(av - .getSequenceSetId()); + AlignmentPanel[] aps = PaintRefresher + .getAssociatedPanels(av.getSequenceSetId()); if (aps.length == 1 && treeCanvas.ap == aps[0]) { associateLeavesMenu.setVisible(false); @@ -193,7 +222,8 @@ public class TreePanel extends GTreePanel associateLeavesMenu.setVisible(true); - if ((viewMenu.getItem(viewMenu.getItemCount() - 2) instanceof JMenuItem)) + if ((viewMenu + .getItem(viewMenu.getItemCount() - 2) instanceof JMenuItem)) { viewMenu.insertSeparator(viewMenu.getItemCount() - 1); } @@ -275,11 +305,11 @@ public class TreePanel extends GTreePanel } else { - ScoreModelI sm = ScoreModels.getInstance().getScoreModel( - scoreModelName, treeCanvas.ap); - TreeBuilder njtree = treeType.equals(TreeBuilder.NEIGHBOUR_JOINING) ? new NJTree( - av, sm, similarityParams) : new AverageDistanceTree(av, sm, - similarityParams); + ScoreModelI sm = ScoreModels.getInstance() + .getScoreModel(scoreModelName, treeCanvas.ap); + TreeBuilder njtree = treeType.equals(TreeBuilder.NEIGHBOUR_JOINING) + ? new NJTree(av, sm, similarityParams) + : new AverageDistanceTree(av, sm, similarityParams); tree = new TreeModel(njtree); showDistances(true); } @@ -363,8 +393,8 @@ public class TreePanel extends GTreePanel JalviewFileChooser chooser = new JalviewFileChooser( jalview.bin.Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.save_tree_as_newick")); + chooser.setDialogTitle( + MessageManager.getString("label.save_tree_as_newick")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(null); @@ -372,15 +402,15 @@ public class TreePanel extends GTreePanel if (value == JalviewFileChooser.APPROVE_OPTION) { String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); try { jalview.io.NewickFile fout = new jalview.io.NewickFile( tree.getTopNode()); - String output = fout.print(tree.hasBootstrap(), - tree.hasDistances(), tree.hasRootDistance()); + String output = fout.print(tree.hasBootstrap(), tree.hasDistances(), + tree.hasRootDistance()); java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileWriter(choice)); out.println(output); @@ -411,8 +441,8 @@ public class TreePanel extends GTreePanel AlignmentView originalData = tree.getOriginalData(); if (originalData == null) { - jalview.bin.Cache.log - .info("Unexpected call to originalSeqData_actionPerformed - should have hidden this menu action."); + jalview.bin.Cache.log.info( + "Unexpected call to originalSeqData_actionPerformed - should have hidden this menu action."); return; } // decide if av alignment is sufficiently different to original data to @@ -439,8 +469,9 @@ public class TreePanel extends GTreePanel // AlignmentOrder origorder = new AlignmentOrder(alAndColsel[0]); AlignmentI al = new Alignment((SequenceI[]) alAndColsel[0]); - AlignmentI dataset = (av != null && av.getAlignment() != null) ? av - .getAlignment().getDataset() : null; + AlignmentI dataset = (av != null && av.getAlignment() != null) + ? av.getAlignment().getDataset() + : null; if (dataset != null) { al.setDataset(dataset); @@ -450,8 +481,7 @@ public class TreePanel extends GTreePanel { // make a new frame! AlignFrame af = new AlignFrame(al, (HiddenColumns) alAndColsel[1], - AlignFrame.DEFAULT_WIDTH, - AlignFrame.DEFAULT_HEIGHT); + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); // >>>This is a fix for the moment, until a better solution is // found!!<<< @@ -461,8 +491,8 @@ public class TreePanel extends GTreePanel // msaorder); Desktop.addInternalFrame(af, MessageManager.formatMessage( - "label.original_data_for_params", - new Object[] { this.title }), AlignFrame.DEFAULT_WIDTH, + "label.original_data_for_params", new Object[] + { this.title }), AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); } } @@ -492,9 +522,9 @@ public class TreePanel extends GTreePanel if (treeCanvas.applyToAllViews) { - final ArrayList commands = new ArrayList(); - for (AlignmentPanel ap : PaintRefresher.getAssociatedPanels(av - .getSequenceSetId())) + final ArrayList commands = new ArrayList<>(); + for (AlignmentPanel ap : PaintRefresher + .getAssociatedPanels(av.getSequenceSetId())) { commands.add(sortAlignmentIn(ap.av.getAlignPanel())); } @@ -532,8 +562,8 @@ public class TreePanel extends GTreePanel } } }); - for (AlignmentPanel ap : PaintRefresher.getAssociatedPanels(av - .getSequenceSetId())) + for (AlignmentPanel ap : PaintRefresher + .getAssociatedPanels(av.getSequenceSetId())) { // ensure all the alignFrames refresh their GI after adding an undo item ap.alignFrame.updateEditMenuBar(); @@ -549,13 +579,14 @@ public class TreePanel extends GTreePanel public CommandI sortAlignmentIn(AlignmentPanel ap) { + // TODO: move to alignment view controller AlignmentViewport viewport = ap.av; SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByTree(viewport.getAlignment(), tree); CommandI undo; undo = new OrderCommand("Tree Sort", oldOrder, viewport.getAlignment()); - ap.paintAlignment(true); + ap.paintAlignment(true, false); return undo; } @@ -668,8 +699,8 @@ public class TreePanel extends GTreePanel JalviewFileChooser chooser = new JalviewFileChooser( ImageMaker.EPS_EXTENSION, ImageMaker.EPS_EXTENSION); chooser.setFileView(new JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.create_eps_from_tree")); + chooser.setDialogTitle( + MessageManager.getString("label.create_eps_from_tree")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -679,11 +710,13 @@ public class TreePanel extends GTreePanel return; } - Cache.setProperty("LAST_DIRECTORY", chooser.getSelectedFile() - .getParent()); + Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); - FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); - EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, height); + FileOutputStream out = new FileOutputStream( + chooser.getSelectedFile()); + EpsGraphics2D pg = new EpsGraphics2D("Tree", out, 0, 0, width, + height); pg.setAccurateTextMode(accurateText); @@ -715,8 +748,8 @@ public class TreePanel extends GTreePanel ImageMaker.PNG_EXTENSION, ImageMaker.PNG_DESCRIPTION); chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(MessageManager - .getString("label.create_png_from_tree")); + chooser.setDialogTitle( + MessageManager.getString("label.create_png_from_tree")); chooser.setToolTipText(MessageManager.getString("action.save")); int value = chooser.showSaveDialog(this); @@ -726,10 +759,11 @@ public class TreePanel extends GTreePanel return; } - jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser - .getSelectedFile().getParent()); + jalview.bin.Cache.setProperty("LAST_DIRECTORY", + chooser.getSelectedFile().getParent()); - FileOutputStream out = new FileOutputStream(chooser.getSelectedFile()); + FileOutputStream out = new FileOutputStream( + chooser.getSelectedFile()); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); @@ -770,9 +804,9 @@ public class TreePanel extends GTreePanel if (sq != null) { // search dbrefs, features and annotation - DBRefEntry[] refs = jalview.util.DBRefUtils.selectRefs( - sq.getDBRefs(), - new String[] { labelClass.toUpperCase() }); + DBRefEntry[] refs = jalview.util.DBRefUtils + .selectRefs(sq.getDBRefs(), new String[] + { labelClass.toUpperCase() }); if (refs != null) { for (int i = 0; i < refs.length; i++) @@ -821,6 +855,7 @@ public class TreePanel extends GTreePanel * Neighbour Joining Using BLOSUM62 *

* For a tree loaded from file, just uses the file name + * * @return */ public String getPanelTitle() @@ -833,8 +868,8 @@ public class TreePanel extends GTreePanel /* * i18n description of Neighbour Joining or Average Distance method */ - String treecalcnm = MessageManager.getString("label.tree_calc_" - + treeType.toLowerCase()); + String treecalcnm = MessageManager + .getString("label.tree_calc_" + treeType.toLowerCase()); /* * short score model name (long description can be too long)