X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=8059935f0212c97d24fc51208b96de2d4975cdd5;hb=2a7635954a40451d363a03e71393bf558413ef1e;hp=b574dddd50d0fe7d608473cf31b800bf8d129080;hpb=ec335385cbf75abd45251dd673f99fb023c5fd43;p=jalview.git
diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java
index b574ddd..8059935 100644
--- a/src/jalview/gui/PopupMenu.java
+++ b/src/jalview/gui/PopupMenu.java
@@ -46,9 +46,11 @@ import jalview.schemes.Blosum62ColourScheme;
import jalview.schemes.ColourSchemeI;
import jalview.schemes.ColourSchemes;
import jalview.schemes.PIDColourScheme;
+import jalview.schemes.ResidueColourScheme;
import jalview.util.GroupUrlLink;
import jalview.util.GroupUrlLink.UrlStringTooLongException;
import jalview.util.MessageManager;
+import jalview.util.StringUtils;
import jalview.util.UrlLink;
import java.awt.Color;
@@ -67,11 +69,13 @@ import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Vector;
+import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
/**
* DOCUMENT ME!
@@ -91,6 +95,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
+ protected JRadioButtonMenuItem annotationColour;
+
protected JMenuItem modifyConservation = new JMenuItem();
AlignmentPanel ap;
@@ -400,9 +406,20 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
}
}
}
- // for the case when no sequences are even visible
+
+ /*
+ * offer 'Reveal All'
+ * - in the IdPanel (seq not null) if any sequence is hidden
+ * - in the IdPanel or SeqPanel if all sequences are hidden (seq is null)
+ */
if (alignPanel.av.hasHiddenRows())
{
+ boolean addOption = seq != null;
+ if (!addOption && alignPanel.av.getAlignment().getHeight() == 0)
+ {
+ addOption = true;
+ }
+ if (addOption)
{
menuItem = new JMenuItem(
MessageManager.getString("action.reveal_all"));
@@ -418,7 +435,6 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
}
}
});
-
add(menuItem);
}
}
@@ -528,7 +544,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
*/
protected void addFeatureDetails(List features)
{
- if (features.isEmpty())
+ if (features == null || features.isEmpty())
{
return;
}
@@ -549,11 +565,27 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
{
desc = String.format("%s %d-%d", sf.getType(), start, end);
}
+ String tooltip = desc;
+ String description = sf.getDescription();
+ if (description != null)
+ {
+ description = StringUtils.stripHtmlTags(description);
+ if (description.length() > 12)
+ {
+ desc = desc + " " + description.substring(0, 12) + "..";
+ }
+ else
+ {
+ desc = desc + " " + description;
+ }
+ tooltip = tooltip + " " + description;
+ }
if (sf.getFeatureGroup() != null)
{
- desc = desc + " (" + sf.getFeatureGroup() + ")";
+ tooltip = tooltip + (" (" + sf.getFeatureGroup() + ")");
}
JMenuItem item = new JMenuItem(desc);
+ item.setToolTipText(tooltip);
item.addActionListener(new ActionListener()
{
@Override
@@ -573,8 +605,12 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
*/
protected void showFeatureDetails(SequenceFeature sf)
{
- CutAndPasteTransfer cap = new CutAndPasteTransfer();
+ CutAndPasteHtmlTransfer cap = new CutAndPasteHtmlTransfer();
+ // it appears Java's CSS does not support border-collaps :-(
+ cap.addStylesheetRule("table { border-collapse: collapse;}");
+ cap.addStylesheetRule("table, td, th {border: 1px solid black;}");
cap.setText(sf.getDetailsReport());
+
Desktop.addInternalFrame(cap,
MessageManager.getString("label.feature_details"), 500, 500);
}
@@ -1380,6 +1416,13 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
}
});
+ annotationColour = new JRadioButtonMenuItem(
+ MessageManager.getString("action.by_annotation"));
+ annotationColour.setName(ResidueColourScheme.ANNOTATION_COLOUR);
+ annotationColour.setEnabled(false);
+ annotationColour.setToolTipText(
+ MessageManager.getString("label.by_annotation_tooltip"));
+
modifyConservation.setText(MessageManager
.getString("label.modify_conservation_threshold"));
modifyConservation.addActionListener(new ActionListener()
@@ -1410,7 +1453,10 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
colourMenu.add(textColour);
colourMenu.addSeparator();
- ColourMenuHelper.addMenuItems(colourMenu, this, sg, false);
+ ButtonGroup bg = ColourMenuHelper.addMenuItems(colourMenu, this, sg,
+ false);
+ bg.add(annotationColour);
+ colourMenu.add(annotationColour);
colourMenu.addSeparator();
colourMenu.add(conservationMenuItem);
@@ -1540,15 +1586,8 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
protected void hideInsertions_actionPerformed(ActionEvent actionEvent)
{
-
- HiddenColumns hidden = new HiddenColumns();
- BitSet inserts = new BitSet(), mask = new BitSet();
-
- // set mask to preserve existing hidden columns outside selected group
- if (ap.av.hasHiddenColumns())
- {
- ap.av.getAlignment().getHiddenColumns().markHiddenRegions(mask);
- }
+ HiddenColumns hidden = ap.av.getAlignment().getHiddenColumns();
+ BitSet inserts = new BitSet();
boolean markedPopup = false;
// mark inserts in current selection
@@ -1556,10 +1595,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
{
// mark just the columns in the selection group to be hidden
inserts.set(ap.av.getSelectionGroup().getStartRes(),
- ap.av.getSelectionGroup().getEndRes() + 1);
-
- // and clear that part of the mask
- mask.andNot(inserts);
+ ap.av.getSelectionGroup().getEndRes() + 1); // TODO why +1?
// now clear columns without gaps
for (SequenceI sq : ap.av.getSelectionGroup().getSequences())
@@ -1570,29 +1606,18 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
}
inserts.and(sq.getInsertionsAsBits());
}
- }
- else
- {
- // initially, mark all columns to be hidden
- inserts.set(0, ap.av.getAlignment().getWidth());
-
- // and clear out old hidden regions completely
- mask.clear();
+ hidden.clearAndHideColumns(inserts, ap.av.getSelectionGroup().getStartRes(),
+ ap.av.getSelectionGroup().getEndRes());
}
// now mark for sequence under popup if we haven't already done it
- if (!markedPopup && sequence != null)
+ else if (!markedPopup && sequence != null)
{
- inserts.and(sequence.getInsertionsAsBits());
- }
+ inserts.or(sequence.getInsertionsAsBits());
- // finally, preserve hidden regions outside selection
- inserts.or(mask);
-
- // and set hidden columns accordingly
- hidden.hideMarkedBits(inserts);
-
- ap.av.getAlignment().setHiddenColumns(hidden);
+ // and set hidden columns accordingly
+ hidden.hideColumns(inserts);
+ }
refresh();
}
@@ -1617,10 +1642,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
new Object[]
{ seq.getDisplayId(true) }) + "
");
new SequenceAnnotationReport(null).createSequenceAnnotationReport(
- contents, seq, true, true,
- (ap.getSeqPanel().seqCanvas.fr != null)
- ? ap.getSeqPanel().seqCanvas.fr.getMinMax()
- : null);
+ contents, seq, true, true, ap.getSeqPanel().seqCanvas.fr);
contents.append("
");
}
cap.setText("" + contents.toString() + "");
@@ -1830,7 +1852,7 @@ public class PopupMenu extends JPopupMenu implements ColourChangeListener
}
sequence.setName(dialog.getName().replace(' ', '_'));
- ap.paintAlignment(false);
+ ap.paintAlignment(false, false);
}
sequence.setDescription(dialog.getDescription());