-- ----------------------------------------------------------------------- -- -- $Source: /repository/uni/htk/tix/PanedWindow.hs,v $ -- -- HTk - a GUI toolkit for Haskell - (c) Universitaet Bremen -- -- $Revision: 1.5 $ from $Date: 2001/12/17 20:54:58 $ -- Last modification by $Author: ludi $ -- -- ----------------------------------------------------------------------- --- -- HTk's PanedWindow.
-- A paned window is a container widget, that is devided into scaleable -- horizontal or vertical panes. module PanedWindow ( PanedWindow, newPanedWindow, Pane, createPane, after, before, at, expand, minsize, maxsize, initsize ) where import Core import BaseClasses(Widget) import Configuration import Resources import Computation import Synchronized import Destructible import Packer import Tooltip -- ----------------------------------------------------------------------- -- type PanedWindow -- ----------------------------------------------------------------------- --- -- The PanedWindow datatype. newtype PanedWindow = PanedWindow GUIOBJECT deriving Eq -- ----------------------------------------------------------------------- -- paned window creation -- ----------------------------------------------------------------------- --- -- Constructs a new paned window and returns it as a value. -- @param cnf - the list of configuration options for this -- - paned window. -- @return result - A paned window. newPanedWindow :: Container par => par -> Orientation -> [Config PanedWindow] -> IO PanedWindow newPanedWindow par or cnf = do w <- createGUIObject (toGUIObject par) (PANEDWINDOW or) panedWindowMethods configure (PanedWindow w) cnf -- ----------------------------------------------------------------------- -- paned window methods -- ----------------------------------------------------------------------- panedWindowMethods :: Methods panedWindowMethods = Methods (cgetCmd defMethods) (csetCmd defMethods) tkCreatePanedWindow (packCmd defMethods) (gridCmd defMethods) (destroyCmd defMethods) (bindCmd defMethods) (unbindCmd defMethods) (cleanupCmd defMethods) tkCreatePanedWindow :: ObjectName -> ObjectKind -> ObjectName -> ObjectID -> [ConfigOption] -> TclScript tkCreatePanedWindow _ (PANEDWINDOW or) name _ opts = ["tixPanedWindow " ++ show name ++ " -orientation " ++ show or ++ " " ++ showConfigs opts] tkCreatePanedWindow _ _ _ _ _ = [] {-# INLINE tkCreatePanedWindow #-} -- ----------------------------------------------------------------------- -- paned window instances -- ----------------------------------------------------------------------- --- -- Internal. instance GUIObject PanedWindow where --- -- Internal. toGUIObject (PanedWindow f) = f --- -- Internal. cname _ = "PanedWindow" --- -- You can specify the size of a paned window. instance HasSize PanedWindow --- -- A paned window can be destroyed. instance Destroyable PanedWindow where --- -- Destroys a paned window. destroy = destroy . toGUIObject --- -- A paned window has standard widget properties (focus, cursor, ...). instance Widget PanedWindow --- -- You can synchronize on a paned window object (in JAVA style). instance Synchronized PanedWindow where --- -- Synchronizes on a paned window object. synchronize = synchronize . toGUIObject -- ----------------------------------------------------------------------- -- type Pane -- ----------------------------------------------------------------------- --- -- The Pane datatype - a pane inside a paned window. newtype Pane = Pane GUIOBJECT deriving Eq -- ----------------------------------------------------------------------- -- pane creation -- ----------------------------------------------------------------------- --- -- Constructs a new pane inside a paned window and returns it as a -- value. -- @param par - the parent widget, which has to be a paned window. -- @param cnf - the list of configuration options for this pane. -- @return result - A window pane. createPane :: PanedWindow -> [CreationConfig Pane] -> [Config Pane] -> IO Pane createPane nb ccnf cnf = do ccnfstr <- showCreationConfigs ccnf w <- createGUIObject (toGUIObject nb) WINDOWPANE (windowPaneMethods ccnfstr) configure (Pane w) cnf -- ----------------------------------------------------------------------- -- pane creation options -- ----------------------------------------------------------------------- --- -- Specifies that the new pane should be placed after pane in the list of -- panes in this PanedWindow widget -- (this is an initial configuration that cannot be changed later). after :: Pane -> CreationConfig Pane after pane = do nm <- getObjectName (toGUIObject pane) return ("after " ++ show nm) --- -- Specifies that the new pane should be placed before pane in the list of -- panes in this PanedWindow widget -- (this is an initial configuration that cannot be changed later). before :: Pane -> CreationConfig Pane before pane = do nm <- getObjectName (toGUIObject pane) return ("before " ++ show nm) --- -- Specifies the position of the new pane in the list of panes in this -- PanedWindow widget. 0 means the first position, 1 means the second, -- and so on. at :: Int -> CreationConfig Pane at n = return ("at " ++ show n) --- -- Specifies the expand/shrink factor of this pane as a non-negative -- floating point number. The default value is 0.0. The expand/shrink -- factor is used to calculate how much each pane should grow or shrink -- when the size of the PanedWindow main window is changed. When the main -- window expands/shrinks by n pixels, then pane i will grow/shrink by -- about n * factor(i) / summation(factors), where factor(i) is the -- expand/shrink factor of pane i and summation(factors) is the summation -- of the expand/shrink factors of all the panes. If summation(factors) -- is 0.0, however, only the last visible pane will be grown or shrunk. expand :: Double -> CreationConfig Pane expand d = return ("expand " ++ show d) --- -- Specifies the minimum size, in pixels, of the new pane; the default -- is 0. minsize :: Int -> CreationConfig Pane minsize i = return ("min " ++ show i) --- -- Specifies the maximum size, in pixels, of the new pane; the default is -- 10000. maxsize :: Int -> CreationConfig Pane maxsize i = return ("max " ++ show i) --- -- Specifies the size, in pixels, of the new pane; if the -size option is -- not given, the PanedWindow widget will use the natural size of the pane -- subwidget. initsize :: Int -> CreationConfig Pane initsize i = return ("size " ++ show i) -- ----------------------------------------------------------------------- -- window pane methods -- ----------------------------------------------------------------------- windowPaneMethods ccnf = Methods tkGetPaneConfig tkSetPaneConfigs (tkCreatePane ccnf) (packCmd voidMethods) (gridCmd voidMethods) (destroyCmd defMethods) (bindCmd defMethods) (unbindCmd defMethods) (cleanupCmd defMethods) -- ----------------------------------------------------------------------- -- unparsing of notebook page commands -- ----------------------------------------------------------------------- tkGetPaneConfig :: ObjectName -> ConfigID -> TclScript tkGetPaneConfig (PaneName oid) cid = ["global v" ++ show oid, "$v" ++ show oid ++ " cget -" ++ cid] {-# INLINE tkGetPaneConfig #-} tkSetPaneConfigs :: ObjectName -> [ConfigOption] -> TclScript tkSetPaneConfigs (PaneName oid) args = ["global v" ++ show oid, "$v" ++ show oid ++ " configure " ++ showConfigs args] tkSetNoteBookPageConfigs _ _ = [] {-# INLINE tkSetPaneConfigs #-} tkCreatePane :: String -> ObjectName -> ObjectKind -> ObjectName -> ObjectID -> [ConfigOption] -> TclScript tkCreatePane ccnfstr parnm WINDOWPANE _ oid _ = [show parnm ++ " add " ++ show oid ++ " " ++ ccnfstr, "global v" ++ show oid, "set v" ++ show oid ++ " [" ++ show parnm ++ " subwidget " ++ show oid ++ "]"] tkCreatePane _ _ _ _ _ _ = [] {-# INLINE tkCreatePane #-} -- ----------------------------------------------------------------------- -- window pane instances -- ----------------------------------------------------------------------- --- -- Internal. instance GUIObject Pane where --- -- Internal. toGUIObject (Pane f) = f --- -- Internal. cname _ = "Pane" --- -- A pane can be destroyed. instance Destroyable Pane where --- -- Destroys a pane. destroy = destroy . toGUIObject --- -- A pane has standard widget properties (focus, cursor...). instance Widget Pane --- -- A pane has a background colour. instance HasColour Pane where --- -- Internal. legalColourID = hasBackGroundColour --- -- A pane is a container for widgets. You can pack widgets to a pane via -- the pack or grid command in the module Packer. instance Container Pane --- -- You can synchronize on a pane object (in JAVA style). instance Synchronized Pane where --- -- Synchronizes on a pane object. synchronize = synchronize . toGUIObject