JAL-4369 invokeAndWait to avoid hang whilst calling getFiles if a Jmol redraw is...
[jalview.git] / src / jalview / bin / Commands.java
index 2794b02..8ba4194 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.bin;
 
 import java.awt.Color;
@@ -308,9 +328,17 @@ public class Commands
           }
 
           // colour alignment
-          String colour = avm.getFromSubValArgOrPref(av, Arg.COLOUR, sv,
-                  null, "DEFAULT_COLOUR_PROT", "");
-          this.colourAlignFrame(af, colour);
+          String colour = null;
+          if (avm.containsArg(Arg.COLOUR)
+                  || !(format == FileFormat.Jalview))
+          {
+            colour = avm.getFromSubValArgOrPref(av, Arg.COLOUR, sv, null,
+                    "DEFAULT_COLOUR_PROT", null);
+          }
+          if (colour != null)
+          {
+            this.colourAlignFrame(af, colour);
+          }
 
           // Change alignment frame title
           String title = avm.getFromSubValArgOrPref(av, Arg.TITLE, sv, null,
@@ -481,15 +509,13 @@ public class Commands
       if (avm.containsArg(Arg.STRUCTURE))
       {
         commandArgsProvided = true;
-        for (
-
-        ArgValue av : avm.getArgValueList(Arg.STRUCTURE))
+        for (ArgValue structureAv : avm.getArgValueList(Arg.STRUCTURE))
         {
           argParser.setStructureFilename(null);
-          String val = av.getValue();
-          SubVals subVals = av.getSubVals();
-          int argIndex = av.getArgIndex();
-          SequenceI seq = getSpecifiedSequence(af, avm, av);
+          String val = structureAv.getValue();
+          SubVals subVals = structureAv.getSubVals();
+          int argIndex = structureAv.getArgIndex();
+          SequenceI seq = getSpecifiedSequence(af, avm, structureAv);
           if (seq == null)
           {
             // Could not find sequence from subId, let's assume the first
@@ -558,8 +584,8 @@ public class Commands
 
           // get PAEMATRIX file and label from subvals or Arg.PAEMATRIX
           String paeFilepath = avm.getFromSubValArgOrPrefWithSubstitutions(
-                  argParser, Arg.PAEMATRIX, ArgValuesMap.Position.AFTER, av,
-                  subVals, null, null, null);
+                  argParser, Arg.PAEMATRIX, ArgValuesMap.Position.AFTER,
+                  structureAv, subVals, null, null, null);
           if (paeFilepath != null)
           {
             File paeFile = new File(paeFilepath);
@@ -583,8 +609,8 @@ public class Commands
           // get TEMPFAC type from subvals or Arg.TEMPFAC in case user Adds
           // reference annotations
           String tftString = avm.getFromSubValArgOrPrefWithSubstitutions(
-                  argParser, Arg.TEMPFAC, ArgValuesMap.Position.AFTER, av,
-                  subVals, null, null, null);
+                  argParser, Arg.TEMPFAC, ArgValuesMap.Position.AFTER,
+                  structureAv, subVals, null, null, null);
           boolean notempfac = avm.getFromSubValArgOrPref(Arg.NOTEMPFAC,
                   subVals, null, "ADD_TEMPFACT_ANN", false, true);
           TFType tft = notempfac ? null : TFType.DEFAULT;
@@ -616,8 +642,8 @@ public class Commands
           }
 
           String sViewerName = avm.getFromSubValArgOrPref(
-                  Arg.STRUCTUREVIEWER, ArgValuesMap.Position.AFTER, av,
-                  subVals, null, null, "jmol");
+                  Arg.STRUCTUREVIEWER, ArgValuesMap.Position.AFTER,
+                  structureAv, subVals, null, null, "jmol");
           ViewerType viewerType = ViewerType.getFromString(sViewerName);
 
           // TODO use ssFromStructure
@@ -678,7 +704,8 @@ public class Commands
           if (avm.containsArg(Arg.STRUCTUREIMAGE))
           {
             for (ArgValue structureImageArgValue : avm
-                    .getArgValueList(Arg.STRUCTUREIMAGE))
+                    .getArgValueListFromSubValOrArg(structureAv,
+                            Arg.STRUCTUREIMAGE, subVals))
             {
               String structureImageFilename = argParser.makeSubstitutions(
                       structureImageArgValue.getValue(), id, true);
@@ -1248,8 +1275,19 @@ public class Commands
 
   private void colourAlignFrame(AlignFrame af, ColourSchemeI cs)
   {
-    // Note that cs == null removes colour scheme from af
-    af.changeColour(cs);
+    try {
+    SwingUtilities.invokeAndWait(new Runnable()
+    {
+      @Override
+      public void run()
+      {
+        // Note that cs == null removes colour scheme from af
+        af.changeColour(cs);
+      }
+    }); } catch (Exception x) {
+      Console.trace("Interrupted whilst waiting for colorAlignFrame action",x);
+      
+    }
   }
 
   private ColourSchemeI getColourScheme(AlignFrame af)