--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are
--met:
--
--    - Redistributions of source code must retain the above copyright
--      notice, this list of conditions and the following disclaimer.
--
--    - Redistributions in binary form must reproduce the above copyright
--      notice, this list of conditions and the following disclaimer in
--      the documentation and/or other materials provided with the
--      distribution.
--
--    - Neither the name of The Numerical ALgorithms Group Ltd. nor the
--      names of its contributors may be used to endorse or promote products
--      derived from this software without specific prior written permission.
--
--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import Boolean
import Integer
import DoubleFloat
)abbrev package GRDEF GraphicsDefaults
++ Author: Clifton J. Williamson
++ Date Created: 8 January 1990
++ Date Last Updated: 8 January 1990
++ Basic Operations: clipPointsDefault, drawToScale, adaptive, maxPoints,
++ minPoints, screenResolution
++ Related Constructors:
++ Also See:
++ AMS Classifications:
++ Keywords:
++ References:
++ Description: TwoDimensionalPlotSettings sets global flags and constants 
++ for 2-dimensional plotting.

GraphicsDefaults(): Exports == Implementation where
  B  ==> Boolean
  I  ==> Integer
  SF ==> DoubleFloat
  maxWidth  ==> 1000
  maxHeight ==> 1000

  Exports ==> with
    clipPointsDefault: () -> B
      ++ clipPointsDefault() determines whether or not automatic clipping is 
      ++ to be done.
    drawToScale: () -> B
      ++ drawToScale() determines whether or not plots are to be drawn to scale.

    clipPointsDefault: B -> B
      ++ clipPointsDefault(true) turns on automatic clipping;
      ++ \spad{clipPointsDefault(false)} turns off automatic clipping.
      ++ The default setting is true.
    drawToScale: B -> B
      ++ drawToScale(true) causes plots to be drawn to scale.
      ++ \spad{drawToScale(false)} causes plots to be drawn so that they
      ++ fill up the viewport window.
      ++ The default setting is false.

--% settings from the two-dimensional plot package

    adaptive: () -> B
      ++ adaptive() determines whether plotting will be done adaptively.
    maxPoints: () -> I
      ++ maxPoints() returns the maximum number of points in a plot.
    minPoints: () -> I
      ++ minPoints() returns the minimum number of points in a plot.
    screenResolution: () -> I
      ++ screenResolution() returns the screen resolution n.

    adaptive: B -> B
      ++ adaptive(true) turns adaptive plotting on;
      ++ \spad{adaptive(false)} turns adaptive plotting off.
    maxPoints: I -> I
      ++ maxPoints() sets the maximum number of points in a plot.
    minPoints: I -> I
      ++ minPoints() sets the minimum number of points in a plot.
    screenResolution: I -> I
      ++ screenResolution(n) sets the screen resolution to n.

  Implementation ==> add

--% global flags and constants

    CLIPPOINTSDEFAULT : B := true
    TOSCALE  : B := false

--% functions

    clipPointsDefault()     == CLIPPOINTSDEFAULT
    drawToScale()  == TOSCALE

    clipPointsDefault b    == CLIPPOINTSDEFAULT := b
    drawToScale b == TOSCALE := b

--% settings from the two-dimensional plot package

    adaptive() == adaptive?()$Plot
    minPoints() == minPoints()$Plot
    maxPoints() == maxPoints()$Plot
    screenResolution() == screenResolution()$Plot

    adaptive b == setAdaptive(b)$Plot
    minPoints n == setMinPoints(n)$Plot
    maxPoints n == setMaxPoints(n)$Plot
    screenResolution n == setScreenResolution(n)$Plot

