X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=3209960d6f183e9a9901884df259378a40a9f61a;hb=e21fb8306a9efaf170d7354daa10e7ee42d37c17;hp=db120e1e585db8c434d2fdadf6866500d3d48623;hpb=efc31b4a8d5cee63555586804a2b79c06bdb5a14;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index db120e1..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.*;
@@ -69,6 +67,8 @@ public class SeqPanel extends JPanel
SequenceGroup stretchGroup = null;
boolean remove = false;
+ boolean mouseWheelPressed = false;
+
/**
* Creates a new SeqPanel object.
*
@@ -89,101 +89,199 @@ 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);
}
}
});
- addMouseListener(new MouseAdapter()
- {
- public void mouseReleased(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
+ addMouseWheelListener(new MouseWheelListener()
+ {
+ public void mouseWheelMoved(MouseWheelEvent e)
+ {
+
+ if (mouseWheelPressed)
+ {
+ Font font = av.getFont();
+ int fontSize = font.getSize();
+ if (e.getWheelRotation() > 0 && fontSize < 51)
+ fontSize++;
+ else if (fontSize > 1)
+ fontSize--;
+
+ av.setFont(new Font(font.getName(), font.getStyle(), fontSize));
+ ap.fontChanged();
+ }
+ else
+ {
+ if (e.getWheelRotation() > 0)
+ ap.scrollUp(false);
+ else
+ ap.scrollUp(true);
+ }
+
+ }
+ });
+
+
+ if(!av.isDataset())
+ {
+ addMouseListener(new MouseAdapter()
+ {
+ public void mouseReleased(MouseEvent evt)
+ {
+ mouseWheelPressed = false;
+
+ if (editingSeqs)
+ {
+ doMouseReleased(evt);
+ }
+ else
+ {
+ doMouseReleasedDefineMode(evt);
+ }
+ }
+
+ 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);
+ }
+ }
+
+ public void mouseExited(MouseEvent evt)
+ {
+ if (editingSeqs)
+ {
+ return;
+ }
+
+ doMouseExitedDefineMode(evt);
+ }
+
+ public void mouseEntered(MouseEvent evt)
+ {
+ if (editingSeqs)
+ {
+ return;
+ }
+
+ doMouseEnteredDefineMode(evt);
+ }
+ });
+ }
+ }
- if (editingSeqs)
- {
- doMouseReleased(evt);
- }
- else
- {
- doMouseReleasedDefineMode(evt);
- }
- }
+ int startWrapBlock=-1;
+ int wrappedBlock=-1;
+ int findRes(MouseEvent evt)
+ {
+ int res = 0;
+ int x = evt.getX();
- public void mousePressed(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
+ if (av.wrapAlignment)
+ {
- if (evt.isShiftDown() || evt.isAltDown() ||
- evt.isControlDown())
- {
- if (evt.isAltDown() || evt.isControlDown())
- {
- groupEditing = true;
- }
+ int hgap = av.charHeight;
+ if (av.scaleAboveWrapped)
+ hgap += av.charHeight;
- editingSeqs = true;
- doMousePressed(evt);
- }
- else
- {
- doMousePressedDefineMode(evt);
- }
- }
+ int cHeight = av.getAlignment().getHeight() * av.charHeight
+ + hgap + seqCanvas.getAnnotationHeight();
- public void mouseExited(MouseEvent evt)
- {
- if (av.getWrapAlignment() || editingSeqs)
- {
- return;
- }
+ int y = evt.getY();
+ y -= hgap;
+ x -= seqCanvas.LABEL_WEST;
- doMouseExitedDefineMode(evt);
- }
- public void mouseEntered(MouseEvent evt)
- {
- if (av.getWrapAlignment() || editingSeqs)
- {
- return;
- }
+ int cwidth = seqCanvas.getWrappedCanvasWidth(this.getWidth());
- doMouseEnteredDefineMode(evt);
- }
- });
+ wrappedBlock = y / cHeight;
+ wrappedBlock += av.getStartRes() / cwidth;
+
+ res = wrappedBlock * cwidth + x / av.getCharWidth();
+
+ }
+ 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!
*
@@ -212,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 seq = findSeq(evt);
+ int res = findRes(evt);
- int x = evt.getX();
- int y = evt.getY();
-
- 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()))
@@ -249,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());
@@ -307,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());
}
-
- sbuffer.append(sf.getType() + " " + sf.getDescription());
-
- if (sf.getStatus().length() > 0)
+ }
+ else
+ {
+ if (sbuffer.length() > 6)
+ sbuffer.append("
");
+ sbuffer.append(sf.getType());
+ if (sf.getDescription() != null)
+ sbuffer.append(" " + sf.getDescription());
+
+ 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("");
}
}
@@ -344,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)
{
@@ -536,53 +647,14 @@ public class SeqPanel extends JPanel
*/
void editOccurred(int i)
{
- if (endEdit == startEdit)
- {
- ap.alignFrame.historyList.pop();
- ap.alignFrame.updateEditMenuBar();
- }
-
- av.updateConservation();
- av.updateConsensus();
-
- // Y O Y CLUSTALX
- ColourSchemeI cs = av.getGlobalColourScheme();
-
- if (av.getSelectionGroup() != null)
- {
- av.getSelectionGroup().recalcConservation();
- }
+ if (endEdit == startEdit)
+ {
+ ap.alignFrame.historyList.pop();
+ ap.alignFrame.updateEditMenuBar();
+ }
- if (cs instanceof ConservationColourScheme)
- {
- ConservationColourScheme ccs = (ConservationColourScheme) cs;
- Conservation c = new Conservation("All",
- ResidueProperties.propHash, 3, av.alignment.getSequences(),
- 0, av.alignment.getWidth() - 1);
- c.calculate();
- c.verdict(false, av.ConsPercGaps);
-
- if (ccs.cs instanceof ClustalxColourScheme)
- {
- ClustalxColourScheme cxs = (ClustalxColourScheme) ccs.cs;
- cxs.resetClustalX(av.alignment.getSequences(),
- av.alignment.getWidth());
- ccs = new ConservationColourScheme(c, cxs);
- av.setGlobalColourScheme(ccs);
- }
- else
- {
- ccs = new ConservationColourScheme(c, ccs.cs);
- av.setGlobalColourScheme(ccs);
- }
- }
+ av.firePropertyChange("alignment", null,av.getAlignment().getSequences());
- if (cs instanceof ClustalxColourScheme)
- {
- ((ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),
- av.alignment.getWidth());
- av.setGlobalColourScheme(cs);
- }
}
/**
@@ -592,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);
@@ -707,25 +794,26 @@ public class SeqPanel extends JPanel
return;
}
- if (stretchGroup.cs instanceof ClustalxColourScheme)
+ if(stretchGroup.cs!=null)
{
- ((ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.sequences,
+ if (stretchGroup.cs instanceof ClustalxColourScheme)
+ {
+ ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.
+ sequences,
stretchGroup.getWidth());
- }
+ }
- if (stretchGroup.cs instanceof ConservationColourScheme)
- {
- ConservationColourScheme ccs = (ConservationColourScheme) stretchGroup.cs;
- stretchGroup.cs = ccs;
+ if (stretchGroup.cs.conservationApplied())
+ {
SliderPanel.setConservationSlider(ap, stretchGroup.cs,
- stretchGroup.getName());
- }
- else
- {
+ stretchGroup.getName());
+ }
+ else
+ {
SliderPanel.setPIDSliderSource(ap, stretchGroup.cs,
- stretchGroup.getName());
+ stretchGroup.getName());
+ }
}
-
changeEndRes = false;
changeStartRes = false;
stretchGroup = null;
@@ -739,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;
}
@@ -767,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();
}
@@ -918,7 +1009,7 @@ public class SeqPanel extends JPanel
try
{
- Thread.sleep(75);
+ Thread.sleep(20);
}
catch (Exception ex)
{