X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=5527f1ea83d8e04a5505d24d9a269f621d496d9c;hb=70fd4c40d0b2046c6d402e365e4d04f9cfbb68ef;hp=6ae19a501b1c647673779a702784a81b44c5a6ca;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 6ae19a5..5527f1e 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -20,20 +20,38 @@ */ package jalview.gui; -import java.beans.*; -import java.io.*; - -import java.awt.*; -import java.awt.event.*; -import java.awt.print.*; -import javax.swing.*; - +import jalview.analysis.AnnotationSorter; import jalview.api.AlignmentViewPanel; import jalview.bin.Cache; -import jalview.datamodel.*; -import jalview.jbgui.*; -import jalview.schemes.*; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.SearchResults; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.jbgui.GAlignmentPanel; +import jalview.schemes.ResidueProperties; import jalview.structure.StructureSelectionManager; +import jalview.util.MessageManager; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.event.AdjustmentEvent; +import java.awt.event.AdjustmentListener; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; + +import javax.swing.SwingUtilities; /** * DOCUMENT ME! @@ -178,7 +196,7 @@ public class AlignmentPanel extends GAlignmentPanel implements int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300); int maxwidth = Math.max(20, - Math.min(afwidth - 200, (int) 2 * afwidth / 3)); + Math.min(afwidth - 200, 2 * afwidth / 3)); return calculateIdWidth(maxwidth); } @@ -424,16 +442,19 @@ public class AlignmentPanel extends GAlignmentPanel implements protected void validateAnnotationDimensions(boolean adjustPanelHeight) { int height = annotationPanel.adjustPanelHeight(); - - int theight = av.getCharHeight() * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0 : av.getAlignment().getHiddenSequences().getSize())); - float sscaling = (float) (theight/(1.0*theight+height)); - float ascaling=(float)(height*1.0/alignFrame.getHeight()); + + int theight = av.getCharHeight() + * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0 + : av.getAlignment().getHiddenSequences().getSize())); + float sscaling = (float) (theight / (1.0 * theight + height)); + float ascaling = (float) (height * 1.0 / alignFrame.getHeight()); int rheight = alignFrame.getHeight() - height - av.getCharHeight(); if (adjustPanelHeight) { - // NOTE: this logic is different in the applet. Need a better algorithm to define behaviour + // NOTE: this logic is different in the applet. Need a better algorithm to + // define behaviour // try and set height according to alignment - if (ascaling>0 && sscaling < 0.5) + if (ascaling > 0 && sscaling < 0.5) { // if the alignment is too big then // default is 0.5 split @@ -441,10 +462,11 @@ public class AlignmentPanel extends GAlignmentPanel implements } else { - // if space for more than one sequence row left when annotation is fully displayed then set height to annotation height - // otherwise, leave at least two lines of sequence shown. - height = (rheight>av.getCharHeight()) ? height : (-av.getCharHeight() * 3 - + (int) (alignFrame.getHeight() * (1 - sscaling))); + // if space for more than one sequence row left when annotation is fully + // displayed then set height to annotation height + // otherwise, leave at least two lines of sequence shown. + height = (rheight > av.getCharHeight()) ? height + : (-av.getCharHeight() * 3 + (int) (alignFrame.getHeight() * (1 - sscaling))); } } else @@ -705,7 +727,7 @@ public class AlignmentPanel extends GAlignmentPanel implements seqPanel.seqCanvas.fastPaint(scrollX, scrollY); scalePanel.repaint(); - if (av.getShowAnnotation() && scrollX!=0) + if (av.getShowAnnotation() && scrollX != 0) { annotationPanel.fastPaint(scrollX); } @@ -713,8 +735,17 @@ public class AlignmentPanel extends GAlignmentPanel implements } } + /** + * Repaint the alignment including the annotations and overview panels (if + * shown). + */ public void paintAlignment(boolean updateOverview) { + final AnnotationSorter sorter = new AnnotationSorter(getAlignment(), + av.isShowAutocalculatedAbove()); + sorter.sort(getAlignment() + .getAlignmentAnnotation(), + av.getSortAnnotationsBy()); repaint(); if (updateOverview) @@ -836,7 +867,7 @@ public class AlignmentPanel extends GAlignmentPanel implements // / How many sequences and residues can we fit on a printable page? int totalRes = (pwidth - idWidth) / av.getCharWidth(); - int totalSeq = (int) ((pheight - scaleHeight) / av.getCharHeight()) - 1; + int totalSeq = (pheight - scaleHeight) / av.getCharHeight() - 1; int pagesWide = (av.getAlignment().getWidth() / totalRes) + 1; @@ -949,10 +980,10 @@ public class AlignmentPanel extends GAlignmentPanel implements int offset = -alabels.scrollOffset; pg.translate(0, offset); pg.translate(-idWidth - 3, (endSeq - startSeq) * av.charHeight + 3); - alabels.drawComponent((Graphics2D) pg, idWidth); + alabels.drawComponent(pg, idWidth); pg.translate(idWidth + 3, 0); annotationPanel.renderer.drawComponent(annotationPanel, av, - (Graphics2D) pg, -1, startRes, endRes + 1); + pg, -1, startRes, endRes + 1); pg.translate(0, -offset); } @@ -1108,16 +1139,17 @@ public class AlignmentPanel extends GAlignmentPanel implements return idwidth.intValue() + 4; } - void makeAlignmentImage(int type, File file) + void makeAlignmentImage(jalview.util.ImageMaker.TYPE type, File file) { long progress = System.currentTimeMillis(); - boolean headless = (System.getProperty("java.awt.headless") != null - && System.getProperty("java.awt.headless").equals("true")); + boolean headless = (System.getProperty("java.awt.headless") != null && System + .getProperty("java.awt.headless").equals("true")); if (alignFrame != null && !headless) { - alignFrame.setProgressBar("Saving " - + (type == jalview.util.ImageMaker.PNG ? "PNG image" - : "EPS file"), progress); + alignFrame.setProgressBar(MessageManager.formatMessage( + "status.saving_file", + new String[] + { type.getLabel() }), progress); } try { @@ -1161,16 +1193,22 @@ public class AlignmentPanel extends GAlignmentPanel implements jalview.util.ImageMaker im; final String imageAction, imageTitle; - if (type == jalview.util.ImageMaker.PNG) + if (type == jalview.util.ImageMaker.TYPE.PNG) { imageAction = "Create PNG image from alignment"; imageTitle = null; } - else + else if (type == jalview.util.ImageMaker.TYPE.EPS) { imageAction = "Create EPS file from alignment"; imageTitle = alignFrame.getTitle(); } + else + { + imageAction = "Create SVG file from alignment"; + imageTitle = alignFrame.getTitle(); + } + im = new jalview.util.ImageMaker(this, type, imageAction, width, height, file, imageTitle); if (av.getWrapAlignment()) @@ -1204,7 +1242,7 @@ public class AlignmentPanel extends GAlignmentPanel implements { if (alignFrame != null && !headless) { - alignFrame.setProgressBar("Export complete.", progress); + alignFrame.setProgressBar(MessageManager.getString("status.export_complete"), progress); } } } @@ -1214,7 +1252,7 @@ public class AlignmentPanel extends GAlignmentPanel implements */ public void makeEPS(File epsFile) { - makeAlignmentImage(jalview.util.ImageMaker.EPS, epsFile); + makeAlignmentImage(jalview.util.ImageMaker.TYPE.EPS, epsFile); } /** @@ -1222,9 +1260,13 @@ public class AlignmentPanel extends GAlignmentPanel implements */ public void makePNG(File pngFile) { - makeAlignmentImage(jalview.util.ImageMaker.PNG, pngFile); + makeAlignmentImage(jalview.util.ImageMaker.TYPE.PNG, pngFile); } + public void makeSVG(File svgFile) + { + makeAlignmentImage(jalview.util.ImageMaker.TYPE.SVG, svgFile); + } public void makePNGImageMap(File imgMapFile, String imageName) { // /////ONLY WORKS WITH NONE WRAPPED ALIGNMENTS