import jalview.commands.*;\r
import jalview.datamodel.*;\r
import jalview.schemes.*;\r
+import jalview.structure.SequenceListener;\r
+import jalview.structure.StructureSelectionManager;\r
\r
public class SeqPanel\r
- extends Panel implements MouseMotionListener, MouseListener\r
+ extends Panel implements MouseMotionListener, MouseListener, SequenceListener\r
{\r
\r
public SeqCanvas seqCanvas;\r
\r
EditCommand editCommand;\r
\r
+ StructureSelectionManager ssm;\r
+\r
+\r
public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
{\r
this.av = avp;\r
\r
seqCanvas.addMouseMotionListener(this);\r
seqCanvas.addMouseListener(this);\r
+ ssm = StructureSelectionManager.getStructureSelectionManager();\r
+ ssm.addStructureViewerListener(this);\r
\r
seqCanvas.repaint();\r
}\r
\r
void setCursorRow()\r
{\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorY = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
void setCursorColumn()\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
scrollToVisible();\r
}\r
\r
}\r
else\r
{\r
- seqCanvas.cursorX = getKeyboardNo(keyboardNo1) - 1;\r
- seqCanvas.cursorY = getKeyboardNo(keyboardNo2) - 1;\r
+ seqCanvas.cursorX = getKeyboardNo1() - 1;\r
+ seqCanvas.cursorY = getKeyboardNo2() - 1;\r
scrollToVisible();\r
}\r
}\r
(Sequence) av.getAlignment().getSequenceAt(seqCanvas.cursorY);\r
\r
seqCanvas.cursorX = sequence.findIndex(\r
- getKeyboardNo(keyboardNo1) - 1\r
+ getKeyboardNo1() - 1\r
);\r
scrollToVisible();\r
}\r
av.setSelectionGroup(sg);\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
void insertGapAtCursor(boolean group)\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
lastres = seqCanvas.cursorX;\r
- editSequence(true, seqCanvas.cursorX + getKeyboardNo(keyboardNo1));\r
+ editSequence(true, seqCanvas.cursorX + getKeyboardNo1());\r
endEditing();\r
}\r
\r
{\r
groupEditing = group;\r
startseq = seqCanvas.cursorY;\r
- lastres = seqCanvas.cursorX + getKeyboardNo(keyboardNo1);\r
+ lastres = seqCanvas.cursorX + getKeyboardNo1();\r
editSequence(false, seqCanvas.cursorX);\r
endEditing();\r
}\r
}\r
}\r
\r
- int getKeyboardNo(StringBuffer kb)\r
+ int getKeyboardNo1()\r
{\r
- if (kb == null)\r
- {\r
+ if (keyboardNo1 == null)\r
return 1;\r
+ else\r
+ {\r
+ int value = Integer.parseInt(keyboardNo1.toString());\r
+ keyboardNo1 = null;\r
+ return value;\r
}\r
+ }\r
+\r
+ int getKeyboardNo2()\r
+ {\r
+ if (keyboardNo2 == null)\r
+ return 1;\r
else\r
{\r
- return Integer.parseInt(kb.toString());\r
+ int value = Integer.parseInt(keyboardNo2.toString());\r
+ keyboardNo2 = null;\r
+ return value;\r
}\r
}\r
\r
+\r
void setStatusMessage(SequenceI sequence, int res, int seq)\r
{\r
StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +\r
}\r
\r
public void mouseClicked(MouseEvent evt)\r
- {}\r
+ {\r
+ SequenceI sequence = av.alignment.getSequenceAt(findSeq(evt));\r
+ if (evt.getClickCount() > 1)\r
+ {\r
+ if (av.getSelectionGroup().getSize() == 1\r
+ && av.getSelectionGroup().getEndRes()\r
+ - av.getSelectionGroup().getStartRes() < 2)\r
+ {\r
+ av.setSelectionGroup(null);\r
+ }\r
+\r
+ SequenceFeature[] features = findFeaturesAtRes(\r
+ sequence,\r
+ sequence.findPosition(findRes(evt))\r
+ );\r
+\r
+ if (features != null && features.length > 0)\r
+ {\r
+ SearchResults highlight = new SearchResults();\r
+ highlight.addResult(sequence,\r
+ features[0].getBegin(),\r
+ features[0].getEnd());\r
+ seqCanvas.highlightSearchResults(highlight);\r
+ }\r
+ if (features != null && features.length > 0)\r
+ {\r
+ seqCanvas.getFeatureRenderer().amendFeatures(\r
+ new SequenceI[]\r
+ {sequence}, features, false, ap);\r
+\r
+ seqCanvas.highlightSearchResults(null);\r
+ }\r
+ }\r
+ }\r
\r
public void mouseReleased(MouseEvent evt)\r
{\r
mouseDragging = false;\r
mouseWheelPressed = false;\r
+ ap.paintAlignment(true);\r
\r
if (!editingSeqs)\r
{\r
}\r
\r
endEditing();\r
- ap.repaint();\r
+\r
}\r
\r
int startWrapBlock = -1;\r
return seq;\r
}\r
\r
+\r
+\r
public void doMousePressed(MouseEvent evt)\r
{\r
\r
return;\r
}\r
\r
+\r
+ String lastMessage;\r
+ public void mouseOverSequence(SequenceI sequence, int index)\r
+ {\r
+ String tmp = sequence.hashCode()+index+"";\r
+ if (lastMessage == null || !lastMessage.equals(tmp))\r
+ ssm.mouseOverSequence(sequence, index);\r
+\r
+ lastMessage = tmp;\r
+ }\r
+\r
+\r
+ public void highlightSequence(jalview.datamodel.SequenceI seq, int index)\r
+ {\r
+ if(av.alignment.findIndex(seq)>-1)\r
+ {\r
+ SearchResults highlight = new SearchResults();\r
+ highlight.addResult(seq,index,index);\r
+ seqCanvas.highlightSearchResults(highlight);\r
+ }\r
+ }\r
+\r
+ public void updateColours(SequenceI seq, int index)\r
+ {\r
+ System.out.println("update the seqPanel colours");\r
+ //repaint();\r
+ }\r
+\r
public void mouseMoved(MouseEvent evt)\r
{\r
int res = findRes(evt);\r
return;\r
}\r
\r
+\r
+ if (ssm != null)\r
+ mouseOverSequence(sequence, sequence.findPosition(res));\r
+\r
+\r
StringBuffer text = new StringBuffer("Sequence " + (seq + 1) + " ID: " +\r
sequence.getName());\r
\r
}\r
}\r
\r
- if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence)\r
- {\r
- seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));\r
- }\r
-\r
ap.alignFrame.statusBar.setText(text.toString());\r
\r
StringBuffer tooltipText = new StringBuffer();\r
}\r
\r
// use aa to see if the mouse pointer is on a\r
- if (av.showSequenceFeatures\r
- && sequence.getSequenceFeatures() != null\r
- && av.featuresDisplayed != null)\r
- {\r
-\r
- Vector allFeatures = getAllFeaturesAtRes(sequence,\r
+ SequenceFeature [] allFeatures = findFeaturesAtRes(sequence,\r
sequence.findPosition(res));\r
\r
int index = 0;\r
- while (index < allFeatures.size())\r
+ while (index < allFeatures.length)\r
{\r
- SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(index);\r
+ SequenceFeature sf = allFeatures[index];\r
\r
tooltipText.append(sf.getType() + " " + sf.begin + ":" + sf.end);\r
\r
\r
index++;\r
}\r
- }\r
\r
if (tooltip == null)\r
{\r
}\r
}\r
\r
- Vector getAllFeaturesAtRes(SequenceI seq, int res)\r
+ SequenceFeature[] findFeaturesAtRes(SequenceI sequence, int res)\r
{\r
- Vector allFeatures = new Vector();\r
- int index = 0;\r
- if (seq.getSequenceFeatures() != null)\r
+ Vector tmp = new Vector();\r
+ SequenceFeature[] features = sequence.getSequenceFeatures();\r
+ if (features != null)\r
{\r
- while (index < seq.getSequenceFeatures().length)\r
+ for (int i = 0; i < features.length; i++)\r
{\r
- SequenceFeature sf = seq.getSequenceFeatures()[index];\r
- if (sf.getBegin() <= res &&\r
- sf.getEnd() >= res)\r
+ if (av.featuresDisplayed == null\r
+ || !av.featuresDisplayed.containsKey(features[i].getType()))\r
{\r
- if (av.featuresDisplayed.containsKey(sf.getType()))\r
- {\r
- allFeatures.addElement(sf);\r
- }\r
+ continue;\r
+ }\r
+\r
+ if ( (features[i].getBegin() <= res) &&\r
+ (features[i].getEnd() >= res))\r
+ {\r
+ tmp.addElement(features[i]);\r
}\r
- index++;\r
}\r
}\r
- return allFeatures;\r
+\r
+ features = new SequenceFeature[tmp.size()];\r
+ tmp.copyInto(features);\r
+\r
+ return features;\r
}\r
\r
+\r
Tooltip tooltip;\r
\r
public void mouseDragged(MouseEvent evt)\r
\r
lastMousePress = evt.getPoint();\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
ap.annotationPanel.image = null;\r
return;\r
}\r
if ( (evt.getModifiers() & InputEvent.BUTTON3_MASK) ==\r
InputEvent.BUTTON3_MASK)\r
{\r
- Vector allFeatures = getAllFeaturesAtRes(sequence,\r
+ SequenceFeature [] allFeatures = findFeaturesAtRes(sequence,\r
sequence.findPosition(res));\r
\r
Vector links = null;\r
if (allFeatures != null)\r
{\r
- for (int i = 0; i < allFeatures.size(); i++)\r
+ for (int i = 0; i < allFeatures.length; i++)\r
{\r
- SequenceFeature sf = (SequenceFeature) allFeatures.elementAt(i);\r
- if (sf.links != null)\r
+ if (allFeatures[i].links != null)\r
{\r
links = new Vector();\r
- for (int j = 0; j < sf.links.size(); j++)\r
+ for (int j = 0; j < allFeatures[i].links.size(); j++)\r
{\r
- links.addElement(sf.links.elementAt(j));\r
+ links.addElement(allFeatures[i].links.elementAt(j));\r
}\r
}\r
}\r
APopupMenu popup = new APopupMenu(ap, null, links);\r
this.add(popup);\r
popup.show(this, evt.getX(), evt.getY());\r
- ap.repaint();\r
return;\r
}\r
\r
changeStartRes = false;\r
stretchGroup = null;\r
PaintRefresher.Refresh(ap, av.getSequenceSetId());\r
- ap.repaint();\r
+ ap.paintAlignment(true);\r
}\r
\r
public void doMouseDraggedDefineMode(MouseEvent evt)\r