X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationLabels.java;h=e3cc36e17a44340470d8169e93a18a06acc860e6;hb=a06dd69fae641b3f5a8f202b439796df8469abb6;hp=4702f2a02794463be73b857c8e614e185e72223a;hpb=b364e1e6d199002069dab615d1007799b5bb71e1;p=jalview.git diff --git a/src/jalview/gui/AnnotationLabels.java b/src/jalview/gui/AnnotationLabels.java index 4702f2a..e3cc36e 100755 --- a/src/jalview/gui/AnnotationLabels.java +++ b/src/jalview/gui/AnnotationLabels.java @@ -36,10 +36,12 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.geom.AffineTransform; +import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.Locale; +import java.util.concurrent.Callable; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenuItem; @@ -50,18 +52,24 @@ import javax.swing.ToolTipManager; import jalview.analysis.AlignSeq; import jalview.analysis.AlignmentUtils; +import jalview.bin.Console; 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; import jalview.datamodel.SequenceI; +import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.io.FormatAdapter; +import jalview.io.NewickFile; import jalview.util.Comparison; import jalview.util.MessageManager; import jalview.util.Platform; +import jalview.ws.datamodel.alphafold.PAEContactMatrix; /** * The panel that holds the labels for alignment annotations, providing @@ -416,6 +424,61 @@ public class AnnotationLabels extends JPanel consclipbrd.addActionListener(this); pop.add(consclipbrd); } + if (aa[selectedRow].graph == AlignmentAnnotation.CONTACT_MAP) + { + + final ContactMatrixI cm = av.getContactMatrix(aa[selectedRow]); + if (cm != null) + { + pop.addSeparator(); + + if (cm.hasTree()) + { + item = new JMenuItem("Show Tree for Matrix"); + item.addActionListener(new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + + ap.alignFrame.showContactMapTree(aa[selectedRow], cm); + + } + }); + pop.add(item); + } + else + { + item = new JMenuItem("Calculate Tree for Matrix"); + item.addActionListener(new ActionListener() + { + // TODO - refactor to analysis background thread + @Override + public void actionPerformed(ActionEvent e) + { + new Thread(new Runnable() + { + @Override + public void run() + { + AlignmentAnnotation alan = aa[selectedRow]; + cm.setGroupSet(GroupSet.makeGroups(cm, 5f, true)); + ap.alignFrame.showContactMapTree(alan, cm); + } + }).start(); + } + }); + pop.add(item); + + } + // Show/Hide group shading on matrix view + // Set/adjust threshold for grouping ? + // colour alignment by this [type] + // select/hide columns by this row + + } + } } pop.show(this, evt.getX(), evt.getY()); } @@ -1055,7 +1118,8 @@ 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; @@ -1080,6 +1144,7 @@ public class AnnotationLabels extends JPanel { hasHiddenRows = false; int olY = 0; + int nexAA = 0; for (int i = 0; i < aa.length; i++) { visible = true; @@ -1089,6 +1154,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) { @@ -1134,8 +1203,40 @@ public class AnnotationLabels extends JPanel { offset += fm.getDescent(); } - - x = width - fm.stringWidth(aa[i].label) - 3; + 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) + { + label = aa[i].sequenceRef.getName() + " " + label; + // TODO record relationship between sequence and this annotation and + // display it here + } + else + { + vertBar = true; + } + } + x = width - fm.stringWidth(label) - 3; if (aa[i].graphGroup > -1) { @@ -1203,16 +1304,27 @@ public class AnnotationLabels extends JPanel } else { - g.drawString(aa[i].label, x, y + offset); + if (vertBar) + { + 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); } + lastSeqRef = aa[i].sequenceRef; } } if (!resizePanel && dragEvent != null && aa != null) { g.setColor(Color.lightGray); - g.drawString(aa[selectedRow].label, dragEvent.getX(), - dragEvent.getY() - getScrollOffset()); + g.drawString( + (aa[selectedRow].sequenceRef == null ? "" + : aa[selectedRow].sequenceRef.getName()) + + aa[selectedRow].label, + dragEvent.getX(), dragEvent.getY() - getScrollOffset()); } if (!av.getWrapAlignment() && ((aa == null) || (aa.length < 1)))