{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) The GActionMap interface is implemented by 'GI.Gio.Interfaces.ActionGroup.ActionGroup' implementations that operate by containing a number of named 'GI.Gio.Interfaces.Action.Action' instances, such as 'GI.Gio.Objects.SimpleActionGroup.SimpleActionGroup'. One useful application of this interface is to map the names of actions from various action groups to unique, prefixed names (e.g. by prepending \"app.\" or \"win.\"). This is the motivation for the \'Map\' part of the interface name. /Since: 2.32/ -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gio.Interfaces.ActionMap ( -- * Exported types ActionMap(..) , noActionMap , IsActionMap , toActionMap , -- * Methods -- ** addAction #method:addAction# #if ENABLE_OVERLOADING ActionMapAddActionMethodInfo , #endif actionMapAddAction , -- ** addActionEntries #method:addActionEntries# #if ENABLE_OVERLOADING ActionMapAddActionEntriesMethodInfo , #endif actionMapAddActionEntries , -- ** lookupAction #method:lookupAction# #if ENABLE_OVERLOADING ActionMapLookupActionMethodInfo , #endif actionMapLookupAction , -- ** removeAction #method:removeAction# #if ENABLE_OVERLOADING ActionMapRemoveActionMethodInfo , #endif actionMapRemoveAction , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import {-# SOURCE #-} qualified GI.Gio.Interfaces.Action as Gio.Action import {-# SOURCE #-} qualified GI.Gio.Structs.ActionEntry as Gio.ActionEntry -- interface ActionMap -- | Memory-managed wrapper type. newtype ActionMap = ActionMap (ManagedPtr ActionMap) -- | A convenience alias for `Nothing` :: `Maybe` `ActionMap`. noActionMap :: Maybe ActionMap noActionMap = Nothing #if ENABLE_OVERLOADING type instance O.SignalList ActionMap = ActionMapSignalList type ActionMapSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif foreign import ccall "g_action_map_get_type" c_g_action_map_get_type :: IO GType instance GObject ActionMap where gobjectType = c_g_action_map_get_type -- | Type class for types which can be safely cast to `ActionMap`, for instance with `toActionMap`. class (GObject o, O.IsDescendantOf ActionMap o) => IsActionMap o instance (GObject o, O.IsDescendantOf ActionMap o) => IsActionMap o instance O.HasParentTypes ActionMap type instance O.ParentTypes ActionMap = '[GObject.Object.Object] -- | Cast to `ActionMap`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toActionMap :: (MonadIO m, IsActionMap o) => o -> m ActionMap toActionMap = liftIO . unsafeCastTo ActionMap #if ENABLE_OVERLOADING instance O.HasAttributeList ActionMap type instance O.AttributeList ActionMap = ActionMapAttributeList type ActionMapAttributeList = ('[ ] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type family ResolveActionMapMethod (t :: Symbol) (o :: *) :: * where ResolveActionMapMethod "addAction" o = ActionMapAddActionMethodInfo ResolveActionMapMethod "addActionEntries" o = ActionMapAddActionEntriesMethodInfo ResolveActionMapMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveActionMapMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveActionMapMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveActionMapMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveActionMapMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveActionMapMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveActionMapMethod "lookupAction" o = ActionMapLookupActionMethodInfo ResolveActionMapMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveActionMapMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveActionMapMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolveActionMapMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveActionMapMethod "removeAction" o = ActionMapRemoveActionMethodInfo ResolveActionMapMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveActionMapMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveActionMapMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveActionMapMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveActionMapMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolveActionMapMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveActionMapMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveActionMapMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveActionMapMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveActionMapMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveActionMapMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveActionMapMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveActionMapMethod t ActionMap, O.MethodInfo info ActionMap p) => OL.IsLabel t (ActionMap -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif -- method ActionMap::add_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action", argType = TInterface (Name {namespace = "Gio", name = "Action"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GAction", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_add_action" g_action_map_add_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) Ptr Gio.Action.Action -> -- action : TInterface (Name {namespace = "Gio", name = "Action"}) IO () {- | Adds an action to the /@actionMap@/. If the action map already contains an action with the same name as /@action@/ then the old action is dropped from the action map. The action map takes its own reference on /@action@/. /Since: 2.32/ -} actionMapAddAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a, Gio.Action.IsAction b) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> b {- ^ /@action@/: a 'GI.Gio.Interfaces.Action.Action' -} -> m () actionMapAddAction actionMap action = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap action' <- unsafeManagedPtrCastPtr action g_action_map_add_action actionMap' action' touchManagedPtr actionMap touchManagedPtr action return () #if ENABLE_OVERLOADING data ActionMapAddActionMethodInfo instance (signature ~ (b -> m ()), MonadIO m, IsActionMap a, Gio.Action.IsAction b) => O.MethodInfo ActionMapAddActionMethodInfo a signature where overloadedMethod _ = actionMapAddAction #endif -- method ActionMap::add_action_entries -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "entries", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "Gio", name = "ActionEntry"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to\n the first item in an array of #GActionEntry structs", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_entries", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the length of @entries, or -1 if @entries is %NULL-terminated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the user data for signal connections", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "n_entries", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the length of @entries, or -1 if @entries is %NULL-terminated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_add_action_entries" g_action_map_add_action_entries :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) Ptr Gio.ActionEntry.ActionEntry -> -- entries : TCArray False (-1) 2 (TInterface (Name {namespace = "Gio", name = "ActionEntry"})) Int32 -> -- n_entries : TBasicType TInt Ptr () -> -- user_data : TBasicType TPtr IO () {- | A convenience function for creating multiple 'GI.Gio.Objects.SimpleAction.SimpleAction' instances and adding them to a 'GI.Gio.Interfaces.ActionMap.ActionMap'. Each action is constructed as per one 'GI.Gio.Structs.ActionEntry.ActionEntry'. === /C code/ > >static void >activate_quit (GSimpleAction *simple, > GVariant *parameter, > gpointer user_data) >{ > exit (0); >} > >static void >activate_print_string (GSimpleAction *simple, > GVariant *parameter, > gpointer user_data) >{ > g_print ("%s\n", g_variant_get_string (parameter, NULL)); >} > >static GActionGroup * >create_action_group (void) >{ > const GActionEntry entries[] = { > { "quit", activate_quit }, > { "print-string", activate_print_string, "s" } > }; > GSimpleActionGroup *group; > > group = g_simple_action_group_new (); > g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), NULL); > > return G_ACTION_GROUP (group); >} /Since: 2.32/ -} actionMapAddActionEntries :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> [Gio.ActionEntry.ActionEntry] {- ^ /@entries@/: a pointer to the first item in an array of 'GI.Gio.Structs.ActionEntry.ActionEntry' structs -} -> Ptr () {- ^ /@userData@/: the user data for signal connections -} -> m () actionMapAddActionEntries actionMap entries userData = liftIO $ do let nEntries = fromIntegral $ length entries actionMap' <- unsafeManagedPtrCastPtr actionMap entries' <- mapM unsafeManagedPtrGetPtr entries entries'' <- packBlockArray 64 entries' g_action_map_add_action_entries actionMap' entries'' nEntries userData touchManagedPtr actionMap mapM_ touchManagedPtr entries freeMem entries'' return () #if ENABLE_OVERLOADING data ActionMapAddActionEntriesMethodInfo instance (signature ~ ([Gio.ActionEntry.ActionEntry] -> Ptr () -> m ()), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapAddActionEntriesMethodInfo a signature where overloadedMethod _ = actionMapAddActionEntries #endif -- method ActionMap::lookup_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of an action", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "Action"})) -- throws : False -- Skip return : False foreign import ccall "g_action_map_lookup_action" g_action_map_lookup_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) CString -> -- action_name : TBasicType TUTF8 IO (Ptr Gio.Action.Action) {- | Looks up the action with the name /@actionName@/ in /@actionMap@/. If no such action exists, returns 'Nothing'. /Since: 2.32/ -} actionMapLookupAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> T.Text {- ^ /@actionName@/: the name of an action -} -> m Gio.Action.Action {- ^ __Returns:__ a 'GI.Gio.Interfaces.Action.Action', or 'Nothing' -} actionMapLookupAction actionMap actionName = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap actionName' <- textToCString actionName result <- g_action_map_lookup_action actionMap' actionName' checkUnexpectedReturnNULL "actionMapLookupAction" result result' <- (newObject Gio.Action.Action) result touchManagedPtr actionMap freeMem actionName' return result' #if ENABLE_OVERLOADING data ActionMapLookupActionMethodInfo instance (signature ~ (T.Text -> m Gio.Action.Action), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapLookupActionMethodInfo a signature where overloadedMethod _ = actionMapLookupAction #endif -- method ActionMap::remove_action -- method type : OrdinaryMethod -- Args : [Arg {argCName = "action_map", argType = TInterface (Name {namespace = "Gio", name = "ActionMap"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GActionMap", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "action_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the action", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_action_map_remove_action" g_action_map_remove_action :: Ptr ActionMap -> -- action_map : TInterface (Name {namespace = "Gio", name = "ActionMap"}) CString -> -- action_name : TBasicType TUTF8 IO () {- | Removes the named action from the action map. If no action of this name is in the map then nothing happens. /Since: 2.32/ -} actionMapRemoveAction :: (B.CallStack.HasCallStack, MonadIO m, IsActionMap a) => a {- ^ /@actionMap@/: a 'GI.Gio.Interfaces.ActionMap.ActionMap' -} -> T.Text {- ^ /@actionName@/: the name of the action -} -> m () actionMapRemoveAction actionMap actionName = liftIO $ do actionMap' <- unsafeManagedPtrCastPtr actionMap actionName' <- textToCString actionName g_action_map_remove_action actionMap' actionName' touchManagedPtr actionMap freeMem actionName' return () #if ENABLE_OVERLOADING data ActionMapRemoveActionMethodInfo instance (signature ~ (T.Text -> m ()), MonadIO m, IsActionMap a) => O.MethodInfo ActionMapRemoveActionMethodInfo a signature where overloadedMethod _ = actionMapRemoveAction #endif