{-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
             FlexibleInstances, TypeSynonymInstances, EmptyDataDecls, 
             OverlappingInstances, IncoherentInstances #-}

module HROOT.Core.TAttAxis.Implementation where


import FFICXX.Runtime.Cast

import HROOT.Core.TAttAxis.RawType
import HROOT.Core.TAttAxis.FFI
import HROOT.Core.TAttAxis.Interface
import HROOT.Core.TAttAxis.Cast

import HROOT.Core.Deletable.RawType
import HROOT.Core.Deletable.Cast
import HROOT.Core.Deletable.Interface

import Data.Word
import Foreign.C
import Foreign.Ptr 
import Foreign.ForeignPtr

import System.IO.Unsafe


instance ITAttAxis TAttAxis where
  getNdivisions = xform0 c_tattaxis_getndivisions
  getAxisColor = xform0 c_tattaxis_getaxiscolor
  getLabelColor = xform0 c_tattaxis_getlabelcolor
  getLabelFont = xform0 c_tattaxis_getlabelfont
  getLabelOffset = xform0 c_tattaxis_getlabeloffset
  getLabelSize = xform0 c_tattaxis_getlabelsize
  getTitleOffset = xform0 c_tattaxis_gettitleoffset
  getTitleSize = xform0 c_tattaxis_gettitlesize
  getTickLength = xform0 c_tattaxis_getticklength
  getTitleFont = xform0 c_tattaxis_gettitlefont
  setNdivisions = xform2 c_tattaxis_setndivisions
  setAxisColor = xform1 c_tattaxis_setaxiscolor
  setLabelColor = xform1 c_tattaxis_setlabelcolor
  setLabelFont = xform1 c_tattaxis_setlabelfont
  setLabelOffset = xform1 c_tattaxis_setlabeloffset
  setLabelSize = xform1 c_tattaxis_setlabelsize
  setTickLength = xform1 c_tattaxis_setticklength
  setTitleOffset = xform1 c_tattaxis_settitleoffset
  setTitleSize = xform1 c_tattaxis_settitlesize
  setTitleColor = xform1 c_tattaxis_settitlecolor
  setTitleFont = xform1 c_tattaxis_settitlefont
instance IDeletable TAttAxis where
  delete = xform0 c_tattaxis_delete

instance ITAttAxis (Exist TAttAxis) where
  getNdivisions (ETAttAxis x) = getNdivisions x
  getAxisColor (ETAttAxis x) = getAxisColor x
  getLabelColor (ETAttAxis x) = getLabelColor x
  getLabelFont (ETAttAxis x) = getLabelFont x
  getLabelOffset (ETAttAxis x) = getLabelOffset x
  getLabelSize (ETAttAxis x) = getLabelSize x
  getTitleOffset (ETAttAxis x) = getTitleOffset x
  getTitleSize (ETAttAxis x) = getTitleSize x
  getTickLength (ETAttAxis x) = getTickLength x
  getTitleFont (ETAttAxis x) = getTitleFont x
  setNdivisions (ETAttAxis x) = setNdivisions x
  setAxisColor (ETAttAxis x) = setAxisColor x
  setLabelColor (ETAttAxis x) = setLabelColor x
  setLabelFont (ETAttAxis x) = setLabelFont x
  setLabelOffset (ETAttAxis x) = setLabelOffset x
  setLabelSize (ETAttAxis x) = setLabelSize x
  setTickLength (ETAttAxis x) = setTickLength x
  setTitleOffset (ETAttAxis x) = setTitleOffset x
  setTitleSize (ETAttAxis x) = setTitleSize x
  setTitleColor (ETAttAxis x) = setTitleColor x
  setTitleFont (ETAttAxis x) = setTitleFont x
instance IDeletable (Exist TAttAxis) where
  delete (ETAttAxis x) = delete x


newTAttAxis :: IO TAttAxis
newTAttAxis = xformnull c_tattaxis_newtattaxis





instance FPtr (Exist TAttAxis) where
  type Raw (Exist TAttAxis) = RawTAttAxis
  get_fptr (ETAttAxis obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETAttAxis (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttAxis) :: TAttAxis)