{-# LINE 2 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} -- -*-haskell-*- -- GIMP Toolkit (GTK) Widget ScaleButton -- -- Author : Andy Stewart -- -- Created: 22 Mar 2010 -- -- Copyright (C) 2010 Andy Stewart -- -- 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. -- -- | -- Maintainer : gtk2hs-users@lists.sourceforge.net -- Stability : provisional -- Portability : portable (depends on GHC) -- -- A button which pops up a scale -- -- * Module available since Gtk+ version 2.12 -- module Graphics.UI.Gtk.Buttons.ScaleButton ( -- * Detail -- -- | 'ScaleButton' provides a button which pops up a scale widget. This kind -- of widget is commonly used for volume controls in multimedia applications, -- and Gtk+ provides a 'VolumeButton' subclass that is tailored for this use -- case. -- * Class Hierarchy -- -- | -- @ -- | 'GObject' -- | +----'Object' -- | +----'Widget' -- | +----'Container' -- | +----'Bin' -- | +----'Button' -- | +----ScaleButton -- | +----'VolumeButton' -- @ -- * Types ScaleButton, ScaleButtonClass, castToScaleButton, toScaleButton, -- * Constructors scaleButtonNew, -- * Methods scaleButtonSetIcons, scaleButtonGetPopup, scaleButtonGetPlusButton, scaleButtonGetMinusButton, -- * Attributes scaleButtonValue, scaleButtonSize, scaleButtonAdjustment, scaleButtonIcons, -- * Signals scaleButtonPopdown, scaleButtonPopup, scaleButtonValueChanged, ) where import Control.Monad (liftM) import System.Glib.FFI import System.Glib.UTFString import System.Glib.Attributes import System.Glib.Properties import Graphics.UI.Gtk.Abstract.Object (makeNewObject) import Graphics.UI.Gtk.General.Structs (IconSize(..)) import Graphics.UI.Gtk.Types {-# LINE 93 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} import Graphics.UI.Gtk.Signals {-# LINE 94 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} {-# LINE 96 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} -------------------- -- Interfaces -- instance OrientableClass ScaleButton -------------------- -- Constructors -- | Creates a 'ScaleButton', with a range between @min@ and @max@, with a -- stepping of @step@. -- scaleButtonNew :: IconSize -- ^ @size@ - a stock icon size -> Double -- ^ @min@ - the minimum value of the scale (usually 0) -> Double -- ^ @max@ - the maximum value of the scale (usually 100) -> Double -- ^ @step@ - the stepping of value when a scroll-wheel event, or -- up\/down arrow event occurs (usually 2) -> [String] -- ^ @icons@ -> IO ScaleButton scaleButtonNew size min max step icons = makeNewObject mkScaleButton $ liftM (castPtr :: Ptr Widget -> Ptr ScaleButton) $ withUTFStringArray0 icons $ \iconsPtr -> gtk_scale_button_new {-# LINE 122 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} ((fromIntegral . fromEnum) size) (realToFrac min) (realToFrac max) (realToFrac step) iconsPtr -------------------- -- Methods -- | Sets the icons to be used by the scale button. For details, see the "icons" property. scaleButtonSetIcons :: ScaleButtonClass self => self -> [String] -- ^ @icons@ -> IO () scaleButtonSetIcons self icons = withUTFStringArray0 icons $ \iconsPtr -> (\(ScaleButton arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gtk_scale_button_set_icons argPtr1 arg2) {-# LINE 138 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} (toScaleButton self) iconsPtr -- | Retrieves the popup of the 'ScaleButton'. -- -- * Available since Gtk+ version 2.14 -- scaleButtonGetPopup :: ScaleButtonClass self => self -> IO Widget -- ^ returns the popup of the 'ScaleButton' scaleButtonGetPopup self = makeNewObject mkWidget $ (\(ScaleButton arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_scale_button_get_popup argPtr1) {-# LINE 151 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} (toScaleButton self) -- | Retrieves the plus button of the 'ScaleButton'. -- -- * Available since Gtk+ version 2.14 -- scaleButtonGetPlusButton :: ScaleButtonClass self => self -> IO Widget -- ^ returns the plus button of the 'ScaleButton'. scaleButtonGetPlusButton self = makeNewObject mkWidget $ (\(ScaleButton arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_scale_button_get_plus_button argPtr1) {-# LINE 162 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} (toScaleButton self) -- | Retrieves the minus button of the 'ScaleButton'. -- -- * Available since Gtk+ version 2.14 -- scaleButtonGetMinusButton :: ScaleButtonClass self => self -> IO Widget -- ^ returns the minus button of the 'ScaleButton'. scaleButtonGetMinusButton self = makeNewObject mkWidget $ (\(ScaleButton arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_scale_button_get_minus_button argPtr1) {-# LINE 173 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} (toScaleButton self) -------------------- -- Attributes -- | The value of the scale. -- -- Default value: 0 scaleButtonValue :: ScaleButtonClass self => Attr self Double scaleButtonValue = newAttrFromDoubleProperty "value" -- | The icon size. -- -- Default value: ''IconSizeSmallToolbar'' scaleButtonSize :: ScaleButtonClass self => Attr self IconSize scaleButtonSize = newAttrFromEnumProperty "size" gtk_icon_size_get_type {-# LINE 191 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} -- | The 'Adjustment' that contains the current value of this scale button object. scaleButtonAdjustment :: ScaleButtonClass self => Attr self Adjustment scaleButtonAdjustment = newAttrFromObjectProperty "adjustment" gtk_adjustment_get_type {-# LINE 196 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} -- | The names of the icons to be used by the scale button. The first item in the array will be used in -- the button when the current value is the lowest value, the second item for the highest value. All -- the subsequent icons will be used for all the other values, spread evenly over the range of values. -- -- If there's only one icon name in the icons array, it will be used for all the values. If only two -- icon names are in the icons array, the first one will be used for the bottom 50% of the scale, and -- the second one for the top 50%. -- -- It is recommended to use at least 3 icons so that the 'ScaleButton' reflects the current value of -- the scale better for the users. -- -- Since 2.12 scaleButtonIcons :: ScaleButtonClass self => ReadWriteAttr self [String] (Maybe [String]) scaleButtonIcons = newAttr (objectGetPropertyBoxedOpaque (peekUTFStringArray0 . castPtr) gtype "search-path") (objectSetPropertyBoxedOpaque (\dirs f -> maybeWith withUTFStringArray0 dirs (f . castPtr)) gtype "search-path") where gtype = g_strv_get_type {-# LINE 214 "./Graphics/UI/Gtk/Buttons/ScaleButton.chs" #-} -------------------- -- Signals -- | The 'scaleButtonValueChanged' signal is emitted when the value field has changed. -- scaleButtonValueChanged :: ScaleButtonClass self => Signal self (Double -> IO ()) scaleButtonValueChanged = Signal (connect_DOUBLE__NONE "value_changed") -- | The 'popup' signal is a keybinding signal which gets emitted to popup the scale widget. -- -- The default bindings for this signal are Space, Enter and Return. scaleButtonPopup :: ScaleButtonClass self => Signal self (IO ()) scaleButtonPopup = Signal (connect_NONE__NONE "popup") -- | The 'popdown' signal is a keybinding signal which gets emitted to popdown the scale widget. -- -- The default binding for this signal is Escape. scaleButtonPopdown :: ScaleButtonClass self => Signal self (IO ()) scaleButtonPopdown = Signal (connect_NONE__NONE "popdown") foreign import ccall safe "gtk_scale_button_new" gtk_scale_button_new :: (CInt -> (CDouble -> (CDouble -> (CDouble -> ((Ptr (Ptr CChar)) -> (IO (Ptr Widget))))))) foreign import ccall safe "gtk_scale_button_set_icons" gtk_scale_button_set_icons :: ((Ptr ScaleButton) -> ((Ptr (Ptr CChar)) -> (IO ()))) foreign import ccall safe "gtk_scale_button_get_popup" gtk_scale_button_get_popup :: ((Ptr ScaleButton) -> (IO (Ptr Widget))) foreign import ccall safe "gtk_scale_button_get_plus_button" gtk_scale_button_get_plus_button :: ((Ptr ScaleButton) -> (IO (Ptr Widget))) foreign import ccall safe "gtk_scale_button_get_minus_button" gtk_scale_button_get_minus_button :: ((Ptr ScaleButton) -> (IO (Ptr Widget))) foreign import ccall unsafe "gtk_icon_size_get_type" gtk_icon_size_get_type :: CUInt foreign import ccall unsafe "gtk_adjustment_get_type" gtk_adjustment_get_type :: CUInt foreign import ccall safe "g_strv_get_type" g_strv_get_type :: CUInt