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 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
|
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) Widget Paned
--
-- Author : Axel Simon
--
-- Created: 15 May 2001
--
-- Copyright (C) 1999-2005 Axel Simon
--
-- 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)
--
-- Base class for widgets with two adjustable panes
--
module Graphics.UI.Gtk.Abstract.Paned (
-- * Detail
--
-- | 'Paned' is the base class for widgets with two panes, arranged either
-- horizontally ('HPaned') or vertically ('VPaned'). Child widgets are added to
-- the panes of the widget with 'panedPack1' and 'panedPack2'. The division
-- beween the two children is set by default from the size requests of the
-- children, but it can be adjusted by the user.
--
-- A paned widget draws a separator between the two child widgets and a
-- small handle that the user can drag to adjust the division. It does not draw
-- any relief around the children or around the separator. (The space in which
-- the separator is called the gutter.) Often, it is useful to put each child
-- inside a 'Frame' with the shadow type set to
-- 'Graphics.UI.Gtk.General.Enums.ShadowIn' so that the gutter appears as a
-- ridge.
--
-- Each child has two options that can be set, @resize@ and @shrink@. If
-- @resize@ is true, then when the 'Paned' is resized, that child will expand
-- or shrink along with the paned widget. If @shrink@ is true, then when that
-- child can be made smaller than its requisition by the user. Setting @shrink@
-- to @False@ allows the application to set a minimum size. If @resize@ is
-- false for both children, then this is treated as if @resize@ is true for
-- both children.
--
-- The application can set the position of the slider as if it were set by
-- the user, by calling 'panedSetPosition'.
-- * Class Hierarchy
-- |
-- @
-- | 'GObject'
-- | +----'Object'
-- | +----'Widget'
-- | +----'Container'
-- | +----Paned
-- | +----'HPaned'
-- | +----'VPaned'
-- @
-- * Types
Paned,
PanedClass,
castToPaned, gTypePaned,
toPaned,
-- * Methods
panedAdd1,
panedAdd2,
panedPack1,
panedPack2,
panedSetPosition,
panedGetPosition,
#if GTK_CHECK_VERSION(2,4,0)
panedGetChild1,
panedGetChild2,
#endif
-- * Attributes
panedPosition,
panedPositionSet,
#if GTK_CHECK_VERSION(2,4,0)
panedMinPosition,
panedMaxPosition,
#endif
-- * Child Attributes
#if GTK_CHECK_VERSION(2,4,0)
panedChildResize,
panedChildShrink,
#endif
-- * Deprecated Signals
#ifndef DISABLE_DEPRECATED
onCycleChildFocus,
afterCycleChildFocus,
onToggleHandleFocus,
afterToggleHandleFocus,
onMoveHandle,
afterMoveHandle,
onCycleHandleFocus,
afterCycleHandleFocus,
onAcceptPosition,
afterAcceptPosition,
onCancelPosition,
afterCancelPosition,
#endif
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.Attributes
import System.Glib.Properties
import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
{#import Graphics.UI.Gtk.Types#}
{#import Graphics.UI.Gtk.Signals#}
import Graphics.UI.Gtk.General.Enums (ScrollType)
import Graphics.UI.Gtk.Abstract.ContainerChildProperties
{# context lib="gtk" prefix="gtk" #}
--------------------
-- Methods
-- | Adds a child to the top or left pane with default parameters. This is
-- equivalent to @'panedPack1' paned child False True@.
--
panedAdd1 :: (PanedClass self, WidgetClass child) => self
-> child -- ^ @child@ - the child to add
-> IO ()
panedAdd1 self child =
{# call paned_add1 #}
(toPaned self)
(toWidget child)
-- | Adds a child to the bottom or right pane with default parameters. This is
-- equivalent to @'panedPack2' paned child True True@.
--
panedAdd2 :: (PanedClass self, WidgetClass child) => self
-> child -- ^ @child@ - the child to add
-> IO ()
panedAdd2 self child =
{# call paned_add2 #}
(toPaned self)
(toWidget child)
-- | Adds a child to the top or left pane.
--
panedPack1 :: (PanedClass self, WidgetClass child) => self
-> child -- ^ @child@ - the child to add
-> Bool -- ^ @resize@ - should this child expand when the paned widget is
-- resized.
-> Bool -- ^ @shrink@ - can this child be made smaller than its requsition.
-> IO ()
panedPack1 self child resize shrink =
{# call paned_pack1 #}
(toPaned self)
(toWidget child)
(fromBool resize)
(fromBool shrink)
-- | Adds a child to the bottom or right pane.
--
panedPack2 :: (PanedClass self, WidgetClass child) => self
-> child -- ^ @child@ - the child to add
-> Bool -- ^ @resize@ - should this child expand when the paned widget is
-- resized.
-> Bool -- ^ @shrink@ - can this child be made smaller than its requsition.
-> IO ()
panedPack2 self child resize shrink =
{# call paned_pack2 #}
(toPaned self)
(toWidget child)
(fromBool resize)
(fromBool shrink)
-- | Sets the position of the divider between the two panes.
--
panedSetPosition :: PanedClass self => self
-> Int -- ^ @position@ - pixel position of divider, a negative value means
-- that the position is unset.
-> IO ()
panedSetPosition self position =
{# call paned_set_position #}
(toPaned self)
(fromIntegral position)
-- | Obtains the position of the divider between the two panes.
--
panedGetPosition :: PanedClass self => self
-> IO Int -- ^ returns position of the divider
panedGetPosition self =
liftM fromIntegral $
{# call unsafe paned_get_position #}
(toPaned self)
#if GTK_CHECK_VERSION(2,4,0)
-- | Obtains the first child of the paned widget.
--
-- * Available since Gtk+ version 2.4
--
panedGetChild1 :: PanedClass self => self
-> IO (Maybe Widget) -- ^ returns first child, or @Nothing@ if it is not set.
panedGetChild1 self =
maybeNull (makeNewObject mkWidget) $
{# call unsafe paned_get_child1 #}
(toPaned self)
-- | Obtains the second child of the paned widget.
--
-- * Available since Gtk+ version 2.4
--
panedGetChild2 :: PanedClass self => self
-> IO (Maybe Widget) -- ^ returns second child, or @Nothing@ if it is not
-- set.
panedGetChild2 self =
maybeNull (makeNewObject mkWidget) $
{# call unsafe paned_get_child2 #}
(toPaned self)
#endif
--------------------
-- Attributes
-- | Position of paned separator in pixels (0 means all the way to the
-- left\/top).
--
-- Allowed values: >= 0
--
-- Default value: 0
--
panedPosition :: PanedClass self => Attr self Int
panedPosition = newAttr
panedGetPosition
panedSetPosition
-- | @True@ if the Position property should be used.
--
-- Default value: @False@
--
panedPositionSet :: PanedClass self => Attr self Bool
panedPositionSet = newAttrFromBoolProperty "position-set"
#if GTK_CHECK_VERSION(2,4,0)
-- | The smallest possible value for the position property. This property is
-- derived from the size and shrinkability of the widget's children.
--
-- Allowed values: >= 0
--
-- Default value: 0
--
panedMinPosition :: PanedClass self => ReadAttr self Int
panedMinPosition = readAttrFromIntProperty "min-position"
-- | The largest possible value for the position property. This property is
-- derived from the size and shrinkability of the widget's children.
--
-- Allowed values: >= 0
--
-- Default value: 2147483647
--
panedMaxPosition :: PanedClass self => ReadAttr self Int
panedMaxPosition = readAttrFromIntProperty "max-position"
#endif
--------------------
-- Child Attributes
#if GTK_CHECK_VERSION(2,4,0)
-- | The \"resize\" child property determines whether the child expands and
-- shrinks along with the paned widget.
--
-- Default value: @True@
--
panedChildResize :: (PanedClass self, WidgetClass child) => child -> Attr self Bool
panedChildResize = newAttrFromContainerChildBoolProperty "resize"
-- | The \"shrink\" child property determines whether the child can be made
-- smaller than its requisition.
--
-- Default value: @True@
--
panedChildShrink :: (PanedClass self, WidgetClass child) => child -> Attr self Bool
panedChildShrink = newAttrFromContainerChildBoolProperty "shrink"
#endif
--------------------
-- Deprecated Signals
#ifndef DISABLE_DEPRECATED
-- |
--
onCycleChildFocus, afterCycleChildFocus :: PanedClass self => self
-> (Bool -> IO Bool)
-> IO (ConnectId self)
onCycleChildFocus = connect_BOOL__BOOL "cycle_child_focus" False
afterCycleChildFocus = connect_BOOL__BOOL "cycle_child_focus" True
-- |
--
onToggleHandleFocus, afterToggleHandleFocus :: PanedClass self => self
-> IO Bool
-> IO (ConnectId self)
onToggleHandleFocus = connect_NONE__BOOL "toggle_handle_focus" False
afterToggleHandleFocus = connect_NONE__BOOL "toggle_handle_focus" True
-- |
--
onMoveHandle, afterMoveHandle :: PanedClass self => self
-> (ScrollType -> IO Bool)
-> IO (ConnectId self)
onMoveHandle = connect_ENUM__BOOL "move_handle" False
afterMoveHandle = connect_ENUM__BOOL "move_handle" True
-- |
--
onCycleHandleFocus, afterCycleHandleFocus :: PanedClass self => self
-> (Bool -> IO Bool)
-> IO (ConnectId self)
onCycleHandleFocus = connect_BOOL__BOOL "cycle_handle_focus" False
afterCycleHandleFocus = connect_BOOL__BOOL "cycle_handle_focus" True
-- |
--
onAcceptPosition, afterAcceptPosition :: PanedClass self => self
-> IO Bool
-> IO (ConnectId self)
onAcceptPosition = connect_NONE__BOOL "accept_position" False
afterAcceptPosition = connect_NONE__BOOL "accept_position" True
-- |
--
onCancelPosition, afterCancelPosition :: PanedClass self => self
-> IO Bool
-> IO (ConnectId self)
onCancelPosition = connect_NONE__BOOL "cancel_position" False
afterCancelPosition = connect_NONE__BOOL "cancel_position" True
#endif
|