X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=d45759343751073e7574c9aca7e9939bf29b81ee;hb=42ed2d813b3b8e7c9c80d79e1c8e1ded61ec6dd9;hp=126d755212f545bbc975941771e0c01f40094ef8;hpb=a1a0288d696c1dedef111a4edab027d95c89ed25;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index 126d755..d457593 100755
--- a/src/jalview/gui/SeqPanel.java
+++ b/src/jalview/gui/SeqPanel.java
@@ -27,6 +27,8 @@ import java.awt.event.*;
import javax.swing.*;
+import java.util.Vector;
+
/**
* DOCUMENT ME!
@@ -70,6 +72,8 @@ public class SeqPanel extends JPanel implements MouseListener,
StringBuffer keyboardNo1;
StringBuffer keyboardNo2;
+ java.net.URL linkImageURL;
+
/**
* Creates a new SeqPanel object.
*
@@ -78,6 +82,7 @@ public class SeqPanel extends JPanel implements MouseListener,
*/
public SeqPanel(AlignViewport avp, AlignmentPanel p)
{
+ linkImageURL = getClass().getResource("/images/link.gif");
ToolTipManager.sharedInstance().registerComponent(this);
ToolTipManager.sharedInstance().setInitialDelay(0);
ToolTipManager.sharedInstance().setDismissDelay(10000);
@@ -167,6 +172,29 @@ public class SeqPanel extends JPanel implements MouseListener,
return seq;
}
+ Vector getAllFeaturesAtRes(SequenceI seq, int res)
+ {
+ Vector allFeatures = new Vector();
+ int index = 0;
+ if(seq.getSequenceFeatures()!=null)
+ {
+ while (index < seq.getSequenceFeatures().length)
+ {
+ SequenceFeature sf = seq.getSequenceFeatures()[index];
+ if (sf.getBegin() <= res &&
+ sf.getEnd() >= res)
+ {
+ if (av.featuresDisplayed.containsKey(sf.getType()))
+ {
+ allFeatures.addElement(sf);
+ }
+ }
+ index++;
+ }
+ }
+ return allFeatures;
+ }
+
void endEditing()
{
startseq = -1;
@@ -501,6 +529,7 @@ public class SeqPanel extends JPanel implements MouseListener,
if(features!=null)
{
StringBuffer sbuffer = new StringBuffer("");
+ StringBuffer seqSpecific = new StringBuffer();
for (int i = 0; i < features.length; i++)
{
@@ -522,30 +551,46 @@ public class SeqPanel extends JPanel implements MouseListener,
sbuffer.append("
");
sbuffer.append("disulfide bond " + features[i].getBegin() + ":" +
features[i].getEnd());
+ if (features[i].links != null)
+ sbuffer.append("
");
}
}
else
{
if (sbuffer.length() > 6)
sbuffer.append("
");
- if(features[i].featureGroup!=null)
- sbuffer.append(features[i].featureGroup+";");
- sbuffer.append(features[i].getType());
+ sbuffer.append(features[i].getType() + " " +
+ features[i].begin);
+ if (features[i].begin != features[i].end)
+ sbuffer.append(" " + features[i].end);
if (features[i].getDescription() != null
&& !features[i].description.equals(features[i].getType()))
sbuffer.append("; " + features[i].getDescription());
- if (features[i].getStatus() != null && features[i].getStatus().length()>0)
+ if (features[i].getValue("status") != null)
{
- sbuffer.append("; (" + features[i].getStatus() + ")");
+ sbuffer.append("; (" + features[i].getValue("status") + ")");
}
+ if (features[i].links != null)
+ sbuffer.append("
");
+
}
}
+ else if(features[i].begin==0 && features[i].end==0)
+ {
+ // seqSpecific.append(features[i].featureGroup+": "
+ // + features[i].getType()+" "
+ // +features[i].getDescription()+"
");
+ }
}
+ if(seqSpecific.length()>0)
+ seqSpecific.setLength(seqSpecific.length()-4);
+
+ sbuffer.append(seqSpecific);
sbuffer.append("");
if(sbuffer.length()==13) //
setToolTipText("");
@@ -1145,7 +1190,7 @@ public class SeqPanel extends JPanel implements MouseListener,
"Cannot edit annotations in wrapped view.",
"Wrapped view - no edit",
JOptionPane.WARNING_MESSAGE);
- return;
+ return;
}
if(seq<0 || res<0)
@@ -1190,12 +1235,13 @@ public class SeqPanel extends JPanel implements MouseListener,
(allGroups[i].getEndRes() >= res))
{
stretchGroup = allGroups[i];
- av.setSelectionGroup(stretchGroup);
-
break;
}
}
}
+
+ av.setSelectionGroup(stretchGroup);
+
}
if (av.cursorMode)
@@ -1207,49 +1253,65 @@ public class SeqPanel extends JPanel implements MouseListener,
}
- if (stretchGroup == null)
+ if (javax.swing.SwingUtilities.isRightMouseButton(evt))
{
- // define a new group here
- SequenceGroup sg = new SequenceGroup();
- sg.setStartRes(res);
- sg.setEndRes(res);
- sg.addSequence(sequence, false);
- av.setSelectionGroup(sg);
- stretchGroup = sg;
-
- if (av.getConservationSelected())
+ Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(),
+ sequence.findPosition(res));
+ Vector links = new Vector();;
+ for (int i = 0; i < allFeatures.size(); i++)
{
- SliderPanel.setConservationSlider(ap,
- av.getGlobalColourScheme(), "Background");
+ SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i);
+ if (sf.links != null)
+ {
+ for (int j = 0; j < sf.links.size(); j++)
+ {
+ links.addElement(sf.links.elementAt(j));
+ }
+ }
}
- if (av.getAbovePIDThreshold())
- {
- SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(),
- "Background");
- }
+
+ jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null, links);
+ pop.show(this, evt.getX(), evt.getY());
}
- else if (javax.swing.SwingUtilities.isRightMouseButton(evt))
+ else if (stretchGroup == null)
{
- jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null);
- pop.show(this, evt.getX(), evt.getY());
+ //Only if left mouse button do we want to change group sizes
- // edit the properties of existing group
- }
+ // define a new group here
+ SequenceGroup sg = new SequenceGroup();
+ sg.setStartRes(res);
+ sg.setEndRes(res);
+ sg.addSequence(sequence, false);
+ av.setSelectionGroup(sg);
+ stretchGroup = sg;
- if ((stretchGroup != null) && (stretchGroup.getEndRes() == res))
- {
+ if (av.getConservationSelected())
+ {
+ SliderPanel.setConservationSlider(ap,
+ av.getGlobalColourScheme(),
+ "Background");
+ }
+
+ if (av.getAbovePIDThreshold())
+ {
+ SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(),
+ "Background");
+ }
+ if ( (stretchGroup != null) && (stretchGroup.getEndRes() == res))
+ {
// Edit end res position of selected group
changeEndRes = true;
- }
- else if ((stretchGroup != null) && (stretchGroup.getStartRes() == res))
- {
+ }
+ else if ( (stretchGroup != null) &&
+ (stretchGroup.getStartRes() == res))
+ {
// Edit end res position of selected group
changeStartRes = true;
+ }
+ stretchGroup.getWidth();
}
- stretchGroup.getWidth();
-
seqCanvas.repaint();
}