Merge branch 'feature/JAL-3551Pymol' into develop
[jalview.git] / src / jalview / gui / AppJmolBinding.java
index 3a376b8..98787cb 100644 (file)
  */
 package jalview.gui;
 
+import java.awt.Container;
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import javax.swing.JComponent;
+
+import org.jmol.api.JmolAppConsoleInterface;
+import org.openscience.jmol.app.jmolpanel.console.AppConsole;
+
 import jalview.api.AlignmentViewPanel;
+import jalview.api.structures.JalviewStructureDisplayI;
 import jalview.bin.Cache;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.ext.jmol.JalviewJmolBinding;
+import jalview.io.DataSourceType;
 import jalview.structure.StructureSelectionManager;
-
-import java.awt.Container;
-import java.util.BitSet;
-
-import org.jmol.api.JmolAppConsoleInterface;
-import org.jmol.api.JmolViewer;
-import org.jmol.popup.JmolPopup;
-import org.openscience.jmol.app.jmolpanel.AppConsole;
+import jalview.util.Platform;
+import javajs.util.BS;
 
 public class AppJmolBinding extends JalviewJmolBinding
 {
-  private AppJmol appJmolWindow;
-
-  private FeatureRenderer fr = null;
-
   public AppJmolBinding(AppJmol appJmol, StructureSelectionManager sSm,
-          PDBEntry[] pdbentry, SequenceI[][] sequenceIs, String[][] chains,
-          String protocol)
-  {
-    super(sSm, pdbentry, sequenceIs, chains, protocol);
-    appJmolWindow = appJmol;
-  }
-
-  @Override
-  public FeatureRenderer getFeatureRenderer(
-          AlignmentViewPanel alignment)
+          PDBEntry[] pdbentry, SequenceI[][] sequenceIs,
+          DataSourceType protocol)
   {
-    AlignmentPanel ap = (alignment == null) ? appJmolWindow.getAlignmentPanel()
-            : (AlignmentPanel) alignment;
-    if (ap.av.isShowSequenceFeatures())
-    {
-      if (fr == null)
-      {
-        fr = (jalview.gui.FeatureRenderer) ap.cloneFeatureRenderer();
-      }
-      else
-      {
-        ap.updateFeatureRenderer(fr);
-      }
-    }
-
-    return fr;
+    super(sSm, pdbentry, sequenceIs, protocol);
+    setViewer(appJmol);
   }
 
   @Override
-  public SequenceRenderer getSequenceRenderer(
-          AlignmentViewPanel alignment)
+  public SequenceRenderer getSequenceRenderer(AlignmentViewPanel alignment)
   {
     return new SequenceRenderer(((AlignmentPanel) alignment).av);
   }
 
+  @Override
   public void sendConsoleEcho(String strEcho)
   {
     if (console != null)
@@ -85,6 +66,7 @@ public class AppJmolBinding extends JalviewJmolBinding
     }
   }
 
+  @Override
   public void sendConsoleMessage(String strStatus)
   {
     if (console != null && strStatus != null)
@@ -111,31 +93,26 @@ public class AppJmolBinding extends JalviewJmolBinding
   @Override
   public void refreshGUI()
   {
+    if (getMappedStructureCount() == 0)
+    {
+      // too soon!
+      return;
+    }
     // appJmolWindow.repaint();
     javax.swing.SwingUtilities.invokeLater(new Runnable()
     {
+      @Override
       public void run()
       {
-        appJmolWindow.updateTitleAndMenus();
-        appJmolWindow.revalidate();
+        JalviewStructureDisplayI theViewer = getViewer();
+        // invokes colourbySequence() via seqColour_ActionPerformed()
+        theViewer.updateTitleAndMenus();
+        ((JComponent) theViewer).revalidate();
       }
     });
   }
 
-  public void updateColours(Object source)
-  {
-    AlignmentPanel ap = (AlignmentPanel) source, topap;
-    // ignore events from panels not used to colour this view
-    if (!appJmolWindow.isUsedforcolourby(ap))
-    {
-      return;
-    }
-    if (!isLoadingFromArchive())
-    {
-      colourBySequence(ap.av.isShowSequenceFeatures(), ap);
-    }
-  }
-
+  @Override
   public void notifyScriptTermination(String strStatus, int msWalltime)
   {
     // todo - script termination doesn't happen ?
@@ -144,46 +121,43 @@ public class AppJmolBinding extends JalviewJmolBinding
     // msWalltime);
   }
 
+  @Override
   public void showUrl(String url)
   {
     showUrl(url, "jmol");
   }
 
-  public void newJmolPopup(boolean translateLocale, String menuName,
-          boolean asPopup)
+  public void newJmolPopup(String menuName)
   {
-    jmolpopup = new JmolPopup();
-    jmolpopup.initialize(viewer, translateLocale, menuName, asPopup);
+    // jmolpopup = new JmolAwtPopup();
+    // jmolpopup.jpiInitialize((viewer), menuName);
   }
 
-  public void selectionChanged(BitSet arg0)
-  {
-    // TODO Auto-generated method stub
-
-  }
-
-  public void refreshPdbEntries()
+  @Override
+  public void selectionChanged(BS arg0)
   {
-    // TODO Auto-generated method stub
-
   }
 
+  @Override
   public void showConsole(boolean b)
   {
-    appJmolWindow.showConsole(b);
+    getViewer().showConsole(b);
   }
 
   @Override
-  protected JmolAppConsoleInterface createJmolConsole(JmolViewer viewer2,
+  protected JmolAppConsoleInterface createJmolConsole(
           Container consolePanel, String buttonsToShow)
   {
-    return new AppConsole(viewer, consolePanel, buttonsToShow);
+    jmolViewer.setJmolCallbackListener(this);
+    // BH comment: can't do this yet [for JS only, or generally?]
+    return Platform.isJS() ? null
+            : new AppConsole(jmolViewer, consolePanel, buttonsToShow);
   }
 
   @Override
   protected void releaseUIResources()
   {
-    appJmolWindow = null;
+    setViewer(null);
     closeConsole();
   }
 
@@ -192,7 +166,27 @@ public class AppJmolBinding extends JalviewJmolBinding
   {
     if (svl instanceof SeqPanel)
     {
-      appJmolWindow.removeAlignmentPanel(((SeqPanel) svl).ap);
+      getViewer().removeAlignmentPanel(((SeqPanel) svl).ap);
+    }
+  }
+
+  @Override
+  public Map<String, Object> getJSpecViewProperty(String arg0)
+  {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @SuppressWarnings("unused")
+  public void cacheFiles(List<File> files)
+  {
+    if (files == null)
+    {
+      return;
+    }
+    for (File f : files)
+    {
+      Platform.cacheFileData(f);
     }
   }
 }