X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=d45759343751073e7574c9aca7e9939bf29b81ee;hb=42ed2d813b3b8e7c9c80d79e1c8e1ded61ec6dd9;hp=9b2f5f43d67646e14a4404d24acd1213028823ee;hpb=94bc21544b9573fdf177c500bdb981e8076a7e7d;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index 9b2f5f4..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!
@@ -65,10 +67,13 @@ public class SeqPanel extends JPanel implements MouseListener,
SequenceGroup stretchGroup = null;
boolean remove = false;
+ Point lastMousePress;
boolean mouseWheelPressed = false;
StringBuffer keyboardNo1;
StringBuffer keyboardNo2;
+ java.net.URL linkImageURL;
+
/**
* Creates a new SeqPanel object.
*
@@ -77,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);
@@ -166,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;
@@ -235,25 +264,34 @@ public class SeqPanel extends JPanel implements MouseListener,
endEditing();
- while (seqCanvas.cursorY < av.startSeq)
- {
- ap.scrollUp(true);
- }
- while (seqCanvas.cursorY + 1 > av.endSeq)
- {
- ap.scrollUp(false);
- }
- while (seqCanvas.cursorX < av.startRes)
+ if(av.wrapAlignment)
{
- if(!ap.scrollRight(false))
- break;
+ ap.scrollToWrappedVisible(seqCanvas.cursorX);
}
- while (seqCanvas.cursorX > av.endRes)
+ else
{
- if(!ap.scrollRight(true))
- break;
+ while (seqCanvas.cursorY < av.startSeq)
+ {
+ ap.scrollUp(true);
+ }
+ while (seqCanvas.cursorY + 1 > av.endSeq)
+ {
+ ap.scrollUp(false);
+ }
+ if (!av.wrapAlignment)
+ {
+ while (seqCanvas.cursorX < av.startRes)
+ {
+ if (!ap.scrollRight(false))
+ break;
+ }
+ while (seqCanvas.cursorX > av.endRes)
+ {
+ if (!ap.scrollRight(true))
+ break;
+ }
+ }
}
-
setStatusMessage(av.alignment.getSequenceAt(seqCanvas.cursorY),
seqCanvas.cursorX, seqCanvas.cursorY);
@@ -400,6 +438,8 @@ public class SeqPanel extends JPanel implements MouseListener,
*/
public void mousePressed(MouseEvent evt)
{
+ lastMousePress = evt.getPoint();
+
if (javax.swing.SwingUtilities.isMiddleMouseButton(evt))
{
mouseWheelPressed = true;
@@ -489,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++)
{
@@ -510,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("");
@@ -585,6 +642,54 @@ public class SeqPanel extends JPanel implements MouseListener,
*/
public void mouseDragged(MouseEvent evt)
{
+ if (mouseWheelPressed)
+ {
+ int oldWidth = av.charWidth;
+
+ //Which is bigger, left-right or up-down?
+ if (Math.abs(evt.getY() - lastMousePress.getY())
+ > Math.abs(evt.getX() - lastMousePress.getX()))
+ {
+ int fontSize = av.font.getSize();
+
+ if (evt.getY() < lastMousePress.getY())
+ {
+ fontSize--;
+ }
+ else if (evt.getY() > lastMousePress.getY())
+ {
+ fontSize++;
+ }
+
+ if(fontSize<1)
+ fontSize = 1;
+
+ av.setFont(new Font(av.font.getName(), av.font.getStyle(), fontSize));
+ av.charWidth = oldWidth;
+ ap.fontChanged();
+ }
+ else
+ {
+ if (evt.getX() < lastMousePress.getX() && av.charWidth > 1)
+ {
+ av.charWidth--;
+ }
+ else if (evt.getX() > lastMousePress.getX())
+ {
+ av.charWidth++;
+ }
+
+ ap.repaint();
+ }
+
+ FontMetrics fm = getFontMetrics(av.getFont());
+ av.validCharWidth = fm.charWidth('M') <= av.charWidth;
+
+ lastMousePress = evt.getPoint();
+
+ return;
+ }
+
if (!editingSeqs)
{
doMouseDraggedDefineMode(evt);
@@ -1020,7 +1125,7 @@ public class SeqPanel extends JPanel implements MouseListener,
public void mouseWheelMoved(MouseWheelEvent e)
{
e.consume();
- if (mouseWheelPressed)
+ /* if (mouseWheelPressed)
{
Font font = av.getFont();
int fontSize = font.getSize();
@@ -1029,10 +1134,13 @@ public class SeqPanel extends JPanel implements MouseListener,
else if (fontSize > 1)
fontSize--;
+
+
av.setFont(new Font(font.getName(), font.getStyle(), fontSize));
+
ap.fontChanged();
}
- else
+ else*/
{
if (e.getWheelRotation() > 0)
ap.scrollUp(false);
@@ -1082,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)
@@ -1127,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)
@@ -1144,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();
}