X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=3209960d6f183e9a9901884df259378a40a9f61a;hb=dfb45c8f874124d3ff3caac2902ed0c4a0e87cf5;hp=bc8f20009598607f32aa1905ab161c11183284b6;hpb=519ea38fa40b0d2e7b3979268f19415f14e1e888;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index bc8f200..3209960 100755
--- a/src/jalview/gui/SeqPanel.java
+++ b/src/jalview/gui/SeqPanel.java
@@ -18,8 +18,6 @@
*/
package jalview.gui;
-import jalview.analysis.*;
-
import jalview.datamodel.*;
import jalview.schemes.*;
@@ -91,31 +89,31 @@ public class SeqPanel extends JPanel
ap = p;
+
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent evt)
{
- if (av.getWrapAlignment())
+ doMouseMoved(evt);
+ if (editingSeqs)
{
- return;
+ // This is because MacOSX creates a mouseMoved
+ // If control is down
+ if(!av.isDataset())
+ doMouseDragged(evt);
}
-
- doMouseMoved(evt);
}
public void mouseDragged(MouseEvent evt)
{
- if (av.getWrapAlignment())
- {
- return;
- }
-
if (editingSeqs)
{
+ if(!av.isDataset())
doMouseDragged(evt);
}
else
{
+ if(!av.isDataset())
doMouseDraggedDefineMode(evt);
}
}
@@ -130,7 +128,7 @@ public class SeqPanel extends JPanel
{
Font font = av.getFont();
int fontSize = font.getSize();
- if (e.getWheelRotation() > 0 && fontSize < 30)
+ if (e.getWheelRotation() > 0 && fontSize < 51)
fontSize++;
else if (fontSize > 1)
fontSize--;
@@ -150,76 +148,139 @@ public class SeqPanel extends JPanel
});
- addMouseListener(new MouseAdapter()
- {
- public void mouseReleased(MouseEvent evt)
- {
- mouseWheelPressed = false;
- if (av.getWrapAlignment())
- {
- return;
- }
+ if(!av.isDataset())
+ {
+ addMouseListener(new MouseAdapter()
+ {
+ public void mouseReleased(MouseEvent evt)
+ {
+ mouseWheelPressed = false;
- if (editingSeqs)
- {
- doMouseReleased(evt);
- }
- else
- {
- doMouseReleasedDefineMode(evt);
- }
- }
+ if (editingSeqs)
+ {
+ doMouseReleased(evt);
+ }
+ else
+ {
+ doMouseReleasedDefineMode(evt);
+ }
+ }
- public void mousePressed(MouseEvent evt)
- {
- if( javax.swing.SwingUtilities.isMiddleMouseButton(evt))
- {
- mouseWheelPressed = true;
- return;
- }
- if (av.getWrapAlignment())
- {
- return;
- }
+ public void mousePressed(MouseEvent evt)
+ {
+ if (javax.swing.SwingUtilities.isMiddleMouseButton(evt))
+ {
+ mouseWheelPressed = true;
+ return;
+ }
+
+ if (evt.isShiftDown() || evt.isAltDown() ||
+ evt.isControlDown())
+ {
+ if (evt.isAltDown() || evt.isControlDown())
+ {
+ groupEditing = true;
+
+ }
+
+ editingSeqs = true;
+ doMousePressed(evt);
+ }
+ else
+ {
+ doMousePressedDefineMode(evt);
+ }
+ }
- if (evt.isShiftDown() || evt.isAltDown() ||
- evt.isControlDown())
- {
- if (evt.isAltDown() || evt.isControlDown())
- {
- groupEditing = true;
- }
+ public void mouseExited(MouseEvent evt)
+ {
+ if (editingSeqs)
+ {
+ return;
+ }
- editingSeqs = true;
- doMousePressed(evt);
- }
- else
- {
- doMousePressedDefineMode(evt);
- }
- }
+ doMouseExitedDefineMode(evt);
+ }
- public void mouseExited(MouseEvent evt)
- {
- if (av.getWrapAlignment() || editingSeqs)
- {
- return;
- }
+ public void mouseEntered(MouseEvent evt)
+ {
+ if (editingSeqs)
+ {
+ return;
+ }
- doMouseExitedDefineMode(evt);
- }
+ doMouseEnteredDefineMode(evt);
+ }
+ });
+ }
+ }
- public void mouseEntered(MouseEvent evt)
- {
- if (av.getWrapAlignment() || editingSeqs)
- {
- return;
- }
+ int startWrapBlock=-1;
+ int wrappedBlock=-1;
+ int findRes(MouseEvent evt)
+ {
+ int res = 0;
+ int x = evt.getX();
+
+ if (av.wrapAlignment)
+ {
+
+ int hgap = av.charHeight;
+ if (av.scaleAboveWrapped)
+ hgap += av.charHeight;
+
+ int cHeight = av.getAlignment().getHeight() * av.charHeight
+ + hgap + seqCanvas.getAnnotationHeight();
+
+ int y = evt.getY();
+ y -= hgap;
+ x -= seqCanvas.LABEL_WEST;
+
+
+ int cwidth = seqCanvas.getWrappedCanvasWidth(this.getWidth());
+
+ wrappedBlock = y / cHeight;
+ wrappedBlock += av.getStartRes() / cwidth;
+
+ res = wrappedBlock * cwidth + x / av.getCharWidth();
- doMouseEnteredDefineMode(evt);
- }
- });
}
+ else
+ {
+ res = (x / av.getCharWidth()) + av.getStartRes();
+ }
+
+ return res;
+
+ }
+
+ int findSeq(MouseEvent evt)
+ {
+
+ int seq = 0;
+ int y = evt.getY();
+
+ if (av.wrapAlignment)
+ {
+ int hgap = av.charHeight;
+ if (av.scaleAboveWrapped)
+ hgap += av.charHeight;
+
+ int cHeight = av.getAlignment().getHeight() * av.charHeight
+ + hgap + seqCanvas.getAnnotationHeight();
+
+ y -= hgap;
+
+ seq = ( (y % cHeight) / av.getCharHeight());
+ }
+ else
+ {
+ seq = (y / av.getCharHeight()) + av.getStartSeq();
+ }
+
+ return seq;
+ }
+
/**
* DOCUMENT ME!
@@ -249,17 +310,14 @@ public class SeqPanel extends JPanel
*/
public void doMousePressed(MouseEvent evt)
{
- ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",
- av.alignment, HistoryItem.EDIT));
+ ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",
+ av.alignment, HistoryItem.EDIT));
- int seq;
- int res;
-
- int x = evt.getX();
- int y = evt.getY();
+ int seq = findSeq(evt);
+ int res = findRes(evt);
- res = (x / av.getCharWidth()) + av.getStartRes();
- seq = (y / av.getCharHeight()) + av.getStartSeq();
+ if(seq<0 || res<0)
+ return;
if ((seq < av.getAlignment().getHeight()) &&
(res < av.getAlignment().getSequenceAt(seq).getLength()))
@@ -286,57 +344,51 @@ public class SeqPanel extends JPanel
*/
public void doMouseMoved(MouseEvent evt)
{
- int res = 0;
- int seq = 0;
- int x = evt.getX();
- int y = evt.getY();
+ int res = findRes(evt);
+ int seq = findSeq(evt);
- if (av.wrapAlignment)
- {
- y -= (2 * av.charHeight);
+ if(res<0 || seq<0 || seq >= av.getAlignment().getHeight())
+ return;
- int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight;
+ SequenceI sequence = av.getAlignment().getSequenceAt(seq);
- res = (int) ((y / chunkHeight) * (getWidth() / av.charWidth)) +
- (x / av.getCharWidth()) + av.getStartRes();
+ if (res > sequence.getLength())
+ {
+ return;
+ }
- y %= chunkHeight;
- seq = (y / av.getCharHeight()) + av.getStartSeq();
- }
- else
- {
- res = (x / av.getCharWidth()) + av.getStartRes();
- seq = (y / av.getCharHeight()) + av.getStartSeq();
- }
+ if(seqCanvas.pdbCanvas!=null && sequence==seqCanvas.pdbCanvas.sequence)
+ {
+ seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));
+ }
- if (seq >= av.getAlignment().getHeight())
- {
- return;
- }
- SequenceI sequence = av.getAlignment().getSequenceAt(seq);
+ StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +
+ sequence.getName());
- if (res > sequence.getLength())
+ Object obj = null;
+ if (av.alignment.isNucleotide())
{
- return;
+ obj = ResidueProperties.nucleotideName.get(sequence.getCharAt(res) +
+ "");
+ if(obj!=null)
+ text.append(" Nucleotide: ");
}
-
- Object obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) +
- "");
- String aa = "";
-
- if (obj != null)
+ else
{
- aa = obj.toString();
+ obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + "");
+ if(obj!=null)
+ text.append(" Residue: ");
}
- StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +
- sequence.getName());
-
- if (aa != "")
+ if (obj != null)
{
- text.append(" Residue: " + aa + " (" +
- av.getAlignment().getSequenceAt(seq).findPosition(res) + ")");
+
+ if (obj != "")
+ {
+ text.append( obj + " (" +
+ av.getAlignment().getSequenceAt(seq).findPosition(res) + ")");
+ }
}
ap.alignFrame.statusBar.setText(text.toString());
@@ -344,32 +396,54 @@ public class SeqPanel extends JPanel
// use aa to see if the mouse pointer is on a
if (av.showSequenceFeatures)
{
- Vector features = sequence.getSequenceFeatures();
- Enumeration e = features.elements();
- StringBuffer sbuffer = new StringBuffer();
-
- while (e.hasMoreElements())
+ Vector features = sequence.getDatasetSequence().getSequenceFeatures();
+ if(features!=null)
{
- SequenceFeature sf = (SequenceFeature) e.nextElement();
+ StringBuffer sbuffer = new StringBuffer("");
+
+ for (int i = 0; i < features.size(); i++)
+ {
+ SequenceFeature sf = (SequenceFeature) features.elementAt(i);
- if ((sf.getStart() <= sequence.findPosition(res)) &&
- (sf.getEnd() >= sequence.findPosition(res)))
+ if ( (sf.getBegin() <= sequence.findPosition(res)) &&
+ (sf.getEnd() >= sequence.findPosition(res)))
{
- if (sbuffer.length() > 0)
+ if (sf.getType().equals("disulfide bond"))
+ {
+ if (sf.getBegin() == sequence.findPosition(res)
+ || sf.getEnd() == sequence.findPosition(res))
{
- sbuffer.append("; ");
+ if (sbuffer.length() > 6)
+ sbuffer.append("
");
+ sbuffer.append("disulfide bond " + sf.getBegin() + ":" +
+ sf.getEnd());
}
+ }
+ else
+ {
+ if (sbuffer.length() > 6)
+ sbuffer.append("
");
+ sbuffer.append(sf.getType());
+ if (sf.getDescription() != null)
+ sbuffer.append(" " + sf.getDescription());
- sbuffer.append(sf.getType() + " " + sf.getDescription());
-
- if (sf.getStatus().length() > 0)
+ if (sf.getStatus() != null)
{
- sbuffer.append(" (" + sf.getStatus() + ")");
+ sbuffer.append(" (" + sf.getStatus() + ")");
}
+ }
}
- }
- this.setToolTipText(sbuffer.toString());
+ }
+
+ sbuffer.append("");
+ if(sbuffer.length()==13) //
+ setToolTipText("");
+ else
+ setToolTipText(sbuffer.toString());
+ }
+ else
+ setToolTipText("");
}
}
@@ -381,7 +455,7 @@ public class SeqPanel extends JPanel
public void doMouseDragged(MouseEvent evt)
{
// If we're dragging we're editing
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
+ int res = findRes(evt);
if (res < 0)
{
@@ -579,97 +653,8 @@ public class SeqPanel extends JPanel
ap.alignFrame.updateEditMenuBar();
}
- av.updateConservation();
- av.updateConsensus();
-
- //Does the edit affect any groups?
- //////////////////////////////
- Vector groupsToUpdate = new Vector();
- SequenceGroup sg = av.getSelectionGroup();
-
- int s, g, gSize = av.alignment.getGroups().size();
- if (sg != null)
- {
- groupsToUpdate.addElement(av.getSelectionGroup());
- int sSize = sg.getSize();
- for (s = 0; s < sSize; s++)
- {
- SequenceI seq = sg.getSequenceAt(s);
-
- for (g = 0; g < gSize; g++)
- {
- SequenceGroup sg2 = (SequenceGroup) av.alignment.getGroups().
- elementAt(
- g);
- if (sg2.sequences.contains(seq))
- {
- if (!groupsToUpdate.contains(sg2))
- groupsToUpdate.addElement(sg2);
- continue;
- }
- }
- }
- }
- else
- {
- SequenceI seq = av.alignment.getSequenceAt(startseq);
- for (g = 0; g < gSize; g++)
- {
- SequenceGroup sg2 = (SequenceGroup) av.alignment.getGroups().elementAt(
- g);
- if (sg2.sequences.contains(seq))
- {
- if (!groupsToUpdate.contains(sg2))
- groupsToUpdate.addElement(sg2);
- continue;
- }
- }
- }
-
- gSize = groupsToUpdate.size();
- for (g = 0; g < gSize; g++)
- {
- ( (SequenceGroup) groupsToUpdate.elementAt(g)).recalcConservation();
- }
- ////End of updating groups
- //////////////////////////////////////////
-
- // Y O Y CLUSTALX
- ColourSchemeI cs = av.getGlobalColourScheme();
- if(cs!=null)
- {
- if (cs.conservationApplied())
- {
- Conservation c = new Conservation("All",
- ResidueProperties.propHash, 3,
- av.alignment.getSequences(),
- 0, av.alignment.getWidth() - 1);
- c.calculate();
- c.verdict(false, av.ConsPercGaps);
-
- if (cs instanceof ClustalxColourScheme)
- {
- ClustalxColourScheme cxs = (ClustalxColourScheme) cs;
- cxs.resetClustalX(av.alignment.getSequences(),
- av.alignment.getWidth());
- cs.setConservation(c);
- av.setGlobalColourScheme(cs);
- }
- else
- {
- cs.setConservation(c);
- av.setGlobalColourScheme(cs);
- }
-
- }
+ av.firePropertyChange("alignment", null,av.getAlignment().getSequences());
- if (cs instanceof ClustalxColourScheme)
- {
- ( (ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),
- av.alignment.getWidth());
- av.setGlobalColourScheme(cs);
- }
- }
}
/**
@@ -679,9 +664,24 @@ public class SeqPanel extends JPanel
*/
public void doMousePressedDefineMode(MouseEvent evt)
{
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
- int seq = (evt.getY() / av.getCharHeight()) + av.getStartSeq();
- oldSeq = seq;
+ int res = findRes(evt);
+ int seq = findSeq(evt);
+ oldSeq = seq;
+
+ startWrapBlock=wrappedBlock;
+
+ if(av.wrapAlignment && seq>av.alignment.getHeight())
+ {
+ JOptionPane.showInternalMessageDialog(Desktop.desktop,
+ "Cannot edit annotations in wrapped view.",
+ "Wrapped view - no edit",
+ JOptionPane.WARNING_MESSAGE);
+ return;
+ }
+
+ if(seq<0 || res<0)
+ return;
+
SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq);
@@ -827,11 +827,14 @@ public class SeqPanel extends JPanel
*/
public void doMouseDraggedDefineMode(MouseEvent evt)
{
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
- int y = (evt.getY() / av.getCharHeight()) + av.getStartSeq();
+ int res = findRes(evt);
+ int y = findSeq(evt);
- if (stretchGroup == null)
- {
+ if(wrappedBlock!=startWrapBlock)
+ return;
+
+ if (stretchGroup == null)
+ {
return;
}
@@ -855,7 +858,7 @@ public class SeqPanel extends JPanel
{
res = av.getStartRes();
}
- else if (res > av.getEndRes())
+ else if (res > av.getEndRes() && !av.getWrapAlignment())
{
res = av.getEndRes();
}
@@ -1006,7 +1009,7 @@ public class SeqPanel extends JPanel
try
{
- Thread.sleep(75);
+ Thread.sleep(20);
}
catch (Exception ex)
{