X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignmentPanel.java;h=e1b5abb3c2e6571347faec893b4acb813d0d058f;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=a283c012096f90bb992608a4a55b1bd7fa189249;hpb=59d682209891099d46b960509907c79e3fb276fe;p=jalview.git diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index a283c01..e1b5abb 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -1,37 +1,57 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; -import java.beans.*; -import java.io.*; -import java.util.Hashtable; - -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! @@ -176,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); } @@ -423,15 +443,33 @@ public class AlignmentPanel extends GAlignmentPanel implements { int height = annotationPanel.adjustPanelHeight(); - if (hscroll.isVisible()) - { - height += hscroll.getPreferredSize().height; - } - if (height > alignFrame.getHeight() / 2) - { - height = alignFrame.getHeight() / 2; + 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 + // try and set height according to alignment + if (ascaling > 0 && sscaling < 0.5) + { + // if the alignment is too big then + // default is 0.5 split + height = alignFrame.getHeight() / 2; + } + 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 (!adjustPanelHeight) + else { // maintain same window layout whilst updating sliders height = annotationScroller.getSize().height; @@ -689,7 +727,7 @@ public class AlignmentPanel extends GAlignmentPanel implements seqPanel.seqCanvas.fastPaint(scrollX, scrollY); scalePanel.repaint(); - if (av.getShowAnnotation()) + if (av.getShowAnnotation() && scrollX != 0) { annotationPanel.fastPaint(scrollX); } @@ -697,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) @@ -820,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; @@ -933,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); } @@ -1092,14 +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(); - if (alignFrame != null) - { - alignFrame.setProgressBar("Saving " - + (type == jalview.util.ImageMaker.PNG ? "PNG image" - : "EPS file"), progress); + boolean headless = (System.getProperty("java.awt.headless") != null && System + .getProperty("java.awt.headless").equals("true")); + if (alignFrame != null && !headless) + { + alignFrame.setProgressBar(MessageManager.formatMessage( + "status.saving_file", + new String[] + { type.getLabel() }), progress); } try { @@ -1116,8 +1166,7 @@ public class AlignmentPanel extends GAlignmentPanel implements if (av.getWrapAlignment()) { height = getWrappedHeight(); - if (System.getProperty("java.awt.headless") != null - && System.getProperty("java.awt.headless").equals("true")) + if (headless) { // need to obtain default alignment width and then add in any // additional allowance for id margin @@ -1144,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()) @@ -1185,9 +1240,9 @@ public class AlignmentPanel extends GAlignmentPanel implements } } finally { - if (alignFrame != null) + if (alignFrame != null && !headless) { - alignFrame.setProgressBar("Export complete.", progress); + alignFrame.setProgressBar(MessageManager.getString("status.export_complete"), progress); } } } @@ -1197,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); } /** @@ -1205,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 @@ -1444,11 +1503,8 @@ public class AlignmentPanel extends GAlignmentPanel implements return av.getAlignment(); } - /** - * get the name for this view - * - * @return - */ + + @Override public String getViewName() { return av.viewName;