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

-- module HROOT.Class.Interface where

module HROOT.Class.TAttPad.Interface where


import Data.Word
import Foreign.ForeignPtr
import HROOT.TypeCast

import HROOT.Class.TAttPad.RawType

import HROOT.Class.Deletable.Interface


class (IDeletable a) => ITAttPad a where

    resetAttPad :: a -> String -> IO () 

    setBottomMargin :: a -> Double -> IO () 

    setLeftMargin :: a -> Double -> IO () 

    setRightMargin :: a -> Double -> IO () 

    setTopMargin :: a -> Double -> IO () 

    setMargin :: a -> Double -> Double -> Double -> Double -> IO () 

    setAfile :: a -> Double -> IO () 

    setXfile :: a -> Double -> IO () 

    setYfile :: a -> Double -> IO () 

    setAstat :: a -> Double -> IO () 

    setXstat :: a -> Double -> IO () 

    setYstat :: a -> Double -> IO () 

instance Existable TAttPad where
  data Exist TAttPad = forall a. (FPtr a, ITAttPad a) => ETAttPad a

upcastTAttPad :: (FPtr a, ITAttPad a) => a -> TAttPad
upcastTAttPad h = let fh = get_fptr h
                      fh2 :: ForeignPtr RawTAttPad = castForeignPtr fh
                  in cast_fptr_to_obj fh2