{-# LINE 1 "System/Glib/StoreValue.hsc" #-}
module System.Glib.StoreValue (
TMType(..),
GenericValue(..),
valueSetGenericValue,
valueGetGenericValue,
) where
import Control.Monad (liftM)
import Data.Text (Text)
import Control.Exception (throw, AssertionFailed(..))
import System.Glib.FFI
import System.Glib.GValue (GValue, valueInit, valueGetType)
import System.Glib.GValueTypes
import qualified System.Glib.GTypeConstants as GType
import System.Glib.Types (GObject)
data GenericValue = GVuint Word
| GVint Int
| GVboolean Bool
| GVenum Int
| GVflags Int
| GVfloat Float
| GVdouble Double
| GVstring (Maybe Text)
| GVobject GObject
data TMType = TMinvalid
| TMuint
| TMint
| TMboolean
| TMenum
| TMflags
| TMfloat
| TMdouble
| TMstring
| TMobject
instance Enum TMType where
fromEnum TMinvalid = 0
{-# LINE 85 "System/Glib/StoreValue.hsc" #-}
fromEnum TMuint = 28
{-# LINE 86 "System/Glib/StoreValue.hsc" #-}
fromEnum TMint = 24
{-# LINE 87 "System/Glib/StoreValue.hsc" #-}
fromEnum TMboolean = 20
{-# LINE 90 "System/Glib/StoreValue.hsc" #-}
fromEnum TMenum = 48
{-# LINE 91 "System/Glib/StoreValue.hsc" #-}
fromEnum TMflags = 52
{-# LINE 92 "System/Glib/StoreValue.hsc" #-}
fromEnum TMfloat = 56
{-# LINE 94 "System/Glib/StoreValue.hsc" #-}
fromEnum TMdouble = 60
{-# LINE 95 "System/Glib/StoreValue.hsc" #-}
fromEnum TMstring = 64
{-# LINE 96 "System/Glib/StoreValue.hsc" #-}
fromEnum TMobject = 80
{-# LINE 97 "System/Glib/StoreValue.hsc" #-}
toEnum 0 = TMinvalid
{-# LINE 99 "System/Glib/StoreValue.hsc" #-}
toEnum 28 = TMuint
{-# LINE 100 "System/Glib/StoreValue.hsc" #-}
toEnum 24 = TMint
{-# LINE 101 "System/Glib/StoreValue.hsc" #-}
toEnum 20 = TMboolean
{-# LINE 104 "System/Glib/StoreValue.hsc" #-}
toEnum 48 = TMenum
{-# LINE 105 "System/Glib/StoreValue.hsc" #-}
toEnum 52 = TMflags
{-# LINE 106 "System/Glib/StoreValue.hsc" #-}
toEnum 56 = TMfloat
{-# LINE 108 "System/Glib/StoreValue.hsc" #-}
toEnum 60 = TMdouble
{-# LINE 109 "System/Glib/StoreValue.hsc" #-}
toEnum 64 = TMstring
{-# LINE 110 "System/Glib/StoreValue.hsc" #-}
toEnum 80 = TMobject
{-# LINE 111 "System/Glib/StoreValue.hsc" #-}
toEnum _ =
error "StoreValue.toEnum(TMType): no dynamic types allowed."
valueSetGenericValue :: GValue -> GenericValue -> IO ()
valueSetGenericValue gvalue (GVuint x) = do valueInit gvalue GType.uint
valueSetUInt gvalue x
valueSetGenericValue gvalue (GVint x) = do valueInit gvalue GType.int
valueSetInt gvalue x
valueSetGenericValue gvalue (GVboolean x) = do valueInit gvalue GType.bool
valueSetBool gvalue x
valueSetGenericValue gvalue (GVenum x) = do valueInit gvalue GType.enum
valueSetUInt gvalue (fromIntegral x)
valueSetGenericValue gvalue (GVflags x) = do valueInit gvalue GType.flags
valueSetUInt gvalue (fromIntegral x)
valueSetGenericValue gvalue (GVfloat x) = do valueInit gvalue GType.float
valueSetFloat gvalue x
valueSetGenericValue gvalue (GVdouble x) = do valueInit gvalue GType.double
valueSetDouble gvalue x
valueSetGenericValue gvalue (GVstring x) = do valueInit gvalue GType.string
valueSetMaybeString gvalue x
valueSetGenericValue gvalue (GVobject x) = do valueInit gvalue GType.object
valueSetGObject gvalue x
valueGetGenericValue :: GValue -> IO GenericValue
valueGetGenericValue gvalue = do
gtype <- valueGetType gvalue
case (toEnum . fromIntegral) gtype of
TMinvalid -> throw $ AssertionFailed
"StoreValue.valueGetGenericValue: invalid or unavailable value."
TMuint -> liftM GVuint $ valueGetUInt gvalue
TMint -> liftM GVint $ valueGetInt gvalue
TMboolean -> liftM GVboolean $ valueGetBool gvalue
TMenum -> liftM (GVenum . fromIntegral) $ valueGetUInt gvalue
TMflags -> liftM (GVflags . fromIntegral) $ valueGetUInt gvalue
TMfloat -> liftM GVfloat $ valueGetFloat gvalue
TMdouble -> liftM GVdouble $ valueGetDouble gvalue
TMstring -> liftM GVstring $ valueGetMaybeString gvalue
TMobject -> liftM GVobject $ valueGetGObject gvalue