Merge branch 'develop' into bug/JAL-4290_headless_alignment_export_with_structure_ann...
authorJames Procter <j.procter@dundee.ac.uk>
Tue, 23 Jan 2024 14:21:59 +0000 (14:21 +0000)
committerJames Procter <j.procter@dundee.ac.uk>
Tue, 23 Jan 2024 16:54:50 +0000 (16:54 +0000)
1  2 
src/jalview/bin/Commands.java

@@@ -179,7 -179,8 +179,7 @@@ public class Command
  
      if (argParser.getBoolean(Arg.QUIT))
      {
 -      Jalview.getInstance().exit(
 -              "Exiting due to " + Arg.QUIT.argString() + " argument.",
 +      Jalview.exit("Exiting due to " + Arg.QUIT.argString() + " argument.",
                ExitCode.OK);
        return true;
      }
  
      Boolean isError = Boolean.valueOf(false);
  
 -    // set wrap scope here so it can be applied after structures are opened
 +    // set wrap, showSSAnnotations, showAnnotations and hideTFrows scope here so
 +    // it can be applied after structures are opened
      boolean wrap = false;
 +    boolean showSSAnnotations = false;
 +    boolean showAnnotations = false;
 +    boolean hideTFrows = false;
 +    AlignFrame af = null;
  
      if (avm.containsArg(Arg.APPEND) || avm.containsArg(Arg.OPEN))
      {
  
        boolean first = true;
        boolean progressBarSet = false;
 -      AlignFrame af;
        // Combine the APPEND and OPEN files into one list, along with whether it
        // was APPEND or OPEN
        List<ArgValue> openAvList = new ArrayList<>();
            }
  
            // 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,
            }
  
            // Show secondary structure annotations?
 -          boolean showSSAnnotations = avm.getFromSubValArgOrPref(
 +          showSSAnnotations = avm.getFromSubValArgOrPref(
                    Arg.SHOWSSANNOTATIONS, av.getSubVals(), null,
                    "STRUCT_FROM_PDB", true);
 -
            // Show sequence annotations?
 -          boolean showAnnotations = avm.getFromSubValArgOrPref(
 -                  Arg.SHOWANNOTATIONS, av.getSubVals(), null,
 -                  "SHOW_ANNOTATIONS", true);
 -
 -          boolean hideTFrows = (avm.getBoolean(Arg.NOTEMPFAC));
 -          final AlignFrame _af = af;
 -          // many of jalview's format/layout methods are only thread safe on the
 -          // swingworker thread.
 -          // all these methods should be on the alignViewController so it can
 -          // coordinate such details
 -          try
 -          {
 -            SwingUtilities.invokeAndWait(new Runnable()
 -            {
 +          showAnnotations = avm.getFromSubValArgOrPref(Arg.SHOWANNOTATIONS,
 +                  av.getSubVals(), null, "SHOW_ANNOTATIONS", true);
 +          // hide the Temperature Factor row?
 +          hideTFrows = (avm.getBoolean(Arg.NOTEMPFAC));
  
 -              @Override
 -              public void run()
 -              {
 -                _af.setAnnotationsVisibility(showSSAnnotations, true,
 -                        false);
 -
 -                _af.setAnnotationsVisibility(showAnnotations, false, true);
 -
 -                // show temperature factor annotations?
 -                if (hideTFrows)
 -                {
 -                  // do this better (annotation types?)
 -                  List<String> hideThese = new ArrayList<>();
 -                  hideThese.add("Temperature Factor");
 -                  hideThese.add(AlphaFoldAnnotationRowBuilder.LABEL);
 -                  AlignmentUtils.showOrHideSequenceAnnotations(
 -                          _af.getCurrentView().getAlignment(), hideThese,
 -                          null, false, false);
 -                }
 -              }
 -            });
 -          } catch (Exception x)
 -          {
 -            Console.warn(
 -                    "Unexpected exception adjusting annotation row visibility.",
 -                    x);
 -          }
 +          // showSSAnnotations, showAnnotations, hideTFrows used after opening
 +          // structure
  
            // wrap alignment? do this last for formatting reasons
            wrap = avm.getFromSubValArgOrPref(Arg.WRAP, sv, null,
      // open the structure (from same PDB file or given PDBfile)
      if (!avm.getBoolean(Arg.NOSTRUCTURE))
      {
 -
 -      AlignFrame af = afMap.get(id);
 +      if (af == null)
 +      {
 +        af = afMap.get(id);
 +      }
        if (avm.containsArg(Arg.STRUCTURE))
        {
          commandArgsProvided = true;
        }
      }
  
 -    if (wrap)
 +    if (af == null)
      {
 +      af = afMap.get(id);
 +    }
 +    // many of jalview's format/layout methods are only thread safe on the
 +    // swingworker thread.
 +    // all these methods should be on the alignViewController so it can
 +    // coordinate such details
 +    if (headless)
 +    {
 +      showOrHideAnnotations(af, showSSAnnotations, showAnnotations,
 +              hideTFrows);
 +    }
 +    else
 +    {
 +      try
 +      {
 +        AlignFrame _af = af;
 +        final boolean _showSSAnnotations = showSSAnnotations;
 +        final boolean _showAnnotations = showAnnotations;
 +        final boolean _hideTFrows = hideTFrows;
 +        SwingUtilities.invokeAndWait(() -> {
 +          showOrHideAnnotations(_af, _showSSAnnotations, _showAnnotations,
 +                  _hideTFrows);
 +        }
  
 -      AlignFrame af = afMap.get(id);
 +        );
 +      } catch (Exception x)
 +      {
 +        Console.warn(
 +                "Unexpected exception adjusting annotation row visibility.",
 +                x);
 +      }
 +    }
 +
 +    if (wrap)
 +    {
 +      if (af == null)
 +      {
 +        af = afMap.get(id);
 +      }
        if (af != null)
        {
          af.setWrapFormat(wrap, true);
      return theseArgsWereParsed && !isError;
    }
  
 +  private static void showOrHideAnnotations(AlignFrame af,
 +          boolean showSSAnnotations, boolean showAnnotations,
 +          boolean hideTFrows)
 +  {
 +    af.setAnnotationsVisibility(showSSAnnotations, true, false);
 +    af.setAnnotationsVisibility(showAnnotations, false, true);
 +
 +    // show temperature factor annotations?
 +    if (hideTFrows)
 +    {
 +      // do this better (annotation types?)
 +      List<String> hideThese = new ArrayList<>();
 +      hideThese.add("Temperature Factor");
 +      hideThese.add(AlphaFoldAnnotationRowBuilder.LABEL);
 +      AlignmentUtils.showOrHideSequenceAnnotations(
 +              af.getCurrentView().getAlignment(), hideThese, null, false,
 +              false);
 +    }
 +  }
 +
    protected void processGroovyScript(String id)
    {
      ArgValuesMap avm = argParser.getLinkedArgs(id);
  
    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)