X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FAnnotationLabels.java;h=d26ba89cb417aee615ca74e7cf25efe03d5498b7;hb=c932f0e85a8852824cdd8ce790af68682732c85c;hp=2c563f1d64b68d2ed8592e55c6a1354d7f5ca309;hpb=4bae495df9a00ece3d4f7672639c3a669446d461;p=jalview.git diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index 2c563f1..d26ba89 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -53,6 +53,8 @@ import jalview.analysis.AlignmentUtils; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; +import jalview.datamodel.ContactMatrixI; +import jalview.datamodel.GroupSet; import jalview.datamodel.HiddenColumns; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceGroup; @@ -292,25 +294,20 @@ public class AnnotationLabels extends JPanel EditNameDialog dialog = new EditNameDialog(annotation.label, annotation.description, name, description); - dialog.showDialog(ap.alignFrame, title, new Runnable() - { - @Override - public void run() + dialog.showDialog(ap.alignFrame, title, () -> { + annotation.label = dialog.getName(); + String text = dialog.getDescription(); + if (text != null && text.length() == 0) { - annotation.label = dialog.getName(); - String text = dialog.getDescription(); - if (text != null && text.length() == 0) - { - text = null; - } - annotation.description = text; - if (addNew) - { - ap.av.getAlignment().addAnnotation(annotation); - ap.av.getAlignment().setAnnotationIndex(annotation, 0); - } - ap.refresh(true); + text = null; } + annotation.description = text; + if (addNew) + { + ap.av.getAlignment().addAnnotation(annotation); + ap.av.getAlignment().setAnnotationIndex(annotation, 0); + } + ap.refresh(true); }); } @@ -420,10 +417,142 @@ public class AnnotationLabels extends JPanel consclipbrd.addActionListener(this); pop.add(consclipbrd); } - } + + addColourOrFilterByOptions(ap,aa[selectedRow],pop); + + if (aa[selectedRow].graph == AlignmentAnnotation.CONTACT_MAP) + { + addContactMatrixOptions(ap,aa[selectedRow],pop); + // Set/adjust threshold for grouping ? + // colour alignment by this [type] + // select/hide columns by this row + + } + } + pop.show(this, evt.getX(), evt.getY()); } + static void addColourOrFilterByOptions(final AlignmentPanel ap, + final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop) + { + JMenuItem item; + item = new JMenuItem(MessageManager.getString("label.colour_by_annotation")); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,false); + }; + }); + pop.add(item); + if (alignmentAnnotation.sequenceRef!=null) + { + item = new JMenuItem(MessageManager.getString("label.colour_by_annotation")+" ("+MessageManager.getString("label.per_seq")+")"); + item.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + AnnotationColourChooser.displayFor(ap.av, ap,alignmentAnnotation,true); + }; + }); + pop.add(item); + } + item = new JMenuItem(MessageManager.getString("action.select_by_annotation")); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + AnnotationColumnChooser.displayFor(ap.av,ap,alignmentAnnotation); + }; + }); + pop.add(item); + } + static void addContactMatrixOptions(final AlignmentPanel ap, + final AlignmentAnnotation alignmentAnnotation, final JPopupMenu pop) + { + + final ContactMatrixI cm = ap.av.getContactMatrix(alignmentAnnotation); + JMenuItem item; + if (cm != null) + { + pop.addSeparator(); + + if (cm.hasGroups()) + { + JCheckBoxMenuItem chitem = new JCheckBoxMenuItem(MessageManager.getString("action.show_groups_on_matrix")); + chitem.setToolTipText(MessageManager.getString("action.show_groups_on_matrix_tooltip")); + boolean showGroups = alignmentAnnotation.isShowGroupsForContactMatrix(); + final AlignmentAnnotation sel_row=alignmentAnnotation; + chitem.setState(showGroups); + chitem.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + sel_row.setShowGroupsForContactMatrix(chitem.getState()); + // so any annotation colour changes are propagated - though they + // probably won't be unless the annotation row colours are removed + // too! + ap.alignmentChanged(); + } + }); + pop.add(chitem); + } + if (cm.hasTree()) + { + item = new JMenuItem(MessageManager.getString("action.show_tree_for_matrix")); + item.setToolTipText(MessageManager.getString("action.show_tree_for_matrix_tooltip")); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + + ap.alignFrame.showContactMapTree(alignmentAnnotation, cm); + + } + }); + pop.add(item); + } + else + { + item = new JMenuItem(MessageManager.getString("action.cluster_matrix")); + item.setToolTipText(MessageManager.getString("action.cluster_matrix_tooltip")); + item.addActionListener(new ActionListener() + { + @Override + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + @Override + public void run() + { + final long progBar; + ap.alignFrame.setProgressBar(MessageManager.formatMessage("action.clustering_matrix_for",cm.getAnnotDescr(),5f), progBar = System.currentTimeMillis()); + cm.setGroupSet(GroupSet.makeGroups(cm, true)); + cm.randomlyReColourGroups(); + cm.transferGroupColorsTo(alignmentAnnotation); + ap.alignmentChanged(); + ap.alignFrame.showContactMapTree(alignmentAnnotation, cm); + ap.alignFrame.setProgressBar(null, progBar); + } + }).start(); + } + }); + pop.add(item); + } + } + } + /** * A helper method that adds menu options for calculation and visualisation of * group and/or alignment consensus annotation to a popup menu. This is @@ -1060,6 +1189,7 @@ public class AnnotationLabels extends JPanel g.translate(0, getScrollOffset()); g.setColor(Color.black); SequenceI lastSeqRef = null; + String lastLabel = null; AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation(); int fontHeight = g.getFont().getSize(); int y = 0; @@ -1084,6 +1214,7 @@ public class AnnotationLabels extends JPanel { hasHiddenRows = false; int olY = 0; + int nexAA = 0; for (int i = 0; i < aa.length; i++) { visible = true; @@ -1093,6 +1224,10 @@ public class AnnotationLabels extends JPanel continue; } olY = y; + // look ahead to next annotation + for (nexAA = i + 1; nexAA < aa.length + && !aa[nexAA].visible; nexAA++) + ; y += aa[i].height; if (clip) { @@ -1102,7 +1237,7 @@ public class AnnotationLabels extends JPanel { if (debugRedraw) { - System.out.println("before vis: " + i); + jalview.bin.Console.outPrintln("before vis: " + i); } before = true; } @@ -1116,7 +1251,7 @@ public class AnnotationLabels extends JPanel { if (debugRedraw) { - System.out.println( + jalview.bin.Console.outPrintln( "Scroll offset: " + sOffset + " after vis: " + i); } after = true; @@ -1140,6 +1275,24 @@ public class AnnotationLabels extends JPanel } String label = aa[i].label; boolean vertBar = false; + if ((lastLabel != null && lastLabel.equals(label))) + { + label = aa[i].description; + } + else + { + if (nexAA < aa.length && label.equals(aa[nexAA].label)) // && + // aa[nexY].sequenceRef==aa[i].sequenceRef) + { + lastLabel = label; + // next label is the same as this label + label = aa[i].description; + } + else + { + lastLabel = label; + } + } if (aa[i].sequenceRef != null) { if (aa[i].sequenceRef != lastSeqRef) @@ -1223,8 +1376,9 @@ public class AnnotationLabels extends JPanel { if (vertBar) { - g.drawLine(20, y + offset, 20, y - aa[i].height); - g.drawLine(20, y + offset, x - 20, y + offset); + g.drawLine(width - 3, y + offset - fontHeight, width - 3, + (int) (y - 1.5 * aa[i].height - offset - fontHeight)); + // g.drawLine(20, y + offset, x - 20, y + offset); } g.drawString(label, x, y + offset);