X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqPanel.java;h=3209960d6f183e9a9901884df259378a40a9f61a;hb=0705a85fe0a3d391e5aba360340a0c342c898366;hp=f827fba441dc488283f900523741b1fa544a9533;hpb=0616cee67a5fd2f8724f48232873c39d5fa3015a;p=jalview.git
diff --git a/src/jalview/gui/SeqPanel.java b/src/jalview/gui/SeqPanel.java
index f827fba..3209960 100755
--- a/src/jalview/gui/SeqPanel.java
+++ b/src/jalview/gui/SeqPanel.java
@@ -18,828 +18,1003 @@
*/
package jalview.gui;
-import java.util.*;
+import jalview.datamodel.*;
+
+import jalview.schemes.*;
import java.awt.*;
import java.awt.event.*;
-import javax.swing.*;
-import jalview.analysis.*;
-import jalview.datamodel.*;
-import jalview.schemes.*;
-
-public class SeqPanel
- extends JPanel
-{
- public SeqCanvas seqCanvas;
- public AlignmentPanel ap;
- protected int lastres;
- protected int startseq;
- int startEdit = -1;
- int endEdit = -1;
- protected AlignViewport av;
-
- // if character is inserted or deleted, we will need to recalculate the conservation
- int seqEditOccurred = -1;
- ScrollThread scrollThread = null;
- boolean mouseDragging = false;
- boolean editingSeqs = false;
- boolean groupEditing = false;
-
- //////////////////////////////////////////
- /////Everything below this is for defining the boundary of the rubberband
- //////////////////////////////////////////
- int oldSeq = -1;
- boolean changeEndSeq = false;
- boolean changeStartSeq = false;
- boolean changeEndRes = false;
- boolean changeStartRes = false;
- SequenceGroup stretchGroup = null;
- boolean remove = false;
-
- public SeqPanel(AlignViewport avp, AlignmentPanel p)
- {
- ToolTipManager.sharedInstance().registerComponent(this);
- ToolTipManager.sharedInstance().setInitialDelay(0);
- ToolTipManager.sharedInstance().setDismissDelay(10000);
- this.av = avp;
- setBackground(Color.white);
-
- seqCanvas = new SeqCanvas(avp);
- setLayout(new BorderLayout());
- add(seqCanvas, BorderLayout.CENTER);
-
- ap = p;
-
- addMouseMotionListener(new MouseMotionAdapter()
- {
- public void mouseMoved(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
+import java.util.*;
- doMouseMoved(evt);
- }
+import javax.swing.*;
- public void mouseDragged(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
- if (editingSeqs)
- {
- doMouseDragged(evt);
- }
- else
- {
- doMouseDraggedDefineMode(evt);
- }
- }
- });
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class SeqPanel extends JPanel
+{
+ /** DOCUMENT ME!! */
+ public SeqCanvas seqCanvas;
+
+ /** DOCUMENT ME!! */
+ public AlignmentPanel ap;
+ protected int lastres;
+ protected int startseq;
+ int startEdit = -1;
+ int endEdit = -1;
+ protected AlignViewport av;
+
+ // if character is inserted or deleted, we will need to recalculate the conservation
+ int seqEditOccurred = -1;
+ ScrollThread scrollThread = null;
+ boolean mouseDragging = false;
+ boolean editingSeqs = false;
+ boolean groupEditing = false;
+
+ //////////////////////////////////////////
+ /////Everything below this is for defining the boundary of the rubberband
+ //////////////////////////////////////////
+ int oldSeq = -1;
+ boolean changeEndSeq = false;
+ boolean changeStartSeq = false;
+ boolean changeEndRes = false;
+ boolean changeStartRes = false;
+ SequenceGroup stretchGroup = null;
+ boolean remove = false;
+
+ boolean mouseWheelPressed = false;
+
+ /**
+ * Creates a new SeqPanel object.
+ *
+ * @param avp DOCUMENT ME!
+ * @param p DOCUMENT ME!
+ */
+ public SeqPanel(AlignViewport avp, AlignmentPanel p)
+ {
+ ToolTipManager.sharedInstance().registerComponent(this);
+ ToolTipManager.sharedInstance().setInitialDelay(0);
+ ToolTipManager.sharedInstance().setDismissDelay(10000);
+ this.av = avp;
+ setBackground(Color.white);
+
+ seqCanvas = new SeqCanvas(avp);
+ setLayout(new BorderLayout());
+ add(seqCanvas, BorderLayout.CENTER);
+
+ ap = p;
+
+
+ addMouseMotionListener(new MouseMotionAdapter()
+ {
+ public void mouseMoved(MouseEvent evt)
+ {
+ doMouseMoved(evt);
+ if (editingSeqs)
+ {
+ // This is because MacOSX creates a mouseMoved
+ // If control is down
+ if(!av.isDataset())
+ doMouseDragged(evt);
+ }
+ }
+
+ public void mouseDragged(MouseEvent evt)
+ {
+ if (editingSeqs)
+ {
+ if(!av.isDataset())
+ doMouseDragged(evt);
+ }
+ else
+ {
+ if(!av.isDataset())
+ doMouseDraggedDefineMode(evt);
+ }
+ }
+ });
+
+ 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);
+ }
+ });
+ }
+ }
+
+ int startWrapBlock=-1;
+ int wrappedBlock=-1;
+ int findRes(MouseEvent evt)
+ {
+ int res = 0;
+ int x = evt.getX();
- addMouseListener(new MouseAdapter()
+ if (av.wrapAlignment)
{
- public void mouseReleased(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
- if (editingSeqs)
- {
- doMouseReleased(evt);
- }
- else
- {
- doMouseReleasedDefineMode(evt);
- }
- }
+ int hgap = av.charHeight;
+ if (av.scaleAboveWrapped)
+ hgap += av.charHeight;
- public void mousePressed(MouseEvent evt)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
-
- if (evt.isShiftDown() || evt.isAltDown() ||
- evt.isControlDown())
- {
- if (evt.isAltDown() || evt.isControlDown())
- {
- groupEditing = true;
- }
-
- 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();
- public void doMouseReleased(MouseEvent evt)
- {
- if (seqEditOccurred > -1)
- {
- editOccurred(seqEditOccurred);
- }
-
- startseq = -1;
- lastres = -1;
- seqEditOccurred = -1;
- editingSeqs = false;
- groupEditing = false;
-
- ap.repaint();
- }
-
- public void doMousePressed(MouseEvent evt)
- {
- ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",
- av.alignment, HistoryItem.EDIT));
-
- int seq;
- int res;
-
- int x = evt.getX();
- int y = evt.getY();
-
- res = (x / av.getCharWidth()) + av.getStartRes();
- seq = (y / av.getCharHeight()) + av.getStartSeq();
-
- if ( (seq < av.getAlignment().getHeight()) &&
- (res < av.getAlignment().getSequenceAt(seq).getLength()))
- {
- startseq = seq;
- lastres = res;
}
else
{
- startseq = -1;
- lastres = -1;
+ res = (x / av.getCharWidth()) + av.getStartRes();
}
- startEdit = lastres;
- endEdit = lastres;
+ return res;
- return;
- }
+ }
- public void doMouseMoved(MouseEvent evt)
- {
- int res = 0;
- int seq = 0;
- int x = evt.getX();
- int y = evt.getY();
+ int findSeq(MouseEvent evt)
+ {
- if (av.wrapAlignment)
- {
- y -= (2 * av.charHeight);
+ int seq = 0;
+ int y = evt.getY();
- int chunkHeight = (av.getAlignment().getHeight() + 2) * av.charHeight;
+ if (av.wrapAlignment)
+ {
+ int hgap = av.charHeight;
+ if (av.scaleAboveWrapped)
+ hgap += av.charHeight;
- res = (int) ( (y / chunkHeight) * (getWidth() / av.charWidth)) +
- (x / av.getCharWidth()) + av.getStartRes();
+ int cHeight = av.getAlignment().getHeight() * av.charHeight
+ + hgap + seqCanvas.getAnnotationHeight();
- y %= chunkHeight;
- seq = (y / av.getCharHeight()) + av.getStartSeq();
- }
- else
- {
- res = (x / av.getCharWidth()) + av.getStartRes();
- seq = (y / av.getCharHeight()) + av.getStartSeq();
- }
-
- if (seq >= av.getAlignment().getHeight())
- {
- return;
- }
+ y -= hgap;
- SequenceI sequence = av.getAlignment().getSequenceAt(seq);
+ seq = ( (y % cHeight) / av.getCharHeight());
+ }
+ else
+ {
+ seq = (y / av.getCharHeight()) + av.getStartSeq();
+ }
- if (res > sequence.getLength())
- {
- return;
- }
+ return seq;
+ }
- Object obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) +
- "");
- String aa = "";
- if (obj != null)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMouseReleased(MouseEvent evt)
{
- aa = obj.toString();
- }
+ if (seqEditOccurred > -1)
+ {
+ editOccurred(seqEditOccurred);
+ }
- StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +
- sequence.getName());
+ startseq = -1;
+ lastres = -1;
+ seqEditOccurred = -1;
+ editingSeqs = false;
+ groupEditing = false;
- if (aa != "")
- {
- text.append(" Residue: " + aa + " (" +
- av.getAlignment().getSequenceAt(seq).findPosition(res) + ")");
+ ap.repaint();
}
- ap.alignFrame.statusBar.setText(text.toString());
-
- // use aa to see if the mouse pointer is on a
- if (av.showSequenceFeatures)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMousePressed(MouseEvent evt)
{
- Vector features = sequence.getSequenceFeatures();
- Enumeration e = features.elements();
- StringBuffer sbuffer = new StringBuffer();
+ ap.alignFrame.addHistoryItem(new HistoryItem("Edit Sequence",
+ av.alignment, HistoryItem.EDIT));
- while (e.hasMoreElements())
- {
- SequenceFeature sf = (SequenceFeature) e.nextElement();
+ int seq = findSeq(evt);
+ int res = findRes(evt);
- if ( (sf.getStart() <= sequence.findPosition(res)) &&
- (sf.getEnd() >= sequence.findPosition(res)))
- {
- if (sbuffer.length() > 0)
- {
- sbuffer.append("; ");
- }
-
- sbuffer.append(sf.getType() + " " + sf.getDescription());
+ if(seq<0 || res<0)
+ return;
- if (sf.getStatus().length() > 0)
- {
- sbuffer.append(" (" + sf.getStatus() + ")");
- }
+ if ((seq < av.getAlignment().getHeight()) &&
+ (res < av.getAlignment().getSequenceAt(seq).getLength()))
+ {
+ startseq = seq;
+ lastres = res;
+ }
+ else
+ {
+ startseq = -1;
+ lastres = -1;
}
- }
-
- this.setToolTipText(sbuffer.toString());
- }
- }
- public void doMouseDragged(MouseEvent evt)
- {
- // If we're dragging we're editing
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
+ startEdit = lastres;
+ endEdit = lastres;
- if (res < 0)
- {
- res = 0;
+ return;
}
- if ( (lastres == -1) || (lastres == res))
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMouseMoved(MouseEvent evt)
{
- return;
- }
+ int res = findRes(evt);
+ int seq = findSeq(evt);
- boolean dragRight = true;
+ if(res<0 || seq<0 || seq >= av.getAlignment().getHeight())
+ return;
- if ( (res < av.getAlignment().getWidth()) && (res < lastres))
- {
- dragRight = false;
- }
+ SequenceI sequence = av.getAlignment().getSequenceAt(seq);
- if (res != lastres)
- {
- // Group editing
- if (groupEditing)
+ if (res > sequence.getLength())
{
- SequenceGroup sg = av.getSelectionGroup();
+ return;
+ }
- if (sg == null)
- {
- lastres = -1;
+ if(seqCanvas.pdbCanvas!=null && sequence==seqCanvas.pdbCanvas.sequence)
+ {
+ seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));
+ }
- return;
- }
- // drag to right
- if (dragRight)
+ StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +
+ sequence.getName());
+
+ Object obj = null;
+ if (av.alignment.isNucleotide())
{
- sg.setEndRes(sg.getEndRes() + (res - lastres));
+ obj = ResidueProperties.nucleotideName.get(sequence.getCharAt(res) +
+ "");
+ if(obj!=null)
+ text.append(" Nucleotide: ");
}
- // drag to left
else
{
- /// Are we able to delete?
- // ie are all columns blank?
- boolean deleteAllowed = false;
+ obj = ResidueProperties.aa2Triplet.get(sequence.getCharAt(res) + "");
+ if(obj!=null)
+ text.append(" Residue: ");
+ }
+
+ if (obj != null)
+ {
- for (int s = 0; s < sg.getSize(); s++)
+ if (obj != "")
{
- SequenceI seq = sg.getSequenceAt(s);
+ text.append( obj + " (" +
+ av.getAlignment().getSequenceAt(seq).findPosition(res) + ")");
+ }
+ }
+
+ ap.alignFrame.statusBar.setText(text.toString());
- for (int j = res; j < lastres; j++)
+ // use aa to see if the mouse pointer is on a
+ if (av.showSequenceFeatures)
+ {
+ Vector features = sequence.getDatasetSequence().getSequenceFeatures();
+ if(features!=null)
{
- if (seq.getSequence().length() <= j)
- {
- continue;
- }
+ StringBuffer sbuffer = new StringBuffer("");
- if (!jalview.util.Comparison.isGap(
- seq.getSequence().charAt(j)))
+ for (int i = 0; i < features.size(); i++)
{
- // Not a gap, block edit not valid
- res = j + 1;
- deleteAllowed = false;
+ SequenceFeature sf = (SequenceFeature) features.elementAt(i);
+
+ if ( (sf.getBegin() <= sequence.findPosition(res)) &&
+ (sf.getEnd() >= sequence.findPosition(res)))
+ {
+ if (sf.getType().equals("disulfide bond"))
+ {
+ if (sf.getBegin() == sequence.findPosition(res)
+ || sf.getEnd() == sequence.findPosition(res))
+ {
+ 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());
+
+ if (sf.getStatus() != null)
+ {
+ sbuffer.append(" (" + sf.getStatus() + ")");
+ }
+ }
+ }
- continue;
}
- deleteAllowed = true;
+ sbuffer.append("");
+ if(sbuffer.length()==13) //
+ setToolTipText("");
+ else
+ setToolTipText(sbuffer.toString());
}
- }
-
- if (!deleteAllowed)
- {
- lastres = -1;
+ else
+ setToolTipText("");
+ }
+ }
- return;
- }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMouseDragged(MouseEvent evt)
+ {
+ // If we're dragging we're editing
+ int res = findRes(evt);
- sg.setEndRes(sg.getEndRes() - (lastres - res));
+ if (res < 0)
+ {
+ res = 0;
}
- for (int i = 0; i < sg.getSize(); i++)
+ if ((lastres == -1) || (lastres == res))
{
- SequenceI s = sg.getSequenceAt(i);
- int k = av.alignment.findIndex(s);
-
- // drag to right
- if (dragRight)
- {
- for (int j = lastres; j < res; j++)
- {
- insertChar(j, k);
- }
- }
- // drag to left
- else
- {
- for (int j = res; j < lastres; j++)
- {
- if (s.getLength() > j)
- {
- deleteChar(res, k);
- }
- }
- }
+ return;
}
- }
- else /////Editing a single sequence///////////
- {
- if ( (res < av.getAlignment().getWidth()) && (res > lastres))
+
+ boolean dragRight = true;
+
+ if ((res < av.getAlignment().getWidth()) && (res < lastres))
{
- // dragging to the right
- for (int j = lastres; j < res; j++)
- {
- insertChar(j, startseq);
- }
+ dragRight = false;
}
- else if ( (res < av.getAlignment().getWidth()) &&
- (res < lastres))
+
+ if (res != lastres)
{
- // dragging to the left
- for (int j = lastres; j > res; j--)
- {
- if (jalview.util.Comparison.isGap(
- av.alignment.getSequenceAt(startseq)
- .getSequence().charAt(res)))
+ // Group editing
+ if (groupEditing)
{
- deleteChar(res, startseq);
+ SequenceGroup sg = av.getSelectionGroup();
+
+ if (sg == null)
+ {
+ lastres = -1;
+
+ return;
+ }
+
+ // drag to right
+ if (dragRight)
+ {
+ sg.setEndRes(sg.getEndRes() + (res - lastres));
+ }
+
+ // drag to left
+ else
+ {
+ /// Are we able to delete?
+ // ie are all columns blank?
+ boolean deleteAllowed = false;
+
+ for (int s = 0; s < sg.getSize(); s++)
+ {
+ SequenceI seq = sg.getSequenceAt(s);
+
+ for (int j = res; j < lastres; j++)
+ {
+ if (seq.getSequence().length() <= j)
+ {
+ continue;
+ }
+
+ if (!jalview.util.Comparison.isGap(
+ seq.getSequence().charAt(j)))
+ {
+ // Not a gap, block edit not valid
+ res = j + 1;
+ deleteAllowed = false;
+
+ continue;
+ }
+
+ deleteAllowed = true;
+ }
+ }
+
+ if (!deleteAllowed)
+ {
+ lastres = -1;
+
+ return;
+ }
+
+ sg.setEndRes(sg.getEndRes() - (lastres - res));
+ }
+
+ for (int i = 0; i < sg.getSize(); i++)
+ {
+ SequenceI s = sg.getSequenceAt(i);
+ int k = av.alignment.findIndex(s);
+
+ // drag to right
+ if (dragRight)
+ {
+ for (int j = lastres; j < res; j++)
+ {
+ insertChar(j, k);
+ }
+ }
+
+ // drag to left
+ else
+ {
+ for (int j = res; j < lastres; j++)
+ {
+ if (s.getLength() > j)
+ {
+ deleteChar(res, k);
+ }
+ }
+ }
+ }
}
- else
+ else /////Editing a single sequence///////////
{
- break;
+ if ((res < av.getAlignment().getWidth()) && (res > lastres))
+ {
+ // dragging to the right
+ for (int j = lastres; j < res; j++)
+ {
+ insertChar(j, startseq);
+ }
+ }
+ else if ((res < av.getAlignment().getWidth()) &&
+ (res < lastres))
+ {
+ // dragging to the left
+ for (int j = lastres; j > res; j--)
+ {
+ if (jalview.util.Comparison.isGap(
+ av.alignment.getSequenceAt(startseq)
+ .getSequence().charAt(res)))
+ {
+ deleteChar(res, startseq);
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
}
- }
}
- }
+
+ endEdit = res;
+ lastres = res;
+ seqCanvas.repaint();
}
- endEdit = res;
- lastres = res;
- seqCanvas.repaint();
- }
-
- public void drawChars(int seqstart, int seqend, int start)
- {
- seqCanvas.drawPanel(seqCanvas.gg, start, av.getEndRes(), seqstart,
- seqend, av.getStartRes(), av.getStartSeq(), 0);
- seqCanvas.repaint();
- }
-
- public void insertChar(int j, int seq)
- {
- av.alignment.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter());
- seqEditOccurred = seq;
- }
-
- public void deleteChar(int j, int seq)
- {
- av.alignment.getSequenceAt(seq).deleteCharAt(j);
- seqEditOccurred = seq;
-
- av.alignment.getWidth();
- seqCanvas.repaint();
- }
-
- void editOccurred(int i)
- {
- if (endEdit == startEdit)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param seqstart DOCUMENT ME!
+ * @param seqend DOCUMENT ME!
+ * @param start DOCUMENT ME!
+ */
+ public void drawChars(int seqstart, int seqend, int start)
{
- ap.alignFrame.historyList.pop();
- ap.alignFrame.updateEditMenuBar();
+ seqCanvas.drawPanel(seqCanvas.gg, start, av.getEndRes(), seqstart,
+ seqend, av.getStartRes(), av.getStartSeq(), 0);
+ seqCanvas.repaint();
}
- av.updateConservation();
- av.updateConsensus();
-
- // Y O Y CLUSTALX
- ColourSchemeI cs = av.getGlobalColourScheme();
-
- if(av.getSelectionGroup()!=null)
- av.getSelectionGroup().recalcConservation();
-
-
- if (cs instanceof ConservationColourScheme)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param j DOCUMENT ME!
+ * @param seq DOCUMENT ME!
+ */
+ public void insertChar(int j, int seq)
{
- 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.alignment.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter());
+ seqEditOccurred = seq;
}
- if (cs instanceof ClustalxColourScheme)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param j DOCUMENT ME!
+ * @param seq DOCUMENT ME!
+ */
+ public void deleteChar(int j, int seq)
{
- ( (ClustalxColourScheme) cs).resetClustalX(av.alignment.getSequences(),
- av.alignment.getWidth());
- av.setGlobalColourScheme(cs);
+ av.alignment.getSequenceAt(seq).deleteCharAt(j);
+ seqEditOccurred = seq;
+
+ av.alignment.getWidth();
+ seqCanvas.repaint();
}
- }
- public void doMousePressedDefineMode(MouseEvent evt)
- {
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
- int seq = (evt.getY() / av.getCharHeight()) + av.getStartSeq();
- oldSeq = seq;
+ /**
+ * DOCUMENT ME!
+ *
+ * @param i DOCUMENT ME!
+ */
+ void editOccurred(int i)
+ {
+ if (endEdit == startEdit)
+ {
+ ap.alignFrame.historyList.pop();
+ ap.alignFrame.updateEditMenuBar();
+ }
- SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq);
+ av.firePropertyChange("alignment", null,av.getAlignment().getSequences());
- if ( (sequence == null) || (res > sequence.getLength()))
- {
- return;
}
- stretchGroup = av.getSelectionGroup();
-
- if (stretchGroup == null)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMousePressedDefineMode(MouseEvent evt)
{
- stretchGroup = av.alignment.findGroup(sequence);
+ int res = findRes(evt);
+ int seq = findSeq(evt);
+ oldSeq = seq;
- if ( (stretchGroup != null) && (res > stretchGroup.getStartRes()) &&
- (res < stretchGroup.getEndRes()))
+ startWrapBlock=wrappedBlock;
+
+ if(av.wrapAlignment && seq>av.alignment.getHeight())
{
- av.setSelectionGroup(stretchGroup);
+ JOptionPane.showInternalMessageDialog(Desktop.desktop,
+ "Cannot edit annotations in wrapped view.",
+ "Wrapped view - no edit",
+ JOptionPane.WARNING_MESSAGE);
+ return;
}
- else
- {
- stretchGroup = null;
- }
- }
- else if (!stretchGroup.sequences.contains(sequence) ||
- (stretchGroup.getStartRes() > res) ||
- (stretchGroup.getEndRes() < res))
- {
- stretchGroup = null;
- SequenceGroup[] allGroups = av.alignment.findAllGroups(sequence);
+ if(seq<0 || res<0)
+ return;
- if (allGroups != null)
- {
- for (int i = 0; i < allGroups.length; i++)
- {
- if ( (allGroups[i].getStartRes() <= res) &&
- (allGroups[i].getEndRes() >= res))
- {
- stretchGroup = allGroups[i];
- av.setSelectionGroup(stretchGroup);
- break;
- }
+ SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq);
+
+ if ((sequence == null) || (res > sequence.getLength()))
+ {
+ return;
}
- }
- }
- if (stretchGroup == null)
- {
- // 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())
- {
- SliderPanel.setConservationSlider(ap,
- av.getGlobalColourScheme(),
- "Background");
- }
+ stretchGroup = av.getSelectionGroup();
- if (av.getAbovePIDThreshold())
- {
- SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(),
- "Background");
- }
- }
- else if (javax.swing.SwingUtilities.isRightMouseButton(evt))
- {
- jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null);
- pop.show(this, evt.getX(), evt.getY());
+ if (stretchGroup == null)
+ {
+ stretchGroup = av.alignment.findGroup(sequence);
- // edit the properties of existing group
- }
+ if ((stretchGroup != null) && (res > stretchGroup.getStartRes()) &&
+ (res < stretchGroup.getEndRes()))
+ {
+ av.setSelectionGroup(stretchGroup);
+ }
+ else
+ {
+ stretchGroup = null;
+ }
+ }
+ else if (!stretchGroup.sequences.contains(sequence) ||
+ (stretchGroup.getStartRes() > res) ||
+ (stretchGroup.getEndRes() < res))
+ {
+ stretchGroup = null;
- if ( (stretchGroup != null) && (stretchGroup.getEndRes() == res))
- {
- // Edit end res position of selected group
- changeEndRes = true;
- }
- else if ( (stretchGroup != null) && (stretchGroup.getStartRes() == res))
- {
- // Edit end res position of selected group
- changeStartRes = true;
- }
+ SequenceGroup[] allGroups = av.alignment.findAllGroups(sequence);
- stretchGroup.getWidth();
+ if (allGroups != null)
+ {
+ for (int i = 0; i < allGroups.length; i++)
+ {
+ if ((allGroups[i].getStartRes() <= res) &&
+ (allGroups[i].getEndRes() >= res))
+ {
+ stretchGroup = allGroups[i];
+ av.setSelectionGroup(stretchGroup);
+
+ break;
+ }
+ }
+ }
+ }
- seqCanvas.repaint();
- }
+ if (stretchGroup == null)
+ {
+ // 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())
+ {
+ SliderPanel.setConservationSlider(ap,
+ av.getGlobalColourScheme(), "Background");
+ }
- public void doMouseReleasedDefineMode(MouseEvent evt)
- {
- if(mouseDragging)
- {
- stretchGroup.recalcConservation();
- mouseDragging = false;
- }
+ if (av.getAbovePIDThreshold())
+ {
+ SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(),
+ "Background");
+ }
+ }
+ else if (javax.swing.SwingUtilities.isRightMouseButton(evt))
+ {
+ jalview.gui.PopupMenu pop = new jalview.gui.PopupMenu(ap, null);
+ pop.show(this, evt.getX(), evt.getY());
- if (stretchGroup == null)
- {
- return;
- }
+ // edit the properties of existing group
+ }
- if (stretchGroup.cs instanceof ClustalxColourScheme)
- {
- ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.sequences,
- stretchGroup.getWidth());
- }
+ if ((stretchGroup != null) && (stretchGroup.getEndRes() == res))
+ {
+ // Edit end res position of selected group
+ changeEndRes = true;
+ }
+ else if ((stretchGroup != null) && (stretchGroup.getStartRes() == res))
+ {
+ // Edit end res position of selected group
+ changeStartRes = true;
+ }
- if (stretchGroup.cs instanceof ConservationColourScheme)
- {
- ConservationColourScheme ccs = (ConservationColourScheme) stretchGroup.cs;
- stretchGroup.cs = ccs;
- SliderPanel.setConservationSlider(ap, stretchGroup.cs,
- stretchGroup.getName());
+ stretchGroup.getWidth();
+ seqCanvas.repaint();
}
- else
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMouseReleasedDefineMode(MouseEvent evt)
{
- SliderPanel.setPIDSliderSource(ap, stretchGroup.cs,
- stretchGroup.getName());
- }
+ if (mouseDragging)
+ {
+ stretchGroup.recalcConservation();
+ mouseDragging = false;
+ }
- changeEndRes = false;
- changeStartRes = false;
- stretchGroup = null;
- seqCanvas.repaint();
- ap.idPanel.repaint();
- }
+ if (stretchGroup == null)
+ {
+ return;
+ }
- public void doMouseDraggedDefineMode(MouseEvent evt)
- {
- int res = (evt.getX() / av.getCharWidth()) + av.getStartRes();
- int y = (evt.getY() / av.getCharHeight()) + av.getStartSeq();
+ if(stretchGroup.cs!=null)
+ {
+ if (stretchGroup.cs instanceof ClustalxColourScheme)
+ {
+ ( (ClustalxColourScheme) stretchGroup.cs).resetClustalX(stretchGroup.
+ sequences,
+ stretchGroup.getWidth());
+ }
- if (stretchGroup == null)
- {
- return;
+ if (stretchGroup.cs.conservationApplied())
+ {
+ SliderPanel.setConservationSlider(ap, stretchGroup.cs,
+ stretchGroup.getName());
+ }
+ else
+ {
+ SliderPanel.setPIDSliderSource(ap, stretchGroup.cs,
+ stretchGroup.getName());
+ }
+ }
+ changeEndRes = false;
+ changeStartRes = false;
+ stretchGroup = null;
+ PaintRefresher.Refresh(av.alignment);
}
- if (res > av.alignment.getWidth())
+ /**
+ * DOCUMENT ME!
+ *
+ * @param evt DOCUMENT ME!
+ */
+ public void doMouseDraggedDefineMode(MouseEvent evt)
{
- res = av.alignment.getWidth() - 1;
- }
+ int res = findRes(evt);
+ int y = findSeq(evt);
- if (stretchGroup.getEndRes() == res)
- {
- // Edit end res position of selected group
- changeEndRes = true;
- }
- else if (stretchGroup.getStartRes() == res)
- {
- // Edit start res position of selected group
- changeStartRes = true;
- }
+ if(wrappedBlock!=startWrapBlock)
+ return;
- if (res < av.getStartRes())
- {
- res = av.getStartRes();
- }
- else if (res > av.getEndRes())
- {
- res = av.getEndRes();
- }
-
- if (changeEndRes)
- {
- if (res > (stretchGroup.getStartRes() - 1))
+ if (stretchGroup == null)
{
- stretchGroup.setEndRes(res);
- }
- }
- else if (changeStartRes)
- {
- if (res < (stretchGroup.getEndRes() + 1))
- {
- stretchGroup.setStartRes(res);
- }
- }
+ return;
+ }
- int dragDirection = 0;
+ if (res > av.alignment.getWidth())
+ {
+ res = av.alignment.getWidth() - 1;
+ }
- if (y > oldSeq)
- {
- dragDirection = 1;
- }
- else if (y < oldSeq)
- {
- dragDirection = -1;
- }
+ if (stretchGroup.getEndRes() == res)
+ {
+ // Edit end res position of selected group
+ changeEndRes = true;
+ }
+ else if (stretchGroup.getStartRes() == res)
+ {
+ // Edit start res position of selected group
+ changeStartRes = true;
+ }
- while ( (y != oldSeq) && (oldSeq > 0) && (y < av.alignment.getHeight()))
- {
- // This routine ensures we don't skip any sequences, as the
- // selection is quite slow.
- Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);
+ if (res < av.getStartRes())
+ {
+ res = av.getStartRes();
+ }
+ else if (res > av.getEndRes() && !av.getWrapAlignment())
+ {
+ res = av.getEndRes();
+ }
- oldSeq += dragDirection;
+ if (changeEndRes)
+ {
+ if (res > (stretchGroup.getStartRes() - 1))
+ {
+ stretchGroup.setEndRes(res);
+ }
+ }
+ else if (changeStartRes)
+ {
+ if (res < (stretchGroup.getEndRes() + 1))
+ {
+ stretchGroup.setStartRes(res);
+ }
+ }
- Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);
+ int dragDirection = 0;
- if (stretchGroup.sequences.contains(nextSeq))
- {
- stretchGroup.deleteSequence(seq, false);
- }
- else
- {
- if (seq != null)
+ if (y > oldSeq)
{
- stretchGroup.addSequence(seq, false);
+ dragDirection = 1;
+ }
+ else if (y < oldSeq)
+ {
+ dragDirection = -1;
}
- stretchGroup.addSequence(nextSeq, false);
- }
- }
- oldSeq = y;
- mouseDragging = true;
+ while ((y != oldSeq) && (oldSeq > 0) && (y < av.alignment.getHeight()))
+ {
+ // This routine ensures we don't skip any sequences, as the
+ // selection is quite slow.
+ Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);
- if (scrollThread != null)
- {
- scrollThread.setEvent(evt);
- }
+ oldSeq += dragDirection;
- seqCanvas.repaint();
- }
+ Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);
- public void doMouseEnteredDefineMode(MouseEvent e)
- {
- if (scrollThread != null)
- {
- scrollThread.running = false;
- }
- }
+ if (stretchGroup.sequences.contains(nextSeq))
+ {
+ stretchGroup.deleteSequence(seq, false);
+ }
+ else
+ {
+ if (seq != null)
+ {
+ stretchGroup.addSequence(seq, false);
+ }
- public void doMouseExitedDefineMode(MouseEvent e)
- {
- if (av.getWrapAlignment())
- {
- return;
- }
+ stretchGroup.addSequence(nextSeq, false);
+ }
+ }
- if (mouseDragging)
- {
- scrollThread = new ScrollThread();
- }
- }
+ oldSeq = y;
+ mouseDragging = true;
- // this class allows scrolling off the bottom of the visible alignment
- class ScrollThread
- extends Thread
- {
- MouseEvent evt;
- boolean running = false;
+ if (scrollThread != null)
+ {
+ scrollThread.setEvent(evt);
+ }
- public ScrollThread()
- {
- start();
+ seqCanvas.repaint();
}
- public void setEvent(MouseEvent e)
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void doMouseEnteredDefineMode(MouseEvent e)
{
- evt = e;
+ if (scrollThread != null)
+ {
+ scrollThread.running = false;
+ }
}
- public void stopScrolling()
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e DOCUMENT ME!
+ */
+ public void doMouseExitedDefineMode(MouseEvent e)
{
- running = false;
+ if (av.getWrapAlignment())
+ {
+ return;
+ }
+
+ if (mouseDragging)
+ {
+ scrollThread = new ScrollThread();
+ }
}
- public void run()
+ // this class allows scrolling off the bottom of the visible alignment
+ class ScrollThread extends Thread
{
- running = true;
+ MouseEvent evt;
+ boolean running = false;
- while (running)
- {
- if (evt != null)
+ public ScrollThread()
{
- if (mouseDragging && (evt.getY() < 0) &&
- (av.getStartSeq() > 0))
- {
- running = ap.scrollUp(true);
- }
-
- if (mouseDragging && (evt.getY() >= getHeight()) &&
- (av.alignment.getHeight() > av.getEndSeq()))
- {
- running = ap.scrollUp(false);
- }
+ start();
+ }
- if (mouseDragging && (evt.getX() < 0))
- {
- running = ap.scrollRight(true);
- }
- else if (mouseDragging && (evt.getX() >= getWidth()))
- {
- running = ap.scrollRight(false);
- }
+ public void setEvent(MouseEvent e)
+ {
+ evt = e;
}
- try
+ public void stopScrolling()
{
- Thread.sleep(75);
+ running = false;
}
- catch (Exception ex)
+
+ public void run()
{
+ running = true;
+
+ while (running)
+ {
+ if (evt != null)
+ {
+ if (mouseDragging && (evt.getY() < 0) &&
+ (av.getStartSeq() > 0))
+ {
+ running = ap.scrollUp(true);
+ }
+
+ if (mouseDragging && (evt.getY() >= getHeight()) &&
+ (av.alignment.getHeight() > av.getEndSeq()))
+ {
+ running = ap.scrollUp(false);
+ }
+
+ if (mouseDragging && (evt.getX() < 0))
+ {
+ running = ap.scrollRight(true);
+ }
+ else if (mouseDragging && (evt.getX() >= getWidth()))
+ {
+ running = ap.scrollRight(false);
+ }
+ }
+
+ try
+ {
+ Thread.sleep(20);
+ }
+ catch (Exception ex)
+ {
+ }
+ }
}
- }
}
- }
}