module HTk.Toplevel.HTk (
requirePackage,
forgetPackage,
isPackageAvailable,
isTixAvailable,
module HTk.Kernel.Resources,
module HTk.Kernel.GUIValue,
module HTk.Kernel.Font,
module HTk.Kernel.Geometry,
module HTk.Kernel.Colour,
module HTk.Kernel.Tooltip,
module HTk.Kernel.TkVariables,
module Events.Synchronized,
module Util.Computation,
module HTk.Kernel.Configuration,
module HTk.Kernel.BaseClasses,
module HTk.Kernel.Cursor,
module HTk.Textitems.TextTag,
module HTk.Textitems.Mark,
module HTk.Textitems.EmbeddedTextWin,
module HTk.Containers.Window,
module HTk.Containers.Toplevel,
module HTk.Containers.Frame,
module HTk.Widgets.Label,
module HTk.Widgets.Message,
module HTk.Widgets.Entry,
module HTk.Widgets.Button,
module HTk.Widgets.CheckButton,
module HTk.Widgets.RadioButton,
module HTk.Widgets.MenuButton,
module HTk.Widgets.Canvas,
module HTk.Widgets.Editor,
module HTk.Widgets.ListBox,
module HTk.Widgets.OptionMenu,
module HTk.Widgets.Scale,
module HTk.Widgets.ScrollBar,
module HTk.Devices.Screen,
module HTk.Containers.Box,
module HTk.Tix.NoteBook,
module HTk.Tix.LabelFrame,
module HTk.Tix.PanedWindow,
module HTk.Widgets.ComboBox,
module HTk.Devices.Bell,
module HTk.Devices.Printer,
module HTk.Menuitems.Menu,
module HTk.Menuitems.MenuCascade,
module HTk.Menuitems.MenuCommand,
module HTk.Menuitems.MenuCheckButton,
module HTk.Menuitems.MenuRadioButton,
module HTk.Menuitems.MenuSeparator,
module HTk.Canvasitems.CanvasItem,
module HTk.Canvasitems.Arc,
module HTk.Canvasitems.Line,
module HTk.Canvasitems.Oval,
module HTk.Canvasitems.Polygon,
module HTk.Canvasitems.Rectangle,
module HTk.Canvasitems.ImageItem,
module HTk.Canvasitems.BitMapItem,
module HTk.Canvasitems.TextItem,
module HTk.Canvasitems.CanvasTag,
module HTk.Canvasitems.EmbeddedCanvasWin,
module HTk.Components.Index,
module HTk.Components.BitMap,
module HTk.Components.Image,
module HTk.Components.Focus,
module HTk.Components.Icon,
module HTk.Components.Selection,
module HTk.Kernel.ButtonWidget,
module HTk.Kernel.Packer,
module HTk.Kernel.PackOptions,
module HTk.Kernel.GridPackOptions,
module Events.Events,
module HTk.Kernel.EventInfo,
module Events.Spawn,
module Events.Channels,
WishEvent(..),
WishEventType(..),
WishEventModifier(..),
KeySym(..),
bind,
bindSimple,
bindPath,
bindPathSimple,
HasCommand(..),
delayWish,
initHTk,
withdrawMainWin,
resourceFile,
finishHTk,
withdrawWish,
HTk,
updateAllTasks,
updateIdleTasks,
Destructible(..),
Destroyable(..),
cleanupWish,
getHTk,
) where
import Control.Concurrent
import Events.Channels
import Events.Destructible
import Events.Events
import Events.Spawn
import Events.Synchronized
import HTk.Canvasitems.Arc
import HTk.Canvasitems.BitMapItem
import HTk.Canvasitems.CanvasItem hiding (Canvas)
import HTk.Canvasitems.CanvasTag
import HTk.Canvasitems.EmbeddedCanvasWin
import HTk.Canvasitems.ImageItem
import HTk.Canvasitems.Line
import HTk.Canvasitems.Oval
import HTk.Canvasitems.Polygon
import HTk.Canvasitems.Rectangle
import HTk.Canvasitems.TextItem
import HTk.Components.BitMap
import HTk.Components.Focus
import HTk.Components.Icon
import HTk.Components.Image
import HTk.Components.Index
import HTk.Components.Selection
import HTk.Containers.Box
import HTk.Containers.Frame
import HTk.Containers.Toplevel
import HTk.Containers.Window
import HTk.Devices.Bell
import HTk.Devices.Printer
import HTk.Devices.Screen
import HTk.Kernel.BaseClasses
import HTk.Kernel.ButtonWidget
import HTk.Kernel.Colour
import HTk.Kernel.Configuration
import HTk.Kernel.Core
import HTk.Kernel.Cursor
import HTk.Kernel.EventInfo
import HTk.Kernel.Font
import HTk.Kernel.GUIValue
import HTk.Kernel.Geometry
import HTk.Kernel.GridPackOptions
import HTk.Kernel.PackOptions
import HTk.Kernel.Packer
import HTk.Kernel.Resources
import HTk.Kernel.TkVariables
import HTk.Kernel.Tooltip
import HTk.Kernel.Wish
import HTk.Menuitems.Menu
import HTk.Menuitems.MenuCascade
import HTk.Menuitems.MenuCheckButton
import HTk.Menuitems.MenuCommand
import HTk.Menuitems.MenuRadioButton
import HTk.Menuitems.MenuSeparator
import HTk.Textitems.EmbeddedTextWin
import HTk.Textitems.Mark
import HTk.Textitems.TextTag
import HTk.Tix.LabelFrame
import HTk.Tix.NoteBook
import HTk.Tix.PanedWindow
import HTk.Widgets.Button
import HTk.Widgets.Canvas
import HTk.Widgets.CheckButton
import HTk.Widgets.ComboBox
import HTk.Widgets.Editor
import HTk.Widgets.Entry
import HTk.Widgets.Label
import HTk.Widgets.ListBox
import HTk.Widgets.MenuButton
import HTk.Widgets.Message
import HTk.Widgets.OptionMenu
import HTk.Widgets.RadioButton
import HTk.Widgets.Scale
import HTk.Widgets.ScrollBar
import System.IO.Unsafe
import Util.Computation
newtype HTk = HTk GUIOBJECT
instance GUIObject HTk where
toGUIObject (HTk obj) = obj
cname _ = "HTk"
instance Eq HTk where
(HTk obj1) == (HTk obj2) = obj1 == obj2
instance Destroyable HTk where
destroy = destroy . toGUIObject
instance Window HTk
instance Container HTk
instance Synchronized HTk where
synchronize = synchronize . toGUIObject
theHTkMVar :: MVar (Maybe HTk)
theHTkMVar = unsafePerformIO (newMVar Nothing)
initHTk :: [Config HTk]
-> IO HTk
initHTk cnf =
do
htkOpt <- takeMVar theHTkMVar
htk <- case htkOpt of
Nothing -> newHTk cnf
Just htk -> return htk
putMVar theHTkMVar (Just htk)
return htk
getHTk :: IO HTk
getHTk =
do
htkOpt <- takeMVar theHTkMVar
htk <- case htkOpt of
Nothing -> newHTk []
Just htk -> return htk
putMVar theHTkMVar (Just htk)
return htk
newHTk :: [Config HTk] -> IO HTk
newHTk opts =
do
obj <- createHTkObject htkMethods
configure (HTk obj) opts
return (HTk obj)
withdrawWish :: IO ()
withdrawWish =
do
htk <- getHTk
withdraw htk
withdrawMainWin :: Config HTk
withdrawMainWin htk =
do
withdraw htk
return htk
resourceFile :: String-> Config HTk
resourceFile file htk =
do execCmd ("option readfile "++ file++ " startup")
return htk
finishHTk :: IO ()
finishHTk =
do htk <- getHTk
(htk_destr, _) <- bindSimple htk Destroy
sync htk_destr
cleanupWish
htkMethods = Methods tkGetToplevelConfig
tkSetToplevelConfigs
(createCmd voidMethods)
(packCmd voidMethods)
(gridCmd voidMethods)
(destroyCmd defMethods)
(bindCmd defMethods)
(unbindCmd defMethods)
(cleanupCmd defMethods)
updateAllTasks :: IO ()
updateAllTasks = execTclScript ["update"]
updateIdleTasks :: IO ()
updateIdleTasks = execTclScript ["update idletasks"]
instance GUIValue v => HasValue HTk v where
value aname htk =
do
execTclScript ["tk appname " ++ show aname]
return htk
getValue _ = evalTclScript ["tk appname"] >>= creadTk