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

module HROOT.Class.TRint.Implementation where


import HROOT.TypeCast

import HROOT.Class.TRint.RawType
import HROOT.Class.TRint.FFI
import HROOT.Class.TRint.Interface
import HROOT.Class.TRint.Cast
import HROOT.Class.TClass.RawType
import HROOT.Class.TClass.Cast
import HROOT.Class.TClass.Interface
import HROOT.Class.TApplication.RawType
import HROOT.Class.TApplication.Cast
import HROOT.Class.TApplication.Interface
import HROOT.Class.TObject.RawType
import HROOT.Class.TObject.Cast
import HROOT.Class.TObject.Interface
import HROOT.Class.TQObject.RawType
import HROOT.Class.TQObject.Cast
import HROOT.Class.TQObject.Interface
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 ITRint TRint where
instance ITApplication TRint where
  run = xform1 c_trint_run
instance ITObject TRint where
  draw = xform1 c_trint_draw
  findObject = xform1 c_trint_findobject
  getName = xform0 c_trint_getname
  isA = xform0 c_trint_isa
  isFolder = xform0 c_trint_isfolder
  isEqual = xform1 c_trint_isequal
  isSortable = xform0 c_trint_issortable
  paint = xform1 c_trint_paint
  printObj = xform1 c_trint_printobj
  recursiveRemove = xform1 c_trint_recursiveremove
  saveAs = xform2 c_trint_saveas
  useCurrentStyle = xform0 c_trint_usecurrentstyle
  write = xform3 c_trint_write
instance ITQObject TRint where
instance IDeletable TRint where
  delete = xform0 c_trint_delete

instance ITRint (Exist TRint) where

instance ITApplication (Exist TRint) where
  run (ETRint x) = run x
instance ITObject (Exist TRint) where
  draw (ETRint x) = draw x
  findObject (ETRint x) = findObject x
  getName (ETRint x) = getName x
  isA (ETRint x) = isA x
  isFolder (ETRint x) = isFolder x
  isEqual (ETRint x) = isEqual x
  isSortable (ETRint x) = isSortable x
  paint (ETRint x) = paint x
  printObj (ETRint x) = printObj x
  recursiveRemove (ETRint x) = recursiveRemove x
  saveAs (ETRint x) = saveAs x
  useCurrentStyle (ETRint x) = useCurrentStyle x
  write (ETRint x) = write x
instance ITQObject (Exist TRint) where

instance IDeletable (Exist TRint) where
  delete (ETRint x) = delete x


newTRint :: String -> [Int] -> [String] -> IO TRint
newTRint = xform2 c_trint_newtrint





instance FPtr (Exist TRint) where
  type Raw (Exist TRint) = RawTRint
  get_fptr (ETRint obj) = castForeignPtr (get_fptr obj)
  cast_fptr_to_obj fptr = ETRint (cast_fptr_to_obj (fptr :: ForeignPtr RawTRint) :: TRint)