import jalview.commands.*;\r
import jalview.datamodel.*;\r
import jalview.schemes.*;\r
+import jalview.structure.*;\r
\r
/**\r
* DOCUMENT ME!\r
*/\r
public class SeqPanel\r
extends JPanel implements MouseListener,\r
- MouseMotionListener, MouseWheelListener\r
+ MouseMotionListener, MouseWheelListener, SequenceListener\r
\r
{\r
/** DOCUMENT ME!! */\r
\r
EditCommand editCommand;\r
\r
+ StructureSelectionManager ssm;\r
+\r
+\r
/**\r
* Creates a new SeqPanel object.\r
*\r
* @param avp DOCUMENT ME!\r
* @param p DOCUMENT ME!\r
*/\r
- public SeqPanel(AlignViewport avp, AlignmentPanel p)\r
+ public SeqPanel(AlignViewport av, AlignmentPanel ap)\r
{\r
linkImageURL = getClass().getResource("/images/link.gif");\r
ToolTipManager.sharedInstance().registerComponent(this);\r
ToolTipManager.sharedInstance().setInitialDelay(0);\r
ToolTipManager.sharedInstance().setDismissDelay(10000);\r
- this.av = avp;\r
+ this.av = av;\r
setBackground(Color.white);\r
\r
- seqCanvas = new SeqCanvas(avp);\r
+ seqCanvas = new SeqCanvas(ap);\r
setLayout(new BorderLayout());\r
add(seqCanvas, BorderLayout.CENTER);\r
\r
- ap = p;\r
+ this.ap = ap;\r
\r
if (!av.isDataset())\r
{\r
addMouseMotionListener(this);\r
addMouseListener(this);\r
addMouseWheelListener(this);\r
+ ssm = StructureSelectionManager.getStructureSelectionManager();\r
+ ssm.addStructureViewerListener(this);\r
}\r
}\r
\r
continue;\r
}\r
\r
+ if (features[i].featureGroup != null\r
+ && seqCanvas.fr.featureGroups!=null\r
+ && seqCanvas.fr.featureGroups.containsKey(features[i].featureGroup)\r
+ && !((Boolean)seqCanvas.fr.featureGroups.get(features[i].featureGroup)).booleanValue())\r
+ continue;\r
+\r
+\r
if ( (features[i].getBegin() <= res) &&\r
(features[i].getEnd() >= res))\r
{\r
}\r
\r
features = new SequenceFeature[tmp.size()];\r
- for (int i = 0; i < tmp.size(); i++)\r
- {\r
- features[i] = (SequenceFeature) tmp.elementAt(i);\r
- }\r
+ tmp.copyInto(features);\r
\r
return features;\r
}\r
\r
- Vector getAllFeaturesAtRes(SequenceI seq, int res)\r
- {\r
- Vector allFeatures = new Vector();\r
- int index = 0;\r
- if (seq.getSequenceFeatures() != null && av.featuresDisplayed != null)\r
- {\r
- while (index < seq.getSequenceFeatures().length)\r
- {\r
- SequenceFeature sf = seq.getSequenceFeatures()[index];\r
- if (sf.getBegin() <= res &&\r
- sf.getEnd() >= res)\r
- {\r
- if (av.featuresDisplayed.containsKey(sf.getType()))\r
- {\r
- allFeatures.addElement(sf);\r
- }\r
- }\r
- index++;\r
- }\r
- }\r
- return allFeatures;\r
- }\r
\r
void endEditing()\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
\r
endEditing();\r
-\r
- ap.repaint();\r
}\r
\r
/**\r
return;\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
/**\r
* DOCUMENT ME!\r
*\r
return;\r
}\r
\r
- if (seqCanvas.pdbCanvas != null && sequence == seqCanvas.pdbCanvas.sequence)\r
- {\r
- seqCanvas.pdbCanvas.highlightRes(sequence.findPosition(res));\r
- }\r
+ if (ssm != null)\r
+ mouseOverSequence(sequence, sequence.findPosition(res));\r
\r
setStatusMessage(sequence, res, seq);\r
\r
av.charWidth++;\r
}\r
\r
- ap.repaint();\r
+ ap.paintAlignment(false);\r
}\r
\r
FontMetrics fm = getFontMetrics(av.getFont());\r
{\r
scrollThread.setEvent(evt);\r
}\r
-\r
}\r
\r
+\r
+\r
synchronized void editSequence(boolean insertGap, int startres)\r
{\r
int fixedLeft = -1;\r
public void mouseWheelMoved(MouseWheelEvent e)\r
{\r
e.consume();\r
- /* if (mouseWheelPressed)\r
- {\r
- Font font = av.getFont();\r
- int fontSize = font.getSize();\r
- if (e.getWheelRotation() > 0 && fontSize < 51)\r
- fontSize++;\r
- else if (fontSize > 1)\r
- fontSize--;\r
-\r
-\r
-\r
- av.setFont(new Font(font.getName(), font.getStyle(), fontSize));\r
-\r
- ap.fontChanged();\r
- }\r
- else*/\r
- {\r
if (e.getWheelRotation() > 0)\r
{\r
ap.scrollUp(false);\r
{\r
ap.scrollUp(true);\r
}\r
- }\r
-\r
}\r
\r
/**\r
\r
if (javax.swing.SwingUtilities.isRightMouseButton(evt))\r
{\r
- Vector allFeatures = getAllFeaturesAtRes(sequence.getDatasetSequence(),\r
+ SequenceFeature [] allFeatures = findFeaturesAtRes(sequence.getDatasetSequence(),\r
sequence.findPosition(res));\r
Vector links = new Vector();\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
- 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
SliderPanel.setPIDSliderSource(ap, stretchGroup.cs,\r
stretchGroup.getName());\r
}\r
+ PaintRefresher.Refresh(this, av.getSequenceSetId());\r
+ ap.paintAlignment(true);\r
}\r
+\r
changeEndRes = false;\r
changeStartRes = false;\r
stretchGroup = null;\r
\r
- PaintRefresher.Refresh(this, av.getSequenceSetId());\r
}\r
\r
/**\r