X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FFeatureSettings.java;h=e9b6f8cdf5fc9b06de55b10349bdd111a8f09f01;hb=879ce4991c4ab61bfe995995e23286e98e5fb955;hp=da4de25270a83da08b63dd32cb835a079ea0402b;hpb=586bad8991353e9b2199117c7227fd116460f6c8;p=jalview.git diff --git a/src/jalview/gui/FeatureSettings.java b/src/jalview/gui/FeatureSettings.java index da4de25..e9b6f8c 100644 --- a/src/jalview/gui/FeatureSettings.java +++ b/src/jalview/gui/FeatureSettings.java @@ -20,8 +20,10 @@ */ package jalview.gui; +import jalview.api.AlignViewportI; import jalview.api.FeatureColourI; import jalview.api.FeatureSettingsControllerI; +import jalview.api.ViewStyleI; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceI; import jalview.datamodel.features.FeatureMatcher; @@ -35,6 +37,7 @@ import jalview.schemes.FeatureColour; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean; +import jalview.viewmodel.styles.ViewStyle; import jalview.xml.binding.jalview.JalviewUserColours; import jalview.xml.binding.jalview.JalviewUserColours.Colour; import jalview.xml.binding.jalview.JalviewUserColours.Filter; @@ -44,6 +47,7 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.GridLayout; @@ -130,7 +134,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; @@ -143,6 +147,8 @@ public class FeatureSettings extends JPanel private float originalTransparency; + private ViewStyleI originalViewStyle; + private Map originalFilters; final JInternalFrame frame; @@ -190,6 +196,7 @@ public class FeatureSettings extends JPanel transparency.setMaximum(100 - originalTransparencyAsPercent); originalFilters = new HashMap<>(fr.getFeatureFilters()); // shallow copy + originalViewStyle = new ViewStyle(af.viewport.getViewStyle()); try { @@ -201,8 +208,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 +224,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, @@ -232,6 +237,7 @@ public class FeatureSettings extends JPanel default: break; } + return tip; } @@ -255,9 +261,6 @@ public class FeatureSettings extends JPanel tableHeader.setReorderingAllowed(false); table.setFont(new Font("Verdana", Font.PLAIN, 12)); - // 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()); @@ -402,8 +405,6 @@ public class FeatureSettings extends JPanel final Object typeCol, final Map minmax, int x, int y) { - final FeatureColourI featureColour = (FeatureColourI) typeCol; - JPopupMenu men = new JPopupMenu(MessageManager .formatMessage("label.settings_for_param", new String[] { type })); @@ -542,7 +543,7 @@ public class FeatureSettings extends JPanel { fr.setGroupVisibility(check.getText(), check.isSelected()); resetTable(new String[] { grp }); - af.alignPanel.paintAlignment(true, true); + refreshDisplay(); } }); groupPanel.add(check); @@ -640,7 +641,7 @@ public class FeatureSettings extends JPanel data[dataIndex][FILTER_COLUMN] = featureFilter == null ? new FeatureMatcherSet() : featureFilter; - data[dataIndex][SHOW_COLUMN] = new Boolean( + data[dataIndex][SHOW_COLUMN] = Boolean.valueOf( af.getViewport().getFeaturesDisplayed().isVisible(type)); dataIndex++; displayableTypes.remove(type); @@ -667,7 +668,7 @@ public class FeatureSettings extends JPanel data[dataIndex][FILTER_COLUMN] = featureFilter == null ? new FeatureMatcherSet() : featureFilter; - data[dataIndex][SHOW_COLUMN] = new Boolean(true); + data[dataIndex][SHOW_COLUMN] = Boolean.valueOf(true); dataIndex++; displayableTypes.remove(type); } @@ -1100,7 +1101,7 @@ public class FeatureSettings extends JPanel if (fr.setFeaturePriority(rowData, visibleNew)) { - af.alignPanel.paintAlignment(true, true); + refreshDisplay(); } } @@ -1198,22 +1199,6 @@ public class FeatureSettings extends JPanel } } }); - help.setFont(JvSwingUtils.getLabelFont()); - help.setText(MessageManager.getString("action.help")); - help.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - try - { - Help.showHelpWindow(HelpId.SequenceFeatureSettings); - } catch (HelpSetException e1) - { - e1.printStackTrace(); - } - } - }); JButton cancel = new JButton(MessageManager.getString("action.cancel")); cancel.setFont(JvSwingUtils.getLabelFont()); @@ -1225,6 +1210,7 @@ public class FeatureSettings extends JPanel fr.setTransparency(originalTransparency); fr.setFeatureFilters(originalFilters); updateFeatureRenderer(originalData); + af.getViewport().setViewStyle(originalViewStyle); close(); } }); @@ -1275,7 +1261,7 @@ public class FeatureSettings extends JPanel if (!inConstruction) { fr.setTransparency((100 - transparency.getValue()) / 100f); - af.alignPanel.paintAlignment(true, true); + refreshDisplay(); } } }); @@ -1284,8 +1270,37 @@ public class FeatureSettings extends JPanel transparency.setToolTipText( MessageManager.getString("label.transparency_tip")); - JPanel transPanel = new JPanel(new GridLayout(1, 2)); - bigPanel.add(transPanel, BorderLayout.SOUTH); + boolean nucleotide = af.getViewport().getAlignment().isNucleotide(); + JCheckBox showComplement = new JCheckBox( + "Show " + (nucleotide ? "protein" : "CDS") + " features"); + showComplement.setSelected(af.getViewport().isShowComplementFeatures()); + showComplement.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + af.getViewport() + .setShowComplementFeatures(showComplement.isSelected()); + refreshDisplay(); + } + }); + + JCheckBox showComplementOnTop = new JCheckBox("on top"); + showComplementOnTop + .setSelected(af.getViewport().isShowComplementFeaturesOnTop()); + showComplementOnTop.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + af.getViewport().setShowComplementFeaturesOnTop( + showComplementOnTop.isSelected()); + refreshDisplay(); + } + }); + + JPanel lowerPanel = new JPanel(new GridLayout(1, 2)); + bigPanel.add(lowerPanel, BorderLayout.SOUTH); JPanel transbuttons = new JPanel(new GridLayout(5, 1)); transbuttons.add(optimizeOrder); @@ -1293,8 +1308,21 @@ public class FeatureSettings extends JPanel transbuttons.add(sortByScore); transbuttons.add(sortByDens); transbuttons.add(help); - transPanel.add(transparency); - transPanel.add(transbuttons); + + boolean hasComplement = af.getViewport().getCodingComplement() != null; + JPanel transPanelLeft = new JPanel( + new GridLayout(hasComplement ? 3 : 2, 1)); + transPanelLeft.add(new JLabel(" Colour transparency" + ":")); + transPanelLeft.add(transparency); + if (hasComplement) + { + JPanel cp = new JPanel(new FlowLayout(FlowLayout.LEFT)); + cp.add(showComplement); + cp.add(showComplementOnTop); + transPanelLeft.add(cp); + } + lowerPanel.add(transPanelLeft); + lowerPanel.add(transbuttons); JPanel buttonPanel = new JPanel(); buttonPanel.add(ok); @@ -1308,12 +1336,31 @@ public class FeatureSettings extends JPanel } /** + * Repaints alignment, structure and overview (if shown). If there is a + * complementary view which is showing this view's features, then also + * repaints that. + */ + void refreshDisplay() + { + af.alignPanel.paintAlignment(true, true); + AlignViewportI complement = af.getViewport().getCodingComplement(); + if (complement != null && complement.isShowComplementFeatures()) + { + AlignFrame af2 = Desktop.getAlignFrameFor(complement); + af2.alignPanel.paintAlignment(true, true); + } + } + + /** * 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) { @@ -1321,13 +1368,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()); } @@ -1443,13 +1493,22 @@ public class FeatureSettings extends JPanel } /** - * Answers the class of the object in column c of the first row of the table + * Answers the class of column c of the table */ @Override public Class getColumnClass(int c) { - Object v = getValueAt(0, c); - return v == null ? null : v.getClass(); + switch (c) + { + case TYPE_COLUMN: + return String.class; + case COLOUR_COLUMN: + return FeatureColour.class; + case FILTER_COLUMN: + return FeatureMatcherSet.class; + default: + return Boolean.class; + } } @Override