1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) Widget RadioAction
--
-- Author : Duncan Coutts
--
-- Created: 6 April 2005
--
-- Copyright (C) 2005 Duncan Coutts
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- TODO
-- I don't know what the elemnt type of the group GSList is for
-- radioActionSetGroup / radioActionGetGroup
--
-- Also, the signals clash with those from other modules
--
-- |
-- Maintainer : gtk2hs-users@lists.sourceforge.net
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
-- An action of which only one in a group can be active
--
-- * Module available since Gtk+ version 2.4
--
module Graphics.UI.Gtk.ActionMenuToolbar.RadioAction (
-- * Detail
--
-- | A 'RadioAction' is similar to 'RadioMenuItem'. A number of radio actions
-- can be linked together so that only one may be active at any one time.
-- * Class Hierarchy
-- |
-- @
-- | 'GObject'
-- | +----'Action'
-- | +----'ToggleAction'
-- | +----RadioAction
-- @
#if GTK_CHECK_VERSION(2,4,0)
-- * Types
RadioAction,
RadioActionClass,
castToRadioAction, gTypeRadioAction,
toRadioAction,
-- * Constructors
radioActionNew,
-- * Methods
radioActionGetGroup,
radioActionSetGroup,
radioActionGetCurrentValue,
-- * Attributes
radioActionValueAttr,
radioActionGroup,
#if GTK_CHECK_VERSION(2,10,0)
radioActionCurrentValue,
#endif
-- * Signals
radioActionChanged,
#ifndef DISABLE_DEPRECATED
-- * Deprecated
onRadioActionChanged,
afterRadioActionChanged,
#endif
#endif
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.GList
import System.Glib.Attributes
import System.Glib.Properties
import System.Glib.GObject (constructNewGObject, makeNewGObject)
{#import Graphics.UI.Gtk.Types#}
{#import Graphics.UI.Gtk.Signals#}
import Graphics.UI.Gtk.General.StockItems
{# context lib="gtk" prefix="gtk" #}
#if GTK_CHECK_VERSION(2,4,0)
--------------------
-- Constructors
-- | Creates a new 'RadioAction' object. To add the action to a 'ActionGroup'
-- and set the accelerator for the action, call
-- 'Graphics.UI.Gtk.ActionMenuToolbar.ActionGroup.actionGroupAddActionWithAccel'.
--
radioActionNew ::
String -- ^ @name@ - A unique name for the action
-> String -- ^ @label@ - The label displayed in menu items and on
-- buttons
-> Maybe String -- ^ @tooltip@ - A tooltip for this action
-> Maybe StockId -- ^ @stockId@ - The stock icon to display in widgets
-- representing this action
-> Int -- ^ @value@ - The value which 'radioActionGetCurrentValue'
-- should return if this action is selected.
-> IO RadioAction
radioActionNew name label tooltip stockId value =
constructNewGObject mkRadioAction $
maybeWith withUTFString stockId $ \stockIdPtr ->
maybeWith withUTFString tooltip $ \tooltipPtr ->
withUTFString label $ \labelPtr ->
withUTFString name $ \namePtr ->
{# call gtk_radio_action_new #}
namePtr
labelPtr
tooltipPtr
stockIdPtr
(fromIntegral value)
--------------------
-- Methods
-- | Returns the list representing the radio group for this object
--
radioActionGetGroup :: RadioActionClass self => self
-> IO [RadioAction] -- ^ returns the members of the radio group
radioActionGetGroup self =
{# call unsafe gtk_radio_action_get_group #}
(toRadioAction self)
>>= readGSList
>>= mapM (\elemPtr -> makeNewGObject mkRadioAction (return elemPtr))
-- | Sets the radio group for the radio action object.
--
radioActionSetGroup :: (RadioActionClass self, RadioActionClass groupMember) => self
-> groupMember -- ^ @groupMember@ - an existing member of the radio group
-> IO ()
radioActionSetGroup self group = do
groupPtr <- {# call unsafe gtk_radio_action_get_group #} (toRadioAction group)
{# call gtk_radio_action_set_group #}
(toRadioAction self)
groupPtr
-- | Obtains the value property of the currently active member of the group to
-- which the action belongs.
--
radioActionGetCurrentValue :: RadioActionClass self => self
-> IO Int -- ^ returns the value of the currently active group member
radioActionGetCurrentValue self =
liftM fromIntegral $
{# call gtk_radio_action_get_current_value #}
(toRadioAction self)
--------------------
-- Attributes
-- %hash d:1bcf
-- | The value is an arbitrary integer which can be used as a convenient way
-- to determine which action in the group is currently active in an ::activate
-- or ::changed signal handler. See 'radioActionGetCurrentValue' and
-- 'RadioActionEntry' for convenient ways to get and set
-- this property.
--
-- Default value: 0
--
radioActionValueAttr :: RadioActionClass self => Attr self Int
radioActionValueAttr = newAttrFromIntProperty "value"
-- %hash c:a380
-- | Sets a new group for a radio action.
--
radioActionGroup :: RadioActionClass self => ReadWriteAttr self [RadioAction] RadioAction
radioActionGroup = newAttr
radioActionGetGroup
radioActionSetGroup
#if GTK_CHECK_VERSION(2,10,0)
-- %hash c:4cec d:1710
-- | The value property of the currently active member of the group to which
-- this action belongs.
--
-- Default value: 0
--
-- * Available since Gtk+ version 2.10
--
radioActionCurrentValue :: RadioActionClass self => Attr self Int
radioActionCurrentValue = newAttrFromIntProperty "current-value"
#endif
-- | The 'radioActionChanged' signal is emitted on every member of a radio group when the
-- active member is changed. The signal gets emitted after the 'actionActivated' signals for the
-- previous and current active members.
--
radioActionChanged :: RadioActionClass self => Signal self (RadioAction -> IO ())
radioActionChanged = Signal (connect_OBJECT__NONE "changed")
--------------------
-- Deprecated Signals
#ifndef DISABLE_DEPRECATED
-- | The changed signal is emitted on every member of a radio group when the
-- active member is changed. The signal gets emitted after the activate
-- signals for the previous and current active members.
--
onRadioActionChanged, afterRadioActionChanged :: RadioActionClass self => self
-> (RadioAction -> IO ())
-> IO (ConnectId self)
onRadioActionChanged = connect_OBJECT__NONE "changed" False
afterRadioActionChanged = connect_OBJECT__NONE "changed" True
#endif
#endif
|