! gtgraph_types.f90 - gtgraph 層の型宣言
! Copyright (C) TOYODA Eizi, 2000.  All rights reserved.

module gtgraph_types

    use dc_string, only: VSTRING
    use dc_types, only: STRING
    use gtdata_types, only: GT_VARIABLE
    implicit none

    type GT_AXIS
        type(GT_VARIABLE):: var
        real:: lower
        real:: upper
        logical:: vertical
        logical:: drawn
        character(STRING):: saved
        character(STRING):: title
        character(STRING):: units
        integer:: index
        logical:: logscale
        logical:: negative
    end type

    type GT_CONTOURS
        type(GT_VARIABLE):: var
        type(GT_AXIS), pointer:: h_axis
        type(GT_AXIS), pointer:: v_axis
        ! 真にしたときのみぬりわけを行う
        logical:: shade
        ! 真にしたときのみ等値線を引く
        logical:: contours
        ! --- どのレベルに等値線またはぬりわけ境界を置くか ---
        ! 確保されていれば size(levels) 本の線を引く手動設定
        real, pointer, dimension(:):: levels
        ! コンター(c), 色塗り(s) に関してレンジ指定
        ! デフォルトは無限区間
        real, pointer:: crange(:)
        real, pointer:: srange(:)
        ! 正に指定すればその間隔を用いて自動設定
        ! 負に指定すれば最大最小から int(abs(interval)) 本の線を引く自動設定
        ! 初期値 0.0 は手動処理がない場合だけ -12.0 と等価
        real:: sint
        real:: cint
        ! 自動設定を行うときにこの値を含むようにする
        real:: base
        ! 手動・自動設定のいかなる場合でもレベルを除去
        real, pointer, dimension(:):: skiplevels
        ! --- 等値線をどのように描くか ---
        ! icycle 本の等値線のうち1本を major line (ラベルつきの太線) にする
        integer:: icycle
        ! --- ぬりわけをどのようにするか ---
        ! もしひとつでも割り付けるならば大きさは
        ! size(levels) + 1 にしなければならない
        integer, pointer, dimension(:):: tones
        ! --- -next メッセージを受け付けるか
        logical:: animate
        ! --- 空でなければ地図を描画する
        character(STRING):: map
    end type

    type GT_VECTORS
        type(GT_VARIABLE):: var1
        type(GT_VARIABLE):: var2
        type(GT_AXIS), pointer:: h_axis
        type(GT_AXIS), pointer:: v_axis
	integer:: hskip
	integer:: vskip
        logical:: animate
        ! --- 空でなければ地図を描画する
        character(STRING):: map
    end type

    type GT_LINE
        type(GT_VARIABLE):: var
        type(GT_AXIS), pointer:: h_axis
        type(GT_AXIS), pointer:: v_axis
        integer:: index
        integer:: type
        integer:: mark
        logical:: animate
    end type

    type GT_FIGURE
        type(GT_AXIS), pointer:: h_axis
        type(GT_AXIS), pointer:: v_axis
        type(GT_CONTOURS), pointer:: contours(:)
	type(GT_VECTORS), pointer:: vectors(:)
        type(GT_LINE), pointer:: line(:)
        character(STRING):: title
        logical:: animate
        ! 投影法関係
        integer:: projection
        real:: stdlon, stdlat, rotate
        ! アスペクト比, 無指定は 0.0
        real:: aspect
	! ビューポート横幅, デフォルトは 0.55
	real:: fill
	! ビューポート中心と描画領域中心との差, デフォルトは 0.025
	real:: shift
	! 仮想的な図劃上端、デフォルトは 0.65
	real:: ceil
    end type

    type GT_FRAME
        type(GT_FIGURE), pointer:: figs(:)
        character(STRING):: title
        logical:: first_figure
    end type

    type GT_DEVICE
        integer:: ws_id
    end type

    ! 万物を併呑するための型
    type GT_OBJECT
        type(GT_AXIS), pointer:: axis
        type(GT_CONTOURS), pointer:: cont
        type(GT_VECTORS), pointer:: vect
        type(GT_LINE), pointer:: line
        type(GT_FIGURE), pointer:: fig
        type(GT_FRAME), pointer:: frame
        type(GT_OBJECT), pointer:: next
    end type

end module
