Merge branch 'feature/JAL-2664' into feature/JAL-2527
[jalview.git] / src / jalview / gui / ChimeraViewFrame.java
index fe4a000..ba360af 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.gui;
 
+import jalview.api.FeatureRenderer;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.PDBEntry;
@@ -90,8 +91,8 @@ public class ChimeraViewFrame extends StructureViewerBase
 
     viewerActionMenu.setText(MessageManager.getString("label.chimera"));
 
-    viewerColour.setText(MessageManager
-            .getString("label.colour_with_chimera"));
+    viewerColour
+            .setText(MessageManager.getString("label.colour_with_chimera"));
     viewerColour.setToolTipText(MessageManager
             .getString("label.let_chimera_manage_structure_colours"));
 
@@ -99,35 +100,41 @@ public class ChimeraViewFrame extends StructureViewerBase
     savemenu.setVisible(false); // not yet implemented
     viewMenu.add(fitToWindow);
 
-    JMenuItem writeFeatures = new JMenuItem(
-            MessageManager.getString("label.create_chimera_attributes"));
-    writeFeatures.setToolTipText(MessageManager
-            .getString("label.create_chimera_attributes_tip"));
-    writeFeatures.addActionListener(new ActionListener()
+    /*
+     * exchange of Jalview features and Chimera attributes is for now
+     * an optionally enabled experimental feature
+     */
+    if (Desktop.instance.showExperimental())
     {
-      @Override
-      public void actionPerformed(ActionEvent e)
+      JMenuItem writeFeatures = new JMenuItem(
+              MessageManager.getString("label.create_chimera_attributes"));
+      writeFeatures.setToolTipText(MessageManager
+              .getString("label.create_chimera_attributes_tip"));
+      writeFeatures.addActionListener(new ActionListener()
       {
-        sendFeaturesToChimera();
-      }
-    });
-    viewerActionMenu.add(writeFeatures);
-
-    final JMenu fetchAttributes = new JMenu(
-            MessageManager.getString("label.fetch_chimera_attributes"));
-    fetchAttributes.setToolTipText(MessageManager
-            .getString("label.fetch_chimera_attributes_tip"));
-    fetchAttributes.addMouseListener(new MouseAdapter()
-    {
-
-      @Override
-      public void mouseEntered(MouseEvent e)
+        @Override
+        public void actionPerformed(ActionEvent e)
+        {
+          sendFeaturesToChimera();
+        }
+      });
+      viewerActionMenu.add(writeFeatures);
+
+      final JMenu fetchAttributes = new JMenu(
+              MessageManager.getString("label.fetch_chimera_attributes"));
+      fetchAttributes.setToolTipText(MessageManager
+              .getString("label.fetch_chimera_attributes_tip"));
+      fetchAttributes.addMouseListener(new MouseAdapter()
       {
-        buildAttributesMenu(fetchAttributes);
-      }
-    });
-    viewerActionMenu.add(fetchAttributes);
 
+        @Override
+        public void mouseEntered(MouseEvent e)
+        {
+          buildAttributesMenu(fetchAttributes);
+        }
+      });
+      viewerActionMenu.add(fetchAttributes);
+    }
   }
 
   /**
@@ -190,8 +197,8 @@ public class ChimeraViewFrame extends StructureViewerBase
   protected void sendFeaturesToChimera()
   {
     int count = jmb.sendFeaturesToViewer(getAlignmentPanel());
-    statusBar.setText(MessageManager.formatMessage("label.attributes_set",
-            count));
+    statusBar.setText(
+            MessageManager.formatMessage("label.attributes_set", count));
   }
 
   /**
@@ -231,7 +238,8 @@ public class ChimeraViewFrame extends StructureViewerBase
      * a new viewer
      */
     openNewChimera(ap, new PDBEntry[] { pdbentry },
-            new SequenceI[][] { seq });
+            new SequenceI[][]
+            { seq });
   }
 
   /**
@@ -270,7 +278,8 @@ public class ChimeraViewFrame extends StructureViewerBase
     this.addInternalFrameListener(new InternalFrameAdapter()
     {
       @Override
-      public void internalFrameClosing(InternalFrameEvent internalFrameEvent)
+      public void internalFrameClosing(
+              InternalFrameEvent internalFrameEvent)
       {
         closeViewer(false);
       }
@@ -391,9 +400,8 @@ public class ChimeraViewFrame extends StructureViewerBase
       boolean opened = jmb.openSession(chimeraSessionFile);
       if (!opened)
       {
-        System.err
-                .println("An error occurred opening Chimera session file "
-                        + chimeraSessionFile);
+        System.err.println("An error occurred opening Chimera session file "
+                + chimeraSessionFile);
       }
     }
 
@@ -436,10 +444,9 @@ public class ChimeraViewFrame extends StructureViewerBase
     {
       if (!closeChimera)
       {
-        String prompt = MessageManager.formatMessage(
-                "label.confirm_close_chimera",
-                        new Object[] { jmb.getViewerTitle(getViewerName(),
-                                false) });
+        String prompt = MessageManager
+                .formatMessage("label.confirm_close_chimera", new Object[]
+                { jmb.getViewerTitle(getViewerName(), false) });
         prompt = JvSwingUtils.wrapTooltip(true, prompt);
         int confirm = JvOptionPane.showConfirmDialog(this, prompt,
                 MessageManager.getString("label.close_viewer"),
@@ -483,7 +490,7 @@ public class ChimeraViewFrame extends StructureViewerBase
     StructureFile pdb = null;
     try
     {
-      String[] curfiles = jmb.getPdbFile(); // files currently in viewer
+      String[] curfiles = jmb.getStructureFiles(); // files currently in viewer
       // TODO: replace with reference fetching/transfer code (validate PDBentry
       // as a DBRef?)
       for (int pi = 0; pi < jmb.getPdbCount(); pi++)
@@ -535,15 +542,16 @@ public class ChimeraViewFrame extends StructureViewerBase
     } catch (Exception ex)
     {
       ex.printStackTrace();
-      errormsgs.append("When retrieving pdbfiles for '"
-              + thePdbEntry.getId() + "'");
+      errormsgs.append(
+              "When retrieving pdbfiles for '" + thePdbEntry.getId() + "'");
     }
     if (errormsgs.length() > 0)
     {
 
-      JvOptionPane.showInternalMessageDialog(Desktop.desktop, MessageManager
-              .formatMessage("label.pdb_entries_couldnt_be_retrieved",
-                      new Object[] { errormsgs.toString() }),
+      JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+              MessageManager.formatMessage(
+                      "label.pdb_entries_couldnt_be_retrieved", new Object[]
+                      { errormsgs.toString() }),
               MessageManager.getString("label.couldnt_load_file"),
               JvOptionPane.ERROR_MESSAGE);
     }
@@ -600,8 +608,9 @@ public class ChimeraViewFrame extends StructureViewerBase
                     oomerror);
           } catch (Exception ex)
           {
-            Cache.log.error("Couldn't open " + pe.getFile()
-                    + " in Chimera viewer!", ex);
+            Cache.log.error(
+                    "Couldn't open " + pe.getFile() + " in Chimera viewer!",
+                    ex);
           } finally
           {
             Cache.log.debug("File locations are " + files);
@@ -613,6 +622,16 @@ public class ChimeraViewFrame extends StructureViewerBase
       jmb.setFinishedInit(true);
       jmb.setLoadingFromArchive(false);
 
+      /*
+       * ensure that any newly discovered features (e.g. RESNUM)
+       * are added to any open feature settings dialog
+       */
+      FeatureRenderer fr = getBinding().getFeatureRenderer(null);
+      if (fr != null)
+      {
+        fr.featuresAdded();
+      }
+
       // refresh the sequence colours for the new structure(s)
       for (AlignmentPanel ap : _colourwith)
       {
@@ -650,12 +669,13 @@ public class ChimeraViewFrame extends StructureViewerBase
   {
     for (int i = 0; i < pdb.getChains().size(); i++)
     {
-      String chid = new String(pdb.getId() + ":"
-              + pdb.getChains().elementAt(i).id);
+      String chid = new String(
+              pdb.getId() + ":" + pdb.getChains().elementAt(i).id);
       jmb.getChainNames().add(chid);
       jmb.getChainFile().put(chid, file);
     }
   }
+
   private String fetchPdbFile(PDBEntry processingEntry) throws Exception
   {
     // FIXME: this is duplicated code with Jmol frame ?
@@ -670,7 +690,8 @@ public class ChimeraViewFrame extends StructureViewerBase
      * Write 'fetching PDB' progress on AlignFrame as we are not yet visible
      */
     String msg = MessageManager.formatMessage("status.fetching_pdb",
-            new Object[] { pdbid });
+            new Object[]
+            { pdbid });
     getAlignmentPanel().alignFrame.setProgressBar(msg, handle);
     // long hdl = startProgressBar(MessageManager.formatMessage(
     // "status.fetching_pdb", new Object[]
@@ -738,17 +759,15 @@ public class ChimeraViewFrame extends StructureViewerBase
   @Override
   public void eps_actionPerformed(ActionEvent e)
   {
-    throw new Error(
-            MessageManager
-                    .getString("error.eps_generation_not_implemented"));
+    throw new Error(MessageManager
+            .getString("error.eps_generation_not_implemented"));
   }
 
   @Override
   public void png_actionPerformed(ActionEvent e)
   {
-    throw new Error(
-            MessageManager
-                    .getString("error.png_generation_not_implemented"));
+    throw new Error(MessageManager
+            .getString("error.png_generation_not_implemented"));
   }
 
   @Override