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

module HROOT.Class.TAttPad.Implementation where


import HROOT.TypeCast

import HROOT.Class.TAttPad.RawType
import HROOT.Class.TAttPad.FFI
import HROOT.Class.TAttPad.Interface
import HROOT.Class.TAttPad.Cast

import HROOT.Class.Deletable.RawType
import HROOT.Class.Deletable.Cast
import HROOT.Class.Deletable.Interface

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

import System.IO.Unsafe


instance ITAttPad TAttPad where
  resetAttPad = xform1 c_tattpad_resetattpad
  setBottomMargin = xform1 c_tattpad_setbottommargin
  setLeftMargin = xform1 c_tattpad_setleftmargin
  setRightMargin = xform1 c_tattpad_setrightmargin
  setTopMargin = xform1 c_tattpad_settopmargin
  setMargin = xform4 c_tattpad_setmargin
  setAfile = xform1 c_tattpad_setafile
  setXfile = xform1 c_tattpad_setxfile
  setYfile = xform1 c_tattpad_setyfile
  setAstat = xform1 c_tattpad_setastat
  setXstat = xform1 c_tattpad_setxstat
  setYstat = xform1 c_tattpad_setystat
instance IDeletable TAttPad where
  delete = xform0 c_tattpad_delete

instance ITAttPad (Exist TAttPad) where
  resetAttPad (ETAttPad x) = resetAttPad x
  setBottomMargin (ETAttPad x) = setBottomMargin x
  setLeftMargin (ETAttPad x) = setLeftMargin x
  setRightMargin (ETAttPad x) = setRightMargin x
  setTopMargin (ETAttPad x) = setTopMargin x
  setMargin (ETAttPad x) = setMargin x
  setAfile (ETAttPad x) = setAfile x
  setXfile (ETAttPad x) = setXfile x
  setYfile (ETAttPad x) = setYfile x
  setAstat (ETAttPad x) = setAstat x
  setXstat (ETAttPad x) = setXstat x
  setYstat (ETAttPad x) = setYstat x
instance IDeletable (Exist TAttPad) where
  delete (ETAttPad x) = delete x


newTAttPad :: IO TAttPad
newTAttPad = xformnull c_tattpad_newtattpad

tAttPadGetBottomMargin :: TAttPad -> IO Double
tAttPadGetBottomMargin = xform0 c_tattpad_tattpadgetbottommargin

tAttPadGetLeftMargin :: TAttPad -> IO Double
tAttPadGetLeftMargin = xform0 c_tattpad_tattpadgetleftmargin

tAttPadGetRightMargin :: TAttPad -> IO Double
tAttPadGetRightMargin = xform0 c_tattpad_tattpadgetrightmargin

tAttPadGetTopMargin :: TAttPad -> IO Double
tAttPadGetTopMargin = xform0 c_tattpad_tattpadgettopmargin

tAttPadGetAfile :: TAttPad -> IO Double
tAttPadGetAfile = xform0 c_tattpad_tattpadgetafile

tAttPadGetXfile :: TAttPad -> IO Double
tAttPadGetXfile = xform0 c_tattpad_tattpadgetxfile

tAttPadGetYfile :: TAttPad -> IO Double
tAttPadGetYfile = xform0 c_tattpad_tattpadgetyfile

tAttPadGetAstat :: TAttPad -> IO Double
tAttPadGetAstat = xform0 c_tattpad_tattpadgetastat

tAttPadGetXstat :: TAttPad -> IO Double
tAttPadGetXstat = xform0 c_tattpad_tattpadgetxstat

tAttPadGetYstat :: TAttPad -> IO Double
tAttPadGetYstat = xform0 c_tattpad_tattpadgetystat

tAttPadGetFrameFillColor :: TAttPad -> IO Int
tAttPadGetFrameFillColor = xform0 c_tattpad_tattpadgetframefillcolor

tAttPadGetFrameLineColor :: TAttPad -> IO Int
tAttPadGetFrameLineColor = xform0 c_tattpad_tattpadgetframelinecolor

tAttPadGetFrameFillStyle :: TAttPad -> IO Int
tAttPadGetFrameFillStyle = xform0 c_tattpad_tattpadgetframefillstyle

tAttPadGetFrameLineStyle :: TAttPad -> IO Int
tAttPadGetFrameLineStyle = xform0 c_tattpad_tattpadgetframelinestyle

tAttPadGetFrameLineWidth :: TAttPad -> IO Int
tAttPadGetFrameLineWidth = xform0 c_tattpad_tattpadgetframelinewidth

tAttPadGetFrameBorderSize :: TAttPad -> IO Int
tAttPadGetFrameBorderSize = xform0 c_tattpad_tattpadgetframebordersize

tAttPadGetFrameBorderMode :: TAttPad -> IO Int
tAttPadGetFrameBorderMode = xform0 c_tattpad_tattpadgetframebordermode

tAttPadSetFrameFillColor :: TAttPad -> Int -> IO ()
tAttPadSetFrameFillColor = xform1 c_tattpad_tattpadsetframefillcolor

tAttPadSetFrameLineColor :: TAttPad -> Int -> IO ()
tAttPadSetFrameLineColor = xform1 c_tattpad_tattpadsetframelinecolor

tAttPadSetFrameFillStyle :: TAttPad -> Int -> IO ()
tAttPadSetFrameFillStyle = xform1 c_tattpad_tattpadsetframefillstyle

tAttPadSetFrameLineStyle :: TAttPad -> Int -> IO ()
tAttPadSetFrameLineStyle = xform1 c_tattpad_tattpadsetframelinestyle

tAttPadSetFrameLineWidth :: TAttPad -> Int -> IO ()
tAttPadSetFrameLineWidth = xform1 c_tattpad_tattpadsetframelinewidth

tAttPadSetFrameBorderSize :: TAttPad -> Int -> IO ()
tAttPadSetFrameBorderSize = xform1 c_tattpad_tattpadsetframebordersize

tAttPadSetFrameBorderMode :: TAttPad -> Int -> IO ()
tAttPadSetFrameBorderMode = xform1 c_tattpad_tattpadsetframebordermode



instance FPtr (Exist TAttPad) where
  type Raw (Exist TAttPad) = RawTAttPad
  get_fptr (ETAttPad obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETAttPad (cast_fptr_to_obj (fptr :: ForeignPtr RawTAttPad) :: TAttPad)