Merge branch 'feature/JAL-4315_fc_draganddrop' into develop
authorJames Procter <j.procter@dundee.ac.uk>
Wed, 1 Nov 2023 19:16:55 +0000 (19:16 +0000)
committerJames Procter <j.procter@dundee.ac.uk>
Wed, 1 Nov 2023 19:16:55 +0000 (19:16 +0000)
1  2 
src/jalview/gui/AlignFrame.java
src/jalview/gui/FeatureSettings.java

@@@ -4818,7 -4818,7 +4818,7 @@@ public class AlignFrame extends GAlignF
               * Object[] { String,SequenceI}
               */
              ArrayList<Object[]> filesmatched = new ArrayList<>();
-             ArrayList<Object> filesnotmatched = new ArrayList<>();
+             ArrayList<Object[]> filesnotmatched = new ArrayList<>();
              for (int i = 0; i < files.size(); i++)
              {
                // BH 2018
                    }
                    mtch = idm.findAllIdMatches(pdbfn);
                  }
+                 FileFormatI type=null;
                  if (mtch != null)
                  {
-                   FileFormatI type;
                    try
                    {
                      type = new IdentifyFile().identify(file, protocol);
                  }
                  // File wasn't named like one of the sequences or wasn't a PDB
                  // file.
-                 filesnotmatched.add(file);
+                 filesnotmatched.add(new Object[] { file, protocol, type});
                }
              }
              int assocfiles = 0;
                   */
                  for (Object[] o : filesmatched)
                  {
-                   filesnotmatched.add(o[0]);
+                   filesnotmatched.add(new Object[] { o[0], o[1]});
                  }
                }
              }
                {
                  return;
                }
-               for (Object fn : filesnotmatched)
+               for (Object[] fn : filesnotmatched)
                {
-                 loadJalviewDataFile(fn, null, null, null);
+                 loadJalviewDataFile(fn[0], (DataSourceType) fn[1], (FileFormatI)fn[2], null);
                }
  
              }
            {
              format = new IdentifyFile().identify(file, sourceType);
            }
-           if (FileFormat.ScoreMatrix == format)
+           if (FileFormat.FeatureSettings == format)
+           {
+             if (featureSettings != null)
+             {
+               featureSettings.load(file, sourceType);
+             }
+             else
+             {
+               FeatureSettings.loadFeatureSettingsFile(getFeatureRenderer(),
+                       fileObject, sourceType);
+             }
+           }
+           else if (FileFormat.ScoreMatrix == format)
            {
              ScoreMatrixFile sm = new ScoreMatrixFile(
                      new FileParse(file, sourceType));
        }
      }
      alignPanel.validateAnnotationDimensions(true);
 +    // TODO this triggers relayout of annotation panel - otherwise annotation label height is different to panel height
 +    alignPanel.fontChanged();
      alignPanel.alignmentChanged();
    }
  
@@@ -45,6 -45,7 +45,7 @@@ import java.io.FileOutputStream
  import java.io.InputStreamReader;
  import java.io.OutputStreamWriter;
  import java.io.PrintWriter;
+ import java.io.Reader;
  import java.util.Arrays;
  import java.util.Comparator;
  import java.util.HashMap;
@@@ -103,6 -104,8 +104,8 @@@ import jalview.datamodel.features.Featu
  import jalview.datamodel.features.FeatureMatcherSetI;
  import jalview.gui.Help.HelpId;
  import jalview.gui.JalviewColourChooser.ColourChooserListener;
+ import jalview.io.DataSourceType;
+ import jalview.io.FileParse;
  import jalview.io.JalviewFileChooser;
  import jalview.io.JalviewFileView;
  import jalview.schemes.FeatureColour;
@@@ -955,6 -958,65 +958,65 @@@ public class FeatureSettings extends JP
      chooser.showOpenDialog(this);
    }
  
+   public static boolean loadFeatureSettingsFile(FeatureRenderer fr,
+           File file) throws Exception
+   {
+     InputStreamReader in = new InputStreamReader(new FileInputStream(file),
+             "UTF-8");
+     return loadFeatureSettingsFile(fr, in);
+   }
+   public static void loadFeatureSettingsFile(
+           FeatureRenderer featureRenderer, Object fileObject,
+           DataSourceType sourceType) throws Exception
+   {
+     FileParse fp = new FileParse(fileObject, sourceType);
+     loadFeatureSettingsFile(featureRenderer, fp.getReader());
+   }
+   private static boolean loadFeatureSettingsFile(FeatureRenderer fr,
+           Reader in) throws Exception
+   {
+     JAXBContext jc = JAXBContext.newInstance("jalview.xml.binding.jalview");
+     javax.xml.bind.Unmarshaller um = jc.createUnmarshaller();
+     XMLStreamReader streamReader = XMLInputFactory.newInstance()
+             .createXMLStreamReader(in);
+     JAXBElement<JalviewUserColours> jbe = um.unmarshal(streamReader,
+             JalviewUserColours.class);
+     JalviewUserColours jucs = jbe.getValue();
+     // JalviewUserColours jucs = JalviewUserColours.unmarshal(in);
+     /*
+      * load feature colours
+      */
+     for (int i = jucs.getColour().size() - 1; i >= 0; i--)
+     {
+       Colour newcol = jucs.getColour().get(i);
+       FeatureColourI colour = jalview.project.Jalview2XML
+               .parseColour(newcol);
+       fr.setColour(newcol.getName(), colour);
+       fr.setOrder(newcol.getName(), i / (float) jucs.getColour().size());
+     }
+     /*
+      * load feature filters; loaded filters will replace any that are
+      * currently defined, other defined filters are left unchanged 
+      */
+     for (int i = 0; i < jucs.getFilter().size(); i++)
+     {
+       Filter filterModel = jucs.getFilter().get(i);
+       String featureType = filterModel.getFeatureType();
+       FeatureMatcherSetI filter = jalview.project.Jalview2XML
+               .parseFilter(featureType, filterModel.getMatcherSet());
+       if (!filter.isEmpty())
+       {
+         fr.setFeatureFilter(featureType, filter);
+       }
+     }
+     return true;
+   }
    /**
     * Loads feature colours and filters from XML stored in the given file
     * 
     */
    void load(File file)
    {
+     load(file, DataSourceType.FILE);
+   }
+   /**
+    * Loads feature colours and filters from XML at a specified source
+    * 
+    * @param file
+    *          - string or file or other object that allows FileParse to be
+    *          created
+    */
+   void load(Object file, DataSourceType sourceType)
+   {
      try
      {
-       InputStreamReader in = new InputStreamReader(
-               new FileInputStream(file), "UTF-8");
-       JAXBContext jc = JAXBContext
-               .newInstance("jalview.xml.binding.jalview");
-       javax.xml.bind.Unmarshaller um = jc.createUnmarshaller();
-       XMLStreamReader streamReader = XMLInputFactory.newInstance()
-               .createXMLStreamReader(in);
-       JAXBElement<JalviewUserColours> jbe = um.unmarshal(streamReader,
-               JalviewUserColours.class);
-       JalviewUserColours jucs = jbe.getValue();
-       // JalviewUserColours jucs = JalviewUserColours.unmarshal(in);
-       /*
-        * load feature colours
-        */
-       for (int i = jucs.getColour().size() - 1; i >= 0; i--)
-       {
-         Colour newcol = jucs.getColour().get(i);
-         FeatureColourI colour = jalview.project.Jalview2XML
-                 .parseColour(newcol);
-         fr.setColour(newcol.getName(), colour);
-         fr.setOrder(newcol.getName(), i / (float) jucs.getColour().size());
-       }
-       /*
-        * load feature filters; loaded filters will replace any that are
-        * currently defined, other defined filters are left unchanged 
-        */
-       for (int i = 0; i < jucs.getFilter().size(); i++)
-       {
-         Filter filterModel = jucs.getFilter().get(i);
-         String featureType = filterModel.getFeatureType();
-         FeatureMatcherSetI filter = jalview.project.Jalview2XML
-                 .parseFilter(featureType, filterModel.getMatcherSet());
-         if (!filter.isEmpty())
-         {
-           fr.setFeatureFilter(featureType, filter);
-         }
-       }
+       loadFeatureSettingsFile(fr, file, sourceType);
        /*
         * update feature settings table
         */
        }
      } catch (Exception ex)
      {
-       jalview.bin.Console.outPrintln("Error loading User Colour File\n" + ex);
+       jalview.bin.Console
+               .outPrintln("Error loading User Colour File\n" + ex);
      }
    }
  
             */
            String ttl = MessageManager
                    .formatMessage("label.select_colour_for", type);
 +          Object last=(Boolean)table.getValueAt(selectedRow, SHOW_COLUMN);
 +          table.setValueAt(Boolean.TRUE, selectedRow, SHOW_COLUMN);
            ColourChooserListener listener = new ColourChooserListener()
            {
              @Override
              {
                currentColor = new FeatureColour(c);
                table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
 +              table.setValueAt(Boolean.TRUE, selectedRow, SHOW_COLUMN);
                fireEditingStopped();
              }
  
              @Override
              public void cancel()
              {
 +              table.setValueAt(last, selectedRow, SHOW_COLUMN);
                fireEditingStopped();
              }
            };
            /*
             * variable colour and filters dialog
             */
 -          chooser = new FeatureTypeSettings(fr, type);
 +          boolean last=(Boolean)table.getValueAt(selectedRow, SHOW_COLUMN);
 +          table.setValueAt(Boolean.TRUE, selectedRow, SHOW_COLUMN);
 +          chooser = new FeatureTypeSettings(fr, type,last);
            if (!Platform.isJS())
            /**
             * Java only
      {
        if (button == e.getSource())
        {
 -        FeatureTypeSettings chooser = new FeatureTypeSettings(fr, type);
 +        boolean last = fr.getFeaturesDisplayed().isVisible(type);
 +        ((FeatureTableModel) table.getModel()).setValueAt(Boolean.TRUE, rowSelected, SHOW_COLUMN);
 +        FeatureTypeSettings chooser = new FeatureTypeSettings(fr, type,last);
          chooser.addActionListener(this);
          chooser.setRequestFocusEnabled(true);
          chooser.requestFocus();
                  .getData()[rowSelected];
          data[COLOUR_COLUMN] = currentColor;
          data[FILTER_COLUMN] = currentFilter;
 +        data[SHOW_COLUMN] = fr.getFeaturesDisplayed().isVisible(type);
 +                
          fireEditingStopped();
          // SwingJS needs an explicit repaint() here,
          // rather than relying upon no validation having
      refreshDisplay();
    }
  }
  class FeatureIcon implements Icon
  {
    FeatureColourI gcol;