import java.awt.*;\r
import java.awt.event.*;\r
import java.awt.print.*;\r
-\r
import java.io.*;\r
-\r
import javax.swing.*;\r
+import java.beans.*;\r
+\r
\r
\r
/**\r
annotationPanel = new AnnotationPanel(this);\r
alabels = new AnnotationLabels(this);\r
\r
-\r
annotationScroller.setViewportView(annotationPanel);\r
annotationSpaceFillerHolder.add(alabels, BorderLayout.CENTER);\r
\r
fontChanged();\r
\r
scalePanelHolder.add(scalePanel, BorderLayout.CENTER);\r
- seqPanelHolder.add(seqPanel, BorderLayout.CENTER);\r
+ seqPanelHolder.add(seqPanel, BorderLayout.CENTER);\r
\r
setScrollValues(0, 0);\r
\r
- adjustAnnotationHeight();\r
-\r
setAnnotationVisible(av.getShowAnnotation());\r
\r
hscroll.addAdjustmentListener(this);\r
vscroll.addAdjustmentListener(this);\r
\r
- af.addKeyListener(new KeyAdapter()\r
+ final AlignmentPanel ap = this;\r
+ av.addPropertyChangeListener(new PropertyChangeListener()\r
{\r
- public void keyPressed(KeyEvent evt)\r
+ public void propertyChange(PropertyChangeEvent evt)\r
{\r
- if(av.cursorMode\r
- && evt.getKeyCode()>=KeyEvent.VK_0\r
- && evt.getKeyCode()<=KeyEvent.VK_9)\r
+ if (evt.getPropertyName().equals("alignment"))\r
{\r
- seqPanel.numberPressed(evt.getKeyChar());\r
+ PaintRefresher.Refresh(ap,\r
+ av.getSequenceSetId(),\r
+ true,\r
+ true);\r
+ alignmentChanged();\r
}\r
+ }\r
+ });\r
\r
- switch (evt.getKeyCode())\r
- {\r
- case 27: // escape key\r
- alignFrame.deselectAllSequenceMenuItem_actionPerformed(null);\r
-\r
- break;\r
-\r
- case KeyEvent.VK_DOWN:\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
- 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
+ adjustAnnotationHeight();\r
\r
- case KeyEvent.VK_DELETE:\r
- case KeyEvent.VK_BACK_SPACE:\r
- if(!av.cursorMode)\r
- {\r
- alignFrame.cut_actionPerformed(null);\r
- }\r
- else\r
- seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
+ }\r
\r
- break;\r
+ public void alignmentChanged()\r
+ {\r
+ av.alignmentChanged(this);\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 && !evt.isControlDown())\r
- {\r
- seqPanel.setCursorColumn();\r
- }\r
- break;\r
- case KeyEvent.VK_P:\r
- if(av.cursorMode)\r
- {\r
- seqPanel.setCursorPosition();\r
- }\r
- break;\r
+ if (overviewPanel != null)\r
+ overviewPanel.updateOverviewImage();\r
\r
- case KeyEvent.VK_ENTER:\r
- case KeyEvent.VK_COMMA:\r
- if(av.cursorMode)\r
- {\r
- seqPanel.setCursorRowAndColumn();\r
- }\r
- break;\r
+ alignFrame.updateEditMenuBar();\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
+ repaint();\r
+ }\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
- case KeyEvent.VK_H:\r
- {\r
- boolean toggleSeqs = !evt.isControlDown();\r
- boolean toggleCols = !evt.isShiftDown();\r
-\r
- boolean hide = false;\r
-\r
- SequenceGroup sg = av.getSelectionGroup();\r
- if(toggleSeqs)\r
- {\r
- if(sg != null && sg.getSize(false) != av.alignment.getHeight())\r
- {\r
- alignFrame.hideSelSequences_actionPerformed(null);\r
- hide = true;\r
- }\r
- else if (!(toggleCols && av.colSel.getSelected().size() > 0))\r
- alignFrame.showAllSeqs_actionPerformed(null);\r
- }\r
-\r
- if (toggleCols)\r
- {\r
- if(av.colSel.getSelected().size() > 0)\r
- {\r
- alignFrame.hideSelColumns_actionPerformed(null);\r
- if(!toggleSeqs)\r
- av.selectionGroup = sg;\r
- }\r
- else if(!hide)\r
- alignFrame.showAllColumns_actionPerformed(null);\r
- }\r
- break;\r
- }\r
\r
- }\r
- }\r
- });\r
- }\r
\r
/**\r
* DOCUMENT ME!\r
idPanel.idCanvas.setPreferredSize(d);\r
hscrollFillerPanel.setPreferredSize(d);\r
\r
- if (av.getWrapAlignment())\r
- {\r
- int max = av.alignment.getWidth() /\r
- seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
- vscroll.setMaximum(max);\r
- vscroll.setUnitIncrement(1);\r
- vscroll.setVisibleAmount(1);\r
- }\r
- else\r
- {\r
- setScrollValues(av.getStartRes(), av.getStartSeq());\r
- }\r
-\r
if (overviewPanel != null)\r
overviewPanel.setBoxPosition();\r
\r
\r
if (fm.stringWidth(id) > idWidth)\r
{\r
-\r
idWidth = fm.stringWidth(id);\r
- System.out.println(id+" "+idWidth);\r
}\r
\r
i++;\r
i++;\r
}\r
}\r
- System.out.println(idWidth);\r
+\r
return new Dimension(idWidth, 12);\r
}\r
\r
\r
public void adjustAnnotationHeight()\r
{\r
- javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+ if (alignFrame.getHeight() == 0)\r
{\r
- public void run()\r
- {\r
- while(alignFrame.getHeight()==0)\r
- {\r
- Thread.yield();\r
- }\r
+ System.out.println("NEEDS FIXING");\r
+ }\r
\r
- int height = annotationPanel.adjustPanelHeight();\r
+ int height = annotationPanel.adjustPanelHeight();\r
\r
- if (height > alignFrame.getHeight() / 2)\r
- {\r
- height = alignFrame.getHeight() / 2;\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
+ annotationScroller.setPreferredSize(\r
+ new Dimension(annotationScroller.getWidth(),\r
+ height));\r
\r
- annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
- annotationSpaceFillerHolder.getWidth(),\r
- height));\r
+ annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
+ annotationSpaceFillerHolder.getWidth(),\r
+ height));\r
\r
- annotationPanel.repaint();\r
- repaint();\r
- }\r
- });\r
+ repaint();\r
}\r
\r
/**\r
if (av.hasHiddenColumns)\r
maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
\r
- int max = maxwidth /\r
- seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +\r
- 1;\r
-\r
-\r
- vscroll.setMaximum(max);\r
- vscroll.setUnitIncrement(1);\r
- vscroll.setVisibleAmount(1);\r
+ int canvasWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth());\r
+ if(canvasWidth>0)\r
+ {\r
+ int max = maxwidth /\r
+ seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.\r
+ getWidth()) +\r
+ 1;\r
+ vscroll.setMaximum(max);\r
+ vscroll.setUnitIncrement(1);\r
+ vscroll.setVisibleAmount(1);\r
+ }\r
}\r
else\r
{\r
if( this.getVisibleRect().getBounds() == g.getClipBounds()\r
&& overviewPanel != null)\r
overviewPanel.updateOverviewImage();\r
-\r
}\r
\r
/**\r
Color currentColor = null;\r
Color currentTextColor = null;\r
\r
- pg.setFont(new Font(av.getFont().getName(),\r
- Font.ITALIC,\r
- av.getFont().getSize()));\r
+ pg.setFont(idPanel.idCanvas.idfont);\r
+\r
+ SequenceI seq;\r
for (int i = startSeq; i < endSeq; i++)\r
{\r
+ seq = av.getAlignment().getSequenceAt(i);\r
if ( (av.getSelectionGroup() != null) &&\r
- av.getSelectionGroup().getSequences(false).contains(\r
- av.getAlignment().getSequenceAt(i)))\r
+ av.getSelectionGroup().getSequences(null).contains(seq))\r
{\r
currentColor = Color.gray;\r
currentTextColor = Color.black;\r
}\r
else\r
{\r
- currentColor = av.getAlignment().getSequenceAt(i).getColor();\r
+ currentColor = av.getSequenceColour(seq);\r
currentTextColor = Color.black;\r
}\r
\r
\r
pg.setColor(currentTextColor);\r
\r
- String string = av.getAlignment().getSequenceAt(i).getDisplayId\r
- ( av.getShowJVSuffix());\r
+ int xPos = 0;\r
+ if (av.rightAlignIds)\r
+ {\r
+ fm = pg.getFontMetrics();\r
+ xPos = idWidth - fm.stringWidth(\r
+ seq.getDisplayId(av.getShowJVSuffix())\r
+ ) - 4;\r
+ }\r
\r
- pg.drawString(string, 0,\r
+ pg.drawString(seq.getDisplayId( av.getShowJVSuffix()),\r
+ xPos,\r
( ( (i - startSeq) * av.charHeight) + av.getCharHeight()) -\r
(av.getCharHeight() / 5));\r
}\r
pg.setClip(0, pi * pheight, pwidth, pheight);\r
\r
int ypos = hgap;\r
- Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
- av.getFont().getSize());\r
- pg.setFont(italic);\r
+\r
+\r
\r
do\r
{\r
for (int i = 0; i < av.alignment.getHeight(); i++)\r
{\r
+ pg.setFont(idPanel.idCanvas.idfont);\r
SequenceI s = av.alignment.getSequenceAt(i);\r
String string = s.getDisplayId( av.getShowJVSuffix());\r
-\r
- pg.drawString(string, 0,\r
+ int xPos = 0;\r
+ if (av.rightAlignIds)\r
+ {\r
+ FontMetrics fm = pg.getFontMetrics();\r
+ xPos = idWidth - fm.stringWidth( string ) - 4;\r
+ }\r
+ pg.drawString(string, xPos,\r
( (i * av.charHeight) + ypos + av.charHeight) -\r
(av.charHeight / 5));\r
}\r
\r
pg.setFont(av.getFont());\r
labels.drawComponent(pg, idWidth);\r
- pg.setFont(italic);\r
pg.translate(+3,\r
-ypos -\r
(av.getAlignment().getHeight() * av.charHeight));\r
if (System.getProperty("java.awt.headless") != null\r
&& System.getProperty("java.awt.headless").equals("true"))\r
{\r
- width = alignFrame.getWidth() - 22;\r
+ width = alignFrame.getWidth()\r
+ - vscroll.getPreferredSize().width\r
+ - alignFrame.getInsets().left\r
+ - alignFrame.getInsets().right;\r
}\r
else\r
width = seqPanel.getWidth() + getVisibleIdWidth();\r
height += annotationPanel.adjustPanelHeight() + 3;\r
}\r
\r
+ try\r
+ {\r
+\r
jalview.util.ImageMaker im;\r
if(type==jalview.util.ImageMaker.PNG)\r
im = new jalview.util.ImageMaker(this,\r
"Create EPS file from alignment",\r
width, height, file, alignFrame.getTitle() );\r
\r
- try\r
- {\r
if (av.getWrapAlignment())\r
{\r
if(im.getGraphics()!=null)\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
+ && System.getProperty("java.awt.headless").equals("true"))\r
{\r
- seqPanelWidth = alignFrame.getWidth() - getVisibleIdWidth();\r
+ seqPanelWidth = alignFrame.getWidth()\r
+ - getVisibleIdWidth()\r
+ - vscroll.getPreferredSize().width\r
+ - alignFrame.getInsets().left\r
+ - alignFrame.getInsets().right;\r
}\r
\r
int chunkWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(\r