X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=ea3a6677f475593cca49604dbd4f63bbeda389e8;hb=f20ff42eac30f33cb69635ba3217a6224dbeb555;hp=7fb3af9fffd4e6a44086fb29a03fd22cb2cc717c;hpb=8334a9d216c71bd0960ea01e2991c26382a139b7;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index 7fb3af9..ea3a667 100644 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -29,6 +29,7 @@ import jalview.datamodel.features.FeatureMatcherI; import jalview.datamodel.features.FeatureMatcherSet; import jalview.datamodel.features.FeatureMatcherSetI; import jalview.gui.Help.HelpId; +import jalview.gui.JalviewColourChooser.ColourChooserListener; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.schemabinding.version2.Filter; @@ -37,6 +38,7 @@ 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 java.awt.BorderLayout; @@ -80,8 +82,6 @@ import javax.swing.Icon; 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; @@ -93,6 +93,7 @@ import javax.swing.JSlider; 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; @@ -124,7 +125,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; @@ -135,9 +136,9 @@ public class FeatureSettings extends JPanel */ Object[][] originalData; - private float originalTransparency; + float originalTransparency; - private Map originalFilters; + Map originalFilters; final JInternalFrame frame; @@ -167,7 +168,7 @@ public class FeatureSettings extends JPanel /* * true when Feature Settings are updating from feature renderer */ - private boolean handlingUpdate = false; + boolean handlingUpdate = false; /* * holds {featureCount, totalExtent} for each feature type @@ -201,8 +202,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) { @@ -219,7 +218,7 @@ public class FeatureSettings extends JPanel case COLOUR_COLUMN: FeatureColourI colour = (FeatureColourI) table.getValueAt(row, column); - tip = getColorTooltip(colour); + tip = getColorTooltip(colour, true); break; case FILTER_COLUMN: FeatureMatcherSet o = (FeatureMatcherSet) table.getValueAt(row, @@ -231,11 +230,12 @@ public class FeatureSettings extends JPanel default: break; } + return tip; } /** - * Position the tooltip at the bottom edge of, and half way across, the + * Position the tooltip near the bottom edge of, and half way across, the * current cell */ @Override @@ -245,22 +245,19 @@ public class FeatureSettings extends JPanel 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); + Point loc = new Point(r.x + r.width / 2, r.y + r.height - 3); return loc; } }; 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()); table.setDefaultEditor(FeatureMatcherSet.class, new FilterEditor(this)); table.setDefaultRenderer(FeatureMatcherSet.class, new FilterRenderer()); - + TableColumn colourColumn = new TableColumn(COLOUR_COLUMN, 75, new ColorRenderer(), new ColorEditor(this)); table.addColumn(colourColumn); @@ -440,40 +437,53 @@ public class FeatureSettings extends JPanel * variable colour options include colour by label, by score, * by selected attribute text, or attribute value */ - final JCheckBoxMenuItem mxcol = new JCheckBoxMenuItem( + final JCheckBoxMenuItem variableColourCB = new JCheckBoxMenuItem( MessageManager.getString("label.variable_colour")); - mxcol.setSelected(!featureColour.isSimpleColour()); - men.add(mxcol); - mxcol.addActionListener(new ActionListener() + variableColourCB.setSelected(!featureColour.isSimpleColour()); + men.add(variableColourCB); + + /* + * checkbox action listener doubles up as listener to OK + * from the variable colour / filters dialog + */ + variableColourCB.addActionListener(new ActionListener() { - JColorChooser colorChooser; - @Override public void actionPerformed(ActionEvent e) { - if (e.getSource() == mxcol) + if (e.getSource() == variableColourCB) { if (featureColour.isSimpleColour()) { + /* + * toggle simple colour to variable colour - show dialog + */ FeatureTypeSettings fc = new FeatureTypeSettings(me.fr, type); fc.addActionListener(this); } else { - // bring up simple color chooser - colorChooser = new JColorChooser(); - String title = MessageManager - .getString("label.select_colour"); - JDialog dialog = JColorChooser.createDialog(me, - title, true, // modal - colorChooser, this, // OK button handler - null); // no CANCEL button handler - colorChooser.setColor(featureColour.getMaxColour()); - dialog.setVisible(true); + /* + * toggle variable to simple colour - show colour chooser + */ + String title = MessageManager.getString("label.select_colour"); + ColourChooserListener listener = new ColourChooserListener() + { + @Override + public void colourSelected(Color c) + { + table.setValueAt(new FeatureColour(c), rowSelected, + COLOUR_COLUMN); + table.validate(); + me.updateFeatureRenderer( + ((FeatureTableModel) table.getModel()).getData(), + false); + } + }; + JalviewColourChooser.showColourChooser(me, title, featureColour.getMaxColour(), listener); } } - else - { + else { if (e.getSource() instanceof FeatureTypeSettings) { /* @@ -481,18 +491,8 @@ public class FeatureSettings extends JPanel * colour will have already been set in the FeatureRenderer */ FeatureColourI fci = fr.getFeatureColours().get(type); - table.setValueAt(fci, rowSelected, 1); - table.validate(); - } - else - { - // probably the color chooser! - table.setValueAt(new FeatureColour(colorChooser.getColor()), - rowSelected, 1); + table.setValueAt(fci, rowSelected, COLOUR_COLUMN); table.validate(); - me.updateFeatureRenderer( - ((FeatureTableModel) table.getModel()).getData(), - false); } } } @@ -879,14 +879,14 @@ public class FeatureSettings extends JPanel 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.response(new RunResponse(JalviewFileChooser.APPROVE_OPTION){ + + @Override + public void run() { + File file = chooser.getSelectedFile(); + load(file); + }}); + chooser.showOpenDialog(this); } /** @@ -961,13 +961,12 @@ public class FeatureSettings extends JPanel 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); + } } /** @@ -1135,7 +1134,7 @@ public class FeatureSettings extends JPanel * @param data * @param visibleNew */ - private void updateFeatureRenderer(Object[][] data, boolean visibleNew) + void updateFeatureRenderer(Object[][] data, boolean visibleNew) { FeatureSettingsBean[] rowData = getTableAsBeans(data); @@ -1352,9 +1351,12 @@ public class FeatureSettings extends JPanel * 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) + public static String getColorTooltip(FeatureColourI fcol, + boolean withHint) { if (fcol == null) { @@ -1362,13 +1364,16 @@ public class FeatureSettings extends JPanel } if (fcol.isSimpleColour()) { - return BASE_TOOLTIP; + return withHint ? BASE_TOOLTIP : null; } String description = fcol.getDescription(); description = description.replaceAll("<", "<"); description = description.replaceAll(">", ">"); StringBuilder tt = new StringBuilder(description); - tt.append("
").append(BASE_TOOLTIP).append("
"); + if (withHint) + { + tt.append("
").append(BASE_TOOLTIP).append("
"); + } return JvSwingUtils.wrapTooltip(true, tt.toString()); } @@ -1647,17 +1652,13 @@ public class FeatureSettings extends JPanel JButton button; - JColorChooser colorChooser; - - JDialog dialog; - protected static final String EDIT = "edit"; int rowSelected = 0; - public ColorEditor(FeatureSettings me) + public ColorEditor(FeatureSettings fs) { - this.me = me; + 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, @@ -1666,73 +1667,69 @@ public class FeatureSettings extends JPanel button.setActionCommand(EDIT); button.addActionListener(this); button.setBorderPainted(false); - // Set up the dialog that the button brings up. - colorChooser = new JColorChooser(); - dialog = JColorChooser.createDialog(button, - MessageManager.getString("label.select_colour"), true, // modal - colorChooser, this, // OK button handler - null); // no CANCEL button handler } /** - * Handles events from the editor button and from the dialog's OK button. + * Handles events from the editor button, and from the colour/filters + * dialog's OK button */ @Override public void actionPerformed(ActionEvent e) { - // todo test e.getSource() instead here - if (EDIT.equals(e.getActionCommand())) + if (button == e.getSource()) { - // The user has clicked the cell, so - // bring up the dialog. if (currentColor.isSimpleColour()) { - // bring up simple color chooser - button.setBackground(currentColor.getColour()); - colorChooser.setColor(currentColor.getColour()); - dialog.setVisible(true); + /* + * simple colour chooser + */ + String ttl = MessageManager.getString("label.select_colour"); + ColourChooserListener listener = new ColourChooserListener() { + @Override + public void colourSelected(Color c) + { + currentColor = new FeatureColour(c); + me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN); + } + }; + JalviewColourChooser.showColourChooser(button, ttl, currentColor.getColour(), listener); } else { - // bring up graduated chooser. + /* + * variable colour and filters dialog + */ chooser = new FeatureTypeSettings(me.fr, type); - chooser.setRequestFocusEnabled(true); - chooser.requestFocus(); + /** + * @j2sNative + */ + { + chooser.setRequestFocusEnabled(true); + chooser.requestFocus(); + } chooser.addActionListener(this); - chooser.showTab(true); + // Make the renderer reappear. + fireEditingStopped(); } - // Make the renderer reappear. - fireEditingStopped(); - } else { - if (currentColor.isSimpleColour()) - { - /* - * read off colour picked in colour chooser after OK pressed - */ - currentColor = new FeatureColour(colorChooser.getColor()); - me.table.setValueAt(currentColor, rowSelected, COLOUR_COLUMN); - } - else + /* + * after OK in variable colour dialog, any changes to colour + * (or filters!) are already set in FeatureRenderer, so just + * update table data without triggering updateFeatureRenderer + */ + currentColor = fr.getFeatureColours().get(type); + FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type); + if (currentFilter == null) { - /* - * after OK in variable colour dialog, any changes to colour - * (or filters!) are already set in FeatureRenderer, so just - * update table data without triggering updateFeatureRenderer - */ - currentColor = fr.getFeatureColours().get(type); - FeatureMatcherSetI currentFilter = me.fr.getFeatureFilter(type); - if (currentFilter == null) - { - currentFilter = new FeatureMatcherSet(); - } - Object[] data = ((FeatureTableModel) table.getModel()) - .getData()[rowSelected]; - data[COLOUR_COLUMN] = currentColor; - data[FILTER_COLUMN] = currentFilter; + currentFilter = new FeatureMatcherSet(); } + Object[] data = ((FeatureTableModel) table.getModel()) + .getData()[rowSelected]; + data[COLOUR_COLUMN] = currentColor; + data[FILTER_COLUMN] = currentFilter; + fireEditingStopped(); me.table.validate(); } @@ -1825,7 +1822,6 @@ public class FeatureSettings extends JPanel chooser.getWidth(), chooser.getHeight()); chooser.validate(); } - chooser.showTab(false); fireEditingStopped(); } else if (e.getSource() instanceof Component)