X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewerBase.java;h=cc431acf64a0f6b673e17f1678b9d351283097f7;hb=e1a435a213f105bac3ea0258c6fe26f11df2a392;hp=3e067247ddeff3edf66eea29b0f4d73b6c80727a;hpb=91d45e7c90753d8061883f351da796c50f467ef5;p=jalview.git diff --git a/src/jalview/gui/StructureViewerBase.java b/src/jalview/gui/StructureViewerBase.java index 3e06724..cc431ac 100644 --- a/src/jalview/gui/StructureViewerBase.java +++ b/src/jalview/gui/StructureViewerBase.java @@ -20,6 +20,7 @@ */ package jalview.gui; +import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; import jalview.datamodel.Alignment; @@ -90,13 +91,13 @@ public abstract class StructureViewerBase extends GStructureViewer /** * list of alignment panels to use for superposition */ - protected Vector _alignwith = new Vector<>(); + protected Vector _alignwith = new Vector<>(); /** * list of alignment panels that are used for colouring structures by aligned * sequences */ - protected Vector _colourwith = new Vector<>(); + protected Vector _colourwith = new Vector<>(); private String viewId = null; @@ -130,6 +131,26 @@ public abstract class StructureViewerBase extends GStructureViewer } /** + * @return true if added structures should be aligned to existing one(s) + */ + @Override + public boolean isAlignAddedStructures() + { + return alignAddedStructures; + } + + /** + * + * @param true + * if added structures should be aligned to existing one(s) + */ + @Override + public void setAlignAddedStructures(boolean alignAdded) + { + alignAddedStructures = alignAdded; + } + + /** * * @param ap2 * @return true if this Jmol instance is linked with the given alignPanel @@ -145,9 +166,10 @@ public abstract class StructureViewerBase extends GStructureViewer return (_alignwith != null) && _alignwith.contains(ap2); } - public boolean isUsedforcolourby(AlignmentPanel ap2) + @Override + public boolean isUsedforcolourby(AlignmentViewPanel avp) { - return (_colourwith != null) && _colourwith.contains(ap2); + return (_colourwith != null) && _colourwith.contains(avp); } /** @@ -335,7 +357,7 @@ public abstract class StructureViewerBase extends GStructureViewer */ protected void addStructure(final PDBEntry pdbentry, final SequenceI[] seqs, final String[] chains, - final boolean align, final IProgressIndicator alignFrame) + final IProgressIndicator alignFrame) { if (pdbentry.getFile() == null) { @@ -359,7 +381,7 @@ public abstract class StructureViewerBase extends GStructureViewer } } // and call ourselves again. - addStructure(pdbentry, seqs, chains, align, alignFrame); + addStructure(pdbentry, seqs, chains, alignFrame); } }).start(); return; @@ -371,33 +393,11 @@ public abstract class StructureViewerBase extends GStructureViewer { seqs }, new String[][] { chains }); addingStructures = true; _started = false; - alignAddedStructures = align; worker = new Thread(this); worker.start(); return; } - /** - * Presents a dialog with the option to add an align a structure to an - * existing structure view - * - * @param pdbId - * @param view - * @return YES, NO or CANCEL JvOptionPane code - */ - protected int chooseAlignStructureToViewer(String pdbId, - StructureViewerBase view) - { - int option = JvOptionPane.showInternalConfirmDialog(Desktop.desktop, - MessageManager.formatMessage("label.add_pdbentry_to_view", - new Object[] - { pdbId, view.getTitle() }), - MessageManager - .getString("label.align_to_existing_structure_view"), - JvOptionPane.YES_NO_CANCEL_OPTION); - return option; - } - protected boolean hasPdbId(String pdbId) { return getBinding().hasPdbId(pdbId); @@ -412,35 +412,23 @@ public abstract class StructureViewerBase extends GStructureViewer return Desktop.instance.getStructureViewers(alp, this.getClass()); } - - /** - * Check for any existing views involving this alignment and give user the - * option to add and align this molecule to one of them - * - * @param pdbentry - * @param seq - * @param chains - * @param apanel - * @param pdbId - * @return true if user adds to a view, or cancels entirely, else false - */ @Override - public boolean addToExistingViewer(PDBEntry pdbentry, SequenceI[] seq, + public void addToExistingViewer(PDBEntry pdbentry, SequenceI[] seq, String[] chains, final AlignmentViewPanel apanel, String pdbId) { /* * JAL-1742 exclude view with this structure already mapped (don't offer - * to align chain B to chain A of the same structure) + * to align chain B to chain A of the same structure); code may defend + * against this possibility before we reach here */ if (hasPdbId(pdbId)) { - return false; + return; } - AlignmentPanel ap = (AlignmentPanel) apanel; // Implementation error if this + AlignmentPanel alignPanel = (AlignmentPanel) apanel; // Implementation error if this // cast fails - useAlignmentPanelForSuperposition(ap); - addStructure(pdbentry, seq, chains, true, ap.alignFrame); - return true; + useAlignmentPanelForSuperposition(alignPanel); + addStructure(pdbentry, seq, chains, alignPanel.alignFrame); } /** @@ -504,33 +492,20 @@ public abstract class StructureViewerBase extends GStructureViewer } } - /** - * Check if the PDB file is already loaded, if so offer to add it to the - * existing viewer - * - * @param seq - * @param chains - * @param apanel - * @param pdbId - * @return true if the user chooses to add to a viewer, or to cancel entirely - */ @Override public boolean addAlreadyLoadedFile(SequenceI[] seq, String[] chains, final AlignmentViewPanel apanel, String pdbId) { - boolean finished = false; String alreadyMapped = apanel.getStructureSelectionManager() .alreadyMappedToFile(pdbId); - if (alreadyMapped != null) + if (alreadyMapped == null) { - /* - * the PDB file is already loaded - */ - addSequenceMappingsToStructure(seq, chains, apanel, alreadyMapped); - finished = true; + return false; } - return finished; + + addSequenceMappingsToStructure(seq, chains, apanel, alreadyMapped); + return true; } void setChainMenuItems(List chainNames) @@ -591,7 +566,8 @@ public abstract class StructureViewerBase extends GStructureViewer { AlignmentI al = getAlignmentPanel().av.getAlignment(); ColourSchemeI cs = ColourSchemes.getInstance() - .getColourScheme(colourSchemeName, al, null); + .getColourScheme(colourSchemeName, getAlignmentPanel().av, al, + null); getBinding().setJalviewColourScheme(cs); } @@ -735,6 +711,19 @@ public abstract class StructureViewerBase extends GStructureViewer }); viewMenu.add(seqColourBy); + showAlignmentOnly = new JCheckBoxMenuItem("Visible alignment only"); + showAlignmentOnly.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + getBinding().setShowAlignmentOnly(showAlignmentOnly.isSelected()); + getBinding().showStructures(getAlignmentPanel().getAlignViewport(), + true); + } + }); + viewMenu.add(showAlignmentOnly); + final ItemListener handler = new ItemListener() { @Override @@ -810,11 +799,12 @@ public abstract class StructureViewerBase extends GStructureViewer int[] alm = new int[_alignwith.size()]; int a = 0; - for (AlignmentPanel ap : _alignwith) + for (AlignmentViewPanel alignPanel : _alignwith) { - als[a] = ap.av.getAlignment(); + AlignViewportI av = alignPanel.getAlignViewport(); + als[a] = av.getAlignment(); alm[a] = -1; - alc[a++] = ap.av.getAlignment().getHiddenColumns(); + alc[a++] = av.getAlignment().getHiddenColumns(); } reply = getBinding().superposeStructures(als, alm, alc); if (reply != null) @@ -826,9 +816,10 @@ public abstract class StructureViewerBase extends GStructureViewer } catch (Exception e) { StringBuffer sp = new StringBuffer(); - for (AlignmentPanel ap : _alignwith) + for (AlignmentViewPanel avp : _alignwith) { - sp.append("'" + ap.alignFrame.getTitle() + "' "); + sp.append( + "'" + ((AlignmentPanel) avp).alignFrame.getTitle() + "' "); } Cache.log.info("Couldn't align structures with the " + sp.toString() + "associated alignment panels.", e); @@ -892,9 +883,9 @@ public abstract class StructureViewerBase extends GStructureViewer } } // Set the colour using the current view for the associated alignframe - for (AlignmentPanel ap : _colourwith) + for (AlignmentViewPanel avp : _colourwith) { - binding.colourBySequence(ap); + binding.colourBySequence(avp); } seqColoursApplied = true; } @@ -1019,6 +1010,12 @@ public abstract class StructureViewerBase extends GStructureViewer } @Override + public String toString() + { + return getTitle(); + } + + @Override public boolean hasMapping() { if (worker != null && (addingStructures || _started)) @@ -1055,4 +1052,10 @@ public abstract class StructureViewerBase extends GStructureViewer return seqColoursApplied; } + @Override + public void raiseViewer() + { + toFront(); + } + }