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;
import jalview.datamodel.features.FeatureMatcherI;
import jalview.datamodel.features.FeatureMatcherSet;
import jalview.datamodel.features.FeatureMatcherSetI;
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.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;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
-import javax.swing.JDialog;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
+import javax.swing.ToolTipManager;
+import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
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
private static final int MIN_HEIGHT = 400;
+ private final static String BASE_TOOLTIP = MessageManager.getString("label.click_to_edit");
+
final FeatureRenderer fr;
public final AlignFrame af;
table = new JTable()
{
+
+// @Override
+// public void repaint() {
+// System.out.println("FS repaint");
+// super.repaint();
+//
+// }
+//
+// @Override
+// public void repaint(long tm, int x, int y, int width, int height) {
+// System.out.println("FS repaint " + x + " " + y + " " + width + " " + height);
+// super.repaint(tm, x, y, width, height);
+//
+// }
+// @Override
+// public void invalidate() {
+// if (isValid())
+// System.out.println("FS invalidating ");
+// super.invalidate();
+// }
+//
+// @Override
+// public void validate() {
+// System.out.println("FS validating " + isValid());
+// super.validate();
+// }
+
@Override
public String getToolTipText(MouseEvent e)
{
String tip = null;
int column = table.columnAtPoint(e.getPoint());
+ int row = table.rowAtPoint(e.getPoint());
+
switch (column)
{
case TYPE_COLUMN:
tip = JvSwingUtils.wrapTooltip(true, MessageManager
.getString("label.feature_settings_click_drag"));
break;
+ case COLOUR_COLUMN:
+ FeatureColourI colour = (FeatureColourI) table.getValueAt(row,
+ column);
+ tip = getColorTooltip(colour, true);
+ break;
case FILTER_COLUMN:
- int row = table.rowAtPoint(e.getPoint());
FeatureMatcherSet o = (FeatureMatcherSet) table.getValueAt(row,
column);
tip = o.isEmpty()
default:
break;
}
+
return tip;
}
+
+
+ /**
+ * Position the tooltip near the bottom edge of, and half way across, the
+ * current cell
+ */
+ @Override
+ public Point getToolTipLocation(MouseEvent e)
+ {
+ Point point = e.getPoint();
+ int column = table.columnAtPoint(point);
+ int row = table.rowAtPoint(point);
+ Rectangle r = getCellRect(row, column, false);
+ Point loc = new Point(r.x + r.width / 2, r.y + r.height - 3);
+ 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.setDefaultEditor(FeatureColour.class, new ColorEditor());
table.setDefaultRenderer(FeatureColour.class, new ColorRenderer());
- table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor(this));
+ table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor());
table.setDefaultRenderer(FeatureMatcherSet.class, new FilterRenderer());
TableColumn colourColumn = new TableColumn(COLOUR_COLUMN, 75,
- new ColorRenderer(), new ColorEditor(this));
+ new ColorRenderer(), new ColorEditor());
table.addColumn(colourColumn);
TableColumn filterColumn = new TableColumn(FILTER_COLUMN, 75,
- new FilterRenderer(), new FilterEditor(this));
+ new FilterRenderer(), new FilterEditor());
table.addColumn(filterColumn);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
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)
{
{
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());
}
}
});
inConstruction = false;
}
- protected void popupSort(final int rowSelected, final String type,
- final Object typeCol, final Map<String, float[][]> 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;
-
JPopupMenu men = new JPopupMenu(MessageManager
.formatMessage("label.settings_for_param", new String[]
{ type }));
- JMenuItem scr = new JMenuItem(
- MessageManager.getString("label.sort_by_score"));
- men.add(scr);
- final FeatureSettings me = this;
- scr.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- me.af.avc
- .sortAlignmentByFeatureScore(Arrays.asList(new String[]
- { type }));
- }
-
- });
- JMenuItem dens = new JMenuItem(
- MessageManager.getString("label.sort_by_density"));
- dens.addActionListener(new ActionListener()
- {
-
- @Override
- public void actionPerformed(ActionEvent e)
- {
- me.af.avc
- .sortAlignmentByFeatureDensity(Arrays.asList(new String[]
- { type }));
- }
-
- });
- men.add(dens);
+ final FeatureColourI featureColour = (FeatureColourI) typeCol;
/*
- * variable colour options include colour by label, by score,
- * by selected attribute text, or attribute value
+ * menu option to select (or deselect) variable colour
*/
final JCheckBoxMenuItem variableColourCB = new JCheckBoxMenuItem(
MessageManager.getString("label.variable_colour"));
{
if (e.getSource() == variableColourCB)
{
+ men.setVisible(true); // BH 2018 for JavaScript because this is a checkbox
+ men.setVisible(false); // BH 2018 for JavaScript because this is a checkbox
if (featureColour.isSimpleColour())
{
/*
* toggle simple colour to variable colour - show dialog
*/
- FeatureTypeSettings fc = new FeatureTypeSettings(me.fr, type);
+ FeatureTypeSettings fc = new FeatureTypeSettings(fr, type);
fc.addActionListener(this);
}
else
/*
* 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
table.setValueAt(new FeatureColour(c), rowSelected,
COLOUR_COLUMN);
table.validate();
- me.updateFeatureRenderer(
+ updateFeatureRenderer(
((FeatureTableModel) table.getModel()).getData(),
false);
}
};
- JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener);
+ JalviewColourChooser.showColourChooser(FeatureSettings.this, title,
+ featureColour.getMaxColour(), listener);
}
}
- else {
+ else
+ {
if (e.getSource() instanceof FeatureTypeSettings)
{
/*
*/
FeatureColourI fci = fr.getFeatureColours().get(type);
table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
- table.validate();
+ // BH 2018 setting a table value does not invalidate it.
+// System.out.println("FeatureSettings is valied" + table.isValid());
+// table.validate();
}
}
}
+ });
+
+ men.addSeparator();
+ JMenuItem scr = new JMenuItem(
+ MessageManager.getString("label.sort_by_score"));
+ men.add(scr);
+ scr.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ af.avc.sortAlignmentByFeatureScore(Arrays.asList(new String[]
+ { type }));
+ }
+ });
+ JMenuItem dens = new JMenuItem(
+ MessageManager.getString("label.sort_by_density"));
+ dens.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ af.avc.sortAlignmentByFeatureDensity(Arrays.asList(new String[]
+ { type }));
+ }
});
+ men.add(dens);
JMenuItem selCols = new JMenuItem(
MessageManager.getString("label.select_columns_containing"));
men.add(clearCols);
men.add(hideCols);
men.add(hideOtherCols);
- men.show(table, x, y);
+ men.show(table, pt.x, pt.y);
}
@Override
*/
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.setResponseHandler(0, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ File file = chooser.getSelectedFile();
+ load(file);
+ }
+ });
+ chooser.showOpenDialog(this);
}
/**
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<JalviewUserColours> 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);
*/
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);
+ }
}
/**
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);
}
/*
{
Iterator<FeatureMatcherI> 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);
+
+ // jaxbMarshaller.marshal(object, pout);
+ // marshaller.marshal(object);
+ out.flush();
- ucs.marshal(out);
+ // ucs.marshal(out);
out.close();
} catch (Exception ex)
{
this.add(settingsPane);
}
+ /**
+ * Answers a suitable tooltip to show on the colour cell of the table
+ *
+ * @param fcol
+ * @param withHint
+ * if true include 'click to edit' and similar text
+ * @return
+ */
+ public static String getColorTooltip(FeatureColourI fcol,
+ boolean withHint)
+ {
+ if (fcol == null)
+ {
+ return null;
+ }
+ if (fcol.isSimpleColour())
+ {
+ return withHint ? BASE_TOOLTIP : null;
+ }
+ String description = fcol.getDescription();
+ description = description.replaceAll("<", "<");
+ description = description.replaceAll(">", ">");
+ StringBuilder tt = new StringBuilder(description);
+ if (withHint)
+ {
+ tt.append("<br>").append(BASE_TOOLTIP).append("</br>");
+ }
+ return JvSwingUtils.wrapTooltip(true, tt.toString());
+ }
+
+ public static void renderGraduatedColor(JLabel comp, FeatureColourI gcol,
+ int w, int h)
+ {
+ boolean thr = false;
+ StringBuilder tx = new StringBuilder();
+
+ if (gcol.isColourByAttribute())
+ {
+ tx.append(FeatureMatcher
+ .toAttributeDisplayName(gcol.getAttributeName()));
+ }
+ else if (!gcol.isColourByLabel())
+ {
+ tx.append(MessageManager.getString("label.score"));
+ }
+ tx.append(" ");
+ if (gcol.isAboveThreshold())
+ {
+ thr = true;
+ tx.append(">");
+ }
+ if (gcol.isBelowThreshold())
+ {
+ thr = true;
+ tx.append("<");
+ }
+ if (gcol.isColourByLabel())
+ {
+ if (thr)
+ {
+ tx.append(" ");
+ }
+ if (!gcol.isColourByAttribute())
+ {
+ tx.append("Label");
+ }
+ comp.setIcon(null);
+ }
+ else
+ {
+ Color newColor = gcol.getMaxColour();
+ comp.setBackground(newColor);
+ // System.err.println("Width is " + w / 2);
+ Icon ficon = new FeatureIcon(gcol, comp.getBackground(), w, h, thr);
+ comp.setIcon(ficon);
+ // tt+="RGB value: Max (" + newColor.getRed() + ", "
+ // + newColor.getGreen() + ", " + newColor.getBlue()
+ // + ")\nMin (" + minCol.getRed() + ", " + minCol.getGreen()
+ // + ", " + minCol.getBlue() + ")");
+ }
+ comp.setHorizontalAlignment(SwingConstants.CENTER);
+ comp.setText(tx.toString());
+ }
+
// ///////////////////////////////////////////////////////////////////////
// http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
// ///////////////////////////////////////////////////////////////////////
class ColorRenderer extends JLabel implements TableCellRenderer
{
- javax.swing.border.Border unselectedBorder = null;
-
- javax.swing.border.Border selectedBorder = null;
+ Border unselectedBorder = null;
- final String baseTT = "Click to edit, right/apple click for menu.";
+ Border selectedBorder = null;
public ColorRenderer()
{
{
FeatureColourI cellColour = (FeatureColourI) color;
setOpaque(true);
- setToolTipText(baseTT);
setBackground(tbl.getBackground());
if (!cellColour.isSimpleColour())
{
renderGraduatedColor(comp, gcol, w, h);
}
- public static void renderGraduatedColor(JLabel comp, FeatureColourI gcol,
- int w, int h)
- {
- boolean thr = false;
- StringBuilder tt = new StringBuilder();
- StringBuilder tx = new StringBuilder();
-
- if (gcol.isColourByAttribute())
- {
- tx.append(String.join(":", gcol.getAttributeName()));
- }
- else if (!gcol.isColourByLabel())
- {
- tx.append(MessageManager.getString("label.score"));
- }
- tx.append(" ");
- if (gcol.isAboveThreshold())
- {
- thr = true;
- tx.append(">");
- tt.append("Thresholded (Above ").append(gcol.getThreshold())
- .append(") ");
- }
- if (gcol.isBelowThreshold())
- {
- thr = true;
- tx.append("<");
- tt.append("Thresholded (Below ").append(gcol.getThreshold())
- .append(") ");
- }
- if (gcol.isColourByLabel())
- {
- tt.append("Coloured by label text. ").append(tt);
- if (thr)
- {
- tx.append(" ");
- }
- if (!gcol.isColourByAttribute())
- {
- tx.append("Label");
- }
- comp.setIcon(null);
- }
- else
- {
- Color newColor = gcol.getMaxColour();
- comp.setBackground(newColor);
- // System.err.println("Width is " + w / 2);
- Icon ficon = new FeatureIcon(gcol, comp.getBackground(), w, h, thr);
- comp.setIcon(ficon);
- // tt+="RGB value: Max (" + newColor.getRed() + ", "
- // + newColor.getGreen() + ", " + newColor.getBlue()
- // + ")\nMin (" + minCol.getRed() + ", " + minCol.getGreen()
- // + ", " + minCol.getBlue() + ")");
- }
- comp.setHorizontalAlignment(SwingConstants.CENTER);
- comp.setText(tx.toString());
- if (tt.length() > 0)
- {
- if (comp.getToolTipText() == null)
- {
- comp.setToolTipText(tt.toString());
- }
- else
- {
- comp.setToolTipText(
- tt.append(" ").append(comp.getToolTipText()).toString());
- }
- }
- }
-
- class ColorEditor extends AbstractCellEditor
+ @SuppressWarnings("serial")
+class ColorEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener
{
- FeatureSettings me;
-
FeatureColourI currentColor;
FeatureTypeSettings chooser;
int rowSelected = 0;
- public ColorEditor(FeatureSettings fs)
+ public ColorEditor()
{
- this.me = fs;
// Set up the editor (from the table's point of view),
// which is a button.
// This button brings up the color chooser dialog,
/*
* 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);
+ table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+ fireEditingStopped();
}
+ @Override
+ public void cancel()
+ {
+ fireEditingStopped();
+ }
};
JalviewColourChooser.showColourChooser(button, ttl, currentColor.getColour(), listener);
}
/*
* variable colour and filters dialog
*/
- chooser = new FeatureTypeSettings(me.fr, type);
- /**
- * @j2sNative
- */
+ chooser = new FeatureTypeSettings(fr, type);
+ if (!Jalview.isJS())
{
chooser.setRequestFocusEnabled(true);
chooser.requestFocus();
}
chooser.addActionListener(this);
- // Make the renderer reappear.
fireEditingStopped();
}
}
* update table data without triggering updateFeatureRenderer
*/
currentColor = fr.getFeatureColours().get(type);
- FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type);
+ FeatureMatcherSetI currentFilter = fr.getFeatureFilter(type);
if (currentFilter == null)
{
currentFilter = new FeatureMatcherSet();
.getData()[rowSelected];
data[COLOUR_COLUMN] = currentColor;
data[FILTER_COLUMN] = currentFilter;
-
fireEditingStopped();
- me.table.validate();
+ // SwingJS needs an explicit repaint() here,
+ // rather than relying upon no validation having
+ // occurred since the stopEditing call was made.
+ // Its laying out has not been stopped by the modal frame
+ table.validate();
+ table.repaint();
}
}
- // Implement the one CellEditor method that AbstractCellEditor doesn't.
+ /**
+ * Override allows access to this method from anonymous inner classes
+ */
+ @Override
+ protected void fireEditingStopped()
+ {
+ super.fireEditingStopped();
+ }
+
+ // Implement the one CellEditor method that AbstractCellEditor doesn't.
@Override
public Object getCellEditorValue()
{
{
currentColor = (FeatureColourI) value;
this.rowSelected = row;
- type = me.table.getValueAt(row, TYPE_COLUMN).toString();
+ type = table.getValueAt(row, TYPE_COLUMN).toString();
button.setOpaque(true);
- button.setBackground(me.getBackground());
+ button.setBackground(FeatureSettings.this.getBackground());
if (!currentColor.isSimpleColour())
{
JLabel btn = new JLabel();
* as display text). On click in the cell, opens the Feature Display Settings
* dialog at the Filters tab.
*/
- class FilterEditor extends AbstractCellEditor
+ @SuppressWarnings("serial")
+class FilterEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener
{
- FeatureSettings me;
FeatureMatcherSetI currentFilter;
int rowSelected = 0;
- public FilterEditor(FeatureSettings me)
+ public FilterEditor()
{
- this.me = me;
button = new JButton();
button.setActionCommand(EDIT);
button.addActionListener(this);
{
if (button == e.getSource())
{
- FeatureTypeSettings chooser = new FeatureTypeSettings(me.fr, type);
+ FeatureTypeSettings chooser = new FeatureTypeSettings(fr, type);
chooser.addActionListener(this);
chooser.setRequestFocusEnabled(true);
chooser.requestFocus();
* update table data without triggering updateFeatureRenderer
*/
FeatureColourI currentColor = fr.getFeatureColours().get(type);
- currentFilter = me.fr.getFeatureFilter(type);
+ currentFilter = fr.getFeatureFilter(type);
if (currentFilter == null)
{
currentFilter = new FeatureMatcherSet();
}
+
Object[] data = ((FeatureTableModel) table.getModel())
.getData()[rowSelected];
data[COLOUR_COLUMN] = currentColor;
data[FILTER_COLUMN] = currentFilter;
fireEditingStopped();
- me.table.validate();
+ // SwingJS needs an explicit repaint() here,
+ // rather than relying upon no validation having
+ // occurred since the stopEditing call was made.
+ // Its laying out has not been stopped by the modal frame
+ table.validate();
+ table.repaint();
}
}
{
currentFilter = (FeatureMatcherSetI) value;
this.rowSelected = row;
- type = me.table.getValueAt(row, TYPE_COLUMN).toString();
+ type = table.getValueAt(row, TYPE_COLUMN).toString();
button.setOpaque(true);
- button.setBackground(me.getBackground());
+ button.setBackground(FeatureSettings.this.getBackground());
button.setText(currentFilter.toString());
- button.setToolTipText(currentFilter.toString());
button.setIcon(null);
return button;
}
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);
}
}
}