X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FJalviewJmolBinding.java;h=cadb20539adf3ed8bce0262430afa010dbe64108;hb=5776f8fbf1b6c23caec6cd23d76902d228119332;hp=8dfb9fd8b5fa06547a580af43bb565851d21ee83;hpb=865a855a4ca87eadb3e5ff284ed32ed307d9c34b;p=jalview.git diff --git a/src/jalview/ext/jmol/JalviewJmolBinding.java b/src/jalview/ext/jmol/JalviewJmolBinding.java index 8dfb9fd..cadb205 100644 --- a/src/jalview/ext/jmol/JalviewJmolBinding.java +++ b/src/jalview/ext/jmol/JalviewJmolBinding.java @@ -1,19 +1,21 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) * Copyright (C) 2014 The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ext.jmol; @@ -33,6 +35,7 @@ import jalview.schemes.ResidueProperties; import jalview.structure.StructureListener; import jalview.structure.StructureMapping; import jalview.structure.StructureSelectionManager; +import jalview.structures.models.SequenceStructureBindingModel; import java.awt.Color; import java.awt.Container; @@ -54,26 +57,13 @@ import org.jmol.api.JmolViewer; import org.jmol.constant.EnumCallback; import org.jmol.popup.JmolPopup; -public abstract class JalviewJmolBinding implements StructureListener, +public abstract class JalviewJmolBinding extends SequenceStructureBindingModel implements StructureListener, JmolStatusListener, SequenceStructureBinding, JmolSelectionListener, ComponentListener, StructureSelectionManagerProvider { /** - * set if Jmol state is being restored from some source - instructs binding - * not to apply default display style when structure set is updated for first - * time. - */ - private boolean loadingFromArchive = false; - - /** - * second flag to indicate if the jmol viewer should ignore sequence colouring - * events from the structure manager because the GUI is still setting up - */ - private boolean loadingFinished = true; - - /** * state flag used to check if the Jmol viewer's paint method can be called */ private boolean finishedInit = false; @@ -328,13 +318,15 @@ public abstract class JalviewJmolBinding implements StructureListener, String[] files = getPdbFile(); // check to see if we are still waiting for Jmol files - long starttime=System.currentTimeMillis(); - boolean waiting=true; - do { - waiting=false; - for (String file:files) + long starttime = System.currentTimeMillis(); + boolean waiting = true; + do + { + waiting = false; + for (String file : files) { - try { + try + { // HACK - in Jalview 2.8 this call may not be threadsafe so we catch // every possible exception StructureMapping[] sm = ssm.getMapping(file); @@ -351,10 +343,12 @@ public abstract class JalviewJmolBinding implements StructureListener, } } // we wait around for a reasonable time before we give up - } while (waiting && System.currentTimeMillis()<(10000+1000*files.length+starttime)); + } while (waiting + && System.currentTimeMillis() < (10000 + 1000 * files.length + starttime)); if (waiting) { - System.err.println("RUNTIME PROBLEM: Jmol seems to be taking a long time to process all the structures."); + System.err + .println("RUNTIME PROBLEM: Jmol seems to be taking a long time to process all the structures."); return; } StringBuffer selectioncom = new StringBuffer(); @@ -418,7 +412,8 @@ public abstract class JalviewJmolBinding implements StructureListener, // Jmol callback has completed. if (mapping == null || mapping.length < 1) { - throw new Error("Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016"); + throw new Error( + "Implementation error - Jmol seems to be still working on getting its data - report at http://issues.jalview.org/browse/JAL-1016"); } int lastPos = -1; for (int s = 0; s < sequence[pdbfnum].length; s++) @@ -484,7 +479,7 @@ public abstract class JalviewJmolBinding implements StructureListener, } } } - + // TODO: consider bailing if nmatched less than 4 because superposition // not // well defined. @@ -543,22 +538,30 @@ public abstract class JalviewJmolBinding implements StructureListener, molsel.append(chainCd); molsel.append("}"); } - selcom[pdbfnum] = molsel.toString(); - selectioncom.append("(("); - selectioncom.append(selcom[pdbfnum].substring(1, - selcom[pdbfnum].length() - 1)); - selectioncom.append(" )& "); - selectioncom.append(pdbfnum + 1); - selectioncom.append(".1)"); - if (pdbfnum < files.length - 1) + if (molsel.length() > 1) { - selectioncom.append("|"); + selcom[pdbfnum] = molsel.toString(); + selectioncom.append("(("); + selectioncom.append(selcom[pdbfnum].substring(1, + selcom[pdbfnum].length() - 1)); + selectioncom.append(" )& "); + selectioncom.append(pdbfnum + 1); + selectioncom.append(".1)"); + if (pdbfnum < files.length - 1) + { + selectioncom.append("|"); + } + } + else + { + selcom[pdbfnum] = null; } } } for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++) { - if (pdbfnum == refStructure) + if (pdbfnum == refStructure || selcom[pdbfnum] == null + || selcom[refStructure] == null) { continue; } @@ -567,7 +570,7 @@ public abstract class JalviewJmolBinding implements StructureListener, command.append(chainNames[pdbfnum]); command.append(") against reference ("); command.append(chainNames[refStructure]); - command.append(")\";\ncompare "+nSeconds); + command.append(")\";\ncompare " + nSeconds); command.append("{"); command.append(1 + pdbfnum); command.append(".1} {"); @@ -582,13 +585,17 @@ public abstract class JalviewJmolBinding implements StructureListener, } command.append(" ROTATE TRANSLATE;\n"); } - System.out.println("Select regions:\n" + selectioncom.toString()); - evalStateCommand("select *; cartoons off; backbone; select (" - + selectioncom.toString() + "); cartoons; "); - // selcom.append("; ribbons; "); - System.out.println("Superimpose command(s):\n" + command.toString()); - - evalStateCommand(command.toString()); + if (selectioncom.length() > 0) + { + System.out.println("Select regions:\n" + selectioncom.toString()); + evalStateCommand("select *; cartoons off; backbone; select (" + + selectioncom.toString() + "); cartoons; "); + // selcom.append("; ribbons; "); + System.out + .println("Superimpose command(s):\n" + command.toString()); + + evalStateCommand(command.toString()); + } } if (selectioncom.length() > 0) {// finally, mark all regions that were superposed. @@ -622,7 +629,7 @@ public abstract class JalviewJmolBinding implements StructureListener, public void colourBySequence(boolean showFeatures, jalview.api.AlignmentViewPanel alignmentv) { - if (!colourBySequence || !loadingFinished) + if (!colourBySequence || !isLoadingFinished()) return; if (ssm == null) { @@ -1490,30 +1497,6 @@ public abstract class JalviewJmolBinding implements StructureListener, showConsole(false); } - public void setLoadingFromArchive(boolean loadingFromArchive) - { - this.loadingFromArchive = loadingFromArchive; - } - - /** - * - * @return true if Jmol is still restoring state or loading is still going on (see setFinsihedLoadingFromArchive) - */ - public boolean isLoadingFromArchive() - { - return loadingFromArchive && !loadingFinished; - } - - /** - * modify flag which controls if sequence colouring events are honoured by the binding. - * Should be true for normal operation - * @param finishedLoading - */ - public void setFinishedLoadingFromArchive(boolean finishedLoading) - { - loadingFinished = finishedLoading; - } - public void setBackgroundColour(java.awt.Color col) { jmolHistory(false);