X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FAlignViewport.java;h=1ebf58456e8af16b30b4ea971e7e4e4e2590596f;hb=ad16d6cce49a40ea1943431b980b85a6212bb9bf;hp=288f261eb3f13f161cf7b1f152b7c4d1294faec4;hpb=2d3be0b3f26fa3e35480976cd5a90a5562d43dcf;p=jalview.git diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index 288f261..1ebf584 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -22,7 +22,6 @@ package jalview.gui; import jalview.analysis.AlignmentUtils; import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder; -import jalview.analysis.TreeModel; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.api.FeatureColourI; @@ -34,13 +33,10 @@ import jalview.commands.CommandI; import jalview.datamodel.AlignedCodonFrame; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; -import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; -import jalview.datamodel.PDBEntry; import jalview.datamodel.SearchResults; import jalview.datamodel.SearchResultsI; -import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.renderer.ResidueShader; @@ -60,10 +56,9 @@ import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Rectangle; -import java.util.ArrayList; import java.util.Hashtable; +import java.util.Iterator; import java.util.List; -import java.util.Vector; import javax.swing.JInternalFrame; @@ -73,20 +68,18 @@ import javax.swing.JInternalFrame; * @author $author$ * @version $Revision: 1.141 $ */ -public class AlignViewport extends AlignmentViewport implements - SelectionSource +public class AlignViewport extends AlignmentViewport + implements SelectionSource { Font font; - TreeModel currentTree = null; - boolean cursorMode = false; boolean antiAlias = false; private Rectangle explodedGeometry; - String viewName; + private String viewName; /* * Flag set true on the view that should 'gather' multiple views of the same @@ -131,8 +124,8 @@ public class AlignViewport extends AlignmentViewport implements // TODO remove these once 2.4.VAMSAS release finished if (Cache.log != null && Cache.log.isDebugEnabled() && seqsetid != null) { - Cache.log.debug("Setting viewport's sequence set id : " - + sequenceSetID); + Cache.log.debug( + "Setting viewport's sequence set id : " + sequenceSetID); } if (Cache.log != null && Cache.log.isDebugEnabled() && viewId != null) { @@ -193,8 +186,8 @@ public class AlignViewport extends AlignmentViewport implements // TODO remove these once 2.4.VAMSAS release finished if (Cache.log != null && Cache.log.isDebugEnabled() && seqsetid != null) { - Cache.log.debug("Setting viewport's sequence set id : " - + sequenceSetID); + Cache.log.debug( + "Setting viewport's sequence set id : " + sequenceSetID); } if (Cache.log != null && Cache.log.isDebugEnabled() && viewId != null) { @@ -227,17 +220,17 @@ public class AlignViewport extends AlignmentViewport implements setShowDBRefs(Cache.getDefault("SHOW_DBREFS_TOOLTIP", true)); viewStyle.setSeqNameItalics(Cache.getDefault("ID_ITALICS", true)); viewStyle.setWrapAlignment(Cache.getDefault("WRAP_ALIGNMENT", false)); - viewStyle.setShowUnconserved(Cache - .getDefault("SHOW_UNCONSERVED", false)); + viewStyle.setShowUnconserved( + Cache.getDefault("SHOW_UNCONSERVED", false)); sortByTree = Cache.getDefault("SORT_BY_TREE", false); followSelection = Cache.getDefault("FOLLOW_SELECTIONS", true); - sortAnnotationsBy = SequenceAnnotationOrder.valueOf(Cache.getDefault( - Preferences.SORT_ANNOTATIONS, - SequenceAnnotationOrder.NONE.name())); - showAutocalculatedAbove = Cache.getDefault( - Preferences.SHOW_AUTOCALC_ABOVE, false); - viewStyle.setScaleProteinAsCdna(Cache.getDefault( - Preferences.SCALE_PROTEIN_TO_CDNA, true)); + sortAnnotationsBy = SequenceAnnotationOrder + .valueOf(Cache.getDefault(Preferences.SORT_ANNOTATIONS, + SequenceAnnotationOrder.NONE.name())); + showAutocalculatedAbove = Cache + .getDefault(Preferences.SHOW_AUTOCALC_ABOVE, false); + viewStyle.setScaleProteinAsCdna( + Cache.getDefault(Preferences.SCALE_PROTEIN_TO_CDNA, true)); } void init() @@ -286,7 +279,8 @@ public class AlignViewport extends AlignmentViewport implements showOccupancy = Cache.getDefault(Preferences.SHOW_OCCUPANCY, true); } initAutoAnnotation(); - String colourProperty = alignment.isNucleotide() ? Preferences.DEFAULT_COLOUR_NUC + String colourProperty = alignment.isNucleotide() + ? Preferences.DEFAULT_COLOUR_NUC : Preferences.DEFAULT_COLOUR_PROT; String schemeName = Cache.getProperty(colourProperty); if (schemeName == null) @@ -295,8 +289,8 @@ public class AlignViewport extends AlignmentViewport implements schemeName = Cache.getDefault(Preferences.DEFAULT_COLOUR, ResidueColourScheme.NONE); } - ColourSchemeI colourScheme = ColourSchemeProperty.getColourScheme( - alignment, schemeName); + ColourSchemeI colourScheme = ColourSchemeProperty + .getColourScheme(this, alignment, schemeName); residueShading = new ResidueShader(colourScheme); if (colourScheme instanceof UserColourScheme) @@ -310,47 +304,7 @@ public class AlignViewport extends AlignmentViewport implements { residueShading.setConsensus(hconsensus); } - } - - /** - * get the consensus sequence as displayed under the PID consensus annotation - * row. - * - * @return consensus sequence as a new sequence object - */ - public SequenceI getConsensusSeq() - { - if (consensus == null) - { - updateConsensus(null); - } - if (consensus == null) - { - return null; - } - StringBuffer seqs = new StringBuffer(); - for (int i = 0; i < consensus.annotations.length; i++) - { - Annotation annotation = consensus.annotations[i]; - if (annotation != null) - { - String description = annotation.description; - if (description != null && description.startsWith("[")) - { - // consensus is a tie - just pick the first one - seqs.append(description.charAt(1)); - } - else - { - seqs.append(annotation.displayCharacter); - } - } - } - - SequenceI sq = new Sequence("Consensus", seqs.toString()); - sq.setDescription("Percentage Identity Consensus " - + ((ignoreGapsInConsensusCalculation) ? " without gaps" : "")); - return sq; + setColourAppliesToAllGroups(true); } boolean validCharWidth; @@ -429,9 +383,8 @@ public class AlignViewport extends AlignmentViewport implements */ if (align != null) { - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - ssm.registerMappings(align.getCodonFrames()); + Desktop.getInstance().getStructureSelectionManager() + .registerMappings(align.getCodonFrames()); } /* @@ -451,8 +404,8 @@ public class AlignViewport extends AlignmentViewport implements List mappings = al.getCodonFrames(); if (mappings != null) { - StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); + StructureSelectionManager ssm = Desktop.getInstance() + .getStructureSelectionManager(); for (AlignedCodonFrame acf : mappings) { if (noReferencesTo(acf)) @@ -490,27 +443,6 @@ public class AlignViewport extends AlignmentViewport implements } /** - * DOCUMENT ME! - * - * @param tree - * DOCUMENT ME! - */ - public void setCurrentTree(TreeModel tree) - { - currentTree = tree; - } - - /** - * DOCUMENT ME! - * - * @return DOCUMENT ME! - */ - public TreeModel getCurrentTree() - { - return currentTree; - } - - /** * returns the visible column regions of the alignment * * @param selectedRegionOnly @@ -518,10 +450,10 @@ public class AlignViewport extends AlignmentViewport implements * area * @return */ - public int[] getViewAsVisibleContigs(boolean selectedRegionOnly) + public Iterator getViewAsVisibleContigs(boolean selectedRegionOnly) { - int[] viscontigs = null; - int start = 0, end = 0; + int start = 0; + int end = 0; if (selectedRegionOnly && selectionGroup != null) { start = selectionGroup.getStartRes(); @@ -531,8 +463,8 @@ public class AlignViewport extends AlignmentViewport implements { end = alignment.getWidth(); } - viscontigs = alignment.getHiddenColumns().getVisibleContigs(start, end); - return viscontigs; + return (alignment.getHiddenColumns().getVisContigsIterator(start, end, + false)); } /** @@ -598,12 +530,10 @@ public class AlignViewport extends AlignmentViewport implements @Override public void sendSelection() { - jalview.structure.StructureSelectionManager - .getStructureSelectionManager(Desktop.instance).sendSelection( - new SequenceGroup(getSelectionGroup()), - new ColumnSelection(getColumnSelection()), - new HiddenColumns(getAlignment().getHiddenColumns()), - this); + Desktop.getInstance().getStructureSelectionManager().sendSelection( + new SequenceGroup(getSelectionGroup()), + new ColumnSelection(getColumnSelection()), + new HiddenColumns(getAlignment().getHiddenColumns()), this); } /** @@ -616,8 +546,8 @@ public class AlignViewport extends AlignmentViewport implements */ public AlignmentPanel getAlignPanel() { - AlignmentPanel[] aps = PaintRefresher.getAssociatedPanels(this - .getSequenceSetId()); + AlignmentPanel[] aps = PaintRefresher + .getAssociatedPanels(this.getSequenceSetId()); for (int p = 0; aps != null && p < aps.length; p++) { if (aps[p].av == this) @@ -644,61 +574,7 @@ public class AlignViewport extends AlignmentViewport implements @Override public StructureSelectionManager getStructureSelectionManager() { - return StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); - } - - /** - * - * @param pdbEntries - * @return an array of SequenceI arrays, one for each PDBEntry, listing which - * sequences in the alignment hold a reference to it - */ - public SequenceI[][] collateForPDB(PDBEntry[] pdbEntries) - { - List seqvectors = new ArrayList(); - for (PDBEntry pdb : pdbEntries) - { - List choosenSeqs = new ArrayList(); - for (SequenceI sq : alignment.getSequences()) - { - Vector pdbRefEntries = sq.getDatasetSequence() - .getAllPDBEntries(); - if (pdbRefEntries == null) - { - continue; - } - for (PDBEntry pdbRefEntry : pdbRefEntries) - { - if (pdbRefEntry.getId().equals(pdb.getId())) - { - if (pdbRefEntry.getChainCode() != null - && pdb.getChainCode() != null) - { - if (pdbRefEntry.getChainCode().equalsIgnoreCase( - pdb.getChainCode()) - && !choosenSeqs.contains(sq)) - { - choosenSeqs.add(sq); - continue; - } - } - else - { - if (!choosenSeqs.contains(sq)) - { - choosenSeqs.add(sq); - continue; - } - } - - } - } - } - seqvectors - .add(choosenSeqs.toArray(new SequenceI[choosenSeqs.size()])); - } - return seqvectors.toArray(new SequenceI[seqvectors.size()][]); + return Desktop.getInstance().getStructureSelectionManager(); } @Override @@ -722,7 +598,7 @@ public class AlignViewport extends AlignmentViewport implements return validCharWidth; } - private Hashtable calcIdParams = new Hashtable(); + private Hashtable calcIdParams = new Hashtable<>(); public AutoCalcSetting getCalcIdSettingsFor(String calcId) { @@ -752,7 +628,8 @@ public class AlignViewport extends AlignmentViewport implements *
    *
  • compute the equivalent edit on the mapped sequences
  • *
  • apply the mapped edit
  • - *
  • 'apply' the source edit to the working copy of the source sequences
  • + *
  • 'apply' the source edit to the working copy of the source + * sequences
  • *
* * @param command @@ -827,16 +704,20 @@ public class AlignViewport extends AlignmentViewport implements { if (AlignmentUtils.isMappable(toAdd, getAlignment())) { - if (openLinkedAlignment(toAdd, title)) - { - return; - } + openLinkedAlignment(toAdd, title); + return; } } + addDataToAlignment(toAdd); + } - /* - * No mappings, or offer declined - add sequences to this alignment - */ + /** + * adds sequences to this alignment + * + * @param toAdd + */ + void addDataToAlignment(AlignmentI toAdd) + { // TODO: JAL-407 regardless of above - identical sequences (based on ID and // provenance) should share the same dataset sequence @@ -858,7 +739,7 @@ public class AlignViewport extends AlignmentViewport implements } } - ranges.setEndSeq(getAlignment().getHeight()); + ranges.setEndSeq(getAlignment().getHeight() - 1); // BH 2019.04.18 firePropertyChange("alignment", null, getAlignment().getSequences()); } @@ -871,31 +752,58 @@ public class AlignViewport extends AlignmentViewport implements * @param al * @param title */ - protected boolean openLinkedAlignment(AlignmentI al, String title) + protected void openLinkedAlignment(AlignmentI al, String title) { - String[] options = new String[] { - MessageManager.getString("action.no"), + String[] options = new String[] { MessageManager.getString("action.no"), MessageManager.getString("label.split_window"), MessageManager.getString("label.new_window"), }; final String question = JvSwingUtils.wrapTooltip(true, MessageManager.getString("label.open_split_window?")); - int response = JvOptionPane.showOptionDialog(Desktop.desktop, question, + final AlignViewport us = this; + + /* + * options No, Split Window, New Window correspond to + * dialog responses 0, 1, 2 (even though JOptionPane shows them + * in reverse order) + */ + JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.getDesktopPane()) + .setResponseHandler(0, new Runnable() + { + @Override + public void run() + { + addDataToAlignment(al); + } + }).setResponseHandler(1, new Runnable() + { + @Override + public void run() + { + us.openLinkedAlignmentAs(al, title, true); + } + }).setResponseHandler(2, new Runnable() + { + @Override + public void run() + { + us.openLinkedAlignmentAs(al, title, false); + } + }); + dialog.showDialog(question, MessageManager.getString("label.open_split_window"), JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null, options, options[0]); + } - if (response != 1 && response != 2) + protected void openLinkedAlignmentAs(AlignmentI al, String title, + boolean newWindowOrSplitPane) { - return false; - } - final boolean openSplitPane = (response == 1); - final boolean openInNewWindow = (response == 2); - /* * Identify protein and dna alignments. Make a copy of this one if opening * in a new split pane. */ - AlignmentI thisAlignment = openSplitPane ? new Alignment(getAlignment()) + AlignmentI thisAlignment = newWindowOrSplitPane + ? new Alignment(getAlignment()) : getAlignment(); AlignmentI protein = al.isNucleotide() ? thisAlignment : al; final AlignmentI cdna = al.isNucleotide() ? al : thisAlignment; @@ -916,8 +824,9 @@ public class AlignViewport extends AlignmentViewport implements AlignFrame newAlignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); newAlignFrame.setTitle(title); - newAlignFrame.statusBar.setText(MessageManager.formatMessage( - "label.successfully_loaded_file", new Object[] { title })); + newAlignFrame.setStatus(MessageManager + .formatMessage("label.successfully_loaded_file", new Object[] + { title })); // TODO if we want this (e.g. to enable reload of the alignment from file), // we will need to add parameters to the stack. @@ -926,7 +835,7 @@ public class AlignViewport extends AlignmentViewport implements // alignFrame.setFileName(file, format); // } - if (openInNewWindow) + if (!newWindowOrSplitPane) { Desktop.addInternalFrame(newAlignFrame, title, AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); @@ -934,19 +843,17 @@ public class AlignViewport extends AlignmentViewport implements try { - newAlignFrame.setMaximum(jalview.bin.Cache.getDefault( - "SHOW_FULLSCREEN", false)); + newAlignFrame.setMaximum( + jalview.bin.Cache.getDefault("SHOW_FULLSCREEN", false)); } catch (java.beans.PropertyVetoException ex) { } - if (openSplitPane) + if (newWindowOrSplitPane) { al.alignAs(thisAlignment); protein = openSplitFrame(newAlignFrame, thisAlignment); } - - return true; } /** @@ -967,8 +874,8 @@ public class AlignViewport extends AlignmentViewport implements * is protein, the mappings to cDNA will be registered with * StructureSelectionManager as a side-effect. */ - AlignFrame copyMe = new AlignFrame(complement, - AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + AlignFrame copyMe = new AlignFrame(complement, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); copyMe.setTitle(getAlignPanel().alignFrame.getTitle()); AlignmentI al = newAlignFrame.viewport.getAlignment(); @@ -1153,4 +1060,13 @@ public class AlignViewport extends AlignmentViewport implements fr.setTransparency(featureSettings.getTransparency()); } + public String getViewName() + { + return viewName; + } + + public void setViewName(String viewName) + { + this.viewName = viewName; + } }