{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} -- | HTk\'s /notebook/ and -- /notebook pages/. -- This widget is from the Tix library and therefore only available if -- you are using tixwish. module HTk.Tix.NoteBook ( NoteBook, NoteBookPage, newNoteBook, createNoteBookPage ) where import HTk.Kernel.Core import HTk.Kernel.BaseClasses(Widget) import HTk.Kernel.Configuration import Util.Computation import Events.Synchronized import Events.Destructible import HTk.Kernel.Packer import HTk.Kernel.Tooltip -- ----------------------------------------------------------------------- -- type NoteBook -- ----------------------------------------------------------------------- -- | The @NoteBook@ datatype. newtype NoteBook = NoteBook GUIOBJECT deriving Eq -- ----------------------------------------------------------------------- -- notebook creation -- ----------------------------------------------------------------------- -- | Constructs a new notebook widget and returns it as a value. newNoteBook :: Container par => par -- ^ the parent widget, which has to be a container widget -- (an instance of @class Container@). -> [Config NoteBook] -- ^ the list of configuration options for this notebook. -> IO NoteBook -- ^ A notebook widget. newNoteBook par cnf = do w <- createWidget (toGUIObject par) NOTEBOOK configure (NoteBook w) cnf -- ----------------------------------------------------------------------- -- notebook instances -- ----------------------------------------------------------------------- -- | Internal. instance GUIObject NoteBook where toGUIObject (NoteBook w) = w cname _ = "NoteBook" -- | You can specify the size of a notebook widget. instance HasSize NoteBook -- | A notebook widget has standard widget properties (focus, cursor, ...). instance Widget NoteBook -- | A notebook widget can be destroyed. instance Destroyable NoteBook where -- Destroys a notebook widget. destroy = destroy . toGUIObject -- | You can synchronize on a notebook object (in JAVA style). instance Synchronized NoteBook where -- Synchronizes on a notebook object. synchronize = synchronize . toGUIObject -- ----------------------------------------------------------------------- -- type NoteBookPage -- ----------------------------------------------------------------------- -- | The @NoteBookPage@ datatype - a single page of a notebook. newtype NoteBookPage = NoteBookPage GUIOBJECT deriving Eq -- ----------------------------------------------------------------------- -- notebook page creation -- ----------------------------------------------------------------------- -- | Constructs a new page inside a notebook widget and returns it as a -- value. createNoteBookPage :: NoteBook -- ^ the parent widget, which has to be a container widget -- (an instance of @class Container@). -> String -- ^ the list of configuration options for this notebook -- page. -> [Config NoteBookPage] -> IO NoteBookPage -- ^ A notebook page. createNoteBookPage nb title cnf = do w <- createGUIObject (toGUIObject nb) (NOTEBOOKPAGE title) pageMethods configure (NoteBookPage w) cnf -- ----------------------------------------------------------------------- -- notebook page methods -- ----------------------------------------------------------------------- pageMethods = Methods tkGetNoteBookPageConfig tkSetNoteBookPageConfigs tkCreateNoteBookPage (packCmd voidMethods) (gridCmd voidMethods) (destroyCmd defMethods) (bindCmd defMethods) (unbindCmd defMethods) (cleanupCmd defMethods) -- ----------------------------------------------------------------------- -- unparsing of notebook page commands -- ----------------------------------------------------------------------- tkGetNoteBookPageConfig :: ObjectName -> ConfigID -> TclScript tkGetNoteBookPageConfig (NoteBookPageName oid) cid = ["global v" ++ show oid, "$v" ++ show oid ++ " cget -" ++ cid] {-# INLINE tkGetNoteBookPageConfig #-} tkSetNoteBookPageConfigs :: ObjectName -> [ConfigOption] -> TclScript tkSetNoteBookPageConfigs (NoteBookPageName oid) args = ["global v" ++ show oid, "$v" ++ show oid ++ " configure " ++ showConfigs args] tkSetNoteBookPageConfigs _ _ = [] {-# INLINE tkSetNoteBookPageConfigs #-} tkCreateNoteBookPage :: ObjectName -> ObjectKind -> ObjectName -> ObjectID -> [ConfigOption] -> TclScript tkCreateNoteBookPage parnm (NOTEBOOKPAGE title) _ oid args = [show parnm ++ " add " ++ show oid ++ " -label \"" ++ title ++ "\" " ++ showConfigs args, "global v" ++ show oid, "set v" ++ show oid ++ " [" ++ show parnm ++ " subwidget " ++ show oid ++ "]"] {-# INLINE tkCreateNoteBookPage #-} -- ----------------------------------------------------------------------- -- notebook page instances -- ----------------------------------------------------------------------- -- | Internal. instance GUIObject NoteBookPage where toGUIObject (NoteBookPage w) = w cname _ = "NoteBookPage" -- | A notebook page can be destroyed. instance Destroyable NoteBookPage where -- Destroys a notebook page. destroy = destroy . toGUIObject -- | A notebook page has standard widget properties -- (concerning focus, cursor). instance Widget NoteBookPage -- | A notebook page is a container for widgets. You can pack widgets to -- a notebook page via pack or grid command in the -- @module HTk.Kernel.Packer@. instance Container NoteBookPage -- | A notebook page has a text label. instance GUIValue a => HasText NoteBookPage a where text s w = cset w "label" s getText w = cget w "label" -- | A notebook page has a configureable border. instance HasBorder NoteBookPage -- | A notebook page can have a tooltip. instance HasTooltip NoteBookPage -- | A notebook page has a background colour. instance HasColour NoteBookPage where legalColourID = hasBackGroundColour -- | You can synchronize on a notebook page (in JAVA style). instance Synchronized NoteBookPage where -- Synchronizes on a notebook page object. synchronize = synchronize . toGUIObject