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 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;
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)
{
FeatureMatcherSet o = (FeatureMatcherSet) table.getValueAt(row,
column);
tip = o.isEmpty()
- ? MessageManager.getString("label.filters_tooltip")
+ ? MessageManager
+ .getString("label.configure_feature_tooltip")
: o.toString();
break;
default:
table.getTableHeader().setFont(new Font("Verdana", Font.PLAIN, 12));
ToolTipManager.sharedInstance().registerComponent(table);
- 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);
data[i + direction] = temp;
}
updateFeatureRenderer(data);
- repaintTable();
+ table.repaint();
selectedRow = newRow;
}
}
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"));
/*
* 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
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
FeatureColourI fci = fr.getFeatureColours().get(type);
table.setValueAt(fci, rowSelected, COLOUR_COLUMN);
// BH 2018 setting a table value does not invalidate it.
- System.out.println("FeatureSettings is valied" + table.isValid());
-// table.validate();
+// 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"));
chooser.setDialogTitle(
MessageManager.getString("label.load_feature_colours"));
chooser.setToolTipText(MessageManager.getString("action.load"));
- chooser.addResponse(new RunResponse(JalviewFileChooser.APPROVE_OPTION){
-
- @Override
- public void run() {
- File file = chooser.getSelectedFile();
- load(file);
- }});
+ chooser.setResponseHandler(0, new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ File file = chooser.getSelectedFile();
+ load(file);
+ }
+ });
chooser.showOpenDialog(this);
}
.getData();
ensureOrder(data);
updateFeatureRenderer(data, false);
- repaintTable();
+ table.repaint();
}
} catch (Exception ex)
{
data[i][SHOW_COLUMN] = !(Boolean) data[i][SHOW_COLUMN];
}
updateFeatureRenderer(data, true);
- repaintTable();
+ table.repaint();
}
public void orderByAvWidth()
table.repaint();
}
- /**
- * Repaints the table using alternative code for Java and J2S
- */
- private void repaintTable()
- {
- table.repaint();
-// 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$();
-// */
-// {
-// }
- }
-
public void close()
{
try
private String[] columnNames = {
MessageManager.getString("label.feature_type"),
MessageManager.getString("action.colour"),
- MessageManager.getString("label.filter"),
+ MessageManager.getString("label.configuration"),
MessageManager.getString("label.show") };
private Object[][] data;
renderGraduatedColor(comp, gcol, w, h);
}
- 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,
public void colourSelected(Color c)
{
currentColor = new FeatureColour(c);
- me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
+ table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN);
fireEditingStopped();
}
@Override
/*
* variable colour and filters dialog
*/
- chooser = new FeatureTypeSettings(me.fr, type);
+ chooser = new FeatureTypeSettings(fr, type);
if (!Jalview.isJS())
{
chooser.setRequestFocusEnabled(true);
* 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.setIcon(null);
return button;