/* * ViewAligmentPanel.java * * Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * BEAST 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.app.beauti.datapanel; import javax.swing.*; import dr.app.beauti.options.PartitionData; import dr.evolution.util.Taxon; import java.awt.*; import java.awt.event.*; /** * @author Andrew Rambaut * @author Alexei Drummond * @author Walter Xie * @version $Id: ViewAligmentPanel.java,v 1.5 2009/08/11 13:29:34 rambaut Exp$ */ public class ViewAligmentPanel extends JPanel { private static final long serialVersionUID = 6129057786946772468L; private final PartitionData partitionData; private final static int FONT_SIZE = 14; private final static int GAP = 4; private final static int TAXON_NAME_LEN = 300; private final static int Y_BOADER = FONT_SIZE + 3 * GAP + 20; private int width = TAXON_NAME_LEN; private int height = Y_BOADER; public ViewAligmentPanel (PartitionData partitionData) { this.partitionData = partitionData; getWidthLenth(); } public void paintComponent(Graphics g) { super.paintComponent(g); setBackground(Color.white); // Graphics2D g2d = (Graphics2D) g; g.setFont(new Font("SansSerif", Font.PLAIN, FONT_SIZE)); String sequenceString = partitionData.getAlignment().getAlignedSequenceString(0); for (int i = 0; i < sequenceString.length(); i++) { if (i == 0 || ((i+1)%10) == 0) { if (i == 0) { g.drawString(Integer.toString(i+1), TAXON_NAME_LEN + i * (FONT_SIZE + GAP), Y_BOADER - (FONT_SIZE + 3 * GAP)); } else if (i < 100) { g.drawString(Integer.toString(i+1), TAXON_NAME_LEN + i * (FONT_SIZE + GAP) - GAP, Y_BOADER - (FONT_SIZE + 3 * GAP)); } else { g.drawString(Integer.toString(i+1), TAXON_NAME_LEN + i * (FONT_SIZE + GAP) - 2 * GAP, Y_BOADER - (FONT_SIZE + 3 * GAP)); } g.drawLine(TAXON_NAME_LEN + i * (FONT_SIZE + GAP) + GAP, Y_BOADER - (FONT_SIZE + 2 * GAP), TAXON_NAME_LEN + i * (FONT_SIZE + GAP) + GAP, Y_BOADER - (FONT_SIZE + GAP)); } } for (int i = 0; i < partitionData.getAlignment().getTaxonCount(); i++) { Taxon taxon = partitionData.getAlignment().getTaxon(i); g.drawString(taxon.getId(), 0, Y_BOADER + i * (FONT_SIZE + GAP)); sequenceString = partitionData.getAlignment().getAlignedSequenceString(i); int charSpace = TAXON_NAME_LEN; for (char c : sequenceString.toCharArray()) { g.drawString(Character.toString(c), charSpace, Y_BOADER + i * (FONT_SIZE + GAP)); charSpace = charSpace + FONT_SIZE + GAP; } } } public void setPreferredSize(){ super.setPreferredSize(new java.awt.Dimension(width, height)); // System.out.println(width + " " + height); } private void getWidthLenth() { int maxLen = 0; String sequenceString = null; for (int i = 0; i < partitionData.getAlignment().getTaxonCount(); i++) { sequenceString = partitionData.getAlignment().getAlignedSequenceString(i); if (sequenceString.length() > maxLen) maxLen = sequenceString.length(); height = height + FONT_SIZE + GAP; } width = width + maxLen * (FONT_SIZE + GAP); } }