X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmolBinding.java;h=8d1d9bf48250a2f333aa381f410c17398a161049;hb=838e4f91d4a53dd315640dbc9ff6ef7a815ee576;hp=d6535e3d961a2f571f35ed48182a0703f45e1202;hpb=4fe775d619d3587a4037a79a67b7391a82b8a130;p=jalview.git diff --git a/src/jalview/gui/AppJmolBinding.java b/src/jalview/gui/AppJmolBinding.java index d6535e3..8d1d9bf 100644 --- a/src/jalview/gui/AppJmolBinding.java +++ b/src/jalview/gui/AppJmolBinding.java @@ -1,72 +1,96 @@ -/** +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1) + * Copyright (C) 2015 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. + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; -import java.util.BitSet; -import java.util.Vector; - +import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; +import jalview.ext.jmol.JalviewJmolBinding; +import jalview.structure.StructureSelectionManager; -import org.jmol.popup.JmolPopup; +import java.awt.Container; +import java.util.Map; -class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding -{ +import org.jmol.api.JmolAppConsoleInterface; +import org.jmol.java.BS; +import org.openscience.jmol.app.jmolpanel.console.AppConsole; - /** - * - */ +public class AppJmolBinding extends JalviewJmolBinding +{ private AppJmol appJmolWindow; - public AppJmolBinding(AppJmol appJmol, PDBEntry[] pdbentry, - SequenceI[][] sequenceIs, String[][] chains, String protocol) + private FeatureRenderer fr = null; + + public AppJmolBinding(AppJmol appJmol, StructureSelectionManager sSm, + PDBEntry[] pdbentry, SequenceI[][] sequenceIs, String[][] chains, + String protocol) { - super(pdbentry, sequenceIs, chains, protocol); + super(sSm, pdbentry, sequenceIs, chains, protocol); appJmolWindow = appJmol; } - FeatureRenderer fr = null; - @Override - public jalview.api.FeatureRenderer getFeatureRenderer() + public FeatureRenderer getFeatureRenderer(AlignmentViewPanel alignment) { - if (appJmolWindow.ap.av.showSequenceFeatures) + AlignmentPanel ap = (alignment == null) ? appJmolWindow + .getAlignmentPanel() : (AlignmentPanel) alignment; + if (ap.av.isShowSequenceFeatures()) { if (fr == null) { - fr = new FeatureRenderer(appJmolWindow.ap); + fr = (jalview.gui.FeatureRenderer) ap.cloneFeatureRenderer(); + } + else + { + ap.updateFeatureRenderer(fr); } - - fr.transferSettings(appJmolWindow.ap.seqPanel.seqCanvas - .getFeatureRenderer()); } return fr; } @Override - public jalview.api.SequenceRenderer getSequenceRenderer() + public SequenceRenderer getSequenceRenderer(AlignmentViewPanel alignment) { - return new SequenceRenderer(appJmolWindow.ap.av); + return new SequenceRenderer(((AlignmentPanel) alignment).av); } + @Override public void sendConsoleEcho(String strEcho) { - if (appJmolWindow.scriptWindow != null) + if (console != null) { - appJmolWindow.scriptWindow.sendConsoleEcho(strEcho); + console.sendConsoleEcho(strEcho); } } + @Override public void sendConsoleMessage(String strStatus) { - if (appJmolWindow.scriptWindow != null && strStatus != null) + if (console != null && strStatus != null) // && !strStatus.equals("Script completed")) // should we squash the script completed string ? { - appJmolWindow.scriptWindow.sendConsoleMessage(strStatus); + console.sendConsoleMessage(strStatus); } } @@ -87,23 +111,37 @@ class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding public void refreshGUI() { // appJmolWindow.repaint(); - appJmolWindow.updateTitleAndMenus(); + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + appJmolWindow.updateTitleAndMenus(); + appJmolWindow.revalidate(); + } + }); } public void updateColours(Object source) { AlignmentPanel ap = (AlignmentPanel) source; - if (appJmolWindow.ap.alignFrame.getCurrentView() != ap.av) + // ignore events from panels not used to colour this view + if (!appJmolWindow.isUsedforcolourby(ap)) + { return; - - colourBySequence(ap.av.getShowSequenceFeatures(), ap.av.alignment); + } + if (!isLoadingFromArchive()) + { + colourBySequence(ap); + } } + @Override public void notifyScriptTermination(String strStatus, int msWalltime) { - if (appJmolWindow.scriptWindow != null) - appJmolWindow.scriptWindow.notifyScriptTermination(strStatus, - msWalltime); + // todo - script termination doesn't happen ? + // if (console != null) + // console.notifyScriptTermination(strStatus, + // msWalltime); } public void showUrl(String url) @@ -111,235 +149,60 @@ class AppJmolBinding extends jalview.ext.jmol.JalviewJmolBinding showUrl(url, "jmol"); } - public void newJmolPopup(boolean translateLocale, String menuName, - boolean asPopup) + public void newJmolPopup(String menuName) { - - jmolpopup = JmolPopup.newJmolPopup(viewer, translateLocale, menuName, - asPopup); + // jmolpopup = new JmolAwtPopup(); + // jmolpopup.jpiInitialize((viewer), menuName); } - /** - * add structures and any known sequence associations - * - * @returns the pdb entries added to the current set. - */ - private PDBEntry[] addSequenceAndChain(PDBEntry[] pdbe, - SequenceI[][] seq, String[][] chns) + @Override + public void selectionChanged(BS arg0) { - int pe = -1; - Vector v = new Vector(); - Vector rtn = new Vector(); - for (int i = 0; i < pdbentry.length; i++) - { - v.addElement(pdbentry[i]); - } - for (int i = 0; i < pdbe.length; i++) - { - int r = v.indexOf(pdbe[i]); - if (r == -1 || r >= pdbentry.length) - { - rtn.addElement(new int[] - { v.size(), i }); - v.addElement(pdbe[i]); - } - else - { - // just make sure the sequence/chain entries are all up to date - addSequenceAndChain(r, seq[i], chns[i]); - } - } - pdbe = new PDBEntry[v.size()]; - v.copyInto(pdbe); - pdbentry = pdbe; - if (rtn.size() > 0) - { - // expand the tied seuqence[] and string[] arrays - SequenceI[][] sqs = new SequenceI[pdbentry.length][]; - String[][] sch = new String[pdbentry.length][]; - System.arraycopy(sequence, 0, sqs, 0, sequence.length); - System.arraycopy(chains, 0, sch, 0, this.chains.length); - sequence = sqs; - chains = sch; - pdbe = new PDBEntry[rtn.size()]; - for (int r = 0; r < pdbe.length; r++) - { - int[] stri = ((int[]) rtn.elementAt(r)); - // record the pdb file as a new addition - pdbe[r] = pdbentry[stri[0]]; - // and add the new sequence/chain entries - addSequenceAndChain(stri[0], seq[stri[1]], chns[stri[1]]); - } - } - else - { - pdbe = null; - } - return pdbe; + // TODO Auto-generated method stub + } - void addSequence(int pe, SequenceI[] seq) + @Override + public void refreshPdbEntries() { - // add sequences to the pe'th pdbentry's seuqence set. - addSequenceAndChain(pe, seq, null); + // TODO Auto-generated method stub + } - private void addSequenceAndChain(int pe, SequenceI[] seq, String[] tchain) + @Override + public void showConsole(boolean b) { - if (pe < 0 || pe >= pdbentry.length) - { - throw new Error( - "Implementation error - no corresponding pdbentry (for index " - + pe + ") to add sequences mappings to"); - } - final String nullChain = "TheNullChain"; - Vector s = new Vector(); - Vector c = new Vector(); - if (chains == null) - { - chains = new String[pdbentry.length][]; - } - if (sequence[pe] != null) - { - for (int i = 0; i < sequence[pe].length; i++) - { - s.addElement(sequence[pe][i]); - if (chains[pe] != null) - { - if (i < chains[pe].length) - { - c.addElement(chains[pe][i]); - } - else - { - c.addElement(nullChain); - } - } - else - { - if (tchain != null && tchain.length > 0) - { - c.addElement(nullChain); - } - } - } - } - for (int i = 0; i < seq.length; i++) - { - if (!s.contains(seq[i])) - { - s.addElement(seq[i]); - if (tchain != null && i < tchain.length) - { - c.addElement(tchain[i] == null ? nullChain : tchain[i]); - } - } - } - SequenceI[] tmp = new SequenceI[s.size()]; - s.copyInto(tmp); - sequence[pe] = tmp; - if (c.size() > 0) - { - String[] tch = new String[c.size()]; - c.copyInto(tch); - for (int i = 0; i < tch.length; i++) - { - if (tch[i] == nullChain) - { - tch[i] = null; - } - } - chains[pe] = tch; - } - else - { - chains[pe] = null; - } + appJmolWindow.showConsole(b); } - public void selectionChanged(BitSet arg0) + @Override + protected JmolAppConsoleInterface createJmolConsole( + Container consolePanel, String buttonsToShow) { - // TODO Auto-generated method stub - + viewer.setJmolCallbackListener(this); + return new AppConsole(viewer, consolePanel, buttonsToShow); } - public void refreshPdbEntries() + @Override + protected void releaseUIResources() { - // TODO Auto-generated method stub - + appJmolWindow = null; + closeConsole(); } - /** - * add another pdb entry into the view, with associated sequences and chains - * - * @param pdbentry - * @param seq - * @param chains - * @param align - * if true, new structure(s) will be align using associated alignment - */ - public synchronized void addStructure(PDBEntry pdbentry, SequenceI[] seq, - String[] chains, final boolean align) + @Override + public void releaseReferences(Object svl) { - PDBEntry[] pe = addSequenceAndChain(new PDBEntry[] - { pdbentry }, new SequenceI[][] - { seq }, new String[][] - { chains }); - if (pe != null) + if (svl instanceof SeqPanel) { - StringBuffer cmd = new StringBuffer(); - cmd.append("load APPEND"); - for (int p = 0; p < pe.length; p++) - { - cmd.append(" \""); - cmd.append(pe[p].getFile()); - cmd.append("\""); - } - cmd.append("\n"); - final String command = cmd.toString(); - cmd = null; - new Thread(new Runnable() - { - public void run() - { - evalStateCommand(command); - if (align) - { - // may need to wait around until script has finished - while (viewer.isScriptExecuting()) - { - try - { - Thread.sleep(20); - } catch (Exception e) - { - } - ; - } - superposeStructures(appJmolWindow.ap.av.getAlignment(), -1, null); - } - } - }).start(); + appJmolWindow.removeAlignmentPanel(((SeqPanel) svl).ap); } } - /** - * add the given sequences to the mapping scope for the given pdb file handle - * - * @param pdbFile - * - pdbFile identifier - * @param seq - * - set of sequences it can be mapped to - */ - public void addSequenceForStructFile(String pdbFile, SequenceI[] seq) + @Override + public Map getJSpecViewProperty(String arg0) { - for (int pe = 0; pe < pdbentry.length; pe++) - { - if (pdbentry[pe].getFile().equals(pdbFile)) - { - addSequence(pe, seq); - } - } + // TODO Auto-generated method stub + return null; } - -} \ No newline at end of file +}