+ class VPanel extends javax.swing.JPanel\r
+ {\r
+ Image image;\r
+ public VPanel(Image i)\r
+ {\r
+ image = i;\r
+ repaint();\r
+ }\r
+ public void paintComponent(Graphics g)\r
+ {\r
+ if(image!=null)\r
+ g.drawImage(image,0,0,this);\r
+ }\r
+\r
+ }\r
+\r
+ public int PrintWrappedAlignment(Graphics pg, PageFormat pf, int pi)\r
+ {\r
+ pg.translate((int)pf.getImageableX(), (int)pf.getImageableY());\r
+\r
+ int pwidth = (int)pf.getImageableWidth();\r
+ int pheight = (int)pf.getImageableHeight();\r
+ int idWidth = (int)idPanel.idCanvas.getLabelWidth().getWidth();\r
+\r
+ if( seqPanel.seqCanvas.getWidth() < pwidth-idWidth)\r
+ pwidth = seqPanel.seqCanvas.getWidth() + idWidth;\r
+\r
+ pg.setColor(Color.white);\r
+ pg.fillRect(0,0,pwidth, pheight);\r
+ pg.setFont( av.getFont() );\r
+\r
+ ////////////////////////////////////\r
+ /// How many sequences and residues can we fit on a printable page?\r
+ AlignmentI da = av.alignment;\r
+ int endy = da.getHeight();\r
+ int chunkHeight = (da.getHeight() + 2)*av.charHeight;\r
+ int chunkWidth = (pwidth-idWidth)/av.charWidth;\r
+\r
+ int noChunksOnPage = pheight / chunkHeight;\r
+ int totalChunks = endy / chunkHeight;\r
+\r
+ if ( pi*noChunksOnPage > totalChunks )\r
+ return Printable.NO_SUCH_PAGE;\r
+\r
+ ////////////////\r
+ // Draw the ids\r
+ pg.setClip(0,0,pwidth, noChunksOnPage*chunkHeight);\r
+\r
+ int row = pi*noChunksOnPage;\r
+ pg.setColor(Color.black);\r
+ for(int ypos=2*av.charHeight;\r
+ ypos <= pheight && row*chunkWidth<da.getWidth();\r
+ ypos += chunkHeight, row++ )\r
+ {\r
+ for (int i = 0; i < endy; i++)\r
+ {\r
+ SequenceI s = da.getSequenceAt(i);\r
+ pg.drawString(s.getDisplayId(), 0,\r
+ AlignmentUtil.getPixelHeight(0, i, av.charHeight) + ypos +\r
+ av.charHeight - (av.charHeight / 5));\r
+ }\r
+ }\r
+\r
+ // draw main sequence panel\r
+ pg.translate(idWidth,0);\r
+ seqPanel.seqCanvas.drawWrappedPanel(pg, pwidth-idWidth, pheight, pi*noChunksOnPage*chunkWidth);\r
+\r
+\r
+ return Printable.NO_SUCH_PAGE;//.PAGE_EXISTS;\r
+\r
+ }\r