X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=9165a3d314a13ccb8fc393c3ac82b54bd16c0324;hb=1e28a196997a1e0b8b74d468bfd3df8ec74c1337;hp=0e18d91c88e475fba7670958c577d3925d88b27a;hpb=f13c8f13408308b89e271ee9f4f11bd0493c1973;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 0e18d91..9165a3d 100644 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -22,6 +22,7 @@ package jalview.gui; import jalview.api.FeatureColourI; import jalview.api.FeatureSettingsControllerI; +import jalview.bin.Jalview; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.datamodel.features.FeatureMatcher; @@ -32,13 +33,15 @@ import jalview.gui.Help.HelpId; import jalview.gui.JalviewColourChooser.ColourChooserListener; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; -import jalview.schemabinding.version2.Filter; -import jalview.schemabinding.version2.JalviewUserColours; -import jalview.schemabinding.version2.MatcherSet; import jalview.schemes.FeatureColour; import jalview.util.MessageManager; import jalview.util.Platform; +import jalview.util.dialogrunner.RunResponse; import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean; +import jalview.xml.binding.jalview.JalviewUserColours; +import jalview.xml.binding.jalview.JalviewUserColours.Colour; +import jalview.xml.binding.jalview.JalviewUserColours.Filter; +import jalview.xml.binding.jalview.ObjectFactory; import java.awt.BorderLayout; import java.awt.Color; @@ -96,10 +99,16 @@ import javax.swing.ToolTipManager; import javax.swing.border.Border; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import javax.swing.plaf.TableUI; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.Marshaller; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; public class FeatureSettings extends JPanel implements FeatureSettingsControllerI @@ -124,7 +133,7 @@ public class FeatureSettings extends JPanel private static final int MIN_HEIGHT = 400; - private final static String BASE_TOOLTIP = "Click to edit, right-click for menu"; + private final static String BASE_TOOLTIP = MessageManager.getString("label.click_to_edit"); final FeatureRenderer fr; @@ -201,8 +210,6 @@ public class FeatureSettings extends JPanel table = new JTable() { - static final String tt = "Click to edit, right-click for menu"; // todo i18n - @Override public String getToolTipText(MouseEvent e) { @@ -231,8 +238,10 @@ public class FeatureSettings extends JPanel default: break; } + return tip; } + /** * Position the tooltip near the bottom edge of, and half way across, the @@ -249,13 +258,15 @@ public class FeatureSettings extends JPanel return loc; } }; + + // next line is needed to avoid (quiet) exceptions thrown + // when column ordering changes so that the above constants + // no longer apply. + table.getTableHeader().setReorderingAllowed(false); // BH 2018 + table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12)); - table.setFont(new Font("Verdana", Font.PLAIN, 12)); ToolTipManager.sharedInstance().registerComponent(table); - // table.setDefaultRenderer(Color.class, new ColorRenderer()); - // table.setDefaultEditor(Color.class, new ColorEditor(this)); - // table.setDefaultEditor(FeatureColour.class, new ColorEditor(this)); table.setDefaultRenderer(FeatureColour.class, new ColorRenderer()); @@ -282,8 +293,7 @@ public class FeatureSettings extends JPanel if (evt.isPopupTrigger()) { Object colour = table.getValueAt(selectedRow, COLOUR_COLUMN); - popupSort(selectedRow, type, colour, fr.getMinMax(), evt.getX(), - evt.getY()); + showPopupMenu(selectedRow, type, colour, evt.getPoint()); } else if (evt.getClickCount() == 2) { @@ -304,8 +314,7 @@ public class FeatureSettings extends JPanel { String type = (String) table.getValueAt(selectedRow, TYPE_COLUMN); Object colour = table.getValueAt(selectedRow, COLOUR_COLUMN); - popupSort(selectedRow, type, colour, fr.getMinMax(), evt.getX(), - evt.getY()); + showPopupMenu(selectedRow, type, colour, evt.getPoint()); } } }); @@ -333,7 +342,7 @@ public class FeatureSettings extends JPanel data[i + direction] = temp; } updateFeatureRenderer(data); - table.repaint(); + repaintTable(); selectedRow = newRow; } } @@ -396,9 +405,17 @@ public class FeatureSettings extends JPanel inConstruction = false; } - protected void popupSort(final int rowSelected, final String type, - final Object typeCol, final Map minmax, int x, - int y) + /** + * Constructs and shows a popup menu of possible actions on the selected row and + * feature type + * + * @param rowSelected + * @param type + * @param typeCol + * @param pt + */ + protected void showPopupMenu(final int rowSelected, final String type, + final Object typeCol, final Point pt) { final FeatureColourI featureColour = (FeatureColourI) typeCol; @@ -419,7 +436,6 @@ public class FeatureSettings extends JPanel .sortAlignmentByFeatureScore(Arrays.asList(new String[] { type })); } - }); JMenuItem dens = new JMenuItem( MessageManager.getString("label.sort_by_density")); @@ -433,7 +449,6 @@ public class FeatureSettings extends JPanel .sortAlignmentByFeatureDensity(Arrays.asList(new String[] { type })); } - }); men.add(dens); @@ -470,7 +485,7 @@ public class FeatureSettings extends JPanel /* * toggle variable to simple colour - show colour chooser */ - String title = MessageManager.getString("label.select_colour"); + String title = MessageManager.formatMessage("label.select_colour_for", type); ColourChooserListener listener = new ColourChooserListener() { @Override @@ -487,7 +502,8 @@ public class FeatureSettings extends JPanel JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener); } } - else { + else + { if (e.getSource() instanceof FeatureTypeSettings) { /* @@ -500,7 +516,6 @@ public class FeatureSettings extends JPanel } } } - }); JMenuItem selCols = new JMenuItem( @@ -549,7 +564,7 @@ public class FeatureSettings extends JPanel men.add(clearCols); men.add(hideCols); men.add(hideOtherCols); - men.show(table, x, y); + men.show(table, pt.x, pt.y); } @Override @@ -877,23 +892,22 @@ public class FeatureSettings extends JPanel */ void load() { - // TODO: JAL-3048 relies on Castor XML parsing: not needed for JS-jalview core - // functionalty - JalviewFileChooser chooser = new JalviewFileChooser("fc", SEQUENCE_FEATURE_COLOURS); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( MessageManager.getString("label.load_feature_colours")); chooser.setToolTipText(MessageManager.getString("action.load")); - - int value = chooser.showOpenDialog(this); - - if (value == JalviewFileChooser.APPROVE_OPTION) - { - File file = chooser.getSelectedFile(); - load(file); - } + chooser.addResponse(0, new RunResponse(JalviewFileChooser.APPROVE_OPTION) + { + @Override + public void run() + { + File file = chooser.getSelectedFile(); + load(file); + } + }); + chooser.showOpenDialog(this); } /** @@ -908,30 +922,39 @@ public class FeatureSettings extends JPanel InputStreamReader in = new InputStreamReader( new FileInputStream(file), "UTF-8"); - JalviewUserColours jucs = JalviewUserColours.unmarshal(in); + 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.getColourCount() - 1; i >= 0; i--) + for (int i = jucs.getColour().size() - 1; i >= 0; i--) { - jalview.schemabinding.version2.Colour newcol = jucs.getColour(i); - FeatureColourI colour = Jalview2XML.unmarshalColour(newcol); + 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.getColourCount()); + 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.getFilterCount(); i++) + for (int i = 0; i < jucs.getFilter().size(); i++) { - jalview.schemabinding.version2.Filter filterModel = jucs - .getFilter(i); + Filter filterModel = jucs.getFilter().get(i); String featureType = filterModel.getFeatureType(); - FeatureMatcherSetI filter = Jalview2XML.unmarshalFilter(featureType, - filterModel.getMatcherSet()); + FeatureMatcherSetI filter = jalview.project.Jalview2XML + .parseFilter(featureType, filterModel.getMatcherSet()); if (!filter.isEmpty()) { fr.setFeatureFilter(featureType, filter); @@ -948,7 +971,7 @@ public class FeatureSettings extends JPanel .getData(); ensureOrder(data); updateFeatureRenderer(data, false); - table.repaint(); + repaintTable(); } } catch (Exception ex) { @@ -962,20 +985,18 @@ public class FeatureSettings extends JPanel */ void save() { - // TODO: JAL-3048 not needed for Jalview-JS - save colours JalviewFileChooser chooser = new JalviewFileChooser("fc", SEQUENCE_FEATURE_COLOURS); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle( MessageManager.getString("label.save_feature_colours")); chooser.setToolTipText(MessageManager.getString("action.save")); - - int value = chooser.showSaveDialog(this); - - if (value == JalviewFileChooser.APPROVE_OPTION) - { - save(chooser.getSelectedFile()); - } + int option = chooser.showSaveDialog(this); + if (option == JalviewFileChooser.APPROVE_OPTION) + { + File file = chooser.getSelectedFile(); + save(file); + } } /** @@ -1014,9 +1035,9 @@ public class FeatureSettings extends JPanel for (String featureType : sortedTypes) { FeatureColourI fcol = fr.getFeatureStyle(featureType); - jalview.schemabinding.version2.Colour col = Jalview2XML.marshalColour( - featureType, fcol); - ucs.addColour(col); + Colour col = jalview.project.Jalview2XML.marshalColour(featureType, + fcol); + ucs.getColour().add(col); } /* @@ -1029,16 +1050,26 @@ public class FeatureSettings extends JPanel { Iterator iterator = filter.getMatchers().iterator(); FeatureMatcherI firstMatcher = iterator.next(); - MatcherSet ms = Jalview2XML.marshalFilter(firstMatcher, iterator, + jalview.xml.binding.jalview.FeatureMatcherSet ms = jalview.project.Jalview2XML + .marshalFilter(firstMatcher, iterator, filter.isAnded()); Filter filterModel = new Filter(); filterModel.setFeatureType(featureType); filterModel.setMatcherSet(ms); - ucs.addFilter(filterModel); + ucs.getFilter().add(filterModel); } } + JAXBContext jaxbContext = JAXBContext + .newInstance(JalviewUserColours.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); + jaxbMarshaller.marshal( + new ObjectFactory().createJalviewUserColours(ucs), out); - ucs.marshal(out); + // jaxbMarshaller.marshal(object, pout); + // marshaller.marshal(object); + out.flush(); + + // ucs.marshal(out); out.close(); } catch (Exception ex) { @@ -1054,7 +1085,7 @@ public class FeatureSettings extends JPanel data[i][SHOW_COLUMN] = !(Boolean) data[i][SHOW_COLUMN]; } updateFeatureRenderer(data, true); - table.repaint(); + repaintTable(); } public void orderByAvWidth() @@ -1120,6 +1151,29 @@ public class FeatureSettings extends JPanel table.repaint(); } + /** + * Repaints the table using alternative code for Java and J2S + */ + private void repaintTable() + { + if (true) + return; + // BH 2018 + // Here is a needed intervention + // because generally we don't "repaint" + // the table. We re-create the HTML divs + // that is associated with it. A better + // way to do this would be to fire a property change. + @SuppressWarnings("unused") + TableUI ui = table.getUI(); + /** + * @j2sNative ui.repaintTable$(); + */ + { + table.repaint(); + } + } + public void close() { try @@ -1371,9 +1425,9 @@ public class FeatureSettings extends JPanel { return null; } - if (fcol.isSimpleColour() && withHint) + if (fcol.isSimpleColour()) { - return BASE_TOOLTIP; + return withHint ? BASE_TOOLTIP : null; } String description = fcol.getDescription(); description = description.replaceAll("<", "<"); @@ -1692,14 +1746,21 @@ public class FeatureSettings extends JPanel /* * simple colour chooser */ - String ttl = MessageManager.getString("label.select_colour"); - ColourChooserListener listener = new ColourChooserListener() { + String ttl = MessageManager.formatMessage("label.select_colour_for", type); + ColourChooserListener listener = new ColourChooserListener() + { @Override public void colourSelected(Color c) { currentColor = new FeatureColour(c); me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN); + fireEditingStopped(); } + @Override + public void cancel() + { + fireEditingStopped(); + } }; JalviewColourChooser.showColourChooser(button, ttl, currentColor.getColour(), listener); } @@ -1709,15 +1770,12 @@ public class FeatureSettings extends JPanel * variable colour and filters dialog */ chooser = new FeatureTypeSettings(me.fr, type); - /** - * @j2sNative - */ + if (!Jalview.isJS()) { chooser.setRequestFocusEnabled(true); chooser.requestFocus(); } chooser.addActionListener(this); - // Make the renderer reappear. fireEditingStopped(); } } @@ -1955,7 +2013,8 @@ class FeatureIcon implements Icon g.fillRect(s1, 0, e1 - s1, height); } g.setColor(gcol.getMaxColour()); - g.fillRect(0, e1, width - e1, height); +// g.fillRect(0, e1, width - e1, height); // BH 2018 + g.fillRect(e1, 0, width - e1, height); } } }