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

module gtgraph_types

    use dc_string, only: VSTRING
    use gtdata_types, only: GT_VARIABLE

    type GT_AXIS
        type(GT_VARIABLE):: var
        real:: lower
        real:: upper
        logical:: vertical
        logical:: drawn
        type(VSTRING):: saved
        type(VSTRING):: title
        type(VSTRING):: units
        integer:: index
    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
        ! 正に指定すればその間隔を用いて自動設定
        ! 負に指定すれば最大最小から int(abs(interval)) 本の線を引く自動設定
        ! 初期値 0.0 は手動処理がない場合だけ -12.0 と等価
        real:: interval
        ! 自動設定を行うときにこの値を含むようにする
        real:: base
        ! 手動・自動設定のいかなる場合でもレベルを除去
        real, pointer, dimension(:):: skiplevels
        ! --- 等値線をどのように描くか ---
        ! icycle 本の等値線のうち1本を major line (ラベルつきの太線) にする
        integer:: icycle
        ! --- ぬりわけをどのようにするか ---
        ! もしひとつでも割り付けるならば大きさは size(levels) + 1 にしなければならない
        integer, pointer, dimension(:):: tones
        ! --- -next メッセージを受け付けるか
        logical:: animate
    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
    end type

    type GT_FIGURE
        type(GT_AXIS), pointer:: h_axis
        type(GT_AXIS), pointer:: v_axis
        type(GT_CONTOURS), pointer:: contours(:)
        type(GT_LINE), pointer:: line(:)
        type(VSTRING):: title
        logical:: animate
    end type

    type GT_FRAME
        type(GT_FIGURE), pointer:: figs(:)
        type(VSTRING):: 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_LINE), pointer:: line
        type(GT_FIGURE), pointer:: fig
        type(GT_FRAME), pointer:: frame
        type(GT_OBJECT), pointer:: next
    end type

end module
