/*\r
* Jalview - A Sequence Alignment Editor and Viewer\r
- * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+ * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
* This program is free software; you can redistribute it and/or\r
* modify it under the terms of the GNU General Public License\r
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
- annotationSpaceFillerHolder.setPreferredSize(annotationPanel.\r
- getPreferredSize());\r
- annotationScroller.setPreferredSize(annotationPanel.getPreferredSize());\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
- annotationPanel.adjustPanelHeight();\r
- annotationSpaceFillerHolder.setPreferredSize(annotationPanel.\r
- getPreferredSize());\r
- annotationScroller.setPreferredSize(annotationPanel.\r
- getPreferredSize());\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
- switch (evt.getKeyCode())\r
+ if (evt.getPropertyName().equals("alignment"))\r
{\r
- case 27: // escape key\r
- av.setSelectionGroup(null);\r
- repaint();\r
-\r
- break;\r
+ PaintRefresher.Refresh(ap,\r
+ av.getSequenceSetId(),\r
+ true,\r
+ true);\r
+ alignmentChanged();\r
+ }\r
+ }\r
+ });\r
\r
- case KeyEvent.VK_DOWN:\r
- alignFrame.moveSelectedSequences(false);\r
+ adjustAnnotationHeight();\r
\r
- break;\r
+ }\r
\r
- case KeyEvent.VK_UP:\r
- alignFrame.moveSelectedSequences(true);\r
+ public void alignmentChanged()\r
+ {\r
+ av.alignmentChanged(this);\r
\r
- break;\r
+ if (overviewPanel != null)\r
+ overviewPanel.updateOverviewImage();\r
\r
- case KeyEvent.VK_BACK_SPACE:\r
- case KeyEvent.VK_DELETE:\r
- alignFrame.cut_actionPerformed(null);\r
- break;\r
+ alignFrame.updateEditMenuBar();\r
\r
- case KeyEvent.VK_P:\r
- seqPanel.seqCanvas.increaseAARatio();\r
- break;\r
- case KeyEvent.VK_L:\r
- seqPanel.seqCanvas.decreaseAARation();\r
- break;\r
- }\r
- }\r
- });\r
+ repaint();\r
}\r
\r
+\r
+\r
/**\r
* DOCUMENT ME!\r
*/\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
Container c = new Container();\r
\r
- FontMetrics fm = c.getFontMetrics(av.font);\r
+ FontMetrics fm = c.getFontMetrics(\r
+ new Font(av.font.getName(), Font.ITALIC, av.font.getSize()));\r
+\r
AlignmentI al = av.getAlignment();\r
\r
int i = 0;\r
*\r
* @param results DOCUMENT ME!\r
*/\r
- public void highlightSearchResults(int[] results)\r
+ public void highlightSearchResults(SearchResults results)\r
{\r
seqPanel.seqCanvas.highlightSearchResults(results);\r
\r
// do we need to scroll the panel?\r
if (results != null)\r
{\r
- SequenceI seq = av.alignment.getSequenceAt(results[0]);\r
- int start = seq.findIndex(results[1]) - 1;\r
- int end = seq.findIndex(results[2]) - 1;\r
+ SequenceI seq = results.getResultSequence(0);\r
+ int seqIndex = av.alignment.findIndex(seq);\r
+ int start = seq.findIndex(results.getResultStart(0)) - 1;\r
+ int end = seq.findIndex(results.getResultEnd(0)) - 1;\r
\r
- if ( (av.getStartRes() > start) || (av.getEndRes() < end) ||\r
- ( (av.getStartSeq() > results[0]) ||\r
- (av.getEndSeq() < results[0])))\r
+ if(!av.wrapAlignment)\r
+ {\r
+ if ( (av.getStartRes() > end) || (av.getEndRes() < start) ||\r
+ ( (av.getStartSeq() > seqIndex) || (av.getEndSeq() < seqIndex)))\r
+ {\r
+ setScrollValues(start, seqIndex);\r
+ }\r
+ }\r
+ else\r
{\r
- setScrollValues(start, results[0]);\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
+ if (alignFrame.getHeight() == 0)\r
+ {\r
+ System.out.println("NEEDS FIXING");\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
+ repaint();\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
if (av.getWrapAlignment())\r
{\r
- int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.\r
- seqCanvas.getWidth());\r
- av.setStartRes(vscroll.getValue() * rowSize);\r
- av.setEndRes( (vscroll.getValue() + 1) * rowSize);\r
+ if(offy>-1)\r
+ {\r
+ int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.\r
+ seqCanvas.getWidth());\r
+ av.setStartRes(offy * rowSize);\r
+ av.setEndRes( (offy + 1) * rowSize);\r
+ }\r
+ else\r
+ {\r
+ //This is only called if file loaded is a jar file that\r
+ //was wrapped when saved and user has wrap alignment true\r
+ //as preference setting\r
+ SwingUtilities.invokeLater(new Runnable()\r
+ {\r
+ public void run()\r
+ {\r
+ setScrollValues(av.getStartRes(), av.getStartSeq());\r
+ }\r
+ });\r
+ }\r
}\r
else\r
{\r
overviewPanel.setBoxPosition();\r
}\r
\r
- int xShift = av.getStartRes() - oldX;\r
- int yShift = av.getStartSeq() - oldY;\r
+ int scrollX = av.startRes - oldX;\r
+ int scrollY = av.startSeq - oldY;\r
\r
- if ( (xShift != 0 && yShift != 0) ||\r
- (Math.abs(xShift) > av.getEndRes() - av.getStartRes()\r
- || Math.abs(yShift) > av.getEndSeq() - av.getStartSeq())\r
- || av.getWrapAlignment()\r
- || !fastPaint)\r
+ if (av.getWrapAlignment() || !fastPaint)\r
{\r
- // Either no shift at all, or shift greater than visible amount\r
repaint();\r
}\r
else\r
{\r
- idPanel.idCanvas.fastPaint(yShift);\r
- seqPanel.seqCanvas.fastPaint(xShift, yShift);\r
-\r
- scalePanel.repaint();\r
-\r
- if (av.getShowAnnotation())\r
+ // Make sure we're not trying to draw a panel\r
+ // larger than the visible window\r
+ if(scrollX>av.endRes-av.startRes)\r
+ scrollX = av.endRes-av.startRes;\r
+ else if(scrollX<av.startRes-av.endRes)\r
+ scrollX = av.startRes - av.endRes;\r
+\r
+ if(scrollX!=0 || scrollY!=0)\r
{\r
- annotationPanel.fastPaint(xShift);\r
+ idPanel.idCanvas.fastPaint(scrollY);\r
+ seqPanel.seqCanvas.fastPaint(scrollX,\r
+ scrollY);\r
+ scalePanel.repaint();\r
+\r
+ if (av.getShowAnnotation())\r
+ {\r
+ annotationPanel.fastPaint(scrollX);\r
+ }\r
}\r
}\r
}\r
\r
if (av.getWrapAlignment())\r
{\r
- int max = av.alignment.getWidth() /\r
- seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +1;\r
- vscroll.setMaximum(max);\r
- vscroll.setUnitIncrement(1);\r
- vscroll.setVisibleAmount(1);\r
+ int maxwidth = av.alignment.getWidth();\r
+\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\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
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
public int printUnwrapped(Graphics pg, int pwidth, int pheight, int pi)\r
throws PrinterException\r
{\r
- int idWidth = calculateIdWidth().width + 4;\r
+ int idWidth = getVisibleIdWidth();\r
FontMetrics fm = getFontMetrics(av.getFont());\r
int scaleHeight = av.charHeight + fm.getDescent();\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
+ 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().sequences.contains(\r
- av.getAlignment().getSequenceAt(i)))\r
+ av.getSelectionGroup().getSequences(false).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
-\r
- pg.drawString(string, 0,\r
+ pg.drawString(seq.getDisplayId( av.getShowJVSuffix()),\r
+ 0,\r
( ( (i - startSeq) * av.charHeight) + av.getCharHeight()) -\r
(av.getCharHeight() / 5));\r
}\r
\r
+ pg.setFont(av.getFont());\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
- pg.translate( -idWidth, (endSeq - startSeq) * av.charHeight + 3);\r
+ pg.translate( -idWidth-3, (endSeq - startSeq) * av.charHeight + 3);\r
alabels.drawComponent( (Graphics2D) pg, idWidth);\r
- pg.translate(idWidth, 0);\r
+ pg.translate(idWidth+3, 0);\r
annotationPanel.drawComponent( (Graphics2D) pg, startRes, endRes +\r
1);\r
}\r
+ hgap\r
+ annotationHeight;\r
\r
- int idWidth = calculateIdWidth().width + 4;\r
+ int idWidth = getVisibleIdWidth();\r
+\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
\r
int resWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(pwidth -\r
idWidth);\r
\r
- int totalHeight = cHeight * (av.alignment.getWidth() / resWidth + 1);\r
+ int totalHeight = cHeight * (maxwidth / resWidth + 1);\r
\r
pg.setColor(Color.white);\r
pg.fillRect(0, 0, pwidth, pheight);\r
}\r
if (labels != null)\r
{\r
- pg.translate(0,\r
+ pg.translate(-3,\r
ypos +\r
(av.getAlignment().getHeight() * av.charHeight));\r
\r
pg.setFont(av.getFont());\r
labels.drawComponent(pg, idWidth);\r
pg.setFont(italic);\r
- pg.translate(0,\r
+ pg.translate(+3,\r
-ypos -\r
(av.getAlignment().getHeight() * av.charHeight));\r
}\r
}\r
}\r
\r
+ int getVisibleIdWidth()\r
+ {\r
+ return\r
+ idPanel.getWidth() > 0 ? idPanel.getWidth() :\r
+ calculateIdWidth().width + 4;\r
+ }\r
+\r
void makeAlignmentImage(int type, File file)\r
{\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth);\r
+\r
int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
- int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth);\r
+ int width = getVisibleIdWidth() + (maxwidth * av.charWidth);\r
\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
+ width = seqPanel.getWidth() + getVisibleIdWidth();\r
+\r
}\r
else if (av.getShowAnnotation())\r
{\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
printWrappedAlignment(im.getGraphics(), width, height, 0);\r
+ im.writeImage();\r
+ }\r
}\r
else\r
{\r
if(im.getGraphics()!=null)\r
+ {\r
printUnwrapped(im.getGraphics(), width, height, 0);\r
+ im.writeImage();\r
+ }\r
}\r
-\r
- im.writeImage();\r
}\r
catch (OutOfMemoryError err)\r
{\r
{\r
///////ONLY WORKS WITH NONE WRAPPED ALIGNMENTS\r
//////////////////////////////////////////////\r
- int idWidth = calculateIdWidth().width + 4;\r
+ int idWidth = getVisibleIdWidth();\r
FontMetrics fm = getFontMetrics(av.getFont());\r
int scaleHeight = av.charHeight + fm.getDescent();\r
\r
{\r
try\r
{\r
+ int s, sSize = av.alignment.getHeight(),\r
+ res, alwidth = av.alignment.getWidth(), g, gSize, f, fSize, sy;\r
+ StringBuffer text = new StringBuffer();\r
PrintWriter out = new PrintWriter(new FileWriter(imgMapFile));\r
out.println(jalview.io.HTMLOutput.getImageMapHTML());\r
out.println("<img src=\"" + imageName +\r
"\" border=\"0\" usemap=\"#Map\" >"\r
+ "<map name=\"Map\">");\r
\r
- for (int s = 0; s < av.alignment.getHeight(); s++)\r
+ for (s = 0; s < sSize; s++)\r
{\r
+ sy = s * av.charHeight + scaleHeight;\r
+\r
SequenceI seq = av.alignment.getSequenceAt(s);\r
+ SequenceFeature [] features = seq.getDatasetSequence().getSequenceFeatures();\r
SequenceGroup[] groups = av.alignment.findAllGroups(seq);\r
- for (int i = 0; i < groups.length; i++)\r
+ for(res =0; res<alwidth; res++)\r
{\r
- int sy = s * av.charHeight + scaleHeight;\r
- for (int res = groups[i].getStartRes();\r
- res < groups[i].getEndRes() + 1; res++)\r
- {\r
- int alIndex = seq.findPosition(res);\r
- Object obj = ResidueProperties.aa2Triplet.get(\r
- seq.getCharAt(res) + "");\r
+ text = new StringBuffer();\r
+ Object obj = null;\r
+ if(av.alignment.isNucleotide())\r
+ obj = ResidueProperties.nucleotideName.get(seq.getCharAt(res)+"" );\r
+ else\r
+ obj = ResidueProperties.aa2Triplet.get(\r
+ seq.getCharAt(res) + "");\r
+\r
if (obj == null)\r
- continue;\r
+ continue;\r
\r
- String triplet = obj.toString();\r
+ String triplet = obj.toString();\r
+ int alIndex = seq.findPosition(res);\r
+ gSize = groups.length;\r
+ for (g = 0; g < gSize; g++)\r
+ {\r
+ if(text.length()<1)\r
+ {\r
+ text.append("<area shape=\"rect\" coords=\""\r
+ + (idWidth + res * av.charWidth) + ","\r
+ + sy + ","\r
+ + (idWidth + (res + 1) * av.charWidth) + ","\r
+ + (av.charHeight + sy) + "\""\r
+ + " onMouseOver=\"toolTip('"\r
+ + alIndex + " " + triplet );\r
+ }\r
\r
- out.println(\r
- "<area shape=\"rect\" coords=\""\r
+ if(groups[g].getStartRes()<res && groups[g].getEndRes()>res)\r
+ text.append("<br><em>" + groups[g].getName() + "</em>");\r
+ }\r
+\r
+ if (features != null)\r
+ {\r
+ if(text.length()<1)\r
+ {\r
+ text.append("<area shape=\"rect\" coords=\""\r
+ (idWidth + res * av.charWidth) + ","\r
+ sy + ","\r
+ (idWidth + (res + 1) * av.charWidth) + ","\r
+ (av.charHeight + sy) + "\""\r
+ " onMouseOver=\"toolTip('"\r
- + alIndex + " " + triplet +\r
- "<br><em>" + groups[i].getName() +\r
- "</em>')\"; onMouseOut=\"toolTip()\"; "\r
- + " href=\"#\">");\r
+ + alIndex + " " + triplet );\r
+ }\r
+ fSize = features.length;\r
+ for (f = 0; f < fSize; f++)\r
+ {\r
+\r
+ if ( (features[f].getBegin() <= seq.findPosition(res)) &&\r
+ (features[f].getEnd() >= seq.findPosition(res)))\r
+ {\r
+ if (features[f].getType().equals("disulfide bond"))\r
+ {\r
+ if (features[f].getBegin() == seq.findPosition(res)\r
+ || features[f].getEnd() == seq.findPosition(res))\r
+ {\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(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 (features[f].getValue("status") != null )\r
+ {\r
+ text.append(" (" + features[f].getValue("status") + ")");\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+ }\r
+ if(text.length()>1)\r
+ {\r
+ text.append("')\"; onMouseOut=\"toolTip()\"; href=\"#\">");\r
+ out.println(text.toString());\r
+ }\r
}\r
}\r
- }\r
-\r
out.println("</map></body></html>");\r
out.close();\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
+ seqPanelWidth = alignFrame.getWidth() - getVisibleIdWidth();\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
+ hgap\r
+ annotationHeight;\r
\r
- int height = ( (av.alignment.getWidth() / chunkWidth) + 1) * cHeight;\r
+ int maxwidth = av.alignment.getWidth();\r
+ if (av.hasHiddenColumns)\r
+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+\r
+ int height = ( (maxwidth / chunkWidth) + 1) * cHeight;\r
\r
return height;\r
}\r