/** 
 *  BlackHole Source File
 *
 *  GNU Copyright (C) 2008  Gaspar Sinai gaspar(at)adys.org 
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License, version 2,
 *  dated June 1991. See file COPYYING for details.
 *
 *  This program 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 this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
package sinai.gaspar.blackhole;

/**
 * Options that can be set.
 * @author Gaspar Sinai
 * @version 2008-04-28
 */
public interface IOptions {
    /**
     * 4 3 2
     * 5 0 1
     * 6 7 8 
     */
    public static final int TYPE_SPIRAL=0;

    /**
     *  8    
     *    7  
     *  3   6
     *    2   5
     *  0   1   4
     */
    public static final int TYPE_TRIANGLE=1;

    /**
     *  9  
     *  58 
     *  247
     *  0136
     * This is not used in the application, but it can be specified as 
     * applet "type" parameter.
     */
    public static final int TYPE_PACKED_TRIANGLE=2;

    public void setType (int type);
    /**
     * Positive: zoom in.
     * Negative: zoom out.
     * @return actual zoom after change.
     */ 
    public int zoom (int value);

    /**
     * Positive: speed increase 
     * Negative: speed decrease.
     * @return actual speed after change.
     */ 
    public int speed (int value);

    /**
     * reset the prime array to a value.
     */
    public void setStart (long value);

    /**
     * Move back one frame.
     */
    public void back ();

    /**
     * Move forward one frame.
     */
    public void forward ();

    /**
     * @return true if we run min/max delay.
     */
    public boolean isDelayLimited ();

    /**
     * @return true if we reached max or min size.
     */
    public boolean isZoomLimited ();

    /**
     * @return the starting point.
     */
    public long getStart ();

}
