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

module HROOT.Core.TVirtualPad.Implementation where


import FFICXX.Runtime.Cast

import HROOT.Core.TVirtualPad.RawType
import HROOT.Core.TVirtualPad.FFI
import HROOT.Core.TVirtualPad.Interface
import HROOT.Core.TVirtualPad.Cast
import HROOT.Core.TClass.RawType
import HROOT.Core.TClass.Cast
import HROOT.Core.TClass.Interface
import HROOT.Core.TObject.RawType
import HROOT.Core.TObject.Cast
import HROOT.Core.TObject.Interface
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 ITVirtualPad TVirtualPad where
  cd = xform1 c_tvirtualpad_cd
  divide_tvirtualpad = xform5 c_tvirtualpad_divide_tvirtualpad
  setLogx = xform1 c_tvirtualpad_setlogx
  setLogy = xform1 c_tvirtualpad_setlogy
  setLogz = xform1 c_tvirtualpad_setlogz
instance ITObject TVirtualPad where
  draw = xform1 c_tvirtualpad_draw
  findObject = xform1 c_tvirtualpad_findobject
  getName = xform0 c_tvirtualpad_getname
  isA = xform0 c_tvirtualpad_isa
  paint = xform1 c_tvirtualpad_paint
  printObj = xform1 c_tvirtualpad_printobj
  saveAs = xform2 c_tvirtualpad_saveas
  write = xform3 c_tvirtualpad_write
instance IDeletable TVirtualPad where
  delete = xform0 c_tvirtualpad_delete

instance ITVirtualPad (Exist TVirtualPad) where
  cd (ETVirtualPad x) a1 = return . ETVirtualPad =<< cd x a1
  divide_tvirtualpad (ETVirtualPad x) = divide_tvirtualpad x
  setLogx (ETVirtualPad x) = setLogx x
  setLogy (ETVirtualPad x) = setLogy x
  setLogz (ETVirtualPad x) = setLogz x
instance ITObject (Exist TVirtualPad) where
  draw (ETVirtualPad x) = draw x
  findObject (ETVirtualPad x) = findObject x
  getName (ETVirtualPad x) = getName x
  isA (ETVirtualPad x) = isA x
  paint (ETVirtualPad x) = paint x
  printObj (ETVirtualPad x) = printObj x
  saveAs (ETVirtualPad x) = saveAs x
  write (ETVirtualPad x) = write x
instance IDeletable (Exist TVirtualPad) where
  delete (ETVirtualPad x) = delete x







instance FPtr (Exist TVirtualPad) where
  type Raw (Exist TVirtualPad) = RawTVirtualPad
  get_fptr (ETVirtualPad obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETVirtualPad (cast_fptr_to_obj (fptr :: ForeignPtr RawTVirtualPad) :: TVirtualPad)