From: James Procter Date: Wed, 1 Nov 2023 19:16:55 +0000 (+0000) Subject: Merge branch 'feature/JAL-4315_fc_draganddrop' into develop X-Git-Tag: Release_2_11_3_0~3^2~24 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=f0bba4cb65260c4e7f79c30cd442123aeb1b312f;hp=-c;p=jalview.git Merge branch 'feature/JAL-4315_fc_draganddrop' into develop --- f0bba4cb65260c4e7f79c30cd442123aeb1b312f diff --combined src/jalview/gui/AlignFrame.java index aca8baa,958ebcc..4f13a78 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@@ -4818,7 -4818,7 +4818,7 @@@ public class AlignFrame extends GAlignF * Object[] { String,SequenceI} */ ArrayList filesmatched = new ArrayList<>(); - ArrayList filesnotmatched = new ArrayList<>(); + ArrayList filesnotmatched = new ArrayList<>(); for (int i = 0; i < files.size(); i++) { // BH 2018 @@@ -4864,9 -4864,9 +4864,9 @@@ } mtch = idm.findAllIdMatches(pdbfn); } + FileFormatI type=null; if (mtch != null) { - FileFormatI type; try { type = new IdentifyFile().identify(file, protocol); @@@ -4882,7 -4882,7 +4882,7 @@@ } // 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; @@@ -4936,7 -4936,7 +4936,7 @@@ */ for (Object[] o : filesmatched) { - filesnotmatched.add(o[0]); + filesnotmatched.add(new Object[] { o[0], o[1]}); } } } @@@ -4958,9 -4958,9 +4958,9 @@@ { return; } - for (Object fn : filesnotmatched) + for (Object[] fn : filesnotmatched) { - loadJalviewDataFile(fn, null, null, null); + loadJalviewDataFile(fn[0], (DataSourceType) fn[1], (FileFormatI)fn[2], null); } } @@@ -5056,7 -5056,19 +5056,19 @@@ { 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)); @@@ -5842,8 -5854,6 +5854,8 @@@ } } alignPanel.validateAnnotationDimensions(true); + // TODO this triggers relayout of annotation panel - otherwise annotation label height is different to panel height + alignPanel.fontChanged(); alignPanel.alignmentChanged(); } diff --combined src/jalview/gui/FeatureSettings.java index 34c1db0,3eccdf0..57e5943 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@@ -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 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 * @@@ -962,50 -1024,21 +1024,21 @@@ */ 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 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 */ @@@ -1019,7 -1052,8 +1052,8 @@@ } } 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); } } @@@ -1885,8 -1919,6 +1919,8 @@@ */ 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 @@@ -1894,14 -1926,12 +1928,14 @@@ { 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(); } }; @@@ -1913,9 -1943,7 +1947,9 @@@ /* * 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 @@@ -2041,9 -2069,7 +2075,9 @@@ { 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(); @@@ -2075,8 -2101,6 +2109,8 @@@ .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 @@@ -2129,7 -2153,6 +2163,6 @@@ refreshDisplay(); } } - class FeatureIcon implements Icon { FeatureColourI gcol;