001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021package org.biojava.bio.gui.sequence.tracklayout;
022
023import org.biojava.bio.seq.Sequence;
024import org.biojava.bio.symbol.RangeLocation;
025
026
027/**
028 * A TrackLayout implenentation that wraps the sequence smoothly after a set number of residues
029 *
030 * @author Mark Southern
031 * @since 1.5
032 */
033public class SimpleTrackLayout implements TrackLayout {
034    private RangeLocation loc;
035    private int wrap = 50;
036    private int wrapInc = 10;
037
038    public SimpleTrackLayout() {
039    }
040
041    public SimpleTrackLayout(Sequence seq, int wrap) {
042        setSequence(seq);
043        setWrap(wrap);
044    }
045
046    public void setSequence(Sequence seq) {
047    }
048
049    public void setRange(RangeLocation loc) {
050        this.loc = loc;
051    }
052
053    public RangeLocation[] getRanges() {
054        int min = loc.getMin();
055        int max = loc.getMax();
056
057        int rowCount = ( int ) Math.ceil((( double ) (max - min + 1)) / (( double ) wrap));
058        RangeLocation[] ranges = new RangeLocation[ rowCount ];
059
060        int count = 0;
061
062        for (int i = min; i <= max; i += wrap) {
063            int newMax = (i + wrap) - 1;
064
065            if (newMax > max) {
066                newMax = max;
067            }
068
069            RangeLocation loc = new RangeLocation(i, newMax);
070            ranges[ count++ ] = loc;
071        }
072
073        return ranges;
074    }
075
076    public void setWrap(int wrap) {
077        this.wrap = wrap;
078    }
079
080    public int getWrap() {
081        return wrap;
082    }
083
084    public int getWrapIncrement() {
085        return wrapInc;
086    }
087
088    public void setWrapIncrement(int inc) {
089        wrapInc = inc;
090    }
091}