\r
setScrollValues(0, 0);\r
\r
- annotationPanel.adjustPanelHeight();\r
- annotationSpaceFillerHolder.setPreferredSize(annotationPanel.\r
- getPreferredSize());\r
- annotationScroller.setPreferredSize(annotationPanel.\r
- getPreferredSize());\r
+ adjustAnnotationHeight();\r
+\r
setAnnotationVisible(av.getShowAnnotation());\r
\r
hscroll.addAdjustmentListener(this);\r
{\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
repaint();\r
}\r
\r
+ public void adjustAnnotationHeight()\r
+ {\r
+ javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+ {\r
+ public void run()\r
+ {\r
+ while(alignFrame.getHeight()==0)\r
+ {\r
+ Thread.yield();\r
+ }\r
+\r
+ int height = annotationPanel.adjustPanelHeight();\r
+\r
+ if (height > alignFrame.getHeight() / 2)\r
+ {\r
+ height = alignFrame.getHeight() / 2;\r
+ }\r
+\r
+ annotationScroller.setPreferredSize(\r
+ new Dimension(annotationScroller.getWidth(),\r
+ height));\r
+\r
+ annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
+ annotationSpaceFillerHolder.getWidth(),\r
+ height));\r
+\r
+ annotationPanel.repaint();\r
+ }\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
int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth);\r
-\r
if (idPanel.getWidth() == 0)\r
{\r
width += calculateIdWidth().getWidth() + 4;\r
if (av.getWrapAlignment())\r
{\r
height = getWrappedHeight();\r
- width = seqPanel.getWidth() + idPanel.getWidth();\r
+ if (System.getProperty("java.awt.headless") != null\r
+ && System.getProperty("java.awt.headless").equals("true"))\r
+ {\r
+ width = alignFrame.getWidth() - 22;\r
+ }\r
+ else\r
+\r
+ width = seqPanel.getWidth() + idPanel.getWidth();\r
+\r
}\r
else if (av.getShowAnnotation())\r
{\r
if (features[f].getDescription() != null && !features[f].getType().equals(features[f].getDescription()))\r
text.append(" " + features[f].getDescription());\r
\r
- if (features[f].getStatus() != null && features[f].getStatus().length()>0)\r
+ if (features[f].getValue("status") != null )\r
{\r
- text.append(" (" + features[f].getStatus() + ")");\r
+ text.append(" (" + features[f].getValue("status") + ")");\r
}\r
}\r
}\r
\r
int getWrappedHeight()\r
{\r
+ int seqPanelWidth = seqPanel.seqCanvas.getWidth();\r
+\r
+ //If headless, seqPanel will have 0 width\r
+ if (System.getProperty("java.awt.headless") != null\r
+ && System.getProperty("java.awt.headless").equals("true"))\r
+ {\r
+ int idWidth = calculateIdWidth().width + 4;\r
+ seqPanelWidth = alignFrame.getWidth() - idWidth;\r
+ }\r
\r
int chunkWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(\r
- seqPanel.seqCanvas.getWidth());\r
+ seqPanelWidth\r
+ );\r
\r
int hgap = av.charHeight;\r
if (av.scaleAboveWrapped)\r