{\r
public void keyPressed(KeyEvent evt)\r
{\r
+ if(av.cursorMode\r
+ && evt.getKeyCode()>=KeyEvent.VK_0\r
+ && evt.getKeyCode()<=KeyEvent.VK_9)\r
+ {\r
+ seqPanel.numberPressed(evt.getKeyChar());\r
+ }\r
+\r
switch (evt.getKeyCode())\r
{\r
case 27: // escape key\r
break;\r
\r
case KeyEvent.VK_DOWN:\r
- alignFrame.moveSelectedSequences(false);\r
-\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.moveCursor(0,1);\r
+ }\r
+ else\r
+ alignFrame.moveSelectedSequences(false);\r
break;\r
\r
case KeyEvent.VK_UP:\r
- alignFrame.moveSelectedSequences(true);\r
+ if (av.cursorMode)\r
+ {\r
+ seqPanel.moveCursor(0,-1);\r
+ }\r
+ else\r
+ alignFrame.moveSelectedSequences(true);\r
+ break;\r
\r
+ case KeyEvent.VK_LEFT:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.moveCursor(-1,0);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_RIGHT:\r
+ if (av.cursorMode)\r
+ {\r
+ seqPanel.moveCursor(1,0);\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_SPACE:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.insertGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
+ }\r
break;\r
\r
- case KeyEvent.VK_BACK_SPACE:\r
case KeyEvent.VK_DELETE:\r
- alignFrame.cut_actionPerformed(null);\r
+ case KeyEvent.VK_BACK_SPACE:\r
+ if(!av.cursorMode)\r
+ {\r
+ alignFrame.cut_actionPerformed(null);\r
+ seqPanel.seqCanvas.repaint();\r
+ }\r
+ else\r
+ seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
+\r
break;\r
\r
+ case KeyEvent.VK_S:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setCursorRow();\r
+ }\r
+ break;\r
+ case KeyEvent.VK_C:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setCursorColumn();\r
+ }\r
+ break;\r
case KeyEvent.VK_P:\r
- seqPanel.seqCanvas.increaseAARatio();\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setCursorPosition();\r
+ }\r
break;\r
- case KeyEvent.VK_L:\r
- seqPanel.seqCanvas.decreaseAARation();\r
+\r
+ case KeyEvent.VK_ENTER:\r
+ case KeyEvent.VK_COMMA:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setCursorRowAndColumn();\r
+ }\r
+ break;\r
+\r
+ case KeyEvent.VK_Q:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setSelectionAreaAtCursor(true);\r
+ }\r
+ break;\r
+ case KeyEvent.VK_M:\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.setSelectionAreaAtCursor(false);\r
+ }\r
break;\r
+\r
+ case KeyEvent.VK_F2:\r
+ av.cursorMode = ! av.cursorMode;\r
+ alignFrame.statusBar.setText("Keyboard editing mode is "+\r
+ (av.cursorMode ? "on" : "off"));\r
+ if(av.cursorMode)\r
+ {\r
+ seqPanel.seqCanvas.cursorX = av.startRes;\r
+ seqPanel.seqCanvas.cursorY = av.startSeq;\r
+ }\r
+ seqPanel.seqCanvas.repaint();\r
+ break;\r
+\r
+ case KeyEvent.VK_F1:\r
+ try\r
+ {\r
+ ClassLoader cl = jalview.gui.Desktop.class.getClassLoader();\r
+ java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help");\r
+ javax.help.HelpSet hs = new javax.help.HelpSet(cl, url);\r
+\r
+ javax.help.HelpBroker hb = hs.createHelpBroker();\r
+ hb.setCurrentID("home");\r
+ hb.setDisplayed(true);\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ }\r
+ break;\r
+\r
}\r
}\r
});\r
}\r
else\r
{\r
- int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
- if( start<av.getStartRes() || start>(av.getStartRes()+cwidth) )\r
- {\r
- vscroll.setValue(start / cwidth);\r
- av.startRes = vscroll.getValue() * cwidth;\r
- }\r
+ scrollToWrappedVisible(start);\r
}\r
}\r
}\r
\r
+ void scrollToWrappedVisible(int res)\r
+ {\r
+ int cwidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
+ if( res<=av.getStartRes() || res>=(av.getStartRes()+cwidth) )\r
+ {\r
+ vscroll.setValue(res / cwidth);\r
+ av.startRes = vscroll.getValue() * cwidth;\r
+ }\r
+ }\r
+\r
/**\r
* DOCUMENT ME!\r
*\r
*/\r
public boolean scrollRight(boolean right)\r
{\r
- if (right)\r
+ if (!right)\r
{\r
if (hscroll.getValue() < 1)\r
{\r
*/\r
public void setScrollValues(int x, int y)\r
{\r
- av.setEndRes( (x + (seqPanel.seqCanvas.getWidth() / av.getCharWidth())) -\r
- 1);\r
+\r
+ int width = av.alignment.getWidth();\r
+ int height = av.alignment.getHeight();\r
+\r
+ if(av.hasHiddenColumns)\r
+ width = av.getColumnSelection().findColumnPosition(width);\r
+\r
+ av.setEndRes( (x + (seqPanel.seqCanvas.getWidth() / av.charWidth)) -1);\r
\r
hextent = seqPanel.seqCanvas.getWidth() / av.charWidth;\r
vextent = seqPanel.seqCanvas.getHeight() / av.charHeight;\r
\r
- if (hextent > av.alignment.getWidth())\r
+ if (hextent > width)\r
{\r
- hextent = av.alignment.getWidth();\r
+ hextent = width;\r
}\r
\r
- if (vextent > av.alignment.getHeight())\r
+ if (vextent > height)\r
{\r
- vextent = av.alignment.getHeight();\r
+ vextent = height;\r
}\r
\r
- if ( (hextent + x) > av.getAlignment().getWidth())\r
+ if ( (hextent + x) > width)\r
{\r
- x = av.getAlignment().getWidth() - hextent;\r
+ x = width - hextent;\r
}\r
\r
- if ( (vextent + y) > av.getAlignment().getHeight())\r
+ if ( (vextent + y) > height)\r
{\r
- y = av.getAlignment().getHeight() - vextent;\r
+ y = height - vextent;\r
}\r
\r
if (y < 0)\r
x = 0;\r
}\r
\r
- hscroll.setValues(x, hextent, 0, av.getAlignment().getWidth());\r
- vscroll.setValues(y, vextent, 0, av.getAlignment().getHeight());\r
+ hscroll.setValues(x, hextent, 0, width);\r
+ vscroll.setValues(y, vextent, 0, height);\r
}\r
\r
/**\r
*/\r
public void adjustmentValueChanged(AdjustmentEvent evt)\r
{\r
-\r
int oldX = av.getStartRes();\r
int oldY = av.getStartSeq();\r
\r
{\r
int max = av.alignment.getWidth() /\r
seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +1;\r
+\r
+\r
vscroll.setMaximum(max);\r
vscroll.setUnitIncrement(1);\r
vscroll.setVisibleAmount(1);\r
setScrollValues(av.getStartRes(), av.getStartSeq());\r
}\r
\r
-\r
- if( this.getVisibleRect().getBounds() == g.getClipBounds() )\r
- {\r
- if (overviewPanel != null)\r
+ if( this.getVisibleRect().getBounds() == g.getClipBounds()\r
+ && overviewPanel != null)\r
overviewPanel.updateOverviewImage();\r
- }\r
+\r
}\r
\r
/**\r
\r
// draw main sequence panel\r
pg.translate(idWidth, 0);\r
- seqPanel.seqCanvas.drawPanel(pg, startRes, endRes, startSeq, endSeq,\r
- startRes, startSeq, 0);\r
+ seqPanel.seqCanvas.drawPanel(pg, startRes, endRes, startSeq, endSeq, 0);\r
\r
if (av.showAnnotation && (endSeq == av.alignment.getHeight()))\r
{\r
sy = s * av.charHeight + scaleHeight;\r
\r
SequenceI seq = av.alignment.getSequenceAt(s);\r
- java.util.Vector features = seq.getDatasetSequence().getSequenceFeatures();\r
+ SequenceFeature [] features = seq.getDatasetSequence().getSequenceFeatures();\r
SequenceGroup[] groups = av.alignment.findAllGroups(seq);\r
for(res =0; res<alwidth; res++)\r
{\r
+ " onMouseOver=\"toolTip('"\r
+ alIndex + " " + triplet );\r
}\r
- fSize = features.size();\r
+ fSize = features.length;\r
for (f = 0; f < fSize; f++)\r
{\r
- SequenceFeature sf = (SequenceFeature) features.elementAt(f);\r
\r
- if ( (sf.getBegin() <= seq.findPosition(res)) &&\r
- (sf.getEnd() >= seq.findPosition(res)))\r
+ if ( (features[f].getBegin() <= seq.findPosition(res)) &&\r
+ (features[f].getEnd() >= seq.findPosition(res)))\r
{\r
- if (sf.getType().equals("disulfide bond"))\r
+ if (features[f].getType().equals("disulfide bond"))\r
{\r
- if (sf.getBegin() == seq.findPosition(res)\r
- || sf.getEnd() == seq.findPosition(res))\r
+ if (features[f].getBegin() == seq.findPosition(res)\r
+ || features[f].getEnd() == seq.findPosition(res))\r
{\r
- text.append("<br>disulfide bond " + sf.getBegin() + ":" +\r
- sf.getEnd());\r
+ text.append("<br>disulfide bond " + features[f].getBegin() + ":" +\r
+ features[f].getEnd());\r
}\r
}\r
else\r
{\r
text.append("<br>");\r
- text.append(sf.getType());\r
- if (sf.getDescription() != null && !sf.getType().equals(sf.getDescription()))\r
- text.append(" " + sf.getDescription());\r
+ text.append(features[f].getType());\r
+ if (features[f].getDescription() != null && !features[f].getType().equals(features[f].getDescription()))\r
+ text.append(" " + features[f].getDescription());\r
\r
- if (sf.getStatus() != null && sf.getStatus().length()>0)\r
+ if (features[f].getStatus() != null && features[f].getStatus().length()>0)\r
{\r
- text.append(" (" + sf.getStatus() + ")");\r
+ text.append(" (" + features[f].getStatus() + ")");\r
}\r
}\r
}\r