{-# LANGUAGE FlexibleContexts, FlexibleInstances, ForeignFunctionInterface, GeneralizedNewtypeDeriving, MonoLocalBinds, MultiParamTypeClasses, ScopedTypeVariables, TypeSynonymInstances, UndecidableInstances #-}
---------- GENERATED FILE, EDITS WILL BE LOST ----------

module Graphics.UI.Qtah.Generated.Core.QSizeF (
  QSizeFValue (..),
  QSizeFConstPtr (..),
  boundedTo,
  expandedTo,
  height,
  isEmpty,
  isNull,
  isValid,
  scaled,
  toSize,
  transposed,
  width,
  eQ,
  nE,
  QSizeFPtr (..),
  setHeight,
  scale,
  transpose,
  setWidth,
  aDDA,
  sUBA,
  mULA,
  dIVA,
  aSSIGN,
  QSizeFConst (..),
  castQSizeFToConst,
  QSizeF (..),
  castQSizeFToNonconst,
  newNull,
  new,
  newWithSize,
  newCopy,
  QSizeFSuper (..),
  QSizeFSuperConst (..),
  ) where

import Control.Monad ((>=>))
import qualified Foreign as HoppyF
import qualified Foreign.C as HoppyFC
import qualified Foreign.Hoppy.Runtime as HoppyFHR
import qualified Graphics.UI.Qtah.Core.HSize as HSize
import qualified Graphics.UI.Qtah.Generated.Core.QSize as M50
import qualified Graphics.UI.Qtah.Generated.Core.Types as M68
import Prelude (($), (.), (/=), (=<<), (==), (>>))
import qualified Prelude as HoppyP

foreign import ccall "genpop__QSizeF_newNull" newNull' ::  HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_new" new' ::  HoppyFC.CDouble -> HoppyFC.CDouble -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_newWithSize" newWithSize' ::  HoppyF.Ptr M50.QSizeConst -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_newCopy" newCopy' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_boundedTo" boundedTo' ::  HoppyF.Ptr QSizeFConst -> HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeFConst)
foreign import ccall "genpop__QSizeF_expandedTo" expandedTo' ::  HoppyF.Ptr QSizeFConst -> HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeFConst)
foreign import ccall "genpop__QSizeF_height" height' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFC.CDouble
foreign import ccall "genpop__QSizeF_setHeight" setHeight' ::  HoppyF.Ptr QSizeF -> HoppyFC.CDouble -> HoppyP.IO ()
foreign import ccall "genpop__QSizeF_isEmpty" isEmpty' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QSizeF_isNull" isNull' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QSizeF_isValid" isValid' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QSizeF_scale" scale' ::  HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst -> HoppyFC.CInt -> HoppyP.IO ()
foreign import ccall "genpop__QSizeF_scaled" scaled' ::  HoppyF.Ptr QSizeFConst -> HoppyF.Ptr QSizeFConst -> HoppyFC.CInt -> HoppyP.IO (HoppyF.Ptr QSizeFConst)
foreign import ccall "genpop__QSizeF_toSize" toSize' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr M50.QSizeConst)
foreign import ccall "genpop__QSizeF_transpose" transpose' ::  HoppyF.Ptr QSizeF -> HoppyP.IO ()
foreign import ccall "genpop__QSizeF_transposed" transposed' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeFConst)
foreign import ccall "genpop__QSizeF_width" width' ::  HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFC.CDouble
foreign import ccall "genpop__QSizeF_setWidth" setWidth' ::  HoppyF.Ptr QSizeF -> HoppyFC.CDouble -> HoppyP.IO ()
foreign import ccall "genpop__QSizeF_ADDA" aDDA' ::  HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_SUBA" sUBA' ::  HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeFConst)
foreign import ccall "genpop__QSizeF_MULA" mULA' ::  HoppyF.Ptr QSizeF -> HoppyFC.CDouble -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_DIVA" dIVA' ::  HoppyF.Ptr QSizeF -> HoppyFC.CDouble -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "genpop__QSizeF_EQ" eQ' ::  HoppyF.Ptr QSizeFConst -> HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QSizeF_NE" nE' ::  HoppyF.Ptr QSizeFConst -> HoppyF.Ptr QSizeFConst -> HoppyP.IO HoppyFHR.CBool
foreign import ccall "genpop__QSizeF_ASSIGN" aSSIGN' ::  HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst -> HoppyP.IO (HoppyF.Ptr QSizeF)
foreign import ccall "gendel__QSizeF" delete'QSizeF :: HoppyF.Ptr QSizeFConst -> HoppyP.IO ()
foreign import ccall "&gendel__QSizeF" deletePtr'QSizeF :: HoppyF.FunPtr (HoppyF.Ptr QSizeFConst -> HoppyP.IO ())

class QSizeFValue a where
  withQSizeFPtr :: a -> (QSizeFConst -> HoppyP.IO b) -> HoppyP.IO b

instance {-# OVERLAPPABLE #-} QSizeFConstPtr a => QSizeFValue a where
  withQSizeFPtr = HoppyP.flip ($) . toQSizeFConst

class (HoppyFHR.CppPtr this) => QSizeFConstPtr this where
  toQSizeFConst :: this -> QSizeFConst

boundedTo :: (QSizeFValue arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QSizeF
boundedTo arg'1 arg'2 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . QSizeFConst) =<<
  (boundedTo' arg'1' arg'2')

expandedTo :: (QSizeFValue arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QSizeF
expandedTo arg'1 arg'2 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . QSizeFConst) =<<
  (expandedTo' arg'1' arg'2')

height :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Double
height arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap HoppyP.realToFrac
  (height' arg'1')

isEmpty :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isEmpty arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isEmpty' arg'1')

isNull :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isNull arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isNull' arg'1')

isValid :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Bool
isValid arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap (/= 0)
  (isValid' arg'1')

scaled :: (QSizeFValue arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> M68.QtAspectRatioMode -> HoppyP.IO QSizeF
scaled arg'1 arg'2 arg'3 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  let arg'3' = HoppyFHR.coerceIntegral $ HoppyP.fromEnum arg'3 in
  (HoppyFHR.decodeAndDelete . QSizeFConst) =<<
  (scaled' arg'1' arg'2' arg'3')

toSize :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HSize.HSize
toSize arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . M50.QSizeConst) =<<
  (toSize' arg'1')

transposed :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO QSizeF
transposed arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  (HoppyFHR.decodeAndDelete . QSizeFConst) =<<
  (transposed' arg'1')

width :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO HoppyP.Double
width arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap HoppyP.realToFrac
  (width' arg'1')

eQ :: (QSizeFValue arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
eQ arg'1 arg'2 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (eQ' arg'1' arg'2')

nE :: (QSizeFValue arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
nE arg'1 arg'2 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap (/= 0)
  (nE' arg'1' arg'2')

class (QSizeFConstPtr this) => QSizeFPtr this where
  toQSizeF :: this -> QSizeF

setHeight :: (QSizeFPtr arg'1) => arg'1 -> HoppyP.Double -> HoppyP.IO ()
setHeight arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  let arg'2' = HoppyP.realToFrac arg'2 in
  (setHeight' arg'1' arg'2')

scale :: (QSizeFPtr arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> M68.QtAspectRatioMode -> HoppyP.IO ()
scale arg'1 arg'2 arg'3 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  let arg'3' = HoppyFHR.coerceIntegral $ HoppyP.fromEnum arg'3 in
  (scale' arg'1' arg'2' arg'3')

transpose :: (QSizeFPtr arg'1) => arg'1 -> HoppyP.IO ()
transpose arg'1 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  (transpose' arg'1')

setWidth :: (QSizeFPtr arg'1) => arg'1 -> HoppyP.Double -> HoppyP.IO ()
setWidth arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  let arg'2' = HoppyP.realToFrac arg'2 in
  (setWidth' arg'1' arg'2')

aDDA :: (QSizeFPtr arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QSizeF
aDDA arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap QSizeF
  (aDDA' arg'1' arg'2')

sUBA :: (QSizeFPtr arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QSizeF
sUBA arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  (HoppyFHR.decodeAndDelete . QSizeFConst) =<<
  (sUBA' arg'1' arg'2')

mULA :: (QSizeFPtr arg'1) => arg'1 -> HoppyP.Double -> HoppyP.IO QSizeF
mULA arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  let arg'2' = HoppyP.realToFrac arg'2 in
  HoppyP.fmap QSizeF
  (mULA' arg'1' arg'2')

dIVA :: (QSizeFPtr arg'1) => arg'1 -> HoppyP.Double -> HoppyP.IO QSizeF
dIVA arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  let arg'2' = HoppyP.realToFrac arg'2 in
  HoppyP.fmap QSizeF
  (dIVA' arg'1' arg'2')

aSSIGN :: (QSizeFPtr arg'1, QSizeFValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO QSizeF
aSSIGN arg'1 arg'2 =
  HoppyFHR.withCppPtr (toQSizeF arg'1) $ \arg'1' ->
  withQSizeFPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
  HoppyP.fmap QSizeF
  (aSSIGN' arg'1' arg'2')

data QSizeFConst =
    QSizeFConst (HoppyF.Ptr QSizeFConst)
  | QSizeFConstGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QSizeFConst)
  deriving (HoppyP.Show)

instance HoppyP.Eq QSizeFConst where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QSizeFConst where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQSizeFToConst :: QSizeF -> QSizeFConst
castQSizeFToConst (QSizeF ptr') = QSizeFConst $ HoppyF.castPtr ptr'
castQSizeFToConst (QSizeFGc fptr' ptr') = QSizeFConstGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QSizeFConst where
  nullptr = QSizeFConst HoppyF.nullPtr

  withCppPtr (QSizeFConst ptr') f' = f' ptr'
  withCppPtr (QSizeFConstGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'

  toPtr (QSizeFConst ptr') = ptr'
  toPtr (QSizeFConstGc _ ptr') = ptr'

  touchCppPtr (QSizeFConst _) = HoppyP.return ()
  touchCppPtr (QSizeFConstGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QSizeFConst where
  delete (QSizeFConst ptr') = delete'QSizeF ptr'
  delete (QSizeFConstGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QSizeFConst", " object."]

  toGc this'@(QSizeFConst ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QSizeFConstGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QSizeF :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QSizeFConstGc {}) = HoppyP.return this'

instance HoppyFHR.Copyable QSizeFConst QSizeF where copy = newCopy

instance QSizeFConstPtr QSizeFConst where
  toQSizeFConst = HoppyP.id

data QSizeF =
    QSizeF (HoppyF.Ptr QSizeF)
  | QSizeFGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr QSizeF)
  deriving (HoppyP.Show)

instance HoppyP.Eq QSizeF where
  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y

instance HoppyP.Ord QSizeF where
  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)

castQSizeFToNonconst :: QSizeFConst -> QSizeF
castQSizeFToNonconst (QSizeFConst ptr') = QSizeF $ HoppyF.castPtr ptr'
castQSizeFToNonconst (QSizeFConstGc fptr' ptr') = QSizeFGc fptr' $ HoppyF.castPtr ptr'

instance HoppyFHR.CppPtr QSizeF where
  nullptr = QSizeF HoppyF.nullPtr

  withCppPtr (QSizeF ptr') f' = f' ptr'
  withCppPtr (QSizeFGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'

  toPtr (QSizeF ptr') = ptr'
  toPtr (QSizeFGc _ ptr') = ptr'

  touchCppPtr (QSizeF _) = HoppyP.return ()
  touchCppPtr (QSizeFGc fptr' _) = HoppyF.touchForeignPtr fptr'

instance HoppyFHR.Deletable QSizeF where
  delete (QSizeF ptr') = delete'QSizeF $ (HoppyF.castPtr ptr' :: HoppyF.Ptr QSizeFConst)
  delete (QSizeFGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "QSizeF", " object."]

  toGc this'@(QSizeF ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip QSizeFGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'QSizeF :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
  toGc this'@(QSizeFGc {}) = HoppyP.return this'

instance HoppyFHR.Copyable QSizeF QSizeF where copy = newCopy

instance QSizeFConstPtr QSizeF where
  toQSizeFConst (QSizeF ptr') = QSizeFConst $ (HoppyF.castPtr :: HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst) ptr'
  toQSizeFConst (QSizeFGc fptr' ptr') = QSizeFConstGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr QSizeF -> HoppyF.Ptr QSizeFConst) ptr'

instance QSizeFPtr QSizeF where
  toQSizeF = HoppyP.id

newNull ::  HoppyP.IO QSizeF
newNull =
  HoppyP.fmap QSizeF
  (newNull')

new ::  HoppyP.Double -> HoppyP.Double -> HoppyP.IO QSizeF
new arg'1 arg'2 =
  let arg'1' = HoppyP.realToFrac arg'1 in
  let arg'2' = HoppyP.realToFrac arg'2 in
  HoppyP.fmap QSizeF
  (new' arg'1' arg'2')

newWithSize :: (M50.QSizeValue arg'1) => arg'1 -> HoppyP.IO QSizeF
newWithSize arg'1 =
  M50.withQSizePtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QSizeF
  (newWithSize' arg'1')

newCopy :: (QSizeFValue arg'1) => arg'1 -> HoppyP.IO QSizeF
newCopy arg'1 =
  withQSizeFPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
  HoppyP.fmap QSizeF
  (newCopy' arg'1')

class QSizeFSuper a where
  downToQSizeF :: a -> QSizeF


class QSizeFSuperConst a where
  downToQSizeFConst :: a -> QSizeFConst


instance HoppyFHR.Assignable (HoppyF.Ptr (HoppyF.Ptr QSizeF)) QSizeF where
  assign ptr' value' = HoppyF.poke ptr' $ HoppyFHR.toPtr value'

instance QSizeFValue a => HoppyFHR.Assignable QSizeF a where
  assign x' y' = aSSIGN x' y' >> HoppyP.return ()

instance HoppyFHR.Decodable (HoppyF.Ptr (HoppyF.Ptr QSizeF)) QSizeF where
  decode = HoppyP.fmap QSizeF . HoppyF.peek

instance HoppyFHR.Decodable QSizeF (QSizeF) where
  decode = HoppyFHR.decode . toQSizeFConst

instance HoppyFHR.Decodable QSizeFConst (QSizeF) where
  decode =
    HoppyFHR.copy >=> HoppyFHR.toGc