From 721eacfd0eb9bfb415c60448b8ec8f24774b196b Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 6 May 2016 15:13:41 +0100 Subject: [PATCH] JAL-192 JAL-2099 factored out calculation from rendering code #3 --- src/jalview/gui/ScalePanel.java | 89 +--------------------- src/jalview/renderer/ScaleRenderer.java | 123 +++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 87 deletions(-) create mode 100644 src/jalview/renderer/ScaleRenderer.java diff --git a/src/jalview/gui/ScalePanel.java b/src/jalview/gui/ScalePanel.java index 8a3138d..df7a14f 100755 --- a/src/jalview/gui/ScalePanel.java +++ b/src/jalview/gui/ScalePanel.java @@ -35,7 +35,6 @@ import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; -import java.util.ArrayList; import java.util.List; import javax.swing.JMenuItem; @@ -526,8 +525,9 @@ public class ScalePanel extends JPanel implements MouseMotionListener, // Draw the scale numbers gg.setColor(Color.black); - List marks = calculateMarks(startx, endx); int maxX = 0; + List marks = jalview.renderer.ScaleRenderer.calculateMarks( + av, startx, endx); for (Object[] mark : marks) { boolean major = Boolean.valueOf((Boolean) mark[0]); @@ -563,89 +563,4 @@ public class ScalePanel extends JPanel implements MouseMotionListener, } - /** - * calculate positions markers on the alignment ruler - * - * @return List { Object { .. } } Boolean: true/false for major/minor mark, - * Integer: marker position in alignment column coords, String: null - * or a String to be rendered at the position. - */ - public List calculateMarks(int startx, int endx) - { - new ArrayList(); - - int scalestartx = (startx / 10) * 10; - - SequenceI refSeq = av.getAlignment().getSeqrep(); - int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1; - if (refSeq != null) - { - // find bounds and set origin appopriately - // locate first visible position for this sequence - int[] refbounds = av.getColumnSelection() - .locateVisibleBoundsOfSequence(refSeq); - - refSp = refbounds[0]; - refEp = refbounds[1]; - refStart = refbounds[2]; - refEnd = refbounds[3]; - refStartI = refbounds[4]; - refEndI = refbounds[5]; - scalestartx = refSp + ((scalestartx - refSp) / 10) * 10; - } - - - if (refSeq == null && scalestartx % 10 == 0) - { - scalestartx += 5; - } - List marks = new ArrayList(); - String string; - int maxX = 0, refN, iadj; - // todo: add a 'reference origin column' to set column number relative to - for (int i = scalestartx; i < endx; i += 5) - { - Object[] amark = new Object[3]; - if (((i - refSp) % 10) == 0) - { - if (refSeq == null) - { - iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1; - string = String.valueOf(iadj); - } - else - { - iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1); - refN = refSeq.findPosition(iadj); - // TODO show bounds if position is a gap - // - ie L--R -> "1L|2R" for - // marker - if (iadj < refStartI) - { - string = String.valueOf(iadj - refStartI); - } - else if (iadj > refEndI) - { - string = "+" + String.valueOf(iadj - refEndI); - } - else - { - string = String.valueOf(refN) + refSeq.getCharAt(iadj); - } - } - amark[0] = Boolean.TRUE; - amark[1] = Integer.valueOf(i - startx - 1); - amark[2] = string; - - } - else - { - amark[0] = Boolean.FALSE; - amark[1] = Integer.valueOf(i - startx - 1); - amark[2] = null; - } - marks.add(amark); - } - return marks; - } } diff --git a/src/jalview/renderer/ScaleRenderer.java b/src/jalview/renderer/ScaleRenderer.java new file mode 100644 index 0000000..d91ea74 --- /dev/null +++ b/src/jalview/renderer/ScaleRenderer.java @@ -0,0 +1,123 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ 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. + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.renderer; + +import jalview.api.AlignViewportI; +import jalview.datamodel.SequenceI; + +import java.util.ArrayList; +import java.util.List; + +/** + * Calculate and display alignment rulers + * + * @author jprocter + * + */ +public class ScaleRenderer +{ + /** + * calculate positions markers on the alignment ruler + * + * @return List { Object { .. } } Boolean: true/false for major/minor mark, + * Integer: marker position in alignment column coords, String: null + * or a String to be rendered at the position. + */ + public static List calculateMarks(AlignViewportI av, + int startx, int endx) + { + new ArrayList(); + + int scalestartx = (startx / 10) * 10; + + SequenceI refSeq = av.getAlignment().getSeqrep(); + int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1; + if (refSeq != null) + { + // find bounds and set origin appopriately + // locate first visible position for this sequence + int[] refbounds = av.getColumnSelection() + .locateVisibleBoundsOfSequence(refSeq); + + refSp = refbounds[0]; + refEp = refbounds[1]; + refStart = refbounds[2]; + refEnd = refbounds[3]; + refStartI = refbounds[4]; + refEndI = refbounds[5]; + scalestartx = refSp + ((scalestartx - refSp) / 10) * 10; + } + + if (refSeq == null && scalestartx % 10 == 0) + { + scalestartx += 5; + } + List marks = new ArrayList(); + String string; + int maxX = 0, refN, iadj; + // todo: add a 'reference origin column' to set column number relative to + for (int i = scalestartx; i < endx; i += 5) + { + Object[] amark = new Object[3]; + if (((i - refSp) % 10) == 0) + { + if (refSeq == null) + { + iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1; + string = String.valueOf(iadj); + } + else + { + iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1); + refN = refSeq.findPosition(iadj); + // TODO show bounds if position is a gap + // - ie L--R -> "1L|2R" for + // marker + if (iadj < refStartI) + { + string = String.valueOf(iadj - refStartI); + } + else if (iadj > refEndI) + { + string = "+" + String.valueOf(iadj - refEndI); + } + else + { + string = String.valueOf(refN) + refSeq.getCharAt(iadj); + } + } + amark[0] = Boolean.TRUE; + amark[1] = Integer.valueOf(i - startx - 1); + amark[2] = string; + + } + else + { + amark[0] = Boolean.FALSE; + amark[1] = Integer.valueOf(i - startx - 1); + amark[2] = null; + } + marks.add(amark); + } + return marks; + } + +} -- 1.7.10.2