Merge branch 'features/JAL-2320_closeChimeraAction' into develop
authorJim Procter <jprocter@issues.jalview.org>
Wed, 30 Nov 2016 16:04:57 +0000 (16:04 +0000)
committerJim Procter <jprocter@issues.jalview.org>
Wed, 30 Nov 2016 16:04:57 +0000 (16:04 +0000)
also tidied up javadoc

1  2 
src/ext/edu/ucsf/rbvi/strucviz2/ChimeraManager.java
src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java
src/jalview/gui/AppJmolBinding.java
src/jalview/gui/JalviewChimeraBindingModel.java
src/jalview/structures/models/AAStructureBindingModel.java

@@@ -196,11 -193,43 +199,41 @@@ public abstract class JalviewChimeraBin
     * @param protocol
     */
    public JalviewChimeraBinding(StructureSelectionManager ssm,
 -          PDBEntry[] pdbentry, SequenceI[][] sequenceIs, String[][] chains,
 -          String protocol)
 +          PDBEntry[] pdbentry, SequenceI[][] sequenceIs, DataSourceType protocol)
    {
 -    super(ssm, pdbentry, sequenceIs, chains, protocol);
 +    super(ssm, pdbentry, sequenceIs, protocol);
-     viewer = new ChimeraManager(
-             new ext.edu.ucsf.rbvi.strucviz2.StructureManager(true));
+     viewer = new ChimeraManager(new StructureManager(true));
+   }
+   /**
+    * Starts a thread that waits for the Chimera process to finish, so that we
+    * can then close the associated resources. This avoids leaving orphaned
+    * Chimera viewer panels in Jalview if the user closes Chimera.
+    */
+   protected void startChimeraProcessMonitor()
+   {
+     final Process p = viewer.getChimeraProcess();
+     chimeraMonitor = new Thread(new Runnable()
+     {
+       @Override
+       public void run()
+       {
+         try
+         {
+           p.waitFor();
+           JalviewStructureDisplayI display = getViewer();
+           if (display != null)
+           {
+             display.closeViewer(false);
+           }
+         } catch (InterruptedException e)
+         {
+           // exit thread if Chimera Viewer is closed in Jalview
+         }
+       }
+     });
+     chimeraMonitor.start();
    }
  
    /**
    }
  
    /**
--   * Returns a list of chains mapped in this viewer. Note this list is not
--   * currently scoped per structure.
--   * 
--   * @return
--   */
-   /**
 -  public List<String> getChainNames()
 -  {
 -    List<String> names = new ArrayList<String>();
 -    String[][] allNames = getChains();
 -    if (allNames != null)
 -    {
 -      for (String[] chainsForPdb : allNames)
 -      {
 -        if (chainsForPdb != null)
 -        {
 -          for (String chain : chainsForPdb)
 -          {
 -            if (chain != null && !names.contains(chain))
 -            {
 -              names.add(chain);
 -            }
 -          }
 -        }
 -      }
 -    }
 -    return names;
 -  }
 -
 -  /**
     * Send a 'focus' command to Chimera to recentre the visible display
     */
    public void focusView()
Simple merge
@@@ -141,5 -140,10 +142,9 @@@ public class JalviewChimeraBindingMode
  
    }
  
+   @Override
+   public JalviewStructureDisplayI getViewer()
+   {
+     return cvf;
+   }
 -
  }
@@@ -672,10 -677,12 +673,19 @@@ public abstract class AAStructureBindin
    }
  
    /**
 +   * Returns a list of chains mapped in this viewer.
 +   * 
 +   * @return
 +   */
 +  public abstract List<String> getChainNames();
 +
++  /**
+    * Returns the Jalview panel hosting the structure viewer (if any)
+    * 
+    * @return
+    */
+   public JalviewStructureDisplayI getViewer()
+   {
+     return null;
+   }
  }