{-# LANGUAGE ForeignFunctionInterface, TypeFamilies, MultiParamTypeClasses, 
             FlexibleInstances, TypeSynonymInstances, 
             EmptyDataDecls, ExistentialQuantification, ScopedTypeVariables #-}

-- module HROOT.Class.Interface where

module HROOT.Core.TAttAxis.Interface where


import Data.Word
import Foreign.C
import Foreign.Ptr
import Foreign.ForeignPtr
import FFICXX.Runtime.Cast

import HROOT.Core.TAttAxis.RawType

import HROOT.Core.Deletable.Interface
---- ============ ----



class (IDeletable a) => ITAttAxis a where

    getNdivisions :: a -> IO CInt 

    getAxisColor :: a -> IO CInt 

    getLabelColor :: a -> IO CInt 

    getLabelFont :: a -> IO CInt 

    getLabelOffset :: a -> IO CDouble 

    getLabelSize :: a -> IO CDouble 

    getTitleOffset :: a -> IO CDouble 

    getTitleSize :: a -> IO CDouble 

    getTickLength :: a -> IO CDouble 

    getTitleFont :: a -> IO CInt 

    setNdivisions :: a -> CInt -> CInt -> IO () 

    setAxisColor :: a -> CInt -> IO () 

    setLabelColor :: a -> CInt -> IO () 

    setLabelFont :: a -> CInt -> IO () 

    setLabelOffset :: a -> CDouble -> IO () 

    setLabelSize :: a -> CDouble -> IO () 

    setTickLength :: a -> CDouble -> IO () 

    setTitleOffset :: a -> CDouble -> IO () 

    setTitleSize :: a -> CDouble -> IO () 

    setTitleColor :: a -> CInt -> IO () 

    setTitleFont :: a -> CInt -> IO () 

instance Existable TAttAxis where
  data Exist TAttAxis = forall a. (FPtr a, ITAttAxis a) => ETAttAxis a

upcastTAttAxis :: (FPtr a, ITAttAxis a) => a -> TAttAxis
upcastTAttAxis h = let fh = get_fptr h
                       fh2 :: ForeignPtr RawTAttAxis = castForeignPtr fh
                   in cast_fptr_to_obj fh2

downcastTAttAxis :: (FPtr a, ITAttAxis a) => TAttAxis -> a 
downcastTAttAxis h = let fh = get_fptr h
                         fh2 = castForeignPtr fh
                     in cast_fptr_to_obj fh2