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

module HROOT.Core.TAttPad.Implementation where


import FFICXX.Runtime.Cast

import HROOT.Core.TAttPad.RawType
import HROOT.Core.TAttPad.FFI
import HROOT.Core.TAttPad.Interface
import HROOT.Core.TAttPad.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 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 CDouble
tAttPadGetBottomMargin = xform0 c_tattpad_tattpadgetbottommargin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tAttPadSetFrameBorderMode :: TAttPad -> CInt -> 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)