packages feed

wxcore 0.90.1.1 → 0.91.0.0

raw patch · 23 files changed

+19756/−18937 lines, 23 filesdep ~arraydep ~wxcdep ~wxdirectsetup-changed

Dependency ranges changed: array, wxc, wxdirect

Files

Setup.hs view
@@ -11,7 +11,7 @@ import Distribution.Simple.Setup (ConfigFlags, BuildFlags)
 import Distribution.System (OS (..), Arch (..), buildOS, buildArch)
 import Distribution.Verbosity (normal, verbose)
-import System.Cmd (system)
+import System.Process (system)
 import System.Directory (createDirectoryIfMissing, doesFileExist, getCurrentDirectory, getModificationTime)
 import System.Environment (getEnv)
 import System.FilePath ((</>), (<.>), replaceExtension, takeFileName, dropFileName, addExtension, takeDirectory)
src/haskell/Graphics/UI/WXCore.hs view
@@ -1,82 +1,82 @@-------------------------------------------------------------------------------------------{-|	Module      :  WXCore-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--The "WXCore" module is the interface to the core wxWidgets functionality.-    -The library contains the automatically generated interface to the raw-wxWidgets API in "Graphics.UI.WXCore.WxcClasses", "Graphics.UI.WXCore.WxcClassTypes",-and "Graphics.UI.WXCore.WxcDefs". --The other helper modules contain convenient wrappers but only use functional-abstractions: no type classes or other fancy Haskell features. (The-higher-level "Graphics.UI.WX" module provides such abstractions.)--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore-        (-        -- * Re-exports-          module Graphics.UI.WXCore.WxcDefs-        , module Graphics.UI.WXCore.WxcClasses-        , module Graphics.UI.WXCore.WxcClassInfo-        , module Graphics.UI.WXCore.Defines-        , module Graphics.UI.WXCore.Types-        , module Graphics.UI.WXCore.Process-        , module Graphics.UI.WXCore.Print-        , module Graphics.UI.WXCore.Draw-        , module Graphics.UI.WXCore.DragAndDrop-        , module Graphics.UI.WXCore.Events-        , module Graphics.UI.WXCore.Frame-        , module Graphics.UI.WXCore.Dialogs-        , module Graphics.UI.WXCore.Controls-        , module Graphics.UI.WXCore.Layout-        , module Graphics.UI.WXCore.Image-        , module Graphics.UI.WXCore.OpenGL--        -- * Run-        , run-        ) where--import System.Mem( performGC )--import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses -import Graphics.UI.WXCore.WxcClassInfo-  -import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines-import Graphics.UI.WXCore.Process-import Graphics.UI.WXCore.Print-import Graphics.UI.WXCore.Events hiding ( StreamStatus(..) )-import Graphics.UI.WXCore.Draw-import Graphics.UI.WXCore.DragAndDrop-import Graphics.UI.WXCore.Frame-import Graphics.UI.WXCore.Dialogs-import Graphics.UI.WXCore.Controls-import Graphics.UI.WXCore.Layout-import Graphics.UI.WXCore.Image-import Graphics.UI.WXCore.OpenGL--import Graphics.UI.WXCore.GHCiSupport---- | Start the event loop. Takes an initialisation action as argument.--- Except for 'run', the functions in the WX library can only be called--- from this initialisation action or from event handlers, otherwise bad--- things will happen :-)-run :: IO a -> IO ()-run init-  = do enableGUI-       appOnInit (do wxcAppInitAllImageHandlers-                     init-                     return ())-       performGC-       performGC----+-----------------------------------------------------------------------------------------
+{-|	Module      :  WXCore
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+The "WXCore" module is the interface to the core wxWidgets functionality.
+    
+The library contains the automatically generated interface to the raw
+wxWidgets API in "Graphics.UI.WXCore.WxcClasses", "Graphics.UI.WXCore.WxcClassTypes",
+and "Graphics.UI.WXCore.WxcDefs". 
+
+The other helper modules contain convenient wrappers but only use functional
+abstractions: no type classes or other fancy Haskell features. (The
+higher-level "Graphics.UI.WX" module provides such abstractions.)
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore
+        (
+        -- * Re-exports
+          module Graphics.UI.WXCore.WxcDefs
+        , module Graphics.UI.WXCore.WxcClasses
+        , module Graphics.UI.WXCore.WxcClassInfo
+        , module Graphics.UI.WXCore.Defines
+        , module Graphics.UI.WXCore.Types
+        , module Graphics.UI.WXCore.Process
+        , module Graphics.UI.WXCore.Print
+        , module Graphics.UI.WXCore.Draw
+        , module Graphics.UI.WXCore.DragAndDrop
+        , module Graphics.UI.WXCore.Events
+        , module Graphics.UI.WXCore.Frame
+        , module Graphics.UI.WXCore.Dialogs
+        , module Graphics.UI.WXCore.Controls
+        , module Graphics.UI.WXCore.Layout
+        , module Graphics.UI.WXCore.Image
+        , module Graphics.UI.WXCore.OpenGL
+
+        -- * Run
+        , run
+        ) where
+
+import System.Mem( performGC )
+
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses 
+import Graphics.UI.WXCore.WxcClassInfo
+  
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Defines
+import Graphics.UI.WXCore.Process
+import Graphics.UI.WXCore.Print
+import Graphics.UI.WXCore.Events hiding ( StreamStatus(..) )
+import Graphics.UI.WXCore.Draw
+import Graphics.UI.WXCore.DragAndDrop
+import Graphics.UI.WXCore.Frame
+import Graphics.UI.WXCore.Dialogs
+import Graphics.UI.WXCore.Controls
+import Graphics.UI.WXCore.Layout
+import Graphics.UI.WXCore.Image
+import Graphics.UI.WXCore.OpenGL
+
+import Graphics.UI.WXCore.GHCiSupport
+
+-- | Start the event loop. Takes an initialisation action as argument.
+-- Except for 'run', the functions in the WX library can only be called
+-- from this initialisation action or from event handlers, otherwise bad
+-- things will happen :-)
+run :: IO a -> IO ()
+run init
+  = do enableGUI
+       appOnInit (do wxcAppInitAllImageHandlers
+                     init
+                     return ())
+       performGC
+       performGC
+
+
+
+
src/haskell/Graphics/UI/WXCore/Controls.hs view
@@ -1,131 +1,131 @@----------------------------------------------------------------------------------{-|	Module      :  Controls-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Controls-    ( -      -- * Log-      textCtrlMakeLogActiveTarget-    , logDeleteAndSetActiveTarget-      -- * Tree control-    , TreeCookie-    , treeCtrlGetChildCookie, treeCtrlGetNextChild2-    , treeCtrlWithChildren, treeCtrlGetChildren-    , treeCtrlGetSelections2-      -- * Wrappers-    , listBoxGetSelectionList-    , execClipBoardData-      -- * Deprecated-    , wxcAppUSleep-    ) where--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types--import Foreign.Storable-import Foreign.Marshal.Array-import Foreign.Marshal.Utils----- | Get the selections of a tree control.-treeCtrlGetSelections2 :: TreeCtrl a -> IO [TreeItem]-treeCtrlGetSelections2 treeCtrl-  = do xs <- treeCtrlGetSelections treeCtrl-       return (map treeItemFromInt xs)---- | Represents the children of a tree control.-data TreeCookie   = TreeCookie (Var Cookie)-data Cookie       = Cookie TreeItem-                  | CookieFirst TreeItem-                  | CookieInvalid---- | Get a @TreeCookie@ to iterate through the children of tree node.-treeCtrlGetChildCookie :: TreeCtrl a -> TreeItem -> IO TreeCookie-treeCtrlGetChildCookie treeCtrl parent-  = do pcookie <- varCreate (CookieFirst parent)-       return (TreeCookie pcookie)---- | Get the next child of a tree node. Returns 'Nothing' when--- the end of the list is reached. This also invalidates the tree cookie.-treeCtrlGetNextChild2 :: TreeCtrl a -> TreeCookie -> IO (Maybe TreeItem)-treeCtrlGetNextChild2 treeCtrl treeCookie@(TreeCookie pcookie)-  = do cookie <- varGet pcookie-       case cookie of-         CookieInvalid    -> return Nothing-         CookieFirst item -> with 0 $ \pint ->-                             do first <- treeCtrlGetFirstChild treeCtrl item pint-                                if (treeItemIsOk first)-                                 then do varSet pcookie (Cookie first)-                                         return (Just first)-                                 else do varSet pcookie (CookieInvalid)-                                         return Nothing-         Cookie item ->-                             do next <- treeCtrlGetNextSibling treeCtrl item-                                if (treeItemIsOk next)-                                 then do varSet pcookie (Cookie next)-                                         return (Just next)-                                 else do varSet pcookie (CookieInvalid)-                                         return Nothing---- | Iterate on the list of children of a tree node.-treeCtrlWithChildren :: TreeCtrl a -> TreeItem -> (TreeItem -> IO b) -> IO [b]-treeCtrlWithChildren treeCtrl parent f-  = do cookie <- treeCtrlGetChildCookie treeCtrl parent-       let walk acc  = do mbitem <- treeCtrlGetNextChild2 treeCtrl cookie-                          case mbitem of-                            Nothing   -> return (reverse acc)-                            Just item -> do x <- f item-                                            walk (x:acc)-       walk []---- | Get the children of tree node.-treeCtrlGetChildren :: TreeCtrl a -> TreeItem -> IO [TreeItem]-treeCtrlGetChildren treeCtrl item-  = treeCtrlWithChildren treeCtrl item return---- | ---- | Return the current selection in a listbox.-listBoxGetSelectionList :: ListBox a -> IO [Int]-listBoxGetSelectionList listBox-  = do n <- listBoxGetSelections listBox ptrNull 0-       let count = abs n-       allocaArray count $ \carr ->-        do listBoxGetSelections listBox carr count-           xs <- peekArray count carr-           return (map fromCInt xs)---- | Sets the active log target and deletes the old one.-logDeleteAndSetActiveTarget :: Log a -> IO ()-logDeleteAndSetActiveTarget log-  = do oldlog <- logSetActiveTarget log-       when (not (objectIsNull oldlog)) (logDelete oldlog)-       ---- | Set a text control as a log target.-textCtrlMakeLogActiveTarget :: TextCtrl a -> IO ()-textCtrlMakeLogActiveTarget textCtrl-  = do log <- logTextCtrlCreate textCtrl-       logDeleteAndSetActiveTarget log----- | Use a 'clipboardSetData' or 'clipboardGetData' in this function. But don't--- use long computation in this function. Because this function encloses the--- computation with 'clipboardOpen' and 'clipboardClose', and wxHaskell uses--- Global clipboard on your environment. So, long computation causes problem.-execClipBoardData :: Clipboard a -> (Clipboard a -> IO b) -> IO b-execClipBoardData cl event = bracket_ (clipboardOpen cl) (clipboardClose cl) (event cl)--{-# DEPRECATED wxcAppUSleep "Use wxcAppMilliSleep instead" #-}--- | This function just left for backward-compatiblity.--- Update your code to use 'wxcAppMilliSleep' instead.-wxcAppUSleep :: Int -> IO ()-wxcAppUSleep = wxcAppMilliSleep+--------------------------------------------------------------------------------
+{-|	Module      :  Controls
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+-}
+--------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Controls
+    ( 
+      -- * Log
+      textCtrlMakeLogActiveTarget
+    , logDeleteAndSetActiveTarget
+      -- * Tree control
+    , TreeCookie
+    , treeCtrlGetChildCookie, treeCtrlGetNextChild2
+    , treeCtrlWithChildren, treeCtrlGetChildren
+    , treeCtrlGetSelections2
+      -- * Wrappers
+    , listBoxGetSelectionList
+    , execClipBoardData
+      -- * Deprecated
+    , wxcAppUSleep
+    ) where
+
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.Types
+
+import Foreign.Storable
+import Foreign.Marshal.Array
+import Foreign.Marshal.Utils
+
+
+-- | Get the selections of a tree control.
+treeCtrlGetSelections2 :: TreeCtrl a -> IO [TreeItem]
+treeCtrlGetSelections2 treeCtrl
+  = do xs <- treeCtrlGetSelections treeCtrl
+       return (map treeItemFromInt xs)
+
+-- | Represents the children of a tree control.
+data TreeCookie   = TreeCookie (Var Cookie)
+data Cookie       = Cookie TreeItem
+                  | CookieFirst TreeItem
+                  | CookieInvalid
+
+-- | Get a @TreeCookie@ to iterate through the children of tree node.
+treeCtrlGetChildCookie :: TreeCtrl a -> TreeItem -> IO TreeCookie
+treeCtrlGetChildCookie treeCtrl parent
+  = do pcookie <- varCreate (CookieFirst parent)
+       return (TreeCookie pcookie)
+
+-- | Get the next child of a tree node. Returns 'Nothing' when
+-- the end of the list is reached. This also invalidates the tree cookie.
+treeCtrlGetNextChild2 :: TreeCtrl a -> TreeCookie -> IO (Maybe TreeItem)
+treeCtrlGetNextChild2 treeCtrl treeCookie@(TreeCookie pcookie)
+  = do cookie <- varGet pcookie
+       case cookie of
+         CookieInvalid    -> return Nothing
+         CookieFirst item -> with 0 $ \pint ->
+                             do first <- treeCtrlGetFirstChild treeCtrl item pint
+                                if (treeItemIsOk first)
+                                 then do varSet pcookie (Cookie first)
+                                         return (Just first)
+                                 else do varSet pcookie (CookieInvalid)
+                                         return Nothing
+         Cookie item ->
+                             do next <- treeCtrlGetNextSibling treeCtrl item
+                                if (treeItemIsOk next)
+                                 then do varSet pcookie (Cookie next)
+                                         return (Just next)
+                                 else do varSet pcookie (CookieInvalid)
+                                         return Nothing
+
+-- | Iterate on the list of children of a tree node.
+treeCtrlWithChildren :: TreeCtrl a -> TreeItem -> (TreeItem -> IO b) -> IO [b]
+treeCtrlWithChildren treeCtrl parent f
+  = do cookie <- treeCtrlGetChildCookie treeCtrl parent
+       let walk acc  = do mbitem <- treeCtrlGetNextChild2 treeCtrl cookie
+                          case mbitem of
+                            Nothing   -> return (reverse acc)
+                            Just item -> do x <- f item
+                                            walk (x:acc)
+       walk []
+
+-- | Get the children of tree node.
+treeCtrlGetChildren :: TreeCtrl a -> TreeItem -> IO [TreeItem]
+treeCtrlGetChildren treeCtrl item
+  = treeCtrlWithChildren treeCtrl item return
+
+-- | 
+
+-- | Return the current selection in a listbox.
+listBoxGetSelectionList :: ListBox a -> IO [Int]
+listBoxGetSelectionList listBox
+  = do n <- listBoxGetSelections listBox ptrNull 0
+       let count = abs n
+       allocaArray count $ \carr ->
+        do listBoxGetSelections listBox carr count
+           xs <- peekArray count carr
+           return (map fromCInt xs)
+
+-- | Sets the active log target and deletes the old one.
+logDeleteAndSetActiveTarget :: Log a -> IO ()
+logDeleteAndSetActiveTarget log
+  = do oldlog <- logSetActiveTarget log
+       when (not (objectIsNull oldlog)) (logDelete oldlog)
+       
+
+-- | Set a text control as a log target.
+textCtrlMakeLogActiveTarget :: TextCtrl a -> IO ()
+textCtrlMakeLogActiveTarget textCtrl
+  = do log <- logTextCtrlCreate textCtrl
+       logDeleteAndSetActiveTarget log
+
+
+-- | Use a 'clipboardSetData' or 'clipboardGetData' in this function. But don't
+-- use long computation in this function. Because this function encloses the
+-- computation with 'clipboardOpen' and 'clipboardClose', and wxHaskell uses
+-- Global clipboard on your environment. So, long computation causes problem.
+execClipBoardData :: Clipboard a -> (Clipboard a -> IO b) -> IO b
+execClipBoardData cl event = bracket_ (clipboardOpen cl) (clipboardClose cl) (event cl)
+
+{-# DEPRECATED wxcAppUSleep "Use wxcAppMilliSleep instead" #-}
+-- | This function just left for backward-compatiblity.
+-- Update your code to use 'wxcAppMilliSleep' instead.
+wxcAppUSleep :: Int -> IO ()
+wxcAppUSleep = wxcAppMilliSleep
src/haskell/Graphics/UI/WXCore/Defines.hs view
@@ -1,119 +1,119 @@-------------------------------------------------------------------------------------------{-|	Module      :  Defines-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Exports standard /defines/ of wxWidgets.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Defines(-            -- * GUI toolkit-            WxToolkit(..), wxToolkit, wxVersion-            -- * Files-            , getAbsoluteFilePath-            , dirSep, pathSep-            ) where--import System.Directory-import System.FilePath-import Graphics.UI.WXCore.WxcClasses-import System.IO.Unsafe( unsafePerformIO )--{---------------------------------------------------------------------------------  ---------------------------------------------------------------------------------}---- | wxWidgets library kinds.-data WxToolkit  = WxGTK         -- ^ GTK-                | WxMac         -- ^ MacOS-                | WxMSW         -- ^ Any windows-                | WxMotif       -                | WxMGL         -- ^ SciTech soft MGL-                | WxUniversal-                | WxOSTwo       -- ^ OS\/2-                | WxXEleven     -- ^ X11-                | WxUnknown-                deriving (Eq,Show,Enum)--{-# NOINLINE wxToolkit #-}--- | Get the current wxWidgets library kind.-wxToolkit :: WxToolkit-wxToolkit-  = unsafePerformIO $ findDefine WxUnknown toolkits-  where-    toolkits  = [("__WXGTK__", WxGTK)-                ,("__WXMAC__", WxMac)-                ,("__WXMSW__", WxMSW)-                ,("__WXMOTIF__", WxMotif)-                ,("__WXMGL__", WxMGL)-                ,("__WXUNIVERSAL__", WxUniversal)-                ,("__WXOS2__", WxOSTwo)-                ,("__WXX11__", WxXEleven)-                ]---findDefine :: a -> [(String,a)] -> IO a-findDefine def []-  = return def-findDefine def ((name,val):xs)-  = do defined <- isDefined name-       if (defined)-        then return val-        else findDefine def xs---{-# NOINLINE wxVersion #-}--- | Return the version of the wxWidgets library. It is composed of the major--- version times 1000, plus the minor version times 100, plus the release number.--- For example, version 2.1.15 would be 2115.-wxVersion :: Int-wxVersion-  = unsafePerformIO $ versionNumber----{------------------------------------------------------------------------------------------  relative files------------------------------------------------------------------------------------------}---- | Find a file relative to the application or current directory.--- (absolute paths are passed without modification). This allows one--- to access resources relative to the installation directory in a--- portable way.-getAbsoluteFilePath :: FilePath -> IO FilePath-getAbsoluteFilePath fname-  = do exist <- doesFileExist fname-       if exist-        then return fname-        else do appdir <- getApplicationDir-                let appdirfname = appdir </> fname-                exist  <- doesFileExist appdirfname-                if exist-                 then return appdirfname-                 else do cwd <- getCurrentDirectory -                         let cwdfname = cwd </> fname-                         exist <- doesFileExist cwdfname-                         if exist-                          then return cwdfname-                          else return fname--{-# DEPRECATED dirSep "Use System.FilePath module and/or its module's pathSeparator instead" #-}--- | deprecated: Use System.FilePath module and/or its module\'s 'pathSeparator' instead.-dirSep :: String-dirSep-  = case wxToolkit of-      WxMSW   -> "\\"-      other   -> "/"--{-# DEPRECATED pathSep "Use System.FilePath module's searchPathSeparator instead" #-}--- | deprecated: Use System.FilePath module\'s 'searchPathSeparator' instead.-pathSep :: String-pathSep-  = case wxToolkit of-      WxMSW   -> ";"-      other   -> ":"-+-----------------------------------------------------------------------------------------
+{-|	Module      :  Defines
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Exports standard /defines/ of wxWidgets.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Defines(
+            -- * GUI toolkit
+            WxToolkit(..), wxToolkit, wxVersion
+            -- * Files
+            , getAbsoluteFilePath
+            , dirSep, pathSep
+            ) where
+
+import System.Directory
+import System.FilePath
+import Graphics.UI.WXCore.WxcClasses
+import System.IO.Unsafe( unsafePerformIO )
+
+{--------------------------------------------------------------------------------
+  
+--------------------------------------------------------------------------------}
+
+-- | wxWidgets library kinds.
+data WxToolkit  = WxGTK         -- ^ GTK
+                | WxMac         -- ^ MacOS
+                | WxMSW         -- ^ Any windows
+                | WxMotif       
+                | WxMGL         -- ^ SciTech soft MGL
+                | WxUniversal
+                | WxOSTwo       -- ^ OS\/2
+                | WxXEleven     -- ^ X11
+                | WxUnknown
+                deriving (Eq,Show,Enum)
+
+{-# NOINLINE wxToolkit #-}
+-- | Get the current wxWidgets library kind.
+wxToolkit :: WxToolkit
+wxToolkit
+  = unsafePerformIO $ findDefine WxUnknown toolkits
+  where
+    toolkits  = [("__WXGTK__", WxGTK)
+                ,("__WXMAC__", WxMac)
+                ,("__WXMSW__", WxMSW)
+                ,("__WXMOTIF__", WxMotif)
+                ,("__WXMGL__", WxMGL)
+                ,("__WXUNIVERSAL__", WxUniversal)
+                ,("__WXOS2__", WxOSTwo)
+                ,("__WXX11__", WxXEleven)
+                ]
+
+
+findDefine :: a -> [(String,a)] -> IO a
+findDefine def []
+  = return def
+findDefine def ((name,val):xs)
+  = do defined <- isDefined name
+       if (defined)
+        then return val
+        else findDefine def xs
+
+
+{-# NOINLINE wxVersion #-}
+-- | Return the version of the wxWidgets library. It is composed of the major
+-- version times 1000, plus the minor version times 100, plus the release number.
+-- For example, version 2.1.15 would be 2115.
+wxVersion :: Int
+wxVersion
+  = unsafePerformIO $ versionNumber
+
+
+
+{-----------------------------------------------------------------------------------------
+  relative files
+-----------------------------------------------------------------------------------------}
+
+-- | Find a file relative to the application or current directory.
+-- (absolute paths are passed without modification). This allows one
+-- to access resources relative to the installation directory in a
+-- portable way.
+getAbsoluteFilePath :: FilePath -> IO FilePath
+getAbsoluteFilePath fname
+  = do exist <- doesFileExist fname
+       if exist
+        then return fname
+        else do appdir <- getApplicationDir
+                let appdirfname = appdir </> fname
+                exist  <- doesFileExist appdirfname
+                if exist
+                 then return appdirfname
+                 else do cwd <- getCurrentDirectory 
+                         let cwdfname = cwd </> fname
+                         exist <- doesFileExist cwdfname
+                         if exist
+                          then return cwdfname
+                          else return fname
+
+{-# DEPRECATED dirSep "Use System.FilePath module and/or its module's pathSeparator instead" #-}
+-- | deprecated: Use System.FilePath module and/or its module\'s 'pathSeparator' instead.
+dirSep :: String
+dirSep
+  = case wxToolkit of
+      WxMSW   -> "\\"
+      other   -> "/"
+
+{-# DEPRECATED pathSep "Use System.FilePath module's searchPathSeparator instead" #-}
+-- | deprecated: Use System.FilePath module\'s 'searchPathSeparator' instead.
+pathSep :: String
+pathSep
+  = case wxToolkit of
+      WxMSW   -> ";"
+      other   -> ":"
+
src/haskell/Graphics/UI/WXCore/Dialogs.hs view
@@ -1,298 +1,298 @@----------------------------------------------------------------------------------{-|	Module      :  Dialogs-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Standard dialogs and (non modal) tip windows.--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Dialogs-    ( -    -- * Messages-      errorDialog, warningDialog, infoDialog-    , confirmDialog, proceedDialog-    -- ** Non-modal-    , tipWindowMessage, tipWindowMessageBounded--    -- * Files-    , fileOpenDialog-    , filesOpenDialog-    , fileSaveDialog-    , dirOpenDialog-    -- * Misc-    , fontDialog-    , colorDialog-    , passwordDialog-    , textDialog-    , numberDialog-    -- * Internal-    , messageDialog-    , fileDialog-    ) where--import Data.List( intersperse )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Draw----- | Opens a non-modal tip window with a text. The window is closed automatically--- when the user clicks the window or when it loses the focus.-tipWindowMessage :: Window a -> String -> IO ()-tipWindowMessage parent message-  = do tipWindowCreate parent message 100-       return ()---- | Opens a non-modal tip window with a text. The window is closed automatically--- when the mouse leaves the specified area, or when the user clicks the window,--- or when the window loses the focus.-tipWindowMessageBounded :: Window a -> String -> Rect -> IO ()-tipWindowMessageBounded parent message boundingBox-  = do tipWindow <- tipWindowCreate parent message 100-       tipWindowSetBoundingRect tipWindow boundingBox-       return ()---- | Opens a dialog that lets the user select multiple files. See 'fileOpenDialog' for a description--- of the arguments. Returns the empty list when the user selected no files or pressed the cancel button.-filesOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO [FilePath]-filesOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename-  = fileDialog parent result flags message wildcards directory filename-  where-    flags-      = wxOPEN .+. wxMULTIPLE-         .+. (if rememberCurrentDir then wxCHANGE_DIR else 0)-         .+. (if allowReadOnly then 0 else wxHIDE_READONLY)--    result fd r-      = if (r /= wxID_OK)-         then return []-         else fileDialogGetPaths fd---- | Show a modal file selection dialog. Usage:------ > fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename------ If @rememberCurrentDir@ is 'True', the library changes the current directory to the one where the--- files were chosen. @allowReadOnly@ determines whether the read-only files can be selected. The @message@--- is displayed on top of the dialog. The @directory@ is the default directory (use the empty string for--- the current directory). The @filename@ is the default file name. The @wildcards@ determine the entries--- in the file selection box. It consists of a list of pairs: the first element is a description (@"Image files"@)--- and the second element a list of wildcard patterns (@["*.bmp","*.gif"]@).------ > fileOpenDialog frame True True "Open image" [("Any file",["*.*"]),("Bitmaps",["*.bmp"])] "" ""------ Returns 'Nothing' when the user presses the cancel button.-fileOpenDialog  :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)-fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename-  = fileDialog parent result flags message wildcards directory filename-  where-    flags-      = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if allowReadOnly then 0 else wxHIDE_READONLY)--    result fd r-      = if (r /= wxID_OK)-         then return Nothing-         else do fname <- fileDialogGetPath fd-                 return (Just fname)---- | Show a modal file save dialog. Usage:------ > fileSaveDialog parent rememberCurrentDir overwritePrompt message directory filename------ The @overwritePrompt@ argument determines whether the user gets a prompt for confirmation when--- overwriting a file. The other arguments are as in 'fileOpenDialog'.-fileSaveDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)-fileSaveDialog parent rememberCurrentDir overwritePrompt message wildcards directory filename-  = fileDialog parent result flags message wildcards directory filename-  where-    flags-      = wxSAVE .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if overwritePrompt then wxOVERWRITE_PROMPT else 0)--    result fd r-      = if (r /= wxID_OK)-         then return Nothing-         else do fname <- fileDialogGetPath fd-                 return (Just fname)----- | Generic file dialog function. Takes a function that is called when the dialog is--- terminated, style flags, a message, a list of wildcards, a directory, and a file name.--- For example:--- --- > fileOpenDialog  --- >   = fileDialog parent result flags message wildcards directory filename--- >   where--- >     flags--- >      = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) --- >        .+. (if allowReadOnly then 0 else wxHIDE_READONLY)--- >--- >    result fd r--- >      = if (r /= wxID_OK)--- >         then return Nothing--- >         else do fname <- fileDialogGetPath fd--- >                 return (Just fname)--fileDialog :: Window a -> (FileDialog () -> Int -> IO b) -> Int -> String -> [(String,[String])] -> FilePath -> FilePath -> IO b-fileDialog parent processResult flags message wildcards directory filename-  = bracket-     (fileDialogCreate parent message directory filename (formatWildCards wildcards) pointNull flags)-     (windowDestroy)-     (\fd -> do r <- dialogShowModal fd-                processResult fd r)--  where-    formatWildCards wildcards-      = concat (intersperse "|"-        [desc ++ "|" ++ concat (intersperse ";" patterns) | (desc,patterns) <- wildcards])----- | Show a font selection dialog with a given initial font. Returns 'Nothing' when cancel was pressed.-fontDialog :: Window a -> FontStyle -> IO (Maybe FontStyle)-fontDialog parent fontStyle-  = withFontStyle fontStyle $ \font ->-    bracket (getFontFromUser parent font)-            (fontDelete)-            (\f -> do ok <- fontIsOk f-                      if ok-                       then do info <- fontGetFontStyle f-                               return (Just info)-                       else return Nothing)--{--  bracket (fontDataCreate) (fontDataDelete) $-      \fdata -> bracket (fontDialogCreate parent fdata) (windowDestroy) $-                   \fd -> do r <- dialogShowModal fd-                             if (r /= wxID_OK)-                               then return Nothing-                               else bracket (fontDataGetChosenFont fdata) (fontDelete) $-                                     \font -> do info <- fontGetFontInfo font-                                                 return (Just info)--}---- | Show a color selection dialog given an initial color. Returns 'Nothing' when cancel was pressed.-colorDialog :: Window a -> Color -> IO (Maybe Color)-colorDialog parent color-  = do c <- getColourFromUser parent color-       if (colorIsOk c)-        then return (Just c)-        else return Nothing---- | Retrieve a password from a user. Returns the empty string on cancel. Usage:------ > passwordDialog window message caption defaultText----passwordDialog :: Window a -> String -> String -> String -> IO String-passwordDialog parent message caption defaultText-  = getPasswordFromUser message caption defaultText parent---- | Retrieve a text string from a user. Returns the empty string on cancel. Usage:------ > textDialog window message caption defaultText----textDialog :: Window a -> String -> String -> String -> IO String-textDialog parent message caption defaultText-  = getTextFromUser message caption defaultText parent pointNull False---- | Retrieve a /positive/ number from a user. Returns 'Nothing' on cancel. Usage:------ > numberDialog window message prompt caption initialValue minimum maximum----numberDialog ::  Window a -> String -> String -> String -> Int -> Int -> Int -> IO (Maybe Int)-numberDialog parent message prompt caption value minval maxval-  = let minval' = if minval < 0 then 0 else minval-        maxval' = if maxval < minval' then minval' else maxval-        value'  | value < minval'  = minval'-                | value > maxval'  = maxval'-                | otherwise        = value-    in do i <- getNumberFromUser message prompt caption value' minval' maxval' parent pointNull-          if (i == -1)-           then return Nothing-           else return (Just i)------ | Show a modal directory dialog. Usage:------ > dirOpenDialog parent allowNewDir message directory------ The @allowNewDir@ argument determines whether the user can create new directories and edit--- directory names. The @message@ is displayed on top of the dialog and @directory@ is the--- default directory (or empty for the current directory). Return 'Nothing' when the users--- presses the cancel button.-dirOpenDialog :: Window a -> Bool -> FilePath -> FilePath -> IO (Maybe FilePath)-dirOpenDialog parent allowNewDir message directory-  = bracket-      (dirDialogCreate parent message directory pointNull flags)-      (windowDestroy)-      (\dd -> do r <- dialogShowModal dd-                 if (r /= wxID_OK)-                  then return Nothing-                  else do path <- dirDialogGetPath dd-                          return (Just path))-  where-    flags-      = if allowNewDir then 0x80 {- wxDD_NEW_DIR_BUTTON -} else 0----- | An dialog with an /Ok/ and /Cancel/ button. Returns 'True' when /Ok/ is pressed.------ > proceedDialog parent "Error" "Do you want to debug this application?"----proceedDialog :: Window a -> String -> String -> IO Bool-proceedDialog parent caption msg-  = do r <- messageDialog parent caption msg (wxOK .+. wxCANCEL .+. wxICON_EXCLAMATION)-       return (r==wxID_OK)---- | The expression (@confirmDialog caption msg yesDefault parent@) shows a confirm dialog--- with a /Yes/ and /No/ button. If @yesDefault@ is 'True', the /Yes/ button is default,--- otherwise the /No/ button. Returns 'True' when the /Yes/ button was pressed.------ > yes <- confirmDialog parent "confirm" "are you sure that you want to reformat the hardisk?"----confirmDialog :: Window a -> String -> String -> Bool -> IO Bool-confirmDialog  parent caption msg yesDefault-  = do r <- messageDialog parent caption msg-              (wxYES_NO .+. (if yesDefault then wxYES_DEFAULT else wxNO_DEFAULT) .+. wxICON_QUESTION)-       return (r==wxID_YES)---- | An warning dialog with a single /Ok/ button.------ > warningDialog parent "warning" "you need a break"----warningDialog :: Window a -> String -> String -> IO ()-warningDialog  parent caption msg-  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_EXCLAMATION))---- | An error dialog with a single /Ok/ button.------ > errorDialog parent "error" "fatal error, please re-install windows"----errorDialog :: Window a -> String -> String -> IO ()-errorDialog parent caption msg-  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_HAND))---- | An information dialog with a single /Ok/ button.------ > infoDialog parent "info" "you've got mail"----infoDialog :: Window a -> String -> String -> IO ()-infoDialog parent caption msg-  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_INFORMATION))---- | A primitive message dialog, specify icons and buttons.------ > r <- messageDialog w "Confirm" "Do you really want that?"--- >                       (wxYES_NO .+. wxNO_DEFAULT .+. wxICON_QUESTION)----messageDialog :: Window a -> String -> String -> BitFlag -> IO BitFlag-messageDialog parent caption msg flags-  = do m <- messageDialogCreate parent msg caption flags-       r <- messageDialogShowModal m-       messageDialogDelete m-       return r+--------------------------------------------------------------------------------
+{-|	Module      :  Dialogs
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Standard dialogs and (non modal) tip windows.
+-}
+--------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Dialogs
+    ( 
+    -- * Messages
+      errorDialog, warningDialog, infoDialog
+    , confirmDialog, proceedDialog
+    -- ** Non-modal
+    , tipWindowMessage, tipWindowMessageBounded
+
+    -- * Files
+    , fileOpenDialog
+    , filesOpenDialog
+    , fileSaveDialog
+    , dirOpenDialog
+    -- * Misc
+    , fontDialog
+    , colorDialog
+    , passwordDialog
+    , textDialog
+    , numberDialog
+    -- * Internal
+    , messageDialog
+    , fileDialog
+    ) where
+
+import Data.List( intersperse )
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Draw
+
+
+-- | Opens a non-modal tip window with a text. The window is closed automatically
+-- when the user clicks the window or when it loses the focus.
+tipWindowMessage :: Window a -> String -> IO ()
+tipWindowMessage parent message
+  = do tipWindowCreate parent message 100
+       return ()
+
+-- | Opens a non-modal tip window with a text. The window is closed automatically
+-- when the mouse leaves the specified area, or when the user clicks the window,
+-- or when the window loses the focus.
+tipWindowMessageBounded :: Window a -> String -> Rect -> IO ()
+tipWindowMessageBounded parent message boundingBox
+  = do tipWindow <- tipWindowCreate parent message 100
+       tipWindowSetBoundingRect tipWindow boundingBox
+       return ()
+
+-- | Opens a dialog that lets the user select multiple files. See 'fileOpenDialog' for a description
+-- of the arguments. Returns the empty list when the user selected no files or pressed the cancel button.
+filesOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO [FilePath]
+filesOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename
+  = fileDialog parent result flags message wildcards directory filename
+  where
+    flags
+      = wxOPEN .+. wxMULTIPLE
+         .+. (if rememberCurrentDir then wxCHANGE_DIR else 0)
+         .+. (if allowReadOnly then 0 else wxHIDE_READONLY)
+
+    result fd r
+      = if (r /= wxID_OK)
+         then return []
+         else fileDialogGetPaths fd
+
+-- | Show a modal file selection dialog. Usage:
+--
+-- > fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename
+--
+-- If @rememberCurrentDir@ is 'True', the library changes the current directory to the one where the
+-- files were chosen. @allowReadOnly@ determines whether the read-only files can be selected. The @message@
+-- is displayed on top of the dialog. The @directory@ is the default directory (use the empty string for
+-- the current directory). The @filename@ is the default file name. The @wildcards@ determine the entries
+-- in the file selection box. It consists of a list of pairs: the first element is a description (@"Image files"@)
+-- and the second element a list of wildcard patterns (@["*.bmp","*.gif"]@).
+--
+-- > fileOpenDialog frame True True "Open image" [("Any file",["*.*"]),("Bitmaps",["*.bmp"])] "" ""
+--
+-- Returns 'Nothing' when the user presses the cancel button.
+fileOpenDialog  :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)
+fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename
+  = fileDialog parent result flags message wildcards directory filename
+  where
+    flags
+      = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if allowReadOnly then 0 else wxHIDE_READONLY)
+
+    result fd r
+      = if (r /= wxID_OK)
+         then return Nothing
+         else do fname <- fileDialogGetPath fd
+                 return (Just fname)
+
+-- | Show a modal file save dialog. Usage:
+--
+-- > fileSaveDialog parent rememberCurrentDir overwritePrompt message directory filename
+--
+-- The @overwritePrompt@ argument determines whether the user gets a prompt for confirmation when
+-- overwriting a file. The other arguments are as in 'fileOpenDialog'.
+fileSaveDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)
+fileSaveDialog parent rememberCurrentDir overwritePrompt message wildcards directory filename
+  = fileDialog parent result flags message wildcards directory filename
+  where
+    flags
+      = wxSAVE .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if overwritePrompt then wxOVERWRITE_PROMPT else 0)
+
+    result fd r
+      = if (r /= wxID_OK)
+         then return Nothing
+         else do fname <- fileDialogGetPath fd
+                 return (Just fname)
+
+
+-- | Generic file dialog function. Takes a function that is called when the dialog is
+-- terminated, style flags, a message, a list of wildcards, a directory, and a file name.
+-- For example:
+-- 
+-- > fileOpenDialog  
+-- >   = fileDialog parent result flags message wildcards directory filename
+-- >   where
+-- >     flags
+-- >      = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) 
+-- >        .+. (if allowReadOnly then 0 else wxHIDE_READONLY)
+-- >
+-- >    result fd r
+-- >      = if (r /= wxID_OK)
+-- >         then return Nothing
+-- >         else do fname <- fileDialogGetPath fd
+-- >                 return (Just fname)
+
+fileDialog :: Window a -> (FileDialog () -> Int -> IO b) -> Int -> String -> [(String,[String])] -> FilePath -> FilePath -> IO b
+fileDialog parent processResult flags message wildcards directory filename
+  = bracket
+     (fileDialogCreate parent message directory filename (formatWildCards wildcards) pointNull flags)
+     (windowDestroy)
+     (\fd -> do r <- dialogShowModal fd
+                processResult fd r)
+
+  where
+    formatWildCards wildcards
+      = concat (intersperse "|"
+        [desc ++ "|" ++ concat (intersperse ";" patterns) | (desc,patterns) <- wildcards])
+
+
+-- | Show a font selection dialog with a given initial font. Returns 'Nothing' when cancel was pressed.
+fontDialog :: Window a -> FontStyle -> IO (Maybe FontStyle)
+fontDialog parent fontStyle
+  = withFontStyle fontStyle $ \font ->
+    bracket (getFontFromUser parent font)
+            (fontDelete)
+            (\f -> do ok <- fontIsOk f
+                      if ok
+                       then do info <- fontGetFontStyle f
+                               return (Just info)
+                       else return Nothing)
+
+{-
+  bracket (fontDataCreate) (fontDataDelete) $
+      \fdata -> bracket (fontDialogCreate parent fdata) (windowDestroy) $
+                   \fd -> do r <- dialogShowModal fd
+                             if (r /= wxID_OK)
+                               then return Nothing
+                               else bracket (fontDataGetChosenFont fdata) (fontDelete) $
+                                     \font -> do info <- fontGetFontInfo font
+                                                 return (Just info)
+-}
+
+-- | Show a color selection dialog given an initial color. Returns 'Nothing' when cancel was pressed.
+colorDialog :: Window a -> Color -> IO (Maybe Color)
+colorDialog parent color
+  = do c <- getColourFromUser parent color
+       if (colorIsOk c)
+        then return (Just c)
+        else return Nothing
+
+-- | Retrieve a password from a user. Returns the empty string on cancel. Usage:
+--
+-- > passwordDialog window message caption defaultText
+--
+passwordDialog :: Window a -> String -> String -> String -> IO String
+passwordDialog parent message caption defaultText
+  = getPasswordFromUser message caption defaultText parent
+
+-- | Retrieve a text string from a user. Returns the empty string on cancel. Usage:
+--
+-- > textDialog window message caption defaultText
+--
+textDialog :: Window a -> String -> String -> String -> IO String
+textDialog parent message caption defaultText
+  = getTextFromUser message caption defaultText parent pointNull False
+
+-- | Retrieve a /positive/ number from a user. Returns 'Nothing' on cancel. Usage:
+--
+-- > numberDialog window message prompt caption initialValue minimum maximum
+--
+numberDialog ::  Window a -> String -> String -> String -> Int -> Int -> Int -> IO (Maybe Int)
+numberDialog parent message prompt caption value minval maxval
+  = let minval' = if minval < 0 then 0 else minval
+        maxval' = if maxval < minval' then minval' else maxval
+        value'  | value < minval'  = minval'
+                | value > maxval'  = maxval'
+                | otherwise        = value
+    in do i <- getNumberFromUser message prompt caption value' minval' maxval' parent pointNull
+          if (i == -1)
+           then return Nothing
+           else return (Just i)
+
+
+
+-- | Show a modal directory dialog. Usage:
+--
+-- > dirOpenDialog parent allowNewDir message directory
+--
+-- The @allowNewDir@ argument determines whether the user can create new directories and edit
+-- directory names. The @message@ is displayed on top of the dialog and @directory@ is the
+-- default directory (or empty for the current directory). Return 'Nothing' when the users
+-- presses the cancel button.
+dirOpenDialog :: Window a -> Bool -> FilePath -> FilePath -> IO (Maybe FilePath)
+dirOpenDialog parent allowNewDir message directory
+  = bracket
+      (dirDialogCreate parent message directory pointNull flags)
+      (windowDestroy)
+      (\dd -> do r <- dialogShowModal dd
+                 if (r /= wxID_OK)
+                  then return Nothing
+                  else do path <- dirDialogGetPath dd
+                          return (Just path))
+  where
+    flags
+      = if allowNewDir then 0x80 {- wxDD_NEW_DIR_BUTTON -} else 0
+
+
+-- | An dialog with an /Ok/ and /Cancel/ button. Returns 'True' when /Ok/ is pressed.
+--
+-- > proceedDialog parent "Error" "Do you want to debug this application?"
+--
+proceedDialog :: Window a -> String -> String -> IO Bool
+proceedDialog parent caption msg
+  = do r <- messageDialog parent caption msg (wxOK .+. wxCANCEL .+. wxICON_EXCLAMATION)
+       return (r==wxID_OK)
+
+-- | The expression (@confirmDialog caption msg yesDefault parent@) shows a confirm dialog
+-- with a /Yes/ and /No/ button. If @yesDefault@ is 'True', the /Yes/ button is default,
+-- otherwise the /No/ button. Returns 'True' when the /Yes/ button was pressed.
+--
+-- > yes <- confirmDialog parent "confirm" "are you sure that you want to reformat the hardisk?"
+--
+confirmDialog :: Window a -> String -> String -> Bool -> IO Bool
+confirmDialog  parent caption msg yesDefault
+  = do r <- messageDialog parent caption msg
+              (wxYES_NO .+. (if yesDefault then wxYES_DEFAULT else wxNO_DEFAULT) .+. wxICON_QUESTION)
+       return (r==wxID_YES)
+
+-- | An warning dialog with a single /Ok/ button.
+--
+-- > warningDialog parent "warning" "you need a break"
+--
+warningDialog :: Window a -> String -> String -> IO ()
+warningDialog  parent caption msg
+  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_EXCLAMATION))
+
+-- | An error dialog with a single /Ok/ button.
+--
+-- > errorDialog parent "error" "fatal error, please re-install windows"
+--
+errorDialog :: Window a -> String -> String -> IO ()
+errorDialog parent caption msg
+  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_HAND))
+
+-- | An information dialog with a single /Ok/ button.
+--
+-- > infoDialog parent "info" "you've got mail"
+--
+infoDialog :: Window a -> String -> String -> IO ()
+infoDialog parent caption msg
+  = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_INFORMATION))
+
+-- | A primitive message dialog, specify icons and buttons.
+--
+-- > r <- messageDialog w "Confirm" "Do you really want that?"
+-- >                       (wxYES_NO .+. wxNO_DEFAULT .+. wxICON_QUESTION)
+--
+messageDialog :: Window a -> String -> String -> BitFlag -> IO BitFlag
+messageDialog parent caption msg flags
+  = do m <- messageDialogCreate parent msg caption flags
+       r <- messageDialogShowModal m
+       messageDialogDelete m
+       return r
src/haskell/Graphics/UI/WXCore/DragAndDrop.hs view
@@ -1,94 +1,94 @@-------------------------------------------------------------------------------------------{-|	Module      :  DragAndDrop-	Copyright   :  (c) shelarcy 2007-	License     :  wxWidgets--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Drag & Drop events.--}--------------------------------------------------------------------------------------------module Graphics.UI.WXCore.DragAndDrop (-        -- * Drop Targets-          dropTarget--        -- * Create Drop Soruces-        , dropSource-        , dropSourceWithCursor-        , dropSourceWithCursorByString-        , dropSourceWithIcon-        ) where--import Graphics.UI.WXCore.Defines-import Graphics.UI.WXCore.Events-import Graphics.UI.WXCore.Image-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcObject-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcClassTypes-import Graphics.UI.WXCore.WxcClassesAL-import Graphics.UI.WXCore.WxcClassesMZ--import Foreign.Ptr-import Foreign.C.String-import Foreign.Marshal.Array---{---------------------------------------------------------------------------------  Drop Target---------------------------------------------------------------------------------}--- | Set a drop target window and 'DataObject' that is associated with drop event.-dropTarget :: Window a -> DataObject b -> IO (WXCDropTarget  ())-dropTarget window wxdata = do-    drop <- wxcDropTargetCreate nullPtr-    dropTargetSetDataObject drop wxdata-    windowSetDropTarget window drop-    return drop---- | Create 'DropSource'. Then 'dragAndDrop' replace target\'s 'DataObject' by this 'DataObject'.-dropSource :: DataObject a -> Window b -> IO (DropSource ())-dropSource wxdata win =-    withObjectPtr nullIcon $ \icon ->-    withObjectPtr nullIcon $ \icon ->-    withObjectPtr nullIcon $ \icon ->-    dropSourceCreate wxdata win icon icon icon---- | On Windows or Mac OS X platform, you must choose this function or 'dropSourceWithCursorByString',--- if you want to use Custom Cursor for Drag & Drop event. 'dropSourceWithIcon' doesn't work these--- platform, and this function doesn't work other platforms.-dropSourceWithCursor :: DataObject a -> Window b -> Cursor c -> Cursor c -> Cursor c -> IO (DropSource ())-dropSourceWithCursor wxdata win copy move none =-    withObjectPtr copy $ \dndCopy ->-    withObjectPtr move $ \dndMove ->-    withObjectPtr none $ \dndNone ->-    dropSourceCreate wxdata win dndCopy dndMove dndNone--dropSourceWithIcon :: DataObject a -> Window b -> Icon c -> Icon c -> Icon c -> IO (DropSource ())-dropSourceWithIcon wxdata win copy move none =-    withObjectPtr copy $ \dndCopy ->-    withObjectPtr move $ \dndMove ->-    withObjectPtr none $ \dndNone ->-    dropSourceCreate wxdata win dndCopy dndMove dndNone--dropSourceWithCursorByString :: DataObject a -> Window b -> String -> String -> String -> IO (DropSource ())-dropSourceWithCursorByString wxdata win copy move none =-   case wxToolkit of-     WxMSW -> do-         dndCopy <- cursorCreateFromFile copy-         dndMove <- cursorCreateFromFile move-         dndNone <- cursorCreateFromFile none-         dropSourceWithCursor wxdata win dndCopy dndMove dndNone-     WxMac -> do-         dndCopy <- cursorCreateFromFile copy-         dndMove <- cursorCreateFromFile move-         dndNone <- cursorCreateFromFile none-         dropSourceWithCursor wxdata win dndCopy dndMove dndNone-     _ -> do-         dndCopy <- iconCreateFromFile copy sizeNull-         dndMove <- iconCreateFromFile move sizeNull-         dndNone <- iconCreateFromFile none sizeNull-         dropSourceWithIcon wxdata win dndCopy dndMove dndNone-+-----------------------------------------------------------------------------------------
+{-|	Module      :  DragAndDrop
+	Copyright   :  (c) shelarcy 2007
+	License     :  wxWidgets
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Drag & Drop events.
+-}
+-----------------------------------------------------------------------------------------
+
+module Graphics.UI.WXCore.DragAndDrop (
+        -- * Drop Targets
+          dropTarget
+
+        -- * Create Drop Soruces
+        , dropSource
+        , dropSourceWithCursor
+        , dropSourceWithCursorByString
+        , dropSourceWithIcon
+        ) where
+
+import Graphics.UI.WXCore.Defines
+import Graphics.UI.WXCore.Events
+import Graphics.UI.WXCore.Image
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcObject
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcClassTypes
+import Graphics.UI.WXCore.WxcClassesAL
+import Graphics.UI.WXCore.WxcClassesMZ
+
+import Foreign.Ptr
+import Foreign.C.String
+import Foreign.Marshal.Array
+
+
+{--------------------------------------------------------------------------------
+  Drop Target
+--------------------------------------------------------------------------------}
+-- | Set a drop target window and 'DataObject' that is associated with drop event.
+dropTarget :: Window a -> DataObject b -> IO (WXCDropTarget  ())
+dropTarget window wxdata = do
+    drop <- wxcDropTargetCreate nullPtr
+    dropTargetSetDataObject drop wxdata
+    windowSetDropTarget window drop
+    return drop
+
+-- | Create 'DropSource'. Then 'dragAndDrop' replace target\'s 'DataObject' by this 'DataObject'.
+dropSource :: DataObject a -> Window b -> IO (DropSource ())
+dropSource wxdata win =
+    withObjectPtr nullIcon $ \icon ->
+    withObjectPtr nullIcon $ \icon ->
+    withObjectPtr nullIcon $ \icon ->
+    dropSourceCreate wxdata win icon icon icon
+
+-- | On Windows or Mac OS X platform, you must choose this function or 'dropSourceWithCursorByString',
+-- if you want to use Custom Cursor for Drag & Drop event. 'dropSourceWithIcon' doesn't work these
+-- platform, and this function doesn't work other platforms.
+dropSourceWithCursor :: DataObject a -> Window b -> Cursor c -> Cursor c -> Cursor c -> IO (DropSource ())
+dropSourceWithCursor wxdata win copy move none =
+    withObjectPtr copy $ \dndCopy ->
+    withObjectPtr move $ \dndMove ->
+    withObjectPtr none $ \dndNone ->
+    dropSourceCreate wxdata win dndCopy dndMove dndNone
+
+dropSourceWithIcon :: DataObject a -> Window b -> Icon c -> Icon c -> Icon c -> IO (DropSource ())
+dropSourceWithIcon wxdata win copy move none =
+    withObjectPtr copy $ \dndCopy ->
+    withObjectPtr move $ \dndMove ->
+    withObjectPtr none $ \dndNone ->
+    dropSourceCreate wxdata win dndCopy dndMove dndNone
+
+dropSourceWithCursorByString :: DataObject a -> Window b -> String -> String -> String -> IO (DropSource ())
+dropSourceWithCursorByString wxdata win copy move none =
+   case wxToolkit of
+     WxMSW -> do
+         dndCopy <- cursorCreateFromFile copy
+         dndMove <- cursorCreateFromFile move
+         dndNone <- cursorCreateFromFile none
+         dropSourceWithCursor wxdata win dndCopy dndMove dndNone
+     WxMac -> do
+         dndCopy <- cursorCreateFromFile copy
+         dndMove <- cursorCreateFromFile move
+         dndNone <- cursorCreateFromFile none
+         dropSourceWithCursor wxdata win dndCopy dndMove dndNone
+     _ -> do
+         dndCopy <- iconCreateFromFile copy sizeNull
+         dndMove <- iconCreateFromFile move sizeNull
+         dndNone <- iconCreateFromFile none sizeNull
+         dropSourceWithIcon wxdata win dndCopy dndMove dndNone
+
src/haskell/Graphics/UI/WXCore/Draw.hs view
@@ -1,847 +1,850 @@-------------------------------------------------------------------------------------------{-|	Module      :  Draw-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Drawing.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Draw-        (-        -- * DC-          drawLines, drawPolygon, getTextExtent, getFullTextExtent, dcClearRect-        -- ** Creation-        , withPaintDC, withClientDC, dcDraw-        , withSVGFileDC, withSVGFileDCWithSize, withSVGFileDCWithSizeAndResolution-        -- ** Draw state-        , DrawState, dcEncapsulate, dcGetDrawState, dcSetDrawState, drawStateDelete-        -- ** Double buffering-        , dcBuffer, dcBufferWithRef, dcBufferWithRefEx-        -- * Scrolled windows-        , windowGetViewStart, windowGetViewRect, windowCalcUnscrolledPosition-        -- * Font-        , FontStyle(..), FontFamily(..), FontShape(..), FontWeight(..)-        , fontDefault, fontSwiss, fontSmall, fontItalic, fontFixed-        , withFontStyle, dcWithFontStyle-        , dcSetFontStyle, dcGetFontStyle-        , fontCreateFromStyle, fontGetFontStyle-        -- * Brush-        , BrushStyle(..), BrushKind(..)-        , HatchStyle(..)-        , brushDefault, brushSolid, brushTransparent-        , dcSetBrushStyle, dcGetBrushStyle-        , withBrushStyle, dcWithBrushStyle, dcWithBrush-        , brushCreateFromStyle, brushGetBrushStyle-        -- * Pen-        , PenStyle(..), PenKind(..), CapStyle(..), JoinStyle(..), DashStyle(..)-        , penDefault, penColored, penTransparent-        , dcSetPenStyle, dcGetPenStyle-        , withPenStyle, dcWithPenStyle, dcWithPen-        , penCreateFromStyle, penGetPenStyle-        ) where--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines--import Foreign.Marshal.Array-import Foreign.Storable-import Foreign.Marshal.Alloc---{---------------------------------------------------------------------------------  DC creation---------------------------------------------------------------------------------}--- | Safely perform a drawing operation on a DC.-dcDraw :: DC a -> IO b -> IO b-dcDraw dc io-  = bracket_ (do dcSetPenStyle dc penDefault-                 dcSetBrushStyle dc brushDefault) -             (do dcSetPen dc nullPen-                 dcSetBrush dc nullBrush) -             io---- | Use a 'PaintDC'.-withPaintDC :: Window a -> (PaintDC () -> IO b) -> IO b-withPaintDC window draw-  = bracket (paintDCCreate window) (paintDCDelete) (\dc -> dcDraw dc (draw dc))---- | Use a 'ClientDC'.-withClientDC :: Window a -> (ClientDC () -> IO b) -> IO b-withClientDC window draw-  = bracket (clientDCCreate window) (clientDCDelete) (\dc -> dcDraw dc (draw dc))---- | Use a 'SVGFileDC'.-withSVGFileDC :: FilePath -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDC fname draw-  = bracket (svgFileDCCreate fname) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))--withSVGFileDCWithSize :: FilePath -> Size -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDCWithSize fname size draw-  = bracket (svgFileDCCreateWithSize fname size) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))--withSVGFileDCWithSizeAndResolution :: FilePath -> Size -> Float -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDCWithSizeAndResolution fname size dpi draw-  = bracket (svgFileDCCreateWithSizeAndResolution fname size dpi) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))----- | Clear a specific rectangle with the current background brush.--- This is preferred to 'dcClear' for scrolled windows as 'dcClear' sometimes--- only clears the original view area, instead of the currently visible scrolled area.--- Unfortunately, the background brush is not set correctly on wxMAC 2.4, and --- this will always clear to a white color on mac systems.-dcClearRect :: DC a -> Rect -> IO ()-dcClearRect dc r-  = bracket (dcGetBackground dc)-            (brushDelete)-            (\brush -> dcWithBrush dc brush $-                         dcWithPenStyle dc penTransparent $ -                           dcDrawRectangle dc r)---- | Fill a rectangle with a certain color.-dcFillRect :: DC a -> Rect -> Color -> IO ()-dcFillRect dc r color-  = dcWithBrushStyle dc (brushSolid color) $-     dcWithPenStyle dc penTransparent $-      dcDrawRectangle dc r--{---------------------------------------------------------------------------------  Windows---------------------------------------------------------------------------------}--- | Get logical view rectangle, adjusted for scrolling.-windowGetViewRect :: Window a -> IO Rect-windowGetViewRect window-  = do size <- windowGetClientSize window-       org  <- windowGetViewStart window-       return (rect org size)---- | Get logical view start, adjusted for scrolling.-windowGetViewStart :: Window a -> IO Point-windowGetViewStart window-  = do isScrolled <- objectIsScrolledWindow window-       -- adjust coordinates for a scrolled window-       if (isScrolled)-        then do let scrolledWindow = objectCast window-                (Point sx sy) <- scrolledWindowGetViewStart scrolledWindow-                (Point w h)   <- scrolledWindowGetScrollPixelsPerUnit scrolledWindow-                return (Point (w*sx) (h*sy))-        else return pointZero---- | Get logical coordinates adjusted for scrolling.-windowCalcUnscrolledPosition :: Window a -> Point -> IO Point-windowCalcUnscrolledPosition window p-  = do isScrolled <- objectIsScrolledWindow window-       -- adjust coordinates for a scrolled window-       if (isScrolled)-        then do let scrolledWindow = objectCast window-                scrolledWindowCalcUnscrolledPosition scrolledWindow p-        else return p--{---------------------------------------------------------------------------------  Font---------------------------------------------------------------------------------}----- | Font descriptor. The font is normally specified thru the 'FontFamily', giving--- some degree of portability. The '_fontFace' can be used to specify the exact (platform--- dependent) font. ------ Note that the original wxWidgets @FontStyle@ is renamed to @FontShape@.-data FontStyle-  = FontStyle{ _fontSize      :: !Int-             , _fontFamily    :: !FontFamily-             , _fontShape     :: !FontShape-             , _fontWeight    :: !FontWeight-             , _fontUnderline :: !Bool-             , _fontFace      :: !String       -- ^ normally @\"\"@-             , _fontEncoding  :: !Int          -- ^ normally @wxFONTENCODING_DEFAULT@-             }-  deriving (Eq,Show)---- | Default 10pt font.-fontDefault :: FontStyle-fontDefault-  = FontStyle 10 FontDefault ShapeNormal WeightNormal False "" wxFONTENCODING_DEFAULT---- | Default 10pt sans-serif font.-fontSwiss :: FontStyle-fontSwiss-  = fontDefault{ _fontFamily = FontSwiss }---- | Default 8pt font.-fontSmall :: FontStyle-fontSmall-  = fontDefault{ _fontSize = 8 }---- | Default 10pt italic.-fontItalic :: FontStyle-fontItalic-  = fontDefault{ _fontShape = ShapeItalic }---- | Monospaced font, 10pt.-fontFixed :: FontStyle-fontFixed -  = fontDefault{ _fontFamily = FontModern }---- | Standard font families.-data FontFamily-  = FontDefault       -- ^ A system default font.-  | FontDecorative    -- ^ Decorative font.-  | FontRoman         -- ^ Formal serif font.-  | FontScript        -- ^ Hand writing font.-  | FontSwiss         -- ^ Sans-serif font.-  | FontModern        -- ^ Fixed pitch font.-  deriving (Eq,Show)---- | The font style.-data FontShape-  = ShapeNormal-  | ShapeItalic-  | ShapeSlant-  deriving (Eq,Show)---- | The font weight.-data FontWeight-  = WeightNormal-  | WeightBold-  | WeightLight-  deriving (Eq,Show)---- | Use a font that is automatically deleted at the end of the computation.-withFontStyle :: FontStyle -> (Font () -> IO a) -> IO a-withFontStyle fontStyle f-  = do (font,delete) <- fontCreateFromStyle fontStyle-       finally (f font) delete----- | Set a font that is automatically deleted at the end of the computation.-dcWithFontStyle :: DC a -> FontStyle -> IO b -> IO b-dcWithFontStyle dc fontStyle io-  = withFontStyle fontStyle $ \font ->-    bracket  (do oldFont <- dcGetFont dc-                 dcSetFont dc font-                 return oldFont)-             (\oldFont ->-              do dcSetFont dc oldFont   -- restore previous font-                 fontDelete oldFont)-             (const io)---- | Set the font info of a DC.-dcSetFontStyle :: DC a -> FontStyle -> IO ()-dcSetFontStyle dc info-  = do (font,del) <- fontCreateFromStyle info-       finalize del $-        do dcSetFont dc font---- | Get the current font info.-dcGetFontStyle :: DC a -> IO FontStyle-dcGetFontStyle dc-  = do font <- dcGetFont dc-       finalize (fontDelete font) $-        do fontGetFontStyle font----- | Create a 'Font' from 'FontStyle'. Returns both the font and a deletion procedure.-fontCreateFromStyle :: FontStyle -> IO (Font (),IO ())-fontCreateFromStyle (FontStyle size family style weight underline face encoding)-  = do font <- fontCreate size cfamily cstyle cweight underline face encoding-       return (font,when (font /= objectNull) (fontDelete font))-  where-    cfamily-      = case family of-          FontDefault     -> wxDEFAULT-          FontDecorative  -> wxDECORATIVE-          FontRoman       -> wxROMAN-          FontScript      -> wxSCRIPT-          FontSwiss       -> wxSWISS-          FontModern      -> wxMODERN--    cstyle-      = case style of-          ShapeNormal     -> wxNORMAL-          ShapeItalic     -> wxITALIC-          ShapeSlant      -> wxSLANT--    cweight-      = case weight of-          WeightNormal    -> wxNORMAL-          WeightBold      -> wxBOLD-          WeightLight     -> wxLIGHT----- | Get the 'FontStyle' from a 'Font' object.-fontGetFontStyle :: Font () -> IO FontStyle-fontGetFontStyle font-  = if (objectIsNull font)-     then return fontDefault-     else do ok <- fontIsOk font-             if not ok-               then return fontDefault-               else do size    <- fontGetPointSize font-                       cfamily <- fontGetFamily font-                       cstyle  <- fontGetStyle font-                       cweight <- fontGetWeight font-                       cunderl <- fontGetUnderlined font-                       face    <- fontGetFaceName font-                       enc     <- fontGetEncoding font-                       return (FontStyle size (toFamily cfamily) (toStyle cstyle) -                                (toWeight cweight) -                                (cunderl /= 0) face enc)-   where-    toFamily f-      | f == wxDECORATIVE   = FontDecorative-      | f == wxROMAN        = FontRoman-      | f == wxSCRIPT       = FontScript-      | f == wxSWISS        = FontSwiss-      | f == wxMODERN       = FontModern-      | otherwise           = FontDefault--    toStyle s-      | s == wxITALIC       = ShapeItalic-      | s == wxSLANT        = ShapeSlant-      | otherwise           = ShapeNormal--    toWeight w-      | w == wxBOLD         = WeightBold-      | w == wxLIGHT        = WeightLight-      | otherwise           = WeightNormal---{---------------------------------------------------------------------------------  Pen---------------------------------------------------------------------------------}---- | Pen style.-data PenStyle-  = PenStyle { _penKind  :: !PenKind-             , _penColor :: !Color-             , _penWidth :: !Int-             , _penCap   :: !CapStyle-             , _penJoin  :: !JoinStyle -             }-  deriving (Eq,Show)---- | Pen kinds.-data PenKind-  = PenTransparent    -- ^ No edge.-  | PenSolid-  | PenDash   { _penDash   :: !DashStyle  }-  | PenHatch  { _penHatch  :: !HatchStyle }-  | PenStipple{ _penBitmap :: !(Bitmap ())}    -- ^ @_penColor@ is ignored-  deriving (Eq,Show)---- | Default pen (@PenStyle PenSolid black 1 CapRound JoinRound@)-penDefault :: PenStyle-penDefault-  = PenStyle PenSolid black 1 CapRound JoinRound---- | A solid pen with a certain color and width.-penColored :: Color -> Int -> PenStyle-penColored color width-  = penDefault{ _penColor = color, _penWidth = width }---- | A transparent pen.-penTransparent :: PenStyle-penTransparent-  = penDefault{ _penKind = PenTransparent }---- | Dash style-data DashStyle-  = DashDot-  | DashLong-  | DashShort-  | DashDotShort-  --  DashUser [Int]-  deriving (Eq,Show)---- | Cap style-data CapStyle-  = CapRound          -- ^ End points are rounded-  | CapProjecting-  | CapButt-  deriving (Eq,Show)---- | Join style.-data JoinStyle-  = JoinRound         -- ^ Corners are rounded-  | JoinBevel         -- ^ Corners are bevelled-  | JoinMiter         -- ^ Corners are blocked-  deriving (Eq,Show)---- | Hatch style.-data HatchStyle-  = HatchBDiagonal    -- ^ Backward diagonal-  | HatchCrossDiag    -- ^ Crossed diagonal-  | HatchFDiagonal    -- ^ Forward diagonal-  | HatchCross        -- ^ Crossed orthogonal-  | HatchHorizontal   -- ^ Horizontal-  | HatchVertical     -- ^ Vertical-  deriving (Eq,Show)---- | Brush style.-data BrushStyle-  = BrushStyle { _brushKind :: !BrushKind, _brushColor :: !Color }-  deriving (Eq,Show)---- | Brush kind.-data BrushKind-  = BrushTransparent                            -- ^ No filling-  | BrushSolid                                  -- ^ Solid color-  | BrushHatch  { _brushHatch  :: !HatchStyle }  -- ^ Hatch pattern-  | BrushStipple{ _brushBitmap :: !(Bitmap ())}  -- ^ Bitmap pattern (on win95 only 8x8 bitmaps are supported)-  deriving (Eq,Show)----- | Set a pen that is automatically deleted at the end of the computation.-dcWithPenStyle :: DC a -> PenStyle -> IO b -> IO b-dcWithPenStyle dc penStyle io-  = withPenStyle penStyle $ \pen ->-    dcWithPen dc pen io---- | Set a pen that is used during a certain computation.-dcWithPen :: DC a -> Pen p -> IO b -> IO b-dcWithPen dc pen io-  = bracket  (do oldPen <- dcGetPen dc-                 dcSetPen dc pen-                 return oldPen)-             (\oldPen ->-              do dcSetPen dc oldPen   -- restore previous pen-                 penDelete oldPen)-             (const io)----- | Set the current pen style. The text color is also adapted.-dcSetPenStyle :: DC a -> PenStyle -> IO ()-dcSetPenStyle dc penStyle-  = withPenStyle penStyle (dcSetPen dc)---- | Get the current pen style.-dcGetPenStyle :: DC a -> IO PenStyle-dcGetPenStyle dc-  = do pen <- dcGetPen dc-       finalize (penDelete pen) $ -         do penGetPenStyle pen---- | Use a pen that is automatically deleted at the end of the computation.-withPenStyle :: PenStyle -> (Pen () -> IO a) -> IO a-withPenStyle penStyle f-  = do (pen,delete) <- penCreateFromStyle penStyle-       finally (f pen) delete---- | Create a new pen from a 'PenStyle'. Returns both the pen and its deletion procedure.-penCreateFromStyle :: PenStyle -> IO (Pen (),IO ())-penCreateFromStyle penStyle-  = case penStyle of-      PenStyle PenTransparent color width cap join-        -> do pen <- penCreateFromStock 5 {- transparent -}-              return (pen,return ())-      PenStyle (PenDash DashShort) color 1 CapRound JoinRound  | color == black-        -> do pen <- penCreateFromStock 6 {- black dashed -}-              return (pen,return ())-      PenStyle PenSolid color 1 CapRound JoinRound-        -> case lookup color stockPens of-             Just idx -> do pen <- penCreateFromStock idx-                            return (pen,return ())-             Nothing  -> colorPen color 1 wxSOLID-      PenStyle PenSolid color width cap join-        -> colorPen color width wxSOLID-      PenStyle (PenDash dash) color width cap join-        -> case dash of-             DashDot  -> colorPen color width wxDOT-             DashLong -> colorPen color width wxLONG_DASH-             DashShort-> colorPen color width wxSHORT_DASH-             DashDotShort -> colorPen color width wxDOT_DASH-      PenStyle (PenStipple bitmap) color width cap join-        -> do pen <- penCreateFromBitmap bitmap width-              setCap pen-              setJoin pen-              return (pen,penDelete pen)-  where-    colorPen color width style-      = do pen <- penCreateFromColour color width style-           setCap pen-           setJoin pen-           return (pen,penDelete pen)--    setCap pen-      = case _penCap penStyle of-          CapRound      -> return ()-          CapProjecting -> penSetCap pen wxCAP_PROJECTING-          CapButt       -> penSetCap pen wxCAP_BUTT--    setJoin pen-      = case _penJoin penStyle of-          JoinRound     -> return ()-          JoinBevel     -> penSetJoin pen wxJOIN_BEVEL-          JoinMiter     -> penSetJoin pen wxJOIN_MITER--    stockPens-      = [(red,0),(cyan,1),(green,2)-        ,(black,3),(white,4)-        ,(grey,7),(lightgrey,9)-        ,(mediumgrey,8)-        ]---- | Create a 'PenStyle' from a 'Pen'.-penGetPenStyle :: Pen a -> IO PenStyle-penGetPenStyle pen-  = if (objectIsNull pen)-     then return penDefault-     else do ok <- penIsOk pen-             if not ok -              then return penDefault-              else do stl <- penGetStyle pen-                      toPenStyle stl-  where-    toPenStyle stl-      | stl == wxTRANSPARENT      = return penTransparent-      | stl == wxSOLID            = toPenStyleWithKind PenSolid-      | stl == wxDOT              = toPenStyleWithKind (PenDash DashDot)-      | stl == wxLONG_DASH        = toPenStyleWithKind (PenDash DashLong)-      | stl == wxSHORT_DASH       = toPenStyleWithKind (PenDash DashShort)-      | stl == wxDOT_DASH         = toPenStyleWithKind (PenDash DashDotShort)-      | stl == wxSTIPPLE          = do stipple <- penGetStipple pen-                                       toPenStyleWithKind (PenStipple stipple)-      | stl == wxBDIAGONAL_HATCH  = toPenStyleWithKind (PenHatch HatchBDiagonal)-      | stl == wxCROSSDIAG_HATCH  = toPenStyleWithKind (PenHatch HatchCrossDiag)-      | stl == wxFDIAGONAL_HATCH  = toPenStyleWithKind (PenHatch HatchFDiagonal)-      | stl == wxCROSS_HATCH      = toPenStyleWithKind (PenHatch HatchCross)-      | stl == wxHORIZONTAL_HATCH = toPenStyleWithKind (PenHatch HatchHorizontal)-      | stl == wxVERTICAL_HATCH   = toPenStyleWithKind (PenHatch HatchVertical)-      | otherwise                 = toPenStyleWithKind PenSolid-      -    toPenStyleWithKind kind-      = do width  <- penGetWidth pen-           color  <- penGetColour pen-           cap    <- penGetCap pen-           join   <- penGetJoin pen-           return (PenStyle kind color width (toCap cap) (toJoin join))--    toCap cap-      | cap == wxCAP_PROJECTING = CapProjecting-      | cap == wxCAP_BUTT       = CapButt-      | otherwise               = CapRound--    toJoin join-      | join == wxJOIN_MITER    = JoinMiter-      | join == wxJOIN_BEVEL    = JoinBevel-      | otherwise               = JoinRound---           -{---------------------------------------------------------------------------------  Brush---------------------------------------------------------------------------------}--- | Default brush (transparent, black).-brushDefault :: BrushStyle-brushDefault-  = BrushStyle BrushTransparent black----- | A solid brush of a specific color.-brushSolid :: Color -> BrushStyle-brushSolid color-  = BrushStyle BrushSolid color---- | A transparent brush.-brushTransparent :: BrushStyle-brushTransparent-  = BrushStyle BrushTransparent white--- | Use a brush that is automatically deleted at the end of the computation.-dcWithBrushStyle :: DC a -> BrushStyle -> IO b -> IO b-dcWithBrushStyle dc brushStyle io-  = withBrushStyle brushStyle $ \brush ->-    dcWithBrush dc brush io--dcWithBrush :: DC b -> Brush a -> IO c -> IO c-dcWithBrush dc brush io-  = bracket  (do oldBrush <- dcGetBrush dc-                 dcSetBrush dc brush-                 return oldBrush)-             (\oldBrush ->-              do dcSetBrush dc oldBrush -- restore previous brush-                 brushDelete oldBrush)-             (const io)---- | Set the brush style (and text background color) of a device context.-dcSetBrushStyle :: DC a -> BrushStyle -> IO ()-dcSetBrushStyle dc brushStyle-  = withBrushStyle brushStyle (dcSetBrush dc)-       --- | Get the current brush of a device context.-dcGetBrushStyle :: DC a -> IO BrushStyle-dcGetBrushStyle dc-  = do brush <- dcGetBrush dc-       finalize (brushDelete brush) $-        do brushGetBrushStyle brush----- | Use a brush that is automatically deleted at the end of the computation.-withBrushStyle :: BrushStyle -> (Brush () -> IO a) -> IO a-withBrushStyle brushStyle f-  = do (brush,delete) <- brushCreateFromStyle brushStyle-       finalize delete $ -        do f brush ---- | Create a new brush from a 'BrushStyle'. Returns both the brush and its deletion procedure.-brushCreateFromStyle :: BrushStyle -> IO (Brush (), IO ())-brushCreateFromStyle brushStyle-  = case brushStyle of-      BrushStyle BrushTransparent color-        -> do brush <- if (wxToolkit == WxMac)-	                then brushCreateFromColour color wxTRANSPARENT-			else brushCreateFromStock 7   {- transparent brush -}-              return (brush,return ())-      BrushStyle BrushSolid color-        -> case lookup color stockBrushes of-             Just idx  -> do brush <- brushCreateFromStock idx-                             return (brush,return ())-             Nothing   -> colorBrush color wxSOLID--      BrushStyle (BrushHatch HatchBDiagonal) color   -> colorBrush color wxBDIAGONAL_HATCH-      BrushStyle (BrushHatch HatchCrossDiag) color   -> colorBrush color wxCROSSDIAG_HATCH-      BrushStyle (BrushHatch HatchFDiagonal) color   -> colorBrush color wxFDIAGONAL_HATCH-      BrushStyle (BrushHatch HatchCross) color       -> colorBrush color wxCROSS_HATCH-      BrushStyle (BrushHatch HatchHorizontal) color  -> colorBrush color wxHORIZONTAL_HATCH-      BrushStyle (BrushHatch HatchVertical) color    -> colorBrush color wxVERTICAL_HATCH-      BrushStyle (BrushStipple bitmap) color         -> do brush <- brushCreateFromBitmap bitmap-                                                           return (brush, brushDelete brush)-  where-    colorBrush color style-      = do brush <- brushCreateFromColour color style-           return (brush, brushDelete brush )--    stockBrushes-      = [(blue,0),(green,1),(white,2)-        ,(black,3),(grey,4),(lightgrey,6)-        ,(cyan,8),(red,9)-        ,(mediumgrey,5)-        ]---- | Get the 'BrushStyle' of 'Brush'.-brushGetBrushStyle :: Brush a -> IO BrushStyle-brushGetBrushStyle brush-  = if (objectIsNull brush)-     then return brushDefault-     else do ok <- brushIsOk brush-             if not ok-              then return brushDefault-              else do stl   <- brushGetStyle brush-                      kind  <- toBrushKind stl-                      color <- brushGetColour brush-                      return (BrushStyle kind color)-  where-    toBrushKind stl-      | stl == wxTRANSPARENT      = return BrushTransparent-      | stl == wxSOLID            = return BrushSolid-      | stl == wxSTIPPLE          = do stipple <- brushGetStipple brush-                                       return (BrushStipple stipple)-      | stl == wxBDIAGONAL_HATCH  = return (BrushHatch HatchBDiagonal)-      | stl == wxCROSSDIAG_HATCH  = return (BrushHatch HatchCrossDiag)-      | stl == wxFDIAGONAL_HATCH  = return (BrushHatch HatchFDiagonal)-      | stl == wxCROSS_HATCH      = return (BrushHatch HatchCross)-      | stl == wxHORIZONTAL_HATCH = return (BrushHatch HatchHorizontal)-      | stl == wxVERTICAL_HATCH   = return (BrushHatch HatchVertical)-      | otherwise                 = return BrushTransparent----{---------------------------------------------------------------------------------  DC drawing state---------------------------------------------------------------------------------}--- | The drawing state (pen,brush,font,text color,text background color) of a device context.-data DrawState  = DrawState (Pen ()) (Brush ()) (Font ()) Color Color---- | Run a computation after which the original drawing state of the 'DC' is restored.-dcEncapsulate :: DC a -> IO b -> IO b-dcEncapsulate dc io-  = bracket (dcGetDrawState dc)-            (\drawState ->-             do dcSetDrawState dc drawState-                drawStateDelete drawState)-            (const io)---- | Get the drawing state. (Should be deleted with 'drawStateDelete').-dcGetDrawState     :: DC a -> IO DrawState-dcGetDrawState dc-  = do pen   <- dcGetPen dc-       brush <- dcGetBrush dc-       font  <- dcGetFont dc-       textc <- dcGetTextForeground dc-       backc <- dcGetTextBackground dc-       return (DrawState pen brush font textc backc)---- | Set the drawing state.-dcSetDrawState  :: DC a -> DrawState -> IO ()-dcSetDrawState dc (DrawState pen brush font textc backc)-  = do dcSetPen dc pen-       dcSetBrush dc brush-       dcSetFont dc font-       dcSetTextBackground dc backc-       dcSetTextForeground dc textc---- | Release the resources associated with a drawing state.-drawStateDelete :: DrawState -> IO ()-drawStateDelete (DrawState pen brush font _ _)-  = do penDelete pen-       brushDelete brush-       fontDelete font--{---------------------------------------------------------------------------------  DC utils---------------------------------------------------------------------------------}---- | Draw connected lines.-drawLines :: DC a -> [Point] -> IO ()-drawLines dc []  = return ()-drawLines dc ps-  = withArray xs $ \pxs ->-    withArray ys $ \pys ->-    dcDrawLines dc n pxs pys (pt 0 0)-  where-    n  = length ps-    xs = map pointX ps-    ys = map pointY ps----- | Draw a polygon. The polygon is filled with the odd-even rule.-drawPolygon :: DC a -> [Point] -> IO ()-drawPolygon dc []  = return ()-drawPolygon dc ps-  = withArray xs $ \pxs ->-    withArray ys $ \pys ->-    dcDrawPolygon dc n pxs pys (pt 0 0) wxODDEVEN_RULE-  where-    n  = length ps-    xs = map pointX ps-    ys = map pointY ps---- | Gets the dimensions of the string using the currently selected font.-getTextExtent :: DC a -> String -> IO Size-getTextExtent dc txt-  = do (sz,_,_) <- getFullTextExtent dc txt-       return sz---- | Gets the dimensions of the string using the currently selected font.--- Takes text string to measure, and returns the size, /descent/ and /external leading/.--- Descent is the dimension from the baseline of the font to the bottom of the descender--- , and external leading is any extra vertical space added to the font by the font designer (is usually zero).-getFullTextExtent :: DC a -> String -> IO (Size,Int,Int)-getFullTextExtent dc txt-  = alloca $ \px ->-    alloca $ \py ->-    alloca $ \pd ->-    alloca $ \pe ->-    do dcGetTextExtent dc txt px py pd pe objectNull-       x <- peek px-       y <- peek py-       d <- peek pd-       e <- peek pe-       return (sz (fromCInt x) (fromCInt y), fromCInt d, fromCInt e)---{---------------------------------------------------------------------------------  Double buffering---------------------------------------------------------------------------------}---- | Use double buffering to draw to a 'DC' -- reduces flicker. Note that--- the 'windowOnPaint' handler can already take care of buffering automatically.--- The rectangle argument is normally the view rectangle ('windowGetViewRect').--- Uses a 'MemoryDC' to draw into memory first and than blit the result to--- the device context. The memory area allocated is the minimal size necessary--- to accomodate the rectangle, but is re-allocated on each invokation.-dcBuffer :: DC a -> Rect -> (DC () -> IO ()) -> IO ()-dcBuffer dc r draw-  = dcBufferWithRef dc Nothing r draw---- | Optimized double buffering. Takes a possible reference to a bitmap. If it is--- 'Nothing', a new bitmap is allocated everytime. Otherwise, the reference is used--- to re-use an allocated bitmap if possible. The 'Rect' argument specifies the--- the current logical view rectangle. The last argument is called to draw on the--- memory 'DC'. -dcBufferWithRef :: DC a -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()-dcBufferWithRef dc mbVar viewArea draw-  = dcBufferWithRefEx dc (\dc -> dcClearRect dc viewArea) mbVar viewArea draw----- | Optimized double buffering. Takes a /clear/ routine as its first argument.--- Normally this is something like '\dc -> dcClearRect dc viewArea' but on certain platforms, like--- MacOS X, special handling is necessary.-dcBufferWithRefEx :: DC a -> (DC () -> IO ()) -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()-dcBufferWithRefEx dc clear mbVar view draw-  | rectSize view == sizeZero = return ()-dcBufferWithRefEx dc clear mbVar view draw-  = bracket (initBitmap)-            (doneBitmap)-            (\bitmap ->-             if (bitmap==objectNull)-              then drawUnbuffered-              else bracket (do p <- memoryDCCreateCompatible dc; return (objectCast p))-                           (\memdc -> when (memdc/=objectNull) (memoryDCDelete memdc))-                           (\memdc -> if (memdc==objectNull)-                                       then drawUnbuffered-                                       else do memoryDCSelectObject memdc bitmap-                                               drawBuffered memdc-                                               memoryDCSelectObject memdc nullBitmap-                           )-            )-    where-     initBitmap-       = case mbVar of-           Nothing  -> bitmapCreateEmpty (rectSize view) (-1)-           Just v   -> do bitmap <- varGet v-                          size   <- if (bitmap==objectNull)-                                     then return sizeZero-                                     else do bw <- bitmapGetWidth bitmap-                                             bh <- bitmapGetHeight bitmap-                                             return (Size bw bh)-                          -- re-use the bitmap if possible-                          if (sizeEncloses size (rectSize view) && bitmap /= objectNull)-                            then return bitmap-                            else do when (bitmap/=objectNull) (bitmapDelete bitmap)-                                    varSet v objectNull-                                    -- new size a bit larger to avoid multiple reallocs-                                    let (Size w h) = rectSize view-                                        neww       = div (w*105) 100-                                        newh       = div (h*105) 100-                                    bm <- bitmapCreateEmpty (sz neww newh) (-1)-                                    varSet v bm-                                    return bm--     doneBitmap bitmap-       = case mbVar of-           Nothing -> when (bitmap/=objectNull) (bitmapDelete bitmap)-           Just v  -> return ()---     drawUnbuffered-       = do clear (downcastDC dc)-            draw (downcastDC dc) -- down cast--     drawBuffered memdc-      = do -- set the device origin for scrolled windows-           dcSetDeviceOrigin memdc (pointFromVec (vecNegate (vecFromPoint (rectTopLeft view))))-           dcSetClippingRegion memdc view-           -- dcBlit memdc view dc (rectTopLeft view) wxCOPY False-	   bracket (dcGetBackground dc)-                   (\brush -> do dcSetBrush memdc nullBrush-                                 brushDelete brush)-                   (\brush -> do -- set the background to the owner brush-                                 dcSetBackground memdc brush-                                 if (wxToolkit == WxMac)-				  then withBrushStyle brushTransparent (dcSetBrush memdc)-				  else dcSetBrush memdc brush-                                 clear (downcastDC memdc)-				 -- and finally do the drawing!-                                 draw (downcastDC memdc) -- down cast-                   )-           -- blit the memdc into the owner dc.-           dcBlit dc view memdc (rectTopLeft view) wxCOPY False-           return ()+-----------------------------------------------------------------------------------------
+{-|	Module      :  Draw
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Drawing.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Draw
+        (
+        -- * DC
+          drawLines, drawPolygon, getTextExtent, getFullTextExtent, dcClearRect
+        -- ** Creation
+        , withPaintDC, withClientDC, dcDraw
+        , withSVGFileDC, withSVGFileDCWithSize, withSVGFileDCWithSizeAndResolution
+        -- ** Draw state
+        , DrawState, dcEncapsulate, dcGetDrawState, dcSetDrawState, drawStateDelete
+        -- ** Double buffering
+        , dcBuffer, dcBufferWithRef, dcBufferWithRefEx
+        -- * Scrolled windows
+        , windowGetViewStart, windowGetViewRect, windowCalcUnscrolledPosition
+        -- * Font
+        , FontStyle(..), FontFamily(..), FontShape(..), FontWeight(..)
+        , fontDefault, fontSwiss, fontSmall, fontItalic, fontFixed
+        , withFontStyle, dcWithFontStyle
+        , dcSetFontStyle, dcGetFontStyle
+        , fontCreateFromStyle, fontGetFontStyle
+        -- * Brush
+        , BrushStyle(..), BrushKind(..)
+        , HatchStyle(..)
+        , brushDefault, brushSolid, brushTransparent
+        , dcSetBrushStyle, dcGetBrushStyle
+        , withBrushStyle, dcWithBrushStyle, dcWithBrush
+        , brushCreateFromStyle, brushGetBrushStyle
+        -- * Pen
+        , PenStyle(..), PenKind(..), CapStyle(..), JoinStyle(..), DashStyle(..)
+        , penDefault, penColored, penTransparent
+        , dcSetPenStyle, dcGetPenStyle
+        , withPenStyle, dcWithPenStyle, dcWithPen
+        , penCreateFromStyle, penGetPenStyle
+        ) where
+
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.WxcClassInfo
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Defines
+
+import Foreign.Marshal.Array
+import Foreign.Storable
+import Foreign.Marshal.Alloc
+
+
+{--------------------------------------------------------------------------------
+  DC creation
+--------------------------------------------------------------------------------}
+-- | Safely perform a drawing operation on a DC.
+dcDraw :: DC a -> IO b -> IO b
+dcDraw dc io
+  = bracket_ (do dcSetPenStyle dc penDefault
+                 dcSetBrushStyle dc brushDefault) 
+             (do dcSetPen dc nullPen
+                 dcSetBrush dc nullBrush) 
+             io
+
+-- | Use a 'PaintDC'.
+withPaintDC :: Window a -> (PaintDC () -> IO b) -> IO b
+withPaintDC window draw
+  = bracket (paintDCCreate window) (paintDCDelete) (\dc -> dcDraw dc (draw dc))
+
+-- | Use a 'ClientDC'.
+withClientDC :: Window a -> (ClientDC () -> IO b) -> IO b
+withClientDC window draw
+  = bracket (clientDCCreate window) (clientDCDelete) (\dc -> dcDraw dc (draw dc))
+
+-- | Use a 'SVGFileDC'.
+withSVGFileDC :: FilePath -> (SVGFileDC () -> IO b) -> IO b
+withSVGFileDC fname draw
+  = bracket (svgFileDCCreate fname) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))
+
+withSVGFileDCWithSize :: FilePath -> Size -> (SVGFileDC () -> IO b) -> IO b
+withSVGFileDCWithSize fname size draw
+  = bracket (svgFileDCCreateWithSize fname size) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))
+
+withSVGFileDCWithSizeAndResolution :: FilePath -> Size -> Float -> (SVGFileDC () -> IO b) -> IO b
+withSVGFileDCWithSizeAndResolution fname size dpi draw
+  = bracket (svgFileDCCreateWithSizeAndResolution fname size dpi) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))
+
+
+-- | Clear a specific rectangle with the current background brush.
+-- This is preferred to 'dcClear' for scrolled windows as 'dcClear' sometimes
+-- only clears the original view area, instead of the currently visible scrolled area.
+-- Unfortunately, the background brush is not set correctly on wxMAC 2.4, and 
+-- this will always clear to a white color on mac systems.
+dcClearRect :: DC a -> Rect -> IO ()
+dcClearRect dc r
+  = bracket (dcGetBackground dc)
+            (brushDelete)
+            (\brush -> dcWithBrush dc brush $
+                         dcWithPenStyle dc penTransparent $ 
+                           dcDrawRectangle dc r)
+
+-- | Fill a rectangle with a certain color.
+dcFillRect :: DC a -> Rect -> Color -> IO ()
+dcFillRect dc r color
+  = dcWithBrushStyle dc (brushSolid color) $
+     dcWithPenStyle dc penTransparent $
+      dcDrawRectangle dc r
+
+{--------------------------------------------------------------------------------
+  Windows
+--------------------------------------------------------------------------------}
+-- | Get logical view rectangle, adjusted for scrolling.
+windowGetViewRect :: Window a -> IO Rect
+windowGetViewRect window
+  = do size <- windowGetClientSize window
+       org  <- windowGetViewStart window
+       return (rect org size)
+
+-- | Get logical view start, adjusted for scrolling.
+windowGetViewStart :: Window a -> IO Point
+windowGetViewStart window
+  = do isScrolled <- objectIsScrolledWindow window
+       -- adjust coordinates for a scrolled window
+       if (isScrolled)
+        then do let scrolledWindow = objectCast window
+                (Point sx sy) <- scrolledWindowGetViewStart scrolledWindow
+                (Point w h)   <- scrolledWindowGetScrollPixelsPerUnit scrolledWindow
+                return (Point (w*sx) (h*sy))
+        else return pointZero
+
+-- | Get logical coordinates adjusted for scrolling.
+windowCalcUnscrolledPosition :: Window a -> Point -> IO Point
+windowCalcUnscrolledPosition window p
+  = do isScrolled <- objectIsScrolledWindow window
+       -- adjust coordinates for a scrolled window
+       if (isScrolled)
+        then do let scrolledWindow = objectCast window
+                scrolledWindowCalcUnscrolledPosition scrolledWindow p
+        else return p
+
+{--------------------------------------------------------------------------------
+  Font
+--------------------------------------------------------------------------------}
+
+
+-- | Font descriptor. The font is normally specified thru the 'FontFamily', giving
+-- some degree of portability. The '_fontFace' can be used to specify the exact (platform
+-- dependent) font. 
+--
+-- Note that the original wxWidgets @FontStyle@ is renamed to @FontShape@.
+data FontStyle
+  = FontStyle{ _fontSize      :: !Int
+             , _fontFamily    :: !FontFamily
+             , _fontShape     :: !FontShape
+             , _fontWeight    :: !FontWeight
+             , _fontUnderline :: !Bool
+             , _fontFace      :: !String       -- ^ normally @\"\"@
+             , _fontEncoding  :: !Int          -- ^ normally @wxFONTENCODING_DEFAULT@
+             }
+  deriving (Eq,Show)
+
+-- | Default 10pt font.
+fontDefault :: FontStyle
+fontDefault
+  = FontStyle 10 FontDefault ShapeNormal WeightNormal False "" wxFONTENCODING_DEFAULT
+
+-- | Default 10pt sans-serif font.
+fontSwiss :: FontStyle
+fontSwiss
+  = fontDefault{ _fontFamily = FontSwiss }
+
+-- | Default 8pt font.
+fontSmall :: FontStyle
+fontSmall
+  = fontDefault{ _fontSize = 8 }
+
+-- | Default 10pt italic.
+fontItalic :: FontStyle
+fontItalic
+  = fontDefault{ _fontShape = ShapeItalic }
+
+-- | Monospaced font, 10pt.
+fontFixed :: FontStyle
+fontFixed 
+  = fontDefault{ _fontFamily = FontModern }
+
+-- | Standard font families.
+data FontFamily
+  = FontDefault       -- ^ A system default font.
+  | FontDecorative    -- ^ Decorative font.
+  | FontRoman         -- ^ Formal serif font.
+  | FontScript        -- ^ Hand writing font.
+  | FontSwiss         -- ^ Sans-serif font.
+  | FontModern        -- ^ Fixed pitch font.
+  | FontTeletype      -- ^ A teletype (i.e. monospaced) font
+  deriving (Eq,Show)
+
+-- | The font style.
+data FontShape
+  = ShapeNormal
+  | ShapeItalic
+  | ShapeSlant
+  deriving (Eq,Show)
+
+-- | The font weight.
+data FontWeight
+  = WeightNormal
+  | WeightBold
+  | WeightLight
+  deriving (Eq,Show)
+
+-- | Use a font that is automatically deleted at the end of the computation.
+withFontStyle :: FontStyle -> (Font () -> IO a) -> IO a
+withFontStyle fontStyle f
+  = do (font,delete) <- fontCreateFromStyle fontStyle
+       finally (f font) delete
+
+
+-- | Set a font that is automatically deleted at the end of the computation.
+dcWithFontStyle :: DC a -> FontStyle -> IO b -> IO b
+dcWithFontStyle dc fontStyle io
+  = withFontStyle fontStyle $ \font ->
+    bracket  (do oldFont <- dcGetFont dc
+                 dcSetFont dc font
+                 return oldFont)
+             (\oldFont ->
+              do dcSetFont dc oldFont   -- restore previous font
+                 fontDelete oldFont)
+             (const io)
+
+-- | Set the font info of a DC.
+dcSetFontStyle :: DC a -> FontStyle -> IO ()
+dcSetFontStyle dc info
+  = do (font,del) <- fontCreateFromStyle info
+       finalize del $
+        do dcSetFont dc font
+
+-- | Get the current font info.
+dcGetFontStyle :: DC a -> IO FontStyle
+dcGetFontStyle dc
+  = do font <- dcGetFont dc
+       finalize (fontDelete font) $
+        do fontGetFontStyle font
+
+
+-- | Create a 'Font' from 'FontStyle'. Returns both the font and a deletion procedure.
+fontCreateFromStyle :: FontStyle -> IO (Font (),IO ())
+fontCreateFromStyle (FontStyle size family style weight underline face encoding)
+  = do font <- fontCreate size cfamily cstyle cweight underline face encoding
+       return (font,when (font /= objectNull) (fontDelete font))
+  where
+    cfamily
+      = case family of
+          FontDefault     -> wxFONTFAMILY_DEFAULT
+          FontDecorative  -> wxFONTFAMILY_DECORATIVE
+          FontRoman       -> wxFONTFAMILY_ROMAN
+          FontScript      -> wxFONTFAMILY_SCRIPT
+          FontSwiss       -> wxFONTFAMILY_SWISS
+          FontModern      -> wxFONTFAMILY_MODERN
+          FontTeletype    -> wxFONTFAMILY_TELETYPE
+ 
+    cstyle
+      = case style of
+          ShapeNormal     -> wxFONTSTYLE_NORMAL
+          ShapeItalic     -> wxFONTSTYLE_ITALIC
+          ShapeSlant      -> wxFONTSTYLE_SLANT
+
+    cweight
+      = case weight of
+          WeightNormal    -> wxFONTWEIGHT_NORMAL
+          WeightBold      -> wxFONTWEIGHT_BOLD
+          WeightLight     -> wxFONTWEIGHT_LIGHT
+
+
+-- | Get the 'FontStyle' from a 'Font' object.
+fontGetFontStyle :: Font () -> IO FontStyle
+fontGetFontStyle font
+  = if (objectIsNull font)
+     then return fontDefault
+     else do ok <- fontIsOk font
+             if not ok
+               then return fontDefault
+               else do size    <- fontGetPointSize font
+                       cfamily <- fontGetFamily font
+                       cstyle  <- fontGetStyle font
+                       cweight <- fontGetWeight font
+                       cunderl <- fontGetUnderlined font
+                       face    <- fontGetFaceName font
+                       enc     <- fontGetEncoding font
+                       return (FontStyle size (toFamily cfamily) (toStyle cstyle) 
+                                (toWeight cweight) 
+                                (cunderl /= 0) face enc)
+   where
+    toFamily f
+      | f == wxFONTFAMILY_DECORATIVE   = FontDecorative
+      | f == wxFONTFAMILY_ROMAN        = FontRoman
+      | f == wxFONTFAMILY_SCRIPT       = FontScript
+      | f == wxFONTFAMILY_SWISS        = FontSwiss
+      | f == wxFONTFAMILY_MODERN       = FontModern
+      | f == wxFONTFAMILY_TELETYPE     = FontTeletype
+      | otherwise                      = FontDefault
+
+    toStyle s
+      | s == wxFONTSTYLE_ITALIC        = ShapeItalic
+      | s == wxFONTSTYLE_SLANT         = ShapeSlant
+      | otherwise                      = ShapeNormal
+
+    toWeight w
+      | w == wxFONTWEIGHT_BOLD         = WeightBold
+      | w == wxFONTWEIGHT_LIGHT        = WeightLight
+      | otherwise                      = WeightNormal
+
+
+{--------------------------------------------------------------------------------
+  Pen
+--------------------------------------------------------------------------------}
+
+-- | Pen style.
+data PenStyle
+  = PenStyle { _penKind  :: !PenKind
+             , _penColor :: !Color
+             , _penWidth :: !Int
+             , _penCap   :: !CapStyle
+             , _penJoin  :: !JoinStyle 
+             }
+  deriving (Eq,Show)
+
+-- | Pen kinds.
+data PenKind
+  = PenTransparent    -- ^ No edge.
+  | PenSolid
+  | PenDash   { _penDash   :: !DashStyle  }
+  | PenHatch  { _penHatch  :: !HatchStyle }
+  | PenStipple{ _penBitmap :: !(Bitmap ())}    -- ^ @_penColor@ is ignored
+  deriving (Eq,Show)
+
+-- | Default pen (@PenStyle PenSolid black 1 CapRound JoinRound@)
+penDefault :: PenStyle
+penDefault
+  = PenStyle PenSolid black 1 CapRound JoinRound
+
+-- | A solid pen with a certain color and width.
+penColored :: Color -> Int -> PenStyle
+penColored color width
+  = penDefault{ _penColor = color, _penWidth = width }
+
+-- | A transparent pen.
+penTransparent :: PenStyle
+penTransparent
+  = penDefault{ _penKind = PenTransparent }
+
+-- | Dash style
+data DashStyle
+  = DashDot
+  | DashLong
+  | DashShort
+  | DashDotShort
+  --  DashUser [Int]
+  deriving (Eq,Show)
+
+-- | Cap style
+data CapStyle
+  = CapRound          -- ^ End points are rounded
+  | CapProjecting
+  | CapButt
+  deriving (Eq,Show)
+
+-- | Join style.
+data JoinStyle
+  = JoinRound         -- ^ Corners are rounded
+  | JoinBevel         -- ^ Corners are bevelled
+  | JoinMiter         -- ^ Corners are blocked
+  deriving (Eq,Show)
+
+-- | Hatch style.
+data HatchStyle
+  = HatchBDiagonal    -- ^ Backward diagonal
+  | HatchCrossDiag    -- ^ Crossed diagonal
+  | HatchFDiagonal    -- ^ Forward diagonal
+  | HatchCross        -- ^ Crossed orthogonal
+  | HatchHorizontal   -- ^ Horizontal
+  | HatchVertical     -- ^ Vertical
+  deriving (Eq,Show)
+
+-- | Brush style.
+data BrushStyle
+  = BrushStyle { _brushKind :: !BrushKind, _brushColor :: !Color }
+  deriving (Eq,Show)
+
+-- | Brush kind.
+data BrushKind
+  = BrushTransparent                            -- ^ No filling
+  | BrushSolid                                  -- ^ Solid color
+  | BrushHatch  { _brushHatch  :: !HatchStyle }  -- ^ Hatch pattern
+  | BrushStipple{ _brushBitmap :: !(Bitmap ())}  -- ^ Bitmap pattern (on win95 only 8x8 bitmaps are supported)
+  deriving (Eq,Show)
+
+
+-- | Set a pen that is automatically deleted at the end of the computation.
+dcWithPenStyle :: DC a -> PenStyle -> IO b -> IO b
+dcWithPenStyle dc penStyle io
+  = withPenStyle penStyle $ \pen ->
+    dcWithPen dc pen io
+
+-- | Set a pen that is used during a certain computation.
+dcWithPen :: DC a -> Pen p -> IO b -> IO b
+dcWithPen dc pen io
+  = bracket  (do oldPen <- dcGetPen dc
+                 dcSetPen dc pen
+                 return oldPen)
+             (\oldPen ->
+              do dcSetPen dc oldPen   -- restore previous pen
+                 penDelete oldPen)
+             (const io)
+
+
+-- | Set the current pen style. The text color is also adapted.
+dcSetPenStyle :: DC a -> PenStyle -> IO ()
+dcSetPenStyle dc penStyle
+  = withPenStyle penStyle (dcSetPen dc)
+
+-- | Get the current pen style.
+dcGetPenStyle :: DC a -> IO PenStyle
+dcGetPenStyle dc
+  = do pen <- dcGetPen dc
+       finalize (penDelete pen) $ 
+         do penGetPenStyle pen
+
+-- | Use a pen that is automatically deleted at the end of the computation.
+withPenStyle :: PenStyle -> (Pen () -> IO a) -> IO a
+withPenStyle penStyle f
+  = do (pen,delete) <- penCreateFromStyle penStyle
+       finally (f pen) delete
+
+-- | Create a new pen from a 'PenStyle'. Returns both the pen and its deletion procedure.
+penCreateFromStyle :: PenStyle -> IO (Pen (),IO ())
+penCreateFromStyle penStyle
+  = case penStyle of
+      PenStyle PenTransparent color width cap join
+        -> do pen <- penCreateFromStock 5 {- transparent -}
+              return (pen,return ())
+      PenStyle (PenDash DashShort) color 1 CapRound JoinRound  | color == black
+        -> do pen <- penCreateFromStock 6 {- black dashed -}
+              return (pen,return ())
+      PenStyle PenSolid color 1 CapRound JoinRound
+        -> case lookup color stockPens of
+             Just idx -> do pen <- penCreateFromStock idx
+                            return (pen,return ())
+             Nothing  -> colorPen color 1 wxPENSTYLE_SOLID
+      PenStyle PenSolid color width cap join
+        -> colorPen color width wxPENSTYLE_SOLID
+      PenStyle (PenDash dash) color width cap join
+        -> case dash of
+             DashDot  -> colorPen color width wxPENSTYLE_DOT
+             DashLong -> colorPen color width wxPENSTYLE_LONG_DASH
+             DashShort-> colorPen color width wxPENSTYLE_SHORT_DASH
+             DashDotShort -> colorPen color width wxPENSTYLE_DOT_DASH
+      PenStyle (PenStipple bitmap) color width cap join
+        -> do pen <- penCreateFromBitmap bitmap width
+              setCap pen
+              setJoin pen
+              return (pen,penDelete pen)
+  where
+    colorPen color width style
+      = do pen <- penCreateFromColour color width style
+           setCap pen
+           setJoin pen
+           return (pen,penDelete pen)
+
+    setCap pen
+      = case _penCap penStyle of
+          CapRound      -> return ()
+          CapProjecting -> penSetCap pen wxCAP_PROJECTING
+          CapButt       -> penSetCap pen wxCAP_BUTT
+
+    setJoin pen
+      = case _penJoin penStyle of
+          JoinRound     -> return ()
+          JoinBevel     -> penSetJoin pen wxJOIN_BEVEL
+          JoinMiter     -> penSetJoin pen wxJOIN_MITER
+
+    stockPens
+      = [(red,0),(cyan,1),(green,2)
+        ,(black,3),(white,4)
+        ,(grey,7),(lightgrey,9)
+        ,(mediumgrey,8)
+        ]
+
+-- | Create a 'PenStyle' from a 'Pen'.
+penGetPenStyle :: Pen a -> IO PenStyle
+penGetPenStyle pen
+  = if (objectIsNull pen)
+     then return penDefault
+     else do ok <- penIsOk pen
+             if not ok 
+              then return penDefault
+              else do stl <- penGetStyle pen
+                      toPenStyle stl
+  where
+    toPenStyle stl
+      | stl == wxPENSTYLE_TRANSPARENT      = return penTransparent
+      | stl == wxPENSTYLE_SOLID            = toPenStyleWithKind PenSolid
+      | stl == wxPENSTYLE_DOT              = toPenStyleWithKind (PenDash DashDot)
+      | stl == wxPENSTYLE_LONG_DASH        = toPenStyleWithKind (PenDash DashLong)
+      | stl == wxPENSTYLE_SHORT_DASH       = toPenStyleWithKind (PenDash DashShort)
+      | stl == wxPENSTYLE_DOT_DASH         = toPenStyleWithKind (PenDash DashDotShort)
+      | stl == wxPENSTYLE_STIPPLE          = do stipple <- penGetStipple pen
+                                                toPenStyleWithKind (PenStipple stipple)
+      | stl == wxPENSTYLE_BDIAGONAL_HATCH  = toPenStyleWithKind (PenHatch HatchBDiagonal)
+      | stl == wxPENSTYLE_CROSSDIAG_HATCH  = toPenStyleWithKind (PenHatch HatchCrossDiag)
+      | stl == wxPENSTYLE_FDIAGONAL_HATCH  = toPenStyleWithKind (PenHatch HatchFDiagonal)
+      | stl == wxPENSTYLE_CROSS_HATCH      = toPenStyleWithKind (PenHatch HatchCross)
+      | stl == wxPENSTYLE_HORIZONTAL_HATCH = toPenStyleWithKind (PenHatch HatchHorizontal)
+      | stl == wxPENSTYLE_VERTICAL_HATCH   = toPenStyleWithKind (PenHatch HatchVertical)
+      | otherwise                          = toPenStyleWithKind PenSolid
+      
+    toPenStyleWithKind kind
+      = do width  <- penGetWidth pen
+           color  <- penGetColour pen
+           cap    <- penGetCap pen
+           join   <- penGetJoin pen
+           return (PenStyle kind color width (toCap cap) (toJoin join))
+
+    toCap cap
+      | cap == wxCAP_PROJECTING = CapProjecting
+      | cap == wxCAP_BUTT       = CapButt
+      | otherwise               = CapRound
+
+    toJoin join
+      | join == wxJOIN_MITER    = JoinMiter
+      | join == wxJOIN_BEVEL    = JoinBevel
+      | otherwise               = JoinRound
+
+
+           
+{--------------------------------------------------------------------------------
+  Brush
+--------------------------------------------------------------------------------}
+-- | Default brush (transparent, black).
+brushDefault :: BrushStyle
+brushDefault
+  = BrushStyle BrushTransparent black
+
+
+-- | A solid brush of a specific color.
+brushSolid :: Color -> BrushStyle
+brushSolid color
+  = BrushStyle BrushSolid color
+
+-- | A transparent brush.
+brushTransparent :: BrushStyle
+brushTransparent
+  = BrushStyle BrushTransparent white
+-- | Use a brush that is automatically deleted at the end of the computation.
+dcWithBrushStyle :: DC a -> BrushStyle -> IO b -> IO b
+dcWithBrushStyle dc brushStyle io
+  = withBrushStyle brushStyle $ \brush ->
+    dcWithBrush dc brush io
+
+dcWithBrush :: DC b -> Brush a -> IO c -> IO c
+dcWithBrush dc brush io
+  = bracket  (do oldBrush <- dcGetBrush dc
+                 dcSetBrush dc brush
+                 return oldBrush)
+             (\oldBrush ->
+              do dcSetBrush dc oldBrush -- restore previous brush
+                 brushDelete oldBrush)
+             (const io)
+
+-- | Set the brush style (and text background color) of a device context.
+dcSetBrushStyle :: DC a -> BrushStyle -> IO ()
+dcSetBrushStyle dc brushStyle
+  = withBrushStyle brushStyle (dcSetBrush dc)
+       
+-- | Get the current brush of a device context.
+dcGetBrushStyle :: DC a -> IO BrushStyle
+dcGetBrushStyle dc
+  = do brush <- dcGetBrush dc
+       finalize (brushDelete brush) $
+        do brushGetBrushStyle brush
+
+
+-- | Use a brush that is automatically deleted at the end of the computation.
+withBrushStyle :: BrushStyle -> (Brush () -> IO a) -> IO a
+withBrushStyle brushStyle f
+  = do (brush,delete) <- brushCreateFromStyle brushStyle
+       finalize delete $ 
+        do f brush 
+
+-- | Create a new brush from a 'BrushStyle'. Returns both the brush and its deletion procedure.
+brushCreateFromStyle :: BrushStyle -> IO (Brush (), IO ())
+brushCreateFromStyle brushStyle
+  = case brushStyle of
+      BrushStyle BrushTransparent color
+        -> do brush <- if (wxToolkit == WxMac)
+	                then brushCreateFromColour color wxBRUSHSTYLE_TRANSPARENT
+			else brushCreateFromStock 7   {- transparent brush -}
+              return (brush,return ())
+      BrushStyle BrushSolid color
+        -> case lookup color stockBrushes of
+             Just idx  -> do brush <- brushCreateFromStock idx
+                             return (brush,return ())
+             Nothing   -> colorBrush color wxBRUSHSTYLE_SOLID
+
+      BrushStyle (BrushHatch HatchBDiagonal) color   -> colorBrush color wxBRUSHSTYLE_BDIAGONAL_HATCH
+      BrushStyle (BrushHatch HatchCrossDiag) color   -> colorBrush color wxBRUSHSTYLE_CROSSDIAG_HATCH
+      BrushStyle (BrushHatch HatchFDiagonal) color   -> colorBrush color wxBRUSHSTYLE_FDIAGONAL_HATCH
+      BrushStyle (BrushHatch HatchCross) color       -> colorBrush color wxBRUSHSTYLE_CROSS_HATCH
+      BrushStyle (BrushHatch HatchHorizontal) color  -> colorBrush color wxBRUSHSTYLE_HORIZONTAL_HATCH
+      BrushStyle (BrushHatch HatchVertical) color    -> colorBrush color wxBRUSHSTYLE_VERTICAL_HATCH
+      BrushStyle (BrushStipple bitmap) color         -> do brush <- brushCreateFromBitmap bitmap
+                                                           return (brush, brushDelete brush)
+  where
+    colorBrush color style
+      = do brush <- brushCreateFromColour color style
+           return (brush, brushDelete brush )
+
+    stockBrushes
+      = [(blue,0),(green,1),(white,2)
+        ,(black,3),(grey,4),(lightgrey,6)
+        ,(cyan,8),(red,9)
+        ,(mediumgrey,5)
+        ]
+
+-- | Get the 'BrushStyle' of 'Brush'.
+brushGetBrushStyle :: Brush a -> IO BrushStyle
+brushGetBrushStyle brush
+  = if (objectIsNull brush)
+     then return brushDefault
+     else do ok <- brushIsOk brush
+             if not ok
+              then return brushDefault
+              else do stl   <- brushGetStyle brush
+                      kind  <- toBrushKind stl
+                      color <- brushGetColour brush
+                      return (BrushStyle kind color)
+  where
+    toBrushKind stl
+      | stl == wxBRUSHSTYLE_TRANSPARENT      = return BrushTransparent
+      | stl == wxBRUSHSTYLE_SOLID            = return BrushSolid
+      | stl == wxBRUSHSTYLE_STIPPLE          = do stipple <- brushGetStipple brush
+                                                  return (BrushStipple stipple)
+      | stl == wxBRUSHSTYLE_BDIAGONAL_HATCH  = return (BrushHatch HatchBDiagonal)
+      | stl == wxBRUSHSTYLE_CROSSDIAG_HATCH  = return (BrushHatch HatchCrossDiag)
+      | stl == wxBRUSHSTYLE_FDIAGONAL_HATCH  = return (BrushHatch HatchFDiagonal)
+      | stl == wxBRUSHSTYLE_CROSS_HATCH      = return (BrushHatch HatchCross)
+      | stl == wxBRUSHSTYLE_HORIZONTAL_HATCH = return (BrushHatch HatchHorizontal)
+      | stl == wxBRUSHSTYLE_VERTICAL_HATCH   = return (BrushHatch HatchVertical)
+      | otherwise                            = return BrushTransparent
+
+
+
+{--------------------------------------------------------------------------------
+  DC drawing state
+--------------------------------------------------------------------------------}
+-- | The drawing state (pen,brush,font,text color,text background color) of a device context.
+data DrawState  = DrawState (Pen ()) (Brush ()) (Font ()) Color Color
+
+-- | Run a computation after which the original drawing state of the 'DC' is restored.
+dcEncapsulate :: DC a -> IO b -> IO b
+dcEncapsulate dc io
+  = bracket (dcGetDrawState dc)
+            (\drawState ->
+             do dcSetDrawState dc drawState
+                drawStateDelete drawState)
+            (const io)
+
+-- | Get the drawing state. (Should be deleted with 'drawStateDelete').
+dcGetDrawState     :: DC a -> IO DrawState
+dcGetDrawState dc
+  = do pen   <- dcGetPen dc
+       brush <- dcGetBrush dc
+       font  <- dcGetFont dc
+       textc <- dcGetTextForeground dc
+       backc <- dcGetTextBackground dc
+       return (DrawState pen brush font textc backc)
+
+-- | Set the drawing state.
+dcSetDrawState  :: DC a -> DrawState -> IO ()
+dcSetDrawState dc (DrawState pen brush font textc backc)
+  = do dcSetPen dc pen
+       dcSetBrush dc brush
+       dcSetFont dc font
+       dcSetTextBackground dc backc
+       dcSetTextForeground dc textc
+
+-- | Release the resources associated with a drawing state.
+drawStateDelete :: DrawState -> IO ()
+drawStateDelete (DrawState pen brush font _ _)
+  = do penDelete pen
+       brushDelete brush
+       fontDelete font
+
+{--------------------------------------------------------------------------------
+  DC utils
+--------------------------------------------------------------------------------}
+
+-- | Draw connected lines.
+drawLines :: DC a -> [Point] -> IO ()
+drawLines dc []  = return ()
+drawLines dc ps
+  = withArray xs $ \pxs ->
+    withArray ys $ \pys ->
+    dcDrawLines dc n pxs pys (pt 0 0)
+  where
+    n  = length ps
+    xs = map pointX ps
+    ys = map pointY ps
+
+
+-- | Draw a polygon. The polygon is filled with the odd-even rule.
+drawPolygon :: DC a -> [Point] -> IO ()
+drawPolygon dc []  = return ()
+drawPolygon dc ps
+  = withArray xs $ \pxs ->
+    withArray ys $ \pys ->
+    dcDrawPolygon dc n pxs pys (pt 0 0) wxODDEVEN_RULE
+  where
+    n  = length ps
+    xs = map pointX ps
+    ys = map pointY ps
+
+-- | Gets the dimensions of the string using the currently selected font.
+getTextExtent :: DC a -> String -> IO Size
+getTextExtent dc txt
+  = do (sz,_,_) <- getFullTextExtent dc txt
+       return sz
+
+-- | Gets the dimensions of the string using the currently selected font.
+-- Takes text string to measure, and returns the size, /descent/ and /external leading/.
+-- Descent is the dimension from the baseline of the font to the bottom of the descender
+-- , and external leading is any extra vertical space added to the font by the font designer (is usually zero).
+getFullTextExtent :: DC a -> String -> IO (Size,Int,Int)
+getFullTextExtent dc txt
+  = alloca $ \px ->
+    alloca $ \py ->
+    alloca $ \pd ->
+    alloca $ \pe ->
+    do dcGetTextExtent dc txt px py pd pe objectNull
+       x <- peek px
+       y <- peek py
+       d <- peek pd
+       e <- peek pe
+       return (sz (fromCInt x) (fromCInt y), fromCInt d, fromCInt e)
+
+
+{--------------------------------------------------------------------------------
+  Double buffering
+--------------------------------------------------------------------------------}
+
+-- | Use double buffering to draw to a 'DC' -- reduces flicker. Note that
+-- the 'windowOnPaint' handler can already take care of buffering automatically.
+-- The rectangle argument is normally the view rectangle ('windowGetViewRect').
+-- Uses a 'MemoryDC' to draw into memory first and than blit the result to
+-- the device context. The memory area allocated is the minimal size necessary
+-- to accomodate the rectangle, but is re-allocated on each invokation.
+dcBuffer :: DC a -> Rect -> (DC () -> IO ()) -> IO ()
+dcBuffer dc r draw
+  = dcBufferWithRef dc Nothing r draw
+
+-- | Optimized double buffering. Takes a possible reference to a bitmap. If it is
+-- 'Nothing', a new bitmap is allocated everytime. Otherwise, the reference is used
+-- to re-use an allocated bitmap if possible. The 'Rect' argument specifies the
+-- the current logical view rectangle. The last argument is called to draw on the
+-- memory 'DC'. 
+dcBufferWithRef :: DC a -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()
+dcBufferWithRef dc mbVar viewArea draw
+  = dcBufferWithRefEx dc (\dc -> dcClearRect dc viewArea) mbVar viewArea draw
+
+
+-- | Optimized double buffering. Takes a /clear/ routine as its first argument.
+-- Normally this is something like '\dc -> dcClearRect dc viewArea' but on certain platforms, like
+-- MacOS X, special handling is necessary.
+dcBufferWithRefEx :: DC a -> (DC () -> IO ()) -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()
+dcBufferWithRefEx dc clear mbVar view draw
+  | rectSize view == sizeZero = return ()
+dcBufferWithRefEx dc clear mbVar view draw
+  = bracket (initBitmap)
+            (doneBitmap)
+            (\bitmap ->
+             if (bitmap==objectNull)
+              then drawUnbuffered
+              else bracket (do p <- memoryDCCreateCompatible dc; return (objectCast p))
+                           (\memdc -> when (memdc/=objectNull) (memoryDCDelete memdc))
+                           (\memdc -> if (memdc==objectNull)
+                                       then drawUnbuffered
+                                       else do memoryDCSelectObject memdc bitmap
+                                               drawBuffered memdc
+                                               memoryDCSelectObject memdc nullBitmap
+                           )
+            )
+    where
+     initBitmap
+       = case mbVar of
+           Nothing  -> bitmapCreateEmpty (rectSize view) (-1)
+           Just v   -> do bitmap <- varGet v
+                          size   <- if (bitmap==objectNull)
+                                     then return sizeZero
+                                     else do bw <- bitmapGetWidth bitmap
+                                             bh <- bitmapGetHeight bitmap
+                                             return (Size bw bh)
+                          -- re-use the bitmap if possible
+                          if (sizeEncloses size (rectSize view) && bitmap /= objectNull)
+                            then return bitmap
+                            else do when (bitmap/=objectNull) (bitmapDelete bitmap)
+                                    varSet v objectNull
+                                    -- new size a bit larger to avoid multiple reallocs
+                                    let (Size w h) = rectSize view
+                                        neww       = div (w*105) 100
+                                        newh       = div (h*105) 100
+                                    bm <- bitmapCreateEmpty (sz neww newh) (-1)
+                                    varSet v bm
+                                    return bm
+
+     doneBitmap bitmap
+       = case mbVar of
+           Nothing -> when (bitmap/=objectNull) (bitmapDelete bitmap)
+           Just v  -> return ()
+
+
+     drawUnbuffered
+       = do clear (downcastDC dc)
+            draw (downcastDC dc) -- down cast
+
+     drawBuffered memdc
+      = do -- set the device origin for scrolled windows
+           dcSetDeviceOrigin memdc (pointFromVec (vecNegate (vecFromPoint (rectTopLeft view))))
+           dcSetClippingRegion memdc view
+           -- dcBlit memdc view dc (rectTopLeft view) wxCOPY False
+	   bracket (dcGetBackground dc)
+                   (\brush -> do dcSetBrush memdc nullBrush
+                                 brushDelete brush)
+                   (\brush -> do -- set the background to the owner brush
+                                 dcSetBackground memdc brush
+                                 if (wxToolkit == WxMac)
+				  then withBrushStyle brushTransparent (dcSetBrush memdc)
+				  else dcSetBrush memdc brush
+                                 clear (downcastDC memdc)
+				 -- and finally do the drawing!
+                                 draw (downcastDC memdc) -- down cast
+                   )
+           -- blit the memdc into the owner dc.
+           dcBlit dc view memdc (rectTopLeft view) wxCOPY False
+           return ()
src/haskell/Graphics/UI/WXCore/Events.hs view
@@ -1,2825 +1,2825 @@-{-# LANGUAGE ForeignFunctionInterface #-}-------------------------------------------------------------------------------------------{-|	Module      :  Events-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Dynamically set (and get) Haskell event handlers for basic wxWidgets events.-Note that one should always call 'skipCurrentEvent' when an event is not-processed in the event handler so that other eventhandlers can process the-event.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Events-        (-        -- * Set event handlers-        -- ** Controls-          buttonOnCommand-        , checkBoxOnCommand-        , choiceOnCommand-        , comboBoxOnCommand-        , comboBoxOnTextEnter-        , controlOnText-        , listBoxOnCommand-        , spinCtrlOnCommand-        -- , listBoxOnDClick-        , radioBoxOnCommand-        , sliderOnCommand-        , textCtrlOnTextEnter-        , listCtrlOnListEvent-        , toggleButtonOnCommand-        , treeCtrlOnTreeEvent-        , gridOnGridEvent-        , propertyGridOnPropertyGridEvent--        -- ** Windows-        , windowOnMouse-        , windowOnKeyChar-        , windowOnKeyDown-        , windowOnKeyUp-        , windowAddOnClose-        , windowOnClose-        , windowOnDestroy-        , windowAddOnDelete-        , windowOnDelete-        , windowOnCreate-        , windowOnIdle-        , windowOnTimer-        , windowOnSize-        , windowOnFocus-        , windowOnActivate-        , windowOnPaint-        , windowOnPaintRaw-        , windowOnContextMenu-        , windowOnScroll-        , htmlWindowOnHtmlEvent--        -- ** Event handlers-        , evtHandlerOnMenuCommand-        , evtHandlerOnEndProcess-        , evtHandlerOnInput-        , evtHandlerOnInputSink-        , evtHandlerOnTaskBarIconEvent--        -- ** Raw STC export-        , EventSTC(..)-        , stcOnSTCEvent-        , stcGetOnSTCEvent--        -- ** Print events-        , EventPrint(..)-        , printOutOnPrint--        -- * Get event handlers-        -- ** Controls-        , buttonGetOnCommand-        , checkBoxGetOnCommand-        , choiceGetOnCommand-        , comboBoxGetOnCommand-        , comboBoxGetOnTextEnter-        , controlGetOnText-        , listBoxGetOnCommand-        , spinCtrlGetOnCommand-        -- , listBoxGetOnDClick-        , radioBoxGetOnCommand-        , sliderGetOnCommand-        , textCtrlGetOnTextEnter-        , listCtrlGetOnListEvent-        , toggleButtonGetOnCommand-        , treeCtrlGetOnTreeEvent-        , gridGetOnGridEvent-        , propertyGridGetOnPropertyGridEvent--        -- ** Windows-        , windowGetOnMouse-        , windowGetOnKeyChar-        , windowGetOnKeyDown-        , windowGetOnKeyUp-        , windowGetOnClose-        , windowGetOnDestroy-        , windowGetOnDelete-        , windowGetOnCreate-        , windowGetOnIdle-        , windowGetOnTimer-        , windowGetOnSize-        , windowGetOnFocus-        , windowGetOnActivate-        , windowGetOnPaint-        , windowGetOnPaintRaw-        , windowGetOnContextMenu-        , windowGetOnScroll-        , htmlWindowGetOnHtmlEvent--        -- ** Event handlers-        , evtHandlerGetOnMenuCommand-        , evtHandlerGetOnEndProcess-        , evtHandlerGetOnInputSink-        , evtHandlerGetOnTaskBarIconEvent--        -- ** Printing-        , printOutGetOnPrint--        -- * Timers-        , windowTimerAttach-        , windowTimerCreate-        , timerOnCommand-        , timerGetOnCommand--        -- Idle events-        , appRegisterIdle--        -- * Calenders-        , EventCalendar(..)-        , calendarCtrlOnCalEvent -        , calendarCtrlGetOnCalEvent--        -- * Types-        -- ** Streams-        , StreamStatus(..), streamStatusFromInt--        -- ** Modifiers-        , Modifiers(..)-        , showModifiers-        , noneDown, justShift, justAlt, justControl, justMeta, isNoneDown-        , isNoShiftAltControlDown--        -- ** Mouse events-        , EventMouse (..)-        , showMouse-        , mousePos, mouseModifiers--        -- ** Keyboard events-        , EventKey (..), Key(..)-        , keyKey, keyModifiers, keyPos-        , showKey, showKeyModifiers--        -- * Set event handlers-        -- ** Drop Target events-        , DragResult (..)-        , dropTargetOnData-        , dropTargetOnDrop-        , dropTargetOnEnter-        , dropTargetOnDragOver-        , dropTargetOnLeave-        -        -- ** On DragAndDropEvent-        , DragMode (..)-        , dragAndDrop-        -        -- *** Special handler for Drop File event-        , fileDropTarget-        -- *** Special handler for Drop Text event -        , textDropTarget--        -- ** Scroll events-        , EventScroll(..), Orientation(..)-        , scrollOrientation, scrollPos--        -- ** Tree control events-        , EventTree(..)-        -        -- ** List control events-        , EventList(..), ListIndex--        -- ** Grid control events-        , EventGrid(..), Row, Column--        -- ** Html window events-        , EventHtml(..)-        -        -- * TaskBar icon events-        , EventTaskBarIcon(..)--        -- ** PropertyGrid events-        , EventPropertyGrid(..)---        -- * Current event-        , propagateEvent-        , skipCurrentEvent-        , withCurrentEvent--        -- * Primitive-        , appOnInit--        -- ** Client data-        , treeCtrlSetItemClientData--        , evtHandlerWithClientData-        , evtHandlerSetClientData--        , objectWithClientData-        , objectSetClientData       --        -- ** Input sink-        , inputSinkEventLastString--        -- ** Keys-        , KeyCode-        , modifiersToAccelFlags-        , keyCodeToKey, keyToKeyCode--        -- ** Events-        , windowOnEvent, windowOnEventEx--        -- ** Generic-        , OnEvent-        , evtHandlerOnEvent-        , evtHandlerOnEventConnect--        -- ** Unsafe-        , unsafeTreeCtrlGetItemClientData-        , unsafeEvtHandlerGetClientData-        , unsafeObjectGetClientData-        , unsafeGetHandlerState-        , unsafeWindowGetHandlerState-        ) where--import Data.List( intersperse, findIndex )-import System.Environment( getProgName, getArgs )-import Foreign.StablePtr-import Foreign.Ptr-import Foreign.C.Types-import Foreign.C.String-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array-import Foreign.Marshal.Utils--import Data.Char ( chr ) -- used in stc-import Data.Maybe ( fromMaybe, fromJust )-import Control.Concurrent.MVar-import System.IO.Unsafe( unsafePerformIO )--import qualified Data.IntMap as IntMap-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Draw-import Graphics.UI.WXCore.Defines----------------------------------------------------------------------------------------------- Controls  (COMMAND events)---------------------------------------------------------------------------------------------- | Set an event handler for a push button.-buttonOnCommand :: Button a -> IO () -> IO ()-buttonOnCommand button eventHandler-  = windowOnEvent button [wxEVT_COMMAND_BUTTON_CLICKED] eventHandler (\evt -> eventHandler)----- | Get the current button event handler on a window.-buttonGetOnCommand :: Window a -> IO (IO ())-buttonGetOnCommand button-  = unsafeWindowGetHandlerState button wxEVT_COMMAND_BUTTON_CLICKED skipCurrentEvent----- | Set an event handler for "updated text", works for example on a 'TextCtrl' and 'ComboBox'.-controlOnText :: Control a -> IO () -> IO ()-controlOnText control eventHandler-  = windowOnEvent control [wxEVT_COMMAND_TEXT_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current event handler for updated text.-controlGetOnText :: Control a -> IO (IO ())-controlGetOnText control-  = unsafeWindowGetHandlerState control wxEVT_COMMAND_TEXT_UPDATED skipCurrentEvent----- | Set an event handler for an enter command in a text control.-textCtrlOnTextEnter :: TextCtrl a -> IO () -> IO ()-textCtrlOnTextEnter textCtrl eventHandler-  = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)---- | Get the current text enter event handler.-textCtrlGetOnTextEnter :: TextCtrl a -> IO (IO ())-textCtrlGetOnTextEnter textCtrl-  = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent--{---- | Set an event handler for when a user tries to type more than than the maximally--- allowed text in a text control.-textCtrlOnTextMaxLen :: IO () -> TextCtrl a -> IO ()-textCtrlOnTextMaxLen eventHandler textCtrl-  = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_MAXLEN] eventHandler (\evt -> eventHandler)---- | Get the current maximal text event handler.-textCtrlGetOnTextMaxLen :: TextCtrl a -> IO (IO ())-textCtrlGetOnTextMaxLen textCtrl-  = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_MAXLEN skipCurrentEvent--}---- | Set an event handler for an enter command in a combo box.-comboBoxOnTextEnter :: ComboBox a -> IO () -> IO ()-comboBoxOnTextEnter comboBox eventHandler-  = windowOnEvent comboBox [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)---- | Get the current text enter event handler.-comboBoxGetOnTextEnter :: ComboBox a -> IO (IO ())-comboBoxGetOnTextEnter comboBox-  = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent----- | Set an event handler for when a combo box item is selected.-comboBoxOnCommand :: ComboBox a -> IO () -> IO ()-comboBoxOnCommand comboBox eventHandler-  = windowOnEvent comboBox [wxEVT_COMMAND_COMBOBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current combo box event handler for selections-comboBoxGetOnCommand :: ComboBox a -> IO (IO ())-comboBoxGetOnCommand comboBox-  = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_COMBOBOX_SELECTED skipCurrentEvent---- | Set an event handler for when a listbox item is (de)selected.-listBoxOnCommand :: ListBox a -> IO () -> IO ()-listBoxOnCommand listBox eventHandler-  = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current listbox event handler for selections.-listBoxGetOnCommand :: ListBox a -> IO (IO ())-listBoxGetOnCommand listBox-  = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_SELECTED skipCurrentEvent--{---- | Set an event handler for when a listbox item is double clicked. Takes the selected--- item index as an argument.-listBoxOnDClick :: (Int -> IO ()) -> ListBox a -> IO ()-listBoxOnDClick eventHandler listBox-  = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_DCLICK] eventHandler dclickHandler-  where-    dclickHandler event-      = do index <- commandEventGetInt (objectCast event)-           eventHandler index---- | Get the current double click listbox event handler.-listBoxGetOnDClick :: ListBox a -> IO (IO ())-listBoxGetOnDClick listBox-  = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_DCLICK (\index -> skipCurrentEvent)--}---- | Set an event handler for when a choice item is (de)selected.-choiceOnCommand :: Choice a -> IO () -> IO ()-choiceOnCommand choice eventHandler-  = windowOnEvent choice [wxEVT_COMMAND_CHOICE_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current choice command event handler.-choiceGetOnCommand :: Choice a -> IO (IO ())-choiceGetOnCommand choice-  = unsafeWindowGetHandlerState choice wxEVT_COMMAND_CHOICE_SELECTED skipCurrentEvent----- | Set an event handler for when a radiobox item is selected.-radioBoxOnCommand :: RadioBox a -> IO () -> IO ()-radioBoxOnCommand radioBox eventHandler-  = windowOnEvent radioBox [wxEVT_COMMAND_RADIOBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current radio box command handler.-radioBoxGetOnCommand :: RadioBox a -> IO (IO ())-radioBoxGetOnCommand radioBox-  = unsafeWindowGetHandlerState radioBox wxEVT_COMMAND_RADIOBOX_SELECTED skipCurrentEvent----- | Set an event handler for when a slider item changes.-sliderOnCommand :: Slider a -> IO () -> IO ()-sliderOnCommand slider eventHandler-  = windowOnEvent slider [wxEVT_COMMAND_SLIDER_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current slider command event handler.-sliderGetOnCommand :: Slider a -> IO (IO ())-sliderGetOnCommand slider-  = unsafeWindowGetHandlerState slider wxEVT_COMMAND_SLIDER_UPDATED skipCurrentEvent------ | Set an event handler for when a checkbox clicked.-checkBoxOnCommand :: CheckBox a -> (IO ()) -> IO ()-checkBoxOnCommand checkBox eventHandler-  = windowOnEvent checkBox [wxEVT_COMMAND_CHECKBOX_CLICKED] eventHandler (\evt -> eventHandler)---- | Get the current check box event handler.-checkBoxGetOnCommand :: CheckBox a -> IO (IO ())-checkBoxGetOnCommand checkBox-  = unsafeWindowGetHandlerState checkBox wxEVT_COMMAND_CHECKBOX_CLICKED (skipCurrentEvent)---- | Set an event handler for when a spinCtrl clicked.-spinCtrlOnCommand :: SpinCtrl a -> (IO ()) -> IO ()-spinCtrlOnCommand spinCtrl eventHandler-  = windowOnEvent spinCtrl [wxEVT_COMMAND_SPINCTRL_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current check box event handler.-spinCtrlGetOnCommand :: SpinCtrl a -> IO (IO ())-spinCtrlGetOnCommand spinCtrl-  = unsafeWindowGetHandlerState spinCtrl wxEVT_COMMAND_SPINCTRL_UPDATED (skipCurrentEvent)---- | Set an event handler for a push button.-toggleButtonOnCommand :: ToggleButton a -> IO () -> IO ()-toggleButtonOnCommand button eventHandler-  = windowOnEvent button [wxEVT_COMMAND_TOGGLEBUTTON_CLICKED] eventHandler (\evt -> eventHandler)---- | Get the current button event handler on a window.-toggleButtonGetOnCommand :: Window a -> IO (IO ())-toggleButtonGetOnCommand button-  = unsafeWindowGetHandlerState button wxEVT_COMMAND_TOGGLEBUTTON_CLICKED skipCurrentEvent--{------------------------------------------------------------------------------------------  wxStyledTextCtrl's event------------------------------------------------------------------------------------------}--- | Scintilla events. * Means extra information is available (excluding position,---   key and modifiers) but not yet implemented. ! means it's done-data EventSTC-    = STCChange             -- ^ ! wxEVT_STC_CHANGE.-    | STCStyleNeeded        -- ^ ! wxEVT_STC_STYLENEEDED.-    | STCCharAdded Char Int -- ^ ? wxEVT_STC_CHARADDED. The position seems to be broken-    | STCSavePointReached   -- ^ ! wxEVT_STC_SAVEPOINTREACHED.-    | STCSavePointLeft      -- ^ ! wxEVT_STC_SAVEPOINTLEFT.-    | STCROModifyAttempt    -- ^ ! wxEVT_STC_ROMODIFYATTEMPT.-    | STCKey                -- ^ * wxEVT_STC_KEY.-			    -- kolmodin 20050304:-			    -- is this event ever raised? not under linux.-			    -- according to davve, not under windows either-    | STCDoubleClick        -- ^ ! wxEVT_STC_DOUBLECLICK.-    | STCUpdateUI           -- ^ ! wxEVT_STC_UPDATEUI.-    | STCModified Int Int (Maybe String) Int Int Int Int Int          -- ^ ? wxEVT_STC_MODIFIED.-    | STCMacroRecord Int Int Int  -- ^ ! wxEVT_STC_MACRORECORD iMessage wParam lParam-    | STCMarginClick Bool Bool Bool Int Int -- ^ ? wxEVT_STC_MARGINCLICK.-					    -- kolmodin 20050304:-					    -- Add something nicer for alt, shift and ctrl?-					    -- Perhaps a new datatype or a tuple.-    | STCNeedShown Int Int  -- ^ ! wxEVT_STC_NEEDSHOWN length position.-    | STCPainted            -- ^ ! wxEVT_STC_PAINTED. -    | STCUserListSelection Int String -- ^ ! wxEVT_STC_USERLISTSELECTION listType text-    | STCUriDropped String  -- ^ ! wxEVT_STC_URIDROPPED-    | STCDwellStart Point -- ^ ! wxEVT_STC_DWELLSTART-    | STCDwellEnd Point   -- ^ ! wxEVT_STC_DWELLEND-    | STCStartDrag Int Int String            -- ^ ! wxEVT_STC_START_DRAG.-    | STCDragOver Point DragResult            -- ^ ! wxEVT_STC_DRAG_OVER-    | STCDoDrop String DragResult            -- ^ ! wxEVT_STC_DO_DROP-    | STCZoom               -- ^ ! wxEVT_STC_ZOOM-    | STCHotspotClick       -- ^ ! wxEVT_STC_HOTSPOT_CLICK-    | STCHotspotDClick      -- ^ ! wxEVT_STC_HOTSPOT_DCLICK-    | STCCalltipClick       -- ^ ! wxEVT_STC_CALLTIP_CLICK-    | STCAutocompSelection  -- ^ ! wxEVT_STC_AUTOCOMP_SELECTION-    | STCUnknown            -- ^ Unknown event. Should never occur.--instance Show EventSTC where-    show STCChange = "(stc event: change)"-    show STCStyleNeeded = "(stc event: style needed)"-    show (STCCharAdded c p) = "(stc event: char added: " ++ show c ++ " at position " ++ show p ++ ")"-    show STCSavePointReached = "(stc event: save point reached)"-    show STCSavePointLeft = "(stc event: save point left)"-    show STCROModifyAttempt = "(stc event: read only modify attempt)"-    show STCKey = "(stc event: key)"-    show STCDoubleClick = "(stc event: double click)"-    show STCUpdateUI = "(stc event: update ui)"-    show (STCModified p mt t len ladd line fln flp) = "(stc event: modified: position " ++ show p ++ ", modtype " ++ show mt ++ ", text " ++ show t ++ ", length " ++ show len ++ ", lines added " ++ show ladd ++ ", line " ++ show line ++ ", fln " ++ show fln ++ ", flp " ++ show flp ++ ")"-    show (STCMacroRecord m wp lp) = "(stc event: macro record, message " ++ show m ++ ", wParam " ++ show wp ++ ", lParam " ++ show lp ++ ")"-    show (STCMarginClick alt shift ctrl p m) = "(stc event: margin " ++ show m ++ " clicked, pos " ++ show p ++ ", modifiers = [" ++ (if alt then "alt, " else "") ++ (if shift then "shift, " else "") ++ (if ctrl then "control" else "") ++ "])"-    show (STCNeedShown p len) = "(stc event: need to show lines from " ++ show p ++ ", length " ++ show len ++ ")"-    show STCPainted = "(stc event: painted)"-    show (STCUserListSelection lt t) = "(stc event: user list selection, type " ++ show lt ++ ", text " ++ show t ++ ")"-    show (STCUriDropped t) = "(stc event: uri dropped: " ++ t ++ ")"-    show (STCDwellStart p) = "(stc event: dwell start, (x,y) " ++ show p ++ ")"-    show (STCDwellEnd p) = "(stc event: dwell end, (x,y) " ++ show p ++ ")"-    show (STCStartDrag lin car str) = "(stc event: start drag, line " ++ show lin ++ ", caret " ++ show car ++ ", text " ++ show str ++ ")"-    show (STCDragOver p res) = "(stc event: drag over, (x,y) " ++ show p ++ ", dragResult " ++ show res ++ ")"-    show (STCDoDrop str res) = "(stc event: do drop, text " ++ show str ++ ", dragResult " ++ show res ++ ")"-    show STCZoom = "(stc event: zoom)"-    show STCHotspotClick = "(stc event: hotspot click)"-    show STCHotspotDClick = "(stc event: hotspot double click)"-    show STCCalltipClick = "(stc event: calltip clicked)"-    show STCAutocompSelection = "(stc event: autocomp selectioned)"-    show STCUnknown = "(stc event: unknown)"--fromSTCEvent :: StyledTextEvent a -> IO EventSTC-fromSTCEvent event-  = do et <- eventGetEventType event-       case lookup et stcEvents of-         Just action -> action event-	 Nothing -> return STCUnknown--stcEvents :: [(EventId, StyledTextEvent a -> IO EventSTC)]-stcEvents = [ (wxEVT_STC_CHANGE,            \_ -> return STCChange)-	    , (wxEVT_STC_STYLENEEDED,       \_ -> return STCStyleNeeded)-	    , (wxEVT_STC_CHARADDED,         charAdded)-	    , (wxEVT_STC_SAVEPOINTREACHED,  \_ -> return STCSavePointReached)-	    , (wxEVT_STC_SAVEPOINTLEFT,     \_ -> return STCSavePointLeft)-	    , (wxEVT_STC_ROMODIFYATTEMPT,   \_ -> return STCROModifyAttempt)-	    , (wxEVT_STC_KEY,               \_ -> return STCKey)-	    , (wxEVT_STC_DOUBLECLICK,       \_ -> return STCDoubleClick)-	    , (wxEVT_STC_UPDATEUI,          \_ -> return STCUpdateUI)-	    , (wxEVT_STC_MODIFIED,          modified)-	    , (wxEVT_STC_MACRORECORD,       macroRecord)-	    , (wxEVT_STC_MARGINCLICK,       marginClick)-	    , (wxEVT_STC_NEEDSHOWN,         needShown)-	    , (wxEVT_STC_PAINTED,           \_ -> return STCPainted)-	    , (wxEVT_STC_USERLISTSELECTION, userListSelection)-	    , (wxEVT_STC_URIDROPPED,        uriDropped)-	    , (wxEVT_STC_DWELLSTART,        dwellStart)-	    , (wxEVT_STC_DWELLEND,          dwellEnd)-	    , (wxEVT_STC_START_DRAG,        startDrag)-	    , (wxEVT_STC_DRAG_OVER,         dragOver)-	    , (wxEVT_STC_DO_DROP,           doDrop)-	    , (wxEVT_STC_ZOOM,              \_ -> return STCZoom)-	    , (wxEVT_STC_HOTSPOT_CLICK,     \_ -> return STCHotspotClick)-	    , (wxEVT_STC_CALLTIP_CLICK,     \_ -> return STCCalltipClick)-	    -- TODO: STCAutocompSelection event is not tested yet.-	    , (wxEVT_STC_AUTOCOMP_SELECTION,    \_ -> return STCAutocompSelection)-	    ]-  where-    charAdded evt = do-      c <- styledTextEventGetKey evt-      let c' | c < 0 = chr $ c + 256-             | otherwise = chr c-      p <- styledTextEventGetPosition evt-      return $ STCCharAdded c' p-    modified evt = do-      p <- styledTextEventGetPosition evt-      mt <- styledTextEventGetModificationType evt-      t <- styledTextEventGetText evt-      len <- styledTextEventGetLength evt-      ladd <- styledTextEventGetLinesAdded evt-      line <- styledTextEventGetLine evt-      fln <- styledTextEventGetFoldLevelNow evt-      flp <- styledTextEventGetFoldLevelPrev evt -      -- TODO: t should only be returned under some modificationtype conditions-      -- or should we always return it?-      return $ STCModified p mt (Just t) len ladd line fln flp-    macroRecord evt = do-      m <- styledTextEventGetMessage evt-      wp <- styledTextEventGetWParam evt-      lp <- styledTextEventGetLParam evt-      return $ STCMacroRecord m wp lp-    marginClick evt = do-      alt <- styledTextEventGetAlt evt-      shift <- styledTextEventGetShift evt-      ctrl <- styledTextEventGetControl evt-      p <- styledTextEventGetPosition evt-      m <- styledTextEventGetMargin evt-      return $ STCMarginClick alt shift ctrl p m-    needShown evt = do-      p <- styledTextEventGetPosition evt-      len <- styledTextEventGetLength evt-      return $ STCNeedShown p len-    {--    -- expEVT_STC_POSCHANGED is removed in wxWidgets-2.6.x.-    posChanged evt = do-      p <- styledTextEventGetPosition evt-      return $ STCPosChanged p-    -}-    userListSelection evt = do-      lt <- styledTextEventGetListType evt-      text <- styledTextEventGetText evt-      return $ STCUserListSelection lt text-    uriDropped evt = do-      t <- styledTextEventGetText evt-      return $ STCUriDropped t-    dwellStart evt = do-      x <- styledTextEventGetX evt-      y <- styledTextEventGetY evt-      return $ STCDwellStart (point x y)-    dwellEnd evt = do-      x <- styledTextEventGetX evt-      y <- styledTextEventGetY evt-      return $ STCDwellEnd (point x y)-    startDrag evt = do-      lin <- styledTextEventGetLine evt-      car <- styledTextEventGetPosition evt-      str <- styledTextEventGetDragText evt-      return $ STCStartDrag lin car str-    dragOver evt = do-      x <- styledTextEventGetX evt-      y <- styledTextEventGetY evt-      res <- styledTextEventGetDragResult evt-      return $ STCDragOver (point x y) $ toDragResult res-    doDrop evt = do-      str <- styledTextEventGetDragText evt-      res <- styledTextEventGetDragResult evt-      return $ STCDoDrop str $ toDragResult res--stcOnSTCEvent :: StyledTextCtrl a -> (EventSTC -> IO ()) -> IO ()-stcOnSTCEvent stc handler-  = do windowOnEvent stc stcEventsAll handler eventHandler-  where-    eventHandler event-      = do eventSTC <- fromSTCEvent (objectCast event)-           if isSTCUnknown eventSTC-              then return () -- what else?-              else handler eventSTC-    isSTCUnknown :: EventSTC -> Bool-    isSTCUnknown STCUnknown = True-    isSTCUnknown _ = False-    -- most of the events can probably be ignored-    stcEventsAll = map fst stcEvents--stcGetOnSTCEvent :: StyledTextCtrl a -> IO (EventSTC -> IO ())-stcGetOnSTCEvent window-  = unsafeWindowGetHandlerState window (head $ map fst stcEvents) (\ev -> skipCurrentEvent)--{------------------------------------------------------------------------------------------  Printing------------------------------------------------------------------------------------------}--- | Printer events.-data EventPrint  = PrintBeginDoc (IO ()) Int Int    -- ^ Print a copy: cancel, start page, end page-                 | PrintEndDoc-                 | PrintBegin                       -- ^ Begin a print job.-                 | PrintEnd-                 | PrintPrepare                     -- ^ Prepare: chance to call 'printOutSetPageLimits' for example.-                 | PrintPage (IO ()) (DC ()) Int    -- ^ Print a page: cancel, printer device context, page number.-                 | PrintUnknown Int                 -- ^ Unknown print event with event code---- | Convert a 'PrintEvent' object to an 'EventPrint' value.-fromPrintEvent :: WXCPrintEvent a -> IO EventPrint-fromPrintEvent event-  = do tp <- eventGetEventType event-       case lookup tp printEvents of-         Just f  -> f event-         Nothing -> return (PrintUnknown tp)---- | Print event list.-printEvents :: [(Int,WXCPrintEvent a -> IO EventPrint)]-printEvents-  = [(wxEVT_PRINT_PAGE,     \ev -> do page <- wxcPrintEventGetPage ev-                                      pout <- wxcPrintEventGetPrintout ev-                                      dc   <- printoutGetDC pout-                                      let cancel = wxcPrintEventSetContinue ev False-                                      return (PrintPage cancel dc page))-    ,(wxEVT_PRINT_BEGIN_DOC,\ev -> do page <- wxcPrintEventGetPage ev-                                      epage<- wxcPrintEventGetEndPage ev-                                      let cancel = wxcPrintEventSetContinue ev False-                                      return (PrintBeginDoc cancel page epage))-    ,(wxEVT_PRINT_PREPARE,  \ev -> return PrintPrepare)-    ,(wxEVT_PRINT_END_DOC,  \ev -> return PrintEndDoc)-    ,(wxEVT_PRINT_BEGIN,    \ev -> return PrintBegin)-    ,(wxEVT_PRINT_END,      \ev -> return PrintEnd)-    ]---- | Set an event handler for printing.-printOutOnPrint :: WXCPrintout a -> (EventPrint -> IO ()) -> IO ()-printOutOnPrint printOut eventHandler-  = do evtHandler <- wxcPrintoutGetEvtHandler printOut-       evtHandlerOnEvent evtHandler idAny idAny (map fst printEvents)-                         eventHandler (\_ -> return ()) printHandler-  where-    printHandler event-      = do eventPrint <- fromPrintEvent (objectCast event)-           eventHandler eventPrint---- | Get the current print handler-printOutGetOnPrint :: WXCPrintout a -> IO (EventPrint -> IO ())-printOutGetOnPrint printOut -  = do evtHandler <- wxcPrintoutGetEvtHandler printOut-       unsafeGetHandlerState evtHandler idAny wxEVT_PRINT_PAGE (\ev -> skipCurrentEvent)---{------------------------------------------------------------------------------------------  Scrolling------------------------------------------------------------------------------------------}--- | Scroll events.-data EventScroll = ScrollTop      !Orientation !Int    -- ^ scroll to top-                 | ScrollBottom   !Orientation !Int    -- ^ scroll to bottom-                 | ScrollLineUp   !Orientation !Int    -- ^ scroll line up-                 | ScrollLineDown !Orientation !Int    -- ^ scroll line down-                 | ScrollPageUp   !Orientation !Int    -- ^ scroll page up-                 | ScrollPageDown !Orientation !Int    -- ^ scroll page down-                 | ScrollTrack    !Orientation !Int    -- ^ frequent event when user drags the thumbtrack-                 | ScrollRelease  !Orientation !Int    -- ^ thumbtrack is released-                 deriving Show---- | The orientation of a widget.-data Orientation  = Horizontal | Vertical-                  deriving (Eq, Show)----- | Get the orientation of a scroll event.-scrollOrientation :: EventScroll -> Orientation-scrollOrientation scroll-  = case scroll of-      ScrollTop      orient pos   -> orient-      ScrollBottom   orient pos   -> orient-      ScrollLineUp   orient pos   -> orient-      ScrollLineDown orient pos   -> orient-      ScrollPageUp   orient pos   -> orient-      ScrollPageDown orient pos   -> orient-      ScrollTrack    orient pos   -> orient-      ScrollRelease  orient pos   -> orient---- | Get the position of the scroll bar.-scrollPos :: EventScroll -> Int-scrollPos scroll-  = case scroll of-      ScrollTop      orient pos   -> pos-      ScrollBottom   orient pos   -> pos-      ScrollLineUp   orient pos   -> pos-      ScrollLineDown orient pos   -> pos-      ScrollPageUp   orient pos   -> pos-      ScrollPageDown orient pos   -> pos-      ScrollTrack    orient pos   -> pos-      ScrollRelease  orient pos   -> pos----fromScrollEvent :: ScrollWinEvent a -> IO EventScroll-fromScrollEvent event-  = do orient <- scrollWinEventGetOrientation event-       pos    <- scrollWinEventGetPosition event-       tp     <- eventGetEventType event-       let orientation | orient == wxHORIZONTAL  = Horizontal-                       | otherwise               = Vertical-       case lookup tp scrollEvents of-         Just evt  -> return (evt orientation pos)-         Nothing   -> return (ScrollRelease orientation pos)--scrollEvents :: [(Int,Orientation -> Int -> EventScroll)]-scrollEvents-  = [(wxEVT_SCROLLWIN_TOP,        ScrollTop)-    ,(wxEVT_SCROLLWIN_BOTTOM,     ScrollBottom)-    ,(wxEVT_SCROLLWIN_LINEUP,     ScrollLineUp)-    ,(wxEVT_SCROLLWIN_LINEDOWN,   ScrollLineDown)-    ,(wxEVT_SCROLLWIN_PAGEUP,     ScrollPageUp)-    ,(wxEVT_SCROLLWIN_PAGEDOWN,   ScrollPageDown)-    ,(wxEVT_SCROLLWIN_THUMBTRACK, ScrollTrack)-    ,(wxEVT_SCROLLWIN_THUMBRELEASE, ScrollRelease)-    ]---- | Set a scroll event handler.-windowOnScroll :: Window a -> (EventScroll -> IO ()) -> IO ()-windowOnScroll window eventHandler-  = windowOnEvent window (map fst scrollEvents) eventHandler scrollHandler-  where-    scrollHandler event-      = do eventScroll <- fromScrollEvent (objectCast event)-           eventHandler eventScroll---- | Get the current scroll event handler of a window.-windowGetOnScroll :: Window a -> IO (EventScroll -> IO ())-windowGetOnScroll window-  = unsafeWindowGetHandlerState window wxEVT_SCROLLWIN_TOP (\scroll -> skipCurrentEvent)--{---------------------------------------------------------------------------  Html event---------------------------------------------------------------------------}--- | Html window events-data EventHtml  -  = HtmlCellClicked String EventMouse  Point -      -- ^ A /cell/ is clicked. Contains the cell /id/ attribute value, the mouse event and the logical coordinates.-  | HtmlCellHover String -      -- ^ The mouse hovers over a cell. Contains the cell /id/ attribute value.-  | HtmlLinkClicked String String String EventMouse Point -     -- ^ A link is clicked. Contains the hyperlink, the frame target, the cell /id/ attribute value, the mouse event, and the logical coordinates.-  | HtmlSetTitle String-     -- ^ Called when a @<title>@ tag is parsed.-  | HtmlUnknown -     -- ^ Unrecognised html event--instance Show EventHtml where-  show ev-    = case ev of-        HtmlCellClicked id mouse pnt           -> "Html Cell " ++ show id ++ " clicked: " ++ show mouse-        HtmlLinkClicked href target id mouse p -> "Html Link " ++ show id ++ " clicked: " ++ href-        HtmlCellHover id                       -> "Html Cell " ++ show id ++ " hover"-        HtmlSetTitle title                     -> "Html event title: " ++ title-        HtmlUnknown                            -> "Html event unknown"--fromHtmlEvent :: WXCHtmlEvent a -> IO EventHtml-fromHtmlEvent event-  = do tp <- eventGetEventType event-       case lookup tp htmlEvents of-         Nothing      -> return HtmlUnknown -         Just action  -> action event-  where-    htmlEvents  = [(wxEVT_HTML_CELL_MOUSE_HOVER,  htmlHover)-                  ,(wxEVT_HTML_CELL_CLICKED,      htmlClicked)-                  ,(wxEVT_HTML_LINK_CLICKED,      htmlLink)-                  ,(wxEVT_HTML_SET_TITLE,         htmlTitle)]--    htmlTitle event-      = do title <- commandEventGetString event-           return (HtmlSetTitle title)--    htmlHover event-      = do id      <- wxcHtmlEventGetHtmlCellId event-           return (HtmlCellHover id)--    htmlClicked event-      = do id      <- wxcHtmlEventGetHtmlCellId event-           mouseEv <- wxcHtmlEventGetMouseEvent event-           mouse   <- fromMouseEvent mouseEv-           pnt     <- wxcHtmlEventGetLogicalPosition event-           return (HtmlCellClicked id mouse pnt)--    htmlLink event-      = do id      <- wxcHtmlEventGetHtmlCellId event-           mouseEv <- wxcHtmlEventGetMouseEvent event-           mouse   <- fromMouseEvent mouseEv-           href    <- wxcHtmlEventGetHref event-           target  <- wxcHtmlEventGetTarget event-           pnt     <- wxcHtmlEventGetLogicalPosition event-           return (HtmlLinkClicked href target id mouse pnt)-      --- | Set a html event handler for a html window. The first argument determines whether--- hover events ('HtmlCellHover') are handled or not.-htmlWindowOnHtmlEvent :: WXCHtmlWindow a -> Bool -> (EventHtml -> IO ()) -> IO ()-htmlWindowOnHtmlEvent window allowHover handler-  = windowOnEvent window htmlEvents handler eventHandler-  where-    htmlEvents-      = [wxEVT_HTML_CELL_CLICKED,wxEVT_HTML_LINK_CLICKED,wxEVT_HTML_SET_TITLE]-        ++ (if allowHover then [wxEVT_HTML_CELL_MOUSE_HOVER] else [])--    eventHandler event-      = do eventHtml <- fromHtmlEvent (objectCast event)-           handler eventHtml---- | Get the current html event handler of a html window.-htmlWindowGetOnHtmlEvent :: WXCHtmlWindow a -> IO (EventHtml -> IO ())-htmlWindowGetOnHtmlEvent window-  = unsafeWindowGetHandlerState window wxEVT_HTML_CELL_CLICKED (\ev -> skipCurrentEvent)--     -          --{------------------------------------------------------------------------------------------  Close, Destroy, Create------------------------------------------------------------------------------------------}--- | Adds a close handler to the currently installed close handlers.-windowAddOnClose :: Window a -> IO () -> IO ()-windowAddOnClose window new-  = do prev <- windowGetOnClose window-       windowOnClose window (do{ new; prev })---- | Set an event handler that is called when the user tries to close a frame or dialog.--- Don't forget to call the previous handler or 'frameDestroy' explicitly or otherwise the--- frame won't be closed.-windowOnClose :: Window a -> IO () -> IO ()-windowOnClose window eventHandler-  = windowOnEvent window [wxEVT_CLOSE_WINDOW] eventHandler (\ev -> eventHandler)---- | Get the current close event handler.-windowGetOnClose :: Window a -> IO (IO ())-windowGetOnClose window-  = unsafeWindowGetHandlerState window wxEVT_CLOSE_WINDOW (do windowDestroy window; return ())---- | Set an event handler that is called when the window is destroyed.--- /Note: does not seem to work on windows/.-windowOnDestroy :: Window a -> IO () -> IO ()-windowOnDestroy window eventHandler-  = windowOnEvent window [wxEVT_DESTROY] eventHandler (\ev -> eventHandler)---- | Get the current destroy event handler.-windowGetOnDestroy :: Window a -> IO (IO ())-windowGetOnDestroy window-  = unsafeWindowGetHandlerState window wxEVT_DESTROY (return ())---- | Add a delete-event handler to the current installed delete-event handlers.------ > windowAddOnDelete window new--- >   = do prev <- windowGetOnDelete window--- >        windowOnDelete window (do{ new; prev })--windowAddOnDelete :: Window a -> IO () -> IO ()-windowAddOnDelete window new-  = do prev <- windowGetOnDelete window-       windowOnDelete window (do{ new; prev })---- | Set an event handler that is called when the window is deleted.--- Use with care as the window itself is in a deletion state.-windowOnDelete :: Window a -> IO () -> IO ()-windowOnDelete window eventHandler-  = windowOnEventEx window [wxEVT_DELETE] eventHandler onDelete (\ev -> return ())-  where-    onDelete ownerDeleted-      | ownerDeleted  = eventHandler-      | otherwise     = return ()    -- don't run on disconnect!---- | Get the current delete event handler.-windowGetOnDelete :: Window a -> IO (IO ())-windowGetOnDelete window-  = unsafeWindowGetHandlerState window wxEVT_DELETE (return ())----- | Set an event handler that is called when the window is created.-windowOnCreate :: Window a -> IO () -> IO ()-windowOnCreate window eventHandler-  = windowOnEvent window [wxEVT_CREATE] eventHandler (\ev -> eventHandler)---- | Get the current create event handler.-windowGetOnCreate :: Window a -> IO (IO ())-windowGetOnCreate window-  = unsafeWindowGetHandlerState window wxEVT_CREATE (return ())---- | Set an event handler that is called when the window is resized.-windowOnSize :: Window a -> IO () -> IO ()-windowOnSize window eventHandler-  = windowOnEvent window [wxEVT_SIZE] eventHandler (\ev -> eventHandler)---- | Get the current resize event handler.-windowGetOnSize :: Window a -> IO (IO ())-windowGetOnSize window-  = unsafeWindowGetHandlerState window wxEVT_SIZE (return ())---- | Set an event handler that is called when the window is activated or deactivated.--- The event parameter is 'True' when the window is activated.-windowOnActivate :: Window a -> (Bool -> IO ()) -> IO ()-windowOnActivate window eventHandler-  = windowOnEvent window [wxEVT_ACTIVATE] eventHandler activateHandler-  where-    activateHandler event-      = do active <- activateEventGetActive (objectCast event)-           eventHandler active---- | Get the current activate event handler.-windowGetOnActivate :: Window a -> IO (Bool -> IO ())-windowGetOnActivate window-  = unsafeWindowGetHandlerState window wxEVT_ACTIVATE (\active -> return ())---- | Set an event handler that is called when the window gets or loses the focus.--- The event parameter is 'True' when the window gets the focus.-windowOnFocus :: Window a -> (Bool -> IO ()) -> IO ()-windowOnFocus window eventHandler-  = do windowOnEvent window [wxEVT_SET_FOCUS] eventHandler getFocusHandler-       windowOnEvent window [wxEVT_KILL_FOCUS] eventHandler killFocusHandler-  where-    getFocusHandler event-      = eventHandler True-    killFocusHandler event-      = eventHandler False---- | Get the current focus event handler.-windowGetOnFocus :: Window a -> IO (Bool -> IO ())-windowGetOnFocus window-  = unsafeWindowGetHandlerState window wxEVT_SET_FOCUS (\getfocus -> return ())----- | A context menu event is generated when the user righ-clicks in a window--- or presses shift-F10.-windowOnContextMenu :: Window a -> IO () -> IO ()-windowOnContextMenu window eventHandler-  = windowOnEvent window [wxEVT_CONTEXT_MENU] eventHandler (\ev -> eventHandler)---- | Get the current context menu event handler.-windowGetOnContextMenu :: Window a -> IO (IO ())-windowGetOnContextMenu window-  = unsafeWindowGetHandlerState window wxEVT_CONTEXT_MENU skipCurrentEvent---- | A menu event is generated when the user selects a menu item.--- You should install this handler on the window that owns the menubar or a popup menu.-evtHandlerOnMenuCommand :: EvtHandler a -> Id -> IO () -> IO ()-evtHandlerOnMenuCommand window id eventHandler-  = evtHandlerOnEvent window id id [wxEVT_COMMAND_MENU_SELECTED] eventHandler (\_ -> return ()) (\ev -> eventHandler)---- | Get the current event handler for a certain menu.-evtHandlerGetOnMenuCommand :: EvtHandler a -> Id -> IO (IO ())-evtHandlerGetOnMenuCommand window id-  = unsafeGetHandlerState window id wxEVT_COMMAND_MENU_SELECTED skipCurrentEvent----- | An idle event is generated in idle time. The handler should return whether more--- idle processing is needed ('True') or otherwise the event loop goes into a passive--- waiting state.-windowOnIdle :: Window a -> IO Bool -> IO ()-windowOnIdle window eventHandler-  = windowOnEvent window [wxEVT_IDLE] eventHandler idleHandler-  where-    idleHandler event-      = do requestMore <- eventHandler-           idleEventRequestMore (objectCast event) requestMore-           return ()---- | Get the current context menu event handler.-windowGetOnIdle :: Window a -> IO (IO Bool)-windowGetOnIdle window-  = unsafeWindowGetHandlerState window wxEVT_IDLE (return False)----- | A timer event is generated by an attached timer, see 'windowTimerAttach'.--- /Broken!/ (use 'timerOnCommand' instead).-windowOnTimer :: Window a -> IO () -> IO ()-windowOnTimer window eventHandler-  = windowOnEvent window [wxEVT_TIMER] eventHandler (\ev -> eventHandler)---- | Get the current timer handler.-windowGetOnTimer :: Window a -> IO (IO ())-windowGetOnTimer window-  = unsafeWindowGetHandlerState window wxEVT_TIMER (return ())--{------------------------------------------------------------------------------------------  Paint------------------------------------------------------------------------------------------}--- | Set an event handler for /raw/ paint events. Draws directly to the--- paint device context ('PaintDC') and the 'DC' is not cleared when the handler--- is called. The handler takes two other arguments: the view rectangle and a--- list of /dirty/ rectangles. The rectangles contain logical coordinates and--- are already adjusted for scrolled windows.--- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!-windowOnPaintRaw :: Window a -> (DC () -> Rect -> [Rect] -> IO ()) -> IO ()-windowOnPaintRaw window paintHandler-  = windowOnEvent window [wxEVT_PAINT] paintHandler onPaint -  where-    onPaint event-      = do obj <- eventGetEventObject event-           if (obj==objectNull)-            then return ()-            else do let window = objectCast obj-                    region <- windowGetUpdateRects window-                    view   <- windowGetViewRect window-                    withPaintDC window (\paintDC ->-                     do isScrolled <- objectIsScrolledWindow window-                        when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)-                        paintHandler (downcastDC paintDC) view region)--                    --- | Get the current /raw/ paint event handler. -windowGetOnPaintRaw :: Window a -> IO (DC () -> Rect -> [Rect] -> IO ())-windowGetOnPaintRaw window-  = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc rect region -> return ())----- | Set an event handler for paint events. The implementation uses an --- intermediate buffer for non-flickering redraws. --- The device context ('DC')--- is always cleared before the paint handler is called. The paint handler--- also gets the currently visible view area as an argument (adjusted for scrolling).--- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!-windowOnPaint :: Window a -> (DC () -> Rect -> IO ()) -> IO ()-windowOnPaint window paintHandler-  | wxToolkit == WxMac  = windowOnPaintRaw window (\dc view _ -> paintHandler dc view)-  | otherwise-  = do v <- varCreate objectNull-       windowOnEventEx window [wxEVT_PAINT] paintHandler (destroy v) (onPaint v)-  where-    destroy v ownerDeleted-      = do bitmap <- varSwap v objectNull-           when (not (objectIsNull bitmap)) (bitmapDelete bitmap)--    onPaint v event-      = do obj <- eventGetEventObject event-           if (obj==objectNull)-            then return ()-            else do let window = objectCast obj-                    view  <- windowGetViewRect window-                    withPaintDC window (\paintDC ->-                     do isScrolled <- objectIsScrolledWindow window-                        when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)-                        -- Note: wxMSW 2.4 does not clear the properly scrolled view rectangle.-                        let clear dc  | wxToolkit == WxMSW  = dcClearRect dc view-                                      | otherwise           = dcClear dc-                        -- and repaint with buffer-                        dcBufferWithRefEx paintDC clear (Just v) view (\dc -> paintHandler dc view))----- | Get the current paint event handler.-windowGetOnPaint :: Window a -> IO (DC () -> Rect -> IO ())-windowGetOnPaint window-  = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc view -> return ())----- Get the logical /dirty/ rectangles as a list of 'Rect'.-windowGetUpdateRects :: Window a -> IO [Rect]-windowGetUpdateRects window-  = do region <- windowGetUpdateRegion window-       iter   <- regionIteratorCreateFromRegion region-       rects  <- getRects iter-       regionIteratorDelete iter-       p <- windowGetViewStart window-       return (map (\r -> rectMove r (vecFromPoint p)) rects)-  where-    getRects iter-      = do more <- regionIteratorHaveRects iter-           if more-            then do x <- regionIteratorGetX iter-                    y <- regionIteratorGetY iter-                    w <- regionIteratorGetWidth iter-                    h <- regionIteratorGetHeight iter-                    regionIteratorNext iter-                    rs <- getRects iter-                    return (rect (pt x y) (sz w h) : rs)-            else return []---{------------------------------------------------------------------------------------------  Modifiers------------------------------------------------------------------------------------------}--- | Called when a process is ended with the process @pid@ and exitcode.-evtHandlerOnEndProcess :: EvtHandler a -> (Int -> Int -> IO ()) -> IO ()-evtHandlerOnEndProcess  evtHandler handler-  = evtHandlerOnEvent evtHandler (-1) (-1) [wxEVT_END_PROCESS] handler onDelete onEndProcess-  where-    onDelete ownerDeleted-      = return ()--    onEndProcess event-      = let processEvent = objectCast event-        in  do pid  <- processEventGetPid processEvent-               code <- processEventGetExitCode processEvent-               handler pid code----- | Retrieve the current end process handler.-evtHandlerGetOnEndProcess :: EvtHandler a -> IO (Int -> Int -> IO ())-evtHandlerGetOnEndProcess evtHandler-  = unsafeGetHandlerState evtHandler (-1) wxEVT_END_PROCESS (\pid code -> return ())----- | The status of a stream (see 'StreamBase')-data StreamStatus = StreamOk          -- ^ No error.-                  | StreamEof         -- ^ No more input.-                  | StreamReadError   -- ^ Read error.-                  | StreamWriteError  -- ^ Write error.-                  deriving (Eq,Show)---- | Convert a stream status code into 'StreamStatus'.-streamStatusFromInt :: Int -> StreamStatus-streamStatusFromInt code-  | code == wxSTREAM_NO_ERROR     = StreamOk-  | code == wxSTREAM_EOF          = StreamEof-  | code == wxSTREAM_READ_ERROR   = StreamReadError-  | code == wxSTREAM_WRITE_ERROR  = StreamWriteError-  | otherwise                     = StreamReadError----- | Install an event handler on an input stream. The handler is called--- whenever input is read (or when an error occurred). The third parameter--- gives the size of the input batches. The orignal input stream should no longer be referenced after this call!-evtHandlerOnInput :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputStream a -> Int -> IO ()-evtHandlerOnInput evtHandler handler stream bufferLen-  = do sink <- inputSinkCreate stream evtHandler bufferLen-       evtHandlerOnInputSink evtHandler handler sink-       inputSinkStart sink---- | Install an event handler on a specific input sink. It is advised to--- use the 'evtHandlerOnInput' whenever retrieval of the handler is not necessary.-evtHandlerOnInputSink :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputSink a -> IO ()-evtHandlerOnInputSink evtHandler handler sink-  = do id <- inputSinkGetId sink-       evtHandlerOnEvent evtHandler id id [wxEVT_INPUT_SINK] handler onDelete onInput-  where-    onDelete ownerDeleted-      = return ()--    onInput event-      = let inputSinkEvent = objectCast event-        in  do input <- inputSinkEventLastString inputSinkEvent-               code  <- inputSinkEventLastError inputSinkEvent-               handler input (streamStatusFromInt code)----- | Retrieve the current input stream handler.-evtHandlerGetOnInputSink :: EvtHandler b -> IO (String -> StreamStatus -> IO ())-evtHandlerGetOnInputSink evtHandler-  = unsafeGetHandlerState evtHandler (-1) wxEVT_INPUT_SINK (\input status -> return ())---- | Read the input from an 'InputSinkEvent'.-inputSinkEventLastString :: InputSinkEvent a -> IO String-inputSinkEventLastString inputSinkEvent-  = do n <- inputSinkEventLastRead inputSinkEvent-       if (n <= 0)-        then return ""-        else do buffer <- inputSinkEventLastInput inputSinkEvent-                peekCWStringLen (buffer,n)---{------------------------------------------------------------------------------------------  Modifiers------------------------------------------------------------------------------------------}--- | The @Modifiers@ indicate the meta keys that have been pressed ('True') or not ('False').-data Modifiers  = Modifiers-                  { altDown     :: !Bool   -- ^ alt key down-                  , shiftDown   :: !Bool   -- ^ shift key down-                  , controlDown :: !Bool   -- ^ control key down-                  , metaDown    :: !Bool   -- ^ meta key down-                  }-                  deriving (Eq)--instance Show Modifiers where-  show mods = showModifiers mods---- | Show modifiers, for example for use in menus.-showModifiers :: Modifiers -> String-showModifiers mods-  = concat $ intersperse "+" $ filter (not.null)-    [if controlDown mods then "Ctrl" else ""-    ,if altDown mods     then "Alt" else ""-    ,if shiftDown mods   then "Shift" else ""-    ,if metaDown mods    then "Meta" else ""-    ]----- | Construct a 'Modifiers' structure with no meta keys pressed.-noneDown :: Modifiers-noneDown = Modifiers False False False False---- | Construct a 'Modifiers' structure with just Shift meta key pressed.-justShift   :: Modifiers-justShift   = noneDown{ shiftDown = True }---- | Construct a 'Modifiers' structure with just Alt meta key pressed.-justAlt     :: Modifiers-justAlt     = noneDown{ altDown = True }---- | Construct a 'Modifiers' structure with just Ctrl meta key pressed.-justControl :: Modifiers-justControl = noneDown{ controlDown = True }---- | Construct a 'Modifiers' structure with just Meta meta key pressed.-justMeta :: Modifiers-justMeta = noneDown{ metaDown = True }---- | Test if no meta key was pressed.-isNoneDown :: Modifiers -> Bool-isNoneDown (Modifiers shift control alt meta) = not (shift || control || alt || meta)---- | Test if no shift, alt, or control key was pressed.-isNoShiftAltControlDown :: Modifiers -> Bool-isNoShiftAltControlDown (Modifiers shift control alt meta) = not (shift || control || alt)---- | Tranform modifiers into an accelerator modifiers code.-modifiersToAccelFlags :: Modifiers -> Int-modifiersToAccelFlags mod-  = mask (altDown mod) 0x01 + mask (controlDown mod) 0x02 + mask (shiftDown mod) 0x04-  where-    mask test flag = if test then flag else 0--{------------------------------------------------------------------------------------------  MouseEvent------------------------------------------------------------------------------------------}--- | Mouse events. The 'Point' gives the logical (unscrolled) position.-data EventMouse-  =  MouseMotion      !Point !Modifiers -- ^ Mouse was moved over the client area of the window-  |  MouseEnter       !Point !Modifiers -- ^ Mouse enters in the client area of the window-  |  MouseLeave       !Point !Modifiers -- ^ Mouse leaves the client area of the window-  |  MouseLeftDown    !Point !Modifiers -- ^ Mouse left button goes down-  |  MouseLeftUp      !Point !Modifiers -- ^ Mouse left  button goes up-  |  MouseLeftDClick  !Point !Modifiers -- ^ Mouse left button double click-  |  MouseLeftDrag    !Point !Modifiers -- ^ Mouse left button drag-  |  MouseRightDown   !Point !Modifiers -- ^ Mouse right button goes down-  |  MouseRightUp     !Point !Modifiers -- ^ Mouse right  button goes up-  |  MouseRightDClick !Point !Modifiers -- ^ Mouse right button double click-  |  MouseRightDrag   !Point !Modifiers -- ^ Mouse right button drag (unsupported on most platforms)-  |  MouseMiddleDown  !Point !Modifiers -- ^ Mouse middle button goes down-  |  MouseMiddleUp    !Point !Modifiers -- ^ Mouse middle  button goes up-  |  MouseMiddleDClick !Point !Modifiers -- ^ Mouse middle button double click-  |  MouseMiddleDrag  !Point !Modifiers -- ^ Mouse middle button drag (unsupported on most platforms)-  |  MouseWheel !Bool !Point !Modifiers -- ^ Mouse wheel rotation. (Bool is True for a downward rotation)-  deriving (Eq) -- ,Show)---instance Show EventMouse where-  show mouse  = showMouse mouse---- | Show an 'EventMouse' in a user friendly way.-showMouse :: EventMouse -> String-showMouse mouse-  = (if (null modsText) then "" else modsText ++ "+") ++ action ++ " at " ++ show (x,y)-  where-    modsText     = show (mouseModifiers mouse)-    (Point x y)  = mousePos mouse-    action-      = case mouse of-          MouseMotion p m       -> "Motion"-          MouseEnter p m        -> "Enter"-          MouseLeave p m        -> "Leave"-          MouseLeftDown p m     -> "Left down"-          MouseLeftUp p m       -> "Left up"-          MouseLeftDClick p m   -> "Left double click"-          MouseLeftDrag p m     -> "Left drag"-          MouseRightDown p m    -> "Right down"-          MouseRightUp p m      -> "Right up"-          MouseRightDClick p m  -> "Right double click"-          MouseRightDrag p m    -> "Right drag"-          MouseMiddleDown p m   -> "Middle down"-          MouseMiddleUp p m     -> "Middle up"-          MouseMiddleDClick p m -> "Middle double click"-          MouseMiddleDrag p m   -> "Middle drag"-          MouseWheel down p m   -> "Wheel " ++ (if down then "down" else "up")----- | Extract the position from a 'MouseEvent'.-mousePos :: EventMouse -> Point-mousePos mouseEvent-  = case mouseEvent of-      MouseMotion p m        -> p-      MouseEnter p m        -> p-      MouseLeave p m        -> p-      MouseLeftDown p m     -> p-      MouseLeftUp p m       -> p-      MouseLeftDClick p m   -> p-      MouseLeftDrag p m     -> p-      MouseRightDown p m    -> p-      MouseRightUp p m      -> p-      MouseRightDClick p m  -> p-      MouseRightDrag p m    -> p-      MouseMiddleDown p m   -> p-      MouseMiddleUp p m     -> p-      MouseMiddleDClick p m -> p-      MouseMiddleDrag p m   -> p-      MouseWheel _ p m      -> p---- | Extract the modifiers from a 'MouseEvent'.-mouseModifiers :: EventMouse -> Modifiers-mouseModifiers mouseEvent-  = case mouseEvent of-      MouseMotion p m       -> m-      MouseEnter p m        -> m-      MouseLeave p m        -> m-      MouseLeftDown p m     -> m-      MouseLeftUp p m       -> m-      MouseLeftDClick p m   -> m-      MouseLeftDrag p m     -> m-      MouseRightDown p m    -> m-      MouseRightUp p m      -> m-      MouseRightDClick p m  -> m-      MouseRightDrag p m    -> m-      MouseMiddleDown p m   -> m-      MouseMiddleUp p m     -> m-      MouseMiddleDClick p m -> m-      MouseMiddleDrag p m   -> m-      MouseWheel _ p m      -> m--fromMouseEvent :: MouseEvent a -> IO EventMouse-fromMouseEvent event-  = do x <- mouseEventGetX event-       y <- mouseEventGetY event-       obj   <- eventGetEventObject event-       point <- windowCalcUnscrolledPosition (objectCast obj) (Point x y)--       altDown     <- mouseEventAltDown event-       controlDown <- mouseEventControlDown event-       shiftDown   <- mouseEventShiftDown event-       metaDown    <- mouseEventMetaDown event-       let modifiers = Modifiers altDown shiftDown controlDown metaDown--       dragging    <- mouseEventDragging event-       if (dragging)-        then do leftDown <- mouseEventLeftIsDown event-                if (leftDown)-                 then return (MouseLeftDrag point modifiers)-                 else do middleDown <- mouseEventMiddleIsDown event-                         if (middleDown)-                          then return (MouseMiddleDrag point modifiers)-                          else do rightDown <- mouseEventRightIsDown event-                                  if (rightDown)-                                   then return (MouseRightDrag point modifiers)-                                   else return (MouseMotion point modifiers)-        else do tp <- eventGetEventType event-                case lookup tp mouseEventTypes of-                  Just mouse  -> return (mouse point modifiers)-                  Nothing     -> if (tp==wxEVT_MOUSEWHEEL)-                                  then do rot   <- mouseEventGetWheelRotation event-                                          delta <- mouseEventGetWheelDelta event-                                          if (abs rot >= delta)-                                           then return (MouseWheel (rot<0) point modifiers)-                                           else return (MouseMotion point modifiers)-                                  else return (MouseMotion point modifiers)--mouseEventTypes :: [(Int,Point -> Modifiers -> EventMouse)]-mouseEventTypes-  = [(wxEVT_MOTION       , MouseMotion)         -- must be the first element, see "windowOnMouse"-    ,(wxEVT_ENTER_WINDOW , MouseEnter)-    ,(wxEVT_LEAVE_WINDOW , MouseLeave)-    ,(wxEVT_LEFT_DOWN    , MouseLeftDown)-    ,(wxEVT_LEFT_UP      , MouseLeftUp)-    ,(wxEVT_LEFT_DCLICK  , MouseLeftDClick)-    ,(wxEVT_MIDDLE_DOWN  , MouseMiddleDown)-    ,(wxEVT_MIDDLE_UP    , MouseMiddleUp)-    ,(wxEVT_MIDDLE_DCLICK, MouseMiddleDClick)-    ,(wxEVT_RIGHT_DOWN   , MouseRightDown)-    ,(wxEVT_RIGHT_UP     , MouseRightUp)-    ,(wxEVT_RIGHT_DCLICK , MouseRightDClick)-    ]---- | Set a mouse event handler for a window. The first argument determines whether--- mouse motion events ('MouseMotion') are handled or not.-windowOnMouse :: Window a -> Bool -> (EventMouse -> IO ()) -> IO ()-windowOnMouse window allowMotion handler-  = windowOnEvent window mouseEvents handler eventHandler-  where-    mouseEvents-      = (map fst (if allowMotion then mouseEventTypes else tail (mouseEventTypes))) ++ [wxEVT_MOUSEWHEEL]--    eventHandler event-      = do eventMouse <- fromMouseEvent (objectCast event)-           handler eventMouse---- | Get the current mouse event handler of a window.-windowGetOnMouse :: Window a -> IO (EventMouse -> IO ())-windowGetOnMouse window-  = unsafeWindowGetHandlerState window wxEVT_ENTER_WINDOW (\ev -> skipCurrentEvent)---{------------------------------------------------------------------------------------------  KeyboardEvent------------------------------------------------------------------------------------------}--- | Set an event handler for untranslated key presses. If 'skipCurrentEvent' is not--- called, the corresponding 'windowOnKeyChar' eventhandler won't be called.-windowOnKeyDown :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyDown window handler-  = windowOnEvent window [wxEVT_KEY_DOWN] handler eventHandler-  where-    eventHandler event-      = do eventKey <- eventKeyFromEvent (objectCast event)-           handler eventKey---- | Get the current key down handler of a window.-windowGetOnKeyDown :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyDown window-  = unsafeWindowGetHandlerState window wxEVT_KEY_DOWN (\eventKey -> skipCurrentEvent)----- | Set an event handler for translated key presses.-windowOnKeyChar :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyChar window handler-  = windowOnEvent window [wxEVT_CHAR] handler eventHandler-  where-    eventHandler event-      = do eventKey <- eventKeyFromEvent (objectCast event)-           handler eventKey---- | Get the current translated key handler of a window.-windowGetOnKeyChar :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyChar window-  = unsafeWindowGetHandlerState window wxEVT_CHAR (\eventKey -> skipCurrentEvent)----- | Set an event handler for (untranslated) key releases.-windowOnKeyUp :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyUp window handler-  = windowOnEvent window [wxEVT_KEY_UP] handler eventHandler-  where-    eventHandler event-      = do eventKey <- eventKeyFromEvent (objectCast event)-           handler eventKey---- | Get the current key release handler of a window.-windowGetOnKeyUp :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyUp window-  = unsafeWindowGetHandlerState window wxEVT_KEY_UP (\keyInfo -> skipCurrentEvent)---eventKeyFromEvent :: KeyEvent a -> IO EventKey-eventKeyFromEvent event-  = do x <- keyEventGetX event-       y <- keyEventGetY event-       obj   <- eventGetEventObject event-       point <- if objectIsNull obj-                 then return (Point x y)-                 else windowCalcUnscrolledPosition (objectCast obj) (Point x y)--       altDown     <- keyEventAltDown event-       controlDown <- keyEventControlDown event-       shiftDown   <- keyEventShiftDown event-       metaDown    <- keyEventMetaDown event-       let modifiers = Modifiers altDown shiftDown controlDown metaDown--       keyCode <- keyEventGetKeyCode event-       let key = keyCodeToKey keyCode--       return (EventKey key modifiers point)------ | A keyboard event contains the key, the modifiers and the focus point.-data EventKey  = EventKey !Key !Modifiers !Point-               deriving (Eq,Show)---- | Extract the key from a keyboard event.-keyKey :: EventKey -> Key-keyKey (EventKey key mods pos) = key---- | Extract the modifiers from a keyboard event.-keyModifiers :: EventKey -> Modifiers-keyModifiers (EventKey key mods pos) = mods---- | Extract the position from a keyboard event.-keyPos :: EventKey -> Point-keyPos (EventKey key mods pos) = pos----- | A low-level virtual key code.-type KeyCode  = Int---- | A 'Key' represents a single key on a keyboard.-data Key-  = KeyChar  !Char        -- ^ An ascii code.-  | KeyOther !KeyCode     -- ^ An unknown virtual key.-  | KeyBack-  | KeyTab-  | KeyReturn-  | KeyEscape-  | KeySpace-  | KeyDelete-  | KeyInsert-  | KeyEnd-  | KeyHome-  | KeyLeft-  | KeyUp-  | KeyRight-  | KeyDown-  | KeyPageUp-  | KeyPageDown-  | KeyStart-  | KeyClear-  | KeyShift-  | KeyAlt-  | KeyControl-  | KeyMenu-  | KeyPause-  | KeyCapital-  | KeyHelp-  | KeySelect-  | KeyPrint-  | KeyExecute-  | KeySnapshot-  | KeyCancel-  | KeyLeftButton-  | KeyRightButton-  | KeyMiddleButton-  | KeyNum0-  | KeyNum1-  | KeyNum2-  | KeyNum3-  | KeyNum4-  | KeyNum5-  | KeyNum6-  | KeyNum7-  | KeyNum8-  | KeyNum9-  | KeyMultiply-  | KeyAdd-  | KeySeparator-  | KeySubtract-  | KeyDecimal-  | KeyDivide-  | KeyF1-  | KeyF2-  | KeyF3-  | KeyF4-  | KeyF5-  | KeyF6-  | KeyF7-  | KeyF8-  | KeyF9-  | KeyF10-  | KeyF11-  | KeyF12-  | KeyF13-  | KeyF14-  | KeyF15-  | KeyF16-  | KeyF17-  | KeyF18-  | KeyF19-  | KeyF20-  | KeyF21-  | KeyF22-  | KeyF23-  | KeyF24-  | KeyNumLock-  | KeyScroll-{- Note: If we add "deriving (Show)" we get a strange link error in ghci:-    Loading package wxh ... linking ... Overflown relocs: 122--}-  deriving (Eq)--{--  | KeyNumSpace-  | KeyNumTab-  | KeyNumEnter-  | KeyNumF1-  | KeyNumF2-  | KeyNumF3-  | KeyNumF4-  | KeyNumHome-  | KeyNumLeft-  | KeyNumUp-  | KeyNumRight-  | KeyNumDown-  | KeyNumPageUp-  | KeyNumPageDown-  | KeyNumEnd-  | KeyNumBegin-  | KeyNumInsert-  | KeyNumDelete-  | KeyNumEqual-  | KeyNumMultiply-  | KeyNumAdd-  | KeyNumSeparator-  | KeyNumSubstract-  | KeyNumDecimal-  | KeyNumSubstract--}---- | From a key to a virtual key code.-keyToKeyCode :: Key -> KeyCode-keyToKeyCode key-  = case key of-      KeyChar c       -> fromEnum c-      KeyOther code   -> code-      KeyBack         -> wxK_BACK-      KeyTab          -> wxK_TAB-      KeyReturn       -> wxK_RETURN-      KeyEscape       -> wxK_ESCAPE-      KeySpace        -> wxK_SPACE-      KeyDelete       -> wxK_DELETE-      KeyInsert       -> wxK_INSERT-      KeyEnd          -> wxK_END-      KeyHome         -> wxK_HOME-      KeyLeft         -> wxK_LEFT-      KeyUp           -> wxK_UP-      KeyRight        -> wxK_RIGHT-      KeyDown         -> wxK_DOWN-      KeyPageUp       -> wxK_PAGEUP-      KeyPageDown     -> wxK_PAGEDOWN-      KeyStart        -> wxK_START-      KeyClear        -> wxK_CLEAR-      KeyShift        -> wxK_SHIFT-      KeyAlt          -> wxK_ALT-      KeyControl      -> wxK_CONTROL-      KeyMenu         -> wxK_MENU-      KeyPause        -> wxK_PAUSE-      KeyCapital      -> wxK_CAPITAL-      KeyHelp         -> wxK_HELP-      KeySelect       -> wxK_SELECT-      KeyPrint        -> wxK_PRINT-      KeyExecute      -> wxK_EXECUTE-      KeySnapshot     -> wxK_SNAPSHOT-      KeyCancel       -> wxK_CANCEL-      KeyLeftButton   -> wxK_LBUTTON-      KeyRightButton  -> wxK_RBUTTON-      KeyMiddleButton -> wxK_MBUTTON-      KeyNum0         -> wxK_NUMPAD0-      KeyNum1         -> wxK_NUMPAD1-      KeyNum2         -> wxK_NUMPAD2-      KeyNum3         -> wxK_NUMPAD3-      KeyNum4         -> wxK_NUMPAD4-      KeyNum5         -> wxK_NUMPAD5-      KeyNum6         -> wxK_NUMPAD6-      KeyNum7         -> wxK_NUMPAD7-      KeyNum8         -> wxK_NUMPAD8-      KeyNum9         -> wxK_NUMPAD9-      KeyMultiply     -> wxK_MULTIPLY-      KeyAdd          -> wxK_ADD-      KeySeparator    -> wxK_SEPARATOR-      KeySubtract     -> wxK_SUBTRACT-      KeyDecimal      -> wxK_DECIMAL-      KeyDivide       -> wxK_DIVIDE-      KeyF1           -> wxK_F1-      KeyF2           -> wxK_F2-      KeyF3           -> wxK_F3-      KeyF4           -> wxK_F4-      KeyF5           -> wxK_F5-      KeyF6           -> wxK_F6-      KeyF7           -> wxK_F7-      KeyF8           -> wxK_F8-      KeyF9           -> wxK_F9-      KeyF10          -> wxK_F10-      KeyF11          -> wxK_F11-      KeyF12          -> wxK_F12-      KeyF13          -> wxK_F13-      KeyF14          -> wxK_F14-      KeyF15          -> wxK_F15-      KeyF16          -> wxK_F16-      KeyF17          -> wxK_F17-      KeyF18          -> wxK_F18-      KeyF19          -> wxK_F19-      KeyF20          -> wxK_F20-      KeyF21          -> wxK_F21-      KeyF22          -> wxK_F22-      KeyF23          -> wxK_F23-      KeyF24          -> wxK_F24-      KeyNumLock      -> wxK_NUMLOCK-      KeyScroll       -> wxK_SCROLL---- | A virtual key code to a key.-keyCodeToKey :: KeyCode -> Key-keyCodeToKey keyCode-  = if (keyCode < wxK_DELETE && keyCode > wxK_SPACE)     -- optimize for the common case-     then KeyChar (toEnum keyCode)-     else case IntMap.lookup keyCode keyCodeMap of-            Just key -> key-            Nothing  | keyCode <= 255  -> KeyChar (toEnum keyCode)-                     | otherwise       -> KeyOther keyCode---- Use a big-endian patricia tree to efficiently map key codes to Haskell keys.--- Since it is a static map, we could maybe use one of Knuth's optimally balanced--- trees....--- keyCodeMap :: IntMap.IntMap Key-keyCodeMap-  = IntMap.fromList-    [(wxK_BACK         , KeyBack)-    ,(wxK_TAB          , KeyTab)-    ,(wxK_RETURN       , KeyReturn)-    ,(wxK_ESCAPE       , KeyEscape)-    ,(wxK_SPACE        , KeySpace)-    ,(wxK_DELETE       , KeyDelete)-    ,(wxK_INSERT       , KeyInsert)-    ,(wxK_END          , KeyEnd)-    ,(wxK_HOME         , KeyHome)-    ,(wxK_LEFT         , KeyLeft)-    ,(wxK_UP           , KeyUp)-    ,(wxK_RIGHT        , KeyRight)-    ,(wxK_DOWN         , KeyDown)-    ,(wxK_PAGEUP       , KeyPageUp)-    ,(wxK_PAGEDOWN     , KeyPageDown)-    ,(wxK_START        , KeyStart)-    ,(wxK_CLEAR        , KeyClear)-    ,(wxK_SHIFT        , KeyShift)-    ,(wxK_ALT          , KeyAlt)-    ,(wxK_CONTROL      , KeyControl)-    ,(wxK_MENU         , KeyMenu)-    ,(wxK_PAUSE        , KeyPause)-    ,(wxK_CAPITAL      , KeyCapital)-    ,(wxK_HELP         , KeyHelp)-    ,(wxK_SELECT       , KeySelect)-    ,(wxK_PRINT        , KeyPrint)-    ,(wxK_EXECUTE      , KeyExecute)-    ,(wxK_SNAPSHOT     , KeySnapshot)-    ,(wxK_CANCEL       , KeyCancel)-    ,(wxK_LBUTTON      , KeyLeftButton)-    ,(wxK_RBUTTON      , KeyRightButton)-    ,(wxK_MBUTTON      , KeyMiddleButton)-    ,(wxK_NUMPAD0      , KeyNum0)-    ,(wxK_NUMPAD1      , KeyNum1)-    ,(wxK_NUMPAD2      , KeyNum2)-    ,(wxK_NUMPAD3      , KeyNum3)-    ,(wxK_NUMPAD4      , KeyNum4)-    ,(wxK_NUMPAD5      , KeyNum5)-    ,(wxK_NUMPAD6      , KeyNum6)-    ,(wxK_NUMPAD7      , KeyNum7)-    ,(wxK_NUMPAD8      , KeyNum8)-    ,(wxK_NUMPAD9      , KeyNum9)-    ,(wxK_MULTIPLY     , KeyMultiply)-    ,(wxK_ADD          , KeyAdd)-    ,(wxK_SEPARATOR    , KeySeparator)-    ,(wxK_SUBTRACT     , KeySubtract)-    ,(wxK_DECIMAL      , KeyDecimal)-    ,(wxK_DIVIDE       , KeyDivide)-    ,(wxK_F1           , KeyF1)-    ,(wxK_F2           , KeyF2)-    ,(wxK_F3           , KeyF3)-    ,(wxK_F4           , KeyF4)-    ,(wxK_F5           , KeyF5)-    ,(wxK_F6           , KeyF6)-    ,(wxK_F7           , KeyF7)-    ,(wxK_F8           , KeyF8)-    ,(wxK_F9           , KeyF9)-    ,(wxK_F10          , KeyF10)-    ,(wxK_F11          , KeyF11)-    ,(wxK_F12          , KeyF12)-    ,(wxK_F13          , KeyF13)-    ,(wxK_F14          , KeyF14)-    ,(wxK_F15          , KeyF15)-    ,(wxK_F16          , KeyF16)-    ,(wxK_F17          , KeyF17)-    ,(wxK_F18          , KeyF18)-    ,(wxK_F19          , KeyF19)-    ,(wxK_F20          , KeyF20)-    ,(wxK_F21          , KeyF21)-    ,(wxK_F22          , KeyF22)-    ,(wxK_F23          , KeyF23)-    ,(wxK_F24          , KeyF24)-    ,(wxK_NUMLOCK      , KeyNumLock)-    ,(wxK_SCROLL       , KeyScroll)-    -- translate with loss of information-    ,(wxK_NUMPAD_SPACE , KeySpace)-    ,(wxK_NUMPAD_TAB   , KeyTab)-    ,(wxK_NUMPAD_ENTER , KeyReturn)-    ,(wxK_NUMPAD_F1    , KeyF1)-    ,(wxK_NUMPAD_F2    , KeyF2)-    ,(wxK_NUMPAD_F3    , KeyF3)-    ,(wxK_NUMPAD_F4    , KeyF4)-    ,(wxK_NUMPAD_HOME  , KeyHome)-    ,(wxK_NUMPAD_LEFT  , KeyLeft)-    ,(wxK_NUMPAD_UP    , KeyUp)-    ,(wxK_NUMPAD_RIGHT , KeyRight)-    ,(wxK_NUMPAD_DOWN  , KeyDown)-    ,(wxK_NUMPAD_PAGEUP   , KeyPageUp)-    ,(wxK_NUMPAD_PAGEDOWN , KeyPageDown)-    ,(wxK_NUMPAD_END      , KeyEnd)---            ,(wxK_NUMPAD_BEGIN    , KeyBegin)-    ,(wxK_NUMPAD_INSERT   , KeyInsert)-    ,(wxK_NUMPAD_DELETE   , KeyDelete)---            ,(wxK_NUMPAD_EQUAL    , KeyEqual)-    ,(wxK_NUMPAD_MULTIPLY , KeyMultiply)-    ,(wxK_NUMPAD_ADD      , KeyAdd)-    ,(wxK_NUMPAD_SEPARATOR  , KeySeparator)-    ,(wxK_NUMPAD_SUBTRACT   , KeySubtract)-    ,(wxK_NUMPAD_DECIMAL    , KeyDecimal)-    ,(wxK_NUMPAD_DIVIDE     , KeyDivide)-    ]---instance Show Key where-  show k  = showKey k---- | Show a key\/modifiers combination, for example for use in menus.-showKeyModifiers :: Key -> Modifiers -> String-showKeyModifiers key mods-  | null modsText = show key-  | otherwise     = modsText ++ "+" ++ show key-  where-    modsText = show mods---- | Show a key for use in menus for example.-showKey :: Key -> String-showKey key-  = case key of-      KeyChar c       -> [c]-      KeyOther code   -> "[" ++ show code ++ "]"-      KeyBack         -> "Backspace"-      KeyTab          -> "Tab"-      KeyReturn       -> "Enter"-      KeyEscape       -> "Esc"-      KeySpace        -> "Space"-      KeyDelete       -> "Delete"-      KeyInsert       -> "Insert"-      KeyEnd          -> "End"-      KeyHome         -> "Home"-      KeyLeft         -> "Left"-      KeyUp           -> "Up"-      KeyRight        -> "Right"-      KeyDown         -> "Down"-      KeyPageUp       -> "PgUp"-      KeyPageDown     -> "PgDn"-      KeyStart        -> "Start"-      KeyClear        -> "Clear"-      KeyShift        -> "Shift"-      KeyAlt          -> "Alt"-      KeyControl      -> "Ctrl"-      KeyMenu         -> "Menu"-      KeyPause        -> "Pause"-      KeyCapital      -> "Capital"-      KeyHelp         -> "Help"-      KeySelect       -> "Select"-      KeyPrint        -> "Print"-      KeyExecute      -> "Execute"-      KeySnapshot     -> "Snapshot"-      KeyCancel       -> "Cancel"-      KeyLeftButton   -> "Left Button"-      KeyRightButton  -> "Right Button"-      KeyMiddleButton -> "Middle Button"-      KeyNum0         -> "Num 0"-      KeyNum1         -> "Num 1"-      KeyNum2         -> "Num 2"-      KeyNum3         -> "Num 3"-      KeyNum4         -> "Num 4"-      KeyNum5         -> "Num 5"-      KeyNum6         -> "Num 6"-      KeyNum7         -> "Num 7"-      KeyNum8         -> "Num 8"-      KeyNum9         -> "Num 9"-      KeyMultiply     -> "Num *"-      KeyAdd          -> "Num +"-      KeySeparator    -> "Num Separator"-      KeySubtract     -> "Num -"-      KeyDecimal      -> "Num ."-      KeyDivide       -> "Num /"-      KeyF1           -> "F1"-      KeyF2           -> "F2"-      KeyF3           -> "F3"-      KeyF4           -> "F4"-      KeyF5           -> "F5"-      KeyF6           -> "F6"-      KeyF7           -> "F7"-      KeyF8           -> "F8"-      KeyF9           -> "F9"-      KeyF10          -> "F10"-      KeyF11          -> "F11"-      KeyF12          -> "F12"-      KeyF13          -> "F13"-      KeyF14          -> "F14"-      KeyF15          -> "F15"-      KeyF16          -> "F16"-      KeyF17          -> "F17"-      KeyF18          -> "F18"-      KeyF19          -> "F19"-      KeyF20          -> "F20"-      KeyF21          -> "F21"-      KeyF22          -> "F22"-      KeyF23          -> "F23"-      KeyF24          -> "F24"-      KeyNumLock      -> "Numlock"-      KeyScroll       -> "Scroll"--{------------------------------------------------------------------------------------------  Drag and Drop events------------------------------------------------------------------------------------------}--- | Drag results-data DragResult-    = DragError-    | DragNone-    | DragCopy-    | DragMove-    | DragLink-    | DragCancel-    | DragUnknown-   deriving (Eq,Show)--dragResults :: [(Int, DragResult)]-dragResults-    = [(wxDRAG_ERROR   ,DragError)-      ,(wxDRAG_NONE    ,DragNone)-      ,(wxDRAG_COPY    ,DragCopy)-      ,(wxDRAG_MOVE    ,DragMove)-      ,(wxDRAG_LINK    ,DragLink)-      ,(wxDRAG_CANCEL  ,DragCancel)]--fromDragResult :: DragResult -> Int-fromDragResult drag-  = case drag of-      DragError   -> wxDRAG_ERROR-      DragNone    -> wxDRAG_NONE-      DragCopy    -> wxDRAG_COPY-      DragMove    -> wxDRAG_MOVE-      DragLink    -> wxDRAG_LINK-      DragCancel  -> wxDRAG_CANCEL-      DragUnknown -> wxDRAG_ERROR--toDragResult :: Int -> DragResult-toDragResult drag- = case lookup drag dragResults of-      Just x -> x-      Nothing -> DragError---- | Set an event handler that is called when the drop target can be filled with data.--- This function require to use 'dropTargetGetData' in your event handler to fill data.-dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnData drop event = do-    funPtr <- dragThreeFuncHandler event-    wxcDropTargetSetOnData (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for an drop command in a drop target.-dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO ()-dropTargetOnDrop drop event = do-    funPtr <- dragTwoFuncHandler event-    wxcDropTargetSetOnDrop (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for an enter command in a drop target.-dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnEnter drop event = do-    funPtr <- dragThreeFuncHandler event-    wxcDropTargetSetOnEnter (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for a drag over command in a drop target.-dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnDragOver drop event = do-    funPtr <- dragThreeFuncHandler event-    wxcDropTargetSetOnDragOver (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for a leave command in a drop target.-dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO ()-dropTargetOnLeave drop event = do-    funPtr <- dragZeroFuncHandler event-    wxcDropTargetSetOnLeave (objectCast drop) (toCFunPtr funPtr)--dragZeroFuncHandler event =-    dragZeroFunc $ \obj -> do-    event--dragTwoFuncHandler event =-    dragTwoFunc $ \obj x y -> do-    result <- event (point (fromIntegral x) (fromIntegral y))-    return $ fromBool result--dragThreeFuncHandler event =-    dragThreeFunc $ \obj x y pre -> do-    result <- event (point (fromIntegral x) (fromIntegral y)) (toDragResult $ fromIntegral pre)-    return $ fromIntegral $ fromDragResult result---- | Set an event handler for a drag & drop command between drag source window and drop--- target. You must set 'dropTarget' before use this action.--- And If you use 'fileDropTarget' or 'textDropTarget', you need not use this.-dragAndDrop :: DropSource a -> DragMode -> (DragResult -> IO ()) -> IO ()-dragAndDrop drSrc flag event = do-    result <- dropSourceDoDragDrop drSrc (fromDragMode flag)-    case lookup result dragResults of-      Just x -> event x-      Nothing -> return ()---- | Set an event handler that is called when text is dropped in target window.-textDropTarget :: Window a -> TextDataObject b -> (Point -> String -> IO ()) -> IO ()-textDropTarget window textData event = do-    funPtr <- dropTextHandler event-    textDrop <- wxcTextDropTargetCreate nullPtr (toCFunPtr funPtr)-    dropTargetSetDataObject textDrop textData-    windowSetDropTarget window textDrop--dropTextHandler event =-    wrapTextDropHandler $ \obj x y cstr -> do-    str <- peekCWString cstr-    event (point (fromIntegral x) (fromIntegral y)) str---- | Set an event handler that is called when files are dropped in target window.-fileDropTarget :: Window a -> (Point -> [String] -> IO ()) -> IO ()-fileDropTarget window event = do-    funPtr <- dropFileHandler event-    fileDrop <- wxcFileDropTargetCreate nullPtr (toCFunPtr funPtr)-    windowSetDropTarget window fileDrop--dropFileHandler event =-    wrapFileDropHandler $ \obj x y carr size -> do-    arr <- peekArray (fromIntegral size) carr-    files <- mapM peekCWString arr-    event (point (fromIntegral x) (fromIntegral y)) files--data DragMode = CopyOnly | AllowMove | Default-              deriving (Eq,Show)-              -- deriving (Eq,Show,Read,Typeable)--fromDragMode :: DragMode -> Int-fromDragMode mode-  = case mode of-      CopyOnly  -> wxDRAG_COPYONLY-      AllowMove -> wxDRAG_ALLOWMOVE-      Default   -> wxDRAG_DEFALUTMOVE--foreign import ccall "wrapper" dragZeroFunc :: (Ptr obj -> IO ()) -> IO (FunPtr (Ptr obj -> IO ()))-foreign import ccall "wrapper" dragTwoFunc :: (Ptr obj -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> IO CInt))-foreign import ccall "wrapper" dragThreeFunc :: (Ptr obj -> CInt -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> CInt -> IO CInt))-foreign import ccall "wrapper" wrapTextDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()))-foreign import ccall "wrapper" wrapFileDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()))--{------------------------------------------------------------------------------------------  Grid events------------------------------------------------------------------------------------------}-type Column     = Int-type Row        = Int---- | Grid events. -data EventGrid  = GridCellMouse        !Row !Column !EventMouse-                | GridLabelMouse       !Row !Column !EventMouse-                | GridCellChange       !Row !Column !(IO ())-                | GridCellSelect       !Row !Column !(IO ())-                | GridCellDeSelect     !Row !Column !(IO ())-                | GridEditorHidden     !Row !Column !(IO ())-                | GridEditorShown      !Row !Column !(IO ())-                | GridEditorCreated    !Row !Column (IO (Control ())) -                | GridColSize          !Column !Point !Modifiers (IO ())-                | GridRowSize          !Row !Point !Modifiers (IO ())-                | GridRangeSelect      !Row !Column !Row !Column !Rect !Modifiers !(IO ())-                | GridRangeDeSelect    !Row !Column !Row !Column !Rect !Modifiers !(IO ())-                | GridUnknown          !Row !Column !Int--fromGridEvent :: GridEvent a -> IO EventGrid-fromGridEvent gridEvent-  = do tp  <- eventGetEventType gridEvent-       row <- gridEventGetRow gridEvent-       col <- gridEventGetCol gridEvent-       case lookup tp gridEvents of-         Just make  -> make gridEvent row col -         Nothing    -> return (GridUnknown row col tp)--gridEvents :: [(Int, GridEvent a -> Int -> Int -> IO EventGrid)]-gridEvents-  = [(wxEVT_GRID_CELL_LEFT_CLICK,    gridMouse GridCellMouse MouseLeftDown)-    ,(wxEVT_GRID_CELL_LEFT_DCLICK,   gridMouse GridCellMouse MouseLeftDClick)-    ,(wxEVT_GRID_CELL_RIGHT_CLICK,   gridMouse GridCellMouse MouseRightDown)-    ,(wxEVT_GRID_CELL_RIGHT_DCLICK,  gridMouse GridCellMouse MouseRightDClick)-    ,(wxEVT_GRID_LABEL_LEFT_CLICK,   gridMouse GridLabelMouse MouseLeftDown)-    ,(wxEVT_GRID_LABEL_LEFT_DCLICK,  gridMouse GridLabelMouse MouseLeftDClick)-    ,(wxEVT_GRID_LABEL_RIGHT_CLICK,  gridMouse GridLabelMouse MouseRightDown)-    ,(wxEVT_GRID_LABEL_RIGHT_DCLICK, gridMouse GridLabelMouse MouseRightDClick)-    ,(wxEVT_GRID_SELECT_CELL,        gridSelect)-    ,(wxEVT_GRID_EDITOR_SHOWN,       gridVeto GridEditorShown)-    ,(wxEVT_GRID_EDITOR_HIDDEN,      gridVeto GridEditorHidden)-    ]-  where-    gridMouse make makeMouse gridEvent row col-      = do pt          <- gridEventGetPosition gridEvent-           altDown     <- gridEventAltDown gridEvent-           controlDown <- gridEventControlDown gridEvent-           shiftDown   <- gridEventShiftDown gridEvent-           metaDown    <- gridEventMetaDown gridEvent-           let modifiers = Modifiers altDown shiftDown controlDown metaDown-           return (make row col (makeMouse pt modifiers))--    gridVeto make gridEvent row col-      = return (make row col (notifyEventVeto gridEvent))--    gridSelect gridEvent row col-      = do selecting <- gridEventSelecting gridEvent-           if selecting-            then return (GridCellSelect row col (notifyEventVeto gridEvent))-            else return (GridCellDeSelect row col (notifyEventVeto gridEvent))------- | Set a grid event handler.-gridOnGridEvent :: Grid a -> (EventGrid -> IO ()) -> IO ()-gridOnGridEvent grid eventHandler-  = windowOnEvent grid (map fst gridEvents) eventHandler gridHandler-  where-    gridHandler event-      = do eventGrid <- fromGridEvent (objectCast event)-           eventHandler eventGrid---- | Get the current grid event handler of a window.-gridGetOnGridEvent :: Grid a -> IO (EventGrid -> IO ())-gridGetOnGridEvent grid-  = unsafeWindowGetHandlerState grid wxEVT_GRID_CELL_CHANGED (\event -> skipCurrentEvent)---{------------------------------------------------------------------------------------------  TreeCtrl events------------------------------------------------------------------------------------------}--- | Tree control events-data EventTree  = TreeBeginRDrag      TreeItem  !Point  (IO ()) -- ^ Drag with right button. Call @IO@ action to continue dragging.-                | TreeBeginDrag       TreeItem  !Point  (IO ())-                | TreeEndDrag         TreeItem  !Point-                | TreeBeginLabelEdit  TreeItem  String  (IO ())     -- ^ Edit a label. Call @IO@ argument to disallow the edit.-                | TreeEndLabelEdit    TreeItem  String Bool  (IO ()) -- ^ End edit. @Bool@ is 'True' when the edit was cancelled. Call the @IO@ argument to veto the action.-                | TreeDeleteItem      TreeItem  -                | TreeItemActivated   TreeItem  -                | TreeItemCollapsed   TreeItem  -                | TreeItemCollapsing  TreeItem  (IO ())          -- ^ Call the @IO@ argument to veto.       -                | TreeItemExpanding   TreeItem  (IO ())          -- ^ Call the @IO@ argument to veto.-                | TreeItemExpanded    TreeItem  -                | TreeItemRightClick  TreeItem  -                | TreeItemMiddleClick TreeItem  -                | TreeSelChanged      TreeItem  TreeItem  -                | TreeSelChanging     TreeItem  TreeItem  (IO ()) -- ^ Call the @IO@ argument to veto.-                | TreeKeyDown         TreeItem  EventKey-                | TreeUnknown--fromTreeEvent :: TreeEvent a -> IO EventTree-fromTreeEvent treeEvent-  = do tp   <- eventGetEventType treeEvent-       item <- treeEventGetItem treeEvent-       case lookup tp treeEvents of-         Just make   -> make treeEvent item-         Nothing     -> return TreeUnknown-        -treeEvents :: [(Int,TreeEvent a -> TreeItem -> IO EventTree)]-treeEvents -  = [(wxEVT_COMMAND_TREE_DELETE_ITEM,       fromItemEvent TreeDeleteItem)-    ,(wxEVT_COMMAND_TREE_ITEM_ACTIVATED,    fromItemEvent TreeItemActivated)-    ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSED,    fromItemEvent TreeItemCollapsed)-    ,(wxEVT_COMMAND_TREE_ITEM_EXPANDED,     fromItemEvent TreeItemExpanded)-    ,(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,  fromItemEvent TreeItemRightClick)-    ,(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, fromItemEvent TreeItemMiddleClick)-    ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSING,   withVeto (fromItemEvent TreeItemCollapsing))-    ,(wxEVT_COMMAND_TREE_ITEM_EXPANDING,    withVeto (fromItemEvent TreeItemExpanding))-    ,(wxEVT_COMMAND_TREE_KEY_DOWN,          fromKeyDownEvent )-    ,(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,  fromBeginLabelEditEvent )-    ,(wxEVT_COMMAND_TREE_END_LABEL_EDIT,    fromEndLabelEditEvent )-    ,(wxEVT_COMMAND_TREE_BEGIN_DRAG,        withAllow (fromDragEvent TreeBeginDrag))-    ,(wxEVT_COMMAND_TREE_BEGIN_RDRAG,       withAllow (fromDragEvent TreeBeginRDrag))-    ,(wxEVT_COMMAND_TREE_END_DRAG,          fromDragEvent TreeEndDrag)-    ,(wxEVT_COMMAND_TREE_SEL_CHANGED,       fromChangeEvent TreeSelChanged)-    ,(wxEVT_COMMAND_TREE_SEL_CHANGING,      withVeto (fromChangeEvent TreeSelChanging))-    ]-  where-    fromKeyDownEvent treeEvent item-      = do keyEvent <- treeEventGetKeyEvent treeEvent-           eventKey <- eventKeyFromEvent keyEvent-           return (TreeKeyDown item eventKey)--    fromBeginLabelEditEvent treeEvent item-      = do lab <- treeEventGetLabel treeEvent-           return (TreeBeginLabelEdit item lab (notifyEventVeto treeEvent))-                  -    fromEndLabelEditEvent treeEvent item-      = do lab <- treeEventGetLabel treeEvent-           can <- treeEventIsEditCancelled treeEvent-           return (TreeEndLabelEdit item lab can (notifyEventVeto treeEvent))--    fromDragEvent make treeEvent item-      = do pt <- treeEventGetPoint treeEvent-           return (make item pt)--    fromChangeEvent make treeEvent item-      = do olditem <- treeEventGetOldItem treeEvent-           return (make item olditem)-    -    withAllow make treeEvent item-      = do f <- make treeEvent item-           return (f (treeEventAllow treeEvent))--    withVeto make treeEvent item-      = do f <- make treeEvent item-           return (f (notifyEventVeto treeEvent))--    fromItemEvent make treeEvent item-      = return (make item)------ | Set a tree event handler.-treeCtrlOnTreeEvent :: TreeCtrl a -> (EventTree -> IO ()) -> IO ()-treeCtrlOnTreeEvent treeCtrl eventHandler-  = windowOnEvent treeCtrl (map fst treeEvents) eventHandler treeHandler-  where-    treeHandler event-      = do eventTree <- fromTreeEvent (objectCast event)-           eventHandler eventTree---- | Get the current tree event handler of a window.-treeCtrlGetOnTreeEvent :: TreeCtrl a -> IO (EventTree -> IO ())-treeCtrlGetOnTreeEvent treeCtrl-  = unsafeWindowGetHandlerState treeCtrl wxEVT_COMMAND_TREE_ITEM_ACTIVATED (\event -> skipCurrentEvent)---{------------------------------------------------------------------------------------------  ListCtrl events------------------------------------------------------------------------------------------}--- | Type synonym for documentation purposes.-type ListIndex  = Int---- | List control events.-data EventList  = ListBeginDrag       !ListIndex !Point (IO ()) -- ^ Drag with left mouse button. Call @IO@ argument to veto this action.-                | ListBeginRDrag      !ListIndex !Point (IO ()) -- ^ Drag with right mouse button. @IO@ argument to veto this action.-                | ListBeginLabelEdit  !ListIndex (IO ())        -- ^ Edit label. Call @IO@ argument to veto this action.-                | ListEndLabelEdit    !ListIndex !Bool (IO ())  -- ^ End editing label. @Bool@ argument is 'True' when cancelled. Call @IO@ argument to veto this action.-                | ListDeleteItem      !ListIndex-                | ListDeleteAllItems-                | ListItemSelected    !ListIndex -                | ListItemDeselected  !ListIndex -                | ListItemActivated   !ListIndex        -- ^ Activate (ENTER or double click)  -                | ListItemFocused     !ListIndex -                | ListItemMiddleClick !ListIndex -                | ListItemRightClick  !ListIndex   -                | ListInsertItem      !ListIndex   -                | ListColClick        !Int              -- ^ Column has been clicked. (-1 when clicked in control header outside any column)-                | ListColRightClick   !Int                -                | ListColBeginDrag    !Int (IO ())      -- ^ Column is dragged. Index is of the column left of the divider that is being dragged. Call @IO@ argument to veto this action.-                | ListColDragging     !Int-                | ListColEndDrag      !Int (IO ())      -- ^ Column has been dragged. Call @IO@ argument to veto this action.-                | ListKeyDown         !Key              -                | ListCacheHint       !Int !Int         -- ^ (Inclusive) range of list items that are advised to be cached.-                | ListUnknown---fromListEvent :: ListEvent a -> IO EventList-fromListEvent listEvent-  = do tp <- eventGetEventType listEvent-       case lookup tp listEvents of-         Just f  -> f listEvent -         Nothing -> return ListUnknown--listEvents :: [(Int, ListEvent a -> IO EventList)]-listEvents-  = [(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT,  withVeto $ withItem ListBeginLabelEdit)-    ,(wxEVT_COMMAND_LIST_DELETE_ITEM,       withItem ListDeleteItem)-    ,(wxEVT_COMMAND_LIST_INSERT_ITEM,       withItem ListInsertItem)-    ,(wxEVT_COMMAND_LIST_ITEM_ACTIVATED,    withItem ListItemActivated)-    ,(wxEVT_COMMAND_LIST_ITEM_DESELECTED,   withItem ListItemDeselected)-    ,(wxEVT_COMMAND_LIST_ITEM_FOCUSED,      withItem ListItemFocused)-    ,(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ,withItem ListItemMiddleClick)-    ,(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,  withItem ListItemRightClick)-    ,(wxEVT_COMMAND_LIST_ITEM_SELECTED,     withItem ListItemSelected)-    ,(wxEVT_COMMAND_LIST_END_LABEL_EDIT,    withVeto $ withCancel $ withItem ListEndLabelEdit )-    ,(wxEVT_COMMAND_LIST_BEGIN_RDRAG,       withVeto $ withPoint $ withItem ListBeginRDrag)-    ,(wxEVT_COMMAND_LIST_BEGIN_DRAG,        withVeto $ withPoint $ withItem ListBeginDrag)-    ,(wxEVT_COMMAND_LIST_COL_CLICK,         withColumn ListColClick)-    ,(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG,    withVeto $ withColumn ListColBeginDrag)-    ,(wxEVT_COMMAND_LIST_COL_DRAGGING,      withColumn ListColDragging)-    ,(wxEVT_COMMAND_LIST_COL_END_DRAG,      withVeto $ withColumn ListColEndDrag)-    ,(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK,   withColumn ListColRightClick)-    ,(wxEVT_COMMAND_LIST_CACHE_HINT,        withCache  ListCacheHint )-    ,(wxEVT_COMMAND_LIST_KEY_DOWN,          withKeyCode ListKeyDown )-    ,(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS,  \event -> return ListDeleteAllItems )-    ]-  where-    withPoint make listEvent-      = do f   <- make listEvent-           pt  <- listEventGetPoint listEvent-           return (f pt)--    withCancel make listEvent-      = do f   <- make listEvent-           can <- listEventCancelled listEvent-           return (f can)--    withVeto :: (ListEvent a -> IO (IO () -> EventList)) -> ListEvent a -> IO EventList-    withVeto make listEvent-      = do f <- make listEvent-           return (f (notifyEventVeto listEvent))--    withKeyCode make listEvent-      = do code <- listEventGetCode listEvent-           return (make (keyCodeToKey code))--    withCache make listEvent-      = do lo <- listEventGetCacheFrom listEvent-           hi <- listEventGetCacheTo listEvent-           return (make lo hi)-                -    withColumn make listEvent-      = do col <- listEventGetColumn listEvent-           return (make col)--    withItem :: (ListIndex -> b) -> ListEvent a -> IO b-    withItem make listEvent-      = do item <- listEventGetIndex listEvent-           return (make item)--         ---- | Set a list event handler.-listCtrlOnListEvent :: ListCtrl a -> (EventList -> IO ()) -> IO ()-listCtrlOnListEvent listCtrl eventHandler-  = windowOnEvent listCtrl (map fst listEvents) eventHandler listHandler-  where-    listHandler event-      = do eventList <- fromListEvent (objectCast event)-           eventHandler eventList---- | Get the current list event handler of a window.-listCtrlGetOnListEvent :: ListCtrl a -> IO (EventList -> IO ())-listCtrlGetOnListEvent listCtrl-  = unsafeWindowGetHandlerState listCtrl wxEVT_COMMAND_LIST_ITEM_ACTIVATED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------ TaskBarIcon Events--------------------------------------------------------------------------------------------data EventTaskBarIcon = TaskBarIconMove-                      | TaskBarIconLeftDown-                      | TaskBarIconLeftUp-                      | TaskBarIconRightDown-                      | TaskBarIconRightUp-                      | TaskBarIconLeftDClick-                      | TaskBarIconRightDClick-                      | TaskBarIconUnknown-                      deriving (Show, Eq)--fromTaskBarIconEvent :: Event a -> IO EventTaskBarIcon-fromTaskBarIconEvent event-  = do tp     <- eventGetEventType event-       case lookup tp taskBarIconEvents of-         Just evt  -> return evt-         Nothing   -> return TaskBarIconUnknown--taskBarIconEvents :: [(Int,EventTaskBarIcon)]-taskBarIconEvents-  = [(wxEVT_TASKBAR_MOVE,         TaskBarIconMove)-    ,(wxEVT_TASKBAR_LEFT_DOWN,    TaskBarIconLeftDown)-    ,(wxEVT_TASKBAR_LEFT_UP,      TaskBarIconLeftUp)-    ,(wxEVT_TASKBAR_RIGHT_DOWN,   TaskBarIconRightDown)-    ,(wxEVT_TASKBAR_RIGHT_UP,     TaskBarIconRightUp)-    ,(wxEVT_TASKBAR_LEFT_DCLICK,  TaskBarIconLeftDClick)-    ,(wxEVT_TASKBAR_RIGHT_DCLICK, TaskBarIconRightDClick)-    ]---- | Set a taskbar icon event handler.-evtHandlerOnTaskBarIconEvent :: TaskBarIcon a -> (EventTaskBarIcon -> IO ()) -> IO ()-evtHandlerOnTaskBarIconEvent taskbar eventHandler-  = evtHandlerOnEvent taskbar idAny idAny (map fst taskBarIconEvents) eventHandler-       -- finalize taskBarIcon's resource on Windows.-       (\_ -> if wxToolkit == WxMSW-              then (taskBarIconRemoveIcon taskbar-                   -- But taskBarIconDelete doesn't work well in this part. I don't know why.-                   -- >> taskBarIconDelete taskbar-                   >> return ())-              else (return ()))-       scrollHandler-  where-    scrollHandler event-      = do eventTaskBar <- fromTaskBarIconEvent event-           eventHandler eventTaskBar---- | Get the current event handler for a taskbar icon.-evtHandlerGetOnTaskBarIconEvent :: EvtHandler a -> Id -> EventTaskBarIcon -> IO (IO ())-evtHandlerGetOnTaskBarIconEvent window id evt-  = unsafeGetHandlerState window id-      (fromMaybe wxEVT_TASKBAR_MOVE-          $ lookup evt $ uncurry (flip zip) . unzip $ taskBarIconEvents)-      skipCurrentEvent---{------------------------------------------------------------------------------------------  PropertyGrid events------------------------------------------------------------------------------------------}--- | PropertyGrid control events.-data EventPropertyGrid  -                = PropertyGridHighlighted (Maybe (PGProperty ()))-                | PropertyGridChanged (PGProperty ())-                | PropertyGridUnknown--fromPropertyGridEvent :: PropertyGridEvent a -> IO EventPropertyGrid-fromPropertyGridEvent propertyGridEvent-  = do tp <- eventGetEventType propertyGridEvent-       case lookup tp propertyGridEvents of-         Just f  -> f propertyGridEvent -         Nothing -> return PropertyGridUnknown--propertyGridEvents :: [(Int, PropertyGridEvent a -> IO EventPropertyGrid)]-propertyGridEvents-  = [(wxEVT_PG_HIGHLIGHTED, withPGProperty PropertyGridHighlighted),-     (wxEVT_PG_CHANGED, withPGProperty (PropertyGridChanged . fromJust))-    ]-  where-    withPGProperty :: (Maybe((PGProperty ())) -> b) -> PropertyGridEvent a -> IO b-    withPGProperty make propertyGridEvent = do-        hasProp <- propertyGridEventHasProperty propertyGridEvent-        if not hasProp then return (make Nothing) else do-            prop <- propertyGridEventGetProperty propertyGridEvent-            return (make (Just prop))---- | Set a PropertyGrid event handler.-propertyGridOnPropertyGridEvent :: PropertyGrid a -> (EventPropertyGrid -> IO ()) -> IO ()-propertyGridOnPropertyGridEvent propertyGrid eventHandler-  = windowOnEvent propertyGrid (map fst propertyGridEvents) eventHandler listHandler-  where-    listHandler event-      = do eventPropertyGrid <- fromPropertyGridEvent (objectCast event)-           eventHandler eventPropertyGrid---- | Get the current PropertyGrid event handler of a window.-propertyGridGetOnPropertyGridEvent :: PropertyGrid a -> IO (EventPropertyGrid -> IO ())-propertyGridGetOnPropertyGridEvent propertyGrid-  -- I'm not sure what expEVT_PG_HIGHLIGHTED needs to be here for, just followed pattern with `listCtrlGetOnListEvent'-  = unsafeWindowGetHandlerState propertyGrid wxEVT_PG_HIGHLIGHTED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------- TimerEx is handled specially.---------------------------------------------------------------------------------------------- | Create a new 'Timer' that is attached to a window. It is automatically deleted when--- its owner is deleted (using 'windowAddOnDelete'). The owning window will receive--- timer events ('windowOnTimer'). /Broken!/ (use 'windowTimerCreate'\/'timerOnCommand' instead.)-windowTimerAttach :: Window a -> IO (Timer ())-windowTimerAttach w-  = do t <- timerCreate w idAny-       windowAddOnDelete w (timerDelete t)-       return t----- | Create a new 'TimerEx' timer. It is automatically deleted when its owner is deleted--- (using 'windowAddOnDelete'). React to timer events using 'timerOnCommand'.-windowTimerCreate :: Window a -> IO (TimerEx ())-windowTimerCreate w-  = do t <- timerExCreate-       windowAddOnDelete w (timerDelete t)-       return t---- | Set an event handler that is called on a timer tick. This works for 'TimerEx'--- objects.-timerOnCommand :: TimerEx a -> IO () -> IO ()-timerOnCommand timer io-  = do closure <- createClosure io (\ownerDeleted -> return ()) (\ev -> io)-       timerExConnect timer closure---- | Get the current timer event handler.-timerGetOnCommand :: TimerEx a -> IO (IO ())-timerGetOnCommand timer-  = do closure <- timerExGetClosure timer-       unsafeClosureGetState closure (return ())--{---------------------------------------------------------------------------  The global idle timer-  Currently only used by the process code but can potentially be used to-  enable haskell threads to run in idle time---------------------------------------------------------------------------}-{-# NOINLINE appIdleIntervals #-}-appIdleIntervals :: Var [Int]-appIdleIntervals -  = unsafePerformIO (varCreate [])---- | @appRegisterIdle interval handler@ registers a global idle event --- handler that is at least called every @interval@ milliseconds (and--- possible more). Returns a method that can be used to unregister this--- handler (so that it doesn't take any resources anymore). Multiple--- calls to this method chains the different idle event handlers.-appRegisterIdle :: Int -> IO (IO ())-appRegisterIdle interval -  = do varUpdate appIdleIntervals (interval:)-       appUpdateIdleInterval -       return (appUnregisterIdle interval)---- Update the idle interval to the minimal one.-appUpdateIdleInterval-  = do ivals <- varGet appIdleIntervals-       let ival = if null ivals then 0 else minimum ivals   -- zero is off.-       appival <- wxcAppGetIdleInterval -       if (ival < appival)-        then wxcAppSetIdleInterval ival-        else return ()---- Unregister an idle handler       -appUnregisterIdle :: Int -> IO ()            -appUnregisterIdle ival-  = do varUpdate appIdleIntervals (remove ival)-       appUpdateIdleInterval-  where-    remove ival []       = [] -- very wrong!-    remove ival (i:is)   | ival == i  = is-                         | otherwise  = i : remove ival is---{------------------------------------------------------------------------------------------  Calender events------------------------------------------------------------------------------------------}-data EventCalendar-    = CalendarDayChanged (DateTime ())-    | CalendarDoubleClicked (DateTime ())-    | CalendarMonthChanged (DateTime ())-    | CalendarSelectionChanged (DateTime ())-    | CalendarWeekdayClicked Int-    | CalendarYearChanged (DateTime ())-    | CalendarUnknown- -fromCalendarEvent :: CalendarEvent a -> IO EventCalendar-fromCalendarEvent calEvent-    = do tp <- eventGetEventType calEvent-         case lookup tp calEvents of-           Just f  -> f calEvent-           Nothing -> return CalendarUnknown- -calEvents :: [(Int, CalendarEvent a -> IO EventCalendar)]-calEvents-    = [(wxEVT_CALENDAR_DAY_CHANGED    ,withDate CalendarDayChanged)-      ,(wxEVT_CALENDAR_DOUBLECLICKED  ,withDate CalendarDoubleClicked)-      ,(wxEVT_CALENDAR_MONTH_CHANGED  ,withDate CalendarMonthChanged)-      ,(wxEVT_CALENDAR_SEL_CHANGED    ,withDate CalendarSelectionChanged)-      ,(wxEVT_CALENDAR_WEEKDAY_CLICKED,withWeekday CalendarWeekdayClicked)-      ,(wxEVT_CALENDAR_YEAR_CHANGED   ,withDate CalendarYearChanged)]-    where withDate event calEvent-              = do date <- dateTimeCreate-                   withObjectPtr date $ calendarEventGetDate calEvent-                   return (event date)-          withWeekday event calEvent-              = fmap event $ calendarEventGetWeekDay calEvent- --- | Set a calendar event handler.-calendarCtrlOnCalEvent :: CalendarCtrl a -> (EventCalendar -> IO ()) -> IO ()-calendarCtrlOnCalEvent calCtrl eventHandler-  = windowOnEvent calCtrl (map fst calEvents) eventHandler calHandler-  where-    calHandler event-      = do eventCalendar <- fromCalendarEvent (objectCast event)-           eventHandler eventCalendar- --- | Get the current calendar event handler of a window.-calendarCtrlGetOnCalEvent :: CalendarCtrl a -> IO (EventCalendar -> IO ())-calendarCtrlGetOnCalEvent calCtrl-  = unsafeWindowGetHandlerState calCtrl wxEVT_CALENDAR_SEL_CHANGED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------ Application startup---------------------------------------------------------------------------------------------- | Installs an init handler and starts the event loop.--- Note: the closure is deleted when initialization is complete, and than the Haskell init function--- is started.-appOnInit :: IO () -> IO ()-appOnInit init-  = do closure  <- createClosure (return () :: IO ()) onDelete (\ev -> return ())   -- run init on destroy !-       progName <- getProgName-       args     <- getArgs-       argv     <- mapM newCWString (progName:args)-       let argc = length argv-       withArray (argv ++ [nullPtr]) $ \cargv -> wxcAppInitializeC closure argc cargv-       mapM_ free argv-  where-    onDelete ownerDeleted-      = init-           ------------------------------------------------------------------------------------------------ Attaching Haskell data to arbitrary objects.---------------------------------------------------------------------------------------------- | Use attached Haskell data locally. This makes it type-safe.-objectWithClientData :: WxObject a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c-objectWithClientData object initx fun-  = do let setter x = objectSetClientData object (return ()) x-           getter   = do mb <- unsafeObjectGetClientData object-                         case mb of-                           Nothing -> return initx-                           Just x  -> return x-       setter initx-       fun setter getter---- | Attach Haskell value to an arbitrary object. The 'IO' action is executed--- when the object is deleted. Note: 'evtHandlerSetClientData' is preferred when possible.-objectSetClientData :: WxObject a -> IO () -> b -> IO ()-objectSetClientData object onDelete x-  = do closure <- createClosure x (const onDelete) (const (return ()))-       objectSetClientClosure object closure-       return ()---- | Retrieve an attached Haskell value.-unsafeObjectGetClientData :: WxObject a -> IO (Maybe b)-unsafeObjectGetClientData object-  = do closure <- objectGetClientClosure object -       unsafeClosureGetData closure-                --- | Use attached Haskell data locally in a type-safe way.-evtHandlerWithClientData :: EvtHandler a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c-evtHandlerWithClientData evtHandler initx fun-  = do let setter x = evtHandlerSetClientData evtHandler (return ()) x-           getter   = do mb <- unsafeEvtHandlerGetClientData evtHandler-                         case mb of-                           Nothing -> return initx-                           Just x  -> return x-       setter initx-       fun setter getter---- | Attach a Haskell value to an object derived from 'EvtHandler'. The 'IO' action--- executed when the object is deleted.-evtHandlerSetClientData :: EvtHandler a -> IO () -> b -> IO ()-evtHandlerSetClientData evtHandler onDelete x-  = do closure <- createClosure x (const onDelete) (const (return ()))-       evtHandlerSetClientClosure evtHandler closure-       return ()---- | Retrieve an attached Haskell value, previously attached with 'evtHandlerSetClientData'.-unsafeEvtHandlerGetClientData :: EvtHandler a -> IO (Maybe b)-unsafeEvtHandlerGetClientData evtHandler-  = do closure <- evtHandlerGetClientClosure evtHandler-       unsafeClosureGetData closure------ | Attach a Haskell value to tree item data. The 'IO' action--- executed when the object is deleted.-treeCtrlSetItemClientData :: TreeCtrl a -> TreeItem -> IO () -> b -> IO ()-treeCtrlSetItemClientData treeCtrl item onDelete x-  = do closure <- createClosure x (const onDelete) (const (return ()))-       treeCtrlSetItemClientClosure treeCtrl item closure-       return ()---- | Retrieve an attached Haskell value to a tree item, previously attached with 'treeCtrlSetItemClientData'.-unsafeTreeCtrlGetItemClientData :: TreeCtrl a -> TreeItem  -> IO (Maybe b)-unsafeTreeCtrlGetItemClientData treeCtrl item-  = do closure <- treeCtrlGetItemClientClosure treeCtrl item-       unsafeClosureGetData closure------------------------------------------------------------------------------------------------ Generic window connection---------------------------------------------------------------------------------------------- | Set a generic event handler on a certain window.-windowOnEvent :: Window a -> [EventId] -> handler -> (Event () -> IO ()) -> IO ()-windowOnEvent window eventIds state eventHandler-  = windowOnEventEx window eventIds state (\ownerDelete -> return ()) eventHandler---- | Set a generic event handler on a certain window. Takes also a computation--- that is run when the event handler is destroyed -- the argument is 'True' if the--- owner is deleted, and 'False' if the event handler is disconnected for example.-windowOnEventEx :: Window a -> [EventId] -> handler -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()-windowOnEventEx window eventIds state destroy eventHandler-  = do let id = idAny   -- id <- windowGetId window-       evtHandlerOnEvent window id id eventIds state destroy eventHandler---- | Retrieve the event handler state for a certain event on a window.-unsafeWindowGetHandlerState :: Window a -> EventId -> b -> IO b-unsafeWindowGetHandlerState window eventId def-  = do id <- windowGetId window-       unsafeGetHandlerState window id eventId def----------------------------------------------------------------------------------------------- The current event--------------------------------------------------------------------------------------------{-# NOINLINE currentEvent #-}-currentEvent :: MVar (Event ())-currentEvent-  = unsafePerformIO (newMVar objectNull)---- | Get the current event handler (can be 'objectNull').-getCurrentEvent :: IO (Event ())-getCurrentEvent-  = readMVar currentEvent---- | Do something with the current event /if/ we are calling from an event handler.-withCurrentEvent :: (Event () -> IO ()) -> IO ()-withCurrentEvent f-  = do ev <- getCurrentEvent-       if (ev /= objectNull)-        then f ev-        else return ()---- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.--- Always call this method when you do not process the event. /Note:/ The use of--- 'propagateEvent' is encouraged as it is a much better name than 'skipCurrentEvent'. This--- function name is just for better compatibility with wxWidgets :-)-skipCurrentEvent :: IO ()-skipCurrentEvent-  = withCurrentEvent (\event -> eventSkip event)---- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.--- Always call this method when you do not process the event. (This function just call 'skipCurrentEvent').-propagateEvent :: IO ()-propagateEvent-  = skipCurrentEvent------------------------------------------------------------------------------------------------ Generic event connection---------------------------------------------------------------------------------------------- | Retrievs the state associated with a certain event handler. If--- no event handler is defined for this kind of event or 'Id', the--- default value is returned.-unsafeGetHandlerState :: EvtHandler a -> Id -> EventId -> b -> IO b-unsafeGetHandlerState object id eventId def-  = do closure <- evtHandlerGetClosure object id eventId-       unsafeClosureGetState closure def---- | Type synonym to make the type signatures shorter for the documentation :-)-type OnEvent = (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()---- | Sets a generic event handler, just as 'evtHandlerOnEventConnect' but first--- disconnects any event handlers for the same kind of events.-evtHandlerOnEvent :: EvtHandler a -> Id -> Id -> [EventId] -> handler -> OnEvent-evtHandlerOnEvent object firstId lastId eventIds state destroy eventHandler-  = do evtHandlerOnEventDisconnect object firstId lastId eventIds-       evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler----- Hack: using a global variable to determine whether we are disconnecting an event--- or not. This is used as a parameter to the 'destroy' procedure of an event. This--- enables us to re-install a 'windowOnDelete' handler for example without executing--- the deletion code.-{-# NOINLINE disconnecting #-}-disconnecting :: Var Bool-disconnecting-  = unsafePerformIO (varCreate False)---- | Disconnect a certain event handler.-evtHandlerOnEventDisconnect :: EvtHandler a -> Id -> Id -> [EventId] -> IO ()-evtHandlerOnEventDisconnect object firstId lastId eventIds-  = do prev <- varSwap disconnecting True-       mapM_ disconnectEventId eventIds-       varSet disconnecting prev-  where-    disconnectEventId eventId-      = evtHandlerDisconnect object firstId lastId eventId 0 {- actually: void* -}---- | Sets a generic event handler on an 'EvtHandler' object. The call--- (@evtHandlerOnEventConnect firstId lastId eventIds state destroy handler object@) sets an event--- handler @handler@ on @object@. The eventhandler gets called whenever an event--- happens that is in the list @eventIds@ on an object with an 'Id' between @firstId@--- and @lastId@ (use -1 for any object). The @state@ is any kind of Haskell data--- that is attached to this handler. It can be retrieved via 'unsafeGetHandlerState'.--- Normally, the @state@ is the event handler itself. This allows the current event--- handler to be retrieved via calls to 'buttonGetOnCommand' for example. The @destroy@--- action is called when the event handler is destroyed. Its argument is 'True' when the--- owner is deleted, and 'False' if the event handler is just disconnected.-evtHandlerOnEventConnect :: EvtHandler a -> Id -> Id -> [EventId] -> state -> OnEvent-evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler-  = do closure <- createClosure state destroy eventHandler-       withObjectPtr closure $ \pclosure ->-        mapM_ (connectEventId pclosure) eventIds-  where-    connectEventId pclosure eventId-      = evtHandlerConnect object firstId lastId eventId pclosure------ Use a data wrapper for the closure state: seem to circumvent bugs when wrapping--- things like Int or overloaded stuff.-data Wrap a  = Wrap a---unsafeClosureGetState :: Closure () -> a -> IO a-unsafeClosureGetState closure def-  = do mb <- unsafeClosureGetData closure-       case mb of-         Nothing -> return def-         Just x  -> return x--unsafeClosureGetData :: Closure () -> IO (Maybe a)-unsafeClosureGetData closure-  = if (objectIsNull closure)-     then return Nothing-     else do ptr <- closureGetData closure-             if (ptrIsNull ptr)-              then return Nothing-              else do (Wrap x) <- deRefStablePtr (castPtrToStablePtr ptr)-                      return (Just x)----- | Create a closure with a certain Haskell state, a function that is called--- when the closure is destroyed, and a function that is called when an event--- happens. The destroy function takes a boolean that is 'True' when the parent--- is deleted (and 'False' when the closure is just disconnected). The event--- handlers gets the 'Event' as its argument.-createClosure :: state -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO (Closure ())-createClosure st destroy handler-  = do funptr  <- wrapEventHandler eventHandlerWrapper-       stptr   <- newStablePtr (Wrap st)-       closureCreate funptr (castStablePtrToPtr stptr)-  where-    eventHandlerWrapper :: Ptr fun -> Ptr () -> Ptr (TEvent ()) -> IO ()-    eventHandlerWrapper funptr stptr eventptr-      = do let event = objectFromPtr eventptr-           prev <- swapMVar currentEvent event-           if (objectIsNull event)-            then do isDisconnecting <- varGet disconnecting-                    destroy (not isDisconnecting)-                    when (stptr/=ptrNull)-                      (freeStablePtr (castPtrToStablePtr stptr))-                    when (funptr/=ptrNull)-                      (freeHaskellFunPtr (castPtrToFunPtr funptr))-            else handler event-           swapMVar currentEvent prev-           return ()----foreign import ccall "wrapper" wrapEventHandler :: (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()) -> IO (FunPtr (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()))+{-# LANGUAGE ForeignFunctionInterface #-}
+-----------------------------------------------------------------------------------------
+{-|	Module      :  Events
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Dynamically set (and get) Haskell event handlers for basic wxWidgets events.
+Note that one should always call 'skipCurrentEvent' when an event is not
+processed in the event handler so that other eventhandlers can process the
+event.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Events
+        (
+        -- * Set event handlers
+        -- ** Controls
+          buttonOnCommand
+        , checkBoxOnCommand
+        , choiceOnCommand
+        , comboBoxOnCommand
+        , comboBoxOnTextEnter
+        , controlOnText
+        , listBoxOnCommand
+        , spinCtrlOnCommand
+        -- , listBoxOnDClick
+        , radioBoxOnCommand
+        , sliderOnCommand
+        , textCtrlOnTextEnter
+        , listCtrlOnListEvent
+        , toggleButtonOnCommand
+        , treeCtrlOnTreeEvent
+        , gridOnGridEvent
+        , propertyGridOnPropertyGridEvent
+
+        -- ** Windows
+        , windowOnMouse
+        , windowOnKeyChar
+        , windowOnKeyDown
+        , windowOnKeyUp
+        , windowAddOnClose
+        , windowOnClose
+        , windowOnDestroy
+        , windowAddOnDelete
+        , windowOnDelete
+        , windowOnCreate
+        , windowOnIdle
+        , windowOnTimer
+        , windowOnSize
+        , windowOnFocus
+        , windowOnActivate
+        , windowOnPaint
+        , windowOnPaintRaw
+        , windowOnContextMenu
+        , windowOnScroll
+        , htmlWindowOnHtmlEvent
+
+        -- ** Event handlers
+        , evtHandlerOnMenuCommand
+        , evtHandlerOnEndProcess
+        , evtHandlerOnInput
+        , evtHandlerOnInputSink
+        , evtHandlerOnTaskBarIconEvent
+
+        -- ** Raw STC export
+        , EventSTC(..)
+        , stcOnSTCEvent
+        , stcGetOnSTCEvent
+
+        -- ** Print events
+        , EventPrint(..)
+        , printOutOnPrint
+
+        -- * Get event handlers
+        -- ** Controls
+        , buttonGetOnCommand
+        , checkBoxGetOnCommand
+        , choiceGetOnCommand
+        , comboBoxGetOnCommand
+        , comboBoxGetOnTextEnter
+        , controlGetOnText
+        , listBoxGetOnCommand
+        , spinCtrlGetOnCommand
+        -- , listBoxGetOnDClick
+        , radioBoxGetOnCommand
+        , sliderGetOnCommand
+        , textCtrlGetOnTextEnter
+        , listCtrlGetOnListEvent
+        , toggleButtonGetOnCommand
+        , treeCtrlGetOnTreeEvent
+        , gridGetOnGridEvent
+        , propertyGridGetOnPropertyGridEvent
+
+        -- ** Windows
+        , windowGetOnMouse
+        , windowGetOnKeyChar
+        , windowGetOnKeyDown
+        , windowGetOnKeyUp
+        , windowGetOnClose
+        , windowGetOnDestroy
+        , windowGetOnDelete
+        , windowGetOnCreate
+        , windowGetOnIdle
+        , windowGetOnTimer
+        , windowGetOnSize
+        , windowGetOnFocus
+        , windowGetOnActivate
+        , windowGetOnPaint
+        , windowGetOnPaintRaw
+        , windowGetOnContextMenu
+        , windowGetOnScroll
+        , htmlWindowGetOnHtmlEvent
+
+        -- ** Event handlers
+        , evtHandlerGetOnMenuCommand
+        , evtHandlerGetOnEndProcess
+        , evtHandlerGetOnInputSink
+        , evtHandlerGetOnTaskBarIconEvent
+
+        -- ** Printing
+        , printOutGetOnPrint
+
+        -- * Timers
+        , windowTimerAttach
+        , windowTimerCreate
+        , timerOnCommand
+        , timerGetOnCommand
+
+        -- Idle events
+        , appRegisterIdle
+
+        -- * Calenders
+        , EventCalendar(..)
+        , calendarCtrlOnCalEvent 
+        , calendarCtrlGetOnCalEvent
+
+        -- * Types
+        -- ** Streams
+        , StreamStatus(..), streamStatusFromInt
+
+        -- ** Modifiers
+        , Modifiers(..)
+        , showModifiers
+        , noneDown, justShift, justAlt, justControl, justMeta, isNoneDown
+        , isNoShiftAltControlDown
+
+        -- ** Mouse events
+        , EventMouse (..)
+        , showMouse
+        , mousePos, mouseModifiers
+
+        -- ** Keyboard events
+        , EventKey (..), Key(..)
+        , keyKey, keyModifiers, keyPos
+        , showKey, showKeyModifiers
+
+        -- * Set event handlers
+        -- ** Drop Target events
+        , DragResult (..)
+        , dropTargetOnData
+        , dropTargetOnDrop
+        , dropTargetOnEnter
+        , dropTargetOnDragOver
+        , dropTargetOnLeave
+        
+        -- ** On DragAndDropEvent
+        , DragMode (..)
+        , dragAndDrop
+        
+        -- *** Special handler for Drop File event
+        , fileDropTarget
+        -- *** Special handler for Drop Text event 
+        , textDropTarget
+
+        -- ** Scroll events
+        , EventScroll(..), Orientation(..)
+        , scrollOrientation, scrollPos
+
+        -- ** Tree control events
+        , EventTree(..)
+        
+        -- ** List control events
+        , EventList(..), ListIndex
+
+        -- ** Grid control events
+        , EventGrid(..), Row, Column
+
+        -- ** Html window events
+        , EventHtml(..)
+        
+        -- * TaskBar icon events
+        , EventTaskBarIcon(..)
+
+        -- ** PropertyGrid events
+        , EventPropertyGrid(..)
+
+
+        -- * Current event
+        , propagateEvent
+        , skipCurrentEvent
+        , withCurrentEvent
+
+        -- * Primitive
+        , appOnInit
+
+        -- ** Client data
+        , treeCtrlSetItemClientData
+
+        , evtHandlerWithClientData
+        , evtHandlerSetClientData
+
+        , objectWithClientData
+        , objectSetClientData       
+
+        -- ** Input sink
+        , inputSinkEventLastString
+
+        -- ** Keys
+        , KeyCode
+        , modifiersToAccelFlags
+        , keyCodeToKey, keyToKeyCode
+
+        -- ** Events
+        , windowOnEvent, windowOnEventEx
+
+        -- ** Generic
+        , OnEvent
+        , evtHandlerOnEvent
+        , evtHandlerOnEventConnect
+
+        -- ** Unsafe
+        , unsafeTreeCtrlGetItemClientData
+        , unsafeEvtHandlerGetClientData
+        , unsafeObjectGetClientData
+        , unsafeGetHandlerState
+        , unsafeWindowGetHandlerState
+        ) where
+
+import Data.List( intersperse, findIndex )
+import System.Environment( getProgName, getArgs )
+import Foreign.StablePtr
+import Foreign.Ptr
+import Foreign.C.Types
+import Foreign.C.String
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Array
+import Foreign.Marshal.Utils
+
+import Data.Char ( chr ) -- used in stc
+import Data.Maybe ( fromMaybe, fromJust )
+import Control.Concurrent.MVar
+import System.IO.Unsafe( unsafePerformIO )
+
+import qualified Data.IntMap as IntMap
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.WxcClassInfo
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Draw
+import Graphics.UI.WXCore.Defines
+
+------------------------------------------------------------------------------------------
+-- Controls  (COMMAND events)
+------------------------------------------------------------------------------------------
+-- | Set an event handler for a push button.
+buttonOnCommand :: Button a -> IO () -> IO ()
+buttonOnCommand button eventHandler
+  = windowOnEvent button [wxEVT_COMMAND_BUTTON_CLICKED] eventHandler (\evt -> eventHandler)
+
+
+-- | Get the current button event handler on a window.
+buttonGetOnCommand :: Window a -> IO (IO ())
+buttonGetOnCommand button
+  = unsafeWindowGetHandlerState button wxEVT_COMMAND_BUTTON_CLICKED skipCurrentEvent
+
+
+-- | Set an event handler for "updated text", works for example on a 'TextCtrl' and 'ComboBox'.
+controlOnText :: Control a -> IO () -> IO ()
+controlOnText control eventHandler
+  = windowOnEvent control [wxEVT_COMMAND_TEXT_UPDATED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current event handler for updated text.
+controlGetOnText :: Control a -> IO (IO ())
+controlGetOnText control
+  = unsafeWindowGetHandlerState control wxEVT_COMMAND_TEXT_UPDATED skipCurrentEvent
+
+
+-- | Set an event handler for an enter command in a text control.
+textCtrlOnTextEnter :: TextCtrl a -> IO () -> IO ()
+textCtrlOnTextEnter textCtrl eventHandler
+  = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)
+
+-- | Get the current text enter event handler.
+textCtrlGetOnTextEnter :: TextCtrl a -> IO (IO ())
+textCtrlGetOnTextEnter textCtrl
+  = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent
+
+{-
+-- | Set an event handler for when a user tries to type more than than the maximally
+-- allowed text in a text control.
+textCtrlOnTextMaxLen :: IO () -> TextCtrl a -> IO ()
+textCtrlOnTextMaxLen eventHandler textCtrl
+  = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_MAXLEN] eventHandler (\evt -> eventHandler)
+
+-- | Get the current maximal text event handler.
+textCtrlGetOnTextMaxLen :: TextCtrl a -> IO (IO ())
+textCtrlGetOnTextMaxLen textCtrl
+  = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_MAXLEN skipCurrentEvent
+-}
+
+-- | Set an event handler for an enter command in a combo box.
+comboBoxOnTextEnter :: ComboBox a -> IO () -> IO ()
+comboBoxOnTextEnter comboBox eventHandler
+  = windowOnEvent comboBox [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)
+
+-- | Get the current text enter event handler.
+comboBoxGetOnTextEnter :: ComboBox a -> IO (IO ())
+comboBoxGetOnTextEnter comboBox
+  = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent
+
+
+-- | Set an event handler for when a combo box item is selected.
+comboBoxOnCommand :: ComboBox a -> IO () -> IO ()
+comboBoxOnCommand comboBox eventHandler
+  = windowOnEvent comboBox [wxEVT_COMMAND_COMBOBOX_SELECTED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current combo box event handler for selections
+comboBoxGetOnCommand :: ComboBox a -> IO (IO ())
+comboBoxGetOnCommand comboBox
+  = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_COMBOBOX_SELECTED skipCurrentEvent
+
+-- | Set an event handler for when a listbox item is (de)selected.
+listBoxOnCommand :: ListBox a -> IO () -> IO ()
+listBoxOnCommand listBox eventHandler
+  = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_SELECTED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current listbox event handler for selections.
+listBoxGetOnCommand :: ListBox a -> IO (IO ())
+listBoxGetOnCommand listBox
+  = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_SELECTED skipCurrentEvent
+
+{-
+-- | Set an event handler for when a listbox item is double clicked. Takes the selected
+-- item index as an argument.
+listBoxOnDClick :: (Int -> IO ()) -> ListBox a -> IO ()
+listBoxOnDClick eventHandler listBox
+  = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_DCLICK] eventHandler dclickHandler
+  where
+    dclickHandler event
+      = do index <- commandEventGetInt (objectCast event)
+           eventHandler index
+
+-- | Get the current double click listbox event handler.
+listBoxGetOnDClick :: ListBox a -> IO (IO ())
+listBoxGetOnDClick listBox
+  = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_DCLICK (\index -> skipCurrentEvent)
+-}
+
+-- | Set an event handler for when a choice item is (de)selected.
+choiceOnCommand :: Choice a -> IO () -> IO ()
+choiceOnCommand choice eventHandler
+  = windowOnEvent choice [wxEVT_COMMAND_CHOICE_SELECTED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current choice command event handler.
+choiceGetOnCommand :: Choice a -> IO (IO ())
+choiceGetOnCommand choice
+  = unsafeWindowGetHandlerState choice wxEVT_COMMAND_CHOICE_SELECTED skipCurrentEvent
+
+
+-- | Set an event handler for when a radiobox item is selected.
+radioBoxOnCommand :: RadioBox a -> IO () -> IO ()
+radioBoxOnCommand radioBox eventHandler
+  = windowOnEvent radioBox [wxEVT_COMMAND_RADIOBOX_SELECTED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current radio box command handler.
+radioBoxGetOnCommand :: RadioBox a -> IO (IO ())
+radioBoxGetOnCommand radioBox
+  = unsafeWindowGetHandlerState radioBox wxEVT_COMMAND_RADIOBOX_SELECTED skipCurrentEvent
+
+
+-- | Set an event handler for when a slider item changes.
+sliderOnCommand :: Slider a -> IO () -> IO ()
+sliderOnCommand slider eventHandler
+  = windowOnEvent slider [wxEVT_COMMAND_SLIDER_UPDATED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current slider command event handler.
+sliderGetOnCommand :: Slider a -> IO (IO ())
+sliderGetOnCommand slider
+  = unsafeWindowGetHandlerState slider wxEVT_COMMAND_SLIDER_UPDATED skipCurrentEvent
+
+
+
+-- | Set an event handler for when a checkbox clicked.
+checkBoxOnCommand :: CheckBox a -> (IO ()) -> IO ()
+checkBoxOnCommand checkBox eventHandler
+  = windowOnEvent checkBox [wxEVT_COMMAND_CHECKBOX_CLICKED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current check box event handler.
+checkBoxGetOnCommand :: CheckBox a -> IO (IO ())
+checkBoxGetOnCommand checkBox
+  = unsafeWindowGetHandlerState checkBox wxEVT_COMMAND_CHECKBOX_CLICKED (skipCurrentEvent)
+
+-- | Set an event handler for when a spinCtrl clicked.
+spinCtrlOnCommand :: SpinCtrl a -> (IO ()) -> IO ()
+spinCtrlOnCommand spinCtrl eventHandler
+  = windowOnEvent spinCtrl [wxEVT_COMMAND_SPINCTRL_UPDATED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current check box event handler.
+spinCtrlGetOnCommand :: SpinCtrl a -> IO (IO ())
+spinCtrlGetOnCommand spinCtrl
+  = unsafeWindowGetHandlerState spinCtrl wxEVT_COMMAND_SPINCTRL_UPDATED (skipCurrentEvent)
+
+-- | Set an event handler for a push button.
+toggleButtonOnCommand :: ToggleButton a -> IO () -> IO ()
+toggleButtonOnCommand button eventHandler
+  = windowOnEvent button [wxEVT_COMMAND_TOGGLEBUTTON_CLICKED] eventHandler (\evt -> eventHandler)
+
+-- | Get the current button event handler on a window.
+toggleButtonGetOnCommand :: Window a -> IO (IO ())
+toggleButtonGetOnCommand button
+  = unsafeWindowGetHandlerState button wxEVT_COMMAND_TOGGLEBUTTON_CLICKED skipCurrentEvent
+
+{-----------------------------------------------------------------------------------------
+  wxStyledTextCtrl's event
+-----------------------------------------------------------------------------------------}
+-- | Scintilla events. * Means extra information is available (excluding position,
+--   key and modifiers) but not yet implemented. ! means it's done
+data EventSTC
+    = STCChange             -- ^ ! wxEVT_STC_CHANGE.
+    | STCStyleNeeded        -- ^ ! wxEVT_STC_STYLENEEDED.
+    | STCCharAdded Char Int -- ^ ? wxEVT_STC_CHARADDED. The position seems to be broken
+    | STCSavePointReached   -- ^ ! wxEVT_STC_SAVEPOINTREACHED.
+    | STCSavePointLeft      -- ^ ! wxEVT_STC_SAVEPOINTLEFT.
+    | STCROModifyAttempt    -- ^ ! wxEVT_STC_ROMODIFYATTEMPT.
+    | STCKey                -- ^ * wxEVT_STC_KEY.
+			    -- kolmodin 20050304:
+			    -- is this event ever raised? not under linux.
+			    -- according to davve, not under windows either
+    | STCDoubleClick        -- ^ ! wxEVT_STC_DOUBLECLICK.
+    | STCUpdateUI           -- ^ ! wxEVT_STC_UPDATEUI.
+    | STCModified Int Int (Maybe String) Int Int Int Int Int          -- ^ ? wxEVT_STC_MODIFIED.
+    | STCMacroRecord Int Int Int  -- ^ ! wxEVT_STC_MACRORECORD iMessage wParam lParam
+    | STCMarginClick Bool Bool Bool Int Int -- ^ ? wxEVT_STC_MARGINCLICK.
+					    -- kolmodin 20050304:
+					    -- Add something nicer for alt, shift and ctrl?
+					    -- Perhaps a new datatype or a tuple.
+    | STCNeedShown Int Int  -- ^ ! wxEVT_STC_NEEDSHOWN length position.
+    | STCPainted            -- ^ ! wxEVT_STC_PAINTED. 
+    | STCUserListSelection Int String -- ^ ! wxEVT_STC_USERLISTSELECTION listType text
+    | STCUriDropped String  -- ^ ! wxEVT_STC_URIDROPPED
+    | STCDwellStart Point -- ^ ! wxEVT_STC_DWELLSTART
+    | STCDwellEnd Point   -- ^ ! wxEVT_STC_DWELLEND
+    | STCStartDrag Int Int String            -- ^ ! wxEVT_STC_START_DRAG.
+    | STCDragOver Point DragResult            -- ^ ! wxEVT_STC_DRAG_OVER
+    | STCDoDrop String DragResult            -- ^ ! wxEVT_STC_DO_DROP
+    | STCZoom               -- ^ ! wxEVT_STC_ZOOM
+    | STCHotspotClick       -- ^ ! wxEVT_STC_HOTSPOT_CLICK
+    | STCHotspotDClick      -- ^ ! wxEVT_STC_HOTSPOT_DCLICK
+    | STCCalltipClick       -- ^ ! wxEVT_STC_CALLTIP_CLICK
+    | STCAutocompSelection  -- ^ ! wxEVT_STC_AUTOCOMP_SELECTION
+    | STCUnknown            -- ^ Unknown event. Should never occur.
+
+instance Show EventSTC where
+    show STCChange = "(stc event: change)"
+    show STCStyleNeeded = "(stc event: style needed)"
+    show (STCCharAdded c p) = "(stc event: char added: " ++ show c ++ " at position " ++ show p ++ ")"
+    show STCSavePointReached = "(stc event: save point reached)"
+    show STCSavePointLeft = "(stc event: save point left)"
+    show STCROModifyAttempt = "(stc event: read only modify attempt)"
+    show STCKey = "(stc event: key)"
+    show STCDoubleClick = "(stc event: double click)"
+    show STCUpdateUI = "(stc event: update ui)"
+    show (STCModified p mt t len ladd line fln flp) = "(stc event: modified: position " ++ show p ++ ", modtype " ++ show mt ++ ", text " ++ show t ++ ", length " ++ show len ++ ", lines added " ++ show ladd ++ ", line " ++ show line ++ ", fln " ++ show fln ++ ", flp " ++ show flp ++ ")"
+    show (STCMacroRecord m wp lp) = "(stc event: macro record, message " ++ show m ++ ", wParam " ++ show wp ++ ", lParam " ++ show lp ++ ")"
+    show (STCMarginClick alt shift ctrl p m) = "(stc event: margin " ++ show m ++ " clicked, pos " ++ show p ++ ", modifiers = [" ++ (if alt then "alt, " else "") ++ (if shift then "shift, " else "") ++ (if ctrl then "control" else "") ++ "])"
+    show (STCNeedShown p len) = "(stc event: need to show lines from " ++ show p ++ ", length " ++ show len ++ ")"
+    show STCPainted = "(stc event: painted)"
+    show (STCUserListSelection lt t) = "(stc event: user list selection, type " ++ show lt ++ ", text " ++ show t ++ ")"
+    show (STCUriDropped t) = "(stc event: uri dropped: " ++ t ++ ")"
+    show (STCDwellStart p) = "(stc event: dwell start, (x,y) " ++ show p ++ ")"
+    show (STCDwellEnd p) = "(stc event: dwell end, (x,y) " ++ show p ++ ")"
+    show (STCStartDrag lin car str) = "(stc event: start drag, line " ++ show lin ++ ", caret " ++ show car ++ ", text " ++ show str ++ ")"
+    show (STCDragOver p res) = "(stc event: drag over, (x,y) " ++ show p ++ ", dragResult " ++ show res ++ ")"
+    show (STCDoDrop str res) = "(stc event: do drop, text " ++ show str ++ ", dragResult " ++ show res ++ ")"
+    show STCZoom = "(stc event: zoom)"
+    show STCHotspotClick = "(stc event: hotspot click)"
+    show STCHotspotDClick = "(stc event: hotspot double click)"
+    show STCCalltipClick = "(stc event: calltip clicked)"
+    show STCAutocompSelection = "(stc event: autocomp selectioned)"
+    show STCUnknown = "(stc event: unknown)"
+
+fromSTCEvent :: StyledTextEvent a -> IO EventSTC
+fromSTCEvent event
+  = do et <- eventGetEventType event
+       case lookup et stcEvents of
+         Just action -> action event
+	 Nothing -> return STCUnknown
+
+stcEvents :: [(EventId, StyledTextEvent a -> IO EventSTC)]
+stcEvents = [ (wxEVT_STC_CHANGE,            \_ -> return STCChange)
+	    , (wxEVT_STC_STYLENEEDED,       \_ -> return STCStyleNeeded)
+	    , (wxEVT_STC_CHARADDED,         charAdded)
+	    , (wxEVT_STC_SAVEPOINTREACHED,  \_ -> return STCSavePointReached)
+	    , (wxEVT_STC_SAVEPOINTLEFT,     \_ -> return STCSavePointLeft)
+	    , (wxEVT_STC_ROMODIFYATTEMPT,   \_ -> return STCROModifyAttempt)
+	    , (wxEVT_STC_KEY,               \_ -> return STCKey)
+	    , (wxEVT_STC_DOUBLECLICK,       \_ -> return STCDoubleClick)
+	    , (wxEVT_STC_UPDATEUI,          \_ -> return STCUpdateUI)
+	    , (wxEVT_STC_MODIFIED,          modified)
+	    , (wxEVT_STC_MACRORECORD,       macroRecord)
+	    , (wxEVT_STC_MARGINCLICK,       marginClick)
+	    , (wxEVT_STC_NEEDSHOWN,         needShown)
+	    , (wxEVT_STC_PAINTED,           \_ -> return STCPainted)
+	    , (wxEVT_STC_USERLISTSELECTION, userListSelection)
+	    , (wxEVT_STC_URIDROPPED,        uriDropped)
+	    , (wxEVT_STC_DWELLSTART,        dwellStart)
+	    , (wxEVT_STC_DWELLEND,          dwellEnd)
+	    , (wxEVT_STC_START_DRAG,        startDrag)
+	    , (wxEVT_STC_DRAG_OVER,         dragOver)
+	    , (wxEVT_STC_DO_DROP,           doDrop)
+	    , (wxEVT_STC_ZOOM,              \_ -> return STCZoom)
+	    , (wxEVT_STC_HOTSPOT_CLICK,     \_ -> return STCHotspotClick)
+	    , (wxEVT_STC_CALLTIP_CLICK,     \_ -> return STCCalltipClick)
+	    -- TODO: STCAutocompSelection event is not tested yet.
+	    , (wxEVT_STC_AUTOCOMP_SELECTION,    \_ -> return STCAutocompSelection)
+	    ]
+  where
+    charAdded evt = do
+      c <- styledTextEventGetKey evt
+      let c' | c < 0 = chr $ c + 256
+             | otherwise = chr c
+      p <- styledTextEventGetPosition evt
+      return $ STCCharAdded c' p
+    modified evt = do
+      p <- styledTextEventGetPosition evt
+      mt <- styledTextEventGetModificationType evt
+      t <- styledTextEventGetText evt
+      len <- styledTextEventGetLength evt
+      ladd <- styledTextEventGetLinesAdded evt
+      line <- styledTextEventGetLine evt
+      fln <- styledTextEventGetFoldLevelNow evt
+      flp <- styledTextEventGetFoldLevelPrev evt 
+      -- TODO: t should only be returned under some modificationtype conditions
+      -- or should we always return it?
+      return $ STCModified p mt (Just t) len ladd line fln flp
+    macroRecord evt = do
+      m <- styledTextEventGetMessage evt
+      wp <- styledTextEventGetWParam evt
+      lp <- styledTextEventGetLParam evt
+      return $ STCMacroRecord m wp lp
+    marginClick evt = do
+      alt <- styledTextEventGetAlt evt
+      shift <- styledTextEventGetShift evt
+      ctrl <- styledTextEventGetControl evt
+      p <- styledTextEventGetPosition evt
+      m <- styledTextEventGetMargin evt
+      return $ STCMarginClick alt shift ctrl p m
+    needShown evt = do
+      p <- styledTextEventGetPosition evt
+      len <- styledTextEventGetLength evt
+      return $ STCNeedShown p len
+    {-
+    -- expEVT_STC_POSCHANGED is removed in wxWidgets-2.6.x.
+    posChanged evt = do
+      p <- styledTextEventGetPosition evt
+      return $ STCPosChanged p
+    -}
+    userListSelection evt = do
+      lt <- styledTextEventGetListType evt
+      text <- styledTextEventGetText evt
+      return $ STCUserListSelection lt text
+    uriDropped evt = do
+      t <- styledTextEventGetText evt
+      return $ STCUriDropped t
+    dwellStart evt = do
+      x <- styledTextEventGetX evt
+      y <- styledTextEventGetY evt
+      return $ STCDwellStart (point x y)
+    dwellEnd evt = do
+      x <- styledTextEventGetX evt
+      y <- styledTextEventGetY evt
+      return $ STCDwellEnd (point x y)
+    startDrag evt = do
+      lin <- styledTextEventGetLine evt
+      car <- styledTextEventGetPosition evt
+      str <- styledTextEventGetDragText evt
+      return $ STCStartDrag lin car str
+    dragOver evt = do
+      x <- styledTextEventGetX evt
+      y <- styledTextEventGetY evt
+      res <- styledTextEventGetDragResult evt
+      return $ STCDragOver (point x y) $ toDragResult res
+    doDrop evt = do
+      str <- styledTextEventGetDragText evt
+      res <- styledTextEventGetDragResult evt
+      return $ STCDoDrop str $ toDragResult res
+
+stcOnSTCEvent :: StyledTextCtrl a -> (EventSTC -> IO ()) -> IO ()
+stcOnSTCEvent stc handler
+  = do windowOnEvent stc stcEventsAll handler eventHandler
+  where
+    eventHandler event
+      = do eventSTC <- fromSTCEvent (objectCast event)
+           if isSTCUnknown eventSTC
+              then return () -- what else?
+              else handler eventSTC
+    isSTCUnknown :: EventSTC -> Bool
+    isSTCUnknown STCUnknown = True
+    isSTCUnknown _ = False
+    -- most of the events can probably be ignored
+    stcEventsAll = map fst stcEvents
+
+stcGetOnSTCEvent :: StyledTextCtrl a -> IO (EventSTC -> IO ())
+stcGetOnSTCEvent window
+  = unsafeWindowGetHandlerState window (head $ map fst stcEvents) (\ev -> skipCurrentEvent)
+
+{-----------------------------------------------------------------------------------------
+  Printing
+-----------------------------------------------------------------------------------------}
+-- | Printer events.
+data EventPrint  = PrintBeginDoc (IO ()) Int Int    -- ^ Print a copy: cancel, start page, end page
+                 | PrintEndDoc
+                 | PrintBegin                       -- ^ Begin a print job.
+                 | PrintEnd
+                 | PrintPrepare                     -- ^ Prepare: chance to call 'printOutSetPageLimits' for example.
+                 | PrintPage (IO ()) (DC ()) Int    -- ^ Print a page: cancel, printer device context, page number.
+                 | PrintUnknown Int                 -- ^ Unknown print event with event code
+
+-- | Convert a 'PrintEvent' object to an 'EventPrint' value.
+fromPrintEvent :: WXCPrintEvent a -> IO EventPrint
+fromPrintEvent event
+  = do tp <- eventGetEventType event
+       case lookup tp printEvents of
+         Just f  -> f event
+         Nothing -> return (PrintUnknown tp)
+
+-- | Print event list.
+printEvents :: [(Int,WXCPrintEvent a -> IO EventPrint)]
+printEvents
+  = [(wxEVT_PRINT_PAGE,     \ev -> do page <- wxcPrintEventGetPage ev
+                                      pout <- wxcPrintEventGetPrintout ev
+                                      dc   <- printoutGetDC pout
+                                      let cancel = wxcPrintEventSetContinue ev False
+                                      return (PrintPage cancel dc page))
+    ,(wxEVT_PRINT_BEGIN_DOC,\ev -> do page <- wxcPrintEventGetPage ev
+                                      epage<- wxcPrintEventGetEndPage ev
+                                      let cancel = wxcPrintEventSetContinue ev False
+                                      return (PrintBeginDoc cancel page epage))
+    ,(wxEVT_PRINT_PREPARE,  \ev -> return PrintPrepare)
+    ,(wxEVT_PRINT_END_DOC,  \ev -> return PrintEndDoc)
+    ,(wxEVT_PRINT_BEGIN,    \ev -> return PrintBegin)
+    ,(wxEVT_PRINT_END,      \ev -> return PrintEnd)
+    ]
+
+-- | Set an event handler for printing.
+printOutOnPrint :: WXCPrintout a -> (EventPrint -> IO ()) -> IO ()
+printOutOnPrint printOut eventHandler
+  = do evtHandler <- wxcPrintoutGetEvtHandler printOut
+       evtHandlerOnEvent evtHandler idAny idAny (map fst printEvents)
+                         eventHandler (\_ -> return ()) printHandler
+  where
+    printHandler event
+      = do eventPrint <- fromPrintEvent (objectCast event)
+           eventHandler eventPrint
+
+-- | Get the current print handler
+printOutGetOnPrint :: WXCPrintout a -> IO (EventPrint -> IO ())
+printOutGetOnPrint printOut 
+  = do evtHandler <- wxcPrintoutGetEvtHandler printOut
+       unsafeGetHandlerState evtHandler idAny wxEVT_PRINT_PAGE (\ev -> skipCurrentEvent)
+
+
+{-----------------------------------------------------------------------------------------
+  Scrolling
+-----------------------------------------------------------------------------------------}
+-- | Scroll events.
+data EventScroll = ScrollTop      !Orientation !Int    -- ^ scroll to top
+                 | ScrollBottom   !Orientation !Int    -- ^ scroll to bottom
+                 | ScrollLineUp   !Orientation !Int    -- ^ scroll line up
+                 | ScrollLineDown !Orientation !Int    -- ^ scroll line down
+                 | ScrollPageUp   !Orientation !Int    -- ^ scroll page up
+                 | ScrollPageDown !Orientation !Int    -- ^ scroll page down
+                 | ScrollTrack    !Orientation !Int    -- ^ frequent event when user drags the thumbtrack
+                 | ScrollRelease  !Orientation !Int    -- ^ thumbtrack is released
+                 deriving Show
+
+-- | The orientation of a widget.
+data Orientation  = Horizontal | Vertical
+                  deriving (Eq, Show)
+
+
+-- | Get the orientation of a scroll event.
+scrollOrientation :: EventScroll -> Orientation
+scrollOrientation scroll
+  = case scroll of
+      ScrollTop      orient pos   -> orient
+      ScrollBottom   orient pos   -> orient
+      ScrollLineUp   orient pos   -> orient
+      ScrollLineDown orient pos   -> orient
+      ScrollPageUp   orient pos   -> orient
+      ScrollPageDown orient pos   -> orient
+      ScrollTrack    orient pos   -> orient
+      ScrollRelease  orient pos   -> orient
+
+-- | Get the position of the scroll bar.
+scrollPos :: EventScroll -> Int
+scrollPos scroll
+  = case scroll of
+      ScrollTop      orient pos   -> pos
+      ScrollBottom   orient pos   -> pos
+      ScrollLineUp   orient pos   -> pos
+      ScrollLineDown orient pos   -> pos
+      ScrollPageUp   orient pos   -> pos
+      ScrollPageDown orient pos   -> pos
+      ScrollTrack    orient pos   -> pos
+      ScrollRelease  orient pos   -> pos
+
+
+
+fromScrollEvent :: ScrollWinEvent a -> IO EventScroll
+fromScrollEvent event
+  = do orient <- scrollWinEventGetOrientation event
+       pos    <- scrollWinEventGetPosition event
+       tp     <- eventGetEventType event
+       let orientation | orient == wxHORIZONTAL  = Horizontal
+                       | otherwise               = Vertical
+       case lookup tp scrollEvents of
+         Just evt  -> return (evt orientation pos)
+         Nothing   -> return (ScrollRelease orientation pos)
+
+scrollEvents :: [(Int,Orientation -> Int -> EventScroll)]
+scrollEvents
+  = [(wxEVT_SCROLLWIN_TOP,        ScrollTop)
+    ,(wxEVT_SCROLLWIN_BOTTOM,     ScrollBottom)
+    ,(wxEVT_SCROLLWIN_LINEUP,     ScrollLineUp)
+    ,(wxEVT_SCROLLWIN_LINEDOWN,   ScrollLineDown)
+    ,(wxEVT_SCROLLWIN_PAGEUP,     ScrollPageUp)
+    ,(wxEVT_SCROLLWIN_PAGEDOWN,   ScrollPageDown)
+    ,(wxEVT_SCROLLWIN_THUMBTRACK, ScrollTrack)
+    ,(wxEVT_SCROLLWIN_THUMBRELEASE, ScrollRelease)
+    ]
+
+-- | Set a scroll event handler.
+windowOnScroll :: Window a -> (EventScroll -> IO ()) -> IO ()
+windowOnScroll window eventHandler
+  = windowOnEvent window (map fst scrollEvents) eventHandler scrollHandler
+  where
+    scrollHandler event
+      = do eventScroll <- fromScrollEvent (objectCast event)
+           eventHandler eventScroll
+
+-- | Get the current scroll event handler of a window.
+windowGetOnScroll :: Window a -> IO (EventScroll -> IO ())
+windowGetOnScroll window
+  = unsafeWindowGetHandlerState window wxEVT_SCROLLWIN_TOP (\scroll -> skipCurrentEvent)
+
+{--------------------------------------------------------------------------
+  Html event
+--------------------------------------------------------------------------}
+-- | Html window events
+data EventHtml  
+  = HtmlCellClicked String EventMouse  Point 
+      -- ^ A /cell/ is clicked. Contains the cell /id/ attribute value, the mouse event and the logical coordinates.
+  | HtmlCellHover String 
+      -- ^ The mouse hovers over a cell. Contains the cell /id/ attribute value.
+  | HtmlLinkClicked String String String EventMouse Point 
+     -- ^ A link is clicked. Contains the hyperlink, the frame target, the cell /id/ attribute value, the mouse event, and the logical coordinates.
+  | HtmlSetTitle String
+     -- ^ Called when a @<title>@ tag is parsed.
+  | HtmlUnknown 
+     -- ^ Unrecognised html event
+
+instance Show EventHtml where
+  show ev
+    = case ev of
+        HtmlCellClicked id mouse pnt           -> "Html Cell " ++ show id ++ " clicked: " ++ show mouse
+        HtmlLinkClicked href target id mouse p -> "Html Link " ++ show id ++ " clicked: " ++ href
+        HtmlCellHover id                       -> "Html Cell " ++ show id ++ " hover"
+        HtmlSetTitle title                     -> "Html event title: " ++ title
+        HtmlUnknown                            -> "Html event unknown"
+
+fromHtmlEvent :: WXCHtmlEvent a -> IO EventHtml
+fromHtmlEvent event
+  = do tp <- eventGetEventType event
+       case lookup tp htmlEvents of
+         Nothing      -> return HtmlUnknown 
+         Just action  -> action event
+  where
+    htmlEvents  = [(wxEVT_HTML_CELL_MOUSE_HOVER,  htmlHover)
+                  ,(wxEVT_HTML_CELL_CLICKED,      htmlClicked)
+                  ,(wxEVT_HTML_LINK_CLICKED,      htmlLink)
+                  ,(wxEVT_HTML_SET_TITLE,         htmlTitle)]
+
+    htmlTitle event
+      = do title <- commandEventGetString event
+           return (HtmlSetTitle title)
+
+    htmlHover event
+      = do id      <- wxcHtmlEventGetHtmlCellId event
+           return (HtmlCellHover id)
+
+    htmlClicked event
+      = do id      <- wxcHtmlEventGetHtmlCellId event
+           mouseEv <- wxcHtmlEventGetMouseEvent event
+           mouse   <- fromMouseEvent mouseEv
+           pnt     <- wxcHtmlEventGetLogicalPosition event
+           return (HtmlCellClicked id mouse pnt)
+
+    htmlLink event
+      = do id      <- wxcHtmlEventGetHtmlCellId event
+           mouseEv <- wxcHtmlEventGetMouseEvent event
+           mouse   <- fromMouseEvent mouseEv
+           href    <- wxcHtmlEventGetHref event
+           target  <- wxcHtmlEventGetTarget event
+           pnt     <- wxcHtmlEventGetLogicalPosition event
+           return (HtmlLinkClicked href target id mouse pnt)
+      
+-- | Set a html event handler for a html window. The first argument determines whether
+-- hover events ('HtmlCellHover') are handled or not.
+htmlWindowOnHtmlEvent :: WXCHtmlWindow a -> Bool -> (EventHtml -> IO ()) -> IO ()
+htmlWindowOnHtmlEvent window allowHover handler
+  = windowOnEvent window htmlEvents handler eventHandler
+  where
+    htmlEvents
+      = [wxEVT_HTML_CELL_CLICKED,wxEVT_HTML_LINK_CLICKED,wxEVT_HTML_SET_TITLE]
+        ++ (if allowHover then [wxEVT_HTML_CELL_MOUSE_HOVER] else [])
+
+    eventHandler event
+      = do eventHtml <- fromHtmlEvent (objectCast event)
+           handler eventHtml
+
+-- | Get the current html event handler of a html window.
+htmlWindowGetOnHtmlEvent :: WXCHtmlWindow a -> IO (EventHtml -> IO ())
+htmlWindowGetOnHtmlEvent window
+  = unsafeWindowGetHandlerState window wxEVT_HTML_CELL_CLICKED (\ev -> skipCurrentEvent)
+
+     
+          
+
+{-----------------------------------------------------------------------------------------
+  Close, Destroy, Create
+-----------------------------------------------------------------------------------------}
+-- | Adds a close handler to the currently installed close handlers.
+windowAddOnClose :: Window a -> IO () -> IO ()
+windowAddOnClose window new
+  = do prev <- windowGetOnClose window
+       windowOnClose window (do{ new; prev })
+
+-- | Set an event handler that is called when the user tries to close a frame or dialog.
+-- Don't forget to call the previous handler or 'frameDestroy' explicitly or otherwise the
+-- frame won't be closed.
+windowOnClose :: Window a -> IO () -> IO ()
+windowOnClose window eventHandler
+  = windowOnEvent window [wxEVT_CLOSE_WINDOW] eventHandler (\ev -> eventHandler)
+
+-- | Get the current close event handler.
+windowGetOnClose :: Window a -> IO (IO ())
+windowGetOnClose window
+  = unsafeWindowGetHandlerState window wxEVT_CLOSE_WINDOW (do windowDestroy window; return ())
+
+-- | Set an event handler that is called when the window is destroyed.
+-- /Note: does not seem to work on windows/.
+windowOnDestroy :: Window a -> IO () -> IO ()
+windowOnDestroy window eventHandler
+  = windowOnEvent window [wxEVT_DESTROY] eventHandler (\ev -> eventHandler)
+
+-- | Get the current destroy event handler.
+windowGetOnDestroy :: Window a -> IO (IO ())
+windowGetOnDestroy window
+  = unsafeWindowGetHandlerState window wxEVT_DESTROY (return ())
+
+-- | Add a delete-event handler to the current installed delete-event handlers.
+--
+-- > windowAddOnDelete window new
+-- >   = do prev <- windowGetOnDelete window
+-- >        windowOnDelete window (do{ new; prev })
+
+windowAddOnDelete :: Window a -> IO () -> IO ()
+windowAddOnDelete window new
+  = do prev <- windowGetOnDelete window
+       windowOnDelete window (do{ new; prev })
+
+-- | Set an event handler that is called when the window is deleted.
+-- Use with care as the window itself is in a deletion state.
+windowOnDelete :: Window a -> IO () -> IO ()
+windowOnDelete window eventHandler
+  = windowOnEventEx window [wxEVT_DELETE] eventHandler onDelete (\ev -> return ())
+  where
+    onDelete ownerDeleted
+      | ownerDeleted  = eventHandler
+      | otherwise     = return ()    -- don't run on disconnect!
+
+-- | Get the current delete event handler.
+windowGetOnDelete :: Window a -> IO (IO ())
+windowGetOnDelete window
+  = unsafeWindowGetHandlerState window wxEVT_DELETE (return ())
+
+
+-- | Set an event handler that is called when the window is created.
+windowOnCreate :: Window a -> IO () -> IO ()
+windowOnCreate window eventHandler
+  = windowOnEvent window [wxEVT_CREATE] eventHandler (\ev -> eventHandler)
+
+-- | Get the current create event handler.
+windowGetOnCreate :: Window a -> IO (IO ())
+windowGetOnCreate window
+  = unsafeWindowGetHandlerState window wxEVT_CREATE (return ())
+
+-- | Set an event handler that is called when the window is resized.
+windowOnSize :: Window a -> IO () -> IO ()
+windowOnSize window eventHandler
+  = windowOnEvent window [wxEVT_SIZE] eventHandler (\ev -> eventHandler)
+
+-- | Get the current resize event handler.
+windowGetOnSize :: Window a -> IO (IO ())
+windowGetOnSize window
+  = unsafeWindowGetHandlerState window wxEVT_SIZE (return ())
+
+-- | Set an event handler that is called when the window is activated or deactivated.
+-- The event parameter is 'True' when the window is activated.
+windowOnActivate :: Window a -> (Bool -> IO ()) -> IO ()
+windowOnActivate window eventHandler
+  = windowOnEvent window [wxEVT_ACTIVATE] eventHandler activateHandler
+  where
+    activateHandler event
+      = do active <- activateEventGetActive (objectCast event)
+           eventHandler active
+
+-- | Get the current activate event handler.
+windowGetOnActivate :: Window a -> IO (Bool -> IO ())
+windowGetOnActivate window
+  = unsafeWindowGetHandlerState window wxEVT_ACTIVATE (\active -> return ())
+
+-- | Set an event handler that is called when the window gets or loses the focus.
+-- The event parameter is 'True' when the window gets the focus.
+windowOnFocus :: Window a -> (Bool -> IO ()) -> IO ()
+windowOnFocus window eventHandler
+  = do windowOnEvent window [wxEVT_SET_FOCUS] eventHandler getFocusHandler
+       windowOnEvent window [wxEVT_KILL_FOCUS] eventHandler killFocusHandler
+  where
+    getFocusHandler event
+      = eventHandler True
+    killFocusHandler event
+      = eventHandler False
+
+-- | Get the current focus event handler.
+windowGetOnFocus :: Window a -> IO (Bool -> IO ())
+windowGetOnFocus window
+  = unsafeWindowGetHandlerState window wxEVT_SET_FOCUS (\getfocus -> return ())
+
+
+-- | A context menu event is generated when the user righ-clicks in a window
+-- or presses shift-F10.
+windowOnContextMenu :: Window a -> IO () -> IO ()
+windowOnContextMenu window eventHandler
+  = windowOnEvent window [wxEVT_CONTEXT_MENU] eventHandler (\ev -> eventHandler)
+
+-- | Get the current context menu event handler.
+windowGetOnContextMenu :: Window a -> IO (IO ())
+windowGetOnContextMenu window
+  = unsafeWindowGetHandlerState window wxEVT_CONTEXT_MENU skipCurrentEvent
+
+-- | A menu event is generated when the user selects a menu item.
+-- You should install this handler on the window that owns the menubar or a popup menu.
+evtHandlerOnMenuCommand :: EvtHandler a -> Id -> IO () -> IO ()
+evtHandlerOnMenuCommand window id eventHandler
+  = evtHandlerOnEvent window id id [wxEVT_COMMAND_MENU_SELECTED] eventHandler (\_ -> return ()) (\ev -> eventHandler)
+
+-- | Get the current event handler for a certain menu.
+evtHandlerGetOnMenuCommand :: EvtHandler a -> Id -> IO (IO ())
+evtHandlerGetOnMenuCommand window id
+  = unsafeGetHandlerState window id wxEVT_COMMAND_MENU_SELECTED skipCurrentEvent
+
+
+-- | An idle event is generated in idle time. The handler should return whether more
+-- idle processing is needed ('True') or otherwise the event loop goes into a passive
+-- waiting state.
+windowOnIdle :: Window a -> IO Bool -> IO ()
+windowOnIdle window eventHandler
+  = windowOnEvent window [wxEVT_IDLE] eventHandler idleHandler
+  where
+    idleHandler event
+      = do requestMore <- eventHandler
+           idleEventRequestMore (objectCast event) requestMore
+           return ()
+
+-- | Get the current context menu event handler.
+windowGetOnIdle :: Window a -> IO (IO Bool)
+windowGetOnIdle window
+  = unsafeWindowGetHandlerState window wxEVT_IDLE (return False)
+
+
+-- | A timer event is generated by an attached timer, see 'windowTimerAttach'.
+-- /Broken!/ (use 'timerOnCommand' instead).
+windowOnTimer :: Window a -> IO () -> IO ()
+windowOnTimer window eventHandler
+  = windowOnEvent window [wxEVT_TIMER] eventHandler (\ev -> eventHandler)
+
+-- | Get the current timer handler.
+windowGetOnTimer :: Window a -> IO (IO ())
+windowGetOnTimer window
+  = unsafeWindowGetHandlerState window wxEVT_TIMER (return ())
+
+{-----------------------------------------------------------------------------------------
+  Paint
+-----------------------------------------------------------------------------------------}
+-- | Set an event handler for /raw/ paint events. Draws directly to the
+-- paint device context ('PaintDC') and the 'DC' is not cleared when the handler
+-- is called. The handler takes two other arguments: the view rectangle and a
+-- list of /dirty/ rectangles. The rectangles contain logical coordinates and
+-- are already adjusted for scrolled windows.
+-- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!
+windowOnPaintRaw :: Window a -> (DC () -> Rect -> [Rect] -> IO ()) -> IO ()
+windowOnPaintRaw window paintHandler
+  = windowOnEvent window [wxEVT_PAINT] paintHandler onPaint 
+  where
+    onPaint event
+      = do obj <- eventGetEventObject event
+           if (obj==objectNull)
+            then return ()
+            else do let window = objectCast obj
+                    region <- windowGetUpdateRects window
+                    view   <- windowGetViewRect window
+                    withPaintDC window (\paintDC ->
+                     do isScrolled <- objectIsScrolledWindow window
+                        when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)
+                        paintHandler (downcastDC paintDC) view region)
+
+                    
+-- | Get the current /raw/ paint event handler. 
+windowGetOnPaintRaw :: Window a -> IO (DC () -> Rect -> [Rect] -> IO ())
+windowGetOnPaintRaw window
+  = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc rect region -> return ())
+
+
+-- | Set an event handler for paint events. The implementation uses an 
+-- intermediate buffer for non-flickering redraws. 
+-- The device context ('DC')
+-- is always cleared before the paint handler is called. The paint handler
+-- also gets the currently visible view area as an argument (adjusted for scrolling).
+-- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!
+windowOnPaint :: Window a -> (DC () -> Rect -> IO ()) -> IO ()
+windowOnPaint window paintHandler
+  | wxToolkit == WxMac  = windowOnPaintRaw window (\dc view _ -> paintHandler dc view)
+  | otherwise
+  = do v <- varCreate objectNull
+       windowOnEventEx window [wxEVT_PAINT] paintHandler (destroy v) (onPaint v)
+  where
+    destroy v ownerDeleted
+      = do bitmap <- varSwap v objectNull
+           when (not (objectIsNull bitmap)) (bitmapDelete bitmap)
+
+    onPaint v event
+      = do obj <- eventGetEventObject event
+           if (obj==objectNull)
+            then return ()
+            else do let window = objectCast obj
+                    view  <- windowGetViewRect window
+                    withPaintDC window (\paintDC ->
+                     do isScrolled <- objectIsScrolledWindow window
+                        when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)
+                        -- Note: wxMSW 2.4 does not clear the properly scrolled view rectangle.
+                        let clear dc  | wxToolkit == WxMSW  = dcClearRect dc view
+                                      | otherwise           = dcClear dc
+                        -- and repaint with buffer
+                        dcBufferWithRefEx paintDC clear (Just v) view (\dc -> paintHandler dc view))
+
+
+-- | Get the current paint event handler.
+windowGetOnPaint :: Window a -> IO (DC () -> Rect -> IO ())
+windowGetOnPaint window
+  = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc view -> return ())
+
+
+-- Get the logical /dirty/ rectangles as a list of 'Rect'.
+windowGetUpdateRects :: Window a -> IO [Rect]
+windowGetUpdateRects window
+  = do region <- windowGetUpdateRegion window
+       iter   <- regionIteratorCreateFromRegion region
+       rects  <- getRects iter
+       regionIteratorDelete iter
+       p <- windowGetViewStart window
+       return (map (\r -> rectMove r (vecFromPoint p)) rects)
+  where
+    getRects iter
+      = do more <- regionIteratorHaveRects iter
+           if more
+            then do x <- regionIteratorGetX iter
+                    y <- regionIteratorGetY iter
+                    w <- regionIteratorGetWidth iter
+                    h <- regionIteratorGetHeight iter
+                    regionIteratorNext iter
+                    rs <- getRects iter
+                    return (rect (pt x y) (sz w h) : rs)
+            else return []
+
+
+{-----------------------------------------------------------------------------------------
+  Modifiers
+-----------------------------------------------------------------------------------------}
+-- | Called when a process is ended with the process @pid@ and exitcode.
+evtHandlerOnEndProcess :: EvtHandler a -> (Int -> Int -> IO ()) -> IO ()
+evtHandlerOnEndProcess  evtHandler handler
+  = evtHandlerOnEvent evtHandler (-1) (-1) [wxEVT_END_PROCESS] handler onDelete onEndProcess
+  where
+    onDelete ownerDeleted
+      = return ()
+
+    onEndProcess event
+      = let processEvent = objectCast event
+        in  do pid  <- processEventGetPid processEvent
+               code <- processEventGetExitCode processEvent
+               handler pid code
+
+
+-- | Retrieve the current end process handler.
+evtHandlerGetOnEndProcess :: EvtHandler a -> IO (Int -> Int -> IO ())
+evtHandlerGetOnEndProcess evtHandler
+  = unsafeGetHandlerState evtHandler (-1) wxEVT_END_PROCESS (\pid code -> return ())
+
+
+-- | The status of a stream (see 'StreamBase')
+data StreamStatus = StreamOk          -- ^ No error.
+                  | StreamEof         -- ^ No more input.
+                  | StreamReadError   -- ^ Read error.
+                  | StreamWriteError  -- ^ Write error.
+                  deriving (Eq,Show)
+
+-- | Convert a stream status code into 'StreamStatus'.
+streamStatusFromInt :: Int -> StreamStatus
+streamStatusFromInt code
+  | code == wxSTREAM_NO_ERROR     = StreamOk
+  | code == wxSTREAM_EOF          = StreamEof
+  | code == wxSTREAM_READ_ERROR   = StreamReadError
+  | code == wxSTREAM_WRITE_ERROR  = StreamWriteError
+  | otherwise                     = StreamReadError
+
+
+-- | Install an event handler on an input stream. The handler is called
+-- whenever input is read (or when an error occurred). The third parameter
+-- gives the size of the input batches. The orignal input stream should no longer be referenced after this call!
+evtHandlerOnInput :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputStream a -> Int -> IO ()
+evtHandlerOnInput evtHandler handler stream bufferLen
+  = do sink <- inputSinkCreate stream evtHandler bufferLen
+       evtHandlerOnInputSink evtHandler handler sink
+       inputSinkStart sink
+
+-- | Install an event handler on a specific input sink. It is advised to
+-- use the 'evtHandlerOnInput' whenever retrieval of the handler is not necessary.
+evtHandlerOnInputSink :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputSink a -> IO ()
+evtHandlerOnInputSink evtHandler handler sink
+  = do id <- inputSinkGetId sink
+       evtHandlerOnEvent evtHandler id id [wxEVT_INPUT_SINK] handler onDelete onInput
+  where
+    onDelete ownerDeleted
+      = return ()
+
+    onInput event
+      = let inputSinkEvent = objectCast event
+        in  do input <- inputSinkEventLastString inputSinkEvent
+               code  <- inputSinkEventLastError inputSinkEvent
+               handler input (streamStatusFromInt code)
+
+
+-- | Retrieve the current input stream handler.
+evtHandlerGetOnInputSink :: EvtHandler b -> IO (String -> StreamStatus -> IO ())
+evtHandlerGetOnInputSink evtHandler
+  = unsafeGetHandlerState evtHandler (-1) wxEVT_INPUT_SINK (\input status -> return ())
+
+-- | Read the input from an 'InputSinkEvent'.
+inputSinkEventLastString :: InputSinkEvent a -> IO String
+inputSinkEventLastString inputSinkEvent
+  = do n <- inputSinkEventLastRead inputSinkEvent
+       if (n <= 0)
+        then return ""
+        else do buffer <- inputSinkEventLastInput inputSinkEvent
+                peekCWStringLen (buffer,n)
+
+
+{-----------------------------------------------------------------------------------------
+  Modifiers
+-----------------------------------------------------------------------------------------}
+-- | The @Modifiers@ indicate the meta keys that have been pressed ('True') or not ('False').
+data Modifiers  = Modifiers
+                  { altDown     :: !Bool   -- ^ alt key down
+                  , shiftDown   :: !Bool   -- ^ shift key down
+                  , controlDown :: !Bool   -- ^ control key down
+                  , metaDown    :: !Bool   -- ^ meta key down
+                  }
+                  deriving (Eq)
+
+instance Show Modifiers where
+  show mods = showModifiers mods
+
+-- | Show modifiers, for example for use in menus.
+showModifiers :: Modifiers -> String
+showModifiers mods
+  = concat $ intersperse "+" $ filter (not.null)
+    [if controlDown mods then "Ctrl" else ""
+    ,if altDown mods     then "Alt" else ""
+    ,if shiftDown mods   then "Shift" else ""
+    ,if metaDown mods    then "Meta" else ""
+    ]
+
+
+-- | Construct a 'Modifiers' structure with no meta keys pressed.
+noneDown :: Modifiers
+noneDown = Modifiers False False False False
+
+-- | Construct a 'Modifiers' structure with just Shift meta key pressed.
+justShift   :: Modifiers
+justShift   = noneDown{ shiftDown = True }
+
+-- | Construct a 'Modifiers' structure with just Alt meta key pressed.
+justAlt     :: Modifiers
+justAlt     = noneDown{ altDown = True }
+
+-- | Construct a 'Modifiers' structure with just Ctrl meta key pressed.
+justControl :: Modifiers
+justControl = noneDown{ controlDown = True }
+
+-- | Construct a 'Modifiers' structure with just Meta meta key pressed.
+justMeta :: Modifiers
+justMeta = noneDown{ metaDown = True }
+
+-- | Test if no meta key was pressed.
+isNoneDown :: Modifiers -> Bool
+isNoneDown (Modifiers shift control alt meta) = not (shift || control || alt || meta)
+
+-- | Test if no shift, alt, or control key was pressed.
+isNoShiftAltControlDown :: Modifiers -> Bool
+isNoShiftAltControlDown (Modifiers shift control alt meta) = not (shift || control || alt)
+
+-- | Tranform modifiers into an accelerator modifiers code.
+modifiersToAccelFlags :: Modifiers -> Int
+modifiersToAccelFlags mod
+  = mask (altDown mod) 0x01 + mask (controlDown mod) 0x02 + mask (shiftDown mod) 0x04
+  where
+    mask test flag = if test then flag else 0
+
+{-----------------------------------------------------------------------------------------
+  MouseEvent
+-----------------------------------------------------------------------------------------}
+-- | Mouse events. The 'Point' gives the logical (unscrolled) position.
+data EventMouse
+  =  MouseMotion      !Point !Modifiers -- ^ Mouse was moved over the client area of the window
+  |  MouseEnter       !Point !Modifiers -- ^ Mouse enters in the client area of the window
+  |  MouseLeave       !Point !Modifiers -- ^ Mouse leaves the client area of the window
+  |  MouseLeftDown    !Point !Modifiers -- ^ Mouse left button goes down
+  |  MouseLeftUp      !Point !Modifiers -- ^ Mouse left  button goes up
+  |  MouseLeftDClick  !Point !Modifiers -- ^ Mouse left button double click
+  |  MouseLeftDrag    !Point !Modifiers -- ^ Mouse left button drag
+  |  MouseRightDown   !Point !Modifiers -- ^ Mouse right button goes down
+  |  MouseRightUp     !Point !Modifiers -- ^ Mouse right  button goes up
+  |  MouseRightDClick !Point !Modifiers -- ^ Mouse right button double click
+  |  MouseRightDrag   !Point !Modifiers -- ^ Mouse right button drag (unsupported on most platforms)
+  |  MouseMiddleDown  !Point !Modifiers -- ^ Mouse middle button goes down
+  |  MouseMiddleUp    !Point !Modifiers -- ^ Mouse middle  button goes up
+  |  MouseMiddleDClick !Point !Modifiers -- ^ Mouse middle button double click
+  |  MouseMiddleDrag  !Point !Modifiers -- ^ Mouse middle button drag (unsupported on most platforms)
+  |  MouseWheel !Bool !Point !Modifiers -- ^ Mouse wheel rotation. (Bool is True for a downward rotation)
+  deriving (Eq) -- ,Show)
+
+
+instance Show EventMouse where
+  show mouse  = showMouse mouse
+
+-- | Show an 'EventMouse' in a user friendly way.
+showMouse :: EventMouse -> String
+showMouse mouse
+  = (if (null modsText) then "" else modsText ++ "+") ++ action ++ " at " ++ show (x,y)
+  where
+    modsText     = show (mouseModifiers mouse)
+    (Point x y)  = mousePos mouse
+    action
+      = case mouse of
+          MouseMotion p m       -> "Motion"
+          MouseEnter p m        -> "Enter"
+          MouseLeave p m        -> "Leave"
+          MouseLeftDown p m     -> "Left down"
+          MouseLeftUp p m       -> "Left up"
+          MouseLeftDClick p m   -> "Left double click"
+          MouseLeftDrag p m     -> "Left drag"
+          MouseRightDown p m    -> "Right down"
+          MouseRightUp p m      -> "Right up"
+          MouseRightDClick p m  -> "Right double click"
+          MouseRightDrag p m    -> "Right drag"
+          MouseMiddleDown p m   -> "Middle down"
+          MouseMiddleUp p m     -> "Middle up"
+          MouseMiddleDClick p m -> "Middle double click"
+          MouseMiddleDrag p m   -> "Middle drag"
+          MouseWheel down p m   -> "Wheel " ++ (if down then "down" else "up")
+
+
+-- | Extract the position from a 'MouseEvent'.
+mousePos :: EventMouse -> Point
+mousePos mouseEvent
+  = case mouseEvent of
+      MouseMotion p m        -> p
+      MouseEnter p m        -> p
+      MouseLeave p m        -> p
+      MouseLeftDown p m     -> p
+      MouseLeftUp p m       -> p
+      MouseLeftDClick p m   -> p
+      MouseLeftDrag p m     -> p
+      MouseRightDown p m    -> p
+      MouseRightUp p m      -> p
+      MouseRightDClick p m  -> p
+      MouseRightDrag p m    -> p
+      MouseMiddleDown p m   -> p
+      MouseMiddleUp p m     -> p
+      MouseMiddleDClick p m -> p
+      MouseMiddleDrag p m   -> p
+      MouseWheel _ p m      -> p
+
+-- | Extract the modifiers from a 'MouseEvent'.
+mouseModifiers :: EventMouse -> Modifiers
+mouseModifiers mouseEvent
+  = case mouseEvent of
+      MouseMotion p m       -> m
+      MouseEnter p m        -> m
+      MouseLeave p m        -> m
+      MouseLeftDown p m     -> m
+      MouseLeftUp p m       -> m
+      MouseLeftDClick p m   -> m
+      MouseLeftDrag p m     -> m
+      MouseRightDown p m    -> m
+      MouseRightUp p m      -> m
+      MouseRightDClick p m  -> m
+      MouseRightDrag p m    -> m
+      MouseMiddleDown p m   -> m
+      MouseMiddleUp p m     -> m
+      MouseMiddleDClick p m -> m
+      MouseMiddleDrag p m   -> m
+      MouseWheel _ p m      -> m
+
+fromMouseEvent :: MouseEvent a -> IO EventMouse
+fromMouseEvent event
+  = do x <- mouseEventGetX event
+       y <- mouseEventGetY event
+       obj   <- eventGetEventObject event
+       point <- windowCalcUnscrolledPosition (objectCast obj) (Point x y)
+
+       altDown     <- mouseEventAltDown event
+       controlDown <- mouseEventControlDown event
+       shiftDown   <- mouseEventShiftDown event
+       metaDown    <- mouseEventMetaDown event
+       let modifiers = Modifiers altDown shiftDown controlDown metaDown
+
+       dragging    <- mouseEventDragging event
+       if (dragging)
+        then do leftDown <- mouseEventLeftIsDown event
+                if (leftDown)
+                 then return (MouseLeftDrag point modifiers)
+                 else do middleDown <- mouseEventMiddleIsDown event
+                         if (middleDown)
+                          then return (MouseMiddleDrag point modifiers)
+                          else do rightDown <- mouseEventRightIsDown event
+                                  if (rightDown)
+                                   then return (MouseRightDrag point modifiers)
+                                   else return (MouseMotion point modifiers)
+        else do tp <- eventGetEventType event
+                case lookup tp mouseEventTypes of
+                  Just mouse  -> return (mouse point modifiers)
+                  Nothing     -> if (tp==wxEVT_MOUSEWHEEL)
+                                  then do rot   <- mouseEventGetWheelRotation event
+                                          delta <- mouseEventGetWheelDelta event
+                                          if (abs rot >= delta)
+                                           then return (MouseWheel (rot<0) point modifiers)
+                                           else return (MouseMotion point modifiers)
+                                  else return (MouseMotion point modifiers)
+
+mouseEventTypes :: [(Int,Point -> Modifiers -> EventMouse)]
+mouseEventTypes
+  = [(wxEVT_MOTION       , MouseMotion)         -- must be the first element, see "windowOnMouse"
+    ,(wxEVT_ENTER_WINDOW , MouseEnter)
+    ,(wxEVT_LEAVE_WINDOW , MouseLeave)
+    ,(wxEVT_LEFT_DOWN    , MouseLeftDown)
+    ,(wxEVT_LEFT_UP      , MouseLeftUp)
+    ,(wxEVT_LEFT_DCLICK  , MouseLeftDClick)
+    ,(wxEVT_MIDDLE_DOWN  , MouseMiddleDown)
+    ,(wxEVT_MIDDLE_UP    , MouseMiddleUp)
+    ,(wxEVT_MIDDLE_DCLICK, MouseMiddleDClick)
+    ,(wxEVT_RIGHT_DOWN   , MouseRightDown)
+    ,(wxEVT_RIGHT_UP     , MouseRightUp)
+    ,(wxEVT_RIGHT_DCLICK , MouseRightDClick)
+    ]
+
+-- | Set a mouse event handler for a window. The first argument determines whether
+-- mouse motion events ('MouseMotion') are handled or not.
+windowOnMouse :: Window a -> Bool -> (EventMouse -> IO ()) -> IO ()
+windowOnMouse window allowMotion handler
+  = windowOnEvent window mouseEvents handler eventHandler
+  where
+    mouseEvents
+      = (map fst (if allowMotion then mouseEventTypes else tail (mouseEventTypes))) ++ [wxEVT_MOUSEWHEEL]
+
+    eventHandler event
+      = do eventMouse <- fromMouseEvent (objectCast event)
+           handler eventMouse
+
+-- | Get the current mouse event handler of a window.
+windowGetOnMouse :: Window a -> IO (EventMouse -> IO ())
+windowGetOnMouse window
+  = unsafeWindowGetHandlerState window wxEVT_ENTER_WINDOW (\ev -> skipCurrentEvent)
+
+
+{-----------------------------------------------------------------------------------------
+  KeyboardEvent
+-----------------------------------------------------------------------------------------}
+-- | Set an event handler for untranslated key presses. If 'skipCurrentEvent' is not
+-- called, the corresponding 'windowOnKeyChar' eventhandler won't be called.
+windowOnKeyDown :: Window a -> (EventKey -> IO ()) -> IO ()
+windowOnKeyDown window handler
+  = windowOnEvent window [wxEVT_KEY_DOWN] handler eventHandler
+  where
+    eventHandler event
+      = do eventKey <- eventKeyFromEvent (objectCast event)
+           handler eventKey
+
+-- | Get the current key down handler of a window.
+windowGetOnKeyDown :: Window a -> IO (EventKey -> IO ())
+windowGetOnKeyDown window
+  = unsafeWindowGetHandlerState window wxEVT_KEY_DOWN (\eventKey -> skipCurrentEvent)
+
+
+-- | Set an event handler for translated key presses.
+windowOnKeyChar :: Window a -> (EventKey -> IO ()) -> IO ()
+windowOnKeyChar window handler
+  = windowOnEvent window [wxEVT_CHAR] handler eventHandler
+  where
+    eventHandler event
+      = do eventKey <- eventKeyFromEvent (objectCast event)
+           handler eventKey
+
+-- | Get the current translated key handler of a window.
+windowGetOnKeyChar :: Window a -> IO (EventKey -> IO ())
+windowGetOnKeyChar window
+  = unsafeWindowGetHandlerState window wxEVT_CHAR (\eventKey -> skipCurrentEvent)
+
+
+-- | Set an event handler for (untranslated) key releases.
+windowOnKeyUp :: Window a -> (EventKey -> IO ()) -> IO ()
+windowOnKeyUp window handler
+  = windowOnEvent window [wxEVT_KEY_UP] handler eventHandler
+  where
+    eventHandler event
+      = do eventKey <- eventKeyFromEvent (objectCast event)
+           handler eventKey
+
+-- | Get the current key release handler of a window.
+windowGetOnKeyUp :: Window a -> IO (EventKey -> IO ())
+windowGetOnKeyUp window
+  = unsafeWindowGetHandlerState window wxEVT_KEY_UP (\keyInfo -> skipCurrentEvent)
+
+
+eventKeyFromEvent :: KeyEvent a -> IO EventKey
+eventKeyFromEvent event
+  = do x <- keyEventGetX event
+       y <- keyEventGetY event
+       obj   <- eventGetEventObject event
+       point <- if objectIsNull obj
+                 then return (Point x y)
+                 else windowCalcUnscrolledPosition (objectCast obj) (Point x y)
+
+       altDown     <- keyEventAltDown event
+       controlDown <- keyEventControlDown event
+       shiftDown   <- keyEventShiftDown event
+       metaDown    <- keyEventMetaDown event
+       let modifiers = Modifiers altDown shiftDown controlDown metaDown
+
+       keyCode <- keyEventGetKeyCode event
+       let key = keyCodeToKey keyCode
+
+       return (EventKey key modifiers point)
+
+
+
+-- | A keyboard event contains the key, the modifiers and the focus point.
+data EventKey  = EventKey !Key !Modifiers !Point
+               deriving (Eq,Show)
+
+-- | Extract the key from a keyboard event.
+keyKey :: EventKey -> Key
+keyKey (EventKey key mods pos) = key
+
+-- | Extract the modifiers from a keyboard event.
+keyModifiers :: EventKey -> Modifiers
+keyModifiers (EventKey key mods pos) = mods
+
+-- | Extract the position from a keyboard event.
+keyPos :: EventKey -> Point
+keyPos (EventKey key mods pos) = pos
+
+
+-- | A low-level virtual key code.
+type KeyCode  = Int
+
+-- | A 'Key' represents a single key on a keyboard.
+data Key
+  = KeyChar  !Char        -- ^ An ascii code.
+  | KeyOther !KeyCode     -- ^ An unknown virtual key.
+  | KeyBack
+  | KeyTab
+  | KeyReturn
+  | KeyEscape
+  | KeySpace
+  | KeyDelete
+  | KeyInsert
+  | KeyEnd
+  | KeyHome
+  | KeyLeft
+  | KeyUp
+  | KeyRight
+  | KeyDown
+  | KeyPageUp
+  | KeyPageDown
+  | KeyStart
+  | KeyClear
+  | KeyShift
+  | KeyAlt
+  | KeyControl
+  | KeyMenu
+  | KeyPause
+  | KeyCapital
+  | KeyHelp
+  | KeySelect
+  | KeyPrint
+  | KeyExecute
+  | KeySnapshot
+  | KeyCancel
+  | KeyLeftButton
+  | KeyRightButton
+  | KeyMiddleButton
+  | KeyNum0
+  | KeyNum1
+  | KeyNum2
+  | KeyNum3
+  | KeyNum4
+  | KeyNum5
+  | KeyNum6
+  | KeyNum7
+  | KeyNum8
+  | KeyNum9
+  | KeyMultiply
+  | KeyAdd
+  | KeySeparator
+  | KeySubtract
+  | KeyDecimal
+  | KeyDivide
+  | KeyF1
+  | KeyF2
+  | KeyF3
+  | KeyF4
+  | KeyF5
+  | KeyF6
+  | KeyF7
+  | KeyF8
+  | KeyF9
+  | KeyF10
+  | KeyF11
+  | KeyF12
+  | KeyF13
+  | KeyF14
+  | KeyF15
+  | KeyF16
+  | KeyF17
+  | KeyF18
+  | KeyF19
+  | KeyF20
+  | KeyF21
+  | KeyF22
+  | KeyF23
+  | KeyF24
+  | KeyNumLock
+  | KeyScroll
+{- Note: If we add "deriving (Show)" we get a strange link error in ghci:
+    Loading package wxh ... linking ... Overflown relocs: 122
+-}
+  deriving (Eq)
+
+{-
+  | KeyNumSpace
+  | KeyNumTab
+  | KeyNumEnter
+  | KeyNumF1
+  | KeyNumF2
+  | KeyNumF3
+  | KeyNumF4
+  | KeyNumHome
+  | KeyNumLeft
+  | KeyNumUp
+  | KeyNumRight
+  | KeyNumDown
+  | KeyNumPageUp
+  | KeyNumPageDown
+  | KeyNumEnd
+  | KeyNumBegin
+  | KeyNumInsert
+  | KeyNumDelete
+  | KeyNumEqual
+  | KeyNumMultiply
+  | KeyNumAdd
+  | KeyNumSeparator
+  | KeyNumSubstract
+  | KeyNumDecimal
+  | KeyNumSubstract
+-}
+
+-- | From a key to a virtual key code.
+keyToKeyCode :: Key -> KeyCode
+keyToKeyCode key
+  = case key of
+      KeyChar c       -> fromEnum c
+      KeyOther code   -> code
+      KeyBack         -> wxK_BACK
+      KeyTab          -> wxK_TAB
+      KeyReturn       -> wxK_RETURN
+      KeyEscape       -> wxK_ESCAPE
+      KeySpace        -> wxK_SPACE
+      KeyDelete       -> wxK_DELETE
+      KeyInsert       -> wxK_INSERT
+      KeyEnd          -> wxK_END
+      KeyHome         -> wxK_HOME
+      KeyLeft         -> wxK_LEFT
+      KeyUp           -> wxK_UP
+      KeyRight        -> wxK_RIGHT
+      KeyDown         -> wxK_DOWN
+      KeyPageUp       -> wxK_PAGEUP
+      KeyPageDown     -> wxK_PAGEDOWN
+      KeyStart        -> wxK_START
+      KeyClear        -> wxK_CLEAR
+      KeyShift        -> wxK_SHIFT
+      KeyAlt          -> wxK_ALT
+      KeyControl      -> wxK_CONTROL
+      KeyMenu         -> wxK_MENU
+      KeyPause        -> wxK_PAUSE
+      KeyCapital      -> wxK_CAPITAL
+      KeyHelp         -> wxK_HELP
+      KeySelect       -> wxK_SELECT
+      KeyPrint        -> wxK_PRINT
+      KeyExecute      -> wxK_EXECUTE
+      KeySnapshot     -> wxK_SNAPSHOT
+      KeyCancel       -> wxK_CANCEL
+      KeyLeftButton   -> wxK_LBUTTON
+      KeyRightButton  -> wxK_RBUTTON
+      KeyMiddleButton -> wxK_MBUTTON
+      KeyNum0         -> wxK_NUMPAD0
+      KeyNum1         -> wxK_NUMPAD1
+      KeyNum2         -> wxK_NUMPAD2
+      KeyNum3         -> wxK_NUMPAD3
+      KeyNum4         -> wxK_NUMPAD4
+      KeyNum5         -> wxK_NUMPAD5
+      KeyNum6         -> wxK_NUMPAD6
+      KeyNum7         -> wxK_NUMPAD7
+      KeyNum8         -> wxK_NUMPAD8
+      KeyNum9         -> wxK_NUMPAD9
+      KeyMultiply     -> wxK_MULTIPLY
+      KeyAdd          -> wxK_ADD
+      KeySeparator    -> wxK_SEPARATOR
+      KeySubtract     -> wxK_SUBTRACT
+      KeyDecimal      -> wxK_DECIMAL
+      KeyDivide       -> wxK_DIVIDE
+      KeyF1           -> wxK_F1
+      KeyF2           -> wxK_F2
+      KeyF3           -> wxK_F3
+      KeyF4           -> wxK_F4
+      KeyF5           -> wxK_F5
+      KeyF6           -> wxK_F6
+      KeyF7           -> wxK_F7
+      KeyF8           -> wxK_F8
+      KeyF9           -> wxK_F9
+      KeyF10          -> wxK_F10
+      KeyF11          -> wxK_F11
+      KeyF12          -> wxK_F12
+      KeyF13          -> wxK_F13
+      KeyF14          -> wxK_F14
+      KeyF15          -> wxK_F15
+      KeyF16          -> wxK_F16
+      KeyF17          -> wxK_F17
+      KeyF18          -> wxK_F18
+      KeyF19          -> wxK_F19
+      KeyF20          -> wxK_F20
+      KeyF21          -> wxK_F21
+      KeyF22          -> wxK_F22
+      KeyF23          -> wxK_F23
+      KeyF24          -> wxK_F24
+      KeyNumLock      -> wxK_NUMLOCK
+      KeyScroll       -> wxK_SCROLL
+
+-- | A virtual key code to a key.
+keyCodeToKey :: KeyCode -> Key
+keyCodeToKey keyCode
+  = if (keyCode < wxK_DELETE && keyCode > wxK_SPACE)     -- optimize for the common case
+     then KeyChar (toEnum keyCode)
+     else case IntMap.lookup keyCode keyCodeMap of
+            Just key -> key
+            Nothing  | keyCode <= 255  -> KeyChar (toEnum keyCode)
+                     | otherwise       -> KeyOther keyCode
+
+-- Use a big-endian patricia tree to efficiently map key codes to Haskell keys.
+-- Since it is a static map, we could maybe use one of Knuth's optimally balanced
+-- trees....
+-- keyCodeMap :: IntMap.IntMap Key
+keyCodeMap
+  = IntMap.fromList
+    [(wxK_BACK         , KeyBack)
+    ,(wxK_TAB          , KeyTab)
+    ,(wxK_RETURN       , KeyReturn)
+    ,(wxK_ESCAPE       , KeyEscape)
+    ,(wxK_SPACE        , KeySpace)
+    ,(wxK_DELETE       , KeyDelete)
+    ,(wxK_INSERT       , KeyInsert)
+    ,(wxK_END          , KeyEnd)
+    ,(wxK_HOME         , KeyHome)
+    ,(wxK_LEFT         , KeyLeft)
+    ,(wxK_UP           , KeyUp)
+    ,(wxK_RIGHT        , KeyRight)
+    ,(wxK_DOWN         , KeyDown)
+    ,(wxK_PAGEUP       , KeyPageUp)
+    ,(wxK_PAGEDOWN     , KeyPageDown)
+    ,(wxK_START        , KeyStart)
+    ,(wxK_CLEAR        , KeyClear)
+    ,(wxK_SHIFT        , KeyShift)
+    ,(wxK_ALT          , KeyAlt)
+    ,(wxK_CONTROL      , KeyControl)
+    ,(wxK_MENU         , KeyMenu)
+    ,(wxK_PAUSE        , KeyPause)
+    ,(wxK_CAPITAL      , KeyCapital)
+    ,(wxK_HELP         , KeyHelp)
+    ,(wxK_SELECT       , KeySelect)
+    ,(wxK_PRINT        , KeyPrint)
+    ,(wxK_EXECUTE      , KeyExecute)
+    ,(wxK_SNAPSHOT     , KeySnapshot)
+    ,(wxK_CANCEL       , KeyCancel)
+    ,(wxK_LBUTTON      , KeyLeftButton)
+    ,(wxK_RBUTTON      , KeyRightButton)
+    ,(wxK_MBUTTON      , KeyMiddleButton)
+    ,(wxK_NUMPAD0      , KeyNum0)
+    ,(wxK_NUMPAD1      , KeyNum1)
+    ,(wxK_NUMPAD2      , KeyNum2)
+    ,(wxK_NUMPAD3      , KeyNum3)
+    ,(wxK_NUMPAD4      , KeyNum4)
+    ,(wxK_NUMPAD5      , KeyNum5)
+    ,(wxK_NUMPAD6      , KeyNum6)
+    ,(wxK_NUMPAD7      , KeyNum7)
+    ,(wxK_NUMPAD8      , KeyNum8)
+    ,(wxK_NUMPAD9      , KeyNum9)
+    ,(wxK_MULTIPLY     , KeyMultiply)
+    ,(wxK_ADD          , KeyAdd)
+    ,(wxK_SEPARATOR    , KeySeparator)
+    ,(wxK_SUBTRACT     , KeySubtract)
+    ,(wxK_DECIMAL      , KeyDecimal)
+    ,(wxK_DIVIDE       , KeyDivide)
+    ,(wxK_F1           , KeyF1)
+    ,(wxK_F2           , KeyF2)
+    ,(wxK_F3           , KeyF3)
+    ,(wxK_F4           , KeyF4)
+    ,(wxK_F5           , KeyF5)
+    ,(wxK_F6           , KeyF6)
+    ,(wxK_F7           , KeyF7)
+    ,(wxK_F8           , KeyF8)
+    ,(wxK_F9           , KeyF9)
+    ,(wxK_F10          , KeyF10)
+    ,(wxK_F11          , KeyF11)
+    ,(wxK_F12          , KeyF12)
+    ,(wxK_F13          , KeyF13)
+    ,(wxK_F14          , KeyF14)
+    ,(wxK_F15          , KeyF15)
+    ,(wxK_F16          , KeyF16)
+    ,(wxK_F17          , KeyF17)
+    ,(wxK_F18          , KeyF18)
+    ,(wxK_F19          , KeyF19)
+    ,(wxK_F20          , KeyF20)
+    ,(wxK_F21          , KeyF21)
+    ,(wxK_F22          , KeyF22)
+    ,(wxK_F23          , KeyF23)
+    ,(wxK_F24          , KeyF24)
+    ,(wxK_NUMLOCK      , KeyNumLock)
+    ,(wxK_SCROLL       , KeyScroll)
+    -- translate with loss of information
+    ,(wxK_NUMPAD_SPACE , KeySpace)
+    ,(wxK_NUMPAD_TAB   , KeyTab)
+    ,(wxK_NUMPAD_ENTER , KeyReturn)
+    ,(wxK_NUMPAD_F1    , KeyF1)
+    ,(wxK_NUMPAD_F2    , KeyF2)
+    ,(wxK_NUMPAD_F3    , KeyF3)
+    ,(wxK_NUMPAD_F4    , KeyF4)
+    ,(wxK_NUMPAD_HOME  , KeyHome)
+    ,(wxK_NUMPAD_LEFT  , KeyLeft)
+    ,(wxK_NUMPAD_UP    , KeyUp)
+    ,(wxK_NUMPAD_RIGHT , KeyRight)
+    ,(wxK_NUMPAD_DOWN  , KeyDown)
+    ,(wxK_NUMPAD_PAGEUP   , KeyPageUp)
+    ,(wxK_NUMPAD_PAGEDOWN , KeyPageDown)
+    ,(wxK_NUMPAD_END      , KeyEnd)
+--            ,(wxK_NUMPAD_BEGIN    , KeyBegin)
+    ,(wxK_NUMPAD_INSERT   , KeyInsert)
+    ,(wxK_NUMPAD_DELETE   , KeyDelete)
+--            ,(wxK_NUMPAD_EQUAL    , KeyEqual)
+    ,(wxK_NUMPAD_MULTIPLY , KeyMultiply)
+    ,(wxK_NUMPAD_ADD      , KeyAdd)
+    ,(wxK_NUMPAD_SEPARATOR  , KeySeparator)
+    ,(wxK_NUMPAD_SUBTRACT   , KeySubtract)
+    ,(wxK_NUMPAD_DECIMAL    , KeyDecimal)
+    ,(wxK_NUMPAD_DIVIDE     , KeyDivide)
+    ]
+
+
+instance Show Key where
+  show k  = showKey k
+
+-- | Show a key\/modifiers combination, for example for use in menus.
+showKeyModifiers :: Key -> Modifiers -> String
+showKeyModifiers key mods
+  | null modsText = show key
+  | otherwise     = modsText ++ "+" ++ show key
+  where
+    modsText = show mods
+
+-- | Show a key for use in menus for example.
+showKey :: Key -> String
+showKey key
+  = case key of
+      KeyChar c       -> [c]
+      KeyOther code   -> "[" ++ show code ++ "]"
+      KeyBack         -> "Backspace"
+      KeyTab          -> "Tab"
+      KeyReturn       -> "Enter"
+      KeyEscape       -> "Esc"
+      KeySpace        -> "Space"
+      KeyDelete       -> "Delete"
+      KeyInsert       -> "Insert"
+      KeyEnd          -> "End"
+      KeyHome         -> "Home"
+      KeyLeft         -> "Left"
+      KeyUp           -> "Up"
+      KeyRight        -> "Right"
+      KeyDown         -> "Down"
+      KeyPageUp       -> "PgUp"
+      KeyPageDown     -> "PgDn"
+      KeyStart        -> "Start"
+      KeyClear        -> "Clear"
+      KeyShift        -> "Shift"
+      KeyAlt          -> "Alt"
+      KeyControl      -> "Ctrl"
+      KeyMenu         -> "Menu"
+      KeyPause        -> "Pause"
+      KeyCapital      -> "Capital"
+      KeyHelp         -> "Help"
+      KeySelect       -> "Select"
+      KeyPrint        -> "Print"
+      KeyExecute      -> "Execute"
+      KeySnapshot     -> "Snapshot"
+      KeyCancel       -> "Cancel"
+      KeyLeftButton   -> "Left Button"
+      KeyRightButton  -> "Right Button"
+      KeyMiddleButton -> "Middle Button"
+      KeyNum0         -> "Num 0"
+      KeyNum1         -> "Num 1"
+      KeyNum2         -> "Num 2"
+      KeyNum3         -> "Num 3"
+      KeyNum4         -> "Num 4"
+      KeyNum5         -> "Num 5"
+      KeyNum6         -> "Num 6"
+      KeyNum7         -> "Num 7"
+      KeyNum8         -> "Num 8"
+      KeyNum9         -> "Num 9"
+      KeyMultiply     -> "Num *"
+      KeyAdd          -> "Num +"
+      KeySeparator    -> "Num Separator"
+      KeySubtract     -> "Num -"
+      KeyDecimal      -> "Num ."
+      KeyDivide       -> "Num /"
+      KeyF1           -> "F1"
+      KeyF2           -> "F2"
+      KeyF3           -> "F3"
+      KeyF4           -> "F4"
+      KeyF5           -> "F5"
+      KeyF6           -> "F6"
+      KeyF7           -> "F7"
+      KeyF8           -> "F8"
+      KeyF9           -> "F9"
+      KeyF10          -> "F10"
+      KeyF11          -> "F11"
+      KeyF12          -> "F12"
+      KeyF13          -> "F13"
+      KeyF14          -> "F14"
+      KeyF15          -> "F15"
+      KeyF16          -> "F16"
+      KeyF17          -> "F17"
+      KeyF18          -> "F18"
+      KeyF19          -> "F19"
+      KeyF20          -> "F20"
+      KeyF21          -> "F21"
+      KeyF22          -> "F22"
+      KeyF23          -> "F23"
+      KeyF24          -> "F24"
+      KeyNumLock      -> "Numlock"
+      KeyScroll       -> "Scroll"
+
+{-----------------------------------------------------------------------------------------
+  Drag and Drop events
+-----------------------------------------------------------------------------------------}
+-- | Drag results
+data DragResult
+    = DragError
+    | DragNone
+    | DragCopy
+    | DragMove
+    | DragLink
+    | DragCancel
+    | DragUnknown
+   deriving (Eq,Show)
+
+dragResults :: [(Int, DragResult)]
+dragResults
+    = [(wxDRAG_ERROR   ,DragError)
+      ,(wxDRAG_NONE    ,DragNone)
+      ,(wxDRAG_COPY    ,DragCopy)
+      ,(wxDRAG_MOVE    ,DragMove)
+      ,(wxDRAG_LINK    ,DragLink)
+      ,(wxDRAG_CANCEL  ,DragCancel)]
+
+fromDragResult :: DragResult -> Int
+fromDragResult drag
+  = case drag of
+      DragError   -> wxDRAG_ERROR
+      DragNone    -> wxDRAG_NONE
+      DragCopy    -> wxDRAG_COPY
+      DragMove    -> wxDRAG_MOVE
+      DragLink    -> wxDRAG_LINK
+      DragCancel  -> wxDRAG_CANCEL
+      DragUnknown -> wxDRAG_ERROR
+
+toDragResult :: Int -> DragResult
+toDragResult drag
+ = case lookup drag dragResults of
+      Just x -> x
+      Nothing -> DragError
+
+-- | Set an event handler that is called when the drop target can be filled with data.
+-- This function require to use 'dropTargetGetData' in your event handler to fill data.
+dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()
+dropTargetOnData drop event = do
+    funPtr <- dragThreeFuncHandler event
+    wxcDropTargetSetOnData (objectCast drop) (toCFunPtr funPtr)
+
+-- | Set an event handler for an drop command in a drop target.
+dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO ()
+dropTargetOnDrop drop event = do
+    funPtr <- dragTwoFuncHandler event
+    wxcDropTargetSetOnDrop (objectCast drop) (toCFunPtr funPtr)
+
+-- | Set an event handler for an enter command in a drop target.
+dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()
+dropTargetOnEnter drop event = do
+    funPtr <- dragThreeFuncHandler event
+    wxcDropTargetSetOnEnter (objectCast drop) (toCFunPtr funPtr)
+
+-- | Set an event handler for a drag over command in a drop target.
+dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()
+dropTargetOnDragOver drop event = do
+    funPtr <- dragThreeFuncHandler event
+    wxcDropTargetSetOnDragOver (objectCast drop) (toCFunPtr funPtr)
+
+-- | Set an event handler for a leave command in a drop target.
+dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO ()
+dropTargetOnLeave drop event = do
+    funPtr <- dragZeroFuncHandler event
+    wxcDropTargetSetOnLeave (objectCast drop) (toCFunPtr funPtr)
+
+dragZeroFuncHandler event =
+    dragZeroFunc $ \obj -> do
+    event
+
+dragTwoFuncHandler event =
+    dragTwoFunc $ \obj x y -> do
+    result <- event (point (fromIntegral x) (fromIntegral y))
+    return $ fromBool result
+
+dragThreeFuncHandler event =
+    dragThreeFunc $ \obj x y pre -> do
+    result <- event (point (fromIntegral x) (fromIntegral y)) (toDragResult $ fromIntegral pre)
+    return $ fromIntegral $ fromDragResult result
+
+-- | Set an event handler for a drag & drop command between drag source window and drop
+-- target. You must set 'dropTarget' before use this action.
+-- And If you use 'fileDropTarget' or 'textDropTarget', you need not use this.
+dragAndDrop :: DropSource a -> DragMode -> (DragResult -> IO ()) -> IO ()
+dragAndDrop drSrc flag event = do
+    result <- dropSourceDoDragDrop drSrc (fromDragMode flag)
+    case lookup result dragResults of
+      Just x -> event x
+      Nothing -> return ()
+
+-- | Set an event handler that is called when text is dropped in target window.
+textDropTarget :: Window a -> TextDataObject b -> (Point -> String -> IO ()) -> IO ()
+textDropTarget window textData event = do
+    funPtr <- dropTextHandler event
+    textDrop <- wxcTextDropTargetCreate nullPtr (toCFunPtr funPtr)
+    dropTargetSetDataObject textDrop textData
+    windowSetDropTarget window textDrop
+
+dropTextHandler event =
+    wrapTextDropHandler $ \obj x y cstr -> do
+    str <- peekCWString cstr
+    event (point (fromIntegral x) (fromIntegral y)) str
+
+-- | Set an event handler that is called when files are dropped in target window.
+fileDropTarget :: Window a -> (Point -> [String] -> IO ()) -> IO ()
+fileDropTarget window event = do
+    funPtr <- dropFileHandler event
+    fileDrop <- wxcFileDropTargetCreate nullPtr (toCFunPtr funPtr)
+    windowSetDropTarget window fileDrop
+
+dropFileHandler event =
+    wrapFileDropHandler $ \obj x y carr size -> do
+    arr <- peekArray (fromIntegral size) carr
+    files <- mapM peekCWString arr
+    event (point (fromIntegral x) (fromIntegral y)) files
+
+data DragMode = CopyOnly | AllowMove | Default
+              deriving (Eq,Show)
+              -- deriving (Eq,Show,Read,Typeable)
+
+fromDragMode :: DragMode -> Int
+fromDragMode mode
+  = case mode of
+      CopyOnly  -> wxDRAG_COPYONLY
+      AllowMove -> wxDRAG_ALLOWMOVE
+      Default   -> wxDRAG_DEFALUTMOVE
+
+foreign import ccall "wrapper" dragZeroFunc :: (Ptr obj -> IO ()) -> IO (FunPtr (Ptr obj -> IO ()))
+foreign import ccall "wrapper" dragTwoFunc :: (Ptr obj -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> IO CInt))
+foreign import ccall "wrapper" dragThreeFunc :: (Ptr obj -> CInt -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> CInt -> IO CInt))
+foreign import ccall "wrapper" wrapTextDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()))
+foreign import ccall "wrapper" wrapFileDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()))
+
+{-----------------------------------------------------------------------------------------
+  Grid events
+-----------------------------------------------------------------------------------------}
+type Column     = Int
+type Row        = Int
+
+-- | Grid events. 
+data EventGrid  = GridCellMouse        !Row !Column !EventMouse
+                | GridLabelMouse       !Row !Column !EventMouse
+                | GridCellChange       !Row !Column !(IO ())
+                | GridCellSelect       !Row !Column !(IO ())
+                | GridCellDeSelect     !Row !Column !(IO ())
+                | GridEditorHidden     !Row !Column !(IO ())
+                | GridEditorShown      !Row !Column !(IO ())
+                | GridEditorCreated    !Row !Column (IO (Control ())) 
+                | GridColSize          !Column !Point !Modifiers (IO ())
+                | GridRowSize          !Row !Point !Modifiers (IO ())
+                | GridRangeSelect      !Row !Column !Row !Column !Rect !Modifiers !(IO ())
+                | GridRangeDeSelect    !Row !Column !Row !Column !Rect !Modifiers !(IO ())
+                | GridUnknown          !Row !Column !Int
+
+fromGridEvent :: GridEvent a -> IO EventGrid
+fromGridEvent gridEvent
+  = do tp  <- eventGetEventType gridEvent
+       row <- gridEventGetRow gridEvent
+       col <- gridEventGetCol gridEvent
+       case lookup tp gridEvents of
+         Just make  -> make gridEvent row col 
+         Nothing    -> return (GridUnknown row col tp)
+
+gridEvents :: [(Int, GridEvent a -> Int -> Int -> IO EventGrid)]
+gridEvents
+  = [(wxEVT_GRID_CELL_LEFT_CLICK,    gridMouse GridCellMouse MouseLeftDown)
+    ,(wxEVT_GRID_CELL_LEFT_DCLICK,   gridMouse GridCellMouse MouseLeftDClick)
+    ,(wxEVT_GRID_CELL_RIGHT_CLICK,   gridMouse GridCellMouse MouseRightDown)
+    ,(wxEVT_GRID_CELL_RIGHT_DCLICK,  gridMouse GridCellMouse MouseRightDClick)
+    ,(wxEVT_GRID_LABEL_LEFT_CLICK,   gridMouse GridLabelMouse MouseLeftDown)
+    ,(wxEVT_GRID_LABEL_LEFT_DCLICK,  gridMouse GridLabelMouse MouseLeftDClick)
+    ,(wxEVT_GRID_LABEL_RIGHT_CLICK,  gridMouse GridLabelMouse MouseRightDown)
+    ,(wxEVT_GRID_LABEL_RIGHT_DCLICK, gridMouse GridLabelMouse MouseRightDClick)
+    ,(wxEVT_GRID_SELECT_CELL,        gridSelect)
+    ,(wxEVT_GRID_EDITOR_SHOWN,       gridVeto GridEditorShown)
+    ,(wxEVT_GRID_EDITOR_HIDDEN,      gridVeto GridEditorHidden)
+    ]
+  where
+    gridMouse make makeMouse gridEvent row col
+      = do pt          <- gridEventGetPosition gridEvent
+           altDown     <- gridEventAltDown gridEvent
+           controlDown <- gridEventControlDown gridEvent
+           shiftDown   <- gridEventShiftDown gridEvent
+           metaDown    <- gridEventMetaDown gridEvent
+           let modifiers = Modifiers altDown shiftDown controlDown metaDown
+           return (make row col (makeMouse pt modifiers))
+
+    gridVeto make gridEvent row col
+      = return (make row col (notifyEventVeto gridEvent))
+
+    gridSelect gridEvent row col
+      = do selecting <- gridEventSelecting gridEvent
+           if selecting
+            then return (GridCellSelect row col (notifyEventVeto gridEvent))
+            else return (GridCellDeSelect row col (notifyEventVeto gridEvent))
+
+
+
+
+-- | Set a grid event handler.
+gridOnGridEvent :: Grid a -> (EventGrid -> IO ()) -> IO ()
+gridOnGridEvent grid eventHandler
+  = windowOnEvent grid (map fst gridEvents) eventHandler gridHandler
+  where
+    gridHandler event
+      = do eventGrid <- fromGridEvent (objectCast event)
+           eventHandler eventGrid
+
+-- | Get the current grid event handler of a window.
+gridGetOnGridEvent :: Grid a -> IO (EventGrid -> IO ())
+gridGetOnGridEvent grid
+  = unsafeWindowGetHandlerState grid wxEVT_GRID_CELL_CHANGED (\event -> skipCurrentEvent)
+
+
+{-----------------------------------------------------------------------------------------
+  TreeCtrl events
+-----------------------------------------------------------------------------------------}
+-- | Tree control events
+data EventTree  = TreeBeginRDrag      TreeItem  !Point  (IO ()) -- ^ Drag with right button. Call @IO@ action to continue dragging.
+                | TreeBeginDrag       TreeItem  !Point  (IO ())
+                | TreeEndDrag         TreeItem  !Point
+                | TreeBeginLabelEdit  TreeItem  String  (IO ())     -- ^ Edit a label. Call @IO@ argument to disallow the edit.
+                | TreeEndLabelEdit    TreeItem  String Bool  (IO ()) -- ^ End edit. @Bool@ is 'True' when the edit was cancelled. Call the @IO@ argument to veto the action.
+                | TreeDeleteItem      TreeItem  
+                | TreeItemActivated   TreeItem  
+                | TreeItemCollapsed   TreeItem  
+                | TreeItemCollapsing  TreeItem  (IO ())          -- ^ Call the @IO@ argument to veto.       
+                | TreeItemExpanding   TreeItem  (IO ())          -- ^ Call the @IO@ argument to veto.
+                | TreeItemExpanded    TreeItem  
+                | TreeItemRightClick  TreeItem  
+                | TreeItemMiddleClick TreeItem  
+                | TreeSelChanged      TreeItem  TreeItem  
+                | TreeSelChanging     TreeItem  TreeItem  (IO ()) -- ^ Call the @IO@ argument to veto.
+                | TreeKeyDown         TreeItem  EventKey
+                | TreeUnknown
+
+fromTreeEvent :: TreeEvent a -> IO EventTree
+fromTreeEvent treeEvent
+  = do tp   <- eventGetEventType treeEvent
+       item <- treeEventGetItem treeEvent
+       case lookup tp treeEvents of
+         Just make   -> make treeEvent item
+         Nothing     -> return TreeUnknown
+        
+treeEvents :: [(Int,TreeEvent a -> TreeItem -> IO EventTree)]
+treeEvents 
+  = [(wxEVT_COMMAND_TREE_DELETE_ITEM,       fromItemEvent TreeDeleteItem)
+    ,(wxEVT_COMMAND_TREE_ITEM_ACTIVATED,    fromItemEvent TreeItemActivated)
+    ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSED,    fromItemEvent TreeItemCollapsed)
+    ,(wxEVT_COMMAND_TREE_ITEM_EXPANDED,     fromItemEvent TreeItemExpanded)
+    ,(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK,  fromItemEvent TreeItemRightClick)
+    ,(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, fromItemEvent TreeItemMiddleClick)
+    ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSING,   withVeto (fromItemEvent TreeItemCollapsing))
+    ,(wxEVT_COMMAND_TREE_ITEM_EXPANDING,    withVeto (fromItemEvent TreeItemExpanding))
+    ,(wxEVT_COMMAND_TREE_KEY_DOWN,          fromKeyDownEvent )
+    ,(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT,  fromBeginLabelEditEvent )
+    ,(wxEVT_COMMAND_TREE_END_LABEL_EDIT,    fromEndLabelEditEvent )
+    ,(wxEVT_COMMAND_TREE_BEGIN_DRAG,        withAllow (fromDragEvent TreeBeginDrag))
+    ,(wxEVT_COMMAND_TREE_BEGIN_RDRAG,       withAllow (fromDragEvent TreeBeginRDrag))
+    ,(wxEVT_COMMAND_TREE_END_DRAG,          fromDragEvent TreeEndDrag)
+    ,(wxEVT_COMMAND_TREE_SEL_CHANGED,       fromChangeEvent TreeSelChanged)
+    ,(wxEVT_COMMAND_TREE_SEL_CHANGING,      withVeto (fromChangeEvent TreeSelChanging))
+    ]
+  where
+    fromKeyDownEvent treeEvent item
+      = do keyEvent <- treeEventGetKeyEvent treeEvent
+           eventKey <- eventKeyFromEvent keyEvent
+           return (TreeKeyDown item eventKey)
+
+    fromBeginLabelEditEvent treeEvent item
+      = do lab <- treeEventGetLabel treeEvent
+           return (TreeBeginLabelEdit item lab (notifyEventVeto treeEvent))
+                  
+    fromEndLabelEditEvent treeEvent item
+      = do lab <- treeEventGetLabel treeEvent
+           can <- treeEventIsEditCancelled treeEvent
+           return (TreeEndLabelEdit item lab can (notifyEventVeto treeEvent))
+
+    fromDragEvent make treeEvent item
+      = do pt <- treeEventGetPoint treeEvent
+           return (make item pt)
+
+    fromChangeEvent make treeEvent item
+      = do olditem <- treeEventGetOldItem treeEvent
+           return (make item olditem)
+    
+    withAllow make treeEvent item
+      = do f <- make treeEvent item
+           return (f (treeEventAllow treeEvent))
+
+    withVeto make treeEvent item
+      = do f <- make treeEvent item
+           return (f (notifyEventVeto treeEvent))
+
+    fromItemEvent make treeEvent item
+      = return (make item)
+
+
+
+-- | Set a tree event handler.
+treeCtrlOnTreeEvent :: TreeCtrl a -> (EventTree -> IO ()) -> IO ()
+treeCtrlOnTreeEvent treeCtrl eventHandler
+  = windowOnEvent treeCtrl (map fst treeEvents) eventHandler treeHandler
+  where
+    treeHandler event
+      = do eventTree <- fromTreeEvent (objectCast event)
+           eventHandler eventTree
+
+-- | Get the current tree event handler of a window.
+treeCtrlGetOnTreeEvent :: TreeCtrl a -> IO (EventTree -> IO ())
+treeCtrlGetOnTreeEvent treeCtrl
+  = unsafeWindowGetHandlerState treeCtrl wxEVT_COMMAND_TREE_ITEM_ACTIVATED (\event -> skipCurrentEvent)
+
+
+{-----------------------------------------------------------------------------------------
+  ListCtrl events
+-----------------------------------------------------------------------------------------}
+-- | Type synonym for documentation purposes.
+type ListIndex  = Int
+
+-- | List control events.
+data EventList  = ListBeginDrag       !ListIndex !Point (IO ()) -- ^ Drag with left mouse button. Call @IO@ argument to veto this action.
+                | ListBeginRDrag      !ListIndex !Point (IO ()) -- ^ Drag with right mouse button. @IO@ argument to veto this action.
+                | ListBeginLabelEdit  !ListIndex (IO ())        -- ^ Edit label. Call @IO@ argument to veto this action.
+                | ListEndLabelEdit    !ListIndex !Bool (IO ())  -- ^ End editing label. @Bool@ argument is 'True' when cancelled. Call @IO@ argument to veto this action.
+                | ListDeleteItem      !ListIndex
+                | ListDeleteAllItems
+                | ListItemSelected    !ListIndex 
+                | ListItemDeselected  !ListIndex 
+                | ListItemActivated   !ListIndex        -- ^ Activate (ENTER or double click)  
+                | ListItemFocused     !ListIndex 
+                | ListItemMiddleClick !ListIndex 
+                | ListItemRightClick  !ListIndex   
+                | ListInsertItem      !ListIndex   
+                | ListColClick        !Int              -- ^ Column has been clicked. (-1 when clicked in control header outside any column)
+                | ListColRightClick   !Int                
+                | ListColBeginDrag    !Int (IO ())      -- ^ Column is dragged. Index is of the column left of the divider that is being dragged. Call @IO@ argument to veto this action.
+                | ListColDragging     !Int
+                | ListColEndDrag      !Int (IO ())      -- ^ Column has been dragged. Call @IO@ argument to veto this action.
+                | ListKeyDown         !Key              
+                | ListCacheHint       !Int !Int         -- ^ (Inclusive) range of list items that are advised to be cached.
+                | ListUnknown
+
+
+fromListEvent :: ListEvent a -> IO EventList
+fromListEvent listEvent
+  = do tp <- eventGetEventType listEvent
+       case lookup tp listEvents of
+         Just f  -> f listEvent 
+         Nothing -> return ListUnknown
+
+listEvents :: [(Int, ListEvent a -> IO EventList)]
+listEvents
+  = [(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT,  withVeto $ withItem ListBeginLabelEdit)
+    ,(wxEVT_COMMAND_LIST_DELETE_ITEM,       withItem ListDeleteItem)
+    ,(wxEVT_COMMAND_LIST_INSERT_ITEM,       withItem ListInsertItem)
+    ,(wxEVT_COMMAND_LIST_ITEM_ACTIVATED,    withItem ListItemActivated)
+    ,(wxEVT_COMMAND_LIST_ITEM_DESELECTED,   withItem ListItemDeselected)
+    ,(wxEVT_COMMAND_LIST_ITEM_FOCUSED,      withItem ListItemFocused)
+    ,(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ,withItem ListItemMiddleClick)
+    ,(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK,  withItem ListItemRightClick)
+    ,(wxEVT_COMMAND_LIST_ITEM_SELECTED,     withItem ListItemSelected)
+    ,(wxEVT_COMMAND_LIST_END_LABEL_EDIT,    withVeto $ withCancel $ withItem ListEndLabelEdit )
+    ,(wxEVT_COMMAND_LIST_BEGIN_RDRAG,       withVeto $ withPoint $ withItem ListBeginRDrag)
+    ,(wxEVT_COMMAND_LIST_BEGIN_DRAG,        withVeto $ withPoint $ withItem ListBeginDrag)
+    ,(wxEVT_COMMAND_LIST_COL_CLICK,         withColumn ListColClick)
+    ,(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG,    withVeto $ withColumn ListColBeginDrag)
+    ,(wxEVT_COMMAND_LIST_COL_DRAGGING,      withColumn ListColDragging)
+    ,(wxEVT_COMMAND_LIST_COL_END_DRAG,      withVeto $ withColumn ListColEndDrag)
+    ,(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK,   withColumn ListColRightClick)
+    ,(wxEVT_COMMAND_LIST_CACHE_HINT,        withCache  ListCacheHint )
+    ,(wxEVT_COMMAND_LIST_KEY_DOWN,          withKeyCode ListKeyDown )
+    ,(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS,  \event -> return ListDeleteAllItems )
+    ]
+  where
+    withPoint make listEvent
+      = do f   <- make listEvent
+           pt  <- listEventGetPoint listEvent
+           return (f pt)
+
+    withCancel make listEvent
+      = do f   <- make listEvent
+           can <- listEventCancelled listEvent
+           return (f can)
+
+    withVeto :: (ListEvent a -> IO (IO () -> EventList)) -> ListEvent a -> IO EventList
+    withVeto make listEvent
+      = do f <- make listEvent
+           return (f (notifyEventVeto listEvent))
+
+    withKeyCode make listEvent
+      = do code <- listEventGetCode listEvent
+           return (make (keyCodeToKey code))
+
+    withCache make listEvent
+      = do lo <- listEventGetCacheFrom listEvent
+           hi <- listEventGetCacheTo listEvent
+           return (make lo hi)
+                
+    withColumn make listEvent
+      = do col <- listEventGetColumn listEvent
+           return (make col)
+
+    withItem :: (ListIndex -> b) -> ListEvent a -> IO b
+    withItem make listEvent
+      = do item <- listEventGetIndex listEvent
+           return (make item)
+
+         
+
+-- | Set a list event handler.
+listCtrlOnListEvent :: ListCtrl a -> (EventList -> IO ()) -> IO ()
+listCtrlOnListEvent listCtrl eventHandler
+  = windowOnEvent listCtrl (map fst listEvents) eventHandler listHandler
+  where
+    listHandler event
+      = do eventList <- fromListEvent (objectCast event)
+           eventHandler eventList
+
+-- | Get the current list event handler of a window.
+listCtrlGetOnListEvent :: ListCtrl a -> IO (EventList -> IO ())
+listCtrlGetOnListEvent listCtrl
+  = unsafeWindowGetHandlerState listCtrl wxEVT_COMMAND_LIST_ITEM_ACTIVATED (\event -> skipCurrentEvent)
+
+
+------------------------------------------------------------------------------------------
+-- TaskBarIcon Events
+------------------------------------------------------------------------------------------
+data EventTaskBarIcon = TaskBarIconMove
+                      | TaskBarIconLeftDown
+                      | TaskBarIconLeftUp
+                      | TaskBarIconRightDown
+                      | TaskBarIconRightUp
+                      | TaskBarIconLeftDClick
+                      | TaskBarIconRightDClick
+                      | TaskBarIconUnknown
+                      deriving (Show, Eq)
+
+fromTaskBarIconEvent :: Event a -> IO EventTaskBarIcon
+fromTaskBarIconEvent event
+  = do tp     <- eventGetEventType event
+       case lookup tp taskBarIconEvents of
+         Just evt  -> return evt
+         Nothing   -> return TaskBarIconUnknown
+
+taskBarIconEvents :: [(Int,EventTaskBarIcon)]
+taskBarIconEvents
+  = [(wxEVT_TASKBAR_MOVE,         TaskBarIconMove)
+    ,(wxEVT_TASKBAR_LEFT_DOWN,    TaskBarIconLeftDown)
+    ,(wxEVT_TASKBAR_LEFT_UP,      TaskBarIconLeftUp)
+    ,(wxEVT_TASKBAR_RIGHT_DOWN,   TaskBarIconRightDown)
+    ,(wxEVT_TASKBAR_RIGHT_UP,     TaskBarIconRightUp)
+    ,(wxEVT_TASKBAR_LEFT_DCLICK,  TaskBarIconLeftDClick)
+    ,(wxEVT_TASKBAR_RIGHT_DCLICK, TaskBarIconRightDClick)
+    ]
+
+-- | Set a taskbar icon event handler.
+evtHandlerOnTaskBarIconEvent :: TaskBarIcon a -> (EventTaskBarIcon -> IO ()) -> IO ()
+evtHandlerOnTaskBarIconEvent taskbar eventHandler
+  = evtHandlerOnEvent taskbar idAny idAny (map fst taskBarIconEvents) eventHandler
+       -- finalize taskBarIcon's resource on Windows.
+       (\_ -> if wxToolkit == WxMSW
+              then (taskBarIconRemoveIcon taskbar
+                   -- But taskBarIconDelete doesn't work well in this part. I don't know why.
+                   -- >> taskBarIconDelete taskbar
+                   >> return ())
+              else (return ()))
+       scrollHandler
+  where
+    scrollHandler event
+      = do eventTaskBar <- fromTaskBarIconEvent event
+           eventHandler eventTaskBar
+
+-- | Get the current event handler for a taskbar icon.
+evtHandlerGetOnTaskBarIconEvent :: EvtHandler a -> Id -> EventTaskBarIcon -> IO (IO ())
+evtHandlerGetOnTaskBarIconEvent window id evt
+  = unsafeGetHandlerState window id
+      (fromMaybe wxEVT_TASKBAR_MOVE
+          $ lookup evt $ uncurry (flip zip) . unzip $ taskBarIconEvents)
+      skipCurrentEvent
+
+
+{-----------------------------------------------------------------------------------------
+  PropertyGrid events
+-----------------------------------------------------------------------------------------}
+-- | PropertyGrid control events.
+data EventPropertyGrid  
+                = PropertyGridHighlighted (Maybe (PGProperty ()))
+                | PropertyGridChanged (PGProperty ())
+                | PropertyGridUnknown
+
+fromPropertyGridEvent :: PropertyGridEvent a -> IO EventPropertyGrid
+fromPropertyGridEvent propertyGridEvent
+  = do tp <- eventGetEventType propertyGridEvent
+       case lookup tp propertyGridEvents of
+         Just f  -> f propertyGridEvent 
+         Nothing -> return PropertyGridUnknown
+
+propertyGridEvents :: [(Int, PropertyGridEvent a -> IO EventPropertyGrid)]
+propertyGridEvents
+  = [(wxEVT_PG_HIGHLIGHTED, withPGProperty PropertyGridHighlighted),
+     (wxEVT_PG_CHANGED, withPGProperty (PropertyGridChanged . fromJust))
+    ]
+  where
+    withPGProperty :: (Maybe((PGProperty ())) -> b) -> PropertyGridEvent a -> IO b
+    withPGProperty make propertyGridEvent = do
+        hasProp <- propertyGridEventHasProperty propertyGridEvent
+        if not hasProp then return (make Nothing) else do
+            prop <- propertyGridEventGetProperty propertyGridEvent
+            return (make (Just prop))
+
+-- | Set a PropertyGrid event handler.
+propertyGridOnPropertyGridEvent :: PropertyGrid a -> (EventPropertyGrid -> IO ()) -> IO ()
+propertyGridOnPropertyGridEvent propertyGrid eventHandler
+  = windowOnEvent propertyGrid (map fst propertyGridEvents) eventHandler listHandler
+  where
+    listHandler event
+      = do eventPropertyGrid <- fromPropertyGridEvent (objectCast event)
+           eventHandler eventPropertyGrid
+
+-- | Get the current PropertyGrid event handler of a window.
+propertyGridGetOnPropertyGridEvent :: PropertyGrid a -> IO (EventPropertyGrid -> IO ())
+propertyGridGetOnPropertyGridEvent propertyGrid
+  -- I'm not sure what expEVT_PG_HIGHLIGHTED needs to be here for, just followed pattern with `listCtrlGetOnListEvent'
+  = unsafeWindowGetHandlerState propertyGrid wxEVT_PG_HIGHLIGHTED (\event -> skipCurrentEvent)
+
+
+
+------------------------------------------------------------------------------------------
+-- TimerEx is handled specially.
+------------------------------------------------------------------------------------------
+-- | Create a new 'Timer' that is attached to a window. It is automatically deleted when
+-- its owner is deleted (using 'windowAddOnDelete'). The owning window will receive
+-- timer events ('windowOnTimer'). /Broken!/ (use 'windowTimerCreate'\/'timerOnCommand' instead.)
+windowTimerAttach :: Window a -> IO (Timer ())
+windowTimerAttach w
+  = do t <- timerCreate w idAny
+       windowAddOnDelete w (timerDelete t)
+       return t
+
+
+-- | Create a new 'TimerEx' timer. It is automatically deleted when its owner is deleted
+-- (using 'windowAddOnDelete'). React to timer events using 'timerOnCommand'.
+windowTimerCreate :: Window a -> IO (TimerEx ())
+windowTimerCreate w
+  = do t <- timerExCreate
+       windowAddOnDelete w (timerDelete t)
+       return t
+
+-- | Set an event handler that is called on a timer tick. This works for 'TimerEx'
+-- objects.
+timerOnCommand :: TimerEx a -> IO () -> IO ()
+timerOnCommand timer io
+  = do closure <- createClosure io (\ownerDeleted -> return ()) (\ev -> io)
+       timerExConnect timer closure
+
+-- | Get the current timer event handler.
+timerGetOnCommand :: TimerEx a -> IO (IO ())
+timerGetOnCommand timer
+  = do closure <- timerExGetClosure timer
+       unsafeClosureGetState closure (return ())
+
+{--------------------------------------------------------------------------
+  The global idle timer
+  Currently only used by the process code but can potentially be used to
+  enable haskell threads to run in idle time
+--------------------------------------------------------------------------}
+{-# NOINLINE appIdleIntervals #-}
+appIdleIntervals :: Var [Int]
+appIdleIntervals 
+  = unsafePerformIO (varCreate [])
+
+-- | @appRegisterIdle interval handler@ registers a global idle event 
+-- handler that is at least called every @interval@ milliseconds (and
+-- possible more). Returns a method that can be used to unregister this
+-- handler (so that it doesn't take any resources anymore). Multiple
+-- calls to this method chains the different idle event handlers.
+appRegisterIdle :: Int -> IO (IO ())
+appRegisterIdle interval 
+  = do varUpdate appIdleIntervals (interval:)
+       appUpdateIdleInterval 
+       return (appUnregisterIdle interval)
+
+-- Update the idle interval to the minimal one.
+appUpdateIdleInterval
+  = do ivals <- varGet appIdleIntervals
+       let ival = if null ivals then 0 else minimum ivals   -- zero is off.
+       appival <- wxcAppGetIdleInterval 
+       if (ival < appival)
+        then wxcAppSetIdleInterval ival
+        else return ()
+
+-- Unregister an idle handler       
+appUnregisterIdle :: Int -> IO ()            
+appUnregisterIdle ival
+  = do varUpdate appIdleIntervals (remove ival)
+       appUpdateIdleInterval
+  where
+    remove ival []       = [] -- very wrong!
+    remove ival (i:is)   | ival == i  = is
+                         | otherwise  = i : remove ival is
+
+
+{-----------------------------------------------------------------------------------------
+  Calender events
+-----------------------------------------------------------------------------------------}
+data EventCalendar
+    = CalendarDayChanged (DateTime ())
+    | CalendarDoubleClicked (DateTime ())
+    | CalendarMonthChanged (DateTime ())
+    | CalendarSelectionChanged (DateTime ())
+    | CalendarWeekdayClicked Int
+    | CalendarYearChanged (DateTime ())
+    | CalendarUnknown
+ 
+fromCalendarEvent :: CalendarEvent a -> IO EventCalendar
+fromCalendarEvent calEvent
+    = do tp <- eventGetEventType calEvent
+         case lookup tp calEvents of
+           Just f  -> f calEvent
+           Nothing -> return CalendarUnknown
+ 
+calEvents :: [(Int, CalendarEvent a -> IO EventCalendar)]
+calEvents
+    = [(wxEVT_CALENDAR_DAY_CHANGED    ,withDate CalendarDayChanged)
+      ,(wxEVT_CALENDAR_DOUBLECLICKED  ,withDate CalendarDoubleClicked)
+      ,(wxEVT_CALENDAR_MONTH_CHANGED  ,withDate CalendarMonthChanged)
+      ,(wxEVT_CALENDAR_SEL_CHANGED    ,withDate CalendarSelectionChanged)
+      ,(wxEVT_CALENDAR_WEEKDAY_CLICKED,withWeekday CalendarWeekdayClicked)
+      ,(wxEVT_CALENDAR_YEAR_CHANGED   ,withDate CalendarYearChanged)]
+    where withDate event calEvent
+              = do date <- dateTimeCreate
+                   withObjectPtr date $ calendarEventGetDate calEvent
+                   return (event date)
+          withWeekday event calEvent
+              = fmap event $ calendarEventGetWeekDay calEvent
+ 
+-- | Set a calendar event handler.
+calendarCtrlOnCalEvent :: CalendarCtrl a -> (EventCalendar -> IO ()) -> IO ()
+calendarCtrlOnCalEvent calCtrl eventHandler
+  = windowOnEvent calCtrl (map fst calEvents) eventHandler calHandler
+  where
+    calHandler event
+      = do eventCalendar <- fromCalendarEvent (objectCast event)
+           eventHandler eventCalendar
+ 
+-- | Get the current calendar event handler of a window.
+calendarCtrlGetOnCalEvent :: CalendarCtrl a -> IO (EventCalendar -> IO ())
+calendarCtrlGetOnCalEvent calCtrl
+  = unsafeWindowGetHandlerState calCtrl wxEVT_CALENDAR_SEL_CHANGED (\event -> skipCurrentEvent)
+
+
+------------------------------------------------------------------------------------------
+-- Application startup
+------------------------------------------------------------------------------------------
+-- | Installs an init handler and starts the event loop.
+-- Note: the closure is deleted when initialization is complete, and than the Haskell init function
+-- is started.
+appOnInit :: IO () -> IO ()
+appOnInit init
+  = do closure  <- createClosure (return () :: IO ()) onDelete (\ev -> return ())   -- run init on destroy !
+       progName <- getProgName
+       args     <- getArgs
+       argv     <- mapM newCWString (progName:args)
+       let argc = length argv
+       withArray (argv ++ [nullPtr]) $ \cargv -> wxcAppInitializeC closure argc cargv
+       mapM_ free argv
+  where
+    onDelete ownerDeleted
+      = init
+           
+
+
+------------------------------------------------------------------------------------------
+-- Attaching Haskell data to arbitrary objects.
+------------------------------------------------------------------------------------------
+-- | Use attached Haskell data locally. This makes it type-safe.
+objectWithClientData :: WxObject a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c
+objectWithClientData object initx fun
+  = do let setter x = objectSetClientData object (return ()) x
+           getter   = do mb <- unsafeObjectGetClientData object
+                         case mb of
+                           Nothing -> return initx
+                           Just x  -> return x
+       setter initx
+       fun setter getter
+
+-- | Attach Haskell value to an arbitrary object. The 'IO' action is executed
+-- when the object is deleted. Note: 'evtHandlerSetClientData' is preferred when possible.
+objectSetClientData :: WxObject a -> IO () -> b -> IO ()
+objectSetClientData object onDelete x
+  = do closure <- createClosure x (const onDelete) (const (return ()))
+       objectSetClientClosure object closure
+       return ()
+
+-- | Retrieve an attached Haskell value.
+unsafeObjectGetClientData :: WxObject a -> IO (Maybe b)
+unsafeObjectGetClientData object
+  = do closure <- objectGetClientClosure object 
+       unsafeClosureGetData closure
+                
+-- | Use attached Haskell data locally in a type-safe way.
+evtHandlerWithClientData :: EvtHandler a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c
+evtHandlerWithClientData evtHandler initx fun
+  = do let setter x = evtHandlerSetClientData evtHandler (return ()) x
+           getter   = do mb <- unsafeEvtHandlerGetClientData evtHandler
+                         case mb of
+                           Nothing -> return initx
+                           Just x  -> return x
+       setter initx
+       fun setter getter
+
+-- | Attach a Haskell value to an object derived from 'EvtHandler'. The 'IO' action
+-- executed when the object is deleted.
+evtHandlerSetClientData :: EvtHandler a -> IO () -> b -> IO ()
+evtHandlerSetClientData evtHandler onDelete x
+  = do closure <- createClosure x (const onDelete) (const (return ()))
+       evtHandlerSetClientClosure evtHandler closure
+       return ()
+
+-- | Retrieve an attached Haskell value, previously attached with 'evtHandlerSetClientData'.
+unsafeEvtHandlerGetClientData :: EvtHandler a -> IO (Maybe b)
+unsafeEvtHandlerGetClientData evtHandler
+  = do closure <- evtHandlerGetClientClosure evtHandler
+       unsafeClosureGetData closure
+
+
+
+-- | Attach a Haskell value to tree item data. The 'IO' action
+-- executed when the object is deleted.
+treeCtrlSetItemClientData :: TreeCtrl a -> TreeItem -> IO () -> b -> IO ()
+treeCtrlSetItemClientData treeCtrl item onDelete x
+  = do closure <- createClosure x (const onDelete) (const (return ()))
+       treeCtrlSetItemClientClosure treeCtrl item closure
+       return ()
+
+-- | Retrieve an attached Haskell value to a tree item, previously attached with 'treeCtrlSetItemClientData'.
+unsafeTreeCtrlGetItemClientData :: TreeCtrl a -> TreeItem  -> IO (Maybe b)
+unsafeTreeCtrlGetItemClientData treeCtrl item
+  = do closure <- treeCtrlGetItemClientClosure treeCtrl item
+       unsafeClosureGetData closure
+
+
+------------------------------------------------------------------------------------------
+-- Generic window connection
+------------------------------------------------------------------------------------------
+-- | Set a generic event handler on a certain window.
+windowOnEvent :: Window a -> [EventId] -> handler -> (Event () -> IO ()) -> IO ()
+windowOnEvent window eventIds state eventHandler
+  = windowOnEventEx window eventIds state (\ownerDelete -> return ()) eventHandler
+
+-- | Set a generic event handler on a certain window. Takes also a computation
+-- that is run when the event handler is destroyed -- the argument is 'True' if the
+-- owner is deleted, and 'False' if the event handler is disconnected for example.
+windowOnEventEx :: Window a -> [EventId] -> handler -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()
+windowOnEventEx window eventIds state destroy eventHandler
+  = do let id = idAny   -- id <- windowGetId window
+       evtHandlerOnEvent window id id eventIds state destroy eventHandler
+
+-- | Retrieve the event handler state for a certain event on a window.
+unsafeWindowGetHandlerState :: Window a -> EventId -> b -> IO b
+unsafeWindowGetHandlerState window eventId def
+  = do id <- windowGetId window
+       unsafeGetHandlerState window id eventId def
+
+------------------------------------------------------------------------------------------
+-- The current event
+------------------------------------------------------------------------------------------
+{-# NOINLINE currentEvent #-}
+currentEvent :: MVar (Event ())
+currentEvent
+  = unsafePerformIO (newMVar objectNull)
+
+-- | Get the current event handler (can be 'objectNull').
+getCurrentEvent :: IO (Event ())
+getCurrentEvent
+  = readMVar currentEvent
+
+-- | Do something with the current event /if/ we are calling from an event handler.
+withCurrentEvent :: (Event () -> IO ()) -> IO ()
+withCurrentEvent f
+  = do ev <- getCurrentEvent
+       if (ev /= objectNull)
+        then f ev
+        else return ()
+
+-- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.
+-- Always call this method when you do not process the event. /Note:/ The use of
+-- 'propagateEvent' is encouraged as it is a much better name than 'skipCurrentEvent'. This
+-- function name is just for better compatibility with wxWidgets :-)
+skipCurrentEvent :: IO ()
+skipCurrentEvent
+  = withCurrentEvent (\event -> eventSkip event)
+
+-- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.
+-- Always call this method when you do not process the event. (This function just call 'skipCurrentEvent').
+propagateEvent :: IO ()
+propagateEvent
+  = skipCurrentEvent
+
+
+------------------------------------------------------------------------------------------
+-- Generic event connection
+------------------------------------------------------------------------------------------
+-- | Retrievs the state associated with a certain event handler. If
+-- no event handler is defined for this kind of event or 'Id', the
+-- default value is returned.
+unsafeGetHandlerState :: EvtHandler a -> Id -> EventId -> b -> IO b
+unsafeGetHandlerState object id eventId def
+  = do closure <- evtHandlerGetClosure object id eventId
+       unsafeClosureGetState closure def
+
+-- | Type synonym to make the type signatures shorter for the documentation :-)
+type OnEvent = (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()
+
+-- | Sets a generic event handler, just as 'evtHandlerOnEventConnect' but first
+-- disconnects any event handlers for the same kind of events.
+evtHandlerOnEvent :: EvtHandler a -> Id -> Id -> [EventId] -> handler -> OnEvent
+evtHandlerOnEvent object firstId lastId eventIds state destroy eventHandler
+  = do evtHandlerOnEventDisconnect object firstId lastId eventIds
+       evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler
+
+
+-- Hack: using a global variable to determine whether we are disconnecting an event
+-- or not. This is used as a parameter to the 'destroy' procedure of an event. This
+-- enables us to re-install a 'windowOnDelete' handler for example without executing
+-- the deletion code.
+{-# NOINLINE disconnecting #-}
+disconnecting :: Var Bool
+disconnecting
+  = unsafePerformIO (varCreate False)
+
+-- | Disconnect a certain event handler.
+evtHandlerOnEventDisconnect :: EvtHandler a -> Id -> Id -> [EventId] -> IO ()
+evtHandlerOnEventDisconnect object firstId lastId eventIds
+  = do prev <- varSwap disconnecting True
+       mapM_ disconnectEventId eventIds
+       varSet disconnecting prev
+  where
+    disconnectEventId eventId
+      = evtHandlerDisconnect object firstId lastId eventId 0 {- actually: void* -}
+
+-- | Sets a generic event handler on an 'EvtHandler' object. The call
+-- (@evtHandlerOnEventConnect firstId lastId eventIds state destroy handler object@) sets an event
+-- handler @handler@ on @object@. The eventhandler gets called whenever an event
+-- happens that is in the list @eventIds@ on an object with an 'Id' between @firstId@
+-- and @lastId@ (use -1 for any object). The @state@ is any kind of Haskell data
+-- that is attached to this handler. It can be retrieved via 'unsafeGetHandlerState'.
+-- Normally, the @state@ is the event handler itself. This allows the current event
+-- handler to be retrieved via calls to 'buttonGetOnCommand' for example. The @destroy@
+-- action is called when the event handler is destroyed. Its argument is 'True' when the
+-- owner is deleted, and 'False' if the event handler is just disconnected.
+evtHandlerOnEventConnect :: EvtHandler a -> Id -> Id -> [EventId] -> state -> OnEvent
+evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler
+  = do closure <- createClosure state destroy eventHandler
+       withObjectPtr closure $ \pclosure ->
+        mapM_ (connectEventId pclosure) eventIds
+  where
+    connectEventId pclosure eventId
+      = evtHandlerConnect object firstId lastId eventId pclosure
+
+
+
+-- Use a data wrapper for the closure state: seem to circumvent bugs when wrapping
+-- things like Int or overloaded stuff.
+data Wrap a  = Wrap a
+
+
+unsafeClosureGetState :: Closure () -> a -> IO a
+unsafeClosureGetState closure def
+  = do mb <- unsafeClosureGetData closure
+       case mb of
+         Nothing -> return def
+         Just x  -> return x
+
+unsafeClosureGetData :: Closure () -> IO (Maybe a)
+unsafeClosureGetData closure
+  = if (objectIsNull closure)
+     then return Nothing
+     else do ptr <- closureGetData closure
+             if (ptrIsNull ptr)
+              then return Nothing
+              else do (Wrap x) <- deRefStablePtr (castPtrToStablePtr ptr)
+                      return (Just x)
+
+
+-- | Create a closure with a certain Haskell state, a function that is called
+-- when the closure is destroyed, and a function that is called when an event
+-- happens. The destroy function takes a boolean that is 'True' when the parent
+-- is deleted (and 'False' when the closure is just disconnected). The event
+-- handlers gets the 'Event' as its argument.
+createClosure :: state -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO (Closure ())
+createClosure st destroy handler
+  = do funptr  <- wrapEventHandler eventHandlerWrapper
+       stptr   <- newStablePtr (Wrap st)
+       closureCreate funptr (castStablePtrToPtr stptr)
+  where
+    eventHandlerWrapper :: Ptr fun -> Ptr () -> Ptr (TEvent ()) -> IO ()
+    eventHandlerWrapper funptr stptr eventptr
+      = do let event = objectFromPtr eventptr
+           prev <- swapMVar currentEvent event
+           if (objectIsNull event)
+            then do isDisconnecting <- varGet disconnecting
+                    destroy (not isDisconnecting)
+                    when (stptr/=ptrNull)
+                      (freeStablePtr (castPtrToStablePtr stptr))
+                    when (funptr/=ptrNull)
+                      (freeHaskellFunPtr (castPtrToFunPtr funptr))
+            else handler event
+           swapMVar currentEvent prev
+           return ()
+
+
+
+foreign import ccall "wrapper" wrapEventHandler :: (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()) -> IO (FunPtr (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()))
src/haskell/Graphics/UI/WXCore/Frame.hs view
@@ -1,150 +1,150 @@-------------------------------------------------------------------------------------------{-|	Module      :  Frame-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Frame utility functions.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Frame-        ( -- * Frame-          frameCreateTopFrame-        , frameCreateDefault-        , frameSetTopFrame-        , frameDefaultStyle-        , frameCenter-        , frameCenterHorizontal-        , frameCenterVertical-          -- * Window-        , windowGetRootParent-        , windowGetFrameParent-        , windowGetMousePosition-        , windowGetScreenPosition-        , windowChildren-          -- * Dialog-        , dialogDefaultStyle-          -- * Status bar-        , statusBarCreateFields-        ) where--import Data.Bits-import Foreign.Marshal.Array-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassTypes-import Graphics.UI.WXCore.Types----- | The default frame style for a normal top-level 'Frame'.-frameDefaultStyle :: Int-frameDefaultStyle-  = wxDEFAULT_FRAME_STYLE .|. wxCLIP_CHILDREN -- .|. wxNO_FULL_REPAINT_ON_RESIZE ---- | The default frame style for a normal 'Dialog'.-dialogDefaultStyle :: Int-dialogDefaultStyle-  = wxCAPTION .|. wxSYSTEM_MENU .|. wxTAB_TRAVERSAL .|. wxCLOSE_BOX .|. wxCLIP_CHILDREN -    -- .|. wxNO_FULL_REPAINT_ON_RESIZE --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Create a default frame and make it the top-level window.-frameCreateTopFrame :: String -> IO (Frame ())-frameCreateTopFrame title-  = do frame <- frameCreateDefault title-       frameSetTopFrame frame-       return frame---- | Set the top-level frame (calls 'cAppSetTopWindow').-frameSetTopFrame :: Frame a -> IO ()-frameSetTopFrame frame-  = wxcAppSetTopWindow frame---- | Create a  frame with default settings.-frameCreateDefault :: String -> IO (Frame ())-frameCreateDefault title-  = frameCreate objectNull idAny title rectNull frameDefaultStyle----- | Center the frame on the screen.-frameCenter :: Frame a -> IO ()-frameCenter f -  = frameCentre f wxBOTH---- | Center the frame horizontally on the screen.-frameCenterHorizontal :: Frame a -> IO ()-frameCenterHorizontal f-  = frameCentre f wxHORIZONTAL---- | Center the frame vertically on the screen.-frameCenterVertical :: Frame a -> IO ()-frameCenterVertical f-  = frameCentre f wxVERTICAL----------------------------------------------------------------------------------------------- Window---------------------------------------------------------------------------------------------- | The parent frame or dialog of a widget.-windowGetFrameParent :: Window a -> IO (Window ())-windowGetFrameParent w-  = if (instanceOf w classFrame || instanceOf w classDialog)-     then return (downcastWindow w)-     else do p <- windowGetParent w-             if (objectIsNull p)-              then return (downcastWindow w)-              else windowGetFrameParent p----- | The ultimate root parent of the widget.-windowGetRootParent :: Window a -> IO (Window ())-windowGetRootParent w-  = do p <- windowGetParent w-       if (objectIsNull p)-        then return (downcastWindow w)-        else windowGetRootParent p-       ----- | Retrieve the current mouse position relative to the window position.-windowGetMousePosition :: Window a -> IO Point-windowGetMousePosition w-  = do p <- wxcGetMousePosition-       windowScreenToClient2 w p-  --- | Get the window position relative to the origin of the display.-windowGetScreenPosition :: Window a -> IO Point-windowGetScreenPosition w-  = windowClientToScreen w pointZero----- | Get the children of a window-windowChildren :: Window a -> IO [Window ()]-windowChildren w-  = do count <- windowGetChildren w ptrNull 0-       if count <= 0-        then return []-        else withArray (replicate count ptrNull) $ \ptrs ->-             do windowGetChildren w ptrs count-                ps <- peekArray count ptrs-                return (map objectFromPtr ps)----------------------------------------------------------------------------------------------- Statusbar--------------------------------------------------------------------------------------------statusBarCreateFields :: Frame a -> [Int] -> IO (StatusBar ())-statusBarCreateFields parent widths-  = do pst <- windowGetWindowStyleFlag parent-       let st = if (bitsSet wxRESIZE_BORDER pst) then wxST_SIZEGRIP else 0-       sb <- frameCreateStatusBar parent (length widths) st-       let len = length widths-       if (len <= 1)-        then return sb-        else do withArray (map toCInt widths) (\pwidths -> statusBarSetStatusWidths sb (length widths) pwidths)+-----------------------------------------------------------------------------------------
+{-|	Module      :  Frame
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Frame utility functions.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Frame
+        ( -- * Frame
+          frameCreateTopFrame
+        , frameCreateDefault
+        , frameSetTopFrame
+        , frameDefaultStyle
+        , frameCenter
+        , frameCenterHorizontal
+        , frameCenterVertical
+          -- * Window
+        , windowGetRootParent
+        , windowGetFrameParent
+        , windowGetMousePosition
+        , windowGetScreenPosition
+        , windowChildren
+          -- * Dialog
+        , dialogDefaultStyle
+          -- * Status bar
+        , statusBarCreateFields
+        ) where
+
+import Data.Bits
+import Foreign.Marshal.Array
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClassInfo
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.WxcClassTypes
+import Graphics.UI.WXCore.Types
+
+
+-- | The default frame style for a normal top-level 'Frame'.
+frameDefaultStyle :: Int
+frameDefaultStyle
+  = wxDEFAULT_FRAME_STYLE .|. wxCLIP_CHILDREN -- .|. wxNO_FULL_REPAINT_ON_RESIZE 
+
+-- | The default frame style for a normal 'Dialog'.
+dialogDefaultStyle :: Int
+dialogDefaultStyle
+  = wxCAPTION .|. wxSYSTEM_MENU .|. wxTAB_TRAVERSAL .|. wxCLOSE_BOX .|. wxCLIP_CHILDREN 
+    -- .|. wxNO_FULL_REPAINT_ON_RESIZE 
+
+------------------------------------------------------------------------------------------
+--
+------------------------------------------------------------------------------------------
+-- | Create a default frame and make it the top-level window.
+frameCreateTopFrame :: String -> IO (Frame ())
+frameCreateTopFrame title
+  = do frame <- frameCreateDefault title
+       frameSetTopFrame frame
+       return frame
+
+-- | Set the top-level frame (calls 'cAppSetTopWindow').
+frameSetTopFrame :: Frame a -> IO ()
+frameSetTopFrame frame
+  = wxcAppSetTopWindow frame
+
+-- | Create a  frame with default settings.
+frameCreateDefault :: String -> IO (Frame ())
+frameCreateDefault title
+  = frameCreate objectNull idAny title rectNull frameDefaultStyle
+
+
+-- | Center the frame on the screen.
+frameCenter :: Frame a -> IO ()
+frameCenter f 
+  = frameCentre f wxBOTH
+
+-- | Center the frame horizontally on the screen.
+frameCenterHorizontal :: Frame a -> IO ()
+frameCenterHorizontal f
+  = frameCentre f wxHORIZONTAL
+
+-- | Center the frame vertically on the screen.
+frameCenterVertical :: Frame a -> IO ()
+frameCenterVertical f
+  = frameCentre f wxVERTICAL
+
+------------------------------------------------------------------------------------------
+-- Window
+------------------------------------------------------------------------------------------
+-- | The parent frame or dialog of a widget.
+windowGetFrameParent :: Window a -> IO (Window ())
+windowGetFrameParent w
+  = if (instanceOf w classFrame || instanceOf w classDialog)
+     then return (downcastWindow w)
+     else do p <- windowGetParent w
+             if (objectIsNull p)
+              then return (downcastWindow w)
+              else windowGetFrameParent p
+
+
+-- | The ultimate root parent of the widget.
+windowGetRootParent :: Window a -> IO (Window ())
+windowGetRootParent w
+  = do p <- windowGetParent w
+       if (objectIsNull p)
+        then return (downcastWindow w)
+        else windowGetRootParent p
+       
+
+
+-- | Retrieve the current mouse position relative to the window position.
+windowGetMousePosition :: Window a -> IO Point
+windowGetMousePosition w
+  = do p <- wxcGetMousePosition
+       windowScreenToClient2 w p
+  
+-- | Get the window position relative to the origin of the display.
+windowGetScreenPosition :: Window a -> IO Point
+windowGetScreenPosition w
+  = windowClientToScreen w pointZero
+
+
+-- | Get the children of a window
+windowChildren :: Window a -> IO [Window ()]
+windowChildren w
+  = do count <- windowGetChildren w ptrNull 0
+       if count <= 0
+        then return []
+        else withArray (replicate count ptrNull) $ \ptrs ->
+             do windowGetChildren w ptrs count
+                ps <- peekArray count ptrs
+                return (map objectFromPtr ps)
+
+------------------------------------------------------------------------------------------
+-- Statusbar
+------------------------------------------------------------------------------------------
+statusBarCreateFields :: Frame a -> [Int] -> IO (StatusBar ())
+statusBarCreateFields parent widths
+  = do pst <- windowGetWindowStyleFlag parent
+       let st = if (bitsSet wxRESIZE_BORDER pst) then wxST_SIZEGRIP else 0
+       sb <- frameCreateStatusBar parent (length widths) st
+       let len = length widths
+       if (len <= 1)
+        then return sb
+        else do withArray (map toCInt widths) (\pwidths -> statusBarSetStatusWidths sb (length widths) pwidths)
                 return sb
src/haskell/Graphics/UI/WXCore/GHCiSupport.hs view
@@ -13,7 +13,7 @@ foreign import ccall "GetCurrentProcess" getCurrentProcess :: Ptr ProcessSerialNumber -> IO Int16
 foreign import ccall "_CGSDefaultConnection" cgsDefaultConnection :: IO ()
 foreign import ccall "CPSEnableForegroundOperation" cpsEnableForegroundOperation :: Ptr ProcessSerialNumber -> IO ()
-foreign import ccall "CPSSignalAppReady" cpsSignalAppReady :: Ptr ProcessSerialNumber -> IO ()
+-- foreign import ccall "CPSSignalAppReady" cpsSignalAppReady :: Ptr ProcessSerialNumber -> IO ()
 foreign import ccall "CPSSetFrontProcess" cpsSetFrontProcess :: Ptr ProcessSerialNumber -> IO ()
 
 enableGUI :: IO ()
@@ -21,7 +21,7 @@     getCurrentProcess psn
     cgsDefaultConnection
     cpsEnableForegroundOperation psn
-    cpsSignalAppReady psn
+    -- cpsSignalAppReady psn
     cpsSetFrontProcess psn
 
 #else
@@ -29,4 +29,4 @@ enableGUI :: IO ()
 enableGUI = return ()
 
-#endif+#endif
src/haskell/Graphics/UI/WXCore/Image.hs view
@@ -1,355 +1,355 @@-{-# LANGUAGE FlexibleContexts #-}----------------------------------------------------------------------------------{-|	Module      :  Image-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Image-    ( -- * Images-      topLevelWindowSetIconFromFile-    -- ** Imagelist-    , imageListAddIconsFromFiles-    , imageListAddIconFromFile-    -- ** Icons-    , withIconFromFile-    , iconCreateFromFile-    , iconGetSize-    -- ** Cursors-    , withCursorFromFile-    , cursorCreateFromFile-    -- ** Bitmaps-    , withBitmapFromFile-    , bitmapCreateFromFile-    , bitmapGetSize-    , bitmapSetSize-    -- ** Helpers-    , imageTypeFromExtension-    , imageTypeFromFileName--    -- * Direct image manipulation-    , imageGetPixels-    , imageCreateFromPixels-    , imageGetPixelArray-    , imageCreateFromPixelArray-    , imageGetSize-    , withImageData--    -- ** Pixel buffer-    , imageCreateFromPixelBuffer-    , imageGetPixelBuffer-    , withPixelBuffer-    , PixelBuffer-    , pixelBufferCreate-    , pixelBufferDelete-    , pixelBufferInit-    , pixelBufferSetPixel-    , pixelBufferGetPixel    -    , pixelBufferSetPixels-    , pixelBufferGetPixels    -    , pixelBufferGetSize-    ) where--import Data.Char( toLower )-import Data.Array.IArray ( IArray, listArray, bounds, elems )-import Foreign.Marshal.Array-import Foreign.C.String-import Foreign.Storable--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines---{------------------------------------------------------------------------------------------  ImageList------------------------------------------------------------------------------------------}--- | Initialize an image list with icons from files. Use a 'sizeNull' to--- use the native size of the loaded icons.-imageListAddIconsFromFiles :: ImageList a -> Size -> [FilePath] -> IO ()-imageListAddIconsFromFiles images desiredSize fnames-  = mapM_ (imageListAddIconFromFile images desiredSize) fnames---- | Add an icon from a file to an imagelist.-imageListAddIconFromFile :: ImageList a -> Size -> FilePath -> IO ()-imageListAddIconFromFile images desiredSize fname-  = do image <- imageCreateFromFile fname-       imageRescale image desiredSize-       bitmap <- imageConvertToBitmap image-       imageListAddBitmap images bitmap nullBitmap-       bitmapDelete bitmap-       imageDelete image-       return ()--{------------------------------------------------------------------------------------------  Icons------------------------------------------------------------------------------------------}---- | Set the icon of a frame.-topLevelWindowSetIconFromFile :: TopLevelWindow a -> FilePath -> IO ()-topLevelWindowSetIconFromFile f fname-  = withIconFromFile fname sizeNull (topLevelWindowSetIcon f)----- | Load an icon (see 'iconCreateFromFile') and automatically delete it--- after use.-withIconFromFile :: FilePath -> Size -> (Icon () -> IO a) -> IO a-withIconFromFile fname size f-  = bracket (iconCreateFromFile fname size)-            (iconDelete)-            f---- | Load an icon from an icon file (ico,xbm,xpm,gif). The 'Size' argument--- gives the desired size but can be 'sizeNull' to retrieve the image--- in its natural size. -iconCreateFromFile :: FilePath -> Size -> IO (Icon ())-iconCreateFromFile fname size-  = iconCreateLoad fname (imageTypeFromFileName fname) size-  {--    do icon <- iconCreateLoad fname (imageTypeFromFileName fname) size-       ok   <- iconOk icon-       if (ok)-        then return icon-        else do iconDelete icon-                ioError (userError ("unable to load icon: " ++ show fname))-  -}---- | Get the size of an icon.-iconGetSize :: Icon a -> IO Size-iconGetSize icon-  = do w <- iconGetWidth icon-       h <- iconGetHeight icon-       return (sz w h)--{------------------------------------------------------------------------------------------  Cursors------------------------------------------------------------------------------------------}--- | Load an cursor (see 'cursorCreateFromFile') and automatically delete it--- after use.-withCursorFromFile :: FilePath -> (Cursor () -> IO a) -> IO a-withCursorFromFile fname f-  = bracket (cursorCreateFromFile fname)-            (cursorDelete)-            f---- | Load an cursor from an icon file (ico,xbm,xpm,gif).--- For a reason, this function is incomatible with 'iconCreateFromFile'.-cursorCreateFromFile :: String -> IO (Cursor ())-cursorCreateFromFile fname = imageCreateFromFile fname >>= cursorCreateFromImage--{------------------------------------------------------------------------------------------  Bitmaps------------------------------------------------------------------------------------------}---- | Load a bitmap (see 'bitmapCreateFromFile') and automatically delete it--- after use.-withBitmapFromFile :: FilePath -> (Bitmap () -> IO a) -> IO a-withBitmapFromFile fname f-  = bracket (bitmapCreateFromFile fname)-            (bitmapDelete)-            f---- | Load a bitmap from an image file (gif, jpg, png, etc.) -bitmapCreateFromFile :: FilePath -> IO (Bitmap ())-bitmapCreateFromFile fname-  = bitmapCreateLoad fname (imageTypeFromFileName fname)-    {--    do bm <- bitmapCreateLoad fname (imageTypeFromFileName fname)-       ok <- bitmapOk bm-       if (ok)-        then return bm-        else do bitmapDelete bm-                ioError (userError ("unable to load image: " ++ show fname))-    -}---- | The size of a bitmap.-bitmapGetSize :: Bitmap a -> IO Size-bitmapGetSize bitmap-  = do w <- bitmapGetWidth bitmap-       h <- bitmapGetHeight bitmap-       return (sz w h)---- | Set the size of a bitmap.-bitmapSetSize :: Bitmap a -> Size -> IO ()-bitmapSetSize bitmap (Size w h)-  = do bitmapSetWidth bitmap w-       bitmapSetHeight bitmap h---{------------------------------------------------------------------------------------------  Images------------------------------------------------------------------------------------------}---- | Get an image type from a file name.-imageTypeFromFileName :: String -> BitFlag-imageTypeFromFileName fname-  = imageTypeFromExtension (map toLower (reverse (takeWhile (/= '.') (reverse fname))))---- | Get an image type from a file extension.-imageTypeFromExtension :: String -> BitFlag-imageTypeFromExtension ext-  = case ext of-      "jpg"   -> wxBITMAP_TYPE_JPEG-      "jpeg"  -> wxBITMAP_TYPE_JPEG-      "gif"   -> wxBITMAP_TYPE_GIF-      "bmp"   -> wxBITMAP_TYPE_BMP-      "png"   -> wxBITMAP_TYPE_PNG-      "xpm"   -> wxBITMAP_TYPE_XPM-      "xbm"   -> wxBITMAP_TYPE_XBM-      "pcx"   -> wxBITMAP_TYPE_PCX-      "ico"   -> wxBITMAP_TYPE_ICO-      "tif"   -> wxBITMAP_TYPE_TIF-      "tiff"  -> wxBITMAP_TYPE_TIF-      "pnm"   -> wxBITMAP_TYPE_PNM-      "pict"  -> wxBITMAP_TYPE_PICT-      "icon"  -> wxBITMAP_TYPE_ICON-      other   -> wxBITMAP_TYPE_ANY--{------------------------------------------------------------------------------------------  Direct image manipulation------------------------------------------------------------------------------------------}--- | An abstract pixel buffer (= array of RGB values)-data PixelBuffer   = PixelBuffer Bool Size (Ptr Word8)---- | Create a pixel buffer. (To be deleted with 'pixelBufferDelete').-pixelBufferCreate   :: Size -> IO PixelBuffer-pixelBufferCreate size-  = do buffer <- wxcMalloc (sizeW size * sizeH size * 3)-       return (PixelBuffer True size (ptrCast buffer))---- | Delete a pixel buffer. -pixelBufferDelete  :: PixelBuffer -> IO ()-pixelBufferDelete (PixelBuffer owned size buffer)-  = when (owned && not (ptrIsNull buffer)) (wxcFree buffer)---- | The size of a pixel buffer-pixelBufferGetSize :: PixelBuffer -> Size-pixelBufferGetSize (PixelBuffer owned size buffer)-  = size---- | Get all the pixels of a pixel buffer as a single list.-pixelBufferGetPixels :: PixelBuffer -> IO [Color]-pixelBufferGetPixels (PixelBuffer owned (Size w h) buffer)-  = do let count = w*h-       rgbs <- peekArray (3*count) buffer-       return (convert rgbs)-  where-    convert :: [Word8] -> [Color]-    convert (r:g:b:xs)  = colorRGB r g b : convert xs-    convert []          = []---- | Set all the pixels of a pixel buffer.-pixelBufferSetPixels :: PixelBuffer -> [Color] -> IO ()-pixelBufferSetPixels (PixelBuffer owned (Size w h) buffer) colors-  = do let count = w*h-       pokeArray buffer (convert (take count colors))-  where-    convert :: [Color] -> [Word8]-    convert (c:cs) = colorRed c : colorGreen c : colorBlue c : convert cs-    convert []     = []---- | Initialize the pixel buffer with a grey color. The second argument--- specifies the /greyness/ as a number between 0.0 (black) and 1.0 (white).-pixelBufferInit :: PixelBuffer -> Color -> IO ()-pixelBufferInit (PixelBuffer owned size buffer) color-  = wxcInitPixelsRGB buffer size (intFromColor color)---- | Set the color of a pixel.-pixelBufferSetPixel :: PixelBuffer -> Point -> Color -> IO ()-pixelBufferSetPixel (PixelBuffer owned size buffer) point color-  = {--    do let idx = 3*(y*w + x)-           r   = colorRed color-           g   = colorGreen color-           b   = colorBlue color-       pokeByteOff buffer idx r-       pokeByteOff buffer (idx+1) g-       pokeByteOff buffer (idx+2) b-    -}-    wxcSetPixelRGB buffer (sizeW size) point (intFromColor color)-    ---- | Get the color of a pixel-pixelBufferGetPixel :: PixelBuffer -> Point -> IO Color-pixelBufferGetPixel (PixelBuffer owned size buffer) point-  = {--    do let idx = 3*(y*w + x)-       r   <- peekByteOff buffer idx-       g   <- peekByteOff buffer (idx+1)-       b   <- peekByteOff buffer (idx+2)-       return (colorRGB r g b)-    -}-    do rgb <- wxcGetPixelRGB buffer (sizeW size) point-       return (colorFromInt rgb)-      -  --- | Create an image from a pixel buffer. Note: the image will--- delete the pixelbuffer.-imageCreateFromPixelBuffer :: PixelBuffer -> IO (Image ())-imageCreateFromPixelBuffer (PixelBuffer owned size buffer) -  = imageCreateFromDataEx size buffer False---- | Do something with the pixels of an image-withImageData :: Image a -> (Ptr () -> IO b) -> IO b-withImageData image f = do-    pixels <- imageGetData image-    x <- f pixels-    image `seq` return x -- about this seq:-    -- it's not that we're trying to force evaluation order;-    -- we merely want to prevent image from being garbage-    -- collected before we've managed to use the array that-    -- is being pointed to--withPixelBuffer :: Image a -> (PixelBuffer -> IO b) -> IO b-withPixelBuffer image f =-    withImageData image $ \ptr -> do-       w   <- imageGetWidth image-       h   <- imageGetHeight image-       f $ PixelBuffer False (sz w h) (ptrCast ptr)--{-# DEPRECATED imageGetPixelBuffer "Use withPixelBuffer instead" #-}--- | Get the pixel buffer of an image.---   Note: use 'withPixelBuffer' instead-imageGetPixelBuffer :: Image a -> IO PixelBuffer-imageGetPixelBuffer image-  = withPixelBuffer image return---- | Get the pixels of an image.-imageGetPixels :: Image a -> IO [Color]-imageGetPixels image-  = withPixelBuffer image pixelBufferGetPixels---- | Create an image from a list of pixels.-imageCreateFromPixels :: Size -> [Color] -> IO (Image ())-imageCreateFromPixels size colors-  = do pb <- pixelBufferCreate size-       pixelBufferSetPixels pb colors-       imageCreateFromPixelBuffer pb   -- image deletes pixel buffer---- | Get the pixels of an image as an array-imageGetPixelArray :: (IArray a Color) => Image b -> IO (a Point Color)-imageGetPixelArray image-  = do h  <- imageGetHeight image-       w  <- imageGetWidth image-       ps <- imageGetPixels image-       let bounds = (pointZero, point (w-1) (h-1))-       return (listArray bounds ps)        ---- | Create an image from a pixel array-imageCreateFromPixelArray :: (IArray a Color) => a Point Color -> IO (Image ())-imageCreateFromPixelArray pixels-  = let (Point x y) = snd (bounds pixels)-    in imageCreateFromPixels (sz (x+1) (y+1)) (elems pixels)---- | Get the size of an image-imageGetSize :: Image a -> IO Size-imageGetSize image-  = do h  <- imageGetHeight image-       w  <- imageGetWidth image-       return (Size w h)+{-# LANGUAGE FlexibleContexts #-}
+--------------------------------------------------------------------------------
+{-|	Module      :  Image
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+-}
+--------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Image
+    ( -- * Images
+      topLevelWindowSetIconFromFile
+    -- ** Imagelist
+    , imageListAddIconsFromFiles
+    , imageListAddIconFromFile
+    -- ** Icons
+    , withIconFromFile
+    , iconCreateFromFile
+    , iconGetSize
+    -- ** Cursors
+    , withCursorFromFile
+    , cursorCreateFromFile
+    -- ** Bitmaps
+    , withBitmapFromFile
+    , bitmapCreateFromFile
+    , bitmapGetSize
+    , bitmapSetSize
+    -- ** Helpers
+    , imageTypeFromExtension
+    , imageTypeFromFileName
+
+    -- * Direct image manipulation
+    , imageGetPixels
+    , imageCreateFromPixels
+    , imageGetPixelArray
+    , imageCreateFromPixelArray
+    , imageGetSize
+    , withImageData
+
+    -- ** Pixel buffer
+    , imageCreateFromPixelBuffer
+    , imageGetPixelBuffer
+    , withPixelBuffer
+    , PixelBuffer
+    , pixelBufferCreate
+    , pixelBufferDelete
+    , pixelBufferInit
+    , pixelBufferSetPixel
+    , pixelBufferGetPixel    
+    , pixelBufferSetPixels
+    , pixelBufferGetPixels    
+    , pixelBufferGetSize
+    ) where
+
+import Data.Char( toLower )
+import Data.Array.IArray ( IArray, listArray, bounds, elems )
+import Foreign.Marshal.Array
+import Foreign.C.String
+import Foreign.Storable
+
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Defines
+
+
+{-----------------------------------------------------------------------------------------
+  ImageList
+-----------------------------------------------------------------------------------------}
+-- | Initialize an image list with icons from files. Use a 'sizeNull' to
+-- use the native size of the loaded icons.
+imageListAddIconsFromFiles :: ImageList a -> Size -> [FilePath] -> IO ()
+imageListAddIconsFromFiles images desiredSize fnames
+  = mapM_ (imageListAddIconFromFile images desiredSize) fnames
+
+-- | Add an icon from a file to an imagelist.
+imageListAddIconFromFile :: ImageList a -> Size -> FilePath -> IO ()
+imageListAddIconFromFile images desiredSize fname
+  = do image <- imageCreateFromFile fname
+       imageRescale image desiredSize
+       bitmap <- imageConvertToBitmap image
+       imageListAddBitmap images bitmap nullBitmap
+       bitmapDelete bitmap
+       imageDelete image
+       return ()
+
+{-----------------------------------------------------------------------------------------
+  Icons
+-----------------------------------------------------------------------------------------}
+
+-- | Set the icon of a frame.
+topLevelWindowSetIconFromFile :: TopLevelWindow a -> FilePath -> IO ()
+topLevelWindowSetIconFromFile f fname
+  = withIconFromFile fname sizeNull (topLevelWindowSetIcon f)
+
+
+-- | Load an icon (see 'iconCreateFromFile') and automatically delete it
+-- after use.
+withIconFromFile :: FilePath -> Size -> (Icon () -> IO a) -> IO a
+withIconFromFile fname size f
+  = bracket (iconCreateFromFile fname size)
+            (iconDelete)
+            f
+
+-- | Load an icon from an icon file (ico,xbm,xpm,gif). The 'Size' argument
+-- gives the desired size but can be 'sizeNull' to retrieve the image
+-- in its natural size. 
+iconCreateFromFile :: FilePath -> Size -> IO (Icon ())
+iconCreateFromFile fname size
+  = iconCreateLoad fname (imageTypeFromFileName fname) size
+  {-
+    do icon <- iconCreateLoad fname (imageTypeFromFileName fname) size
+       ok   <- iconOk icon
+       if (ok)
+        then return icon
+        else do iconDelete icon
+                ioError (userError ("unable to load icon: " ++ show fname))
+  -}
+
+-- | Get the size of an icon.
+iconGetSize :: Icon a -> IO Size
+iconGetSize icon
+  = do w <- iconGetWidth icon
+       h <- iconGetHeight icon
+       return (sz w h)
+
+{-----------------------------------------------------------------------------------------
+  Cursors
+-----------------------------------------------------------------------------------------}
+-- | Load a cursor (see 'cursorCreateFromFile') and automatically delete it
+-- after use.
+withCursorFromFile :: FilePath -> (Cursor () -> IO a) -> IO a
+withCursorFromFile fname f
+  = bracket (cursorCreateFromFile fname)
+            (cursorDelete)
+            f
+
+-- | Load a cursor from an icon file (ico,xbm,xpm,gif).
+-- For a reason, this function is incompatible with 'iconCreateFromFile'.
+cursorCreateFromFile :: String -> IO (Cursor ())
+cursorCreateFromFile fname = imageCreateFromFile fname >>= cursorCreateFromImage
+
+{-----------------------------------------------------------------------------------------
+  Bitmaps
+-----------------------------------------------------------------------------------------}
+
+-- | Load a bitmap (see 'bitmapCreateFromFile') and automatically delete it
+-- after use.
+withBitmapFromFile :: FilePath -> (Bitmap () -> IO a) -> IO a
+withBitmapFromFile fname f
+  = bracket (bitmapCreateFromFile fname)
+            (bitmapDelete)
+            f
+
+-- | Load a bitmap from an image file (gif, jpg, png, etc.) 
+bitmapCreateFromFile :: FilePath -> IO (Bitmap ())
+bitmapCreateFromFile fname
+  = bitmapCreateLoad fname (imageTypeFromFileName fname)
+    {-
+    do bm <- bitmapCreateLoad fname (imageTypeFromFileName fname)
+       ok <- bitmapOk bm
+       if (ok)
+        then return bm
+        else do bitmapDelete bm
+                ioError (userError ("unable to load image: " ++ show fname))
+    -}
+
+-- | The size of a bitmap.
+bitmapGetSize :: Bitmap a -> IO Size
+bitmapGetSize bitmap
+  = do w <- bitmapGetWidth bitmap
+       h <- bitmapGetHeight bitmap
+       return (sz w h)
+
+-- | Set the size of a bitmap.
+bitmapSetSize :: Bitmap a -> Size -> IO ()
+bitmapSetSize bitmap (Size w h)
+  = do bitmapSetWidth bitmap w
+       bitmapSetHeight bitmap h
+
+
+{-----------------------------------------------------------------------------------------
+  Images
+-----------------------------------------------------------------------------------------}
+
+-- | Get an image type from a file name.
+imageTypeFromFileName :: String -> BitFlag
+imageTypeFromFileName fname
+  = imageTypeFromExtension (map toLower (reverse (takeWhile (/= '.') (reverse fname))))
+
+-- | Get an image type from a file extension.
+imageTypeFromExtension :: String -> BitFlag
+imageTypeFromExtension ext
+  = case ext of
+      "jpg"   -> wxBITMAP_TYPE_JPEG
+      "jpeg"  -> wxBITMAP_TYPE_JPEG
+      "gif"   -> wxBITMAP_TYPE_GIF
+      "bmp"   -> wxBITMAP_TYPE_BMP
+      "png"   -> wxBITMAP_TYPE_PNG
+      "xpm"   -> wxBITMAP_TYPE_XPM
+      "xbm"   -> wxBITMAP_TYPE_XBM
+      "pcx"   -> wxBITMAP_TYPE_PCX
+      "ico"   -> wxBITMAP_TYPE_ICO
+      "tif"   -> wxBITMAP_TYPE_TIF
+      "tiff"  -> wxBITMAP_TYPE_TIF
+      "pnm"   -> wxBITMAP_TYPE_PNM
+      "pict"  -> wxBITMAP_TYPE_PICT
+      "icon"  -> wxBITMAP_TYPE_ICON
+      other   -> wxBITMAP_TYPE_ANY
+
+{-----------------------------------------------------------------------------------------
+  Direct image manipulation
+-----------------------------------------------------------------------------------------}
+-- | An abstract pixel buffer (= array of RGB values)
+data PixelBuffer   = PixelBuffer Bool Size (Ptr Word8)
+
+-- | Create a pixel buffer. (To be deleted with 'pixelBufferDelete').
+pixelBufferCreate   :: Size -> IO PixelBuffer
+pixelBufferCreate size
+  = do buffer <- wxcMalloc (sizeW size * sizeH size * 3)
+       return (PixelBuffer True size (ptrCast buffer))
+
+-- | Delete a pixel buffer. 
+pixelBufferDelete  :: PixelBuffer -> IO ()
+pixelBufferDelete (PixelBuffer owned size buffer)
+  = when (owned && not (ptrIsNull buffer)) (wxcFree buffer)
+
+-- | The size of a pixel buffer
+pixelBufferGetSize :: PixelBuffer -> Size
+pixelBufferGetSize (PixelBuffer owned size buffer)
+  = size
+
+-- | Get all the pixels of a pixel buffer as a single list.
+pixelBufferGetPixels :: PixelBuffer -> IO [Color]
+pixelBufferGetPixels (PixelBuffer owned (Size w h) buffer)
+  = do let count = w*h
+       rgbs <- peekArray (3*count) buffer
+       return (convert rgbs)
+  where
+    convert :: [Word8] -> [Color]
+    convert (r:g:b:xs)  = colorRGB r g b : convert xs
+    convert []          = []
+
+-- | Set all the pixels of a pixel buffer.
+pixelBufferSetPixels :: PixelBuffer -> [Color] -> IO ()
+pixelBufferSetPixels (PixelBuffer owned (Size w h) buffer) colors
+  = do let count = w*h
+       pokeArray buffer (convert (take count colors))
+  where
+    convert :: [Color] -> [Word8]
+    convert (c:cs) = colorRed c : colorGreen c : colorBlue c : convert cs
+    convert []     = []
+
+-- | Initialize the pixel buffer with a grey color. The second argument
+-- specifies the /greyness/ as a number between 0.0 (black) and 1.0 (white).
+pixelBufferInit :: PixelBuffer -> Color -> IO ()
+pixelBufferInit (PixelBuffer owned size buffer) color
+  = wxcInitPixelsRGB buffer size (intFromColor color)
+
+-- | Set the color of a pixel.
+pixelBufferSetPixel :: PixelBuffer -> Point -> Color -> IO ()
+pixelBufferSetPixel (PixelBuffer owned size buffer) point color
+  = {-
+    do let idx = 3*(y*w + x)
+           r   = colorRed color
+           g   = colorGreen color
+           b   = colorBlue color
+       pokeByteOff buffer idx r
+       pokeByteOff buffer (idx+1) g
+       pokeByteOff buffer (idx+2) b
+    -}
+    wxcSetPixelRGB buffer (sizeW size) point (intFromColor color)
+    
+
+-- | Get the color of a pixel
+pixelBufferGetPixel :: PixelBuffer -> Point -> IO Color
+pixelBufferGetPixel (PixelBuffer owned size buffer) point
+  = {-
+    do let idx = 3*(y*w + x)
+       r   <- peekByteOff buffer idx
+       g   <- peekByteOff buffer (idx+1)
+       b   <- peekByteOff buffer (idx+2)
+       return (colorRGB r g b)
+    -}
+    do rgb <- wxcGetPixelRGB buffer (sizeW size) point
+       return (colorFromInt rgb)
+      
+  
+-- | Create an image from a pixel buffer. Note: the image will
+-- delete the pixelbuffer.
+imageCreateFromPixelBuffer :: PixelBuffer -> IO (Image ())
+imageCreateFromPixelBuffer (PixelBuffer owned size buffer) 
+  = imageCreateFromDataEx size buffer False
+
+-- | Do something with the pixels of an image
+withImageData :: Image a -> (Ptr () -> IO b) -> IO b
+withImageData image f = do
+    pixels <- imageGetData image
+    x <- f pixels
+    image `seq` return x -- about this seq:
+    -- it's not that we're trying to force evaluation order;
+    -- we merely want to prevent image from being garbage
+    -- collected before we've managed to use the array that
+    -- is being pointed to
+
+withPixelBuffer :: Image a -> (PixelBuffer -> IO b) -> IO b
+withPixelBuffer image f =
+    withImageData image $ \ptr -> do
+       w   <- imageGetWidth image
+       h   <- imageGetHeight image
+       f $ PixelBuffer False (sz w h) (ptrCast ptr)
+
+{-# DEPRECATED imageGetPixelBuffer "Use withPixelBuffer instead" #-}
+-- | Get the pixel buffer of an image.
+--   Note: use 'withPixelBuffer' instead
+imageGetPixelBuffer :: Image a -> IO PixelBuffer
+imageGetPixelBuffer image
+  = withPixelBuffer image return
+
+-- | Get the pixels of an image.
+imageGetPixels :: Image a -> IO [Color]
+imageGetPixels image
+  = withPixelBuffer image pixelBufferGetPixels
+
+-- | Create an image from a list of pixels.
+imageCreateFromPixels :: Size -> [Color] -> IO (Image ())
+imageCreateFromPixels size colors
+  = do pb <- pixelBufferCreate size
+       pixelBufferSetPixels pb colors
+       imageCreateFromPixelBuffer pb   -- image deletes pixel buffer
+
+-- | Get the pixels of an image as an array
+imageGetPixelArray :: (IArray a Color) => Image b -> IO (a Point Color)
+imageGetPixelArray image
+  = do h  <- imageGetHeight image
+       w  <- imageGetWidth image
+       ps <- imageGetPixels image
+       let bounds = (pointZero, point (w-1) (h-1))
+       return (listArray bounds ps)        
+
+-- | Create an image from a pixel array
+imageCreateFromPixelArray :: (IArray a Color) => a Point Color -> IO (Image ())
+imageCreateFromPixelArray pixels
+  = let (Point x y) = snd (bounds pixels)
+    in imageCreateFromPixels (sz (x+1) (y+1)) (elems pixels)
+
+-- | Get the size of an image
+imageGetSize :: Image a -> IO Size
+imageGetSize image
+  = do h  <- imageGetHeight image
+       w  <- imageGetWidth image
+       return (Size w h)
src/haskell/Graphics/UI/WXCore/Layout.hs view
@@ -1,1013 +1,1018 @@-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE FlexibleInstances #-}-------------------------------------------------------------------------------------------{-|	Module      :  Layout-	Copyright   :  (c) Daan Leijen & Wijnand van Suijlen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Combinators to specify layout. (These combinators use wxWidgets 'Sizer' objects).--Layout can be specified using 'windowSetLayout'. For example:--> do f  <- frameCreateTopFrame "Test"->    ok <- buttonCreate f idAny "Bye" rectNull 0->    windowSetLayout f (widget ok)->    ...--The 'windowSetLayout' function takes 'Layout' as its argument.-The 'widget' combinator creates a layout from a window. The 'space' combinator creates-an empty layout with a specific width and height. Furthermore, we have the 'label' combinator-to create a static label label and 'boxed' to create a labeled border around a layout.-The 'grid' combinator lays out elements in a table with a given space between the elements.-Here is for example a layout for retrieving an /x/ and /y/ coordinate from the user, with 5 pixels space-between the controls:--> boxed "coordinates" (grid 5 5 [[label "x", widget xinput]->                               ,[label "y", widget yinput]])--Combinators like 'row' and 'column' are specific instances of grids. We can use-these combinator to good effect to add an /ok/ and /cancel/ button at the bottom of our dialog:--> column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]->                                          ,[label "y", widget yinput]])->          , row 5 [widget ok, widget cancel]]--Layout /tranformers/ influence attributes of a layout. The 'margin' combinator adds a-margin around a layout. The /align/ combinators specify how a combinator is aligned when-the assigned area is larger than the layout itself. We can use these transformers to-add a margin around our dialog and to align the buttons to the bottom right (instead of the-default top-left):--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]->                                                      ,[label "y", widget yinput]])->                      , alignBottomRight $ row 5 [widget ok, widget cancel]]--Besides aligning a layout in its assigned area, we can also specify that a layout should-expand to fill the assigned area. The 'shaped' combinator fills an area while maintaining the-original proportions (or aspect ratio) of a layout. The 'expand' combinator always tries to fill-the entire area (and alignment is ignored).--The final attribute is the /stretch/ of a layout. A stretchable layout may get a larger-area assigned than the minimally required area. This can be used to fill out the entire parent-area -- this happens for example when a user enlarges a dialog.--The default stretch and expansion mode of layout containers, like 'grid' and 'boxed', depends on the-stretch of the child layouts.  A column of a /grid/ is only stretchable when all-elements of that column have horizontal stretch. The same holds for rows with vertical stretch.-When any column or row is stretchable, the grid itself will also be stretchable in that direction-and the grid will 'expand' to fill the assigned area by default (instead of being 'static'). Just like-a grid, other containers, like 'container', 'boxed', 'tabs', 'row', and 'column', will also propagate the stretch-and expansion mode of their child layouts.--Armed with the 'stretch' combinators we can make our dialog resizeable.-We let the input widgets resize horizontally. Furthermore, the button row will resize-vertically and horizontally with the buttons aligned to the bottom right. Due to the-stretch propagation rules, the 'grid' and 'boxed' stretch horizontally and 'expand' to fill the-assigned area. The horizontal 'row' does /not/ stretch by default (and we need to use-an explicit 'stretch') and it does /not/ expand into the assigned area by default (and therefore-alignment works properly).--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hstretch $ expand $ widget xinput]->                                                      ,[label "y", hstretch $ expand $ widget yinput]])->                      , stretch $ alignBottomRight $ row 5 [widget ok, widget cancel]]--There are some common uses of stretchable combinators. The 'fill' combinators combine-stretch and expansion. For example, 'hfill' is defined as (@hstretch . expand@). The /float/-combinators combine alignment and 'stretch'. For example, 'floatBottomRight' is defined-as (@stretch . alignBottomRight@). There are also horizontal and vertical float combinators,-like 'hfloatCentre' and 'vfloatBottom'. Here is the above example using 'fill' and float:--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]->                                                      ,[label "y", hfill $ widget yinput]])->                      , floatBottomRight $ row 5 [widget ok, widget cancel]]--The 'glue' combinators are stretchable empty space. For example, 'hglue'-is defined as (@hstretch (space 0 0)@). We can use glue to mimic alignment. Here is the above-layout specified with glue. Note that we use 'hspace' to manually insert-space between the elements or  otherwise there would be space between the glue and-the /ok/ button.--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]->                                                      ,[label "y", hfill $ widget yinput]])->                      , glue->                      , row 0 [hglue, widget ok, hspace 5, widget cancel]]--Splitter windows can also be specified with layout; you get somewhat less functionality-but it is quite convenient for most applications. A horizontal split is done using-'hsplit' while a vertical split is specified with a 'vsplit'.--The layout for notebooks is specified with the 'tabs' combinator. The following-example shows this (and note also how we use 'container' to set the layout of panels):--> nbook  <- notebookCreate ...-> panel1 <- panelCreate nbook ...-> ...-> panel2 <- panelCreate nbook ...-> ...-> windowSetLayout frame->    (tabs nbook [tab "page one" $ container panel1 $ margin 10 $ floatCentre $ widget ok->                ,tab "page two" $ container panel2 $ margin 10 $ hfill $ widget quit])--The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). The-title of the pages is determined from the label of the container widget.--Note: /At the moment, extra space is divided evenly among stretchable layouts. We plan to add-a (/@proportion :: Int -> Layout -> Layout@/) combinator in the future to stretch layouts-according to a relative weight, but unfortunately, that entails implementing a better-/'FlexGrid'/ sizer for wxWidgets./--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Layout( -- * Types-                               Layout, sizerFromLayout-                             , TabPage-                               -- * Window-                             , windowSetLayout, layoutFromWindow-                             , windowReFit, windowReFitMinimal-                             , windowReLayout, windowReLayoutMinimal-                               -- * Layouts                               -                               -- ** Widgets-                             , Widget, widget, label, rule, hrule, vrule, sizer-                               -- ** Containers-                             , row, column-                             , grid, boxed, container, tab, imageTab, tabs-                             , hsplit, vsplit-                               -- ** Glue-                             , glue, hglue, vglue-                               -- ** Whitespace-                             , space, hspace, vspace, empty-                               -- * Transformers-                             , dynamic-                               -- ** Stretch-                             , static, stretch, hstretch, vstretch, minsize-                               -- ** Expansion-                             , rigid, shaped, expand-                               -- ** Fill-                             , fill, hfill, vfill-                               -- ** Margin-                             , margin, marginWidth, marginNone-                             , marginLeft, marginTop, marginRight, marginBottom-                               -- ** Floating alignment-                             , floatTopLeft, floatTop, floatTopRight-                             , floatLeft, floatCentre, floatCenter, floatRight-                             , floatBottomLeft, floatBottom, floatBottomRight-                               -- ** Horizontal floating alignment-                             , hfloatLeft, hfloatCentre, hfloatCenter, hfloatRight-                               -- ** Vertical floating alignment-                             , vfloatTop, vfloatCentre, vfloatCenter, vfloatBottom-                               -- ** Alignment-                             , centre-                             , alignTopLeft, alignTop, alignTopRight-                             , alignLeft, alignCentre, alignCenter, alignRight-                             , alignBottomLeft, alignBottom, alignBottomRight-                               -- ** Horizontal alignment-                             , halignLeft, halignCentre, halignCenter, halignRight-                               -- ** Vertical alignment-                             , valignTop, valignCentre, valignCenter, valignBottom-                             ) where--import Data.List( transpose )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Frame-import Graphics.UI.WXCore.Defines--{------------------------------------------------------------------------------------------  Classes------------------------------------------------------------------------------------------}--- | Anything in the widget class can be layed out.-class Widget w where-  -- | Create a layout from a widget.-  widget :: w -> Layout--instance Widget Layout where-  widget layout-    = layout--instance Widget (Window a) where-  widget w-    = layoutFromWindow w---{------------------------------------------------------------------------------------------  Abstractions------------------------------------------------------------------------------------------}-{---- | Layout elements horizontally with no space between the elements.-row :: [Layout] -> Layout-row-  = horizontal 0---- | Layout elements vertically with no space between the elements.-column :: [Layout] -> Layout-column-  = vertical 0---- | Layout elements in a 'grid' with no space between the elements.-matrix :: [[Layout]] -> Layout-matrix-  = grid 0 0---- | Create a border. (= @'boxed' \"\"@).-border :: Layout -> Layout-border-  = boxed ""---}---- | The layout is stretchable and expands into the assigned area. (see also 'stretch' and 'expand').-fill :: Layout -> Layout-fill-  = stretch . expand---- | The layout is horizontally stretchable and expands into the assigned area. (see also 'hstretch' and 'expand').-hfill :: Layout -> Layout-hfill-  = hstretch . expand---- | The layout is vertically stretchable and expands into the assigned area. (see also 'vstretch' and 'expand').-vfill :: Layout -> Layout-vfill-  = vstretch . expand---- | Layout elements in a horizontal direction with a certain amount of space between the elements.-row :: Int -> [Layout] -> Layout-row w row-  = grid w 0 [row]---- | Layout elements in a vertical direction with a certain amount of space between the elements.-column :: Int -> [Layout] -> Layout-column h col-  = grid 0 h (map (\x -> [x]) col)----{------------------------------------------------------------------------------------------  Float------------------------------------------------------------------------------------------}--- | Make the layout stretchable and align it in the center of the assigned area.-floatCenter :: Layout -> Layout-floatCenter-  = floatCentre---- | Make the layout stretchable and align it in the center of the assigned area.-floatCentre :: Layout -> Layout-floatCentre-  = stretch . alignCentre---- | Make the layout stretchable and align it in the top-left corner of the assigned area (default).-floatTopLeft :: Layout -> Layout-floatTopLeft-  = stretch . alignTopLeft---- | Make the layout stretchable and align it centered on the top of the assigned area.-floatTop :: Layout -> Layout-floatTop-  = stretch . alignTop---- | Make the layout stretchable and align it to the top-right of the assigned area.-floatTopRight :: Layout -> Layout-floatTopRight-  = stretch . alignTopRight---- | Make the layout stretchable and align it centered to the left of the assigned area.-floatLeft :: Layout -> Layout-floatLeft-  = stretch . alignLeft---- | Make the layout stretchable and align it centered to the right of the assigned area.-floatRight :: Layout -> Layout-floatRight-  = stretch . alignRight---- | Make the layout stretchable and align it to the bottom-left of the assigned area.-floatBottomLeft :: Layout -> Layout-floatBottomLeft-  = stretch . alignBottomLeft---- | Make the layout stretchable and align it centered on the bottom of the assigned area.-floatBottom :: Layout -> Layout-floatBottom-  = stretch . alignBottom---- | Make the layout stretchable and align it to the bottom-right of the assigned area.-floatBottomRight :: Layout -> Layout-floatBottomRight-  = stretch . alignBottomRight---- | Make the layout horizontally stretchable and align to the center.-hfloatCenter :: Layout -> Layout-hfloatCenter -  = hfloatCentre---- | Make the layout horizontally stretchable and align to the center.-hfloatCentre :: Layout -> Layout-hfloatCentre-  = hstretch . alignCentre---- | Make the layout horizontally stretchable and align to the left.-hfloatLeft :: Layout -> Layout-hfloatLeft-  = hstretch . alignLeft---- | Make the layout horizontally stretchable and align to the right.-hfloatRight :: Layout -> Layout-hfloatRight-  = hstretch . alignRight---- | Make the layout vertically stretchable and align to the center.-vfloatCenter :: Layout -> Layout-vfloatCenter-  = vfloatCentre---- | Make the layout vertically stretchable and align to the center.-vfloatCentre :: Layout -> Layout-vfloatCentre-  = vstretch . alignCentre---- | Make the layout vertically stretchable and align to the top.-vfloatTop :: Layout -> Layout-vfloatTop-  = vstretch . alignTop---- | Make the layout vertically stretchable and align to the bottom.-vfloatBottom :: Layout -> Layout-vfloatBottom-  = vstretch . alignBottom--{------------------------------------------------------------------------------------------  Alignment------------------------------------------------------------------------------------------}--- | Align the layout in the center of the assigned area.-center :: Layout -> Layout-center-  = centre---- | Align the layout in the center of the assigned area.-centre :: Layout -> Layout-centre-  = alignCentre---- | Align the layout in the center of the assigned area.-alignCenter :: Layout -> Layout-alignCenter-  = alignCentre---- | Align the layout in the center of the assigned area.-alignCentre :: Layout -> Layout-alignCentre-  = halignCentre . valignCentre---- | Align the layout in the top-left corner of the assigned area (default).-alignTopLeft :: Layout -> Layout-alignTopLeft-  = valignTop . halignLeft---- | Align the layout centered on the top of the assigned area.-alignTop :: Layout -> Layout-alignTop-  = valignTop . halignCentre---- | Align the layout to the top-right of the assigned area.-alignTopRight :: Layout -> Layout-alignTopRight-  = valignTop . halignRight---- | Align the layout centered to the left of the assigned area.-alignLeft :: Layout -> Layout-alignLeft-  = valignCentre . halignLeft---- | Align the layout centered to the right of the assigned area.-alignRight :: Layout -> Layout-alignRight-  = valignCentre . halignRight---- | Align the layout to the bottom-left of the assigned area.-alignBottomLeft :: Layout -> Layout-alignBottomLeft-  = valignBottom . halignLeft---- | Align the layout centered on the bottom of the assigned area.-alignBottom :: Layout -> Layout-alignBottom-  = valignBottom . halignCentre---- | Align the layout to the bottom-right of the assigned area.-alignBottomRight :: Layout -> Layout-alignBottomRight-  = valignBottom . halignRight--{------------------------------------------------------------------------------------------  Whitespace------------------------------------------------------------------------------------------}---- | An empty layout that stretchable in all directions.-glue :: Layout-glue-  = stretch empty---- | An empty layout that is vertically stretchable.-vglue :: Layout-vglue-  = vstretch empty---- | An empty layout that is horizontally stretchable.-hglue :: Layout-hglue-  = hstretch empty---- | An empty layout. (see also 'space').-empty :: Layout-empty-  = space 0 0---- | Horizontal 'space' of a certain width.-hspace :: Int -> Layout-hspace w-  = space w 0---- | Vertical 'space' of a certain height.-vspace :: Int -> Layout-vspace h-  = space 0 h---{------------------------------------------------------------------------------------------  Primitive layout tranformers------------------------------------------------------------------------------------------}---- | (primitive) Set the minimal size of a widget.-minsize :: Size -> Layout -> Layout-minsize sz layout-  = updateOptions layout (\options -> options{ minSize = Just sz })---- | (primitive) Never resize the layout, but align it in the assigned area--- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).-rigid :: Layout -> Layout-rigid layout-  = updateOptions layout (\options -> options{ fillMode = FillNone })---- | (primitive) Expand the layout to fill the assigned area but maintain the original proportions--- of the layout. Note that the layout can still be aligned in a horizontal or vertical direction.-shaped :: Layout -> Layout-shaped layout-  = updateOptions layout (\options -> options{ fillMode = FillShaped })---- | (primitive) Expand the layout to fill the assigned area entirely, even when the original proportions can not--- be maintained. Note that alignment will have no effect on such layout. See also 'fill'.-expand :: Layout -> Layout-expand layout-  = updateOptions layout (\options -> options{ fillMode = Fill })----- | (primitive) The layout is not stretchable. In a 'grid', the row and column that contain this layout will--- not be resizeable. Note that a 'static' layout can still be assigned an area that is larger--- than its preferred size due to grid alignment constraints.--- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).-static :: Layout -> Layout-static layout-  = updateOptions layout (\options -> options{ stretchV = False, stretchH = False })---- | (primitive) The layout is stretchable and can be assigned a larger area in both the horizontal and vertical--- direction. See also combinators like 'fill' and 'floatCentre'.-stretch :: Layout -> Layout-stretch layout-  = updateOptions layout (\options -> options{ stretchV = True, stretchH = True })---- | (primitive) The layout is stretchable in the vertical direction. See also combinators like 'vfill' and 'vfloatCentre'.-vstretch :: Layout -> Layout-vstretch layout-  = updateOptions layout (\options -> options{ stretchV = True, stretchH = False })---- | (primitive) The layout is stretchable in the horizontal direction. See also combinators like 'hfill' and 'hfloatCentre'.-hstretch :: Layout -> Layout-hstretch layout-  = updateOptions layout (\options -> options{ stretchH = True, stretchV = False })----- | Add a margin of a certain width around the entire layout.-margin :: Int -> Layout -> Layout-margin i layout-  = updateOptions layout (\options -> options{ margins = [MarginLeft,MarginRight,MarginTop,MarginBottom], marginW = i })---- | (primitive) Set the width of the margin (default is 10 pixels).-marginWidth :: Int -> Layout -> Layout-marginWidth w layout-  = updateOptions layout (\options -> options{ marginW = w })---- | (primitive) Remove the margin of a layout (default).-marginNone  :: Layout -> Layout-marginNone layout-  = updateOptions layout (\options -> options{ margins = [] })---- | (primitive) Add a margin to the left.-marginLeft  :: Layout -> Layout-marginLeft layout-  = updateOptions layout (\options -> options{ margins = MarginLeft:margins options })---- | (primitive) Add a right margin.-marginRight  :: Layout -> Layout-marginRight layout-  = updateOptions layout (\options -> options{ margins = MarginRight:margins options })---- | (primitive) Add a margin to the top.-marginTop  :: Layout -> Layout-marginTop layout-  = updateOptions layout (\options -> options{ margins = MarginTop:margins options })---- | (primitive) Add a margin to the bottom.-marginBottom  :: Layout -> Layout-marginBottom layout-  = updateOptions layout (\options -> options{ margins = MarginBottom:margins options })----- | (primitive) Align horizontally to the left when the layout is assigned to a larger area (default).-halignLeft :: Layout -> Layout-halignLeft layout-  = updateOptions layout (\options -> options{ alignH = AlignLeft })---- | (primitive) Align horizontally to the right when the layout is assigned to a larger area.-halignRight :: Layout -> Layout-halignRight layout-  = updateOptions layout (\options -> options{ alignH = AlignRight })---- | (primitive) Center horizontally when assigned to a larger area.-halignCenter :: Layout -> Layout-halignCenter -  = halignCentre---- | (primitive) Center horizontally when assigned to a larger area.-halignCentre :: Layout -> Layout-halignCentre layout-  = updateOptions layout (\options -> options{ alignH = AlignHCentre })---- | (primitive) Align vertically to the top when the layout is assigned to a larger area (default).-valignTop :: Layout -> Layout-valignTop layout-  = updateOptions layout (\options -> options{ alignV = AlignTop })---- | (primitive) Align vertically to the bottom when the layout is assigned to a larger area.-valignBottom :: Layout -> Layout-valignBottom layout-  = updateOptions layout (\options -> options{ alignV = AlignBottom })---- | (primitive) Center vertically when the layout is assigned to a larger area.-valignCenter :: Layout -> Layout-valignCenter layout-  = valignCentre layout---- | (primitive) Center vertically when the layout is assigned to a larger area.-valignCentre :: Layout -> Layout-valignCentre layout-  = updateOptions layout (\options -> options{ alignV = AlignVCentre })----- | Adjust the minimal size of a control dynamically when the content changes.--- This is used for example to correctly layout static text or buttons when the--- text or label changes at runtime. This property is automatically set for--- 'StaticText', 'label's, and 'button's.-dynamic :: Layout -> Layout-dynamic layout-  = updateOptions layout (\options -> options{ adjustMinSize = True })--updateOptions :: Layout -> (LayoutOptions -> LayoutOptions) -> Layout-updateOptions layout f-  = layout{ options = f (options layout) }--{------------------------------------------------------------------------------------------  primitive layouts------------------------------------------------------------------------------------------}--- | (primitive) Create a labeled border around a layout (= 'StaticBox').--- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the box.-boxed :: String -> Layout -> Layout-boxed txt content-  = TextBox optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch-                          , fillMode = hasfill, adjustMinSize = True }-      txt (extramargin content)-  where-    hasvstretch  = stretchV (options content)-    hashstretch  = stretchH (options content)-    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone--    extramargin | null (margins (options content)) = marginWidth 5 . marginTop-                | otherwise                        = id---- | (primitive) Create a static label label (= 'StaticText').-label :: String -> Layout-label txt-  = Label optionsDefault txt---- | (primitive) The expression (@grid w h rows@) creates a grid of @rows@. The @w@ argument--- is the extra horizontal space between elements and @h@ the extra vertical space between elements.--- (implemented using the 'FlexGrid' sizer).------ Only when /all/ elements of a column have horizontal stretch (see 'stretch' and 'hstretch'), the entire--- column will stretch horizontally, and the same holds for rows with vertical stretch.--- When any column or row in a grid can stretch, the grid itself will also stretch in that direction--- and the grid will 'expand' to fill the assigned area by default (instead of being 'static').-grid :: Int -> Int -> [[Layout]] -> Layout-grid w h rows-  = Grid optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } (sz w h) rows-  where-    hasvstretch  = any (all (stretchV.options)) rows-    hashstretch  = any (all (stretchH.options)) (transpose rows)-    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone---- | (primitive) Add a container widget (for example, a 'Panel').--- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the container.-container :: Window a -> Layout -> Layout-container window layout-  = WidgetContainer optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }-          (downcastWindow window) layout-  where-    hasvstretch  = stretchV (options layout)-    hashstretch  = stretchH (options layout)-    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone----- | (primitive) Lift a basic control to a 'Layout'.-layoutFromWindow :: Window a -> Layout-layoutFromWindow window-  = Widget optionsDefault{ adjustMinSize = adjust } (downcastWindow window)-  where-    adjust  =  instanceOf window classButton -            || instanceOf window classStaticText----- | (primitive) Empty layout with a given width and height.-space :: Int -> Int -> Layout-space w h-  = Spacer optionsDefault (Size w h)---- | (primitive) A line with a given width and height-rule :: Int -> Int -> Layout-rule w h-  = Line optionsDefault (Size w h)----- | A vertical line with a given height.-vrule :: Int -> Layout-vrule h-  = rule 1 h---- | A horizontal line with a given width.-hrule :: Int -> Layout-hrule w-  = rule w 1---- | (primitive) Create a 'Layout' from a 'Sizer' object.-sizer :: Sizer a -> Layout-sizer s-  = XSizer optionsDefault (downcastSizer s)----- | A tab page in a notebook: a title, a possible bitmap and a layout.-type TabPage  = (String,Bitmap (),Layout)---- | Create a simple tab page with a certain title and layout.-tab :: String -> Layout -> TabPage-tab title layout-  = (title,objectNull,layout)---- | Create a tab page with a certain title, icon, and layout.-imageTab :: String -> Bitmap () -> Layout -> TabPage-imageTab title bitmap layout-  = (title,bitmap,layout)---- | Create a notebook layout.--- The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). --- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the notebook.-tabs :: Notebook a -> [TabPage] -> Layout-tabs notebook pages-  = XNotebook optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }-              (downcastNotebook notebook) pages-  where-    hasvstretch  = all stretchV [options layout | (_,_,layout) <- pages]-    hashstretch  = all stretchH [options layout | (_,_,layout) <- pages]-    hasfill      = if (hasvstretch || hashstretch) then Fill else FillNone---- | Add a horizontal sash bar between two windows. The two integer--- arguments specify the width of the sash bar (5) and the initial--- height of the top pane respectively.-hsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-hsplit-  = split True---- | Add a vertical sash bar between two windows. The two integer--- arguments specify the width of the sash bar (5) and the initial--- width of the left pane respectively. -vsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-vsplit-  = split False---split :: Bool -> SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-split splitHorizontal splitter sashWidth paneWidth pane1 pane2-  = Splitter optionsDefault (downcastSplitterWindow splitter) pane1 pane2 splitHorizontal sashWidth paneWidth---optionsDefault :: LayoutOptions-optionsDefault-  = LayoutOptions False False [] 10 AlignLeft AlignTop FillNone Nothing False------{------------------------------------------------------------------------------------------  Layout algorithm------------------------------------------------------------------------------------------}--- | Abstract data type that represents the layout of controls in a window.-data Layout = Grid      { options :: LayoutOptions, gap  :: Size, rows :: [[Layout]] }-            | Widget    { options :: LayoutOptions, win  :: Window () }-            | Spacer    { options :: LayoutOptions, spacesize :: Size   }-            | Label     { options :: LayoutOptions, txt  :: String    }-            | TextBox   { options :: LayoutOptions, txt  :: String, content :: Layout }-            | Line      { options :: LayoutOptions, linesize :: Size }-            | XSizer    { options :: LayoutOptions, xsizer :: Sizer () }-            | WidgetContainer{ options :: LayoutOptions, win :: Window (), content :: Layout }-            | XNotebook { options :: LayoutOptions, nbook :: Notebook (), pages :: [(String,Bitmap (),Layout)] }-            | Splitter  { options :: LayoutOptions, splitter :: SplitterWindow ()-                        , pane1 :: Layout, pane2 :: Layout-                        , splitHorizontal :: Bool, sashWidth :: Int, paneWidth :: Int }--data LayoutOptions-           = LayoutOptions{ stretchH :: Bool, stretchV :: Bool-                          , margins :: [Margin], marginW :: Int-                          , alignH :: HAlign, alignV :: VAlign-                          , fillMode :: FillMode-                          , minSize  :: Maybe Size-                          , adjustMinSize :: Bool-                          }--data FillMode = FillNone | FillShaped | Fill-data HAlign   = AlignLeft | AlignRight | AlignHCentre-data VAlign   = AlignTop | AlignBottom | AlignVCentre-data Margin   = MarginTop | MarginLeft | MarginRight | MarginBottom---- | Fits a widget properly by calling 'windowReLayout' on--- the parent frame or dialog ('windowGetFrameParent').-windowReFit :: Window a -> IO ()-windowReFit w-  = do p <- windowGetFrameParent w-       windowReLayout p---- | Fits a widget properly by calling 'windowReLayout' on--- the parent frame or dialog ('windowGetFrameParent').-windowReFitMinimal :: Window a -> IO ()-windowReFitMinimal w-  = do p <- windowGetFrameParent w-       windowReLayoutMinimal p---- | Re-invoke layout algorithm to fit a window around its--- children. It will enlarge when the current--- client size is too small, but not shrink when the window--- is already large enough. (in contrast, 'windowReLayoutMinimal' will--- also shrink a window so that it always minimally sized).-windowReLayout :: Window a -> IO ()-windowReLayout w-  = do windowLayout w-       old <- windowGetClientSize w-       szr <- windowGetSizer w-       when (not (objectIsNull szr)) (sizerSetSizeHints szr w)-       windowFit w-       new <- windowGetClientSize w-       windowSetClientSize w (sizeMax old new)---- | Re-invoke layout algorithm to fit a window around its--- children. It will resize the window to its minimal --- acceptable size ('windowFit').-windowReLayoutMinimal :: Window a -> IO ()  -windowReLayoutMinimal w-  = do windowLayout w-       szr <- windowGetSizer w-       when (not (objectIsNull szr)) (sizerSetSizeHints szr w)-       windowFit w---- | Set the layout of a window (automatically calls 'sizerFromLayout').-windowSetLayout :: Window a -> Layout -> IO ()-windowSetLayout window layout-  = do sizer <- sizerFromLayout window layout-       windowSetAutoLayout window True-       windowSetSizer window sizer-       sizerSetSizeHints sizer window-       return ()---- | Create a 'Sizer' from a 'Layout' and a parent window.-sizerFromLayout :: Window a -> Layout -> IO (Sizer ())-sizerFromLayout parent layout-  = insert objectNull (grid 0 0 [[stretch layout]])-  where-    insert :: Sizer () -> Layout -> IO (Sizer ())-    insert container (Spacer options sz)-      = do sizerAddWithOptions 0 (sizerAdd container sz) (\sz -> return ()) options-           return container--    insert container (Widget options win)-      = do sizerAddWindowWithOptions container win options-           return container--    insert container (Grid goptions gap rows)-      = do g <- flexGridSizerCreate (length rows) (maximum (map length rows)) (sizeH gap) (sizeW gap)-           mapM_ (stretchRow g) (zip [0..] (map (all (stretchV.options)) rows))-           mapM_ (stretchCol g) (zip [0..] (map (all (stretchH.options)) (transpose rows)))-           mapM_ (insert (downcastSizer g)) (concat rows)-           when (container /= objectNull) -             (sizerAddSizerWithOptions container g goptions)-           return (downcastSizer g)--    insert container (Label options txt)-      = do t <- staticTextCreate parent idAny txt rectNull 0-           sizerAddWindowWithOptions container t options-           return container--    insert container (TextBox options txt layout)-      = do box   <- staticBoxCreate parent idAny txt rectNull (wxCLIP_CHILDREN .+. wxNO_FULL_REPAINT_ON_RESIZE)-           sizer <- staticBoxSizerCreate box wxVERTICAL-           insert (downcastSizer sizer) layout-           when (container /= objectNull) -             (sizerAddSizerWithOptions container sizer options)-           windowLower box-           return (downcastSizer sizer)--    insert container (Line options (Size w h))-      = do l <- staticLineCreate parent idAny (rectNull{ rectWidth = w, rectHeight = h }) -                  (if (w >= h) then wxHORIZONTAL else wxVERTICAL)-           sizerAddWindowWithOptions container l options-           return container--    insert container (XSizer options sizer)-      = do sizerAddSizerWithOptions container sizer options-           return container--    insert container (WidgetContainer options win layout)-      = do windowSetLayout win layout -- recursively set the layout in the window itself-           sizerAddWindowWithOptions container win options-           return container--    insert container (Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth)-      = do splitterWindowSetMinimumPaneSize splitter 20-           splitterWindowSetSashSize splitter sashWidth-           sizerAddWindowWithOptions container splitter options-           if splitHorizontal-            then splitterWindowSplitHorizontally splitter win1 win2 paneWidth-            else splitterWindowSplitVertically splitter win1 win2 paneWidth-           paneSetLayout pane1-           paneSetLayout pane2-           -           return container-      where-        win1  = getWinFromLayout pane1-        win2  = getWinFromLayout pane2--        getWinFromLayout layout-          = case layout of-              Widget _ win            -> downcastWindow win-              WidgetContainer _ win _ -> downcastWindow win-              Splitter _ splitter _ _ _ _ _ -> downcastWindow splitter-              other                   -> error "Layout: hsplit/vsplit need widgets or containers as arguments"--        paneSetLayout layout-          = case layout of-              Widget _ win            -> return ()-              WidgetContainer options win layout -> windowSetLayout win layout-              Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth -                                      ->  do splitterWindowSetMinimumPaneSize splitter 20-                                             splitterWindowSetSashSize splitter sashWidth-                                             -- sizerAddWindowWithOptions container splitter options-                                             let win1 = getWinFromLayout pane1-                                                 win2 = getWinFromLayout pane2-                                             if splitHorizontal-                                              then splitterWindowSplitHorizontally splitter win1 win2 paneWidth-                                              else splitterWindowSplitVertically splitter win1 win2 paneWidth-                                             paneSetLayout pane1-                                             paneSetLayout pane2-                                             return ()-              other                   -> error "Layout: hsplit/vsplit need widgets or containers as arguments"---    insert container (XNotebook options nbook pages)-      = do pages' <- addImages objectNull pages-           mapM_ addPage pages'-           sizerAddWindowWithOptions container nbook options-           return container-      where-        addPage (title,idx,WidgetContainer options win layout)-          = do pagetitle <- if (null title)-                             then windowGetLabel win-                             else return title-               notebookAddPage nbook win pagetitle False idx-               windowSetLayout win layout  -- recursively set layout--        addPage (title,idx,other)-          = error "Graphics.UI.WXCore.sizerFromLayout: notebook page needs to be a 'container' layout!"--        addImages il []-          = if (objectIsNull il)-             then return []-             else do notebookAssignImageList nbook il-                     return []--        addImages il ((title,bm,layout):xs)   | objectIsNull bm -          = do xs' <- addImages il xs-               return ((title,-1,layout):xs')--        addImages il ((title,bm,layout):xs)-          = do il' <- addImage il bm-               i   <- imageListGetImageCount il'-               xs' <- addImages il' xs-               return ((title,i,layout):xs')--        addImage il bm-          = if (objectIsNull il)-             then do w  <- bitmapGetWidth bm-                     h  <- bitmapGetHeight bm-                     il <- imageListCreate (sz w h) False 1-                     imageListAddBitmap il bm objectNull-                     return il-             else do imageListAddBitmap il bm objectNull-                     return il---    stretchRow g (i,stretch)-      = when stretch (flexGridSizerAddGrowableRow g i)--    stretchCol g (i,stretch)-      = when stretch (flexGridSizerAddGrowableCol g i)--    --    sizerAddWindowWithOptions :: Sizer a -> Window b -> LayoutOptions -> IO ()-    sizerAddWindowWithOptions container window options-      = sizerAddWithOptions (flagsAdjustMinSize window options) -                            (sizerAddWindow container window) (sizerSetItemMinSizeWindow container window) options--    sizerAddSizerWithOptions :: Sizer a -> Sizer b -> LayoutOptions -> IO ()-    sizerAddSizerWithOptions container sizer options-      = sizerAddWithOptions 0 (sizerAddSizer container sizer) (sizerSetItemMinSizeSizer container sizer) options-           --    sizerAddWithOptions :: Int -> (Int -> Int -> Int -> Ptr p -> IO ()) -> (Size -> IO ()) -> LayoutOptions -> IO ()-    sizerAddWithOptions miscflags addSizer setMinSize options-      = do addSizer 1 (flags options .+. miscflags) (marginW options) ptrNull-           case minSize options of-             Nothing -> return ()-             Just sz -> setMinSize sz--    flags options-      = flagsFillMode (fillMode options) .+. flagsMargins (margins options)-        .+. flagsHAlign (alignH options) .+. flagsVAlign (alignV options)--    flagsFillMode fillMode-      = case fillMode of-          FillNone    -> 0-          FillShaped  -> wxSHAPED-          Fill        -> wxEXPAND--    flagsHAlign halign-      = case halign of-          AlignLeft    -> wxALIGN_LEFT-          AlignRight   -> wxALIGN_RIGHT-          AlignHCentre -> wxALIGN_CENTRE_HORIZONTAL--    flagsVAlign valign-      = case valign of-          AlignTop     -> wxALIGN_TOP-          AlignBottom  -> wxALIGN_BOTTOM-          AlignVCentre -> wxALIGN_CENTRE_VERTICAL--    flagsMargins margins-      = bits (map flagsMargin margins)--    flagsMargin margin-      = case margin of-          MarginTop    -> wxTOP-          MarginLeft   -> wxLEFT-          MarginBottom -> wxBOTTOM-          MarginRight  -> wxRIGHT-    -    flagsAdjustMinSize window options-      = if (adjustMinSize options) -         then wxADJUST_MINSIZE-         else 0-{-      -        case minSize options of-          Nothing | -- dleijen: unfortunately, wxADJUST_MINSIZE has bugs for certain controls:-                    not ( instanceOf window classGauge || instanceOf window classGauge95 -                         || instanceOf window classGaugeMSW -                         || instanceOf window classSlider || instanceOf window classSlider95 -                         || instanceOf window classSliderMSW -                        )-                  -> wxADJUST_MINSIZE-          other   -> 0--}+{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE FlexibleInstances #-}
+-----------------------------------------------------------------------------------------
+{-|	Module      :  Layout
+	Copyright   :  (c) Daan Leijen & Wijnand van Suijlen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Combinators to specify layout. (These combinators use wxWidgets 'Sizer' objects).
+
+Layout can be specified using 'windowSetLayout'. For example:
+
+> do f  <- frameCreateTopFrame "Test"
+>    ok <- buttonCreate f idAny "Bye" rectNull 0
+>    windowSetLayout f (widget ok)
+>    ...
+
+The 'windowSetLayout' function takes 'Layout' as its argument.
+The 'widget' combinator creates a layout from a window. The 'space' combinator creates
+an empty layout with a specific width and height. Furthermore, we have the 'label' combinator
+to create a static label label and 'boxed' to create a labeled border around a layout.
+The 'grid' combinator lays out elements in a table with a given space between the elements.
+Here is for example a layout for retrieving an /x/ and /y/ coordinate from the user, with 5 pixels space
+between the controls:
+
+> boxed "coordinates" (grid 5 5 [[label "x", widget xinput]
+>                               ,[label "y", widget yinput]])
+
+Combinators like 'row' and 'column' are specific instances of grids. We can use
+these combinator to good effect to add an /ok/ and /cancel/ button at the bottom of our dialog:
+
+> column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]
+>                                          ,[label "y", widget yinput]])
+>          , row 5 [widget ok, widget cancel]]
+
+Layout /tranformers/ influence attributes of a layout. The 'margin' combinator adds a
+margin around a layout. The /align/ combinators specify how a combinator is aligned when
+the assigned area is larger than the layout itself. We can use these transformers to
+add a margin around our dialog and to align the buttons to the bottom right (instead of the
+default top-left):
+
+> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]
+>                                                      ,[label "y", widget yinput]])
+>                      , alignBottomRight $ row 5 [widget ok, widget cancel]]
+
+Besides aligning a layout in its assigned area, we can also specify that a layout should
+expand to fill the assigned area. The 'shaped' combinator fills an area while maintaining the
+original proportions (or aspect ratio) of a layout. The 'expand' combinator always tries to fill
+the entire area (and alignment is ignored).
+
+The final attribute is the /stretch/ of a layout. A stretchable layout may get a larger
+area assigned than the minimally required area. This can be used to fill out the entire parent
+area -- this happens for example when a user enlarges a dialog.
+
+The default stretch and expansion mode of layout containers, like 'grid' and 'boxed', depends on the
+stretch of the child layouts.  A column of a /grid/ is only stretchable when all
+elements of that column have horizontal stretch. The same holds for rows with vertical stretch.
+When any column or row is stretchable, the grid itself will also be stretchable in that direction
+and the grid will 'expand' to fill the assigned area by default (instead of being 'static'). Just like
+a grid, other containers, like 'container', 'boxed', 'tabs', 'row', and 'column', will also propagate the stretch
+and expansion mode of their child layouts.
+
+Armed with the 'stretch' combinators we can make our dialog resizeable.
+We let the input widgets resize horizontally. Furthermore, the button row will resize
+vertically and horizontally with the buttons aligned to the bottom right. Due to the
+stretch propagation rules, the 'grid' and 'boxed' stretch horizontally and 'expand' to fill the
+assigned area. The horizontal 'row' does /not/ stretch by default (and we need to use
+an explicit 'stretch') and it does /not/ expand into the assigned area by default (and therefore
+alignment works properly).
+
+> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hstretch $ expand $ widget xinput]
+>                                                      ,[label "y", hstretch $ expand $ widget yinput]])
+>                      , stretch $ alignBottomRight $ row 5 [widget ok, widget cancel]]
+
+There are some common uses of stretchable combinators. The 'fill' combinators combine
+stretch and expansion. For example, 'hfill' is defined as (@hstretch . expand@). The /float/
+combinators combine alignment and 'stretch'. For example, 'floatBottomRight' is defined
+as (@stretch . alignBottomRight@). There are also horizontal and vertical float combinators,
+like 'hfloatCentre' and 'vfloatBottom'. Here is the above example using 'fill' and float:
+
+> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]
+>                                                      ,[label "y", hfill $ widget yinput]])
+>                      , floatBottomRight $ row 5 [widget ok, widget cancel]]
+
+The 'glue' combinators are stretchable empty space. For example, 'hglue'
+is defined as (@hstretch (space 0 0)@). We can use glue to mimic alignment. Here is the above
+layout specified with glue. Note that we use 'hspace' to manually insert
+space between the elements or  otherwise there would be space between the glue and
+the /ok/ button.
+
+> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]
+>                                                      ,[label "y", hfill $ widget yinput]])
+>                      , glue
+>                      , row 0 [hglue, widget ok, hspace 5, widget cancel]]
+
+Splitter windows can also be specified with layout; you get somewhat less functionality
+but it is quite convenient for most applications. A horizontal split is done using
+'hsplit' while a vertical split is specified with a 'vsplit'.
+
+The layout for notebooks is specified with the 'tabs' combinator. The following
+example shows this (and note also how we use 'container' to set the layout of panels):
+
+> nbook  <- notebookCreate ...
+> panel1 <- panelCreate nbook ...
+> ...
+> panel2 <- panelCreate nbook ...
+> ...
+> windowSetLayout frame
+>    (tabs nbook [tab "page one" $ container panel1 $ margin 10 $ floatCentre $ widget ok
+>                ,tab "page two" $ container panel2 $ margin 10 $ hfill $ widget quit])
+
+The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). The
+title of the pages is determined from the label of the container widget.
+
+Note: /At the moment, extra space is divided evenly among stretchable layouts. We plan to add
+a (/@proportion :: Int -> Layout -> Layout@/) combinator in the future to stretch layouts
+according to a relative weight, but unfortunately, that entails implementing a better
+/'FlexGrid'/ sizer for wxWidgets./
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Layout( -- * Types
+                               Layout, sizerFromLayout
+                             , TabPage
+                               -- * Window
+                             , windowSetLayout, layoutFromWindow
+                             , windowReFit, windowReFitMinimal
+                             , windowReLayout, windowReLayoutMinimal
+                               -- * Layouts                               
+                               -- ** Widgets
+                             , Widget, widget, label, rule, hrule, vrule, sizer
+                               -- ** Containers
+                             , row, column
+                             , grid, boxed, container, tab, imageTab, tabs
+                             , hsplit, vsplit
+                               -- ** Glue
+                             , glue, hglue, vglue
+                               -- ** Whitespace
+                             , space, hspace, vspace, empty
+                               -- * Transformers
+                             , dynamic
+                               -- ** Stretch
+                             , static, stretch, hstretch, vstretch, minsize
+                               -- ** Expansion
+                             , rigid, shaped, expand
+                               -- ** Fill
+                             , fill, hfill, vfill
+                               -- ** Margin
+                             , margin, marginWidth, marginNone
+                             , marginLeft, marginTop, marginRight, marginBottom
+                               -- ** Floating alignment
+                             , floatTopLeft, floatTop, floatTopRight
+                             , floatLeft, floatCentre, floatCenter, floatRight
+                             , floatBottomLeft, floatBottom, floatBottomRight
+                               -- ** Horizontal floating alignment
+                             , hfloatLeft, hfloatCentre, hfloatCenter, hfloatRight
+                               -- ** Vertical floating alignment
+                             , vfloatTop, vfloatCentre, vfloatCenter, vfloatBottom
+                               -- ** Alignment
+                             , centre
+                             , alignTopLeft, alignTop, alignTopRight
+                             , alignLeft, alignCentre, alignCenter, alignRight
+                             , alignBottomLeft, alignBottom, alignBottomRight
+                               -- ** Horizontal alignment
+                             , halignLeft, halignCentre, halignCenter, halignRight
+                               -- ** Vertical alignment
+                             , valignTop, valignCentre, valignCenter, valignBottom
+                             ) where
+
+import Data.List( transpose )
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.WxcClassInfo
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Frame
+import Graphics.UI.WXCore.Defines
+
+{-----------------------------------------------------------------------------------------
+  Classes
+-----------------------------------------------------------------------------------------}
+-- | Anything in the widget class can be layed out.
+class Widget w where
+  -- | Create a layout from a widget.
+  widget :: w -> Layout
+
+instance Widget Layout where
+  widget layout
+    = layout
+
+instance Widget (Window a) where
+  widget w
+    = layoutFromWindow w
+
+
+{-----------------------------------------------------------------------------------------
+  Abstractions
+-----------------------------------------------------------------------------------------}
+{-
+-- | Layout elements horizontally with no space between the elements.
+row :: [Layout] -> Layout
+row
+  = horizontal 0
+
+-- | Layout elements vertically with no space between the elements.
+column :: [Layout] -> Layout
+column
+  = vertical 0
+
+-- | Layout elements in a 'grid' with no space between the elements.
+matrix :: [[Layout]] -> Layout
+matrix
+  = grid 0 0
+
+-- | Create a border. (= @'boxed' \"\"@).
+border :: Layout -> Layout
+border
+  = boxed ""
+
+-}
+
+-- | The layout is stretchable and expands into the assigned area. (see also 'stretch' and 'expand').
+fill :: Layout -> Layout
+fill
+  = stretch . expand
+
+-- | The layout is horizontally stretchable and expands into the assigned area. (see also 'hstretch' and 'expand').
+hfill :: Layout -> Layout
+hfill
+  = hstretch . expand
+
+-- | The layout is vertically stretchable and expands into the assigned area. (see also 'vstretch' and 'expand').
+vfill :: Layout -> Layout
+vfill
+  = vstretch . expand
+
+-- | Layout elements in a horizontal direction with a certain amount of space between the elements.
+row :: Int -> [Layout] -> Layout
+row w row
+  = grid w 0 [row]
+
+-- | Layout elements in a vertical direction with a certain amount of space between the elements.
+column :: Int -> [Layout] -> Layout
+column h col
+  = grid 0 h (map (\x -> [x]) col)
+
+
+
+{-----------------------------------------------------------------------------------------
+  Float
+-----------------------------------------------------------------------------------------}
+-- | Make the layout stretchable and align it in the center of the assigned area.
+floatCenter :: Layout -> Layout
+floatCenter
+  = floatCentre
+
+-- | Make the layout stretchable and align it in the center of the assigned area.
+floatCentre :: Layout -> Layout
+floatCentre
+  = stretch . alignCentre
+
+-- | Make the layout stretchable and align it in the top-left corner of the assigned area (default).
+floatTopLeft :: Layout -> Layout
+floatTopLeft
+  = stretch . alignTopLeft
+
+-- | Make the layout stretchable and align it centered on the top of the assigned area.
+floatTop :: Layout -> Layout
+floatTop
+  = stretch . alignTop
+
+-- | Make the layout stretchable and align it to the top-right of the assigned area.
+floatTopRight :: Layout -> Layout
+floatTopRight
+  = stretch . alignTopRight
+
+-- | Make the layout stretchable and align it centered to the left of the assigned area.
+floatLeft :: Layout -> Layout
+floatLeft
+  = stretch . alignLeft
+
+-- | Make the layout stretchable and align it centered to the right of the assigned area.
+floatRight :: Layout -> Layout
+floatRight
+  = stretch . alignRight
+
+-- | Make the layout stretchable and align it to the bottom-left of the assigned area.
+floatBottomLeft :: Layout -> Layout
+floatBottomLeft
+  = stretch . alignBottomLeft
+
+-- | Make the layout stretchable and align it centered on the bottom of the assigned area.
+floatBottom :: Layout -> Layout
+floatBottom
+  = stretch . alignBottom
+
+-- | Make the layout stretchable and align it to the bottom-right of the assigned area.
+floatBottomRight :: Layout -> Layout
+floatBottomRight
+  = stretch . alignBottomRight
+
+-- | Make the layout horizontally stretchable and align to the center.
+hfloatCenter :: Layout -> Layout
+hfloatCenter 
+  = hfloatCentre
+
+-- | Make the layout horizontally stretchable and align to the center.
+hfloatCentre :: Layout -> Layout
+hfloatCentre
+  = hstretch . alignCentre
+
+-- | Make the layout horizontally stretchable and align to the left.
+hfloatLeft :: Layout -> Layout
+hfloatLeft
+  = hstretch . alignLeft
+
+-- | Make the layout horizontally stretchable and align to the right.
+hfloatRight :: Layout -> Layout
+hfloatRight
+  = hstretch . alignRight
+
+-- | Make the layout vertically stretchable and align to the center.
+vfloatCenter :: Layout -> Layout
+vfloatCenter
+  = vfloatCentre
+
+-- | Make the layout vertically stretchable and align to the center.
+vfloatCentre :: Layout -> Layout
+vfloatCentre
+  = vstretch . alignCentre
+
+-- | Make the layout vertically stretchable and align to the top.
+vfloatTop :: Layout -> Layout
+vfloatTop
+  = vstretch . alignTop
+
+-- | Make the layout vertically stretchable and align to the bottom.
+vfloatBottom :: Layout -> Layout
+vfloatBottom
+  = vstretch . alignBottom
+
+{-----------------------------------------------------------------------------------------
+  Alignment
+-----------------------------------------------------------------------------------------}
+-- | Align the layout in the center of the assigned area.
+center :: Layout -> Layout
+center
+  = centre
+
+-- | Align the layout in the center of the assigned area.
+centre :: Layout -> Layout
+centre
+  = alignCentre
+
+-- | Align the layout in the center of the assigned area.
+alignCenter :: Layout -> Layout
+alignCenter
+  = alignCentre
+
+-- | Align the layout in the center of the assigned area.
+alignCentre :: Layout -> Layout
+alignCentre
+  = halignCentre . valignCentre
+
+-- | Align the layout in the top-left corner of the assigned area (default).
+alignTopLeft :: Layout -> Layout
+alignTopLeft
+  = valignTop . halignLeft
+
+-- | Align the layout centered on the top of the assigned area.
+alignTop :: Layout -> Layout
+alignTop
+  = valignTop . halignCentre
+
+-- | Align the layout to the top-right of the assigned area.
+alignTopRight :: Layout -> Layout
+alignTopRight
+  = valignTop . halignRight
+
+-- | Align the layout centered to the left of the assigned area.
+alignLeft :: Layout -> Layout
+alignLeft
+  = valignCentre . halignLeft
+
+-- | Align the layout centered to the right of the assigned area.
+alignRight :: Layout -> Layout
+alignRight
+  = valignCentre . halignRight
+
+-- | Align the layout to the bottom-left of the assigned area.
+alignBottomLeft :: Layout -> Layout
+alignBottomLeft
+  = valignBottom . halignLeft
+
+-- | Align the layout centered on the bottom of the assigned area.
+alignBottom :: Layout -> Layout
+alignBottom
+  = valignBottom . halignCentre
+
+-- | Align the layout to the bottom-right of the assigned area.
+alignBottomRight :: Layout -> Layout
+alignBottomRight
+  = valignBottom . halignRight
+
+{-----------------------------------------------------------------------------------------
+  Whitespace
+-----------------------------------------------------------------------------------------}
+
+-- | An empty layout that stretchable in all directions.
+glue :: Layout
+glue
+  = stretch empty
+
+-- | An empty layout that is vertically stretchable.
+vglue :: Layout
+vglue
+  = vstretch empty
+
+-- | An empty layout that is horizontally stretchable.
+hglue :: Layout
+hglue
+  = hstretch empty
+
+-- | An empty layout. (see also 'space').
+empty :: Layout
+empty
+  = space 0 0
+
+-- | Horizontal 'space' of a certain width.
+hspace :: Int -> Layout
+hspace w
+  = space w 0
+
+-- | Vertical 'space' of a certain height.
+vspace :: Int -> Layout
+vspace h
+  = space 0 h
+
+
+{-----------------------------------------------------------------------------------------
+  Primitive layout tranformers
+-----------------------------------------------------------------------------------------}
+
+-- | (primitive) Set the minimal size of a widget.
+minsize :: Size -> Layout -> Layout
+minsize sz layout
+  = updateOptions layout (\options -> options{ minSize = Just sz })
+
+-- | (primitive) Never resize the layout, but align it in the assigned area
+-- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).
+rigid :: Layout -> Layout
+rigid layout
+  = updateOptions layout (\options -> options{ fillMode = FillNone })
+
+-- | (primitive) Expand the layout to fill the assigned area but maintain the original proportions
+-- of the layout. Note that the layout can still be aligned in a horizontal or vertical direction.
+shaped :: Layout -> Layout
+shaped layout
+  = updateOptions layout (\options -> options{ fillMode = FillShaped })
+
+-- | (primitive) Expand the layout to fill the assigned area entirely, even when the original proportions can not
+-- be maintained. Note that alignment will have no effect on such layout. See also 'fill'.
+expand :: Layout -> Layout
+expand layout
+  = updateOptions layout (\options -> options{ fillMode = Fill })
+
+
+-- | (primitive) The layout is not stretchable. In a 'grid', the row and column that contain this layout will
+-- not be resizeable. Note that a 'static' layout can still be assigned an area that is larger
+-- than its preferred size due to grid alignment constraints.
+-- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).
+static :: Layout -> Layout
+static layout
+  = updateOptions layout (\options -> options{ stretchV = False, stretchH = False })
+
+-- | (primitive) The layout is stretchable and can be assigned a larger area in both the horizontal and vertical
+-- direction. See also combinators like 'fill' and 'floatCentre'.
+stretch :: Layout -> Layout
+stretch layout
+  = updateOptions layout (\options -> options{ stretchV = True, stretchH = True })
+
+-- | (primitive) The layout is stretchable in the vertical direction. See also combinators like 'vfill' and 'vfloatCentre'.
+vstretch :: Layout -> Layout
+vstretch layout
+  = updateOptions layout (\options -> options{ stretchV = True, stretchH = False })
+
+-- | (primitive) The layout is stretchable in the horizontal direction. See also combinators like 'hfill' and 'hfloatCentre'.
+hstretch :: Layout -> Layout
+hstretch layout
+  = updateOptions layout (\options -> options{ stretchH = True, stretchV = False })
+
+
+-- | Add a margin of a certain width around the entire layout.
+margin :: Int -> Layout -> Layout
+margin i layout
+  = updateOptions layout (\options -> options{ margins = [MarginLeft,MarginRight,MarginTop,MarginBottom], marginW = i })
+
+-- | (primitive) Set the width of the margin (default is 10 pixels).
+marginWidth :: Int -> Layout -> Layout
+marginWidth w layout
+  = updateOptions layout (\options -> options{ marginW = w })
+
+-- | (primitive) Remove the margin of a layout (default).
+marginNone  :: Layout -> Layout
+marginNone layout
+  = updateOptions layout (\options -> options{ margins = [] })
+
+-- | (primitive) Add a margin to the left.
+marginLeft  :: Layout -> Layout
+marginLeft layout
+  = updateOptions layout (\options -> options{ margins = MarginLeft:margins options })
+
+-- | (primitive) Add a right margin.
+marginRight  :: Layout -> Layout
+marginRight layout
+  = updateOptions layout (\options -> options{ margins = MarginRight:margins options })
+
+-- | (primitive) Add a margin to the top.
+marginTop  :: Layout -> Layout
+marginTop layout
+  = updateOptions layout (\options -> options{ margins = MarginTop:margins options })
+
+-- | (primitive) Add a margin to the bottom.
+marginBottom  :: Layout -> Layout
+marginBottom layout
+  = updateOptions layout (\options -> options{ margins = MarginBottom:margins options })
+
+
+-- | (primitive) Align horizontally to the left when the layout is assigned to a larger area (default).
+halignLeft :: Layout -> Layout
+halignLeft layout
+  = updateOptions layout (\options -> options{ alignH = AlignLeft })
+
+-- | (primitive) Align horizontally to the right when the layout is assigned to a larger area.
+halignRight :: Layout -> Layout
+halignRight layout
+  = updateOptions layout (\options -> options{ alignH = AlignRight })
+
+-- | (primitive) Center horizontally when assigned to a larger area.
+halignCenter :: Layout -> Layout
+halignCenter 
+  = halignCentre
+
+-- | (primitive) Center horizontally when assigned to a larger area.
+halignCentre :: Layout -> Layout
+halignCentre layout
+  = updateOptions layout (\options -> options{ alignH = AlignHCentre })
+
+-- | (primitive) Align vertically to the top when the layout is assigned to a larger area (default).
+valignTop :: Layout -> Layout
+valignTop layout
+  = updateOptions layout (\options -> options{ alignV = AlignTop })
+
+-- | (primitive) Align vertically to the bottom when the layout is assigned to a larger area.
+valignBottom :: Layout -> Layout
+valignBottom layout
+  = updateOptions layout (\options -> options{ alignV = AlignBottom })
+
+-- | (primitive) Center vertically when the layout is assigned to a larger area.
+valignCenter :: Layout -> Layout
+valignCenter layout
+  = valignCentre layout
+
+-- | (primitive) Center vertically when the layout is assigned to a larger area.
+valignCentre :: Layout -> Layout
+valignCentre layout
+  = updateOptions layout (\options -> options{ alignV = AlignVCentre })
+
+
+-- | Adjust the minimal size of a control dynamically when the content changes.
+-- This is used for example to correctly layout static text or buttons when the
+-- text or label changes at runtime. This property is automatically set for
+-- 'StaticText', 'label's, and 'button's.
+dynamic :: Layout -> Layout
+dynamic layout
+  = updateOptions layout (\options -> options{ adjustMinSize = True })
+
+updateOptions :: Layout -> (LayoutOptions -> LayoutOptions) -> Layout
+updateOptions layout f
+  = layout{ options = f (options layout) }
+
+{-----------------------------------------------------------------------------------------
+  primitive layouts
+-----------------------------------------------------------------------------------------}
+-- | (primitive) Create a labeled border around a layout (= 'StaticBox').
+-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines
+-- the stretch and expansion mode of the box.
+boxed :: String -> Layout -> Layout
+boxed txt content
+  = TextBox optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch
+                          , fillMode = hasfill, adjustMinSize = True }
+      txt (extramargin content)
+  where
+    hasvstretch  = stretchV (options content)
+    hashstretch  = stretchH (options content)
+    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone
+
+    extramargin | null (margins (options content)) = marginWidth 5 . marginTop
+                | otherwise                        = id
+
+-- | (primitive) Create a static label label (= 'StaticText').
+label :: String -> Layout
+label txt
+  = Label optionsDefault txt
+
+-- | (primitive) The expression (@grid w h rows@) creates a grid of @rows@. The @w@ argument
+-- is the extra horizontal space between elements and @h@ the extra vertical space between elements.
+-- (implemented using the 'FlexGrid' sizer).
+--
+-- Only when /all/ elements of a column have horizontal stretch (see 'stretch' and 'hstretch'), the entire
+-- column will stretch horizontally, and the same holds for rows with vertical stretch.
+-- When any column or row in a grid can stretch, the grid itself will also stretch in that direction
+-- and the grid will 'expand' to fill the assigned area by default (instead of being 'static').
+grid :: Int -> Int -> [[Layout]] -> Layout
+grid w h rows
+  = Grid optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } (sz w h) rows
+  where
+    hasvstretch  = any (all (stretchV.options)) rows
+    hashstretch  = any (all (stretchH.options)) (transpose rows)
+    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone
+
+-- | (primitive) Add a container widget (for example, a 'Panel').
+-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines
+-- the stretch and expansion mode of the container.
+container :: Window a -> Layout -> Layout
+container window layout
+  = WidgetContainer optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }
+          (downcastWindow window) layout
+  where
+    hasvstretch  = stretchV (options layout)
+    hashstretch  = stretchH (options layout)
+    hasfill   = if (hasvstretch || hashstretch) then Fill else FillNone
+
+
+-- | (primitive) Lift a basic control to a 'Layout'.
+layoutFromWindow :: Window a -> Layout
+layoutFromWindow window
+  = Widget optionsDefault{ adjustMinSize = adjust } (downcastWindow window)
+  where
+    adjust  =  instanceOf window classButton 
+            || instanceOf window classStaticText
+
+
+-- | (primitive) Empty layout with a given width and height.
+space :: Int -> Int -> Layout
+space w h
+  = Spacer optionsDefault (Size w h)
+
+-- | (primitive) A line with a given width and height
+rule :: Int -> Int -> Layout
+rule w h
+  = Line optionsDefault (Size w h)
+
+
+-- | A vertical line with a given height.
+vrule :: Int -> Layout
+vrule h
+  = rule 1 h
+
+-- | A horizontal line with a given width.
+hrule :: Int -> Layout
+hrule w
+  = rule w 1
+
+-- | (primitive) Create a 'Layout' from a 'Sizer' object.
+sizer :: Sizer a -> Layout
+sizer s
+  = XSizer optionsDefault (downcastSizer s)
+
+
+-- | A tab page in a notebook: a title, a possible bitmap and a layout.
+type TabPage  = (String,Bitmap (),Layout)
+
+-- | Create a simple tab page with a certain title and layout.
+tab :: String -> Layout -> TabPage
+tab title layout
+  = (title,objectNull,layout)
+
+-- | Create a tab page with a certain title, icon, and layout.
+imageTab :: String -> Bitmap () -> Layout -> TabPage
+imageTab title bitmap layout
+  = (title,bitmap,layout)
+
+-- | Create a notebook layout.
+-- The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). 
+-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines
+-- the stretch and expansion mode of the notebook.
+tabs :: Notebook a -> [TabPage] -> Layout
+tabs notebook pages
+  = XNotebook optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }
+              (downcastNotebook notebook) pages
+  where
+    hasvstretch  = all stretchV [options layout | (_,_,layout) <- pages]
+    hashstretch  = all stretchH [options layout | (_,_,layout) <- pages]
+    hasfill      = if (hasvstretch || hashstretch) then Fill else FillNone
+
+-- | Add a horizontal sash bar between two windows. The two integer
+-- arguments specify the width of the sash bar (5) and the initial
+-- height of the top pane respectively.
+hsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout
+hsplit
+  = split True
+
+-- | Add a vertical sash bar between two windows. The two integer
+-- arguments specify the width of the sash bar (5) and the initial
+-- width of the left pane respectively. 
+vsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout
+vsplit
+  = split False
+
+split :: Bool -> SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout
+split splitHorizontal splitter sashWidth paneWidth pane1 pane2
+  = Splitter optionsDefault (downcastSplitterWindow splitter) pane1 pane2 splitHorizontal sashWidth paneWidth
+
+
+optionsDefault :: LayoutOptions
+optionsDefault
+  = LayoutOptions False False [] 10 AlignLeft AlignTop FillNone Nothing False
+
+
+
+
+
+{-----------------------------------------------------------------------------------------
+  Layout algorithm
+-----------------------------------------------------------------------------------------}
+-- | Abstract data type that represents the layout of controls in a window.
+data Layout = Grid      { options :: LayoutOptions, gap  :: Size, rows :: [[Layout]] }
+            | Widget    { options :: LayoutOptions, win  :: Window () }
+            | Spacer    { options :: LayoutOptions, spacesize :: Size   }
+            | Label     { options :: LayoutOptions, txt  :: String    }
+            | TextBox   { options :: LayoutOptions, txt  :: String, content :: Layout }
+            | Line      { options :: LayoutOptions, linesize :: Size }
+            | XSizer    { options :: LayoutOptions, xsizer :: Sizer () }
+            | WidgetContainer{ options :: LayoutOptions, win :: Window (), content :: Layout }
+            | XNotebook { options :: LayoutOptions, nbook :: Notebook (), pages :: [(String,Bitmap (),Layout)] }
+            | Splitter  { options :: LayoutOptions, splitter :: SplitterWindow ()
+                        , pane1 :: Layout, pane2 :: Layout
+                        , splitHorizontal :: Bool, sashWidth :: Int, paneWidth :: Int }
+
+data LayoutOptions
+           = LayoutOptions{ stretchH :: Bool, stretchV :: Bool
+                          , margins :: [Margin], marginW :: Int
+                          , alignH :: HAlign, alignV :: VAlign
+                          , fillMode :: FillMode
+                          , minSize  :: Maybe Size
+                          , adjustMinSize :: Bool
+                          }
+
+data FillMode = FillNone | FillShaped | Fill
+data HAlign   = AlignLeft | AlignRight | AlignHCentre
+data VAlign   = AlignTop | AlignBottom | AlignVCentre
+data Margin   = MarginTop | MarginLeft | MarginRight | MarginBottom
+
+-- | Fits a widget properly by calling 'windowReLayout' on
+-- the parent frame or dialog ('windowGetFrameParent').
+windowReFit :: Window a -> IO ()
+windowReFit w
+  = do p <- windowGetFrameParent w
+       windowReLayout p
+
+-- | Fits a widget properly by calling 'windowReLayout' on
+-- the parent frame or dialog ('windowGetFrameParent').
+windowReFitMinimal :: Window a -> IO ()
+windowReFitMinimal w
+  = do p <- windowGetFrameParent w
+       windowReLayoutMinimal p
+
+-- | Re-invoke layout algorithm to fit a window around its
+-- children. It will enlarge when the current
+-- client size is too small, but not shrink when the window
+-- is already large enough. (in contrast, 'windowReLayoutMinimal' will
+-- also shrink a window so that it always minimally sized).
+windowReLayout :: Window a -> IO ()
+windowReLayout w
+  = do windowLayout w
+       old <- windowGetClientSize w
+       szr <- windowGetSizer w
+       when (not (objectIsNull szr)) (sizerSetSizeHints szr w)
+       windowFit w
+       new <- windowGetClientSize w
+       windowSetClientSize w (sizeMax old new)
+
+-- | Re-invoke layout algorithm to fit a window around its
+-- children. It will resize the window to its minimal 
+-- acceptable size ('windowFit').
+windowReLayoutMinimal :: Window a -> IO ()  
+windowReLayoutMinimal w
+  = do windowLayout w
+       szr <- windowGetSizer w
+       when (not (objectIsNull szr)) (sizerSetSizeHints szr w)
+       windowFit w
+
+-- | Set the layout of a window (automatically calls 'sizerFromLayout').
+windowSetLayout :: Window a -> Layout -> IO ()
+windowSetLayout window layout
+  = do sizer <- sizerFromLayout window layout
+       windowSetAutoLayout window True
+       windowSetSizer window sizer
+       sizerSetSizeHints sizer window
+       return ()
+
+-- | Create a 'Sizer' from a 'Layout' and a parent window.
+sizerFromLayout :: Window a -> Layout -> IO (Sizer ())
+sizerFromLayout parent layout
+  = insert objectNull (grid 0 0 [[stretch layout]])
+  where
+    insert :: Sizer () -> Layout -> IO (Sizer ())
+    insert container (Spacer options sz)
+      = do sizerAddWithOptions 0 (sizerAdd container sz) (\sz -> return ()) options
+           return container
+
+    insert container (Widget options win)
+      = do sizerAddWindowWithOptions container win options
+           return container
+
+    insert container (Grid goptions gap rows)
+      = do g <- flexGridSizerCreate (length rows) (maximum (map length rows)) (sizeH gap) (sizeW gap)
+           mapM_ (stretchRow g) (zip [0..] (map (all (stretchV.options)) rows))
+           mapM_ (stretchCol g) (zip [0..] (map (all (stretchH.options)) (transpose rows)))
+           mapM_ (insert (downcastSizer g)) (concat rows)
+           when (container /= objectNull) 
+             (sizerAddSizerWithOptions container g goptions)
+           return (downcastSizer g)
+
+    insert container (Label options txt)
+      = do t <- staticTextCreate parent idAny txt rectNull 0
+           sizerAddWindowWithOptions container t options
+           return container
+
+    insert container (TextBox options txt layout)
+      = do box   <- staticBoxCreate parent idAny txt rectNull (wxCLIP_CHILDREN .+. wxNO_FULL_REPAINT_ON_RESIZE)
+           sizer <- staticBoxSizerCreate box wxVERTICAL
+           insert (downcastSizer sizer) layout
+           when (container /= objectNull) 
+             (sizerAddSizerWithOptions container sizer options)
+           windowLower box
+           return (downcastSizer sizer)
+
+    insert container (Line options (Size w h))
+      = do l <- staticLineCreate parent idAny (rectNull{ rectWidth = w, rectHeight = h }) 
+                  (if (w >= h) then wxHORIZONTAL else wxVERTICAL)
+           sizerAddWindowWithOptions container l options
+           return container
+
+    insert container (XSizer options sizer)
+      = do sizerAddSizerWithOptions container sizer options
+           return container
+
+    insert container (WidgetContainer options win layout)
+      = do windowSetLayout win layout -- recursively set the layout in the window itself
+           sizerAddWindowWithOptions container win options
+           return container
+
+    insert container (Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth)
+      = do splitterWindowSetMinimumPaneSize splitter 20
+           -- splitterWindowSetSashSize is obsolete
+           -- splitterWindowSetSashSize splitter sashWidth
+           sizerAddWindowWithOptions container splitter options
+           if splitHorizontal
+            then splitterWindowSplitHorizontally splitter win1 win2 paneWidth
+            else splitterWindowSplitVertically splitter win1 win2 paneWidth
+           paneSetLayout pane1
+           paneSetLayout pane2
+           
+           return container
+      where
+        win1  = getWinFromLayout pane1
+        win2  = getWinFromLayout pane2
+
+        getWinFromLayout layout
+          = case layout of
+              Widget _ win            -> downcastWindow win
+              WidgetContainer _ win _ -> downcastWindow win
+              Splitter _ splitter _ _ _ _ _ -> downcastWindow splitter
+              other                   -> error "Layout: hsplit/vsplit need widgets or containers as arguments"
+
+        paneSetLayout layout
+          = case layout of
+              Widget _ win            -> return ()
+              WidgetContainer options win layout -> windowSetLayout win layout
+              Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth 
+                                      ->  do splitterWindowSetMinimumPaneSize splitter 20
+                                             -- splitterWindowSetSashSize is obsolete
+                                             -- splitterWindowSetSashSize splitter sashWidth
+                                             -- sizerAddWindowWithOptions container splitter options
+                                             let win1 = getWinFromLayout pane1
+                                                 win2 = getWinFromLayout pane2
+                                             if splitHorizontal
+                                              then splitterWindowSplitHorizontally splitter win1 win2 paneWidth
+                                              else splitterWindowSplitVertically splitter win1 win2 paneWidth
+                                             paneSetLayout pane1
+                                             paneSetLayout pane2
+                                             return ()
+              other                   -> error "Layout: hsplit/vsplit need widgets or containers as arguments"
+
+
+    insert container (XNotebook options nbook pages)
+      = do pages' <- addImages objectNull pages
+           mapM_ addPage pages'
+           sizerAddWindowWithOptions container nbook options
+           return container
+      where
+        addPage (title,idx,WidgetContainer options win layout)
+          = do pagetitle <- if (null title)
+                             then windowGetLabel win
+                             else return title
+               notebookAddPage nbook win pagetitle False idx
+               windowSetLayout win layout  -- recursively set layout
+
+        addPage (title,idx,other)
+          = error "Graphics.UI.WXCore.sizerFromLayout: notebook page needs to be a 'container' layout!"
+
+        addImages il []
+          = if (objectIsNull il)
+             then return []
+             else do notebookAssignImageList nbook il
+                     return []
+
+        addImages il ((title,bm,layout):xs)   | objectIsNull bm 
+          = do xs' <- addImages il xs
+               return ((title,-1,layout):xs')
+
+        addImages il ((title,bm,layout):xs)
+          = do il' <- addImage il bm
+               i   <- imageListGetImageCount il'
+               xs' <- addImages il' xs
+               return ((title,i,layout):xs')
+
+        addImage il bm
+          = if (objectIsNull il)
+             then do w  <- bitmapGetWidth bm
+                     h  <- bitmapGetHeight bm
+                     il <- imageListCreate (sz w h) False 1
+                     imageListAddBitmap il bm objectNull
+                     return il
+             else do imageListAddBitmap il bm objectNull
+                     return il
+
+
+    stretchRow g (i,stretch)
+      = when stretch (flexGridSizerAddGrowableRow g i)
+
+    stretchCol g (i,stretch)
+      = when stretch (flexGridSizerAddGrowableCol g i)
+
+    
+
+    sizerAddWindowWithOptions :: Sizer a -> Window b -> LayoutOptions -> IO ()
+    sizerAddWindowWithOptions container window options
+      = sizerAddWithOptions (flagsAdjustMinSize window options) 
+                            (sizerAddWindow container window) (sizerSetItemMinSizeWindow container window) options
+
+    sizerAddSizerWithOptions :: Sizer a -> Sizer b -> LayoutOptions -> IO ()
+    sizerAddSizerWithOptions container sizer options
+      = sizerAddWithOptions 0 (sizerAddSizer container sizer) (sizerSetItemMinSizeSizer container sizer) options
+           
+
+    sizerAddWithOptions :: Int -> (Int -> Int -> Int -> Ptr p -> IO ()) -> (Size -> IO ()) -> LayoutOptions -> IO ()
+    sizerAddWithOptions miscflags addSizer setMinSize options
+      = do addSizer 1 (flags options .+. miscflags) (marginW options) ptrNull
+           case minSize options of
+             Nothing -> return ()
+             Just sz -> setMinSize sz
+
+    flags options
+      = flagsFillMode (fillMode options) .+. flagsMargins (margins options)
+        .+. flagsHAlign (alignH options) .+. flagsVAlign (alignV options)
+
+    flagsFillMode fillMode
+      = case fillMode of
+          FillNone    -> 0
+          FillShaped  -> wxSHAPED
+          Fill        -> wxEXPAND
+
+    flagsHAlign halign
+      = case halign of
+          AlignLeft    -> wxALIGN_LEFT
+          AlignRight   -> wxALIGN_RIGHT
+          AlignHCentre -> wxALIGN_CENTRE_HORIZONTAL
+
+    flagsVAlign valign
+      = case valign of
+          AlignTop     -> wxALIGN_TOP
+          AlignBottom  -> wxALIGN_BOTTOM
+          AlignVCentre -> wxALIGN_CENTRE_VERTICAL
+
+    flagsMargins margins
+      = bits (map flagsMargin margins)
+
+    flagsMargin margin
+      = case margin of
+          MarginTop    -> wxTOP
+          MarginLeft   -> wxLEFT
+          MarginBottom -> wxBOTTOM
+          MarginRight  -> wxRIGHT
+ 
+--  wxADJUST_MINSIZE is deprecated 
+    flagsAdjustMinSize window options = 0
+{-
+      = if (adjustMinSize options) 
+         then wxADJUST_MINSIZE
+         else 0
+-}
+
+{-      
+        case minSize options of
+          Nothing | -- dleijen: unfortunately, wxADJUST_MINSIZE has bugs for certain controls:
+                    not ( instanceOf window classGauge || instanceOf window classGauge95 
+                         || instanceOf window classGaugeMSW 
+                         || instanceOf window classSlider || instanceOf window classSlider95 
+                         || instanceOf window classSliderMSW 
+                        )
+                  -> wxADJUST_MINSIZE
+          other   -> 0
+-}
src/haskell/Graphics/UI/WXCore/Print.hs view
@@ -1,358 +1,358 @@-------------------------------------------------------------------------------------------{-|	Module      :  Print-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Printer abstraction layer. See @samples/wx/Print.hs@ for a demo.--The application should create a 'pageSetupDialog' to hold the printer-settings of the user.--> f <- frame [text := "Print demo"]                               -> -> -- Create a pageSetup dialog with an initial margin of 25 mm.-> pageSetup <- pageSetupDialog f 25--The dialog can be shown using 'pageSetupShowModal'. Furthermore, the -function 'printDialog' and 'printPreview' can be used to show a print dialog-and preview window.--> mprint   <- menuItem file ->                [ text := "&Print..."->                , help := "Print a test"->                , on command := printDialog pageSetup "Test"  pageFun printFun->                ]-> mpreview <- menuItem file ->                [ text := "&Print preview"->                , help := "Print preview"->                , on command := printPreview pageSetup "Test" pageFun printFun --Those functions take a 'PageFunction' and 'PrintFunction' respectively that get called-to determine the number of needed pages and to draw on the printer DC respectively.-The framework takes automatic care of printer margins, preview scaling etc.---}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Print( -- * Printing-                                 pageSetupDialog-                               , pageSetupShowModal-                               , printDialog-                               , printPreview-                                 -- * Callbacks-                               , PageFunction-                               , PrintFunction-                                 -- * Page and printer info-                               , PageInfo(..)-                               , PrintInfo(..)-                                 -- * Internal-                               , pageSetupDataGetPageInfo, pageSetupDataSetPageInfo-                               , printOutGetPrintInfo-                               , pageSetupDialogGetFrame-                               ) where--import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Events-import Graphics.UI.WXCore.Frame---- | Return a page range given page info, print info, and the printable size.--- The printable size is the number of pixels available for printing --- without the page margins.-type PageFunction    = PageInfo -> PrintInfo -> Size -> (Int,Int)---- | Print a page given page info, print info, the printable size, the--- printer device context and the current page.--- The printable size is the number of pixels available for printing --- without the page margins-type PrintFunction   = PageInfo -> PrintInfo -> Size -> DC () -> Int -> IO ()---{---------------------------------------------------------------------------   Handle print events---------------------------------------------------------------------------}  --- | The standard print event handler-onPrint :: Bool {- preview? -} -            -> PageInfo -> Printout (CWXCPrintout a)-            -> PageFunction-            -> PrintFunction -            -> EventPrint -> IO ()-onPrint isPreview pageInfo printOut pageRangeFunction printFunction ev -  = case ev of-      PrintPrepare ->-        do{ printOutInitPageRange printOut pageInfo pageRangeFunction-          ; return ()-          }-      PrintPage cancel dc n ->-        do{ printInfo <- printOutGetPrintInfo printOut-          ; let io info size = printFunction pageInfo info size dc n -          ; if isPreview -             then do let previewInfo = toScreenInfo printInfo-                     (scaleX,scaleY) <- getPreviewZoom pageInfo previewInfo dc                     -                     dcScale dc scaleX scaleY (respectMargin pageInfo previewInfo dc (io previewInfo))-             else respectMargin pageInfo printInfo dc (io printInfo)-          }        -      _ -> return ()----- | Set a clipping region and device origin according to the margin-respectMargin :: PageInfo -> PrintInfo -> DC a -> (Size -> IO b) -> IO b-respectMargin pageInfo printInfo dc io-  = do let ((left,top),printSize) = printableArea pageInfo printInfo--       -- the device origin is in unscaled coordinates-       scaleX <- dcGetUserScaleX dc-       scaleY <- dcGetUserScaleY dc-       dcSetDeviceOrigin dc (pt (round (scaleX*left)) (round (scaleY*top)))--       -- the clipping respects the scaling-       dcSetClippingRegion dc (rect (pt 0 0) printSize)-       io printSize---- | Calculate the printable area-printableArea :: PageInfo -> PrintInfo -> ((Double,Double),Size)-printableArea pageInfo printInfo-  = let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo)-        (ppmmW,ppmmH)   = ppiToPPMM (printerPPI printInfo)--        -- calculate minimal printer margin-        minX  = (toDouble (sizeW (pageSize pageInfo)) - printW)/2  -        minY  = (toDouble (sizeH (pageSize pageInfo)) - printH)/2--        -- top-left margin-        top   = ppmmH * (max minY (toDouble $ rectTop  $ pageArea pageInfo))-        left  = ppmmW * (max minX (toDouble $ rectLeft $ pageArea pageInfo))--        -- bottom-right margin-        (Point mright mbottom) -             = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo))          -        bottom= ppmmH * (max minY (toDouble mbottom))-        right = ppmmW * (max minX (toDouble mright))--	dw = round (right + left)-	dh = round (bottom + top)-	(dw', dh') = if sizeW (printPageSize printInfo) < sizeH (printPageSize printInfo)-		     then (dw, dh)-		     else (dh, dw)--        -- the actual printable page size-        printSize = sz (sizeW (printPageSize printInfo) - dw') -                      (sizeH (printPageSize printInfo) - dh')-    in ((left,top),printSize) ---- | Get the zoom factor from the preview -getPreviewZoom :: PageInfo -> PrintInfo -> DC a -> IO (Double,Double)-getPreviewZoom pageInfo printInfo dc-  = do size <- dcGetSize dc-       let (printW,printH)   = pixelToMM (printerPPI printInfo) (printPageSize printInfo)-           (screenW,screenH) = pixelToMM (screenPPI printInfo) size-           scaleX       = screenW / printW-           scaleY       = screenH / printH-       return (scaleX,scaleY)----- | Transform printer info to screen printer info (for the preview).-toScreenInfo :: PrintInfo -> PrintInfo-toScreenInfo printInfo-  = let scaleX  = (toDouble (sizeW (screenPPI printInfo))) / (toDouble (sizeW (printerPPI printInfo)))-        scaleY  = (toDouble (sizeH (screenPPI printInfo))) / (toDouble (sizeH (printerPPI printInfo)))-        pxX     = round (scaleX * (toDouble (sizeW (printPageSize printInfo))))-        pxY     = round (scaleY * (toDouble (sizeH (printPageSize printInfo))))-    in printInfo{ printerPPI    = screenPPI printInfo-                , printPageSize = sz pxX pxY-                }---- | Pixels to millimeters given a PPI-pixelToMM :: Size -> Size -> (Double,Double)-pixelToMM ppi size-  = let convert f  = toDouble (f size) / (toDouble (f ppi) / 25.4)-    in (convert sizeW, convert sizeH)---- | pixels per inch to pixels per millimeter-ppiToPPMM :: Size -> (Double,Double)-ppiToPPMM ppi-  = let convert f  = toDouble (f ppi) / 25.4-    in (convert sizeW, convert sizeH)---- | Convert an 'Int' to a 'Double'.-toDouble :: Int -> Double-toDouble i = fromIntegral i---- | Scale the 'DC'.-dcScale :: DC a -> Double -> Double -> IO b -> IO b-dcScale dc scaleX scaleY io-  = do oldX <- dcGetUserScaleX dc-       oldY <- dcGetUserScaleY dc-       dcSetUserScale dc (oldX*scaleX) (oldY*scaleY)-       x <- io-       dcSetUserScale dc oldX oldY-       return x--{---------------------------------------------------------------------------  preview and printIt---------------------------------------------------------------------------}--- | Show a print dialog.-printDialog :: PageSetupDialog a -          -> String-          -> PageFunction-          -> PrintFunction -          -> IO ()-printDialog pageSetupDialog title pageRangeFunction printFunction =-  do{ pageSetupData    <- pageSetupDialogGetPageSetupData pageSetupDialog-    ; printData        <- pageSetupDialogDataGetPrintData pageSetupData-    ; printDialogData  <- printDialogDataCreateFromData printData-    ; printDialogDataSetAllPages printDialogData True -    ; printer          <- printerCreate printDialogData-    ; printout         <- wxcPrintoutCreate title-    ; pageInfo         <- pageSetupDataGetPageInfo pageSetupData-    ; printOutInitPageRange printout pageInfo pageRangeFunction-    ; printOutOnPrint printout (onPrint False pageInfo printout pageRangeFunction printFunction)-    ; frame            <- pageSetupDialogGetFrame pageSetupDialog-    ; printerPrint printer frame printout True {- show printer setup? -}-    ; objectDelete printDialogData-    ; objectDelete printout-    ; objectDelete printer-    }---- | Show a preview window-printPreview :: PageSetupDialog a -           -> String-           -> PageFunction-           -> PrintFunction-           -> IO ()-printPreview pageSetupDialog title pageRangeFunction printFunction =-  do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog-    ; pageInfo      <- pageSetupDataGetPageInfo pageSetupData-    ; printout1     <- wxcPrintoutCreate "Print to preview"-    ; printout2     <- wxcPrintoutCreate "Print to printer"-    ; startPage     <- printOutInitPageRange printout1 pageInfo pageRangeFunction-    ;                  printOutInitPageRange printout2 pageInfo pageRangeFunction-    ; printOutOnPrint printout1 (onPrint True  pageInfo printout1 pageRangeFunction printFunction)-    ; printOutOnPrint printout2 (onPrint False pageInfo printout2 pageRangeFunction printFunction)-    ; printData        <- pageSetupDialogDataGetPrintData pageSetupData-    ; printDialogData  <- printDialogDataCreateFromData printData-    ; printDialogDataSetAllPages printDialogData True -    ; preview      <- printPreviewCreateFromDialogData printout1 printout2 printDialogData-    ; printPreviewSetCurrentPage preview startPage-    ; frame        <- pageSetupDialogGetFrame pageSetupDialog-    ; previewFrame <- previewFrameCreate preview frame title rectNull frameDefaultStyle title-    ; previewFrameInitialize previewFrame-    ; windowShow previewFrame -    ; windowRaise previewFrame-    }---{---------------------------------------------------------------------------  Class helpers---------------------------------------------------------------------------}---- | Set the correct page range for a printout.-printOutInitPageRange :: WXCPrintout a -> PageInfo -> PageFunction -> IO Int-printOutInitPageRange printOut pageInfo pageRangeFunction-  = do{ printInfo <- printOutGetPrintInfo printOut-      ; let (_,size)    = printableArea pageInfo printInfo-            (start,end) = pageRangeFunction pageInfo printInfo size-      ; wxcPrintoutSetPageLimits printOut start end start end-      ; return start-      }----- | Get the parent frame of a 'PageSetupDialog'.-pageSetupDialogGetFrame :: PageSetupDialog a -> IO (Frame ())-pageSetupDialogGetFrame pageSetupDialog-  = do p <- windowGetParent pageSetupDialog -       case (safeCast p classFrame) of-        Just frame  -> return frame-        Nothing     -> do w <- wxcAppGetTopWindow-                          case (safeCast w classFrame) of-                            Just frame -> return frame-                            Nothing    -> error "pageSetupDialogGetFrame: no parent frame found!"---{---------------------------------------------------------------------------    PageSetupDialog  ---------------------------------------------------------------------------}  --- | Create a (hidden) page setup dialog that remembers printer settings.--- It is a parameter to the functions 'printDialog' and 'printPreview'.--- The creation function takes a parent frame and the initial page margins--- (in millimeters) as an argument.-pageSetupDialog :: Frame a -> Int -> IO (PageSetupDialog ())-pageSetupDialog f margin-  = do pageSetupData  <- pageSetupDialogDataCreate-       if (margin > 0)-        then do pageInfo <- pageSetupDataGetPageInfo pageSetupData-                let p0      = pt margin margin-                    p1      = pointSub (pointFromSize (pageSize pageInfo)) p0-                    newInfo = pageInfo{ pageArea = rectBetween p0 p1 }-                pageSetupDataSetPageInfo pageSetupData newInfo-        else return ()                                                                                           -       pageSetupDialog <- pageSetupDialogCreate f pageSetupData-       prev <- windowGetOnClose f-       windowOnClose f (do{ objectDelete pageSetupDialog; prev })-       objectDelete pageSetupData-       return pageSetupDialog---- | Show the page setup dialog-pageSetupShowModal :: PageSetupDialog a -> IO ()-pageSetupShowModal p-  = do dialogShowModal p-       return ()--{---------------------------------------------------------------------------  PageInfo and PrintInfo---------------------------------------------------------------------------}---- | Information from the page setup dialog.---   All measurements are in millimeters.-data PageInfo = PageInfo{ pageSize :: Size  -- ^ The page size (in millimeters)-                        , pageArea :: Rect  -- ^ The available page area (=margins) (in millimeters)-                        } -                        deriving Show---- | Get page info-pageSetupDataGetPageInfo :: PageSetupDialogData a  -> IO PageInfo-pageSetupDataGetPageInfo pageSetupData -  = do{ topLeft     <- pageSetupDialogDataGetMarginTopLeft pageSetupData-      ; bottomRight <- pageSetupDialogDataGetMarginBottomRight pageSetupData-      ; paperSize   <- pageSetupDialogDataGetPaperSize pageSetupData-      ; return (PageInfo-          { pageSize   = paperSize-          , pageArea   = rectBetween topLeft (pointSub (pointFromSize paperSize) bottomRight)-          })-      }---- | Set page info-pageSetupDataSetPageInfo :: PageSetupDialogData a -> PageInfo -> IO ()-pageSetupDataSetPageInfo pageSetupData pageInfo-  = do{ let topLeft     = rectTopLeft (pageArea pageInfo)-            bottomRight = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo))-      ; pageSetupDialogDataSetMarginTopLeft pageSetupData topLeft-      ; pageSetupDialogDataSetMarginBottomRight pageSetupData bottomRight-      ; pageSetupDialogDataSetPaperSize pageSetupData (pageSize pageInfo)-      }----- | Printer information.-data PrintInfo = PrintInfo  { screenPPI         :: Size -- ^ screen pixels per inch-                            , printerPPI        :: Size -- ^ printer pixels per inch-                            , printPageSize     :: Size -- ^ printable area (in pixels) = PageInfo pageSize minus printer margins-                            } deriving Show---- | Extract print info    -printOutGetPrintInfo :: Printout a -> IO PrintInfo-printOutGetPrintInfo printOut -  = do{ thePrinterPPI     <- printoutGetPPIPrinter printOut-      ; theScreenPPI      <- printoutGetPPIScreen printOut-      ; thePageSizePixels <- printoutGetPageSizePixels printOut-      ; return (PrintInfo -          { printerPPI  = sizeFromPoint thePrinterPPI-          , screenPPI   = sizeFromPoint theScreenPPI-          , printPageSize = thePageSizePixels-          })-      } -+-----------------------------------------------------------------------------------------
+{-|	Module      :  Print
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Printer abstraction layer. See @samples/wx/Print.hs@ for a demo.
+
+The application should create a 'pageSetupDialog' to hold the printer
+settings of the user.
+
+> f <- frame [text := "Print demo"]                               
+> 
+> -- Create a pageSetup dialog with an initial margin of 25 mm.
+> pageSetup <- pageSetupDialog f 25
+
+The dialog can be shown using 'pageSetupShowModal'. Furthermore, the 
+function 'printDialog' and 'printPreview' can be used to show a print dialog
+and preview window.
+
+> mprint   <- menuItem file 
+>                [ text := "&Print..."
+>                , help := "Print a test"
+>                , on command := printDialog pageSetup "Test"  pageFun printFun
+>                ]
+> mpreview <- menuItem file 
+>                [ text := "&Print preview"
+>                , help := "Print preview"
+>                , on command := printPreview pageSetup "Test" pageFun printFun 
+
+Those functions take a 'PageFunction' and 'PrintFunction' respectively that get called
+to determine the number of needed pages and to draw on the printer DC respectively.
+The framework takes automatic care of printer margins, preview scaling etc.
+
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Print( -- * Printing
+                                 pageSetupDialog
+                               , pageSetupShowModal
+                               , printDialog
+                               , printPreview
+                                 -- * Callbacks
+                               , PageFunction
+                               , PrintFunction
+                                 -- * Page and printer info
+                               , PageInfo(..)
+                               , PrintInfo(..)
+                                 -- * Internal
+                               , pageSetupDataGetPageInfo, pageSetupDataSetPageInfo
+                               , printOutGetPrintInfo
+                               , pageSetupDialogGetFrame
+                               ) where
+
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.WxcClassInfo
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Events
+import Graphics.UI.WXCore.Frame
+
+-- | Return a page range given page info, print info, and the printable size.
+-- The printable size is the number of pixels available for printing 
+-- without the page margins.
+type PageFunction    = PageInfo -> PrintInfo -> Size -> (Int,Int)
+
+-- | Print a page given page info, print info, the printable size, the
+-- printer device context and the current page.
+-- The printable size is the number of pixels available for printing 
+-- without the page margins
+type PrintFunction   = PageInfo -> PrintInfo -> Size -> DC () -> Int -> IO ()
+
+
+{--------------------------------------------------------------------------
+   Handle print events
+--------------------------------------------------------------------------}  
+-- | The standard print event handler
+onPrint :: Bool {- preview? -} 
+            -> PageInfo -> Printout (CWXCPrintout a)
+            -> PageFunction
+            -> PrintFunction 
+            -> EventPrint -> IO ()
+onPrint isPreview pageInfo printOut pageRangeFunction printFunction ev 
+  = case ev of
+      PrintPrepare ->
+        do{ printOutInitPageRange printOut pageInfo pageRangeFunction
+          ; return ()
+          }
+      PrintPage cancel dc n ->
+        do{ printInfo <- printOutGetPrintInfo printOut
+          ; let io info size = printFunction pageInfo info size dc n 
+          ; if isPreview 
+             then do let previewInfo = toScreenInfo printInfo
+                     (scaleX,scaleY) <- getPreviewZoom pageInfo previewInfo dc                     
+                     dcScale dc scaleX scaleY (respectMargin pageInfo previewInfo dc (io previewInfo))
+             else respectMargin pageInfo printInfo dc (io printInfo)
+          }        
+      _ -> return ()
+
+
+-- | Set a clipping region and device origin according to the margin
+respectMargin :: PageInfo -> PrintInfo -> DC a -> (Size -> IO b) -> IO b
+respectMargin pageInfo printInfo dc io
+  = do let ((left,top),printSize) = printableArea pageInfo printInfo
+
+       -- the device origin is in unscaled coordinates
+       scaleX <- dcGetUserScaleX dc
+       scaleY <- dcGetUserScaleY dc
+       dcSetDeviceOrigin dc (pt (round (scaleX*left)) (round (scaleY*top)))
+
+       -- the clipping respects the scaling
+       dcSetClippingRegion dc (rect (pt 0 0) printSize)
+       io printSize
+
+-- | Calculate the printable area
+printableArea :: PageInfo -> PrintInfo -> ((Double,Double),Size)
+printableArea pageInfo printInfo
+  = let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo)
+        (ppmmW,ppmmH)   = ppiToPPMM (printerPPI printInfo)
+
+        -- calculate minimal printer margin
+        minX  = (toDouble (sizeW (pageSize pageInfo)) - printW)/2  
+        minY  = (toDouble (sizeH (pageSize pageInfo)) - printH)/2
+
+        -- top-left margin
+        top   = ppmmH * (max minY (toDouble $ rectTop  $ pageArea pageInfo))
+        left  = ppmmW * (max minX (toDouble $ rectLeft $ pageArea pageInfo))
+
+        -- bottom-right margin
+        (Point mright mbottom) 
+             = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo))          
+        bottom= ppmmH * (max minY (toDouble mbottom))
+        right = ppmmW * (max minX (toDouble mright))
+
+	dw = round (right + left)
+	dh = round (bottom + top)
+	(dw', dh') = if sizeW (printPageSize printInfo) < sizeH (printPageSize printInfo)
+		     then (dw, dh)
+		     else (dh, dw)
+
+        -- the actual printable page size
+        printSize = sz (sizeW (printPageSize printInfo) - dw') 
+                      (sizeH (printPageSize printInfo) - dh')
+    in ((left,top),printSize) 
+
+-- | Get the zoom factor from the preview 
+getPreviewZoom :: PageInfo -> PrintInfo -> DC a -> IO (Double,Double)
+getPreviewZoom pageInfo printInfo dc
+  = do size <- dcGetSize dc
+       let (printW,printH)   = pixelToMM (printerPPI printInfo) (printPageSize printInfo)
+           (screenW,screenH) = pixelToMM (screenPPI printInfo) size
+           scaleX       = screenW / printW
+           scaleY       = screenH / printH
+       return (scaleX,scaleY)
+
+
+-- | Transform printer info to screen printer info (for the preview).
+toScreenInfo :: PrintInfo -> PrintInfo
+toScreenInfo printInfo
+  = let scaleX  = (toDouble (sizeW (screenPPI printInfo))) / (toDouble (sizeW (printerPPI printInfo)))
+        scaleY  = (toDouble (sizeH (screenPPI printInfo))) / (toDouble (sizeH (printerPPI printInfo)))
+        pxX     = round (scaleX * (toDouble (sizeW (printPageSize printInfo))))
+        pxY     = round (scaleY * (toDouble (sizeH (printPageSize printInfo))))
+    in printInfo{ printerPPI    = screenPPI printInfo
+                , printPageSize = sz pxX pxY
+                }
+
+-- | Pixels to millimeters given a PPI
+pixelToMM :: Size -> Size -> (Double,Double)
+pixelToMM ppi size
+  = let convert f  = toDouble (f size) / (toDouble (f ppi) / 25.4)
+    in (convert sizeW, convert sizeH)
+
+-- | pixels per inch to pixels per millimeter
+ppiToPPMM :: Size -> (Double,Double)
+ppiToPPMM ppi
+  = let convert f  = toDouble (f ppi) / 25.4
+    in (convert sizeW, convert sizeH)
+
+-- | Convert an 'Int' to a 'Double'.
+toDouble :: Int -> Double
+toDouble i = fromIntegral i
+
+-- | Scale the 'DC'.
+dcScale :: DC a -> Double -> Double -> IO b -> IO b
+dcScale dc scaleX scaleY io
+  = do oldX <- dcGetUserScaleX dc
+       oldY <- dcGetUserScaleY dc
+       dcSetUserScale dc (oldX*scaleX) (oldY*scaleY)
+       x <- io
+       dcSetUserScale dc oldX oldY
+       return x
+
+{--------------------------------------------------------------------------
+  preview and printIt
+--------------------------------------------------------------------------}
+-- | Show a print dialog.
+printDialog :: PageSetupDialog a 
+          -> String
+          -> PageFunction
+          -> PrintFunction 
+          -> IO ()
+printDialog pageSetupDialog title pageRangeFunction printFunction =
+  do{ pageSetupData    <- pageSetupDialogGetPageSetupData pageSetupDialog
+    ; printData        <- pageSetupDialogDataGetPrintData pageSetupData
+    ; printDialogData  <- printDialogDataCreateFromData printData
+    ; printDialogDataSetAllPages printDialogData True 
+    ; printer          <- printerCreate printDialogData
+    ; printout         <- wxcPrintoutCreate title
+    ; pageInfo         <- pageSetupDataGetPageInfo pageSetupData
+    ; printOutInitPageRange printout pageInfo pageRangeFunction
+    ; printOutOnPrint printout (onPrint False pageInfo printout pageRangeFunction printFunction)
+    ; frame            <- pageSetupDialogGetFrame pageSetupDialog
+    ; printerPrint printer frame printout True {- show printer setup? -}
+    ; objectDelete printDialogData
+    ; objectDelete printout
+    ; objectDelete printer
+    }
+
+-- | Show a preview window
+printPreview :: PageSetupDialog a 
+           -> String
+           -> PageFunction
+           -> PrintFunction
+           -> IO ()
+printPreview pageSetupDialog title pageRangeFunction printFunction =
+  do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog
+    ; pageInfo      <- pageSetupDataGetPageInfo pageSetupData
+    ; printout1     <- wxcPrintoutCreate "Print to preview"
+    ; printout2     <- wxcPrintoutCreate "Print to printer"
+    ; startPage     <- printOutInitPageRange printout1 pageInfo pageRangeFunction
+    ;                  printOutInitPageRange printout2 pageInfo pageRangeFunction
+    ; printOutOnPrint printout1 (onPrint True  pageInfo printout1 pageRangeFunction printFunction)
+    ; printOutOnPrint printout2 (onPrint False pageInfo printout2 pageRangeFunction printFunction)
+    ; printData        <- pageSetupDialogDataGetPrintData pageSetupData
+    ; printDialogData  <- printDialogDataCreateFromData printData
+    ; printDialogDataSetAllPages printDialogData True 
+    ; preview      <- printPreviewCreateFromDialogData printout1 printout2 printDialogData
+    ; printPreviewSetCurrentPage preview startPage
+    ; frame        <- pageSetupDialogGetFrame pageSetupDialog
+    ; previewFrame <- previewFrameCreate preview frame title rectNull frameDefaultStyle title
+    ; previewFrameInitialize previewFrame
+    ; windowShow previewFrame 
+    ; windowRaise previewFrame
+    }
+
+
+{--------------------------------------------------------------------------
+  Class helpers
+--------------------------------------------------------------------------}
+
+-- | Set the correct page range for a printout.
+printOutInitPageRange :: WXCPrintout a -> PageInfo -> PageFunction -> IO Int
+printOutInitPageRange printOut pageInfo pageRangeFunction
+  = do{ printInfo <- printOutGetPrintInfo printOut
+      ; let (_,size)    = printableArea pageInfo printInfo
+            (start,end) = pageRangeFunction pageInfo printInfo size
+      ; wxcPrintoutSetPageLimits printOut start end start end
+      ; return start
+      }
+
+
+-- | Get the parent frame of a 'PageSetupDialog'.
+pageSetupDialogGetFrame :: PageSetupDialog a -> IO (Frame ())
+pageSetupDialogGetFrame pageSetupDialog
+  = do p <- windowGetParent pageSetupDialog 
+       case (safeCast p classFrame) of
+        Just frame  -> return frame
+        Nothing     -> do w <- wxcAppGetTopWindow
+                          case (safeCast w classFrame) of
+                            Just frame -> return frame
+                            Nothing    -> error "pageSetupDialogGetFrame: no parent frame found!"
+
+
+{--------------------------------------------------------------------------
+    PageSetupDialog  
+--------------------------------------------------------------------------}  
+-- | Create a (hidden) page setup dialog that remembers printer settings.
+-- It is a parameter to the functions 'printDialog' and 'printPreview'.
+-- The creation function takes a parent frame and the initial page margins
+-- (in millimeters) as an argument.
+pageSetupDialog :: Frame a -> Int -> IO (PageSetupDialog ())
+pageSetupDialog f margin
+  = do pageSetupData  <- pageSetupDialogDataCreate
+       if (margin > 0)
+        then do pageInfo <- pageSetupDataGetPageInfo pageSetupData
+                let p0      = pt margin margin
+                    p1      = pointSub (pointFromSize (pageSize pageInfo)) p0
+                    newInfo = pageInfo{ pageArea = rectBetween p0 p1 }
+                pageSetupDataSetPageInfo pageSetupData newInfo
+        else return ()                                                                                           
+       pageSetupDialog <- pageSetupDialogCreate f pageSetupData
+       prev <- windowGetOnClose f
+       windowOnClose f (do{ objectDelete pageSetupDialog; prev })
+       objectDelete pageSetupData
+       return pageSetupDialog
+
+-- | Show the page setup dialog
+pageSetupShowModal :: PageSetupDialog a -> IO ()
+pageSetupShowModal p
+  = do dialogShowModal p
+       return ()
+
+{--------------------------------------------------------------------------
+  PageInfo and PrintInfo
+--------------------------------------------------------------------------}
+
+-- | Information from the page setup dialog.
+--   All measurements are in millimeters.
+data PageInfo = PageInfo{ pageSize :: Size  -- ^ The page size (in millimeters)
+                        , pageArea :: Rect  -- ^ The available page area (=margins) (in millimeters)
+                        } 
+                        deriving Show
+
+-- | Get page info
+pageSetupDataGetPageInfo :: PageSetupDialogData a  -> IO PageInfo
+pageSetupDataGetPageInfo pageSetupData 
+  = do{ topLeft     <- pageSetupDialogDataGetMarginTopLeft pageSetupData
+      ; bottomRight <- pageSetupDialogDataGetMarginBottomRight pageSetupData
+      ; paperSize   <- pageSetupDialogDataGetPaperSize pageSetupData
+      ; return (PageInfo
+          { pageSize   = paperSize
+          , pageArea   = rectBetween topLeft (pointSub (pointFromSize paperSize) bottomRight)
+          })
+      }
+
+-- | Set page info
+pageSetupDataSetPageInfo :: PageSetupDialogData a -> PageInfo -> IO ()
+pageSetupDataSetPageInfo pageSetupData pageInfo
+  = do{ let topLeft     = rectTopLeft (pageArea pageInfo)
+            bottomRight = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo))
+      ; pageSetupDialogDataSetMarginTopLeft pageSetupData topLeft
+      ; pageSetupDialogDataSetMarginBottomRight pageSetupData bottomRight
+      ; pageSetupDialogDataSetPaperSize pageSetupData (pageSize pageInfo)
+      }
+
+
+-- | Printer information.
+data PrintInfo = PrintInfo  { screenPPI         :: Size -- ^ screen pixels per inch
+                            , printerPPI        :: Size -- ^ printer pixels per inch
+                            , printPageSize     :: Size -- ^ printable area (in pixels) = PageInfo pageSize minus printer margins
+                            } deriving Show
+
+-- | Extract print info    
+printOutGetPrintInfo :: Printout a -> IO PrintInfo
+printOutGetPrintInfo printOut 
+  = do{ thePrinterPPI     <- printoutGetPPIPrinter printOut
+      ; theScreenPPI      <- printoutGetPPIScreen printOut
+      ; thePageSizePixels <- printoutGetPageSizePixels printOut
+      ; return (PrintInfo 
+          { printerPPI  = sizeFromPoint thePrinterPPI
+          , screenPPI   = sizeFromPoint theScreenPPI
+          , printPageSize = thePageSizePixels
+          })
+      } 
+
src/haskell/Graphics/UI/WXCore/Process.hs view
@@ -1,314 +1,314 @@-------------------------------------------------------------------------------------------{-|	Module      :  Process-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Process and stream wrappers.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Process-        (-        -- * Process-          OnReceive, OnEndProcess-        , processExecAsyncTimed, processExecAsync-        -- * Streams-        , StreamStatus(..)-        , streamBaseStatus-        -- * Blocking IO-        , inputStreamGetContents-        , inputStreamGetContentsN-        , inputStreamGetLine-        , inputStreamGetString-        , inputStreamGetChar-        , outputStreamPutString-        -- * Non-blocking IO-        , inputStreamGetLineNoWait-        , inputStreamGetStringNoWait-        , inputStreamGetCharNoWait-        , outputStreamPutStringNoWait-        ) where--import System.IO.Unsafe( unsafeInterleaveIO )-import Graphics.UI.WXCore.WxcTypes( ptrCast )-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Events--import Foreign-import Foreign.Ptr-import Foreign.Storable-import Foreign.C.String-import Foreign.C.Types--  ---- | Write a string to an output stream, potentially blocking--- until all output has been written.-outputStreamPutString :: OutputStream a -> String -> IO ()-outputStreamPutString outputStream s-  = withCString s $ \cstr -> write cstr (length s)-  where-    write cstr n-      = do outputStreamWrite outputStream cstr n-           m <- outputStreamLastWrite outputStream-           if (m < n && m > 0 {- prevent infinite loop -} )-            then write (advancePtr cstr m) (n - m)-            else return ()-      ---- | Write a string to an output stream, returning the--- number of bytes actually written.-outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int-outputStreamPutStringNoWait outputStream s-  = withCString s $ \cstr ->-    do outputStreamWrite outputStream cstr (length s)-       outputStreamLastWrite outputStream---- | @inputStreamGetLineNoWait stream n@ reads a line of at most @n@ characters from the--- input stream in a non-blocking way. The function does automatic end-of-line--- conversion. If the line ends with @\\n@, an entire line--- has been read, otherwise, either the maximum has been reached, or no more--- input was available.-inputStreamGetLineNoWait :: InputStream a -> Int -> IO String-inputStreamGetLineNoWait inputStream max-  = read "" 0-  where-    read acc n-      = if n >= max-         then return (reverse acc)-         else do mbc <- inputStreamGetCharNoWait inputStream-                 case mbc of-                  Nothing    -> return (reverse acc)-                  Just '\n'  -> return (reverse ('\n':acc))-                  Just '\r'  -> do mbc2 <- inputStreamGetCharNoWait inputStream-                                   case mbc2 of-                                     Just c2  | c2 /= '\n' -> do inputStreamUngetch inputStream c2-                                                                 return ()-                                     _        -> return ()-                                   return (reverse ('\n':acc))-                  Just c     -> read (c:acc) (n+1)---- | @inputStreamGetStringNoWait stream n@ reads a line of at most @n@ characters from the--- input stream in a non-blocking way. -inputStreamGetStringNoWait :: InputStream a -> Int -> IO String-inputStreamGetStringNoWait input max-  = read "" 0-  where-    read acc n-      = if ( n >= max )-         then return (reverse acc)-         else do mbc <- inputStreamGetCharNoWait input-                 case mbc of-                   Nothing -> return (reverse acc)-                   Just c  -> read (c:acc) (n+1)----- | Read a single character from the input, returning @Nothing@ if no input--- was available (using 'inputStreamCanRead').-inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char)-inputStreamGetCharNoWait input-  = do canRead <- inputStreamCanRead input-       if canRead-        then do c <- inputStreamGetC input-                return (Just c)-        else return Nothing----- | @inputStreamGetLine s n@ reads a line of at most @n@ characters from the--- input stream (potentially waiting for input). The function does automatic end-of-line--- conversion. If the line ends with @\\n@, an entire line--- has been read, otherwise, either the maximum has been reached, or no more--- input was available.-inputStreamGetLine :: InputStream a -> Int -> IO String-inputStreamGetLine inputStream max-  = read "" 0-  where-    read acc n-      = if n >= max-         then return (reverse acc)-         else do c <- inputStreamGetChar inputStream-                 case c of-                  '\n'  -> return (reverse ('\n':acc))-                  '\r'  -> do mbc2 <- inputStreamGetCharNoWait inputStream-                              case mbc2 of-                                Just c2  | c2 /= '\n' -> do inputStreamUngetch inputStream c2-                                                            return ()-                                _        -> return ()-                              return (reverse ('\n':acc))-                  _     -> read (c:acc) (n+1)---- | Read a single character from the input. (equals 'inputStreamGetC')-inputStreamGetChar :: InputStream a -> IO Char-inputStreamGetChar input-  = inputStreamGetC input----- | The expression (@inputStreamGetString n input@) reads a string of maximally--- @n@ characters from @input@.-inputStreamGetString :: InputStream a -> Int -> IO String-inputStreamGetString inputStream n-  = allocaBytes (n+1) $ \buffer ->-    do inputStreamRead inputStream buffer n-       nread <- inputStreamLastRead inputStream-       mapM (peekChar buffer) [0..nread-1]-  where       -    peekChar :: Ptr CChar -> Int -> IO Char-    peekChar p ofs-      = do cchar <- peekElemOff p ofs-           return (castCCharToChar cchar)------ | Get the entire contents of an input stream. The content--- is returned as a lazy stream (like 'hGetContents').-inputStreamGetContents :: InputStream a -> IO String-inputStreamGetContents inputStream-  = inputStreamGetContentsN inputStream 1---- | Get the entire contents of an input stream. The content--- is returned as a lazy stream (like 'hGetContents'). The--- contents are returned in lazy /batches/, whose size is--- determined by the first parameter.-inputStreamGetContentsN :: InputStream a -> Int -> IO String-inputStreamGetContentsN inputStream n-  = do status <- streamBaseGetLastError inputStream-       if (status == wxSTREAM_NO_ERROR)-        then do x  <- inputStreamGetString inputStream n-                xs <- unsafeInterleaveIO (inputStreamGetContentsN inputStream n)-                return (x ++ xs)-        else return ""---- | Return the status of the stream-streamBaseStatus :: StreamBase a -> IO StreamStatus-streamBaseStatus stream-  = do code <- streamBaseGetLastError stream-       return (streamStatusFromInt code)---- | Type of input receiver function.-type OnReceive     = String -> StreamStatus -> IO ()---- | Type of end-of-process event handler. Gets the exitcode as its argument.-type OnEndProcess  = Int -> IO ()------ | (@processExecAsyncTimer command processOutputOnEnd onEndProcess onOutput onErrorOutput parent@) starts--- the @command@ asynchronously. The handler @onEndProcess@ is called when the process--- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives--- output from @stderr@. If @processOutputOnEnd@ is 'True', the remaining output of a terminated--- process is processed (calling @onOutput@). The call returns a triple (@send,process,pid@):--- The @send@ function is used to send input to the @stdin@ pipe of the process. The--- process object is returned in @process@ and the process identifier in @pid@.------ Note: The method uses idle event timers to process the output channels. On--- many platforms this is uch more thrustworthy and robust than the 'processExecAsync' that--- uses threads (which can cause all kinds of portability problems).-processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive-                      -> IO (String -> IO StreamStatus, Process (), Int)-processExecAsyncTimed parent cmd readInputOnEnd onEndProcess onOutput onErrOutput-  = do process    <- processCreateDefault parent idAny-       processRedirect process-       pid        <- wxcAppExecuteProcess cmd wxEXEC_ASYNC process-       if (pid == 0)-        then return (\s -> return StreamEof, objectNull, pid)-        else do v <- varCreate (Just process)-                windowOnIdle parent (handleAnyInput v)-                unregister <- appRegisterIdle 100           -- 10 times a second-                evtHandlerOnEndProcess parent (handleTerminate v unregister)-                let send txt = handleSend v txt-                return (send, process, pid)-  where-    maxLine :: Int-    maxLine = 160--    handleSend :: Var (Maybe (Process a)) -> String -> IO StreamStatus-    handleSend v txt-      = withProcess v StreamEof $ \process ->-        do outputPipe <- processGetOutputStream process-           outputStreamPutString outputPipe txt         -- TODO: use idle events to do output non-blocking?-           streamBaseStatus outputPipe-           -    handleAnyInput :: Var (Maybe (Process a)) -> IO Bool-    handleAnyInput v-      = withProcess v False $ \process ->-        do inputPipe <- processGetInputStream process -           available <- handleInput inputPipe onOutput  -- process some input on stdout-           errorPipe <- processGetErrorStream process           -           handleAllInput errorPipe onErrOutput         -- process all input on stderr-           return available--    handleAllInput :: InputStream a -> OnReceive -> IO ()-    handleAllInput input onOutput -      = do available <- handleInput input onOutput-           if (available)-            then handleAllInput input onOutput-            else return ()-    -    handleInput :: InputStream a -> OnReceive -> IO Bool-    handleInput input onOutput -      = do txt    <- inputStreamGetLineNoWait input maxLine-           status <- streamBaseStatus input-           if null txt -            then case status of-                   StreamOk -> return False-                   _        -> do onOutput "" status-                                  return False-            else do onOutput txt status-                    return True--    handleTerminate :: Var (Maybe (Process a)) -> IO () -> Int -> Int -> IO ()-    handleTerminate v unregister pid exitCode-      = do unregister-           withProcess v () $ \process -> -            do varSet v Nothing-               if (readInputOnEnd)-                then do inputPipe <- processGetInputStream process-                        handleAllInput inputPipe onOutput  -- handle remaining input-                else return ()-               onEndProcess exitCode-               processDelete process -               return ()--    withProcess v x f-      = do mb <- varGet v -           case mb of-             Nothing -> return x-             Just p  -> f p----{-# DEPRECATED processExecAsync "Use processExecAsyncTimed instead (if possible)" #-}--- | deprecated: use 'processExecAsyncTimed' instead (if possible).--- (@processExecAsync command bufferSize onEndProcess onOutput onErrorOutput parent@) starts--- the @command@ asynchronously. The handler @onEndProcess@ is called when the process--- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives--- output from @stderr@. The @bufferSize@ determines the intermediate buffer used to--- cache the output from those channels. The calls returns a triple (@send,process,pid@):--- The @send@ function is used to send input to the @stdin@ pipe of the process. The--- process object is returned in @process@ and the process identifier in @pid@.-processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive-                      -> IO (String -> IO (), Process (), Int)-processExecAsync parent command bufferSize onEndProcess onOutput onErrOutput-  = do process    <- processCreateDefault parent idAny-       processRedirect process-       pid        <- wxcAppExecuteProcess command wxEXEC_ASYNC process-       if (pid == 0)-        then return (\s -> return (), objectNull, pid)-        else do inputPipe  <- processGetInputStream process-                outputPipe <- processGetOutputStream process-                errorPipe  <- processGetErrorStream process-                evtHandlerOnEndProcess parent (handleOnEndProcess pid process inputPipe outputPipe errorPipe)-                evtHandlerOnInput parent onOutput inputPipe bufferSize-                evtHandlerOnInput parent onErrOutput errorPipe bufferSize-                let send txt   = outputStreamPutString outputPipe txt-                return (send, process, pid)-  where-    handleOnEndProcess ourPid process inputPipe outputPipe errorPipe pid exitcode-      | ourPid == pid  = do onEndProcess exitcode-                            processDelete process+-----------------------------------------------------------------------------------------
+{-|	Module      :  Process
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Process and stream wrappers.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Process
+        (
+        -- * Process
+          OnReceive, OnEndProcess
+        , processExecAsyncTimed, processExecAsync
+        -- * Streams
+        , StreamStatus(..)
+        , streamBaseStatus
+        -- * Blocking IO
+        , inputStreamGetContents
+        , inputStreamGetContentsN
+        , inputStreamGetLine
+        , inputStreamGetString
+        , inputStreamGetChar
+        , outputStreamPutString
+        -- * Non-blocking IO
+        , inputStreamGetLineNoWait
+        , inputStreamGetStringNoWait
+        , inputStreamGetCharNoWait
+        , outputStreamPutStringNoWait
+        ) where
+
+import System.IO.Unsafe( unsafeInterleaveIO )
+import Graphics.UI.WXCore.WxcTypes( ptrCast )
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses
+import Graphics.UI.WXCore.Types
+import Graphics.UI.WXCore.Events
+
+import Foreign
+import Foreign.Ptr
+import Foreign.Storable
+import Foreign.C.String
+import Foreign.C.Types
+
+  
+
+-- | Write a string to an output stream, potentially blocking
+-- until all output has been written.
+outputStreamPutString :: OutputStream a -> String -> IO ()
+outputStreamPutString outputStream s
+  = withCString s $ \cstr -> write cstr (length s)
+  where
+    write cstr n
+      = do outputStreamWrite outputStream cstr n
+           m <- outputStreamLastWrite outputStream
+           if (m < n && m > 0 {- prevent infinite loop -} )
+            then write (advancePtr cstr m) (n - m)
+            else return ()
+      
+
+-- | Write a string to an output stream, returning the
+-- number of bytes actually written.
+outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int
+outputStreamPutStringNoWait outputStream s
+  = withCString s $ \cstr ->
+    do outputStreamWrite outputStream cstr (length s)
+       outputStreamLastWrite outputStream
+
+-- | @inputStreamGetLineNoWait stream n@ reads a line of at most @n@ characters from the
+-- input stream in a non-blocking way. The function does automatic end-of-line
+-- conversion. If the line ends with @\\n@, an entire line
+-- has been read, otherwise, either the maximum has been reached, or no more
+-- input was available.
+inputStreamGetLineNoWait :: InputStream a -> Int -> IO String
+inputStreamGetLineNoWait inputStream max
+  = read "" 0
+  where
+    read acc n
+      = if n >= max
+         then return (reverse acc)
+         else do mbc <- inputStreamGetCharNoWait inputStream
+                 case mbc of
+                  Nothing    -> return (reverse acc)
+                  Just '\n'  -> return (reverse ('\n':acc))
+                  Just '\r'  -> do mbc2 <- inputStreamGetCharNoWait inputStream
+                                   case mbc2 of
+                                     Just c2  | c2 /= '\n' -> do inputStreamUngetch inputStream c2
+                                                                 return ()
+                                     _        -> return ()
+                                   return (reverse ('\n':acc))
+                  Just c     -> read (c:acc) (n+1)
+
+-- | @inputStreamGetStringNoWait stream n@ reads a line of at most @n@ characters from the
+-- input stream in a non-blocking way. 
+inputStreamGetStringNoWait :: InputStream a -> Int -> IO String
+inputStreamGetStringNoWait input max
+  = read "" 0
+  where
+    read acc n
+      = if ( n >= max )
+         then return (reverse acc)
+         else do mbc <- inputStreamGetCharNoWait input
+                 case mbc of
+                   Nothing -> return (reverse acc)
+                   Just c  -> read (c:acc) (n+1)
+
+
+-- | Read a single character from the input, returning @Nothing@ if no input
+-- was available (using 'inputStreamCanRead').
+inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char)
+inputStreamGetCharNoWait input
+  = do canRead <- inputStreamCanRead input
+       if canRead
+        then do c <- inputStreamGetC input
+                return (Just c)
+        else return Nothing
+
+
+-- | @inputStreamGetLine s n@ reads a line of at most @n@ characters from the
+-- input stream (potentially waiting for input). The function does automatic end-of-line
+-- conversion. If the line ends with @\\n@, an entire line
+-- has been read, otherwise, either the maximum has been reached, or no more
+-- input was available.
+inputStreamGetLine :: InputStream a -> Int -> IO String
+inputStreamGetLine inputStream max
+  = read "" 0
+  where
+    read acc n
+      = if n >= max
+         then return (reverse acc)
+         else do c <- inputStreamGetChar inputStream
+                 case c of
+                  '\n'  -> return (reverse ('\n':acc))
+                  '\r'  -> do mbc2 <- inputStreamGetCharNoWait inputStream
+                              case mbc2 of
+                                Just c2  | c2 /= '\n' -> do inputStreamUngetch inputStream c2
+                                                            return ()
+                                _        -> return ()
+                              return (reverse ('\n':acc))
+                  _     -> read (c:acc) (n+1)
+
+-- | Read a single character from the input. (equals 'inputStreamGetC')
+inputStreamGetChar :: InputStream a -> IO Char
+inputStreamGetChar input
+  = inputStreamGetC input
+
+
+-- | The expression (@inputStreamGetString n input@) reads a string of maximally
+-- @n@ characters from @input@.
+inputStreamGetString :: InputStream a -> Int -> IO String
+inputStreamGetString inputStream n
+  = allocaBytes (n+1) $ \buffer ->
+    do inputStreamRead inputStream buffer n
+       nread <- inputStreamLastRead inputStream
+       mapM (peekChar buffer) [0..nread-1]
+  where       
+    peekChar :: Ptr CChar -> Int -> IO Char
+    peekChar p ofs
+      = do cchar <- peekElemOff p ofs
+           return (castCCharToChar cchar)
+
+
+
+-- | Get the entire contents of an input stream. The content
+-- is returned as a lazy stream (like 'hGetContents').
+inputStreamGetContents :: InputStream a -> IO String
+inputStreamGetContents inputStream
+  = inputStreamGetContentsN inputStream 1
+
+-- | Get the entire contents of an input stream. The content
+-- is returned as a lazy stream (like 'hGetContents'). The
+-- contents are returned in lazy /batches/, whose size is
+-- determined by the first parameter.
+inputStreamGetContentsN :: InputStream a -> Int -> IO String
+inputStreamGetContentsN inputStream n
+  = do status <- streamBaseGetLastError inputStream
+       if (status == wxSTREAM_NO_ERROR)
+        then do x  <- inputStreamGetString inputStream n
+                xs <- unsafeInterleaveIO (inputStreamGetContentsN inputStream n)
+                return (x ++ xs)
+        else return ""
+
+-- | Return the status of the stream
+streamBaseStatus :: StreamBase a -> IO StreamStatus
+streamBaseStatus stream
+  = do code <- streamBaseGetLastError stream
+       return (streamStatusFromInt code)
+
+-- | Type of input receiver function.
+type OnReceive     = String -> StreamStatus -> IO ()
+
+-- | Type of end-of-process event handler. Gets the exitcode as its argument.
+type OnEndProcess  = Int -> IO ()
+
+
+
+-- | (@processExecAsyncTimer command processOutputOnEnd onEndProcess onOutput onErrorOutput parent@) starts
+-- the @command@ asynchronously. The handler @onEndProcess@ is called when the process
+-- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives
+-- output from @stderr@. If @processOutputOnEnd@ is 'True', the remaining output of a terminated
+-- process is processed (calling @onOutput@). The call returns a triple (@send,process,pid@):
+-- The @send@ function is used to send input to the @stdin@ pipe of the process. The
+-- process object is returned in @process@ and the process identifier in @pid@.
+--
+-- Note: The method uses idle event timers to process the output channels. On
+-- many platforms this is uch more thrustworthy and robust than the 'processExecAsync' that
+-- uses threads (which can cause all kinds of portability problems).
+processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive
+                      -> IO (String -> IO StreamStatus, Process (), Int)
+processExecAsyncTimed parent cmd readInputOnEnd onEndProcess onOutput onErrOutput
+  = do process    <- processCreateDefault parent idAny
+       processRedirect process
+       pid        <- wxcAppExecuteProcess cmd wxEXEC_ASYNC process
+       if (pid == 0)
+        then return (\s -> return StreamEof, objectNull, pid)
+        else do v <- varCreate (Just process)
+                windowOnIdle parent (handleAnyInput v)
+                unregister <- appRegisterIdle 100           -- 10 times a second
+                evtHandlerOnEndProcess parent (handleTerminate v unregister)
+                let send txt = handleSend v txt
+                return (send, process, pid)
+  where
+    maxLine :: Int
+    maxLine = 160
+
+    handleSend :: Var (Maybe (Process a)) -> String -> IO StreamStatus
+    handleSend v txt
+      = withProcess v StreamEof $ \process ->
+        do outputPipe <- processGetOutputStream process
+           outputStreamPutString outputPipe txt         -- TODO: use idle events to do output non-blocking?
+           streamBaseStatus outputPipe
+           
+    handleAnyInput :: Var (Maybe (Process a)) -> IO Bool
+    handleAnyInput v
+      = withProcess v False $ \process ->
+        do inputPipe <- processGetInputStream process 
+           available <- handleInput inputPipe onOutput  -- process some input on stdout
+           errorPipe <- processGetErrorStream process           
+           handleAllInput errorPipe onErrOutput         -- process all input on stderr
+           return available
+
+    handleAllInput :: InputStream a -> OnReceive -> IO ()
+    handleAllInput input onOutput 
+      = do available <- handleInput input onOutput
+           if (available)
+            then handleAllInput input onOutput
+            else return ()
+    
+    handleInput :: InputStream a -> OnReceive -> IO Bool
+    handleInput input onOutput 
+      = do txt    <- inputStreamGetLineNoWait input maxLine
+           status <- streamBaseStatus input
+           if null txt 
+            then case status of
+                   StreamOk -> return False
+                   _        -> do onOutput "" status
+                                  return False
+            else do onOutput txt status
+                    return True
+
+    handleTerminate :: Var (Maybe (Process a)) -> IO () -> Int -> Int -> IO ()
+    handleTerminate v unregister pid exitCode
+      = do unregister
+           withProcess v () $ \process -> 
+            do varSet v Nothing
+               if (readInputOnEnd)
+                then do inputPipe <- processGetInputStream process
+                        handleAllInput inputPipe onOutput  -- handle remaining input
+                else return ()
+               onEndProcess exitCode
+               processDelete process 
+               return ()
+
+    withProcess v x f
+      = do mb <- varGet v 
+           case mb of
+             Nothing -> return x
+             Just p  -> f p
+
+
+
+{-# DEPRECATED processExecAsync "Use processExecAsyncTimed instead (if possible)" #-}
+-- | deprecated: use 'processExecAsyncTimed' instead (if possible).
+-- (@processExecAsync command bufferSize onEndProcess onOutput onErrorOutput parent@) starts
+-- the @command@ asynchronously. The handler @onEndProcess@ is called when the process
+-- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives
+-- output from @stderr@. The @bufferSize@ determines the intermediate buffer used to
+-- cache the output from those channels. The calls returns a triple (@send,process,pid@):
+-- The @send@ function is used to send input to the @stdin@ pipe of the process. The
+-- process object is returned in @process@ and the process identifier in @pid@.
+processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive
+                      -> IO (String -> IO (), Process (), Int)
+processExecAsync parent command bufferSize onEndProcess onOutput onErrOutput
+  = do process    <- processCreateDefault parent idAny
+       processRedirect process
+       pid        <- wxcAppExecuteProcess command wxEXEC_ASYNC process
+       if (pid == 0)
+        then return (\s -> return (), objectNull, pid)
+        else do inputPipe  <- processGetInputStream process
+                outputPipe <- processGetOutputStream process
+                errorPipe  <- processGetErrorStream process
+                evtHandlerOnEndProcess parent (handleOnEndProcess pid process inputPipe outputPipe errorPipe)
+                evtHandlerOnInput parent onOutput inputPipe bufferSize
+                evtHandlerOnInput parent onErrOutput errorPipe bufferSize
+                let send txt   = outputStreamPutString outputPipe txt
+                return (send, process, pid)
+  where
+    handleOnEndProcess ourPid process inputPipe outputPipe errorPipe pid exitcode
+      | ourPid == pid  = do onEndProcess exitcode
+                            processDelete process
       | otherwise      = return ()
src/haskell/Graphics/UI/WXCore/Types.hs view
@@ -1,519 +1,519 @@-{-# LANGUAGE ForeignFunctionInterface, FlexibleInstances #-}-------------------------------------------------------------------------------------------{-|	Module      :  Types-	Copyright   :  (c) Daan Leijen 2003-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Basic types and operations.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Types(-            -- * Objects-              ( # )-            , Object, objectNull, objectIsNull, objectCast, objectIsManaged-            , objectDelete-            , withObjectPtr, withObjectRef-            , withObjectResult, withManagedObjectResult-            , objectFinalize, objectNoFinalize-            , objectFromPtr, managedObjectFromPtr-            ----            , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch--            -- * Identifiers-            , Id, idAny, idCreate--            -- * Bits-            , (.+.), (.-.)-            , bits-            , bitsSet--            -- * Control-            , unitIO, bracket, bracket_, finally, finalize, when--            -- * Variables-            , Var, varCreate, varGet, varSet, varUpdate, varSwap--            -- * Misc.-            , Style-            , EventId-            , TreeItem, treeItemInvalid, treeItemIsOk--            -- * Basic types--            -- ** Booleans-            , toCBool, fromCBool--            -- ** Colors-            , Color, rgb, colorRGB, colorRed, colorGreen, colorBlue, intFromColor, colorFromInt, colorIsOk, colorOk-            , black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white-            , red, green, blue-            , cyan, magenta, yellow-            -- *** System colors-            , SystemColor(..), colorSystem--            -- ** Points-            , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull-            , pointMove, pointMoveBySize, pointAdd, pointSub, pointScale--            -- ** Sizes-            , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull, sizeEncloses-            , sizeMin, sizeMax--            -- ** Vectors-            , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull-            , vecNegate, vecOrtogonal, vecAdd, vecSub, vecScale, vecBetween, vecLength-            , vecLengthDouble--            -- ** Rectangles-            , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)-            , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight-            , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty-            , rectContains, rectMoveTo, rectFromPoint, rectCentralPoint, rectCentralRect, rectStretchTo-            , rectCentralPointDouble, rectCentralRectDouble-            , rectMove, rectOverlaps, rectsDiff, rectUnion, rectOverlap, rectUnions--            ) where--import Data.List( (\\) )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses( wxcSystemSettingsGetColour )-import System.IO.Unsafe( unsafePerformIO )---- utility-import Data.Array-import Data.Bits-import Control.Concurrent.STM-import qualified Control.Exception as CE-import qualified Control.Monad as M---infixl 5 .+.-infixl 5 .-.-infix 5 #---- | Reverse application, i.e. @x # f@ = @f x@.--- Useful for an object oriented style of programming.------ > (frame # frameSetTitle) "hi"----( # ) :: obj -> (obj -> a) -> a-object # method   = method object---{---------------------------------------------------------------------------------  Bitmasks---------------------------------------------------------------------------------}--- | Bitwise /or/ of two bit masks.-(.+.) :: Int -> Int -> Int-(.+.) i j-  = i .|. j---- | Unset certain bits in a bitmask.-(.-.) :: Int -> BitFlag -> Int-(.-.) i j-  = i .&. complement j---- | Bitwise /or/ of a list of bit masks.-bits :: [Int] -> Int-bits xs-  = foldr (.+.) 0 xs---- | (@bitsSet mask i@) tests if all bits in @mask@ are also set in @i@.-bitsSet :: Int -> Int -> Bool-bitsSet mask i-  = (i .&. mask == mask)---{---------------------------------------------------------------------------------  Id---------------------------------------------------------------------------------}-{-# NOINLINE varTopId #-}-varTopId :: Var Id-varTopId-  = unsafePerformIO (varCreate (wxID_HIGHEST+1))---- | When creating a new window you may specify 'idAny' to let wxWidgets--- assign an unused identifier to it automatically. Furthermore, it can be--- used in an event connection to handle events for any identifier.-idAny :: Id-idAny-  = -1---- | Create a new unique identifier.-idCreate :: IO Id-idCreate-  = varUpdate varTopId (+1)----{---------------------------------------------------------------------------------  Control---------------------------------------------------------------------------------}--- | Ignore the result of an 'IO' action.-unitIO :: IO a -> IO ()-unitIO io-  = do io; return ()---- | Perform an action when a test succeeds.-when :: Bool -> IO () -> IO ()-when = M.when---- | Properly release resources, even in the event of an exception.-bracket :: IO a           -- ^ computation to run first (acquire resource)-           -> (a -> IO b) -- ^ computation to run last (release resource)-           -> (a -> IO c) -- ^ computation to run in-between (use resource)-           -> IO c-bracket = CE.bracket---- | Specialized variant of 'bracket' where the return value is not required.-bracket_ :: IO a     -- ^ computation to run first (acquire resource)-           -> IO b   -- ^ computation to run last (release resource)-           -> IO c   -- ^ computation to run in-between (use resource)-           -> IO c-bracket_ = CE.bracket_---- | Run some computation afterwards, even if an exception occurs.-finally :: IO a -- ^ computation to run first-        -> IO b -- ^ computation to run last (release resource)-        -> IO a-finally = CE.finally---- | Run some computation afterwards, even if an exception occurs. Equals 'finally' but--- with the arguments swapped.-finalize ::  IO b -- ^ computation to run last (release resource)-          -> IO a -- ^ computation to run first-          -> IO a-finalize last first-  = finally first last--{---------------------------------------------------------------------------------  Variables---------------------------------------------------------------------------------}---- | A mutable variable. Use this instead of 'MVar's or 'IORef's to accomodate for--- future expansions with possible concurrency.-type Var a  = TVar a---- | Create a fresh mutable variable.-varCreate :: a -> IO (Var a)-varCreate x    = newTVarIO x---- | Get the value of a mutable variable.-varGet :: Var a -> IO a-varGet v    = atomically $ readTVar v---- | Set the value of a mutable variable.-varSet :: Var a -> a -> IO ()-varSet v x = atomically $ writeTVar v x---- | Swap the value of a mutable variable.-varSwap :: Var a -> a -> IO a-varSwap v x = atomically $ do-                   prev <- readTVar v-                   writeTVar v x-                   return prev---- | Update the value of a mutable variable and return the old value.-varUpdate :: Var a -> (a -> a) -> IO a-varUpdate v f = atomically $ do-                   x <- readTVar v-                   writeTVar v (f x)-                   return x----{------------------------------------------------------------------------------------------  Point------------------------------------------------------------------------------------------}-pointMove :: (Num a) => Vector2 a -> Point2 a -> Point2 a-pointMove (Vector dx dy) (Point x y)-  = Point (x+dx) (y+dy)--pointMoveBySize :: (Num a) => Point2 a -> Size2D a -> Point2 a-pointMoveBySize (Point x y) (Size w h)  = Point (x + w) (y + h)--pointAdd :: (Num a) => Point2 a -> Point2 a -> Point2 a-pointAdd (Point x1 y1) (Point x2 y2) = Point (x1+x2) (y1+y2)--pointSub :: (Num a) => Point2 a -> Point2 a -> Point2 a-pointSub (Point x1 y1) (Point x2 y2) = Point (x1-x2) (y1-y2)--pointScale :: (Num a) => Point2 a -> a -> Point2 a-pointScale (Point x y) v = Point (v*x) (v*y)---instance (Num a, Ord a) => Ord (Point2 a) where-  compare (Point x1 y1) (Point x2 y2)             -    = case compare y1 y2 of-        EQ  -> compare x1 x2-        neq -> neq---instance Ix (Point2 Int) where-  range (Point x1 y1,Point x2 y2)             -    = [Point x y | y <- [y1..y2], x <- [x1..x2]]--  inRange (Point x1 y1, Point x2 y2) (Point x y)-    = (x >= x1 && x <= x2 && y >= y1 && y <= y2)--  rangeSize (Point x1 y1, Point x2 y2) -    = let w = abs (x2 - x1) + 1-          h = abs (y2 - y1) + 1-      in w*h--  index bnd@(Point x1 y1, Point x2 y2) p@(Point x y)-    = if inRange bnd p-       then let w = abs (x2 - x1) + 1-            in (y-y1)*w + x-       else error ("Point index out of bounds: " ++ show p ++ " not in " ++ show bnd)--{------------------------------------------------------------------------------------------  Size------------------------------------------------------------------------------------------}--- | Return the width. (see also 'sizeW').-sizeWidth :: (Num a) => Size2D a -> a-sizeWidth (Size w h)-  = w---- | Return the height. (see also 'sizeH').-sizeHeight :: (Num a) => Size2D a -> a-sizeHeight (Size w h)-  = h---- | Returns 'True' if the first size totally encloses the second argument.-sizeEncloses :: (Num a, Ord a) => Size2D a -> Size2D a -> Bool-sizeEncloses (Size w0 h0) (Size w1 h1)-  = (w0 >= w1) && (h0 >= h1)---- | The minimum of two sizes.-sizeMin :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a-sizeMin (Size w0 h0) (Size w1 h1)-  = Size (min w0 w1) (min h0 h1)---- | The maximum of two sizes.-sizeMax :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a-sizeMax (Size w0 h0) (Size w1 h1)-  = Size (max w0 w1) (max h0 h1)--{------------------------------------------------------------------------------------------  Vector------------------------------------------------------------------------------------------}-vecNegate :: (Num a) => Vector2 a -> Vector2 a-vecNegate (Vector x y)-  = Vector (-x) (-y)--vecOrtogonal :: (Num a) => Vector2 a -> Vector2 a-vecOrtogonal (Vector x y) = (Vector y (-x))--vecAdd :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a-vecAdd (Vector x1 y1) (Vector x2 y2) = Vector (x1+x2) (y1+y2)--vecSub :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a-vecSub (Vector x1 y1) (Vector x2 y2) = Vector (x1-x2) (y1-y2)--vecScale :: (Num a) => Vector2 a -> a -> Vector2 a-vecScale (Vector x y) v = Vector (v*x) (v*y)--vecBetween :: (Num a) => Point2 a -> Point2 a -> Vector2 a-vecBetween (Point x1 y1) (Point x2 y2) = Vector (x2-x1) (y2-y1)--vecLength :: Vector -> Double-vecLength (Vector x y)-  = sqrt (fromIntegral (x*x + y*y))--vecLengthDouble :: Vector2 Double -> Double-vecLengthDouble (Vector x y)-  = sqrt (x*x + y*y)--{------------------------------------------------------------------------------------------  Rectangle------------------------------------------------------------------------------------------}-rectContains :: (Num a, Ord a) => Rect2D a -> Point2 a -> Bool-rectContains (Rect l t w h) (Point x y) -  = (x >= l && x <= (l+w) && y >= t && y <= (t+h))--rectMoveTo :: (Num a) => Rect2D a -> Point2 a -> Rect2D a-rectMoveTo r p-  = rect p (rectSize r)--rectFromPoint :: (Num a) => Point2 a -> Rect2D a-rectFromPoint (Point x y)-  = Rect x y x y--rectCentralPoint :: Rect2D Int -> Point2 Int-rectCentralPoint (Rect l t w h)-  = Point (l + div w 2) (t + div h 2)--rectCentralRect :: Rect2D Int -> Size -> Rect2D Int-rectCentralRect r@(Rect l t rw rh) (Size w h)-  = let c = rectCentralPoint r-    in Rect (pointX c - (w - div w 2)) (pointY c - (h - div h 2)) w h--rectCentralPointDouble :: (Fractional a) => Rect2D a -> Point2 a-rectCentralPointDouble (Rect l t w h)-  = Point (l + w/2) (t + h/2)--rectCentralRectDouble :: (Fractional a) => Rect2D a -> Size2D a -> Rect2D a-rectCentralRectDouble r@(Rect l t rw rh) (Size w h)-  = let c = rectCentralPointDouble r-    in Rect (pointX c - (w - w/2)) (pointY c - (h - h/2)) w h---rectStretchTo :: (Num a) => Rect2D a -> Size2D a -> Rect2D a-rectStretchTo (Rect l t _ _) (Size w h)-  = Rect l t w h--rectMove :: (Num a) => Rect2D a -> Vector2 a -> Rect2D a-rectMove  (Rect x y w h) (Vector dx dy)-  = Rect (x+dx) (y+dy) w h--rectOverlaps :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Bool-rectOverlaps (Rect x1 y1 w1 h1) (Rect x2 y2 w2 h2)-  = (x1+w1 >= x2 && x1 <= x2+w2) && (y1+h1 >= y2 && y1 <= y2+h2)----- | A list with rectangles that constitute the difference between two rectangles.-rectsDiff :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]-rectsDiff rect1 rect2-  = subtractFittingRect rect1 (rectOverlap rect1 rect2)-  where-    -- subtractFittingRect r1 r2 subtracts r2 from r1 assuming that r2 fits inside r1-    subtractFittingRect :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]-    subtractFittingRect r1 r2 =-            filter (not . rectIsEmpty)-                    [ rectBetween (rectTopLeft r1) (rectTopRight r2)-                    , rectBetween (pt (rectLeft r1) (rectTop r2)) (rectBottomLeft r2)-                    , rectBetween (pt (rectLeft r1) (rectBottom r2)) (pt (rectRight r2) (rectBottom r1))-                    , rectBetween (rectTopRight r2) (rectBottomRight r1)-                    ]--rectUnion :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a-rectUnion r1 r2-  = rectBetween (pt (min (rectLeft r1) (rectLeft r2)) (min (rectTop r1) (rectTop r2)))-         (pt (max (rectRight r1) (rectRight r2)) (max (rectBottom r1) (rectBottom r2)))--rectUnions :: (Num a, Ord a) => [Rect2D a] -> Rect2D a-rectUnions []-  = rectZero-rectUnions (r:rs)-  = foldr rectUnion r rs---- | The intersection between two rectangles.-rectOverlap :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a-rectOverlap r1 r2-  | rectOverlaps r1 r2  = rectBetween (pt (max (rectLeft r1) (rectLeft r2)) (max (rectTop r1) (rectTop r2)))-                               (pt (min (rectRight r1) (rectRight r2)) (min (rectBottom r1) (rectBottom r2)))-  | otherwise           = rectZero---{------------------------------------------------------------------------------------------ Default colors.------------------------------------------------------------------------------------------}-black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white :: Color-red, green, blue :: Color-cyan, magenta, yellow :: Color--black     = colorRGB 0x00 0x00 0x00-darkgrey  = colorRGB 0x2F 0x2F 0x2F-dimgrey   = colorRGB 0x54 0x54 0x54-mediumgrey= colorRGB 0x64 0x64 0x64-grey      = colorRGB 0x80 0x80 0x80-lightgrey = colorRGB 0xC0 0xC0 0xC0-white     = colorRGB 0xFF 0xFF 0xFF--red       = colorRGB 0xFF 0x00 0x00-green     = colorRGB 0x00 0xFF 0x00-blue      = colorRGB 0x00 0x00 0xFF--yellow    = colorRGB 0xFF 0xFF 0x00-magenta   = colorRGB 0xFF 0x00 0xFF-cyan      = colorRGB 0x00 0xFF 0xFF---{---------------------------------------------------------------------------  System colors---------------------------------------------------------------------------}--- | System Colors.-data SystemColor-  = ColorScrollBar        -- ^ The scrollbar grey area.  -  | ColorBackground       -- ^ The desktop colour.  -  | ColorActiveCaption    -- ^ Active window caption.  -  | ColorInactiveCaption  -- ^ Inactive window caption.  -  | ColorMenu             -- ^ Menu background.  -  | ColorWindow           -- ^ Window background.  -  | ColorWindowFrame      -- ^ Window frame.  -  | ColorMenuText         -- ^ Menu text.  -  | ColorWindowText       -- ^ Text in windows.  -  | ColorCaptionText      -- ^ Text in caption, size box and scrollbar arrow box.  -  | ColorActiveBorder     -- ^ Active window border.  -  | ColorInactiveBorder   -- ^ Inactive window border.  -  | ColorAppWorkspace     -- ^ Background colour MDI -- ^applications.  -  | ColorHighlight        -- ^ Item(s) selected in a control.  -  | ColorHighlightText    -- ^ Text of item(s) selected in a control.  -  | ColorBtnFace          -- ^ Face shading on push buttons.  -  | ColorBtnShadow        -- ^ Edge shading on push buttons.  -  | ColorGrayText         -- ^ Greyed (disabled) text.  -  | ColorBtnText          -- ^ Text on push buttons.  -  | ColorInactiveCaptionText -- ^ Colour of text in active captions.  -  | ColorBtnHighlight     -- ^ Highlight colour for buttons (same as 3DHILIGHT).  -  | Color3DDkShadow       -- ^ Dark shadow for three-dimensional display elements.  -  | Color3DLight          -- ^ Light colour for three-dimensional display elements.  -  | ColorInfoText         -- ^ Text colour for tooltip controls.  -  | ColorInfoBk           -- ^ Background colour for tooltip controls.  -  | ColorDesktop          -- ^ Same as BACKGROUND.  -  | Color3DFace           -- ^ Same as BTNFACE.  -  | Color3DShadow         -- ^ Same as BTNSHADOW.  -  | Color3DHighlight      -- ^ Same as BTNHIGHLIGHT.  -  | Color3DHilight        -- ^ Same as BTNHIGHLIGHT.  -  | ColorBtnHilight       -- ^ Same as BTNHIGHLIGHT.  --instance Enum SystemColor where-  toEnum i-    = error "Graphics.UI.WXCore.Types.SytemColor.toEnum: can not convert integers to system colors."--  fromEnum systemColor-    = case systemColor of-        ColorScrollBar        -> wxSYS_COLOUR_SCROLLBAR-        ColorBackground       -> wxSYS_COLOUR_BACKGROUND-        ColorActiveCaption    -> wxSYS_COLOUR_ACTIVECAPTION-        ColorInactiveCaption  -> wxSYS_COLOUR_INACTIVECAPTION-        ColorMenu             -> wxSYS_COLOUR_MENU-        ColorWindow           -> wxSYS_COLOUR_WINDOW-        ColorWindowFrame      -> wxSYS_COLOUR_WINDOWFRAME-        ColorMenuText         -> wxSYS_COLOUR_MENUTEXT-        ColorWindowText       -> wxSYS_COLOUR_WINDOWTEXT-        ColorCaptionText      -> wxSYS_COLOUR_CAPTIONTEXT-        ColorActiveBorder     -> wxSYS_COLOUR_ACTIVEBORDER-        ColorInactiveBorder   -> wxSYS_COLOUR_INACTIVEBORDER-        ColorAppWorkspace     -> wxSYS_COLOUR_APPWORKSPACE -        ColorHighlight        -> wxSYS_COLOUR_HIGHLIGHT-        ColorHighlightText    -> wxSYS_COLOUR_HIGHLIGHTTEXT-        ColorBtnFace          -> wxSYS_COLOUR_BTNFACE-        ColorBtnShadow        -> wxSYS_COLOUR_BTNSHADOW-        ColorGrayText         -> wxSYS_COLOUR_GRAYTEXT-        ColorBtnText          -> wxSYS_COLOUR_BTNTEXT-        ColorInactiveCaptionText -> wxSYS_COLOUR_INACTIVECAPTIONTEXT-        ColorBtnHighlight     -> wxSYS_COLOUR_BTNHIGHLIGHT-        Color3DDkShadow       -> wxSYS_COLOUR_3DDKSHADOW-        Color3DLight          -> wxSYS_COLOUR_3DLIGHT-        ColorInfoText         -> wxSYS_COLOUR_INFOTEXT-        ColorInfoBk           -> wxSYS_COLOUR_INFOBK-        ColorDesktop          -> wxSYS_COLOUR_DESKTOP-        Color3DFace           -> wxSYS_COLOUR_3DFACE-        Color3DShadow         -> wxSYS_COLOUR_3DSHADOW-        Color3DHighlight      -> wxSYS_COLOUR_3DHIGHLIGHT-        Color3DHilight        -> wxSYS_COLOUR_3DHILIGHT-        ColorBtnHilight       -> wxSYS_COLOUR_BTNHILIGHT--      --- | Convert a system color to a color. -colorSystem :: SystemColor -> Color-colorSystem systemColor-  = unsafePerformIO $ -    wxcSystemSettingsGetColour (fromEnum systemColor)+{-# LANGUAGE ForeignFunctionInterface, FlexibleInstances #-}
+-----------------------------------------------------------------------------------------
+{-|	Module      :  Types
+	Copyright   :  (c) Daan Leijen 2003
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Basic types and operations.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.Types(
+            -- * Objects
+              ( # )
+            , Object, objectNull, objectIsNull, objectCast, objectIsManaged
+            , objectDelete
+            , withObjectPtr, withObjectRef
+            , withObjectResult, withManagedObjectResult
+            , objectFinalize, objectNoFinalize
+            , objectFromPtr, managedObjectFromPtr
+            
+
+--            , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch
+
+            -- * Identifiers
+            , Id, idAny, idCreate
+
+            -- * Bits
+            , (.+.), (.-.)
+            , bits
+            , bitsSet
+
+            -- * Control
+            , unitIO, bracket, bracket_, finally, finalize, when
+
+            -- * Variables
+            , Var, varCreate, varGet, varSet, varUpdate, varSwap
+
+            -- * Misc.
+            , Style
+            , EventId
+            , TreeItem, treeItemInvalid, treeItemIsOk
+
+            -- * Basic types
+
+            -- ** Booleans
+            , toCBool, fromCBool
+
+            -- ** Colors
+            , Color, rgb, colorRGB, colorRed, colorGreen, colorBlue, intFromColor, colorFromInt, colorIsOk, colorOk
+            , black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white
+            , red, green, blue
+            , cyan, magenta, yellow
+            -- *** System colors
+            , SystemColor(..), colorSystem
+
+            -- ** Points
+            , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull
+            , pointMove, pointMoveBySize, pointAdd, pointSub, pointScale
+
+            -- ** Sizes
+            , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull, sizeEncloses
+            , sizeMin, sizeMax
+
+            -- ** Vectors
+            , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull
+            , vecNegate, vecOrtogonal, vecAdd, vecSub, vecScale, vecBetween, vecLength
+            , vecLengthDouble
+
+            -- ** Rectangles
+            , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)
+            , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight
+            , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty
+            , rectContains, rectMoveTo, rectFromPoint, rectCentralPoint, rectCentralRect, rectStretchTo
+            , rectCentralPointDouble, rectCentralRectDouble
+            , rectMove, rectOverlaps, rectsDiff, rectUnion, rectOverlap, rectUnions
+
+            ) where
+
+import Data.List( (\\) )
+import Graphics.UI.WXCore.WxcTypes
+import Graphics.UI.WXCore.WxcDefs
+import Graphics.UI.WXCore.WxcClasses( wxcSystemSettingsGetColour )
+import System.IO.Unsafe( unsafePerformIO )
+
+-- utility
+import Data.Array
+import Data.Bits
+import Control.Concurrent.STM
+import qualified Control.Exception as CE
+import qualified Control.Monad as M
+
+
+infixl 5 .+.
+infixl 5 .-.
+infix 5 #
+
+-- | Reverse application, i.e. @x # f@ = @f x@.
+-- Useful for an object oriented style of programming.
+--
+-- > (frame # frameSetTitle) "hi"
+--
+( # ) :: obj -> (obj -> a) -> a
+object # method   = method object
+
+
+{--------------------------------------------------------------------------------
+  Bitmasks
+--------------------------------------------------------------------------------}
+-- | Bitwise /or/ of two bit masks.
+(.+.) :: Int -> Int -> Int
+(.+.) i j
+  = i .|. j
+
+-- | Unset certain bits in a bitmask.
+(.-.) :: Int -> BitFlag -> Int
+(.-.) i j
+  = i .&. complement j
+
+-- | Bitwise /or/ of a list of bit masks.
+bits :: [Int] -> Int
+bits xs
+  = foldr (.+.) 0 xs
+
+-- | (@bitsSet mask i@) tests if all bits in @mask@ are also set in @i@.
+bitsSet :: Int -> Int -> Bool
+bitsSet mask i
+  = (i .&. mask == mask)
+
+
+{--------------------------------------------------------------------------------
+  Id
+--------------------------------------------------------------------------------}
+{-# NOINLINE varTopId #-}
+varTopId :: Var Id
+varTopId
+  = unsafePerformIO (varCreate (wxID_HIGHEST+1))
+
+-- | When creating a new window you may specify 'idAny' to let wxWidgets
+-- assign an unused identifier to it automatically. Furthermore, it can be
+-- used in an event connection to handle events for any identifier.
+idAny :: Id
+idAny
+  = -1
+
+-- | Create a new unique identifier.
+idCreate :: IO Id
+idCreate
+  = varUpdate varTopId (+1)
+
+
+
+{--------------------------------------------------------------------------------
+  Control
+--------------------------------------------------------------------------------}
+-- | Ignore the result of an 'IO' action.
+unitIO :: IO a -> IO ()
+unitIO io
+  = do io; return ()
+
+-- | Perform an action when a test succeeds.
+when :: Bool -> IO () -> IO ()
+when = M.when
+
+-- | Properly release resources, even in the event of an exception.
+bracket :: IO a           -- ^ computation to run first (acquire resource)
+           -> (a -> IO b) -- ^ computation to run last (release resource)
+           -> (a -> IO c) -- ^ computation to run in-between (use resource)
+           -> IO c
+bracket = CE.bracket
+
+-- | Specialized variant of 'bracket' where the return value is not required.
+bracket_ :: IO a     -- ^ computation to run first (acquire resource)
+           -> IO b   -- ^ computation to run last (release resource)
+           -> IO c   -- ^ computation to run in-between (use resource)
+           -> IO c
+bracket_ = CE.bracket_
+
+-- | Run some computation afterwards, even if an exception occurs.
+finally :: IO a -- ^ computation to run first
+        -> IO b -- ^ computation to run last (release resource)
+        -> IO a
+finally = CE.finally
+
+-- | Run some computation afterwards, even if an exception occurs. Equals 'finally' but
+-- with the arguments swapped.
+finalize ::  IO b -- ^ computation to run last (release resource)
+          -> IO a -- ^ computation to run first
+          -> IO a
+finalize last first
+  = finally first last
+
+{--------------------------------------------------------------------------------
+  Variables
+--------------------------------------------------------------------------------}
+
+-- | A mutable variable. Use this instead of 'MVar's or 'IORef's to accomodate for
+-- future expansions with possible concurrency.
+type Var a  = TVar a
+
+-- | Create a fresh mutable variable.
+varCreate :: a -> IO (Var a)
+varCreate x    = newTVarIO x
+
+-- | Get the value of a mutable variable.
+varGet :: Var a -> IO a
+varGet v    = atomically $ readTVar v
+
+-- | Set the value of a mutable variable.
+varSet :: Var a -> a -> IO ()
+varSet v x = atomically $ writeTVar v x
+
+-- | Swap the value of a mutable variable.
+varSwap :: Var a -> a -> IO a
+varSwap v x = atomically $ do
+                   prev <- readTVar v
+                   writeTVar v x
+                   return prev
+
+-- | Update the value of a mutable variable and return the old value.
+varUpdate :: Var a -> (a -> a) -> IO a
+varUpdate v f = atomically $ do
+                   x <- readTVar v
+                   writeTVar v (f x)
+                   return x
+
+
+
+{-----------------------------------------------------------------------------------------
+  Point
+-----------------------------------------------------------------------------------------}
+pointMove :: (Num a) => Vector2 a -> Point2 a -> Point2 a
+pointMove (Vector dx dy) (Point x y)
+  = Point (x+dx) (y+dy)
+
+pointMoveBySize :: (Num a) => Point2 a -> Size2D a -> Point2 a
+pointMoveBySize (Point x y) (Size w h)  = Point (x + w) (y + h)
+
+pointAdd :: (Num a) => Point2 a -> Point2 a -> Point2 a
+pointAdd (Point x1 y1) (Point x2 y2) = Point (x1+x2) (y1+y2)
+
+pointSub :: (Num a) => Point2 a -> Point2 a -> Point2 a
+pointSub (Point x1 y1) (Point x2 y2) = Point (x1-x2) (y1-y2)
+
+pointScale :: (Num a) => Point2 a -> a -> Point2 a
+pointScale (Point x y) v = Point (v*x) (v*y)
+
+
+instance (Num a, Ord a) => Ord (Point2 a) where
+  compare (Point x1 y1) (Point x2 y2)             
+    = case compare y1 y2 of
+        EQ  -> compare x1 x2
+        neq -> neq
+
+
+instance Ix (Point2 Int) where
+  range (Point x1 y1,Point x2 y2)             
+    = [Point x y | y <- [y1..y2], x <- [x1..x2]]
+
+  inRange (Point x1 y1, Point x2 y2) (Point x y)
+    = (x >= x1 && x <= x2 && y >= y1 && y <= y2)
+
+  rangeSize (Point x1 y1, Point x2 y2) 
+    = let w = abs (x2 - x1) + 1
+          h = abs (y2 - y1) + 1
+      in w*h
+
+  index bnd@(Point x1 y1, Point x2 y2) p@(Point x y)
+    = if inRange bnd p
+       then let w = abs (x2 - x1) + 1
+            in (y-y1)*w + x
+       else error ("Point index out of bounds: " ++ show p ++ " not in " ++ show bnd)
+
+{-----------------------------------------------------------------------------------------
+  Size
+-----------------------------------------------------------------------------------------}
+-- | Return the width. (see also 'sizeW').
+sizeWidth :: (Num a) => Size2D a -> a
+sizeWidth (Size w h)
+  = w
+
+-- | Return the height. (see also 'sizeH').
+sizeHeight :: (Num a) => Size2D a -> a
+sizeHeight (Size w h)
+  = h
+
+-- | Returns 'True' if the first size totally encloses the second argument.
+sizeEncloses :: (Num a, Ord a) => Size2D a -> Size2D a -> Bool
+sizeEncloses (Size w0 h0) (Size w1 h1)
+  = (w0 >= w1) && (h0 >= h1)
+
+-- | The minimum of two sizes.
+sizeMin :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a
+sizeMin (Size w0 h0) (Size w1 h1)
+  = Size (min w0 w1) (min h0 h1)
+
+-- | The maximum of two sizes.
+sizeMax :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a
+sizeMax (Size w0 h0) (Size w1 h1)
+  = Size (max w0 w1) (max h0 h1)
+
+{-----------------------------------------------------------------------------------------
+  Vector
+-----------------------------------------------------------------------------------------}
+vecNegate :: (Num a) => Vector2 a -> Vector2 a
+vecNegate (Vector x y)
+  = Vector (-x) (-y)
+
+vecOrtogonal :: (Num a) => Vector2 a -> Vector2 a
+vecOrtogonal (Vector x y) = (Vector y (-x))
+
+vecAdd :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a
+vecAdd (Vector x1 y1) (Vector x2 y2) = Vector (x1+x2) (y1+y2)
+
+vecSub :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a
+vecSub (Vector x1 y1) (Vector x2 y2) = Vector (x1-x2) (y1-y2)
+
+vecScale :: (Num a) => Vector2 a -> a -> Vector2 a
+vecScale (Vector x y) v = Vector (v*x) (v*y)
+
+vecBetween :: (Num a) => Point2 a -> Point2 a -> Vector2 a
+vecBetween (Point x1 y1) (Point x2 y2) = Vector (x2-x1) (y2-y1)
+
+vecLength :: Vector -> Double
+vecLength (Vector x y)
+  = sqrt (fromIntegral (x*x + y*y))
+
+vecLengthDouble :: Vector2 Double -> Double
+vecLengthDouble (Vector x y)
+  = sqrt (x*x + y*y)
+
+{-----------------------------------------------------------------------------------------
+  Rectangle
+-----------------------------------------------------------------------------------------}
+rectContains :: (Num a, Ord a) => Rect2D a -> Point2 a -> Bool
+rectContains (Rect l t w h) (Point x y) 
+  = (x >= l && x <= (l+w) && y >= t && y <= (t+h))
+
+rectMoveTo :: (Num a) => Rect2D a -> Point2 a -> Rect2D a
+rectMoveTo r p
+  = rect p (rectSize r)
+
+rectFromPoint :: (Num a) => Point2 a -> Rect2D a
+rectFromPoint (Point x y)
+  = Rect x y x y
+
+rectCentralPoint :: Rect2D Int -> Point2 Int
+rectCentralPoint (Rect l t w h)
+  = Point (l + div w 2) (t + div h 2)
+
+rectCentralRect :: Rect2D Int -> Size -> Rect2D Int
+rectCentralRect r@(Rect l t rw rh) (Size w h)
+  = let c = rectCentralPoint r
+    in Rect (pointX c - (w - div w 2)) (pointY c - (h - div h 2)) w h
+
+rectCentralPointDouble :: (Fractional a) => Rect2D a -> Point2 a
+rectCentralPointDouble (Rect l t w h)
+  = Point (l + w/2) (t + h/2)
+
+rectCentralRectDouble :: (Fractional a) => Rect2D a -> Size2D a -> Rect2D a
+rectCentralRectDouble r@(Rect l t rw rh) (Size w h)
+  = let c = rectCentralPointDouble r
+    in Rect (pointX c - (w - w/2)) (pointY c - (h - h/2)) w h
+
+
+rectStretchTo :: (Num a) => Rect2D a -> Size2D a -> Rect2D a
+rectStretchTo (Rect l t _ _) (Size w h)
+  = Rect l t w h
+
+rectMove :: (Num a) => Rect2D a -> Vector2 a -> Rect2D a
+rectMove  (Rect x y w h) (Vector dx dy)
+  = Rect (x+dx) (y+dy) w h
+
+rectOverlaps :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Bool
+rectOverlaps (Rect x1 y1 w1 h1) (Rect x2 y2 w2 h2)
+  = (x1+w1 >= x2 && x1 <= x2+w2) && (y1+h1 >= y2 && y1 <= y2+h2)
+
+
+-- | A list with rectangles that constitute the difference between two rectangles.
+rectsDiff :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]
+rectsDiff rect1 rect2
+  = subtractFittingRect rect1 (rectOverlap rect1 rect2)
+  where
+    -- subtractFittingRect r1 r2 subtracts r2 from r1 assuming that r2 fits inside r1
+    subtractFittingRect :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]
+    subtractFittingRect r1 r2 =
+            filter (not . rectIsEmpty)
+                    [ rectBetween (rectTopLeft r1) (rectTopRight r2)
+                    , rectBetween (pt (rectLeft r1) (rectTop r2)) (rectBottomLeft r2)
+                    , rectBetween (pt (rectLeft r1) (rectBottom r2)) (pt (rectRight r2) (rectBottom r1))
+                    , rectBetween (rectTopRight r2) (rectBottomRight r1)
+                    ]
+
+rectUnion :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a
+rectUnion r1 r2
+  = rectBetween (pt (min (rectLeft r1) (rectLeft r2)) (min (rectTop r1) (rectTop r2)))
+         (pt (max (rectRight r1) (rectRight r2)) (max (rectBottom r1) (rectBottom r2)))
+
+rectUnions :: (Num a, Ord a) => [Rect2D a] -> Rect2D a
+rectUnions []
+  = rectZero
+rectUnions (r:rs)
+  = foldr rectUnion r rs
+
+-- | The intersection between two rectangles.
+rectOverlap :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a
+rectOverlap r1 r2
+  | rectOverlaps r1 r2  = rectBetween (pt (max (rectLeft r1) (rectLeft r2)) (max (rectTop r1) (rectTop r2)))
+                               (pt (min (rectRight r1) (rectRight r2)) (min (rectBottom r1) (rectBottom r2)))
+  | otherwise           = rectZero
+
+
+{-----------------------------------------------------------------------------------------
+ Default colors.
+-----------------------------------------------------------------------------------------}
+black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white :: Color
+red, green, blue :: Color
+cyan, magenta, yellow :: Color
+
+black     = colorRGB 0x00 0x00 0x00
+darkgrey  = colorRGB 0x2F 0x2F 0x2F
+dimgrey   = colorRGB 0x54 0x54 0x54
+mediumgrey= colorRGB 0x64 0x64 0x64
+grey      = colorRGB 0x80 0x80 0x80
+lightgrey = colorRGB 0xC0 0xC0 0xC0
+white     = colorRGB 0xFF 0xFF 0xFF
+
+red       = colorRGB 0xFF 0x00 0x00
+green     = colorRGB 0x00 0xFF 0x00
+blue      = colorRGB 0x00 0x00 0xFF
+
+yellow    = colorRGB 0xFF 0xFF 0x00
+magenta   = colorRGB 0xFF 0x00 0xFF
+cyan      = colorRGB 0x00 0xFF 0xFF
+
+
+{--------------------------------------------------------------------------
+  System colors
+--------------------------------------------------------------------------}
+-- | System Colors.
+data SystemColor
+  = ColorScrollBar        -- ^ The scrollbar grey area.  
+  | ColorBackground       -- ^ The desktop colour.  
+  | ColorActiveCaption    -- ^ Active window caption.  
+  | ColorInactiveCaption  -- ^ Inactive window caption.  
+  | ColorMenu             -- ^ Menu background.  
+  | ColorWindow           -- ^ Window background.  
+  | ColorWindowFrame      -- ^ Window frame.  
+  | ColorMenuText         -- ^ Menu text.  
+  | ColorWindowText       -- ^ Text in windows.  
+  | ColorCaptionText      -- ^ Text in caption, size box and scrollbar arrow box.  
+  | ColorActiveBorder     -- ^ Active window border.  
+  | ColorInactiveBorder   -- ^ Inactive window border.  
+  | ColorAppWorkspace     -- ^ Background colour MDI -- ^applications.  
+  | ColorHighlight        -- ^ Item(s) selected in a control.  
+  | ColorHighlightText    -- ^ Text of item(s) selected in a control.  
+  | ColorBtnFace          -- ^ Face shading on push buttons.  
+  | ColorBtnShadow        -- ^ Edge shading on push buttons.  
+  | ColorGrayText         -- ^ Greyed (disabled) text.  
+  | ColorBtnText          -- ^ Text on push buttons.  
+  | ColorInactiveCaptionText -- ^ Colour of text in active captions.  
+  | ColorBtnHighlight     -- ^ Highlight colour for buttons (same as 3DHILIGHT).  
+  | Color3DDkShadow       -- ^ Dark shadow for three-dimensional display elements.  
+  | Color3DLight          -- ^ Light colour for three-dimensional display elements.  
+  | ColorInfoText         -- ^ Text colour for tooltip controls.  
+  | ColorInfoBk           -- ^ Background colour for tooltip controls.  
+  | ColorDesktop          -- ^ Same as BACKGROUND.  
+  | Color3DFace           -- ^ Same as BTNFACE.  
+  | Color3DShadow         -- ^ Same as BTNSHADOW.  
+  | Color3DHighlight      -- ^ Same as BTNHIGHLIGHT.  
+  | Color3DHilight        -- ^ Same as BTNHIGHLIGHT.  
+  | ColorBtnHilight       -- ^ Same as BTNHIGHLIGHT.  
+
+instance Enum SystemColor where
+  toEnum i
+    = error "Graphics.UI.WXCore.Types.SytemColor.toEnum: can not convert integers to system colors."
+
+  fromEnum systemColor
+    = case systemColor of
+        ColorScrollBar        -> wxSYS_COLOUR_SCROLLBAR
+        ColorBackground       -> wxSYS_COLOUR_BACKGROUND
+        ColorActiveCaption    -> wxSYS_COLOUR_ACTIVECAPTION
+        ColorInactiveCaption  -> wxSYS_COLOUR_INACTIVECAPTION
+        ColorMenu             -> wxSYS_COLOUR_MENU
+        ColorWindow           -> wxSYS_COLOUR_WINDOW
+        ColorWindowFrame      -> wxSYS_COLOUR_WINDOWFRAME
+        ColorMenuText         -> wxSYS_COLOUR_MENUTEXT
+        ColorWindowText       -> wxSYS_COLOUR_WINDOWTEXT
+        ColorCaptionText      -> wxSYS_COLOUR_CAPTIONTEXT
+        ColorActiveBorder     -> wxSYS_COLOUR_ACTIVEBORDER
+        ColorInactiveBorder   -> wxSYS_COLOUR_INACTIVEBORDER
+        ColorAppWorkspace     -> wxSYS_COLOUR_APPWORKSPACE 
+        ColorHighlight        -> wxSYS_COLOUR_HIGHLIGHT
+        ColorHighlightText    -> wxSYS_COLOUR_HIGHLIGHTTEXT
+        ColorBtnFace          -> wxSYS_COLOUR_BTNFACE
+        ColorBtnShadow        -> wxSYS_COLOUR_BTNSHADOW
+        ColorGrayText         -> wxSYS_COLOUR_GRAYTEXT
+        ColorBtnText          -> wxSYS_COLOUR_BTNTEXT
+        ColorInactiveCaptionText -> wxSYS_COLOUR_INACTIVECAPTIONTEXT
+        ColorBtnHighlight     -> wxSYS_COLOUR_BTNHIGHLIGHT
+        Color3DDkShadow       -> wxSYS_COLOUR_3DDKSHADOW
+        Color3DLight          -> wxSYS_COLOUR_3DLIGHT
+        ColorInfoText         -> wxSYS_COLOUR_INFOTEXT
+        ColorInfoBk           -> wxSYS_COLOUR_INFOBK
+        ColorDesktop          -> wxSYS_COLOUR_DESKTOP
+        Color3DFace           -> wxSYS_COLOUR_3DFACE
+        Color3DShadow         -> wxSYS_COLOUR_3DSHADOW
+        Color3DHighlight      -> wxSYS_COLOUR_3DHIGHLIGHT
+        Color3DHilight        -> wxSYS_COLOUR_3DHILIGHT
+        ColorBtnHilight       -> wxSYS_COLOUR_BTNHILIGHT
+
+      
+-- | Convert a system color to a color. 
+colorSystem :: SystemColor -> Color
+colorSystem systemColor
+  = unsafePerformIO $ 
+    wxcSystemSettingsGetColour (fromEnum systemColor)
src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs view
@@ -14,7 +14,7 @@ 
 From the files:
 
-  * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@
+  * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@
 
 And contains 547 class definitions.
 -}
src/haskell/Graphics/UI/WXCore/WxcClasses.hs view
@@ -14,9 +14,9 @@ 
 From the files:
 
-  * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@
+  * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@
 
-And contains 3828 methods for 253 classes.
+And contains 3825 methods for 253 classes.
 -}
 --------------------------------------------------------------------------------
 module Graphics.UI.WXCore.WxcClasses
src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs view
@@ -15,9 +15,9 @@ 
 From the files:
 
-  * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@
+  * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@
 
-And contains 1488 methods for 124 classes.
+And contains 1492 methods for 124 classes.
 -}
 --------------------------------------------------------------------------------
 module Graphics.UI.WXCore.WxcClassesAL
@@ -858,9 +858,12 @@      ,graphicsContextClipByRectangle
      ,graphicsContextConcatTransform
      ,graphicsContextCreate
+     ,graphicsContextCreateDefaultMatrix
      ,graphicsContextCreateFromNative
      ,graphicsContextCreateFromNativeWindow
      ,graphicsContextCreateFromWindow
+     ,graphicsContextCreateMatrix
+     ,graphicsContextCreatePath
      ,graphicsContextDelete
      ,graphicsContextDrawBitmap
      ,graphicsContextDrawEllipse
@@ -874,6 +877,8 @@      ,graphicsContextFillPath
      ,graphicsContextGetNativeContext
      ,graphicsContextGetTextExtent
+     ,graphicsContextPopState
+     ,graphicsContextPushState
      ,graphicsContextResetClip
      ,graphicsContextRotate
      ,graphicsContextScale
@@ -1616,7 +1621,6 @@      ,logResume
      ,logSetActiveTarget
      ,logSetTimestamp
-     ,logSetTraceMask
      ,logSetVerbose
      ,logSuspend
      -- ** LogChain
@@ -7429,6 +7433,14 @@     wxGraphicsContext_Create cobj_dc  
 foreign import ccall "wxGraphicsContext_Create" wxGraphicsContext_Create :: Ptr (TWindowDC a) -> IO (Ptr (TGraphicsContext ()))
 
+-- | usage: (@graphicsContextCreateDefaultMatrix self@).
+graphicsContextCreateDefaultMatrix :: GraphicsContext  a ->  IO (GraphicsMatrix  ())
+graphicsContextCreateDefaultMatrix self 
+  = withObjectResult $
+    withObjectRef "graphicsContextCreateDefaultMatrix" self $ \cobj_self -> 
+    wxGraphicsContext_CreateDefaultMatrix cobj_self  
+foreign import ccall "wxGraphicsContext_CreateDefaultMatrix" wxGraphicsContext_CreateDefaultMatrix :: Ptr (TGraphicsContext a) -> IO (Ptr (TGraphicsMatrix ()))
+
 -- | usage: (@graphicsContextCreateFromNative context@).
 graphicsContextCreateFromNative :: GraphicsContext  a ->  IO (GraphicsContext  ())
 graphicsContextCreateFromNative context 
@@ -7453,6 +7465,22 @@     wxGraphicsContext_CreateFromWindow cobj_window  
 foreign import ccall "wxGraphicsContext_CreateFromWindow" wxGraphicsContext_CreateFromWindow :: Ptr (TWindow a) -> IO (Ptr (TGraphicsContext ()))
 
+-- | usage: (@graphicsContextCreateMatrix self a b c d tx ty@).
+graphicsContextCreateMatrix :: GraphicsContext  a -> Double -> Double -> Double -> Double -> Double -> Double ->  IO (GraphicsMatrix  ())
+graphicsContextCreateMatrix self a b c d tx ty 
+  = withObjectResult $
+    withObjectRef "graphicsContextCreateMatrix" self $ \cobj_self -> 
+    wxGraphicsContext_CreateMatrix cobj_self  a  b  c  d  tx  ty  
+foreign import ccall "wxGraphicsContext_CreateMatrix" wxGraphicsContext_CreateMatrix :: Ptr (TGraphicsContext a) -> Double -> Double -> Double -> Double -> Double -> Double -> IO (Ptr (TGraphicsMatrix ()))
+
+-- | usage: (@graphicsContextCreatePath self@).
+graphicsContextCreatePath :: GraphicsContext  a ->  IO (GraphicsPath  ())
+graphicsContextCreatePath self 
+  = withObjectResult $
+    withObjectRef "graphicsContextCreatePath" self $ \cobj_self -> 
+    wxGraphicsContext_CreatePath cobj_self  
+foreign import ccall "wxGraphicsContext_CreatePath" wxGraphicsContext_CreatePath :: Ptr (TGraphicsContext a) -> IO (Ptr (TGraphicsPath ()))
+
 -- | usage: (@graphicsContextDelete self@).
 graphicsContextDelete :: GraphicsContext  a ->  IO ()
 graphicsContextDelete
@@ -7550,6 +7578,20 @@     wxGraphicsContext_GetTextExtent cobj_self  cobj_text  width  height  descent  externalLeading  
 foreign import ccall "wxGraphicsContext_GetTextExtent" wxGraphicsContext_GetTextExtent :: Ptr (TGraphicsContext a) -> Ptr (TWxString b) -> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO ()
 
+-- | usage: (@graphicsContextPopState self@).
+graphicsContextPopState :: GraphicsContext  a ->  IO ()
+graphicsContextPopState self 
+  = withObjectRef "graphicsContextPopState" self $ \cobj_self -> 
+    wxGraphicsContext_PopState cobj_self  
+foreign import ccall "wxGraphicsContext_PopState" wxGraphicsContext_PopState :: Ptr (TGraphicsContext a) -> IO ()
+
+-- | usage: (@graphicsContextPushState self@).
+graphicsContextPushState :: GraphicsContext  a ->  IO ()
+graphicsContextPushState self 
+  = withObjectRef "graphicsContextPushState" self $ \cobj_self -> 
+    wxGraphicsContext_PushState cobj_self  
+foreign import ccall "wxGraphicsContext_PushState" wxGraphicsContext_PushState :: Ptr (TGraphicsContext a) -> IO ()
+
 -- | usage: (@graphicsContextResetClip self@).
 graphicsContextResetClip :: GraphicsContext  a ->  IO ()
 graphicsContextResetClip self 
@@ -8055,13 +8097,13 @@     wxGrid_BlockToDeviceRect cobj__obj  (toCInt top)  (toCInt left)  (toCInt bottom)  (toCInt right)  
 foreign import ccall "wxGrid_BlockToDeviceRect" wxGrid_BlockToDeviceRect :: Ptr (TGrid a) -> CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect ()))
 
--- | usage: (@gridCanDragColSize obj@).
-gridCanDragColSize :: Grid  a ->  IO Bool
-gridCanDragColSize _obj 
+-- | usage: (@gridCanDragColSize obj col@).
+gridCanDragColSize :: Grid  a -> Int ->  IO Bool
+gridCanDragColSize _obj col 
   = withBoolResult $
     withObjectRef "gridCanDragColSize" _obj $ \cobj__obj -> 
-    wxGrid_CanDragColSize cobj__obj  
-foreign import ccall "wxGrid_CanDragColSize" wxGrid_CanDragColSize :: Ptr (TGrid a) -> IO CBool
+    wxGrid_CanDragColSize cobj__obj  (toCInt col)  
+foreign import ccall "wxGrid_CanDragColSize" wxGrid_CanDragColSize :: Ptr (TGrid a) -> CInt -> IO CBool
 
 -- | usage: (@gridCanDragGridSize obj@).
 gridCanDragGridSize :: Grid  a ->  IO Bool
@@ -8071,13 +8113,13 @@     wxGrid_CanDragGridSize cobj__obj  
 foreign import ccall "wxGrid_CanDragGridSize" wxGrid_CanDragGridSize :: Ptr (TGrid a) -> IO CBool
 
--- | usage: (@gridCanDragRowSize obj@).
-gridCanDragRowSize :: Grid  a ->  IO Bool
-gridCanDragRowSize _obj 
+-- | usage: (@gridCanDragRowSize obj row@).
+gridCanDragRowSize :: Grid  a -> Int ->  IO Bool
+gridCanDragRowSize _obj row 
   = withBoolResult $
     withObjectRef "gridCanDragRowSize" _obj $ \cobj__obj -> 
-    wxGrid_CanDragRowSize cobj__obj  
-foreign import ccall "wxGrid_CanDragRowSize" wxGrid_CanDragRowSize :: Ptr (TGrid a) -> IO CBool
+    wxGrid_CanDragRowSize cobj__obj  (toCInt row)  
+foreign import ccall "wxGrid_CanDragRowSize" wxGrid_CanDragRowSize :: Ptr (TGrid a) -> CInt -> IO CBool
 
 -- | usage: (@gridCanEnableCellControl obj@).
 gridCanEnableCellControl :: Grid  a ->  IO Bool
@@ -10809,13 +10851,13 @@     wxImage_CreateFromBitmap cobj_bitmap  
 foreign import ccall "wxImage_CreateFromBitmap" wxImage_CreateFromBitmap :: Ptr (TBitmap a) -> IO (Ptr (TImage ()))
 
--- | usage: (@imageCreateFromByteString datalength wxtype@).
-imageCreateFromByteString :: B.ByteString -> Int ->  IO (Image  ())
-imageCreateFromByteString datalength wxtype 
+-- | usage: (@imageCreateFromByteString widthheight datalength@).
+imageCreateFromByteString :: Size -> B.ByteString ->  IO (Image  ())
+imageCreateFromByteString widthheight datalength 
   = withManagedObjectResult $
     B.useAsCStringLen datalength $ \(bs_datalength, bslen_datalength)  -> 
-    wxImage_CreateFromByteString bs_datalength bslen_datalength  (toCInt wxtype)  
-foreign import ccall "wxImage_CreateFromByteString" wxImage_CreateFromByteString :: Ptr CChar -> Int -> CInt -> IO (Ptr (TImage ()))
+    wxImage_CreateFromByteString (toCIntSizeW widthheight) (toCIntSizeH widthheight)  bs_datalength bslen_datalength  
+foreign import ccall "wxImage_CreateFromByteString" wxImage_CreateFromByteString :: CInt -> CInt -> Ptr CChar -> Int -> IO (Ptr (TImage ()))
 
 -- | usage: (@imageCreateFromData widthheight wxdata@).
 imageCreateFromData :: Size -> Ptr  b ->  IO (Image  ())
@@ -10839,13 +10881,13 @@     wxImage_CreateFromFile cobj_name  
 foreign import ccall "wxImage_CreateFromFile" wxImage_CreateFromFile :: Ptr (TWxString a) -> IO (Ptr (TImage ()))
 
--- | usage: (@imageCreateFromLazyByteString datalength wxtype@).
-imageCreateFromLazyByteString :: LB.ByteString -> Int ->  IO (Image  ())
-imageCreateFromLazyByteString datalength wxtype 
+-- | usage: (@imageCreateFromLazyByteString widthheight datalength@).
+imageCreateFromLazyByteString :: Size -> LB.ByteString ->  IO (Image  ())
+imageCreateFromLazyByteString widthheight datalength 
   = withManagedObjectResult $
     withArray (LB.unpack datalength) $ \bs_datalength -> 
-    wxImage_CreateFromLazyByteString bs_datalength (fromIntegral $ LB.length datalength)  (toCInt wxtype)  
-foreign import ccall "wxImage_CreateFromLazyByteString" wxImage_CreateFromLazyByteString :: Ptr Word8 -> Int -> CInt -> IO (Ptr (TImage ()))
+    wxImage_CreateFromLazyByteString (toCIntSizeW widthheight) (toCIntSizeH widthheight)  bs_datalength (fromIntegral $ LB.length datalength)  
+foreign import ccall "wxImage_CreateFromLazyByteString" wxImage_CreateFromLazyByteString :: CInt -> CInt -> Ptr Word8 -> Int -> IO (Ptr (TImage ()))
 
 -- | usage: (@imageCreateSized widthheight@).
 imageCreateSized :: Size ->  IO (Image  ())
@@ -13080,13 +13122,6 @@     withCWString ts $ \cstr_ts -> 
     wxLog_SetTimestamp cobj__obj  cstr_ts  
 foreign import ccall "wxLog_SetTimestamp" wxLog_SetTimestamp :: Ptr (TLog a) -> CWString -> IO ()
-
--- | usage: (@logSetTraceMask obj ulMask@).
-logSetTraceMask :: Log  a -> Int ->  IO ()
-logSetTraceMask _obj ulMask 
-  = withObjectRef "logSetTraceMask" _obj $ \cobj__obj -> 
-    wxLog_SetTraceMask cobj__obj  (toCInt ulMask)  
-foreign import ccall "wxLog_SetTraceMask" wxLog_SetTraceMask :: Ptr (TLog a) -> CInt -> IO ()
 
 -- | usage: (@logSetVerbose obj bVerbose@).
 logSetVerbose :: Log  a -> Bool ->  IO ()
src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs view
@@ -15,9 +15,9 @@ 
 From the files:
 
-  * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@
+  * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@
 
-And contains 2340 methods for 129 classes.
+And contains 2333 methods for 129 classes.
 -}
 --------------------------------------------------------------------------------
 module Graphics.UI.WXCore.WxcClassesMZ
@@ -625,7 +625,7 @@      ,menuGetClientData
      ,menuGetHelpString
      ,menuGetInvokingWindow
-     ,menuGetLabel
+     ,menuGetLabelText
      ,menuGetMenuBar
      ,menuGetMenuItemCount
      ,menuGetMenuItems
@@ -665,9 +665,9 @@      ,menuBarGetFrame
      ,menuBarGetHelpString
      ,menuBarGetLabel
-     ,menuBarGetLabelTop
      ,menuBarGetMenu
      ,menuBarGetMenuCount
+     ,menuBarGetMenuLabel
      ,menuBarInsert
      ,menuBarIsChecked
      ,menuBarIsEnabled
@@ -676,7 +676,7 @@      ,menuBarSetHelpString
      ,menuBarSetItemLabel
      ,menuBarSetLabel
-     ,menuBarSetLabelTop
+     ,menuBarSetMenuLabel
      -- ** MenuEvent
      ,menuEventCopyObject
      ,menuEventGetMenuId
@@ -689,11 +689,11 @@      ,menuItemEnable
      ,menuItemGetHelp
      ,menuItemGetId
-     ,menuItemGetLabel
-     ,menuItemGetLabelFromText
+     ,menuItemGetItemLabel
+     ,menuItemGetItemLabelText
+     ,menuItemGetLabelText
      ,menuItemGetMenu
      ,menuItemGetSubMenu
-     ,menuItemGetText
      ,menuItemIsCheckable
      ,menuItemIsChecked
      ,menuItemIsEnabled
@@ -702,8 +702,8 @@      ,menuItemSetCheckable
      ,menuItemSetHelp
      ,menuItemSetId
+     ,menuItemSetItemLabel
      ,menuItemSetSubMenu
-     ,menuItemSetText
      -- ** MessageDialog
      ,messageDialogCreate
      ,messageDialogDelete
@@ -1303,11 +1303,13 @@      ,sizerSetItemMinSizeWindow
      ,sizerSetMinSize
      ,sizerSetSizeHints
-     ,sizerSetVirtualSizeHints
      ,sizerShow
      ,sizerShowSizer
      ,sizerShowWindow
      -- ** SizerItem
+     ,sizerItemAssignSizer
+     ,sizerItemAssignSpacer
+     ,sizerItemAssignWindow
      ,sizerItemCalcMin
      ,sizerItemCreate
      ,sizerItemCreateInSizer
@@ -1338,9 +1340,6 @@      ,sizerItemSetInitSize
      ,sizerItemSetProportion
      ,sizerItemSetRatio
-     ,sizerItemSetSizer
-     ,sizerItemSetSpacer
-     ,sizerItemSetWindow
      ,sizerItemShow
      -- ** Slider
      ,sliderClearSel
@@ -1361,7 +1360,6 @@      ,sliderSetSelection
      ,sliderSetThumbLength
      ,sliderSetTick
-     ,sliderSetTickFreq
      ,sliderSetValue
      -- ** Sound
      ,soundCreate
@@ -1403,7 +1401,6 @@      ,splitterWindowSetMinimumPaneSize
      ,splitterWindowSetSashGravity
      ,splitterWindowSetSashPosition
-     ,splitterWindowSetSashSize
      ,splitterWindowSetSplitMode
      ,splitterWindowSplitHorizontally
      ,splitterWindowSplitVertically
@@ -1955,7 +1952,6 @@      ,toolBarAddSeparator
      ,toolBarAddTool
      ,toolBarAddTool2
-     ,toolBarAddToolEx
      ,toolBarCreate
      ,toolBarDelete
      ,toolBarDeleteTool
@@ -1972,7 +1968,6 @@      ,toolBarGetToolState
      ,toolBarInsertControl
      ,toolBarInsertSeparator
-     ,toolBarInsertTool
      ,toolBarRealize
      ,toolBarRemoveTool
      ,toolBarSetMargins
@@ -2098,8 +2093,8 @@      ,validatorCreate
      ,validatorDelete
      ,validatorGetWindow
-     ,validatorSetBellOnError
      ,validatorSetWindow
+     ,validatorSuppressBellOnError
      ,validatorTransferFromWindow
      ,validatorTransferToWindow
      ,validatorValidate
@@ -2205,7 +2200,6 @@      ,wxcLogResume
      ,wxcLogSetActiveTarget
      ,wxcLogSetTimestamp
-     ,wxcLogSetTraceMask
      ,wxcLogSetVerbose
      ,wxcLogSuspend
      -- ** WXCPreviewControlBar
@@ -2325,7 +2319,6 @@      ,windowLayoutPhase1
      ,windowLayoutPhase2
      ,windowLower
-     ,windowMakeModal
      ,windowMove
      ,windowMoveConstraint
      ,windowPopEventHandler
@@ -3062,14 +3055,6 @@     wxMenuBar_GetLabel cobj__obj  (toCInt id)  
 foreign import ccall "wxMenuBar_GetLabel" wxMenuBar_GetLabel :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ()))
 
--- | usage: (@menuBarGetLabelTop obj pos@).
-menuBarGetLabelTop :: MenuBar  a -> Int ->  IO (String)
-menuBarGetLabelTop _obj pos 
-  = withManagedStringResult $
-    withObjectRef "menuBarGetLabelTop" _obj $ \cobj__obj -> 
-    wxMenuBar_GetLabelTop cobj__obj  (toCInt pos)  
-foreign import ccall "wxMenuBar_GetLabelTop" wxMenuBar_GetLabelTop :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ()))
-
 -- | usage: (@menuBarGetMenu obj pos@).
 menuBarGetMenu :: MenuBar  a -> Int ->  IO (Menu  ())
 menuBarGetMenu _obj pos 
@@ -3086,6 +3071,14 @@     wxMenuBar_GetMenuCount cobj__obj  
 foreign import ccall "wxMenuBar_GetMenuCount" wxMenuBar_GetMenuCount :: Ptr (TMenuBar a) -> IO CInt
 
+-- | usage: (@menuBarGetMenuLabel obj pos@).
+menuBarGetMenuLabel :: MenuBar  a -> Int ->  IO (String)
+menuBarGetMenuLabel _obj pos 
+  = withManagedStringResult $
+    withObjectRef "menuBarGetMenuLabel" _obj $ \cobj__obj -> 
+    wxMenuBar_GetMenuLabel cobj__obj  (toCInt pos)  
+foreign import ccall "wxMenuBar_GetMenuLabel" wxMenuBar_GetMenuLabel :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ()))
+
 -- | usage: (@menuBarInsert obj pos menu title@).
 menuBarInsert :: MenuBar  a -> Int -> Menu  c -> String ->  IO Int
 menuBarInsert _obj pos menu title 
@@ -3154,13 +3147,13 @@     wxMenuBar_SetLabel cobj__obj  cobj_s  
 foreign import ccall "wxMenuBar_SetLabel" wxMenuBar_SetLabel :: Ptr (TMenuBar a) -> Ptr (TWxString b) -> IO ()
 
--- | usage: (@menuBarSetLabelTop obj pos label@).
-menuBarSetLabelTop :: MenuBar  a -> Int -> String ->  IO ()
-menuBarSetLabelTop _obj pos label 
-  = withObjectRef "menuBarSetLabelTop" _obj $ \cobj__obj -> 
+-- | usage: (@menuBarSetMenuLabel obj pos label@).
+menuBarSetMenuLabel :: MenuBar  a -> Int -> String ->  IO ()
+menuBarSetMenuLabel _obj pos label 
+  = withObjectRef "menuBarSetMenuLabel" _obj $ \cobj__obj -> 
     withStringPtr label $ \cobj_label -> 
-    wxMenuBar_SetLabelTop cobj__obj  (toCInt pos)  cobj_label  
-foreign import ccall "wxMenuBar_SetLabelTop" wxMenuBar_SetLabelTop :: Ptr (TMenuBar a) -> CInt -> Ptr (TWxString c) -> IO ()
+    wxMenuBar_SetMenuLabel cobj__obj  (toCInt pos)  cobj_label  
+foreign import ccall "wxMenuBar_SetMenuLabel" wxMenuBar_SetMenuLabel :: Ptr (TMenuBar a) -> CInt -> Ptr (TWxString c) -> IO ()
 
 -- | usage: (@menuBreak obj@).
 menuBreak :: Menu  a ->  IO ()
@@ -3284,13 +3277,13 @@     wxMenu_GetInvokingWindow cobj__obj  
 foreign import ccall "wxMenu_GetInvokingWindow" wxMenu_GetInvokingWindow :: Ptr (TMenu a) -> IO (Ptr (TWindow ()))
 
--- | usage: (@menuGetLabel obj id@).
-menuGetLabel :: Menu  a -> Id ->  IO (String)
-menuGetLabel _obj id 
+-- | usage: (@menuGetLabelText obj id@).
+menuGetLabelText :: Menu  a -> Id ->  IO (String)
+menuGetLabelText _obj id 
   = withManagedStringResult $
-    withObjectRef "menuGetLabel" _obj $ \cobj__obj -> 
-    wxMenu_GetLabel cobj__obj  (toCInt id)  
-foreign import ccall "wxMenu_GetLabel" wxMenu_GetLabel :: Ptr (TMenu a) -> CInt -> IO (Ptr (TWxString ()))
+    withObjectRef "menuGetLabelText" _obj $ \cobj__obj -> 
+    wxMenu_GetLabelText cobj__obj  (toCInt id)  
+foreign import ccall "wxMenu_GetLabelText" wxMenu_GetLabelText :: Ptr (TMenu a) -> CInt -> IO (Ptr (TWxString ()))
 
 -- | usage: (@menuGetMenuBar obj@).
 menuGetMenuBar :: Menu  a ->  IO (MenuBar  ())
@@ -3452,21 +3445,29 @@     wxMenuItem_GetId cobj__obj  
 foreign import ccall "wxMenuItem_GetId" wxMenuItem_GetId :: Ptr (TMenuItem a) -> IO CInt
 
--- | usage: (@menuItemGetLabel obj@).
-menuItemGetLabel :: MenuItem  a ->  IO (String)
-menuItemGetLabel _obj 
+-- | usage: (@menuItemGetItemLabel obj@).
+menuItemGetItemLabel :: MenuItem  a ->  IO (String)
+menuItemGetItemLabel _obj 
   = withManagedStringResult $
-    withObjectRef "menuItemGetLabel" _obj $ \cobj__obj -> 
-    wxMenuItem_GetLabel cobj__obj  
-foreign import ccall "wxMenuItem_GetLabel" wxMenuItem_GetLabel :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ()))
+    withObjectRef "menuItemGetItemLabel" _obj $ \cobj__obj -> 
+    wxMenuItem_GetItemLabel cobj__obj  
+foreign import ccall "wxMenuItem_GetItemLabel" wxMenuItem_GetItemLabel :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ()))
 
--- | usage: (@menuItemGetLabelFromText text@).
-menuItemGetLabelFromText :: String ->  IO (String)
-menuItemGetLabelFromText text 
+-- | usage: (@menuItemGetItemLabelText obj@).
+menuItemGetItemLabelText :: MenuItem  a ->  IO (String)
+menuItemGetItemLabelText _obj 
   = withManagedStringResult $
+    withObjectRef "menuItemGetItemLabelText" _obj $ \cobj__obj -> 
+    wxMenuItem_GetItemLabelText cobj__obj  
+foreign import ccall "wxMenuItem_GetItemLabelText" wxMenuItem_GetItemLabelText :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ()))
+
+-- | usage: (@menuItemGetLabelText text@).
+menuItemGetLabelText :: String ->  IO (String)
+menuItemGetLabelText text 
+  = withManagedStringResult $
     withCWString text $ \cstr_text -> 
-    wxMenuItem_GetLabelFromText cstr_text  
-foreign import ccall "wxMenuItem_GetLabelFromText" wxMenuItem_GetLabelFromText :: CWString -> IO (Ptr (TWxString ()))
+    wxMenuItem_GetLabelText cstr_text  
+foreign import ccall "wxMenuItem_GetLabelText" wxMenuItem_GetLabelText :: CWString -> IO (Ptr (TWxString ()))
 
 -- | usage: (@menuItemGetMenu obj@).
 menuItemGetMenu :: MenuItem  a ->  IO (Menu  ())
@@ -3484,14 +3485,6 @@     wxMenuItem_GetSubMenu cobj__obj  
 foreign import ccall "wxMenuItem_GetSubMenu" wxMenuItem_GetSubMenu :: Ptr (TMenuItem a) -> IO (Ptr (TMenu ()))
 
--- | usage: (@menuItemGetText obj@).
-menuItemGetText :: MenuItem  a ->  IO (String)
-menuItemGetText _obj 
-  = withManagedStringResult $
-    withObjectRef "menuItemGetText" _obj $ \cobj__obj -> 
-    wxMenuItem_GetText cobj__obj  
-foreign import ccall "wxMenuItem_GetText" wxMenuItem_GetText :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ()))
-
 -- | usage: (@menuItemIsCheckable obj@).
 menuItemIsCheckable :: MenuItem  a ->  IO Bool
 menuItemIsCheckable _obj 
@@ -3554,6 +3547,14 @@     wxMenuItem_SetId cobj__obj  (toCInt id)  
 foreign import ccall "wxMenuItem_SetId" wxMenuItem_SetId :: Ptr (TMenuItem a) -> CInt -> IO ()
 
+-- | usage: (@menuItemSetItemLabel obj str@).
+menuItemSetItemLabel :: MenuItem  a -> String ->  IO ()
+menuItemSetItemLabel _obj str 
+  = withObjectRef "menuItemSetItemLabel" _obj $ \cobj__obj -> 
+    withStringPtr str $ \cobj_str -> 
+    wxMenuItem_SetItemLabel cobj__obj  cobj_str  
+foreign import ccall "wxMenuItem_SetItemLabel" wxMenuItem_SetItemLabel :: Ptr (TMenuItem a) -> Ptr (TWxString b) -> IO ()
+
 -- | usage: (@menuItemSetSubMenu obj menu@).
 menuItemSetSubMenu :: MenuItem  a -> Menu  b ->  IO ()
 menuItemSetSubMenu _obj menu 
@@ -3562,14 +3563,6 @@     wxMenuItem_SetSubMenu cobj__obj  cobj_menu  
 foreign import ccall "wxMenuItem_SetSubMenu" wxMenuItem_SetSubMenu :: Ptr (TMenuItem a) -> Ptr (TMenu b) -> IO ()
 
--- | usage: (@menuItemSetText obj str@).
-menuItemSetText :: MenuItem  a -> String ->  IO ()
-menuItemSetText _obj str 
-  = withObjectRef "menuItemSetText" _obj $ \cobj__obj -> 
-    withStringPtr str $ \cobj_str -> 
-    wxMenuItem_SetText cobj__obj  cobj_str  
-foreign import ccall "wxMenuItem_SetText" wxMenuItem_SetText :: Ptr (TMenuItem a) -> Ptr (TWxString b) -> IO ()
-
 -- | usage: (@menuPrepend obj id text help isCheckable@).
 menuPrepend :: Menu  a -> Id -> String -> String -> Bool ->  IO ()
 menuPrepend _obj id text help isCheckable 
@@ -7870,6 +7863,29 @@     wxSizer_IsShownWindow cobj__obj  window  
 foreign import ccall "wxSizer_IsShownWindow" wxSizer_IsShownWindow :: Ptr (TSizer a) -> Ptr (Ptr (TWindow b)) -> IO CBool
 
+-- | usage: (@sizerItemAssignSizer obj sizer@).
+sizerItemAssignSizer :: SizerItem  a -> Sizer  b ->  IO ()
+sizerItemAssignSizer _obj sizer 
+  = withObjectRef "sizerItemAssignSizer" _obj $ \cobj__obj -> 
+    withObjectPtr sizer $ \cobj_sizer -> 
+    wxSizerItem_AssignSizer cobj__obj  cobj_sizer  
+foreign import ccall "wxSizerItem_AssignSizer" wxSizerItem_AssignSizer :: Ptr (TSizerItem a) -> Ptr (TSizer b) -> IO ()
+
+-- | usage: (@sizerItemAssignSpacer obj widthheight@).
+sizerItemAssignSpacer :: SizerItem  a -> Size ->  IO ()
+sizerItemAssignSpacer _obj widthheight 
+  = withObjectRef "sizerItemAssignSpacer" _obj $ \cobj__obj -> 
+    wxSizerItem_AssignSpacer cobj__obj  (toCIntSizeW widthheight) (toCIntSizeH widthheight)  
+foreign import ccall "wxSizerItem_AssignSpacer" wxSizerItem_AssignSpacer :: Ptr (TSizerItem a) -> CInt -> CInt -> IO ()
+
+-- | usage: (@sizerItemAssignWindow obj window@).
+sizerItemAssignWindow :: SizerItem  a -> Window  b ->  IO ()
+sizerItemAssignWindow _obj window 
+  = withObjectRef "sizerItemAssignWindow" _obj $ \cobj__obj -> 
+    withObjectPtr window $ \cobj_window -> 
+    wxSizerItem_AssignWindow cobj__obj  cobj_window  
+foreign import ccall "wxSizerItem_AssignWindow" wxSizerItem_AssignWindow :: Ptr (TSizerItem a) -> Ptr (TWindow b) -> IO ()
+
 -- | usage: (@sizerItemCalcMin obj@).
 sizerItemCalcMin :: SizerItem  a ->  IO (Size)
 sizerItemCalcMin _obj 
@@ -8094,29 +8110,6 @@     wxSizerItem_SetRatio cobj__obj  (toCIntSizeW widthheight) (toCIntSizeH widthheight)  
 foreign import ccall "wxSizerItem_SetRatio" wxSizerItem_SetRatio :: Ptr (TSizerItem a) -> CInt -> CInt -> IO ()
 
--- | usage: (@sizerItemSetSizer obj sizer@).
-sizerItemSetSizer :: SizerItem  a -> Sizer  b ->  IO ()
-sizerItemSetSizer _obj sizer 
-  = withObjectRef "sizerItemSetSizer" _obj $ \cobj__obj -> 
-    withObjectPtr sizer $ \cobj_sizer -> 
-    wxSizerItem_SetSizer cobj__obj  cobj_sizer  
-foreign import ccall "wxSizerItem_SetSizer" wxSizerItem_SetSizer :: Ptr (TSizerItem a) -> Ptr (TSizer b) -> IO ()
-
--- | usage: (@sizerItemSetSpacer obj widthheight@).
-sizerItemSetSpacer :: SizerItem  a -> Size ->  IO ()
-sizerItemSetSpacer _obj widthheight 
-  = withObjectRef "sizerItemSetSpacer" _obj $ \cobj__obj -> 
-    wxSizerItem_SetSpacer cobj__obj  (toCIntSizeW widthheight) (toCIntSizeH widthheight)  
-foreign import ccall "wxSizerItem_SetSpacer" wxSizerItem_SetSpacer :: Ptr (TSizerItem a) -> CInt -> CInt -> IO ()
-
--- | usage: (@sizerItemSetWindow obj window@).
-sizerItemSetWindow :: SizerItem  a -> Window  b ->  IO ()
-sizerItemSetWindow _obj window 
-  = withObjectRef "sizerItemSetWindow" _obj $ \cobj__obj -> 
-    withObjectPtr window $ \cobj_window -> 
-    wxSizerItem_SetWindow cobj__obj  cobj_window  
-foreign import ccall "wxSizerItem_SetWindow" wxSizerItem_SetWindow :: Ptr (TSizerItem a) -> Ptr (TWindow b) -> IO ()
-
 -- | usage: (@sizerItemShow obj show@).
 sizerItemShow :: SizerItem  a -> Int ->  IO ()
 sizerItemShow _obj show 
@@ -8251,14 +8244,6 @@     wxSizer_SetSizeHints cobj__obj  cobj_window  
 foreign import ccall "wxSizer_SetSizeHints" wxSizer_SetSizeHints :: Ptr (TSizer a) -> Ptr (TWindow b) -> IO ()
 
--- | usage: (@sizerSetVirtualSizeHints obj window@).
-sizerSetVirtualSizeHints :: Sizer  a -> Window  b ->  IO ()
-sizerSetVirtualSizeHints _obj window 
-  = withObjectRef "sizerSetVirtualSizeHints" _obj $ \cobj__obj -> 
-    withObjectPtr window $ \cobj_window -> 
-    wxSizer_SetVirtualSizeHints cobj__obj  cobj_window  
-foreign import ccall "wxSizer_SetVirtualSizeHints" wxSizer_SetVirtualSizeHints :: Ptr (TSizer a) -> Ptr (TWindow b) -> IO ()
-
 -- | usage: (@sizerShow obj sizer index show@).
 sizerShow :: Sizer  a -> Sizer  b -> Int -> Bool ->  IO Bool
 sizerShow _obj sizer index show 
@@ -8422,13 +8407,6 @@     wxSlider_SetTick cobj__obj  (toCInt tickPos)  
 foreign import ccall "wxSlider_SetTick" wxSlider_SetTick :: Ptr (TSlider a) -> CInt -> IO ()
 
--- | usage: (@sliderSetTickFreq obj n pos@).
-sliderSetTickFreq :: Slider  a -> Int -> Int ->  IO ()
-sliderSetTickFreq _obj n pos 
-  = withObjectRef "sliderSetTickFreq" _obj $ \cobj__obj -> 
-    wxSlider_SetTickFreq cobj__obj  (toCInt n)  (toCInt pos)  
-foreign import ccall "wxSlider_SetTickFreq" wxSlider_SetTickFreq :: Ptr (TSlider a) -> CInt -> CInt -> IO ()
-
 -- | usage: (@sliderSetValue obj value@).
 sliderSetValue :: Slider  a -> Int ->  IO ()
 sliderSetValue _obj value 
@@ -8706,13 +8684,6 @@     wxSplitterWindow_SetSashPosition cobj__obj  (toCInt position)  (toCBool redraw)  
 foreign import ccall "wxSplitterWindow_SetSashPosition" wxSplitterWindow_SetSashPosition :: Ptr (TSplitterWindow a) -> CInt -> CBool -> IO ()
 
--- | usage: (@splitterWindowSetSashSize obj width@).
-splitterWindowSetSashSize :: SplitterWindow  a -> Int ->  IO ()
-splitterWindowSetSashSize _obj width 
-  = withObjectRef "splitterWindowSetSashSize" _obj $ \cobj__obj -> 
-    wxSplitterWindow_SetSashSize cobj__obj  (toCInt width)  
-foreign import ccall "wxSplitterWindow_SetSashSize" wxSplitterWindow_SetSashSize :: Ptr (TSplitterWindow a) -> CInt -> IO ()
-
 -- | usage: (@splitterWindowSetSplitMode obj mode@).
 splitterWindowSetSplitMode :: SplitterWindow  a -> Int ->  IO ()
 splitterWindowSetSplitMode _obj mode 
@@ -12782,15 +12753,18 @@     wxToolBar_AddSeparator cobj__obj  
 foreign import ccall "wxToolBar_AddSeparator" wxToolBar_AddSeparator :: Ptr (TToolBar a) -> IO ()
 
--- | usage: (@toolBarAddTool obj id bmp shelp lhelp@).
-toolBarAddTool :: ToolBar  a -> Id -> Bitmap  c -> String -> String ->  IO ()
-toolBarAddTool _obj id bmp shelp lhelp 
+-- | usage: (@toolBarAddTool obj toolid label bitmap bmpDisabled kind shortHelp longHelp wxdata@).
+toolBarAddTool :: ToolBar  a -> Int -> String -> Bitmap  d -> Bitmap  e -> Int -> String -> String -> WxObject  i ->  IO ()
+toolBarAddTool _obj toolid label bitmap bmpDisabled kind shortHelp longHelp wxdata 
   = withObjectRef "toolBarAddTool" _obj $ \cobj__obj -> 
-    withObjectPtr bmp $ \cobj_bmp -> 
-    withStringPtr shelp $ \cobj_shelp -> 
-    withStringPtr lhelp $ \cobj_lhelp -> 
-    wxToolBar_AddTool cobj__obj  (toCInt id)  cobj_bmp  cobj_shelp  cobj_lhelp  
-foreign import ccall "wxToolBar_AddTool" wxToolBar_AddTool :: Ptr (TToolBar a) -> CInt -> Ptr (TBitmap c) -> Ptr (TWxString d) -> Ptr (TWxString e) -> IO ()
+    withStringPtr label $ \cobj_label -> 
+    withObjectPtr bitmap $ \cobj_bitmap -> 
+    withObjectPtr bmpDisabled $ \cobj_bmpDisabled -> 
+    withStringPtr shortHelp $ \cobj_shortHelp -> 
+    withStringPtr longHelp $ \cobj_longHelp -> 
+    withObjectPtr wxdata $ \cobj_wxdata -> 
+    wxToolBar_AddTool cobj__obj  (toCInt toolid)  cobj_label  cobj_bitmap  cobj_bmpDisabled  (toCInt kind)  cobj_shortHelp  cobj_longHelp  cobj_wxdata  
+foreign import ccall "wxToolBar_AddTool" wxToolBar_AddTool :: Ptr (TToolBar a) -> CInt -> Ptr (TWxString c) -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CInt -> Ptr (TWxString g) -> Ptr (TWxString h) -> Ptr (TWxObject i) -> IO ()
 
 -- | usage: (@toolBarAddTool2 obj toolId label bmp bmpDisabled itemKind shortHelp longHelp@).
 toolBarAddTool2 :: ToolBar  a -> Int -> String -> Bitmap  d -> Bitmap  e -> Int -> String -> String ->  IO ()
@@ -12804,18 +12778,6 @@     wxToolBar_AddTool2 cobj__obj  (toCInt toolId)  cobj_label  cobj_bmp  cobj_bmpDisabled  (toCInt itemKind)  cobj_shortHelp  cobj_longHelp  
 foreign import ccall "wxToolBar_AddTool2" wxToolBar_AddTool2 :: Ptr (TToolBar a) -> CInt -> Ptr (TWxString c) -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CInt -> Ptr (TWxString g) -> Ptr (TWxString h) -> IO ()
 
--- | usage: (@toolBarAddToolEx obj id bmp1 bmp2 isToggle xy wxdata shelp lhelp@).
-toolBarAddToolEx :: ToolBar  a -> Id -> Bitmap  c -> Bitmap  d -> Bool -> Point -> WxObject  g -> String -> String ->  IO ()
-toolBarAddToolEx _obj id bmp1 bmp2 isToggle xy wxdata shelp lhelp 
-  = withObjectRef "toolBarAddToolEx" _obj $ \cobj__obj -> 
-    withObjectPtr bmp1 $ \cobj_bmp1 -> 
-    withObjectPtr bmp2 $ \cobj_bmp2 -> 
-    withObjectPtr wxdata $ \cobj_wxdata -> 
-    withStringPtr shelp $ \cobj_shelp -> 
-    withStringPtr lhelp $ \cobj_lhelp -> 
-    wxToolBar_AddToolEx cobj__obj  (toCInt id)  cobj_bmp1  cobj_bmp2  (toCBool isToggle)  (toCIntPointX xy) (toCIntPointY xy)  cobj_wxdata  cobj_shelp  cobj_lhelp  
-foreign import ccall "wxToolBar_AddToolEx" wxToolBar_AddToolEx :: Ptr (TToolBar a) -> CInt -> Ptr (TBitmap c) -> Ptr (TBitmap d) -> CBool -> CInt -> CInt -> Ptr (TWxObject g) -> Ptr (TWxString h) -> Ptr (TWxString i) -> IO ()
-
 -- | usage: (@toolBarCreate prt id lfttopwdthgt stl@).
 toolBarCreate :: Window  a -> Id -> Rect -> Style ->  IO (ToolBar  ())
 toolBarCreate _prt _id _lfttopwdthgt _stl 
@@ -12940,18 +12902,6 @@     wxToolBar_InsertSeparator cobj__obj  (toCInt pos)  
 foreign import ccall "wxToolBar_InsertSeparator" wxToolBar_InsertSeparator :: Ptr (TToolBar a) -> CInt -> IO ()
 
--- | usage: (@toolBarInsertTool obj pos id bmp1 bmp2 isToggle wxdata shelp lhelp@).
-toolBarInsertTool :: ToolBar  a -> Int -> Id -> Bitmap  d -> Bitmap  e -> Bool -> WxObject  g -> String -> String ->  IO ()
-toolBarInsertTool _obj pos id bmp1 bmp2 isToggle wxdata shelp lhelp 
-  = withObjectRef "toolBarInsertTool" _obj $ \cobj__obj -> 
-    withObjectPtr bmp1 $ \cobj_bmp1 -> 
-    withObjectPtr bmp2 $ \cobj_bmp2 -> 
-    withObjectPtr wxdata $ \cobj_wxdata -> 
-    withStringPtr shelp $ \cobj_shelp -> 
-    withStringPtr lhelp $ \cobj_lhelp -> 
-    wxToolBar_InsertTool cobj__obj  (toCInt pos)  (toCInt id)  cobj_bmp1  cobj_bmp2  (toCBool isToggle)  cobj_wxdata  cobj_shelp  cobj_lhelp  
-foreign import ccall "wxToolBar_InsertTool" wxToolBar_InsertTool :: Ptr (TToolBar a) -> CInt -> CInt -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CBool -> Ptr (TWxObject g) -> Ptr (TWxString h) -> Ptr (TWxString i) -> IO ()
-
 -- | usage: (@toolBarRealize obj@).
 toolBarRealize :: ToolBar  a ->  IO Bool
 toolBarRealize _obj 
@@ -13935,12 +13885,6 @@     wxValidator_GetWindow cobj__obj  
 foreign import ccall "wxValidator_GetWindow" wxValidator_GetWindow :: Ptr (TValidator a) -> IO (Ptr (TWindow ()))
 
--- | usage: (@validatorSetBellOnError doIt@).
-validatorSetBellOnError :: Bool ->  IO ()
-validatorSetBellOnError doIt 
-  = wxValidator_SetBellOnError (toCBool doIt)  
-foreign import ccall "wxValidator_SetBellOnError" wxValidator_SetBellOnError :: CBool -> IO ()
-
 -- | usage: (@validatorSetWindow obj win@).
 validatorSetWindow :: Validator  a -> Window  b ->  IO ()
 validatorSetWindow _obj win 
@@ -13949,6 +13893,12 @@     wxValidator_SetWindow cobj__obj  cobj_win  
 foreign import ccall "wxValidator_SetWindow" wxValidator_SetWindow :: Ptr (TValidator a) -> Ptr (TWindow b) -> IO ()
 
+-- | usage: (@validatorSuppressBellOnError doIt@).
+validatorSuppressBellOnError :: Bool ->  IO ()
+validatorSuppressBellOnError doIt 
+  = wxValidator_SuppressBellOnError (toCBool doIt)  
+foreign import ccall "wxValidator_SuppressBellOnError" wxValidator_SuppressBellOnError :: CBool -> IO ()
+
 -- | usage: (@validatorTransferFromWindow obj@).
 validatorTransferFromWindow :: Validator  a ->  IO Bool
 validatorTransferFromWindow _obj 
@@ -14633,13 +14583,6 @@     wxWindow_Lower cobj__obj  
 foreign import ccall "wxWindow_Lower" wxWindow_Lower :: Ptr (TWindow a) -> IO ()
 
--- | usage: (@windowMakeModal obj modal@).
-windowMakeModal :: Window  a -> Bool ->  IO ()
-windowMakeModal _obj modal 
-  = withObjectRef "windowMakeModal" _obj $ \cobj__obj -> 
-    wxWindow_MakeModal cobj__obj  (toCBool modal)  
-foreign import ccall "wxWindow_MakeModal" wxWindow_MakeModal :: Ptr (TWindow a) -> CBool -> IO ()
-
 -- | usage: (@windowMove obj xy@).
 windowMove :: Window  a -> Point ->  IO ()
 windowMove _obj xy 
@@ -20352,13 +20295,6 @@   = withObjectRef "wxcLogSetTimestamp" _obj $ \cobj__obj -> 
     wx_ELJLog_SetTimestamp cobj__obj  ts  
 foreign import ccall "ELJLog_SetTimestamp" wx_ELJLog_SetTimestamp :: Ptr (TWXCLog a) -> Ptr  b -> IO ()
-
--- | usage: (@wxcLogSetTraceMask obj ulMask@).
-wxcLogSetTraceMask :: WXCLog  a -> Int ->  IO ()
-wxcLogSetTraceMask _obj ulMask 
-  = withObjectRef "wxcLogSetTraceMask" _obj $ \cobj__obj -> 
-    wx_ELJLog_SetTraceMask cobj__obj  (toCInt ulMask)  
-foreign import ccall "ELJLog_SetTraceMask" wx_ELJLog_SetTraceMask :: Ptr (TWXCLog a) -> CInt -> IO ()
 
 -- | usage: (@wxcLogSetVerbose obj bVerbose@).
 wxcLogSetVerbose :: WXCLog  a -> Int ->  IO ()
src/haskell/Graphics/UI/WXCore/WxcDefs.hs view
@@ -1,9912 +1,10752 @@----------------------------------------------------------------------------------{-| Module      :  WxcDefs-    Copyright   :  Copyright (c) Daan Leijen 2003, 2004-    License     :  wxWidgets--    Maintainer  :  wxhaskell-devel@lists.sourceforge.net-    Stability   :  provisional-    Portability :  portable--Haskell constant definitions for the wxWidgets C library (@wxc.dll@).--This file was originally generated automatically by wxDirect; it-is now manually maintained.---}----------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcDefs-    ( -- * Types-      BitFlag-      -- * Constants-     ,wxBU_EXACTFIT-     ,wxTE_PROCESS_ENTER-     ,wxTE_PASSWORD-     ,wxTE_RICH2-     ,wxTE_AUTO_URL-     ,wxTE_NOHIDESEL-     ,wxTE_LEFT-     ,wxTE_RIGHT-     ,wxTE_CENTRE-     ,wxTE_LINEWRAP-     ,wxTE_WORDWRAP-     ,wxEXEC_ASYNC-     ,wxEXEC_SYNC-     ,wxEXEC_NOHIDE-     ,wxEXEC_MAKE_GROUP_LEADER-     ,wxITEM_SEPARATOR-     ,wxITEM_NORMAL-     ,wxITEM_CHECK-     ,wxITEM_RADIO-     ,wxITEM_MAX-     ,wxCLOSE_BOX-     ,wxFRAME_EX_CONTEXTHELP-     ,wxDIALOG_EX_CONTEXTHELP-     ,wxFRAME_SHAPED-     ,wxFULLSCREEN_ALL-     ,wxTreeItemIcon_Normal-     ,wxTreeItemIcon_Selected-     ,wxTreeItemIcon_Expanded-     ,wxTreeItemIcon_SelectedExpanded-     ,wxCONFIG_USE_LOCAL_FILE-     ,wxCONFIG_USE_GLOBAL_FILE-     ,wxCONFIG_USE_RELATIVE_PATH-     ,wxCONFIG_USE_NO_ESCAPE_CHARACTERS-     ,wxCONFIG_TYPE_UNKNOWN-     ,wxCONFIG_TYPE_STRING-     ,wxCONFIG_TYPE_BOOLEAN-     ,wxCONFIG_TYPE_INTEGER-     ,wxCONFIG_TYPE_FLOAT-     ,wxSIGNONE-     ,wxSIGHUP-     ,wxSIGINT-     ,wxSIGQUIT-     ,wxSIGILL-     ,wxSIGTRAP-     ,wxSIGABRT-     ,wxSIGEMT-     ,wxSIGFPE-     ,wxSIGKILL-     ,wxSIGBUS-     ,wxSIGSEGV-     ,wxSIGSYS-     ,wxSIGPIPE-     ,wxSIGALRM-     ,wxSIGTERM-     ,wxKILL_OK-     ,wxKILL_BAD_SIGNAL-     ,wxKILL_ACCESS_DENIED-     ,wxKILL_NO_PROCESS-     ,wxKILL_ERROR-     ,wxSTREAM_NO_ERROR-     ,wxSTREAM_EOF-     ,wxSTREAM_WRITE_ERROR-     ,wxSTREAM_READ_ERROR-     ,wxNB_MULTILINE-     ,wxIMAGE_LIST_NORMAL-     ,wxIMAGE_LIST_SMALL-     ,wxIMAGE_LIST_STATE-     ,wxTB_HORIZONTAL-     ,wxTB_NOALIGN-     ,wxTB_NODIVIDER-     ,wxTB_NOICONS-     ,wxTB_TEXT-     ,wxTB_VERTICAL-     ,wxADJUST_MINSIZE-     ,wxDB_TYPE_NAME_LEN-     ,wxDB_MAX_STATEMENT_LEN-     ,wxDB_MAX_WHERE_CLAUSE_LEN-     ,wxDB_MAX_ERROR_MSG_LEN-     ,wxDB_MAX_ERROR_HISTORY-     ,wxDB_MAX_TABLE_NAME_LEN-     ,wxDB_MAX_COLUMN_NAME_LEN-     ,wxDB_DATA_TYPE_VARCHAR-     ,wxDB_DATA_TYPE_INTEGER-     ,wxDB_DATA_TYPE_FLOAT-     ,wxDB_DATA_TYPE_DATE-     ,wxDB_DATA_TYPE_BLOB-     ,wxDB_SELECT_KEYFIELDS-     ,wxDB_SELECT_WHERE-     ,wxDB_SELECT_MATCHING-     ,wxDB_SELECT_STATEMENT-     ,wxDB_UPD_KEYFIELDS-     ,wxDB_UPD_WHERE-     ,wxDB_DEL_KEYFIELDS-     ,wxDB_DEL_WHERE-     ,wxDB_DEL_MATCHING-     ,wxDB_WHERE_KEYFIELDS-     ,wxDB_WHERE_MATCHING-     ,wxDB_GRANT_SELECT-     ,wxDB_GRANT_INSERT-     ,wxDB_GRANT_UPDATE-     ,wxDB_GRANT_DELETE-     ,wxDB_GRANT_ALL-     ,wxSQL_INVALID_HANDLE-     ,wxSQL_ERROR-     ,wxSQL_SUCCESS-     ,wxSQL_SUCCESS_WITH_INFO-     ,wxSQL_NO_DATA_FOUND-     ,wxSQL_CHAR-     ,wxSQL_NUMERIC-     ,wxSQL_DECIMAL-     ,wxSQL_INTEGER-     ,wxSQL_SMALLINT-     ,wxSQL_FLOAT-     ,wxSQL_REAL-     ,wxSQL_DOUBLE-     ,wxSQL_VARCHAR-     ,wxSQL_C_CHAR-     ,wxSQL_C_LONG-     ,wxSQL_C_SHORT-     ,wxSQL_C_FLOAT-     ,wxSQL_C_DOUBLE-     ,wxSQL_C_DEFAULT-     ,wxSQL_NO_NULLS-     ,wxSQL_NULLABLE-     ,wxSQL_NULLABLE_UNKNOWN-     ,wxSQL_NULL_DATA-     ,wxSQL_DATA_AT_EXEC-     ,wxSQL_NTS-     ,wxSQL_DATE-     ,wxSQL_TIME-     ,wxSQL_TIMESTAMP-     ,wxSQL_C_DATE-     ,wxSQL_C_TIME-     ,wxSQL_C_TIMESTAMP-     ,wxSQL_FETCH_NEXT-     ,wxSQL_FETCH_FIRST-     ,wxSQL_FETCH_LAST-     ,wxSQL_FETCH_PRIOR-     ,wxSQL_FETCH_ABSOLUTE-     ,wxSQL_FETCH_RELATIVE-     ,wxSQL_FETCH_BOOKMARK-     ,wxSOUND_SYNC-     ,wxSOUND_ASYNC-     ,wxSOUND_LOOP-     ,wxDRAG_COPYONLY-     ,wxDRAG_ALLOWMOVE-     ,wxDRAG_DEFALUTMOVE-     ,wxMEDIACTRLPLAYERCONTROLS_NONE-     ,wxMEDIACTRLPLAYERCONTROLS_STEP-     ,wxMEDIACTRLPLAYERCONTROLS_VOLUME-     ,wxMEDIACTRLPLAYERCONTROLS_DEFAULT-     ,wxACCEL_ALT-     ,wxACCEL_CTRL-     ,wxACCEL_SHIFT-     ,wxACCEL_NORMAL-     ,wxNULL_FLAG-     ,wxEVT_NULL-     ,wxEVT_FIRST-     ,wxJOYSTICK1-     ,wxJOYSTICK2-     ,wxJOY_BUTTON1-     ,wxJOY_BUTTON2-     ,wxJOY_BUTTON3-     ,wxJOY_BUTTON4-     ,wxUNKNOWN_PLATFORM-     ,wxCURSES-     ,wxXVIEW_X-     ,wxMOTIF_X-     ,wxCOSE_X-     ,wxNEXTSTEP-     ,wxMACINTOSH-     ,wxBEOS-     ,wxGTK-     ,wxGTK_WIN32-     ,wxGTK_OS2-     ,wxGTK_BEOS-     ,wxQT-     ,wxGEOS-     ,wxOS2_PM-     ,wxWINDOWS-     ,wxPENWINDOWS-     ,wxWINDOWS_NT-     ,wxWIN32S-     ,wxWIN95-     ,wxWIN386-     ,wxMGL_UNIX-     ,wxMGL_X-     ,wxMGL_WIN32-     ,wxMGL_OS2-     ,wxWINDOWS_OS2-     ,wxUNIX-     ,wxBIG_ENDIAN-     ,wxLITTLE_ENDIAN-     ,wxPDP_ENDIAN-     ,wxCENTRE-     ,wxCENTER-     ,wxCENTER_FRAME-     ,wxCENTRE_ON_SCREEN-     ,wxHORIZONTAL-     ,wxVERTICAL-     ,wxBOTH-     ,wxLEFT-     ,wxRIGHT-     ,wxUP-     ,wxDOWN-     ,wxTOP-     ,wxBOTTOM-     ,wxNORTH-     ,wxSOUTH-     ,wxWEST-     ,wxEAST-     ,wxALL-     ,wxALIGN_NOT-     ,wxALIGN_CENTER_HORIZONTAL-     ,wxALIGN_CENTRE_HORIZONTAL-     ,wxALIGN_LEFT-     ,wxALIGN_TOP-     ,wxALIGN_RIGHT-     ,wxALIGN_BOTTOM-     ,wxALIGN_CENTER_VERTICAL-     ,wxALIGN_CENTRE_VERTICAL-     ,wxALIGN_CENTER-     ,wxALIGN_CENTRE-     ,wxSTRETCH_NOT-     ,wxSHRINK-     ,wxGROW-     ,wxEXPAND-     ,wxSHAPED-     ,wxVSCROLL-     ,wxHSCROLL-     ,wxCAPTION-     ,wxDOUBLE_BORDER -- Deprecated-     ,wxSUNKEN_BORDER -- Deprecated-     ,wxRAISED_BORDER -- Deprecated-     ,wxSTATIC_BORDER -- Deprecated-     ,wxBORDER--     ,wxBORDER_DEFAULT-     ,wxBORDER_NONE-     ,wxBORDER_STATIC-     ,wxBORDER_SIMPLE-     ,wxBORDER_RAISED-     ,wxBORDER_SUNKEN-     ,wxBORDER_THEME-     ,wxBORDER_MASK--     ,wxTRANSPARENT_WINDOW-     ,wxNO_BORDER-     ,wxUSER_COLOURS-     ,wxNO_3D-     ,wxCLIP_CHILDREN-     ,wxTAB_TRAVERSAL-     ,wxWANTS_CHARS-     ,wxRETAINED-     ,wxNO_FULL_REPAINT_ON_RESIZE-     ,wxWS_EX_VALIDATE_RECURSIVELY-     ,wxSTAY_ON_TOP-     ,wxICONIZE-     ,wxMAXIMIZE-     ,wxSYSTEM_MENU-     ,wxMINIMIZE_BOX-     ,wxMAXIMIZE_BOX-     ,wxDEFAULT_FRAME_STYLE-     ,wxTINY_CAPTION_HORIZ-     ,wxTINY_CAPTION_VERT-     ,wxRESIZE_BORDER-     ,wxDIALOG_MODAL-     ,wxDIALOG_MODELESS-     ,wxFRAME_FLOAT_ON_PARENT-     ,wxFRAME_NO_WINDOW_MENU-     ,wxED_CLIENT_MARGIN-     ,wxED_BUTTONS_BOTTOM-     ,wxED_BUTTONS_RIGHT-     ,wxED_STATIC_LINE-     ,wxTB_3DBUTTONS-     ,wxTB_FLAT-     ,wxTB_DOCKABLE-     ,wxMB_DOCKABLE-     ,wxMENU_TEAROFF-     ,wxCOLOURED-     ,wxFIXED_LENGTH-     ,wxLB_SORT-     ,wxLB_SINGLE-     ,wxLB_MULTIPLE-     ,wxLB_EXTENDED-     ,wxLB_OWNERDRAW-     ,wxLB_NEEDED_SB-     ,wxLB_ALWAYS_SB-     ,wxTE_READONLY-     ,wxTE_MULTILINE-     ,wxTE_PROCESS_TAB-     ,wxTE_RICH-     ,wxTE_NO_VSCROLL-     ,wxTE_AUTO_SCROLL-     ,wxPROCESS_ENTER-     ,wxPASSWORD-     ,wxCB_SIMPLE-     ,wxCB_SORT-     ,wxCB_READONLY-     ,wxCB_DROPDOWN-     ,wxRB_GROUP-     ,wxGA_PROGRESSBAR-     ,wxGA_SMOOTH-     ,wxSL_NOTIFY_DRAG-     ,wxSL_AUTOTICKS-     ,wxSL_LABELS-     ,wxSL_LEFT-     ,wxSL_TOP-     ,wxSL_RIGHT-     ,wxSL_BOTTOM-     ,wxSL_BOTH-     ,wxSL_SELRANGE-     ,wxBU_AUTODRAW-     ,wxBU_NOAUTODRAW-     ,wxBU_LEFT-     ,wxBU_TOP-     ,wxBU_RIGHT-     ,wxBU_BOTTOM-     ,wxLC_VRULES-     ,wxLC_HRULES-     ,wxLC_ICON-     ,wxLC_SMALL_ICON-     ,wxLC_LIST-     ,wxLC_REPORT-     ,wxLC_ALIGN_TOP-     ,wxLC_ALIGN_LEFT-     ,wxLC_AUTOARRANGE-     ,wxLC_VIRTUAL-     ,wxLC_EDIT_LABELS-     ,wxLC_NO_HEADER-     ,wxLC_NO_SORT_HEADER-     ,wxLC_SINGLE_SEL-     ,wxLC_SORT_ASCENDING-     ,wxLC_SORT_DESCENDING-     ,wxLC_MASK_TYPE-     ,wxLC_MASK_ALIGN-     ,wxLC_MASK_SORT-     ,wxSP_ARROW_KEYS-     ,wxSP_WRAP-     ,wxSP_NOBORDER-     ,wxSP_NOSASH-     ,wxSP_BORDER-     ,wxSP_PERMIT_UNSPLIT-     ,wxSP_LIVE_UPDATE-     ,wxSP_3DSASH-     ,wxSP_3DBORDER-     ,wxSP_3D-     ,wxSP_FULLSASH-     ,wxFRAME_TOOL_WINDOW-     ,wxTC_MULTILINE-     ,wxTC_RIGHTJUSTIFY-     ,wxTC_FIXEDWIDTH-     ,wxTC_OWNERDRAW-     ,wxNB_FIXEDWIDTH-     ,wxST_SIZEGRIP-     ,wxST_NO_AUTORESIZE-     ,wxPD_CAN_ABORT-     ,wxPD_APP_MODAL-     ,wxPD_AUTO_HIDE-     ,wxPD_ELAPSED_TIME-     ,wxPD_ESTIMATED_TIME-     ,wxPD_REMAINING_TIME-     ,wxHW_SCROLLBAR_NEVER-     ,wxHW_SCROLLBAR_AUTO-     ,wxCAL_SUNDAY_FIRST-     ,wxCAL_MONDAY_FIRST-     ,wxCAL_SHOW_HOLIDAYS-     ,wxCAL_NO_YEAR_CHANGE-     ,wxCAL_NO_MONTH_CHANGE-     ,wxICON_EXCLAMATION-     ,wxICON_HAND-     ,wxICON_QUESTION-     ,wxICON_INFORMATION-     ,wxFORWARD-     ,wxBACKWARD-     ,wxRESET-     ,wxHELP-     ,wxMORE-     ,wxSETUP-     ,wxID_LOWEST-     ,wxID_OPEN-     ,wxID_CLOSE-     ,wxID_NEW-     ,wxID_SAVE-     ,wxID_SAVEAS-     ,wxID_REVERT-     ,wxID_EXIT-     ,wxID_UNDO-     ,wxID_REDO-     ,wxID_HELP-     ,wxID_PRINT-     ,wxID_PRINT_SETUP-     ,wxID_PREVIEW-     ,wxID_ABOUT-     ,wxID_HELP_CONTENTS-     ,wxID_HELP_COMMANDS-     ,wxID_HELP_PROCEDURES-     ,wxID_HELP_CONTEXT-     ,wxPG_DEFAULT_STYLE-     ,wxID_CLOSE_ALL-     ,wxID_PREFERENCES-     ,wxID_EDIT-     ,wxID_CUT-     ,wxID_COPY-     ,wxID_PASTE-     ,wxID_CLEAR-     ,wxID_FIND-     ,wxID_DUPLICATE-     ,wxID_SELECTALL-     ,wxID_DELETE-     ,wxID_REPLACE-     ,wxID_REPLACE_ALL-     ,wxID_PROPERTIES-     ,wxID_VIEW_DETAILS-     ,wxID_VIEW_LARGEICONS-     ,wxID_VIEW_SMALLICONS-     ,wxID_VIEW_LIST-     ,wxID_VIEW_SORTDATE-     ,wxID_VIEW_SORTNAME-     ,wxID_VIEW_SORTSIZE-     ,wxID_VIEW_SORTTYPE-     ,wxID_FILE1-     ,wxID_FILE2-     ,wxID_FILE3-     ,wxID_FILE4-     ,wxID_FILE5-     ,wxID_FILE6-     ,wxID_FILE7-     ,wxID_FILE8-     ,wxID_FILE9-     ,wxID_OK-     ,wxID_CANCEL-     ,wxID_APPLY-     ,wxID_YES-     ,wxID_NO-     ,wxID_STATIC-     ,wxID_FORWARD-     ,wxID_BACKWARD-     ,wxID_DEFAULT-     ,wxID_MORE-     ,wxID_SETUP-     ,wxID_RESET-     ,wxID_FILEDLGG-     ,wxID_HIGHEST-     ,wxSIZE_AUTO_WIDTH-     ,wxSIZE_AUTO_HEIGHT-     ,wxSIZE_USE_EXISTING-     ,wxSIZE_ALLOW_MINUS_ONE-     ,wxSIZE_NO_ADJUSTMENTS-     ,wxSOLID-     ,wxDOT-     ,wxLONG_DASH-     ,wxSHORT_DASH-     ,wxDOT_DASH-     ,wxUSER_DASH-     ,wxTRANSPARENT-     ,wxSTIPPLE_MASK_OPAQUE-     ,wxSTIPPLE_MASK-     ,wxSTIPPLE-     ,wxBDIAGONAL_HATCH-     ,wxCROSSDIAG_HATCH-     ,wxFDIAGONAL_HATCH-     ,wxCROSS_HATCH-     ,wxHORIZONTAL_HATCH-     ,wxVERTICAL_HATCH-     ,wxJOIN_BEVEL-     ,wxJOIN_MITER-     ,wxJOIN_ROUND-     ,wxCAP_ROUND-     ,wxCAP_PROJECTING-     ,wxCAP_BUTT-     ,wxCLEAR-     ,wxXOR-     ,wxINVERT-     ,wxOR_REVERSE-     ,wxAND_REVERSE-     ,wxCOPY-     ,wxAND-     ,wxAND_INVERT-     ,wxNO_OP-     ,wxNOR-     ,wxEQUIV-     ,wxSRC_INVERT-     ,wxOR_INVERT-     ,wxNAND-     ,wxOR-     ,wxSET-     ,wxFLOOD_SURFACE-     ,wxFLOOD_BORDER-     ,wxODDEVEN_RULE-     ,wxWINDING_RULE-     ,wxTOOL_TOP-     ,wxTOOL_BOTTOM-     ,wxTOOL_LEFT-     ,wxTOOL_RIGHT-     ,wxDF_INVALID-     ,wxDF_TEXT-     ,wxDF_BITMAP-     ,wxDF_METAFILE-     ,wxDF_SYLK-     ,wxDF_DIF-     ,wxDF_TIFF-     ,wxDF_OEMTEXT-     ,wxDF_DIB-     ,wxDF_PALETTE-     ,wxDF_PENDATA-     ,wxDF_RIFF-     ,wxDF_WAVE-     ,wxDF_UNICODETEXT-     ,wxDF_ENHMETAFILE-     ,wxDF_FILENAME-     ,wxDF_LOCALE-     ,wxDF_PRIVATE-     ,wxDF_MAX-     ,wxMM_TEXT-     ,wxMM_LOMETRIC-     ,wxMM_HIMETRIC-     ,wxMM_LOENGLISH-     ,wxMM_HIENGLISH-     ,wxMM_TWIPS-     ,wxMM_ISOTROPIC-     ,wxMM_ANISOTROPIC-     ,wxMM_POINTS-     ,wxMM_METRIC-     ,wxPAPER_NONE-     ,wxPAPER_LETTER-     ,wxPAPER_LEGAL-     ,wxPAPER_A4-     ,wxPAPER_CSHEET-     ,wxPAPER_DSHEET-     ,wxPAPER_ESHEET-     ,wxPAPER_LETTERSMALL-     ,wxPAPER_TABLOID-     ,wxPAPER_LEDGER-     ,wxPAPER_STATEMENT-     ,wxPAPER_EXECUTIVE-     ,wxPAPER_A3-     ,wxPAPER_A4SMALL-     ,wxPAPER_A5-     ,wxPAPER_B4-     ,wxPAPER_B5-     ,wxPAPER_FOLIO-     ,wxPAPER_QUARTO-     ,wxPAPER_10X14-     ,wxPAPER_11X17-     ,wxPAPER_NOTE-     ,wxPAPER_ENV_9-     ,wxPAPER_ENV_10-     ,wxPAPER_ENV_11-     ,wxPAPER_ENV_12-     ,wxPAPER_ENV_14-     ,wxPAPER_ENV_DL-     ,wxPAPER_ENV_C5-     ,wxPAPER_ENV_C3-     ,wxPAPER_ENV_C4-     ,wxPAPER_ENV_C6-     ,wxPAPER_ENV_C65-     ,wxPAPER_ENV_B4-     ,wxPAPER_ENV_B5-     ,wxPAPER_ENV_B6-     ,wxPAPER_ENV_ITALY-     ,wxPAPER_ENV_MONARCH-     ,wxPAPER_ENV_PERSONAL-     ,wxPAPER_FANFOLD_US-     ,wxPAPER_FANFOLD_STD_GERMAN-     ,wxPAPER_FANFOLD_LGL_GERMAN-     ,wxPAPER_ISO_B4-     ,wxPAPER_JAPANESE_POSTCARD-     ,wxPAPER_9X11-     ,wxPAPER_10X11-     ,wxPAPER_15X11-     ,wxPAPER_ENV_INVITE-     ,wxPAPER_LETTER_EXTRA-     ,wxPAPER_LEGAL_EXTRA-     ,wxPAPER_TABLOID_EXTRA-     ,wxPAPER_A4_EXTRA-     ,wxPAPER_LETTER_TRANSVERSE-     ,wxPAPER_A4_TRANSVERSE-     ,wxPAPER_LETTER_EXTRA_TRANSVERSE-     ,wxPAPER_A_PLUS-     ,wxPAPER_B_PLUS-     ,wxPAPER_LETTER_PLUS-     ,wxPAPER_A4_PLUS-     ,wxPAPER_A5_TRANSVERSE-     ,wxPAPER_B5_TRANSVERSE-     ,wxPAPER_A3_EXTRA-     ,wxPAPER_A5_EXTRA-     ,wxPAPER_B5_EXTRA-     ,wxPAPER_A2-     ,wxPAPER_A3_TRANSVERSE-     ,wxPAPER_A3_EXTRA_TRANSVERSE-     ,wxPORTRAIT-     ,wxLANDSCAPE-     ,wxDUPLEX_SIMPLEX-     ,wxDUPLEX_HORIZONTAL-     ,wxDUPLEX_VERTICAL-     ,wxPRINT_MODE_NONE-     ,wxPRINT_MODE_PREVIEW-     ,wxPRINT_MODE_FILE-     ,wxPRINT_MODE_PRINTER-     ,wxFULLSCREEN_NOMENUBAR-     ,wxFULLSCREEN_NOTOOLBAR-     ,wxFULLSCREEN_NOSTATUSBAR-     ,wxFULLSCREEN_NOBORDER-     ,wxFULLSCREEN_NOCAPTION-     ,wxLAYOUT_DEFAULT_MARGIN-     ,wxEDGE_LEFT-     ,wxEDGE_TOP-     ,wxEDGE_RIGHT-     ,wxEDGE_BOTTOM-     ,wxEDGE_WIDTH-     ,wxEDGE_HEIGHT-     ,wxEDGE_CENTER-     ,wxEDGE_CENTREX-     ,wxEDGE_CENTREY-     ,wxRELATIONSHIP_UNCONSTRAINED-     ,wxRELATIONSHIP_ASIS-     ,wxRELATIONSHIP_PERCENTOF-     ,wxRELATIONSHIP_ABOVE-     ,wxRELATIONSHIP_BELOW-     ,wxRELATIONSHIP_LEFTOF-     ,wxRELATIONSHIP_RIGHTOF-     ,wxRELATIONSHIP_SAMEAS-     ,wxRELATIONSHIP_ABSOLUTE-     ,wxFONTENCODING_SYSTEM-     ,wxFONTENCODING_DEFAULT-     ,wxFONTENCODING_ISO8859_1-     ,wxFONTENCODING_ISO8859_2-     ,wxFONTENCODING_ISO8859_3-     ,wxFONTENCODING_ISO8859_4-     ,wxFONTENCODING_ISO8859_5-     ,wxFONTENCODING_ISO8859_6-     ,wxFONTENCODING_ISO8859_7-     ,wxFONTENCODING_ISO8859_8-     ,wxFONTENCODING_ISO8859_9-     ,wxFONTENCODING_ISO8859_10-     ,wxFONTENCODING_ISO8859_11-     ,wxFONTENCODING_ISO8859_12-     ,wxFONTENCODING_ISO8859_13-     ,wxFONTENCODING_ISO8859_14-     ,wxFONTENCODING_ISO8859_15-     ,wxFONTENCODING_ISO8859_MAX-     ,wxFONTENCODING_KOI8-     ,wxFONTENCODING_ALTERNATIVE-     ,wxFONTENCODING_BULGARIAN-     ,wxFONTENCODING_CP437-     ,wxFONTENCODING_CP850-     ,wxFONTENCODING_CP852-     ,wxFONTENCODING_CP855-     ,wxFONTENCODING_CP866-     ,wxFONTENCODING_CP874-     ,wxFONTENCODING_CP1250-     ,wxFONTENCODING_CP1251-     ,wxFONTENCODING_CP1252-     ,wxFONTENCODING_CP1253-     ,wxFONTENCODING_CP1254-     ,wxFONTENCODING_CP1255-     ,wxFONTENCODING_CP1256-     ,wxFONTENCODING_CP1257-     ,wxFONTENCODING_CP12_MAX-     ,wxFONTENCODING_UNICODE-     ,wxFONTENCODING_MAX-     ,wxGRIDTABLE_REQUEST_VIEW_GET_VALUES-     ,wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES-     ,wxGRIDTABLE_NOTIFY_ROWS_INSERTED-     ,wxGRIDTABLE_NOTIFY_ROWS_APPENDED-     ,wxGRIDTABLE_NOTIFY_ROWS_DELETED-     ,wxGRIDTABLE_NOTIFY_COLS_INSERTED-     ,wxGRIDTABLE_NOTIFY_COLS_APPENDED-     ,wxGRIDTABLE_NOTIFY_COLS_DELETED-     ,wxGridSelectCells-     ,wxGridSelectRows-     ,wxGridSelectColumns-     ,wxFILTER_NONE-     ,wxFILTER_ASCII-     ,wxFILTER_ALPHA-     ,wxFILTER_ALPHANUMERIC-     ,wxFILTER_NUMERIC-     ,wxFILTER_INCLUDE_LIST-     ,wxFILTER_EXCLUDE_LIST-     ,wxFILTER_UPPER_CASE-     ,wxFILTER_LOWER_CASE-     ,wxBITMAP_TYPE_INVALID-     ,wxBITMAP_TYPE_BMP-     ,wxBITMAP_TYPE_BMP_RESOURCE-     ,wxBITMAP_TYPE_RESOURCE-     ,wxBITMAP_TYPE_ICO-     ,wxBITMAP_TYPE_ICO_RESOURCE-     ,wxBITMAP_TYPE_CUR-     ,wxBITMAP_TYPE_CUR_RESOURCE-     ,wxBITMAP_TYPE_XBM-     ,wxBITMAP_TYPE_XBM_DATA-     ,wxBITMAP_TYPE_XPM-     ,wxBITMAP_TYPE_XPM_DATA-     ,wxBITMAP_TYPE_TIF-     ,wxBITMAP_TYPE_TIF_RESOURCE-     ,wxBITMAP_TYPE_GIF-     ,wxBITMAP_TYPE_GIF_RESOURCE-     ,wxBITMAP_TYPE_PNG-     ,wxBITMAP_TYPE_PNG_RESOURCE-     ,wxBITMAP_TYPE_JPEG-     ,wxBITMAP_TYPE_JPEG_RESOURCE-     ,wxBITMAP_TYPE_PNM-     ,wxBITMAP_TYPE_PNM_RESOURCE-     ,wxBITMAP_TYPE_PCX-     ,wxBITMAP_TYPE_PCX_RESOURCE-     ,wxBITMAP_TYPE_PICT-     ,wxBITMAP_TYPE_PICT_RESOURCE-     ,wxBITMAP_TYPE_ICON-     ,wxBITMAP_TYPE_ICON_RESOURCE-     ,wxBITMAP_TYPE_MACCURSOR-     ,wxBITMAP_TYPE_MACCURSOR_RESOURCE-     ,wxBITMAP_TYPE_ANY-     ,wxCURSOR_NONE-     ,wxCURSOR_ARROW-     ,wxCURSOR_RIGHT_ARROW-     ,wxCURSOR_BULLSEYE-     ,wxCURSOR_CHAR-     ,wxCURSOR_CROSS-     ,wxCURSOR_HAND-     ,wxCURSOR_IBEAM-     ,wxCURSOR_LEFT_BUTTON-     ,wxCURSOR_MAGNIFIER-     ,wxCURSOR_MIDDLE_BUTTON-     ,wxCURSOR_NO_ENTRY-     ,wxCURSOR_PAINT_BRUSH-     ,wxCURSOR_PENCIL-     ,wxCURSOR_POINT_LEFT-     ,wxCURSOR_POINT_RIGHT-     ,wxCURSOR_QUESTION_ARROW-     ,wxCURSOR_RIGHT_BUTTON-     ,wxCURSOR_SIZENESW-     ,wxCURSOR_SIZENS-     ,wxCURSOR_SIZENWSE-     ,wxCURSOR_SIZEWE-     ,wxCURSOR_SIZING-     ,wxCURSOR_SPRAYCAN-     ,wxCURSOR_WAIT-     ,wxCURSOR_WATCH-     ,wxCURSOR_BLANK-     ,wxOPEN-     ,wxSAVE-     ,wxOVERWRITE_PROMPT-     ,wxHIDE_READONLY-     ,wxFILE_MUST_EXIST-     ,wxMULTIPLE-     ,wxCHANGE_DIR-     ,wxDRAG_ERROR-     ,wxDRAG_NONE-     ,wxDRAG_COPY-     ,wxDRAG_MOVE-     ,wxDRAG_LINK-     ,wxDRAG_CANCEL-     ,wxSPLIT_HORIZONTAL-     ,wxSPLIT_VERTICAL-     ,wxLIST_FORMAT_LEFT-     ,wxLIST_FORMAT_RIGHT-     ,wxLIST_FORMAT_CENTRE-     ,wxLIST_FORMAT_CENTER-     ,wxLIST_STATE_DONTCARE-     ,wxLIST_STATE_DROPHILITED-     ,wxLIST_STATE_FOCUSED-     ,wxLIST_STATE_SELECTED-     ,wxLIST_STATE_CUT-     ,wxLIST_MASK_STATE-     ,wxLIST_MASK_TEXT-     ,wxLIST_MASK_IMAGE-     ,wxLIST_MASK_DATA-     ,wxLIST_MASK_WIDTH-     ,wxLIST_MASK_FORMAT-     ,wxLIST_NEXT_ABOVE-     ,wxLIST_NEXT_ALL-     ,wxLIST_NEXT_BELOW-     ,wxLIST_NEXT_LEFT-     ,wxLIST_NEXT_RIGHT-     ,wxRA_SPECIFY_COLS-     ,wxRA_SPECIFY_ROWS-     ,wxTREE_HITTEST_ABOVE-     ,wxTREE_HITTEST_BELOW-     ,wxTREE_HITTEST_NOWHERE-     ,wxTREE_HITTEST_ONITEMBUTTON-     ,wxTREE_HITTEST_ONITEMICON-     ,wxTREE_HITTEST_ONITEMINDENT-     ,wxTREE_HITTEST_ONITEMLABEL-     ,wxTREE_HITTEST_ONITEMRIGHT-     ,wxTREE_HITTEST_ONITEMSTATEICON-     ,wxTREE_HITTEST_TOLEFT-     ,wxTREE_HITTEST_TORIGHT-     ,wxTREE_HITTEST_ONITEMUPPERPART-     ,wxTREE_HITTEST_ONITEMLOWERPART-     ,wxTREE_HITTEST_ONITEM-     ,wxDEFAULT-     ,wxDECORATIVE-     ,wxROMAN-     ,wxSCRIPT-     ,wxSWISS-     ,wxMODERN-     ,wxTELETYPE-     ,wxVARIABLE-     ,wxFIXED-     ,wxNORMAL-     ,wxLIGHT-     ,wxBOLD-     ,wxITALIC-     ,wxSLANT-     ,wxBLUE_BRUSH-     ,wxGREEN_BRUSH-     ,wxWHITE_BRUSH-     ,wxBLACK_BRUSH-     ,wxGREY_BRUSH-     ,wxMEDIUM_GREY_BRUSH-     ,wxLIGHT_GREY_BRUSH-     ,wxTRANSPARENT_BRUSH-     ,wxCYAN_BRUSH-     ,wxRED_BRUSH-     ,wxBLACK-     ,wxWHITE-     ,wxRED-     ,wxBLUE-     ,wxGREEN-     ,wxCYAN-     ,wxLIGHT_GREY-     ,wxRED_PEN-     ,wxCYAN_PEN-     ,wxGREEN_PEN-     ,wxBLACK_PEN-     ,wxWHITE_PEN-     ,wxTRANSPARENT_PEN-     ,wxBLACK_DASHED_PEN-     ,wxGREY_PEN-     ,wxMEDIUM_GREY_PEN-     ,wxLIGHT_GREY_PEN-     ,wxNOT_FOUND-     ,wxPRINTER_NO_ERROR-     ,wxPRINTER_CANCELLED-     ,wxPRINTER_ERROR-     ,wxPREVIEW_PRINT-     ,wxPREVIEW_PREVIOUS-     ,wxPREVIEW_NEXT-     ,wxPREVIEW_ZOOM-     ,wxPREVIEW_FIRST-     ,wxPREVIEW_LAST-     ,wxPREVIEW_GOTO-     ,wxPREVIEW_DEFAULT-     ,wxID_PREVIEW_CLOSE-     ,wxID_PREVIEW_NEXT-     ,wxID_PREVIEW_PREVIOUS-     ,wxID_PREVIEW_PRINT-     ,wxID_PREVIEW_ZOOM-     ,wxID_PREVIEW_FIRST-     ,wxID_PREVIEW_LAST-     ,wxID_PREVIEW_GOTO-     ,wxPRINTID_STATIC-     ,wxPRINTID_RANGE-     ,wxPRINTID_FROM-     ,wxPRINTID_TO-     ,wxPRINTID_COPIES-     ,wxPRINTID_PRINTTOFILE-     ,wxPRINTID_SETUP-     ,wxPRINTID_LEFTMARGIN-     ,wxPRINTID_RIGHTMARGIN-     ,wxPRINTID_TOPMARGIN-     ,wxPRINTID_BOTTOMMARGIN-     ,wxPRINTID_PRINTCOLOUR-     ,wxPRINTID_ORIENTATION-     ,wxPRINTID_COMMAND-     ,wxPRINTID_OPTIONS-     ,wxPRINTID_PAPERSIZE-     ,wxHF_TOOLBAR-     ,wxHF_CONTENTS-     ,wxHF_INDEX-     ,wxHF_SEARCH-     ,wxHF_BOOKMARKS-     ,wxHF_OPENFILES-     ,wxHF_PRINT-     ,wxHF_FLATTOOLBAR-     ,wxHF_DEFAULTSTYLE-     ,wxLAYOUT_HORIZONTAL-     ,wxLAYOUT_VERTICAL-     ,wxLAYOUT_NONE-     ,wxLAYOUT_TOP-     ,wxLAYOUT_LEFT-     ,wxLAYOUT_RIGHT-     ,wxLAYOUT_BOTTOM-     ,wxSASH_DRAG_NONE-     ,wxSASH_DRAG_DRAGGING-     ,wxSASH_DRAG_LEFT_DOWN-     ,wxSASH_TOP-     ,wxSASH_RIGHT-     ,wxSASH_BOTTOM-     ,wxSASH_LEFT-     ,wxSASH_NONE-     ,wxSW_NOBORDER-     ,wxSW_BORDER-     ,wxSW_3DSASH-     ,wxSW_3DBORDER-     ,wxSW_3D-     ,wxSASH_STATUS_OK-     ,wxSASH_STATUS_OUT_OF_RANGE-     ,wxXRC_NONE-     ,wxXRC_USE_LOCALE-     ,wxXRC_NO_SUBCLASSING-     ,wxXRC_NO_RELOADING-     ,wxSYS_WHITE_BRUSH-     ,wxSYS_LTGRAY_BRUSH-     ,wxSYS_GRAY_BRUSH-     ,wxSYS_DKGRAY_BRUSH-     ,wxSYS_BLACK_BRUSH-     ,wxSYS_NULL_BRUSH-     ,wxSYS_HOLLOW_BRUSH-     ,wxSYS_WHITE_PEN-     ,wxSYS_BLACK_PEN-     ,wxSYS_NULL_PEN-     ,wxSYS_OEM_FIXED_FONT-     ,wxSYS_ANSI_FIXED_FONT-     ,wxSYS_ANSI_VAR_FONT-     ,wxSYS_SYSTEM_FONT-     ,wxSYS_DEVICE_DEFAULT_FONT-     ,wxSYS_DEFAULT_PALETTE-     ,wxSYS_SYSTEM_FIXED_FONT-     ,wxSYS_DEFAULT_GUI_FONT-     ,wxSYS_COLOUR_SCROLLBAR-     ,wxSYS_COLOUR_BACKGROUND-     ,wxSYS_COLOUR_ACTIVECAPTION-     ,wxSYS_COLOUR_INACTIVECAPTION-     ,wxSYS_COLOUR_MENU-     ,wxSYS_COLOUR_WINDOW-     ,wxSYS_COLOUR_WINDOWFRAME-     ,wxSYS_COLOUR_MENUTEXT-     ,wxSYS_COLOUR_WINDOWTEXT-     ,wxSYS_COLOUR_CAPTIONTEXT-     ,wxSYS_COLOUR_ACTIVEBORDER-     ,wxSYS_COLOUR_INACTIVEBORDER-     ,wxSYS_COLOUR_APPWORKSPACE-     ,wxSYS_COLOUR_HIGHLIGHT-     ,wxSYS_COLOUR_HIGHLIGHTTEXT-     ,wxSYS_COLOUR_BTNFACE-     ,wxSYS_COLOUR_BTNSHADOW-     ,wxSYS_COLOUR_GRAYTEXT-     ,wxSYS_COLOUR_BTNTEXT-     ,wxSYS_COLOUR_INACTIVECAPTIONTEXT-     ,wxSYS_COLOUR_BTNHIGHLIGHT-     ,wxSYS_COLOUR_3DDKSHADOW-     ,wxSYS_COLOUR_3DLIGHT-     ,wxSYS_COLOUR_INFOTEXT-     ,wxSYS_COLOUR_INFOBK-     ,wxSYS_COLOUR_LISTBOX-     ,wxSYS_COLOUR_DESKTOP-     ,wxSYS_COLOUR_3DFACE-     ,wxSYS_COLOUR_3DSHADOW-     ,wxSYS_COLOUR_3DHIGHLIGHT-     ,wxSYS_COLOUR_3DHILIGHT-     ,wxSYS_COLOUR_BTNHILIGHT-     ,wxSYS_MOUSE_BUTTONS-     ,wxSYS_BORDER_X-     ,wxSYS_BORDER_Y-     ,wxSYS_CURSOR_X-     ,wxSYS_CURSOR_Y-     ,wxSYS_DCLICK_X-     ,wxSYS_DCLICK_Y-     ,wxSYS_DRAG_X-     ,wxSYS_DRAG_Y-     ,wxSYS_EDGE_X-     ,wxSYS_EDGE_Y-     ,wxSYS_HSCROLL_ARROW_X-     ,wxSYS_HSCROLL_ARROW_Y-     ,wxSYS_HTHUMB_X-     ,wxSYS_ICON_X-     ,wxSYS_ICON_Y-     ,wxSYS_ICONSPACING_X-     ,wxSYS_ICONSPACING_Y-     ,wxSYS_WINDOWMIN_X-     ,wxSYS_WINDOWMIN_Y-     ,wxSYS_SCREEN_X-     ,wxSYS_SCREEN_Y-     ,wxSYS_FRAMESIZE_X-     ,wxSYS_FRAMESIZE_Y-     ,wxSYS_SMALLICON_X-     ,wxSYS_SMALLICON_Y-     ,wxSYS_HSCROLL_Y-     ,wxSYS_VSCROLL_X-     ,wxSYS_VSCROLL_ARROW_X-     ,wxSYS_VSCROLL_ARROW_Y-     ,wxSYS_VTHUMB_Y-     ,wxSYS_CAPTION_Y-     ,wxSYS_MENU_Y-     ,wxSYS_NETWORK_PRESENT-     ,wxSYS_PENWINDOWS_PRESENT-     ,wxSYS_SHOW_SOUNDS-     ,wxSYS_SWAP_BUTTONS-     ,wxSYS_SCREEN_NONE-     ,wxSYS_SCREEN_TINY-     ,wxSYS_SCREEN_PDA-     ,wxSYS_SCREEN_SMALL-     ,wxSYS_SCREEN_DESKTOP-     ,wxCAL_BORDER_NONE-     ,wxCAL_BORDER_SQUARE-     ,wxCAL_BORDER_ROUND-     ,wxCAL_HITTEST_NOWHERE-     ,wxCAL_HITTEST_HEADER-     ,wxCAL_HITTEST_DAY-     ,wxUNKNOWN-     ,wxSTRING-     ,wxBOOLEAN-     ,wxINTEGER-     ,wxFLOAT-     ,wxMUTEX_NO_ERROR-     ,wxMUTEX_DEAD_LOCK-     ,wxMUTEX_BUSY-     ,wxMUTEX_UNLOCKED-     ,wxMUTEX_MISC_ERROR-     ,wxPLATFORM_CURRENT-     ,wxPLATFORM_UNIX-     ,wxPLATFORM_WINDOWS-     ,wxPLATFORM_OS2-     ,wxPLATFORM_MAC-     ,wxLED_ALIGN_LEFT-     ,wxLED_ALIGN_RIGHT-     ,wxLED_ALIGN_CENTER-     ,wxLED_ALIGN_MASK-     ,wxLED_DRAW_FADED-     ,wxDS_MANAGE_SCROLLBARS-     ,wxDS_DRAG_CORNER-     ,wxEL_ALLOW_NEW-     ,wxEL_ALLOW_EDIT-     ,wxEL_ALLOW_DELETE-     ,wxTR_NO_BUTTONS-     ,wxTR_HAS_BUTTONS-     ,wxTR_TWIST_BUTTONS-     ,wxTR_NO_LINES-     ,wxTR_LINES_AT_ROOT-     ,wxTR_AQUA_BUTTONS-     ,wxTR_SINGLE-     ,wxTR_MULTIPLE-     ,wxTR_EXTENDED-     ,wxTR_FULL_ROW_HIGHLIGHT-     ,wxTR_EDIT_LABELS-     ,wxTR_ROW_LINES-     ,wxTR_HIDE_ROOT-     ,wxTR_HAS_VARIABLE_ROW_HEIGHT-     ,wxCBAR_DOCKED_HORIZONTALLY-     ,wxCBAR_DOCKED_VERTICALLY-     ,wxCBAR_FLOATING-     ,wxCBAR_HIDDEN-     ,fL_ALIGN_TOP-     ,fL_ALIGN_BOTTOM-     ,fL_ALIGN_LEFT-     ,fL_ALIGN_RIGHT-     ,fL_ALIGN_TOP_PANE-     ,fL_ALIGN_BOTTOM_PANE-     ,fL_ALIGN_LEFT_PANE-     ,fL_ALIGN_RIGHT_PANE-     ,wxALL_PANES-     ,cB_NO_ITEMS_HITTED-     ,cB_UPPER_ROW_HANDLE_HITTED-     ,cB_LOWER_ROW_HANDLE_HITTED-     ,cB_LEFT_BAR_HANDLE_HITTED-     ,cB_RIGHT_BAR_HANDLE_HITTED-     ,cB_BAR_CONTENT_HITTED-     ,wxOK-     ,wxYES-     ,wxNO-     ,wxYES_NO-     ,wxCANCEL-     ,wxNO_DEFAULT-     ,wxYES_DEFAULT-     ,wxFR_DOWN-     ,wxFR_WHOLEWORD-     ,wxFR_MATCHCASE-     ,wxFR_REPLACEDIALOG-     ,wxFR_NOUPDOWN-     ,wxFR_NOMATCHCASE-     ,wxFR_NOWHOLEWORD-     ,wxQUANTIZE_INCLUDE_WINDOWS_COLOURS-     ,wxQUANTIZE_RETURN_8BIT_DATA-     ,wxQUANTIZE_FILL_DESTINATION_IMAGE-     ,wxLANGUAGE_DEFAULT-     ,wxLANGUAGE_UNKNOWN-     ,wxLANGUAGE_ABKHAZIAN-     ,wxLANGUAGE_AFAR-     ,wxLANGUAGE_AFRIKAANS-     ,wxLANGUAGE_ALBANIAN-     ,wxLANGUAGE_AMHARIC-     ,wxLANGUAGE_ARABIC-     ,wxLANGUAGE_ARABIC_ALGERIA-     ,wxLANGUAGE_ARABIC_BAHRAIN-     ,wxLANGUAGE_ARABIC_EGYPT-     ,wxLANGUAGE_ARABIC_IRAQ-     ,wxLANGUAGE_ARABIC_JORDAN-     ,wxLANGUAGE_ARABIC_KUWAIT-     ,wxLANGUAGE_ARABIC_LEBANON-     ,wxLANGUAGE_ARABIC_LIBYA-     ,wxLANGUAGE_ARABIC_MOROCCO-     ,wxLANGUAGE_ARABIC_OMAN-     ,wxLANGUAGE_ARABIC_QATAR-     ,wxLANGUAGE_ARABIC_SAUDI_ARABIA-     ,wxLANGUAGE_ARABIC_SUDAN-     ,wxLANGUAGE_ARABIC_SYRIA-     ,wxLANGUAGE_ARABIC_TUNISIA-     ,wxLANGUAGE_ARABIC_UAE-     ,wxLANGUAGE_ARABIC_YEMEN-     ,wxLANGUAGE_ARMENIAN-     ,wxLANGUAGE_ASSAMESE-     ,wxLANGUAGE_AYMARA-     ,wxLANGUAGE_AZERI-     ,wxLANGUAGE_AZERI_CYRILLIC-     ,wxLANGUAGE_AZERI_LATIN-     ,wxLANGUAGE_BASHKIR-     ,wxLANGUAGE_BASQUE-     ,wxLANGUAGE_BELARUSIAN-     ,wxLANGUAGE_BENGALI-     ,wxLANGUAGE_BHUTANI-     ,wxLANGUAGE_BIHARI-     ,wxLANGUAGE_BISLAMA-     ,wxLANGUAGE_BRETON-     ,wxLANGUAGE_BULGARIAN-     ,wxLANGUAGE_BURMESE-     ,wxLANGUAGE_CAMBODIAN-     ,wxLANGUAGE_CATALAN-     ,wxLANGUAGE_CHINESE-     ,wxLANGUAGE_CHINESE_SIMPLIFIED-     ,wxLANGUAGE_CHINESE_TRADITIONAL-     ,wxLANGUAGE_CHINESE_HONGKONG-     ,wxLANGUAGE_CHINESE_MACAU-     ,wxLANGUAGE_CHINESE_SINGAPORE-     ,wxLANGUAGE_CHINESE_TAIWAN-     ,wxLANGUAGE_CORSICAN-     ,wxLANGUAGE_CROATIAN-     ,wxLANGUAGE_CZECH-     ,wxLANGUAGE_DANISH-     ,wxLANGUAGE_DUTCH-     ,wxLANGUAGE_DUTCH_BELGIAN-     ,wxLANGUAGE_ENGLISH-     ,wxLANGUAGE_ENGLISH_UK-     ,wxLANGUAGE_ENGLISH_US-     ,wxLANGUAGE_ENGLISH_AUSTRALIA-     ,wxLANGUAGE_ENGLISH_BELIZE-     ,wxLANGUAGE_ENGLISH_BOTSWANA-     ,wxLANGUAGE_ENGLISH_CANADA-     ,wxLANGUAGE_ENGLISH_CARIBBEAN-     ,wxLANGUAGE_ENGLISH_DENMARK-     ,wxLANGUAGE_ENGLISH_EIRE-     ,wxLANGUAGE_ENGLISH_JAMAICA-     ,wxLANGUAGE_ENGLISH_NEW_ZEALAND-     ,wxLANGUAGE_ENGLISH_PHILIPPINES-     ,wxLANGUAGE_ENGLISH_SOUTH_AFRICA-     ,wxLANGUAGE_ENGLISH_TRINIDAD-     ,wxLANGUAGE_ENGLISH_ZIMBABWE-     ,wxLANGUAGE_ESPERANTO-     ,wxLANGUAGE_ESTONIAN-     ,wxLANGUAGE_FAEROESE-     ,wxLANGUAGE_FARSI-     ,wxLANGUAGE_FIJI-     ,wxLANGUAGE_FINNISH-     ,wxLANGUAGE_FRENCH-     ,wxLANGUAGE_FRENCH_BELGIAN-     ,wxLANGUAGE_FRENCH_CANADIAN-     ,wxLANGUAGE_FRENCH_LUXEMBOURG-     ,wxLANGUAGE_FRENCH_MONACO-     ,wxLANGUAGE_FRENCH_SWISS-     ,wxLANGUAGE_FRISIAN-     ,wxLANGUAGE_GALICIAN-     ,wxLANGUAGE_GEORGIAN-     ,wxLANGUAGE_GERMAN-     ,wxLANGUAGE_GERMAN_AUSTRIAN-     ,wxLANGUAGE_GERMAN_BELGIUM-     ,wxLANGUAGE_GERMAN_LIECHTENSTEIN-     ,wxLANGUAGE_GERMAN_LUXEMBOURG-     ,wxLANGUAGE_GERMAN_SWISS-     ,wxLANGUAGE_GREEK-     ,wxLANGUAGE_GREENLANDIC-     ,wxLANGUAGE_GUARANI-     ,wxLANGUAGE_GUJARATI-     ,wxLANGUAGE_HAUSA-     ,wxLANGUAGE_HEBREW-     ,wxLANGUAGE_HINDI-     ,wxLANGUAGE_HUNGARIAN-     ,wxLANGUAGE_ICELANDIC-     ,wxLANGUAGE_INDONESIAN-     ,wxLANGUAGE_INTERLINGUA-     ,wxLANGUAGE_INTERLINGUE-     ,wxLANGUAGE_INUKTITUT-     ,wxLANGUAGE_INUPIAK-     ,wxLANGUAGE_IRISH-     ,wxLANGUAGE_ITALIAN-     ,wxLANGUAGE_ITALIAN_SWISS-     ,wxLANGUAGE_JAPANESE-     ,wxLANGUAGE_JAVANESE-     ,wxLANGUAGE_KANNADA-     ,wxLANGUAGE_KASHMIRI-     ,wxLANGUAGE_KASHMIRI_INDIA-     ,wxLANGUAGE_KAZAKH-     ,wxLANGUAGE_KERNEWEK-     ,wxLANGUAGE_KINYARWANDA-     ,wxLANGUAGE_KIRGHIZ-     ,wxLANGUAGE_KIRUNDI-     ,wxLANGUAGE_KONKANI-     ,wxLANGUAGE_KOREAN-     ,wxLANGUAGE_KURDISH-     ,wxLANGUAGE_LAOTHIAN-     ,wxLANGUAGE_LATIN-     ,wxLANGUAGE_LATVIAN-     ,wxLANGUAGE_LINGALA-     ,wxLANGUAGE_LITHUANIAN-     ,wxLANGUAGE_MACEDONIAN-     ,wxLANGUAGE_MALAGASY-     ,wxLANGUAGE_MALAY-     ,wxLANGUAGE_MALAYALAM-     ,wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM-     ,wxLANGUAGE_MALAY_MALAYSIA-     ,wxLANGUAGE_MALTESE-     ,wxLANGUAGE_MANIPURI-     ,wxLANGUAGE_MAORI-     ,wxLANGUAGE_MARATHI-     ,wxLANGUAGE_MOLDAVIAN-     ,wxLANGUAGE_MONGOLIAN-     ,wxLANGUAGE_NAURU-     ,wxLANGUAGE_NEPALI-     ,wxLANGUAGE_NEPALI_INDIA-     ,wxLANGUAGE_NORWEGIAN_BOKMAL-     ,wxLANGUAGE_NORWEGIAN_NYNORSK-     ,wxLANGUAGE_OCCITAN-     ,wxLANGUAGE_ORIYA-     ,wxLANGUAGE_OROMO-     ,wxLANGUAGE_PASHTO-     ,wxLANGUAGE_POLISH-     ,wxLANGUAGE_PORTUGUESE-     ,wxLANGUAGE_PORTUGUESE_BRAZILIAN-     ,wxLANGUAGE_PUNJABI-     ,wxLANGUAGE_QUECHUA-     ,wxLANGUAGE_RHAETO_ROMANCE-     ,wxLANGUAGE_ROMANIAN-     ,wxLANGUAGE_RUSSIAN-     ,wxLANGUAGE_RUSSIAN_UKRAINE-     ,wxLANGUAGE_SAMOAN-     ,wxLANGUAGE_SANGHO-     ,wxLANGUAGE_SANSKRIT-     ,wxLANGUAGE_SCOTS_GAELIC-     ,wxLANGUAGE_SERBIAN-     ,wxLANGUAGE_SERBIAN_CYRILLIC-     ,wxLANGUAGE_SERBIAN_LATIN-     ,wxLANGUAGE_SERBO_CROATIAN-     ,wxLANGUAGE_SESOTHO-     ,wxLANGUAGE_SETSWANA-     ,wxLANGUAGE_SHONA-     ,wxLANGUAGE_SINDHI-     ,wxLANGUAGE_SINHALESE-     ,wxLANGUAGE_SISWATI-     ,wxLANGUAGE_SLOVAK-     ,wxLANGUAGE_SLOVENIAN-     ,wxLANGUAGE_SOMALI-     ,wxLANGUAGE_SPANISH-     ,wxLANGUAGE_SPANISH_ARGENTINA-     ,wxLANGUAGE_SPANISH_BOLIVIA-     ,wxLANGUAGE_SPANISH_CHILE-     ,wxLANGUAGE_SPANISH_COLOMBIA-     ,wxLANGUAGE_SPANISH_COSTA_RICA-     ,wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC-     ,wxLANGUAGE_SPANISH_ECUADOR-     ,wxLANGUAGE_SPANISH_EL_SALVADOR-     ,wxLANGUAGE_SPANISH_GUATEMALA-     ,wxLANGUAGE_SPANISH_HONDURAS-     ,wxLANGUAGE_SPANISH_MEXICAN-     ,wxLANGUAGE_SPANISH_MODERN-     ,wxLANGUAGE_SPANISH_NICARAGUA-     ,wxLANGUAGE_SPANISH_PANAMA-     ,wxLANGUAGE_SPANISH_PARAGUAY-     ,wxLANGUAGE_SPANISH_PERU-     ,wxLANGUAGE_SPANISH_PUERTO_RICO-     ,wxLANGUAGE_SPANISH_URUGUAY-     ,wxLANGUAGE_SPANISH_US-     ,wxLANGUAGE_SPANISH_VENEZUELA-     ,wxLANGUAGE_SUNDANESE-     ,wxLANGUAGE_SWAHILI-     ,wxLANGUAGE_SWEDISH-     ,wxLANGUAGE_SWEDISH_FINLAND-     ,wxLANGUAGE_TAGALOG-     ,wxLANGUAGE_TAJIK-     ,wxLANGUAGE_TAMIL-     ,wxLANGUAGE_TATAR-     ,wxLANGUAGE_TELUGU-     ,wxLANGUAGE_THAI-     ,wxLANGUAGE_TIBETAN-     ,wxLANGUAGE_TIGRINYA-     ,wxLANGUAGE_TONGA-     ,wxLANGUAGE_TSONGA-     ,wxLANGUAGE_TURKISH-     ,wxLANGUAGE_TURKMEN-     ,wxLANGUAGE_TWI-     ,wxLANGUAGE_UIGHUR-     ,wxLANGUAGE_UKRAINIAN-     ,wxLANGUAGE_URDU-     ,wxLANGUAGE_URDU_INDIA-     ,wxLANGUAGE_URDU_PAKISTAN-     ,wxLANGUAGE_UZBEK-     ,wxLANGUAGE_UZBEK_CYRILLIC-     ,wxLANGUAGE_UZBEK_LATIN-     ,wxLANGUAGE_VIETNAMESE-     ,wxLANGUAGE_VOLAPUK-     ,wxLANGUAGE_WELSH-     ,wxLANGUAGE_WOLOF-     ,wxLANGUAGE_XHOSA-     ,wxLANGUAGE_YIDDISH-     ,wxLANGUAGE_YORUBA-     ,wxLANGUAGE_ZHUANG-     ,wxLANGUAGE_ZULU-     ,wxLANGUAGE_USER_DEFINE-     ,wxLOCALE_THOUSANDS_SEP-     ,wxLOCALE_DECIMAL_POINT-     ,wxLOCALE_LOAD_DEFAULT-     ,wxLOCALE_CONV_ENCODING-     ,wxSTC_INVALID_POSITION-     ,wxSTC_START-     ,wxSTC_OPTIONAL_START-     ,wxSTC_LEXER_START-     ,wxSTC_WS_INVISIBLE-     ,wxSTC_WS_VISIBLEALWAYS-     ,wxSTC_WS_VISIBLEAFTERINDENT-     ,wxSTC_EOL_CRLF-     ,wxSTC_EOL_CR-     ,wxSTC_EOL_LF-     ,wxSTC_CP_UTF8-     ,wxSTC_CP_DBCS-     ,wxSTC_MARKER_MAX-     ,wxSTC_MARK_CIRCLE-     ,wxSTC_MARK_ROUNDRECT-     ,wxSTC_MARK_ARROW-     ,wxSTC_MARK_SMALLRECT-     ,wxSTC_MARK_SHORTARROW-     ,wxSTC_MARK_EMPTY-     ,wxSTC_MARK_ARROWDOWN-     ,wxSTC_MARK_MINUS-     ,wxSTC_MARK_PLUS-     ,wxSTC_MARK_VLINE-     ,wxSTC_MARK_LCORNER-     ,wxSTC_MARK_TCORNER-     ,wxSTC_MARK_BOXPLUS-     ,wxSTC_MARK_BOXPLUSCONNECTED-     ,wxSTC_MARK_BOXMINUS-     ,wxSTC_MARK_BOXMINUSCONNECTED-     ,wxSTC_MARK_LCORNERCURVE-     ,wxSTC_MARK_TCORNERCURVE-     ,wxSTC_MARK_CIRCLEPLUS-     ,wxSTC_MARK_CIRCLEPLUSCONNECTED-     ,wxSTC_MARK_CIRCLEMINUS-     ,wxSTC_MARK_CIRCLEMINUSCONNECTED-     ,wxSTC_MARK_BACKGROUND-     ,wxSTC_MARK_DOTDOTDOT-     ,wxSTC_MARK_ARROWS-     ,wxSTC_MARK_PIXMAP-     ,wxSTC_MARK_CHARACTER-     ,wxSTC_MARKNUM_FOLDEREND-     ,wxSTC_MARKNUM_FOLDEROPENMID-     ,wxSTC_MARKNUM_FOLDERMIDTAIL-     ,wxSTC_MARKNUM_FOLDERTAIL-     ,wxSTC_MARKNUM_FOLDERSUB-     ,wxSTC_MARKNUM_FOLDER-     ,wxSTC_MARKNUM_FOLDEROPEN-     ,wxSTC_MASK_FOLDERS-     ,wxSTC_MARGIN_SYMBOL-     ,wxSTC_MARGIN_NUMBER-     ,wxSTC_STYLE_DEFAULT-     ,wxSTC_STYLE_LINENUMBER-     ,wxSTC_STYLE_BRACELIGHT-     ,wxSTC_STYLE_BRACEBAD-     ,wxSTC_STYLE_CONTROLCHAR-     ,wxSTC_STYLE_INDENTGUIDE-     ,wxSTC_STYLE_LASTPREDEFINED-     ,wxSTC_STYLE_MAX-     ,wxSTC_CHARSET_ANSI-     ,wxSTC_CHARSET_DEFAULT-     ,wxSTC_CHARSET_BALTIC-     ,wxSTC_CHARSET_CHINESEBIG5-     ,wxSTC_CHARSET_EASTEUROPE-     ,wxSTC_CHARSET_GB2312-     ,wxSTC_CHARSET_GREEK-     ,wxSTC_CHARSET_HANGUL-     ,wxSTC_CHARSET_MAC-     ,wxSTC_CHARSET_OEM-     ,wxSTC_CHARSET_RUSSIAN-     ,wxSTC_CHARSET_SHIFTJIS-     ,wxSTC_CHARSET_SYMBOL-     ,wxSTC_CHARSET_TURKISH-     ,wxSTC_CHARSET_JOHAB-     ,wxSTC_CHARSET_HEBREW-     ,wxSTC_CHARSET_ARABIC-     ,wxSTC_CHARSET_VIETNAMESE-     ,wxSTC_CHARSET_THAI-     ,wxSTC_CASE_MIXED-     ,wxSTC_CASE_UPPER-     ,wxSTC_CASE_LOWER-     ,wxSTC_INDIC_MAX-     ,wxSTC_INDIC_PLAIN-     ,wxSTC_INDIC_SQUIGGLE-     ,wxSTC_INDIC_TT-     ,wxSTC_INDIC_DIAGONAL-     ,wxSTC_INDIC_STRIKE-     ,wxSTC_INDIC_HIDDEN-     ,wxSTC_INDIC0_MASK-     ,wxSTC_INDIC1_MASK-     ,wxSTC_INDIC2_MASK-     ,wxSTC_INDICS_MASK-     ,wxSTC_PRINT_NORMAL-     ,wxSTC_PRINT_INVERTLIGHT-     ,wxSTC_PRINT_BLACKONWHITE-     ,wxSTC_PRINT_COLOURONWHITE-     ,wxSTC_PRINT_COLOURONWHITEDEFAULTBG-     ,wxSTC_FIND_WHOLEWORD-     ,wxSTC_FIND_MATCHCASE-     ,wxSTC_FIND_WORDSTART-     ,wxSTC_FIND_REGEXP-     ,wxSTC_FIND_POSIX-     ,wxSTC_FOLDLEVELBASE-     ,wxSTC_FOLDLEVELWHITEFLAG-     ,wxSTC_FOLDLEVELHEADERFLAG-     ,wxSTC_FOLDLEVELBOXHEADERFLAG-     ,wxSTC_FOLDLEVELBOXFOOTERFLAG-     ,wxSTC_FOLDLEVELCONTRACTED-     ,wxSTC_FOLDLEVELUNINDENT-     ,wxSTC_FOLDLEVELNUMBERMASK-     ,wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED-     ,wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED-     ,wxSTC_FOLDFLAG_LINEAFTER_EXPANDED-     ,wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED-     ,wxSTC_FOLDFLAG_LEVELNUMBERS-     ,wxSTC_FOLDFLAG_BOX-     ,wxSTC_TIME_FOREVER-     ,wxSTC_WRAP_NONE-     ,wxSTC_WRAP_WORD-     ,wxSTC_CACHE_NONE-     ,wxSTC_CACHE_CARET-     ,wxSTC_CACHE_PAGE-     ,wxSTC_CACHE_DOCUMENT-     ,wxSTC_EDGE_NONE-     ,wxSTC_EDGE_LINE-     ,wxSTC_EDGE_BACKGROUND-     ,wxSTC_CURSORNORMAL-     ,wxSTC_CURSORWAIT-     ,wxSTC_VISIBLE_SLOP-     ,wxSTC_VISIBLE_STRICT-     ,wxSTC_CARET_SLOP-     ,wxSTC_CARET_STRICT-     ,wxSTC_CARET_JUMPS-     ,wxSTC_CARET_EVEN-     ,wxSTC_SEL_STREAM-     ,wxSTC_SEL_RECTANGLE-     ,wxSTC_SEL_LINES-     ,wxSTC_KEYWORDSET_MAX-     ,wxSTC_MOD_INSERTTEXT-     ,wxSTC_MOD_DELETETEXT-     ,wxSTC_MOD_CHANGESTYLE-     ,wxSTC_MOD_CHANGEFOLD-     ,wxSTC_PERFORMED_USER-     ,wxSTC_PERFORMED_UNDO-     ,wxSTC_PERFORMED_REDO-     ,wxSTC_LASTSTEPINUNDOREDO-     ,wxSTC_MOD_CHANGEMARKER-     ,wxSTC_MOD_BEFOREINSERT-     ,wxSTC_MOD_BEFOREDELETE-     ,wxSTC_MODEVENTMASKALL-     ,wxSTC_KEY_DOWN-     ,wxSTC_KEY_UP-     ,wxSTC_KEY_LEFT-     ,wxSTC_KEY_RIGHT-     ,wxSTC_KEY_HOME-     ,wxSTC_KEY_END-     ,wxSTC_KEY_PRIOR-     ,wxSTC_KEY_NEXT-     ,wxSTC_KEY_DELETE-     ,wxSTC_KEY_INSERT-     ,wxSTC_KEY_ESCAPE-     ,wxSTC_KEY_BACK-     ,wxSTC_KEY_TAB-     ,wxSTC_KEY_RETURN-     ,wxSTC_KEY_ADD-     ,wxSTC_KEY_SUBTRACT-     ,wxSTC_KEY_DIVIDE-     ,wxSTC_SCMOD_SHIFT-     ,wxSTC_SCMOD_CTRL-     ,wxSTC_SCMOD_ALT-     ,wxSTC_LEX_CONTAINER-     ,wxSTC_LEX_NULL-     ,wxSTC_LEX_PYTHON-     ,wxSTC_LEX_CPP-     ,wxSTC_LEX_HTML-     ,wxSTC_LEX_XML-     ,wxSTC_LEX_PERL-     ,wxSTC_LEX_SQL-     ,wxSTC_LEX_VB-     ,wxSTC_LEX_PROPERTIES-     ,wxSTC_LEX_ERRORLIST-     ,wxSTC_LEX_MAKEFILE-     ,wxSTC_LEX_BATCH-     ,wxSTC_LEX_XCODE-     ,wxSTC_LEX_LATEX-     ,wxSTC_LEX_LUA-     ,wxSTC_LEX_DIFF-     ,wxSTC_LEX_CONF-     ,wxSTC_LEX_PASCAL-     ,wxSTC_LEX_AVE-     ,wxSTC_LEX_ADA-     ,wxSTC_LEX_LISP-     ,wxSTC_LEX_RUBY-     ,wxSTC_LEX_EIFFEL-     ,wxSTC_LEX_EIFFELKW-     ,wxSTC_LEX_TCL-     ,wxSTC_LEX_NNCRONTAB-     ,wxSTC_LEX_BULLANT-     ,wxSTC_LEX_VBSCRIPT-     ,wxSTC_LEX_ASP-     ,wxSTC_LEX_PHP-     ,wxSTC_LEX_BAAN-     ,wxSTC_LEX_MATLAB-     ,wxSTC_LEX_SCRIPTOL-     ,wxSTC_LEX_ASM-     ,wxSTC_LEX_CPPNOCASE-     ,wxSTC_LEX_FORTRAN-     ,wxSTC_LEX_F77-     ,wxSTC_LEX_CSS-     ,wxSTC_LEX_POV-     ,wxSTC_LEX_LOUT-     ,wxSTC_LEX_ESCRIPT-     ,wxSTC_LEX_PS-     ,wxSTC_LEX_NSIS-     ,wxSTC_LEX_MMIXAL-     ,wxSTC_LEX_PHPSCRIPT-     ,wxSTC_LEX_TADS3-     ,wxSTC_LEX_REBOL-     ,wxSTC_LEX_SMALLTALK-     ,wxSTC_LEX_FLAGSHIP-     ,wxSTC_LEX_CSOUND-     ,wxSTC_LEX_FREEBASIC-     ,wxSTC_LEX_AUTOMATIC-     ,wxSTC_LEX_HASKELL-     ,wxSTC_P_DEFAULT-     ,wxSTC_P_COMMENTLINE-     ,wxSTC_P_NUMBER-     ,wxSTC_P_STRING-     ,wxSTC_P_CHARACTER-     ,wxSTC_P_WORD-     ,wxSTC_P_TRIPLE-     ,wxSTC_P_TRIPLEDOUBLE-     ,wxSTC_P_CLASSNAME-     ,wxSTC_P_DEFNAME-     ,wxSTC_P_OPERATOR-     ,wxSTC_P_IDENTIFIER-     ,wxSTC_P_COMMENTBLOCK-     ,wxSTC_P_STRINGEOL-     ,wxSTC_C_DEFAULT-     ,wxSTC_C_COMMENT-     ,wxSTC_C_COMMENTLINE-     ,wxSTC_C_COMMENTDOC-     ,wxSTC_C_NUMBER-     ,wxSTC_C_WORD-     ,wxSTC_C_STRING-     ,wxSTC_C_CHARACTER-     ,wxSTC_C_UUID-     ,wxSTC_C_PREPROCESSOR-     ,wxSTC_C_OPERATOR-     ,wxSTC_C_IDENTIFIER-     ,wxSTC_C_STRINGEOL-     ,wxSTC_C_VERBATIM-     ,wxSTC_C_REGEX-     ,wxSTC_C_COMMENTLINEDOC-     ,wxSTC_C_WORD2-     ,wxSTC_C_COMMENTDOCKEYWORD-     ,wxSTC_C_COMMENTDOCKEYWORDERROR-     ,wxSTC_C_GLOBALCLASS-     ,wxSTC_H_DEFAULT-     ,wxSTC_H_TAG-     ,wxSTC_H_TAGUNKNOWN-     ,wxSTC_H_ATTRIBUTE-     ,wxSTC_H_ATTRIBUTEUNKNOWN-     ,wxSTC_H_NUMBER-     ,wxSTC_H_DOUBLESTRING-     ,wxSTC_H_SINGLESTRING-     ,wxSTC_H_OTHER-     ,wxSTC_H_COMMENT-     ,wxSTC_H_ENTITY-     ,wxSTC_H_TAGEND-     ,wxSTC_H_XMLSTART-     ,wxSTC_H_XMLEND-     ,wxSTC_H_SCRIPT-     ,wxSTC_H_ASP-     ,wxSTC_H_ASPAT-     ,wxSTC_H_CDATA-     ,wxSTC_H_QUESTION-     ,wxSTC_H_VALUE-     ,wxSTC_H_XCCOMMENT-     ,wxSTC_H_SGML_DEFAULT-     ,wxSTC_H_SGML_COMMAND-     ,wxSTC_H_SGML_1ST_PARAM-     ,wxSTC_H_SGML_DOUBLESTRING-     ,wxSTC_H_SGML_SIMPLESTRING-     ,wxSTC_H_SGML_ERROR-     ,wxSTC_H_SGML_SPECIAL-     ,wxSTC_H_SGML_ENTITY-     ,wxSTC_H_SGML_COMMENT-     ,wxSTC_H_SGML_1ST_PARAM_COMMENT-     ,wxSTC_H_SGML_BLOCK_DEFAULT-     ,wxSTC_HA_DEFAULT-     ,wxSTC_HA_IDENTIFIER-     ,wxSTC_HA_KEYWORD-     ,wxSTC_HA_NUMBER-     ,wxSTC_HA_STRING-     ,wxSTC_HA_CHARACTER-     ,wxSTC_HA_CLASS-     ,wxSTC_HA_MODULE-     ,wxSTC_HA_CAPITAL-     ,wxSTC_HA_DATA-     ,wxSTC_HA_IMPORT-     ,wxSTC_HA_OPERATOR-     ,wxSTC_HA_INSTANCE-     ,wxSTC_HA_COMMENTLINE-     ,wxSTC_HA_COMMENTBLOCK-     ,wxSTC_HA_COMMENTBLOCK2-     ,wxSTC_HA_COMMENTBLOCK3-     ,wxSTC_HA_PREPROCESSOR-     ,wxSTC_HJ_START-     ,wxSTC_HJ_DEFAULT-     ,wxSTC_HJ_COMMENT-     ,wxSTC_HJ_COMMENTLINE-     ,wxSTC_HJ_COMMENTDOC-     ,wxSTC_HJ_NUMBER-     ,wxSTC_HJ_WORD-     ,wxSTC_HJ_KEYWORD-     ,wxSTC_HJ_DOUBLESTRING-     ,wxSTC_HJ_SINGLESTRING-     ,wxSTC_HJ_SYMBOLS-     ,wxSTC_HJ_STRINGEOL-     ,wxSTC_HJ_REGEX-     ,wxSTC_HJA_START-     ,wxSTC_HJA_DEFAULT-     ,wxSTC_HJA_COMMENT-     ,wxSTC_HJA_COMMENTLINE-     ,wxSTC_HJA_COMMENTDOC-     ,wxSTC_HJA_NUMBER-     ,wxSTC_HJA_WORD-     ,wxSTC_HJA_KEYWORD-     ,wxSTC_HJA_DOUBLESTRING-     ,wxSTC_HJA_SINGLESTRING-     ,wxSTC_HJA_SYMBOLS-     ,wxSTC_HJA_STRINGEOL-     ,wxSTC_HJA_REGEX-     ,wxSTC_HB_START-     ,wxSTC_HB_DEFAULT-     ,wxSTC_HB_COMMENTLINE-     ,wxSTC_HB_NUMBER-     ,wxSTC_HB_WORD-     ,wxSTC_HB_STRING-     ,wxSTC_HB_IDENTIFIER-     ,wxSTC_HB_STRINGEOL-     ,wxSTC_HBA_START-     ,wxSTC_HBA_DEFAULT-     ,wxSTC_HBA_COMMENTLINE-     ,wxSTC_HBA_NUMBER-     ,wxSTC_HBA_WORD-     ,wxSTC_HBA_STRING-     ,wxSTC_HBA_IDENTIFIER-     ,wxSTC_HBA_STRINGEOL-     ,wxSTC_HP_START-     ,wxSTC_HP_DEFAULT-     ,wxSTC_HP_COMMENTLINE-     ,wxSTC_HP_NUMBER-     ,wxSTC_HP_STRING-     ,wxSTC_HP_CHARACTER-     ,wxSTC_HP_WORD-     ,wxSTC_HP_TRIPLE-     ,wxSTC_HP_TRIPLEDOUBLE-     ,wxSTC_HP_CLASSNAME-     ,wxSTC_HP_DEFNAME-     ,wxSTC_HP_OPERATOR-     ,wxSTC_HP_IDENTIFIER-     ,wxSTC_HPA_START-     ,wxSTC_HPA_DEFAULT-     ,wxSTC_HPA_COMMENTLINE-     ,wxSTC_HPA_NUMBER-     ,wxSTC_HPA_STRING-     ,wxSTC_HPA_CHARACTER-     ,wxSTC_HPA_WORD-     ,wxSTC_HPA_TRIPLE-     ,wxSTC_HPA_TRIPLEDOUBLE-     ,wxSTC_HPA_CLASSNAME-     ,wxSTC_HPA_DEFNAME-     ,wxSTC_HPA_OPERATOR-     ,wxSTC_HPA_IDENTIFIER-     ,wxSTC_HPHP_DEFAULT-     ,wxSTC_HPHP_HSTRING-     ,wxSTC_HPHP_SIMPLESTRING-     ,wxSTC_HPHP_WORD-     ,wxSTC_HPHP_NUMBER-     ,wxSTC_HPHP_VARIABLE-     ,wxSTC_HPHP_COMMENT-     ,wxSTC_HPHP_COMMENTLINE-     ,wxSTC_HPHP_HSTRING_VARIABLE-     ,wxSTC_HPHP_OPERATOR-     ,wxSTC_PL_DEFAULT-     ,wxSTC_PL_ERROR-     ,wxSTC_PL_COMMENTLINE-     ,wxSTC_PL_POD-     ,wxSTC_PL_NUMBER-     ,wxSTC_PL_WORD-     ,wxSTC_PL_STRING-     ,wxSTC_PL_CHARACTER-     ,wxSTC_PL_PUNCTUATION-     ,wxSTC_PL_PREPROCESSOR-     ,wxSTC_PL_OPERATOR-     ,wxSTC_PL_IDENTIFIER-     ,wxSTC_PL_SCALAR-     ,wxSTC_PL_ARRAY-     ,wxSTC_PL_HASH-     ,wxSTC_PL_SYMBOLTABLE-     ,wxSTC_PL_REGEX-     ,wxSTC_PL_REGSUBST-     ,wxSTC_PL_LONGQUOTE-     ,wxSTC_PL_BACKTICKS-     ,wxSTC_PL_DATASECTION-     ,wxSTC_PL_HERE_DELIM-     ,wxSTC_PL_HERE_Q-     ,wxSTC_PL_HERE_QQ-     ,wxSTC_PL_HERE_QX-     ,wxSTC_PL_STRING_Q-     ,wxSTC_PL_STRING_QQ-     ,wxSTC_PL_STRING_QX-     ,wxSTC_PL_STRING_QR-     ,wxSTC_PL_STRING_QW-     ,wxSTC_B_DEFAULT-     ,wxSTC_B_COMMENT-     ,wxSTC_B_NUMBER-     ,wxSTC_B_KEYWORD-     ,wxSTC_B_STRING-     ,wxSTC_B_PREPROCESSOR-     ,wxSTC_B_OPERATOR-     ,wxSTC_B_IDENTIFIER-     ,wxSTC_B_DATE-     ,wxSTC_PROPS_DEFAULT-     ,wxSTC_PROPS_COMMENT-     ,wxSTC_PROPS_SECTION-     ,wxSTC_PROPS_ASSIGNMENT-     ,wxSTC_PROPS_DEFVAL-     ,wxSTC_L_DEFAULT-     ,wxSTC_L_COMMAND-     ,wxSTC_L_TAG-     ,wxSTC_L_MATH-     ,wxSTC_L_COMMENT-     ,wxSTC_LUA_DEFAULT-     ,wxSTC_LUA_COMMENT-     ,wxSTC_LUA_COMMENTLINE-     ,wxSTC_LUA_COMMENTDOC-     ,wxSTC_LUA_NUMBER-     ,wxSTC_LUA_WORD-     ,wxSTC_LUA_STRING-     ,wxSTC_LUA_CHARACTER-     ,wxSTC_LUA_LITERALSTRING-     ,wxSTC_LUA_PREPROCESSOR-     ,wxSTC_LUA_OPERATOR-     ,wxSTC_LUA_IDENTIFIER-     ,wxSTC_LUA_STRINGEOL-     ,wxSTC_LUA_WORD2-     ,wxSTC_LUA_WORD3-     ,wxSTC_LUA_WORD4-     ,wxSTC_LUA_WORD5-     ,wxSTC_LUA_WORD6-     ,wxSTC_LUA_WORD7-     ,wxSTC_LUA_WORD8-     ,wxSTC_ERR_DEFAULT-     ,wxSTC_ERR_PYTHON-     ,wxSTC_ERR_GCC-     ,wxSTC_ERR_MS-     ,wxSTC_ERR_CMD-     ,wxSTC_ERR_BORLAND-     ,wxSTC_ERR_PERL-     ,wxSTC_ERR_NET-     ,wxSTC_ERR_LUA-     ,wxSTC_ERR_CTAG-     ,wxSTC_ERR_DIFF_CHANGED-     ,wxSTC_ERR_DIFF_ADDITION-     ,wxSTC_ERR_DIFF_DELETION-     ,wxSTC_ERR_DIFF_MESSAGE-     ,wxSTC_ERR_PHP-     ,wxSTC_ERR_ELF-     ,wxSTC_ERR_IFC-     ,wxSTC_BAT_DEFAULT-     ,wxSTC_BAT_COMMENT-     ,wxSTC_BAT_WORD-     ,wxSTC_BAT_LABEL-     ,wxSTC_BAT_HIDE-     ,wxSTC_BAT_COMMAND-     ,wxSTC_BAT_IDENTIFIER-     ,wxSTC_BAT_OPERATOR-     ,wxSTC_MAKE_DEFAULT-     ,wxSTC_MAKE_COMMENT-     ,wxSTC_MAKE_PREPROCESSOR-     ,wxSTC_MAKE_IDENTIFIER-     ,wxSTC_MAKE_OPERATOR-     ,wxSTC_MAKE_TARGET-     ,wxSTC_MAKE_IDEOL-     ,wxSTC_DIFF_DEFAULT-     ,wxSTC_DIFF_COMMENT-     ,wxSTC_DIFF_COMMAND-     ,wxSTC_DIFF_HEADER-     ,wxSTC_DIFF_POSITION-     ,wxSTC_DIFF_DELETED-     ,wxSTC_DIFF_ADDED-     ,wxSTC_CONF_DEFAULT-     ,wxSTC_CONF_COMMENT-     ,wxSTC_CONF_NUMBER-     ,wxSTC_CONF_IDENTIFIER-     ,wxSTC_CONF_EXTENSION-     ,wxSTC_CONF_PARAMETER-     ,wxSTC_CONF_STRING-     ,wxSTC_CONF_OPERATOR-     ,wxSTC_CONF_IP-     ,wxSTC_CONF_DIRECTIVE-     ,wxSTC_AVE_DEFAULT-     ,wxSTC_AVE_COMMENT-     ,wxSTC_AVE_NUMBER-     ,wxSTC_AVE_WORD-     ,wxSTC_AVE_STRING-     ,wxSTC_AVE_ENUM-     ,wxSTC_AVE_STRINGEOL-     ,wxSTC_AVE_IDENTIFIER-     ,wxSTC_AVE_OPERATOR-     ,wxSTC_AVE_WORD1-     ,wxSTC_AVE_WORD2-     ,wxSTC_AVE_WORD3-     ,wxSTC_AVE_WORD4-     ,wxSTC_AVE_WORD5-     ,wxSTC_AVE_WORD6-     ,wxSTC_ADA_DEFAULT-     ,wxSTC_ADA_WORD-     ,wxSTC_ADA_IDENTIFIER-     ,wxSTC_ADA_NUMBER-     ,wxSTC_ADA_DELIMITER-     ,wxSTC_ADA_CHARACTER-     ,wxSTC_ADA_CHARACTEREOL-     ,wxSTC_ADA_STRING-     ,wxSTC_ADA_STRINGEOL-     ,wxSTC_ADA_LABEL-     ,wxSTC_ADA_COMMENTLINE-     ,wxSTC_ADA_ILLEGAL-     ,wxSTC_BAAN_DEFAULT-     ,wxSTC_BAAN_COMMENT-     ,wxSTC_BAAN_COMMENTDOC-     ,wxSTC_BAAN_NUMBER-     ,wxSTC_BAAN_WORD-     ,wxSTC_BAAN_STRING-     ,wxSTC_BAAN_PREPROCESSOR-     ,wxSTC_BAAN_OPERATOR-     ,wxSTC_BAAN_IDENTIFIER-     ,wxSTC_BAAN_STRINGEOL-     ,wxSTC_BAAN_WORD2-     ,wxSTC_LISP_DEFAULT-     ,wxSTC_LISP_COMMENT-     ,wxSTC_LISP_NUMBER-     ,wxSTC_LISP_KEYWORD-     ,wxSTC_LISP_STRING-     ,wxSTC_LISP_STRINGEOL-     ,wxSTC_LISP_IDENTIFIER-     ,wxSTC_LISP_OPERATOR-     ,wxSTC_EIFFEL_DEFAULT-     ,wxSTC_EIFFEL_COMMENTLINE-     ,wxSTC_EIFFEL_NUMBER-     ,wxSTC_EIFFEL_WORD-     ,wxSTC_EIFFEL_STRING-     ,wxSTC_EIFFEL_CHARACTER-     ,wxSTC_EIFFEL_OPERATOR-     ,wxSTC_EIFFEL_IDENTIFIER-     ,wxSTC_EIFFEL_STRINGEOL-     ,wxSTC_NNCRONTAB_DEFAULT-     ,wxSTC_NNCRONTAB_COMMENT-     ,wxSTC_NNCRONTAB_TASK-     ,wxSTC_NNCRONTAB_SECTION-     ,wxSTC_NNCRONTAB_KEYWORD-     ,wxSTC_NNCRONTAB_MODIFIER-     ,wxSTC_NNCRONTAB_ASTERISK-     ,wxSTC_NNCRONTAB_NUMBER-     ,wxSTC_NNCRONTAB_STRING-     ,wxSTC_NNCRONTAB_ENVIRONMENT-     ,wxSTC_NNCRONTAB_IDENTIFIER-     ,wxSTC_MATLAB_DEFAULT-     ,wxSTC_MATLAB_COMMENT-     ,wxSTC_MATLAB_COMMAND-     ,wxSTC_MATLAB_NUMBER-     ,wxSTC_MATLAB_KEYWORD-     ,wxSTC_MATLAB_STRING-     ,wxSTC_MATLAB_OPERATOR-     ,wxSTC_MATLAB_IDENTIFIER-     ,wxSTC_SCRIPTOL_DEFAULT-     ,wxSTC_SCRIPTOL_COMMENT-     ,wxSTC_SCRIPTOL_COMMENTLINE-     ,wxSTC_SCRIPTOL_COMMENTDOC-     ,wxSTC_SCRIPTOL_NUMBER-     ,wxSTC_SCRIPTOL_WORD-     ,wxSTC_SCRIPTOL_STRING-     ,wxSTC_SCRIPTOL_CHARACTER-     ,wxSTC_SCRIPTOL_UUID-     ,wxSTC_SCRIPTOL_PREPROCESSOR-     ,wxSTC_SCRIPTOL_OPERATOR-     ,wxSTC_SCRIPTOL_IDENTIFIER-     ,wxSTC_SCRIPTOL_STRINGEOL-     ,wxSTC_SCRIPTOL_VERBATIM-     ,wxSTC_SCRIPTOL_REGEX-     ,wxSTC_SCRIPTOL_COMMENTLINEDOC-     ,wxSTC_SCRIPTOL_WORD2-     ,wxSTC_SCRIPTOL_COMMENTDOCKEYWORD-     ,wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR-     ,wxSTC_SCRIPTOL_COMMENTBASIC-     ,wxSTC_ASM_DEFAULT-     ,wxSTC_ASM_COMMENT-     ,wxSTC_ASM_NUMBER-     ,wxSTC_ASM_STRING-     ,wxSTC_ASM_OPERATOR-     ,wxSTC_ASM_IDENTIFIER-     ,wxSTC_ASM_CPUINSTRUCTION-     ,wxSTC_ASM_MATHINSTRUCTION-     ,wxSTC_ASM_REGISTER-     ,wxSTC_ASM_DIRECTIVE-     ,wxSTC_ASM_DIRECTIVEOPERAND-     ,wxSTC_F_DEFAULT-     ,wxSTC_F_COMMENT-     ,wxSTC_F_NUMBER-     ,wxSTC_F_STRING1-     ,wxSTC_F_STRING2-     ,wxSTC_F_STRINGEOL-     ,wxSTC_F_OPERATOR-     ,wxSTC_F_IDENTIFIER-     ,wxSTC_F_WORD-     ,wxSTC_F_WORD2-     ,wxSTC_F_WORD3-     ,wxSTC_F_PREPROCESSOR-     ,wxSTC_F_OPERATOR2-     ,wxSTC_F_LABEL-     ,wxSTC_F_CONTINUATION-     ,wxSTC_CSS_DEFAULT-     ,wxSTC_CSS_TAG-     ,wxSTC_CSS_CLASS-     ,wxSTC_CSS_PSEUDOCLASS-     ,wxSTC_CSS_UNKNOWN_PSEUDOCLASS-     ,wxSTC_CSS_OPERATOR-     ,wxSTC_CSS_IDENTIFIER-     ,wxSTC_CSS_UNKNOWN_IDENTIFIER-     ,wxSTC_CSS_VALUE-     ,wxSTC_CSS_COMMENT-     ,wxSTC_CSS_ID-     ,wxSTC_CSS_IMPORTANT-     ,wxSTC_CSS_DIRECTIVE-     ,wxSTC_CSS_DOUBLESTRING-     ,wxSTC_CSS_SINGLESTRING-     ,wxSTC_POV_DEFAULT-     ,wxSTC_POV_COMMENT-     ,wxSTC_POV_COMMENTLINE-     ,wxSTC_POV_NUMBER-     ,wxSTC_POV_OPERATOR-     ,wxSTC_POV_IDENTIFIER-     ,wxSTC_POV_STRING-     ,wxSTC_POV_STRINGEOL-     ,wxSTC_POV_DIRECTIVE-     ,wxSTC_POV_BADDIRECTIVE-     ,wxSTC_POV_WORD2-     ,wxSTC_POV_WORD3-     ,wxSTC_POV_WORD4-     ,wxSTC_POV_WORD5-     ,wxSTC_POV_WORD6-     ,wxSTC_POV_WORD7-     ,wxSTC_POV_WORD8-     ,wxSTC_LOUT_DEFAULT-     ,wxSTC_LOUT_COMMENT-     ,wxSTC_LOUT_NUMBER-     ,wxSTC_LOUT_WORD-     ,wxSTC_LOUT_WORD2-     ,wxSTC_LOUT_WORD3-     ,wxSTC_LOUT_WORD4-     ,wxSTC_LOUT_STRING-     ,wxSTC_LOUT_OPERATOR-     ,wxSTC_LOUT_IDENTIFIER-     ,wxSTC_LOUT_STRINGEOL-     ,wxSTC_ESCRIPT_DEFAULT-     ,wxSTC_ESCRIPT_COMMENT-     ,wxSTC_ESCRIPT_COMMENTLINE-     ,wxSTC_ESCRIPT_COMMENTDOC-     ,wxSTC_ESCRIPT_NUMBER-     ,wxSTC_ESCRIPT_WORD-     ,wxSTC_ESCRIPT_STRING-     ,wxSTC_ESCRIPT_OPERATOR-     ,wxSTC_ESCRIPT_IDENTIFIER-     ,wxSTC_ESCRIPT_BRACE-     ,wxSTC_ESCRIPT_WORD2-     ,wxSTC_ESCRIPT_WORD3-     ,wxSTC_PS_DEFAULT-     ,wxSTC_PS_COMMENT-     ,wxSTC_PS_DSC_COMMENT-     ,wxSTC_PS_DSC_VALUE-     ,wxSTC_PS_NUMBER-     ,wxSTC_PS_NAME-     ,wxSTC_PS_KEYWORD-     ,wxSTC_PS_LITERAL-     ,wxSTC_PS_IMMEVAL-     ,wxSTC_PS_PAREN_ARRAY-     ,wxSTC_PS_PAREN_DICT-     ,wxSTC_PS_PAREN_PROC-     ,wxSTC_PS_TEXT-     ,wxSTC_PS_HEXSTRING-     ,wxSTC_PS_BASE85STRING-     ,wxSTC_PS_BADSTRINGCHAR-     ,wxSTC_NSIS_DEFAULT-     ,wxSTC_NSIS_COMMENT-     ,wxSTC_NSIS_STRINGDQ-     ,wxSTC_NSIS_STRINGLQ-     ,wxSTC_NSIS_STRINGRQ-     ,wxSTC_NSIS_FUNCTION-     ,wxSTC_NSIS_VARIABLE-     ,wxSTC_NSIS_LABEL-     ,wxSTC_NSIS_USERDEFINED-     ,wxSTC_NSIS_SECTIONDEF-     ,wxSTC_NSIS_SUBSECTIONDEF-     ,wxSTC_NSIS_IFDEFINEDEF-     ,wxSTC_NSIS_MACRODEF-     ,wxSTC_NSIS_STRINGVAR-     ,wxSTC_MMIXAL_LEADWS-     ,wxSTC_MMIXAL_COMMENT-     ,wxSTC_MMIXAL_LABEL-     ,wxSTC_MMIXAL_OPCODE-     ,wxSTC_MMIXAL_OPCODE_PRE-     ,wxSTC_MMIXAL_OPCODE_VALID-     ,wxSTC_MMIXAL_OPCODE_UNKNOWN-     ,wxSTC_MMIXAL_OPCODE_POST-     ,wxSTC_MMIXAL_OPERANDS-     ,wxSTC_MMIXAL_NUMBER-     ,wxSTC_MMIXAL_REF-     ,wxSTC_MMIXAL_CHAR-     ,wxSTC_MMIXAL_STRING-     ,wxSTC_MMIXAL_REGISTER-     ,wxSTC_MMIXAL_HEX-     ,wxSTC_MMIXAL_OPERATOR-     ,wxSTC_MMIXAL_SYMBOL-     ,wxSTC_MMIXAL_INCLUDE-     ,wxSTC_CLW_DEFAULT-     ,wxSTC_CLW_LABEL-     ,wxSTC_CLW_COMMENT-     ,wxSTC_CLW_STRING-     ,wxSTC_CLW_USER_IDENTIFIER-     ,wxSTC_CLW_INTEGER_CONSTANT-     ,wxSTC_CLW_REAL_CONSTANT-     ,wxSTC_CLW_PICTURE_STRING-     ,wxSTC_CLW_KEYWORD-     ,wxSTC_CLW_COMPILER_DIRECTIVE-     ,wxSTC_CLW_RUNTIME_EXPRESSIONS-     ,wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION-     ,wxSTC_CLW_STRUCTURE_DATA_TYPE-     ,wxSTC_CLW_ATTRIBUTE-     ,wxSTC_CLW_STANDARD_EQUATE-     ,wxSTC_CLW_ERROR-     ,wxSTC_CLW_DEPRECATED-     ,wxSTC_LOT_DEFAULT-     ,wxSTC_LOT_HEADER-     ,wxSTC_LOT_BREAK-     ,wxSTC_LOT_SET-     ,wxSTC_LOT_PASS-     ,wxSTC_LOT_FAIL-     ,wxSTC_LOT_ABORT-     ,wxSTC_YAML_DEFAULT-     ,wxSTC_YAML_COMMENT-     ,wxSTC_YAML_IDENTIFIER-     ,wxSTC_YAML_KEYWORD-     ,wxSTC_YAML_NUMBER-     ,wxSTC_YAML_REFERENCE-     ,wxSTC_YAML_DOCUMENT-     ,wxSTC_YAML_TEXT-     ,wxSTC_YAML_ERROR-     ,wxSTC_TEX_DEFAULT-     ,wxSTC_TEX_SPECIAL-     ,wxSTC_TEX_GROUP-     ,wxSTC_TEX_SYMBOL-     ,wxSTC_TEX_COMMAND-     ,wxSTC_TEX_TEXT-     ,wxSTC_METAPOST_DEFAULT-     ,wxSTC_METAPOST_SPECIAL-     ,wxSTC_METAPOST_GROUP-     ,wxSTC_METAPOST_SYMBOL-     ,wxSTC_METAPOST_COMMAND-     ,wxSTC_METAPOST_TEXT-     ,wxSTC_METAPOST_EXTRA-     ,wxSTC_ERLANG_DEFAULT-     ,wxSTC_ERLANG_COMMENT-     ,wxSTC_ERLANG_VARIABLE-     ,wxSTC_ERLANG_NUMBER-     ,wxSTC_ERLANG_KEYWORD-     ,wxSTC_ERLANG_STRING-     ,wxSTC_ERLANG_OPERATOR-     ,wxSTC_ERLANG_ATOM-     ,wxSTC_ERLANG_FUNCTION_NAME-     ,wxSTC_ERLANG_CHARACTER-     ,wxSTC_ERLANG_MACRO-     ,wxSTC_ERLANG_RECORD-     ,wxSTC_ERLANG_SEPARATOR-     ,wxSTC_ERLANG_NODE_NAME-     ,wxSTC_ERLANG_UNKNOWN-     ,wxSTC_MSSQL_DEFAULT-     ,wxSTC_MSSQL_COMMENT-     ,wxSTC_MSSQL_LINE_COMMENT-     ,wxSTC_MSSQL_NUMBER-     ,wxSTC_MSSQL_STRING-     ,wxSTC_MSSQL_OPERATOR-     ,wxSTC_MSSQL_IDENTIFIER-     ,wxSTC_MSSQL_VARIABLE-     ,wxSTC_MSSQL_COLUMN_NAME-     ,wxSTC_MSSQL_STATEMENT-     ,wxSTC_MSSQL_DATATYPE-     ,wxSTC_MSSQL_SYSTABLE-     ,wxSTC_MSSQL_GLOBAL_VARIABLE-     ,wxSTC_MSSQL_FUNCTION-     ,wxSTC_MSSQL_STORED_PROCEDURE-     ,wxSTC_MSSQL_DEFAULT_PREF_DATATYPE-     ,wxSTC_MSSQL_COLUMN_NAME_2-     ,wxSTC_V_DEFAULT-     ,wxSTC_V_COMMENT-     ,wxSTC_V_COMMENTLINE-     ,wxSTC_V_COMMENTLINEBANG-     ,wxSTC_V_NUMBER-     ,wxSTC_V_WORD-     ,wxSTC_V_STRING-     ,wxSTC_V_WORD2-     ,wxSTC_V_WORD3-     ,wxSTC_V_PREPROCESSOR-     ,wxSTC_V_OPERATOR-     ,wxSTC_V_IDENTIFIER-     ,wxSTC_V_STRINGEOL-     ,wxSTC_V_USER-     ,wxSTC_KIX_DEFAULT-     ,wxSTC_KIX_COMMENT-     ,wxSTC_KIX_STRING1-     ,wxSTC_KIX_STRING2-     ,wxSTC_KIX_NUMBER-     ,wxSTC_KIX_VAR-     ,wxSTC_KIX_MACRO-     ,wxSTC_KIX_KEYWORD-     ,wxSTC_KIX_FUNCTIONS-     ,wxSTC_KIX_OPERATOR-     ,wxSTC_KIX_IDENTIFIER-     ,wxSTC_GC_DEFAULT-     ,wxSTC_GC_COMMENTLINE-     ,wxSTC_GC_COMMENTBLOCK-     ,wxSTC_GC_GLOBAL-     ,wxSTC_GC_EVENT-     ,wxSTC_GC_ATTRIBUTE-     ,wxSTC_GC_CONTROL-     ,wxSTC_GC_COMMAND-     ,wxSTC_GC_STRING-     ,wxSTC_GC_OPERATOR-     ,wxSTC_SN_DEFAULT-     ,wxSTC_SN_CODE-     ,wxSTC_SN_COMMENTLINE-     ,wxSTC_SN_COMMENTLINEBANG-     ,wxSTC_SN_NUMBER-     ,wxSTC_SN_WORD-     ,wxSTC_SN_STRING-     ,wxSTC_SN_WORD2-     ,wxSTC_SN_WORD3-     ,wxSTC_SN_PREPROCESSOR-     ,wxSTC_SN_OPERATOR-     ,wxSTC_SN_IDENTIFIER-     ,wxSTC_SN_STRINGEOL-     ,wxSTC_SN_REGEXTAG-     ,wxSTC_SN_SIGNAL-     ,wxSTC_SN_USER-     ,wxSTC_AU3_DEFAULT-     ,wxSTC_AU3_COMMENT-     ,wxSTC_AU3_COMMENTBLOCK-     ,wxSTC_AU3_NUMBER-     ,wxSTC_AU3_FUNCTION-     ,wxSTC_AU3_KEYWORD-     ,wxSTC_AU3_MACRO-     ,wxSTC_AU3_STRING-     ,wxSTC_AU3_OPERATOR-     ,wxSTC_AU3_VARIABLE-     ,wxSTC_AU3_SENT-     ,wxSTC_AU3_PREPROCESSOR-     ,wxSTC_AU3_SPECIAL-     ,wxSTC_AU3_EXPAND-     ,wxSTC_AU3_COMOBJ-     ,wxSTC_APDL_DEFAULT-     ,wxSTC_APDL_COMMENT-     ,wxSTC_APDL_COMMENTBLOCK-     ,wxSTC_APDL_NUMBER-     ,wxSTC_APDL_STRING-     ,wxSTC_APDL_OPERATOR-     ,wxSTC_APDL_WORD-     ,wxSTC_APDL_PROCESSOR-     ,wxSTC_APDL_COMMAND-     ,wxSTC_APDL_SLASHCOMMAND-     ,wxSTC_APDL_STARCOMMAND-     ,wxSTC_APDL_ARGUMENT-     ,wxSTC_APDL_FUNCTION-     ,wxSTC_SH_DEFAULT-     ,wxSTC_SH_ERROR-     ,wxSTC_SH_COMMENTLINE-     ,wxSTC_SH_NUMBER-     ,wxSTC_SH_WORD-     ,wxSTC_SH_STRING-     ,wxSTC_SH_CHARACTER-     ,wxSTC_SH_OPERATOR-     ,wxSTC_SH_IDENTIFIER-     ,wxSTC_SH_SCALAR-     ,wxSTC_SH_PARAM-     ,wxSTC_SH_BACKTICKS-     ,wxSTC_SH_HERE_DELIM-     ,wxSTC_SH_HERE_Q-     ,wxSTC_ASN1_DEFAULT-     ,wxSTC_ASN1_COMMENT-     ,wxSTC_ASN1_IDENTIFIER-     ,wxSTC_ASN1_STRING-     ,wxSTC_ASN1_OID-     ,wxSTC_ASN1_SCALAR-     ,wxSTC_ASN1_KEYWORD-     ,wxSTC_ASN1_ATTRIBUTE-     ,wxSTC_ASN1_DESCRIPTOR-     ,wxSTC_ASN1_TYPE-     ,wxSTC_ASN1_OPERATOR-     ,wxSTC_VHDL_DEFAULT-     ,wxSTC_VHDL_COMMENT-     ,wxSTC_VHDL_COMMENTLINEBANG-     ,wxSTC_VHDL_NUMBER-     ,wxSTC_VHDL_STRING-     ,wxSTC_VHDL_OPERATOR-     ,wxSTC_VHDL_IDENTIFIER-     ,wxSTC_VHDL_STRINGEOL-     ,wxSTC_VHDL_KEYWORD-     ,wxSTC_VHDL_STDOPERATOR-     ,wxSTC_VHDL_ATTRIBUTE-     ,wxSTC_VHDL_STDFUNCTION-     ,wxSTC_VHDL_STDPACKAGE-     ,wxSTC_VHDL_STDTYPE-     ,wxSTC_VHDL_USERWORD-     ,wxSTC_CAML_DEFAULT-     ,wxSTC_CAML_IDENTIFIER-     ,wxSTC_CAML_TAGNAME-     ,wxSTC_CAML_KEYWORD-     ,wxSTC_CAML_KEYWORD2-     ,wxSTC_CAML_KEYWORD3-     ,wxSTC_CAML_LINENUM-     ,wxSTC_CAML_OPERATOR-     ,wxSTC_CAML_NUMBER-     ,wxSTC_CAML_CHAR-     ,wxSTC_CAML_STRING-     ,wxSTC_CAML_COMMENT-     ,wxSTC_CAML_COMMENT1-     ,wxSTC_CAML_COMMENT2-     ,wxSTC_CAML_COMMENT3-     ,wxSTC_T3_DEFAULT-     ,wxSTC_T3_X_DEFAULT-     ,wxSTC_T3_PREPROCESSOR-     ,wxSTC_T3_BLOCK_COMMENT-     ,wxSTC_T3_LINE_COMMENT-     ,wxSTC_T3_OPERATOR-     ,wxSTC_T3_KEYWORD-     ,wxSTC_T3_NUMBER-     ,wxSTC_T3_IDENTIFIER-     ,wxSTC_T3_S_STRING-     ,wxSTC_T3_D_STRING-     ,wxSTC_T3_X_STRING-     ,wxSTC_T3_LIB_DIRECTIVE-     ,wxSTC_T3_MSG_PARAM-     ,wxSTC_T3_HTML_TAG-     ,wxSTC_T3_HTML_DEFAULT-     ,wxSTC_T3_HTML_STRING-     ,wxSTC_T3_USER1-     ,wxSTC_T3_USER2-     ,wxSTC_T3_USER3-     ,wxSTC_REBOL_DEFAULT-     ,wxSTC_REBOL_COMMENTLINE-     ,wxSTC_REBOL_COMMENTBLOCK-     ,wxSTC_REBOL_PREFACE-     ,wxSTC_REBOL_OPERATOR-     ,wxSTC_REBOL_CHARACTER-     ,wxSTC_REBOL_QUOTEDSTRING-     ,wxSTC_REBOL_BRACEDSTRING-     ,wxSTC_REBOL_NUMBER-     ,wxSTC_REBOL_PAIR-     ,wxSTC_REBOL_TUPLE-     ,wxSTC_REBOL_BINARY-     ,wxSTC_REBOL_MONEY-     ,wxSTC_REBOL_ISSUE-     ,wxSTC_REBOL_TAG-     ,wxSTC_REBOL_FILE-     ,wxSTC_REBOL_EMAIL-     ,wxSTC_REBOL_URL-     ,wxSTC_REBOL_DATE-     ,wxSTC_REBOL_TIME-     ,wxSTC_REBOL_IDENTIFIER-     ,wxSTC_REBOL_WORD-     ,wxSTC_REBOL_WORD2-     ,wxSTC_REBOL_WORD3-     ,wxSTC_REBOL_WORD4-     ,wxSTC_REBOL_WORD5-     ,wxSTC_REBOL_WORD6-     ,wxSTC_REBOL_WORD7-     ,wxSTC_REBOL_WORD8-     ,wxSTC_SQL_DEFAULT-     ,wxSTC_SQL_COMMENT-     ,wxSTC_SQL_COMMENTLINE-     ,wxSTC_SQL_COMMENTDOC-     ,wxSTC_SQL_NUMBER-     ,wxSTC_SQL_WORD-     ,wxSTC_SQL_STRING-     ,wxSTC_SQL_CHARACTER-     ,wxSTC_SQL_SQLPLUS-     ,wxSTC_SQL_SQLPLUS_PROMPT-     ,wxSTC_SQL_OPERATOR-     ,wxSTC_SQL_IDENTIFIER-     ,wxSTC_SQL_SQLPLUS_COMMENT-     ,wxSTC_SQL_COMMENTLINEDOC-     ,wxSTC_SQL_WORD2-     ,wxSTC_SQL_COMMENTDOCKEYWORD-     ,wxSTC_SQL_COMMENTDOCKEYWORDERROR-     ,wxSTC_SQL_USER1-     ,wxSTC_SQL_USER2-     ,wxSTC_SQL_USER3-     ,wxSTC_SQL_USER4-     ,wxSTC_SQL_QUOTEDIDENTIFIER-     ,wxSTC_ST_DEFAULT-     ,wxSTC_ST_STRING-     ,wxSTC_ST_NUMBER-     ,wxSTC_ST_COMMENT-     ,wxSTC_ST_SYMBOL-     ,wxSTC_ST_BINARY-     ,wxSTC_ST_BOOL-     ,wxSTC_ST_SELF-     ,wxSTC_ST_SUPER-     ,wxSTC_ST_NIL-     ,wxSTC_ST_GLOBAL-     ,wxSTC_ST_RETURN-     ,wxSTC_ST_SPECIAL-     ,wxSTC_ST_KWSEND-     ,wxSTC_ST_ASSIGN-     ,wxSTC_ST_CHARACTER-     ,wxSTC_ST_SPEC_SEL-     ,wxSTC_FS_DEFAULT-     ,wxSTC_FS_COMMENT-     ,wxSTC_FS_COMMENTLINE-     ,wxSTC_FS_COMMENTDOC-     ,wxSTC_FS_COMMENTLINEDOC-     ,wxSTC_FS_COMMENTDOCKEYWORD-     ,wxSTC_FS_COMMENTDOCKEYWORDERROR-     ,wxSTC_FS_KEYWORD-     ,wxSTC_FS_KEYWORD2-     ,wxSTC_FS_KEYWORD3-     ,wxSTC_FS_KEYWORD4-     ,wxSTC_FS_NUMBER-     ,wxSTC_FS_STRING-     ,wxSTC_FS_PREPROCESSOR-     ,wxSTC_FS_OPERATOR-     ,wxSTC_FS_IDENTIFIER-     ,wxSTC_FS_DATE-     ,wxSTC_FS_STRINGEOL-     ,wxSTC_FS_CONSTANT-     ,wxSTC_FS_ASM-     ,wxSTC_FS_LABEL-     ,wxSTC_FS_ERROR-     ,wxSTC_FS_HEXNUMBER-     ,wxSTC_FS_BINNUMBER-     ,wxSTC_CSOUND_DEFAULT-     ,wxSTC_CSOUND_COMMENT-     ,wxSTC_CSOUND_NUMBER-     ,wxSTC_CSOUND_OPERATOR-     ,wxSTC_CSOUND_INSTR-     ,wxSTC_CSOUND_IDENTIFIER-     ,wxSTC_CSOUND_OPCODE-     ,wxSTC_CSOUND_HEADERSTMT-     ,wxSTC_CSOUND_USERKEYWORD-     ,wxSTC_CSOUND_COMMENTBLOCK-     ,wxSTC_CSOUND_PARAM-     ,wxSTC_CSOUND_ARATE_VAR-     ,wxSTC_CSOUND_KRATE_VAR-     ,wxSTC_CSOUND_IRATE_VAR-     ,wxSTC_CSOUND_GLOBAL_VAR-     ,wxSTC_CSOUND_STRINGEOL-     ,wxSTC_CMD_REDO-     ,wxSTC_CMD_SELECTALL-     ,wxSTC_CMD_UNDO-     ,wxSTC_CMD_CUT-     ,wxSTC_CMD_COPY-     ,wxSTC_CMD_PASTE-     ,wxSTC_CMD_CLEAR-     ,wxSTC_CMD_LINEDOWN-     ,wxSTC_CMD_LINEDOWNEXTEND-     ,wxSTC_CMD_LINEUP-     ,wxSTC_CMD_LINEUPEXTEND-     ,wxSTC_CMD_CHARLEFT-     ,wxSTC_CMD_CHARLEFTEXTEND-     ,wxSTC_CMD_CHARRIGHT-     ,wxSTC_CMD_CHARRIGHTEXTEND-     ,wxSTC_CMD_WORDLEFT-     ,wxSTC_CMD_WORDLEFTEXTEND-     ,wxSTC_CMD_WORDRIGHT-     ,wxSTC_CMD_WORDRIGHTEXTEND-     ,wxSTC_CMD_HOME-     ,wxSTC_CMD_HOMEEXTEND-     ,wxSTC_CMD_LINEEND-     ,wxSTC_CMD_LINEENDEXTEND-     ,wxSTC_CMD_DOCUMENTSTART-     ,wxSTC_CMD_DOCUMENTSTARTEXTEND-     ,wxSTC_CMD_DOCUMENTEND-     ,wxSTC_CMD_DOCUMENTENDEXTEND-     ,wxSTC_CMD_PAGEUP-     ,wxSTC_CMD_PAGEUPEXTEND-     ,wxSTC_CMD_PAGEDOWN-     ,wxSTC_CMD_PAGEDOWNEXTEND-     ,wxSTC_CMD_EDITTOGGLEOVERTYPE-     ,wxSTC_CMD_CANCEL-     ,wxSTC_CMD_DELETEBACK-     ,wxSTC_CMD_TAB-     ,wxSTC_CMD_BACKTAB-     ,wxSTC_CMD_NEWLINE-     ,wxSTC_CMD_FORMFEED-     ,wxSTC_CMD_VCHOME-     ,wxSTC_CMD_VCHOMEEXTEND-     ,wxSTC_CMD_ZOOMIN-     ,wxSTC_CMD_ZOOMOUT-     ,wxSTC_CMD_DELWORDLEFT-     ,wxSTC_CMD_DELWORDRIGHT-     ,wxSTC_CMD_LINECUT-     ,wxSTC_CMD_LINEDELETE-     ,wxSTC_CMD_LINETRANSPOSE-     ,wxSTC_CMD_LINEDUPLICATE-     ,wxSTC_CMD_LOWERCASE-     ,wxSTC_CMD_UPPERCASE-     ,wxSTC_CMD_LINESCROLLDOWN-     ,wxSTC_CMD_LINESCROLLUP-     ,wxSTC_CMD_DELETEBACKNOTLINE-     ,wxSTC_CMD_HOMEDISPLAY-     ,wxSTC_CMD_HOMEDISPLAYEXTEND-     ,wxSTC_CMD_LINEENDDISPLAY-     ,wxSTC_CMD_LINEENDDISPLAYEXTEND-     ,wxSTC_CMD_HOMEWRAP-     ,wxSTC_CMD_HOMEWRAPEXTEND-     ,wxSTC_CMD_LINEENDWRAP-     ,wxSTC_CMD_LINEENDWRAPEXTEND-     ,wxSTC_CMD_VCHOMEWRAP-     ,wxSTC_CMD_VCHOMEWRAPEXTEND-     ,wxSTC_CMD_LINECOPY-     ,wxSTC_CMD_WORDPARTLEFT-     ,wxSTC_CMD_WORDPARTLEFTEXTEND-     ,wxSTC_CMD_WORDPARTRIGHT-     ,wxSTC_CMD_WORDPARTRIGHTEXTEND-     ,wxSTC_CMD_DELLINELEFT-     ,wxSTC_CMD_DELLINERIGHT-     ,wxSTC_CMD_PARADOWN-     ,wxSTC_CMD_PARADOWNEXTEND-     ,wxSTC_CMD_PARAUP-     ,wxSTC_CMD_PARAUPEXTEND-     ,wxSTC_CMD_LINEDOWNRECTEXTEND-     ,wxSTC_CMD_LINEUPRECTEXTEND-     ,wxSTC_CMD_CHARLEFTRECTEXTEND-     ,wxSTC_CMD_CHARRIGHTRECTEXTEND-     ,wxSTC_CMD_HOMERECTEXTEND-     ,wxSTC_CMD_VCHOMERECTEXTEND-     ,wxSTC_CMD_LINEENDRECTEXTEND-     ,wxSTC_CMD_PAGEUPRECTEXTEND-     ,wxSTC_CMD_PAGEDOWNRECTEXTEND-     ,wxSTC_CMD_STUTTEREDPAGEUP-     ,wxSTC_CMD_STUTTEREDPAGEUPEXTEND-     ,wxSTC_CMD_STUTTEREDPAGEDOWN-     ,wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND-     ,wxSTC_CMD_WORDLEFTEND-     ,wxSTC_CMD_WORDLEFTENDEXTEND-     ,wxSTC_CMD_WORDRIGHTEND-     ,wxSTC_CMD_WORDRIGHTENDEXTEND-    ) where--import Data.Bits---- | A flag can be combined with other flags to a bit mask.-type BitFlag = Int--wxBU_EXACTFIT :: BitFlag-wxBU_EXACTFIT = 1--wxTE_PROCESS_ENTER :: BitFlag-wxTE_PROCESS_ENTER = 1024--wxTE_PASSWORD :: BitFlag-wxTE_PASSWORD = 2048--wxTE_RICH2 :: BitFlag-wxTE_RICH2 = 32768--wxTE_AUTO_URL :: BitFlag-wxTE_AUTO_URL = 4096--wxTE_NOHIDESEL :: BitFlag-wxTE_NOHIDESEL = 8192--wxTE_LEFT :: BitFlag-wxTE_LEFT = 0--wxTE_RIGHT :: BitFlag-wxTE_RIGHT = 512--wxTE_CENTRE :: BitFlag-wxTE_CENTRE = 256--wxTE_LINEWRAP :: BitFlag-wxTE_LINEWRAP = 16384--wxTE_WORDWRAP :: BitFlag-wxTE_WORDWRAP = 0--wxEXEC_ASYNC :: BitFlag-wxEXEC_ASYNC = 0--wxEXEC_SYNC :: BitFlag-wxEXEC_SYNC = 1--wxEXEC_NOHIDE :: BitFlag-wxEXEC_NOHIDE = 2--wxEXEC_MAKE_GROUP_LEADER :: BitFlag-wxEXEC_MAKE_GROUP_LEADER = 4--wxITEM_SEPARATOR :: Int-wxITEM_SEPARATOR = (-1)--wxITEM_NORMAL :: Int-wxITEM_NORMAL = 0--wxITEM_CHECK :: Int-wxITEM_CHECK = 1--wxITEM_RADIO :: Int-wxITEM_RADIO = 2--wxITEM_MAX :: Int-wxITEM_MAX = 3--wxCLOSE_BOX :: Int-wxCLOSE_BOX = 4096--wxFRAME_EX_CONTEXTHELP :: Int-wxFRAME_EX_CONTEXTHELP = 4--wxDIALOG_EX_CONTEXTHELP :: Int-wxDIALOG_EX_CONTEXTHELP = 4--wxFRAME_SHAPED :: Int-wxFRAME_SHAPED = 16--wxFULLSCREEN_ALL :: Int-wxFULLSCREEN_ALL = 31--wxTreeItemIcon_Normal :: Int-wxTreeItemIcon_Normal = 0--wxTreeItemIcon_Selected :: Int-wxTreeItemIcon_Selected = 1--wxTreeItemIcon_Expanded :: Int-wxTreeItemIcon_Expanded = 2--wxTreeItemIcon_SelectedExpanded :: Int-wxTreeItemIcon_SelectedExpanded = 3--wxCONFIG_USE_LOCAL_FILE :: Int-wxCONFIG_USE_LOCAL_FILE = 1--wxCONFIG_USE_GLOBAL_FILE :: Int-wxCONFIG_USE_GLOBAL_FILE = 2--wxCONFIG_USE_RELATIVE_PATH :: Int-wxCONFIG_USE_RELATIVE_PATH = 4--wxCONFIG_USE_NO_ESCAPE_CHARACTERS :: Int-wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8--wxCONFIG_TYPE_UNKNOWN :: Int-wxCONFIG_TYPE_UNKNOWN = 0--wxCONFIG_TYPE_STRING :: Int-wxCONFIG_TYPE_STRING = 1--wxCONFIG_TYPE_BOOLEAN :: Int-wxCONFIG_TYPE_BOOLEAN = 2--wxCONFIG_TYPE_INTEGER :: Int-wxCONFIG_TYPE_INTEGER = 3--wxCONFIG_TYPE_FLOAT :: Int-wxCONFIG_TYPE_FLOAT = 4--wxSIGNONE :: Int-wxSIGNONE = 0--wxSIGHUP :: Int-wxSIGHUP = 1--wxSIGINT :: Int-wxSIGINT = 2--wxSIGQUIT :: Int-wxSIGQUIT = 3--wxSIGILL :: Int-wxSIGILL = 4--wxSIGTRAP :: Int-wxSIGTRAP = 5--wxSIGABRT :: Int-wxSIGABRT = 6--wxSIGEMT :: Int-wxSIGEMT = 7--wxSIGFPE :: Int-wxSIGFPE = 8--wxSIGKILL :: Int-wxSIGKILL = 9--wxSIGBUS :: Int-wxSIGBUS = 10--wxSIGSEGV :: Int-wxSIGSEGV = 11--wxSIGSYS :: Int-wxSIGSYS = 12--wxSIGPIPE :: Int-wxSIGPIPE = 13--wxSIGALRM :: Int-wxSIGALRM = 14--wxSIGTERM :: Int-wxSIGTERM = 15--wxKILL_OK :: Int-wxKILL_OK = 0--wxKILL_BAD_SIGNAL :: Int-wxKILL_BAD_SIGNAL = 1--wxKILL_ACCESS_DENIED :: Int-wxKILL_ACCESS_DENIED = 2--wxKILL_NO_PROCESS :: Int-wxKILL_NO_PROCESS = 3--wxKILL_ERROR :: Int-wxKILL_ERROR = 4--wxSTREAM_NO_ERROR :: Int-wxSTREAM_NO_ERROR = 0--wxSTREAM_EOF :: Int-wxSTREAM_EOF = 1--wxSTREAM_WRITE_ERROR :: Int-wxSTREAM_WRITE_ERROR = 2--wxSTREAM_READ_ERROR :: Int-wxSTREAM_READ_ERROR = 3--wxNB_MULTILINE :: Int-wxNB_MULTILINE = 256--wxIMAGE_LIST_NORMAL :: Int-wxIMAGE_LIST_NORMAL = 0--wxIMAGE_LIST_SMALL :: Int-wxIMAGE_LIST_SMALL = 1--wxIMAGE_LIST_STATE :: Int-wxIMAGE_LIST_STATE = 2--wxTB_HORIZONTAL :: Int-wxTB_HORIZONTAL = 4--wxTB_NOALIGN :: Int-wxTB_NOALIGN = 1024--wxTB_NODIVIDER :: Int-wxTB_NODIVIDER = 512--wxTB_NOICONS :: Int-wxTB_NOICONS = 128--wxTB_TEXT :: Int-wxTB_TEXT = 256--wxTB_VERTICAL :: Int-wxTB_VERTICAL = 8--wxADJUST_MINSIZE :: Int-wxADJUST_MINSIZE = 32768--wxDB_TYPE_NAME_LEN :: Int-wxDB_TYPE_NAME_LEN = 40--wxDB_MAX_STATEMENT_LEN :: Int-wxDB_MAX_STATEMENT_LEN = 4096--wxDB_MAX_WHERE_CLAUSE_LEN :: Int-wxDB_MAX_WHERE_CLAUSE_LEN = 2048--wxDB_MAX_ERROR_MSG_LEN :: Int-wxDB_MAX_ERROR_MSG_LEN = 512--wxDB_MAX_ERROR_HISTORY :: Int-wxDB_MAX_ERROR_HISTORY = 5--wxDB_MAX_TABLE_NAME_LEN :: Int-wxDB_MAX_TABLE_NAME_LEN = 128--wxDB_MAX_COLUMN_NAME_LEN :: Int-wxDB_MAX_COLUMN_NAME_LEN = 128--wxDB_DATA_TYPE_VARCHAR :: Int-wxDB_DATA_TYPE_VARCHAR = 1--wxDB_DATA_TYPE_INTEGER :: Int-wxDB_DATA_TYPE_INTEGER = 2--wxDB_DATA_TYPE_FLOAT :: Int-wxDB_DATA_TYPE_FLOAT = 3--wxDB_DATA_TYPE_DATE :: Int-wxDB_DATA_TYPE_DATE = 4--wxDB_DATA_TYPE_BLOB :: Int-wxDB_DATA_TYPE_BLOB = 5--wxDB_SELECT_KEYFIELDS :: Int-wxDB_SELECT_KEYFIELDS = 1--wxDB_SELECT_WHERE :: Int-wxDB_SELECT_WHERE = 2--wxDB_SELECT_MATCHING :: Int-wxDB_SELECT_MATCHING = 3--wxDB_SELECT_STATEMENT :: Int-wxDB_SELECT_STATEMENT = 4--wxDB_UPD_KEYFIELDS :: Int-wxDB_UPD_KEYFIELDS = 1--wxDB_UPD_WHERE :: Int-wxDB_UPD_WHERE = 2--wxDB_DEL_KEYFIELDS :: Int-wxDB_DEL_KEYFIELDS = 1--wxDB_DEL_WHERE :: Int-wxDB_DEL_WHERE = 2--wxDB_DEL_MATCHING :: Int-wxDB_DEL_MATCHING = 3--wxDB_WHERE_KEYFIELDS :: Int-wxDB_WHERE_KEYFIELDS = 1--wxDB_WHERE_MATCHING :: Int-wxDB_WHERE_MATCHING = 2--wxDB_GRANT_SELECT :: Int-wxDB_GRANT_SELECT = 1--wxDB_GRANT_INSERT :: Int-wxDB_GRANT_INSERT = 2--wxDB_GRANT_UPDATE :: Int-wxDB_GRANT_UPDATE = 4--wxDB_GRANT_DELETE :: Int-wxDB_GRANT_DELETE = 8--wxDB_GRANT_ALL :: Int-wxDB_GRANT_ALL = 15--wxSQL_INVALID_HANDLE :: Int-wxSQL_INVALID_HANDLE = (-2)--wxSQL_ERROR :: Int-wxSQL_ERROR = (-1)--wxSQL_SUCCESS :: Int-wxSQL_SUCCESS = 0--wxSQL_SUCCESS_WITH_INFO :: Int-wxSQL_SUCCESS_WITH_INFO = 1--wxSQL_NO_DATA_FOUND :: Int-wxSQL_NO_DATA_FOUND = 100--wxSQL_CHAR :: Int-wxSQL_CHAR = 1--wxSQL_NUMERIC :: Int-wxSQL_NUMERIC = 2--wxSQL_DECIMAL :: Int-wxSQL_DECIMAL = 3--wxSQL_INTEGER :: Int-wxSQL_INTEGER = 4--wxSQL_SMALLINT :: Int-wxSQL_SMALLINT = 5--wxSQL_FLOAT :: Int-wxSQL_FLOAT = 6--wxSQL_REAL :: Int-wxSQL_REAL = 7--wxSQL_DOUBLE :: Int-wxSQL_DOUBLE = 8--wxSQL_VARCHAR :: Int-wxSQL_VARCHAR = 12--wxSQL_C_CHAR :: Int-wxSQL_C_CHAR = 1--wxSQL_C_LONG :: Int-wxSQL_C_LONG = 4--wxSQL_C_SHORT :: Int-wxSQL_C_SHORT = 5--wxSQL_C_FLOAT :: Int-wxSQL_C_FLOAT = 7--wxSQL_C_DOUBLE :: Int-wxSQL_C_DOUBLE = 8--wxSQL_C_DEFAULT :: Int-wxSQL_C_DEFAULT = 99--wxSQL_NO_NULLS :: Int-wxSQL_NO_NULLS = 0--wxSQL_NULLABLE :: Int-wxSQL_NULLABLE = 1--wxSQL_NULLABLE_UNKNOWN :: Int-wxSQL_NULLABLE_UNKNOWN = 2--wxSQL_NULL_DATA :: Int-wxSQL_NULL_DATA = (-1)--wxSQL_DATA_AT_EXEC :: Int-wxSQL_DATA_AT_EXEC = (-2)--wxSQL_NTS :: Int-wxSQL_NTS = (-3)--wxSQL_DATE :: Int-wxSQL_DATE = 9--wxSQL_TIME :: Int-wxSQL_TIME = 10--wxSQL_TIMESTAMP :: Int-wxSQL_TIMESTAMP = 11--wxSQL_C_DATE :: Int-wxSQL_C_DATE = 9--wxSQL_C_TIME :: Int-wxSQL_C_TIME = 10--wxSQL_C_TIMESTAMP :: Int-wxSQL_C_TIMESTAMP = 11--wxSQL_FETCH_NEXT :: Int-wxSQL_FETCH_NEXT = 1--wxSQL_FETCH_FIRST :: Int-wxSQL_FETCH_FIRST = 2--wxSQL_FETCH_LAST :: Int-wxSQL_FETCH_LAST = 3--wxSQL_FETCH_PRIOR :: Int-wxSQL_FETCH_PRIOR = 4--wxSQL_FETCH_ABSOLUTE :: Int-wxSQL_FETCH_ABSOLUTE = 5--wxSQL_FETCH_RELATIVE :: Int-wxSQL_FETCH_RELATIVE = 6--wxSQL_FETCH_BOOKMARK :: Int-wxSQL_FETCH_BOOKMARK = 8--wxSOUND_SYNC :: Int-wxSOUND_SYNC = 0--wxSOUND_ASYNC :: Int-wxSOUND_ASYNC = 1--wxSOUND_LOOP :: Int-wxSOUND_LOOP = 2--wxDRAG_COPYONLY :: Int-wxDRAG_COPYONLY = 0--wxDRAG_ALLOWMOVE :: Int-wxDRAG_ALLOWMOVE = 1--wxDRAG_DEFALUTMOVE :: Int-wxDRAG_DEFALUTMOVE = 3--wxMEDIACTRLPLAYERCONTROLS_NONE :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_NONE = 0--wxMEDIACTRLPLAYERCONTROLS_STEP :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_STEP = 1--wxMEDIACTRLPLAYERCONTROLS_VOLUME :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_VOLUME = 2--wxMEDIACTRLPLAYERCONTROLS_DEFAULT :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_DEFAULT = 3--wxACCEL_ALT :: Int-wxACCEL_ALT = 1--wxACCEL_CTRL :: Int-wxACCEL_CTRL = 2--wxACCEL_SHIFT :: Int-wxACCEL_SHIFT = 4--wxACCEL_NORMAL :: Int-wxACCEL_NORMAL = 0--wxNULL_FLAG :: Int-wxNULL_FLAG = 0--wxEVT_NULL :: Int-wxEVT_NULL = 0--wxEVT_FIRST :: Int-wxEVT_FIRST = 10000--wxJOYSTICK1 :: Int-wxJOYSTICK1 = 0--wxJOYSTICK2 :: Int-wxJOYSTICK2 = 1--wxJOY_BUTTON1 :: Int-wxJOY_BUTTON1 = 1--wxJOY_BUTTON2 :: Int-wxJOY_BUTTON2 = 2--wxJOY_BUTTON3 :: Int-wxJOY_BUTTON3 = 4--wxJOY_BUTTON4 :: Int-wxJOY_BUTTON4 = 8--wxUNKNOWN_PLATFORM :: Int-wxUNKNOWN_PLATFORM = 1--wxCURSES :: Int-wxCURSES = 2--wxXVIEW_X :: Int-wxXVIEW_X = 3--wxMOTIF_X :: Int-wxMOTIF_X = 4--wxCOSE_X :: Int-wxCOSE_X = 5--wxNEXTSTEP :: Int-wxNEXTSTEP = 6--wxMACINTOSH :: Int-wxMACINTOSH = 7--wxBEOS :: Int-wxBEOS = 8--wxGTK :: Int-wxGTK = 9--wxGTK_WIN32 :: Int-wxGTK_WIN32 = 10--wxGTK_OS2 :: Int-wxGTK_OS2 = 11--wxGTK_BEOS :: Int-wxGTK_BEOS = 12--wxQT :: Int-wxQT = 13--wxGEOS :: Int-wxGEOS = 14--wxOS2_PM :: Int-wxOS2_PM = 15--wxWINDOWS :: Int-wxWINDOWS = 16--wxPENWINDOWS :: Int-wxPENWINDOWS = 17--wxWINDOWS_NT :: Int-wxWINDOWS_NT = 18--wxWIN32S :: Int-wxWIN32S = 19--wxWIN95 :: Int-wxWIN95 = 20--wxWIN386 :: Int-wxWIN386 = 21--wxMGL_UNIX :: Int-wxMGL_UNIX = 22--wxMGL_X :: Int-wxMGL_X = 23--wxMGL_WIN32 :: Int-wxMGL_WIN32 = 24--wxMGL_OS2 :: Int-wxMGL_OS2 = 25--wxWINDOWS_OS2 :: Int-wxWINDOWS_OS2 = 26--wxUNIX :: Int-wxUNIX = 27--wxBIG_ENDIAN :: Int-wxBIG_ENDIAN = 4321--wxLITTLE_ENDIAN :: Int-wxLITTLE_ENDIAN = 1234--wxPDP_ENDIAN :: Int-wxPDP_ENDIAN = 3412--wxCENTRE :: Int-wxCENTRE = 1--wxCENTER :: Int-wxCENTER = 1--wxCENTER_FRAME :: Int-wxCENTER_FRAME = 0--wxCENTRE_ON_SCREEN :: Int-wxCENTRE_ON_SCREEN = 2--wxHORIZONTAL :: Int-wxHORIZONTAL = 4--wxVERTICAL :: Int-wxVERTICAL = 8--wxBOTH :: Int-wxBOTH = 12--wxLEFT :: Int-wxLEFT = 16--wxRIGHT :: Int-wxRIGHT = 32--wxUP :: Int-wxUP = 64--wxDOWN :: Int-wxDOWN = 128--wxTOP :: Int-wxTOP = 64--wxBOTTOM :: Int-wxBOTTOM = 128--wxNORTH :: Int-wxNORTH = 64--wxSOUTH :: Int-wxSOUTH = 128--wxWEST :: Int-wxWEST = 16--wxEAST :: Int-wxEAST = 32--wxALL :: Int-wxALL = 240--wxALIGN_NOT :: Int-wxALIGN_NOT = 0--wxALIGN_CENTER_HORIZONTAL :: Int-wxALIGN_CENTER_HORIZONTAL = 256--wxALIGN_CENTRE_HORIZONTAL :: Int-wxALIGN_CENTRE_HORIZONTAL = 256--wxALIGN_LEFT :: Int-wxALIGN_LEFT = 0--wxALIGN_TOP :: Int-wxALIGN_TOP = 0--wxALIGN_RIGHT :: Int-wxALIGN_RIGHT = 512--wxALIGN_BOTTOM :: Int-wxALIGN_BOTTOM = 1024--wxALIGN_CENTER_VERTICAL :: Int-wxALIGN_CENTER_VERTICAL = 2048--wxALIGN_CENTRE_VERTICAL :: Int-wxALIGN_CENTRE_VERTICAL = 2048--wxALIGN_CENTER :: Int-wxALIGN_CENTER = 2304--wxALIGN_CENTRE :: Int-wxALIGN_CENTRE = 2304--wxSTRETCH_NOT :: Int-wxSTRETCH_NOT = 0--wxSHRINK :: Int-wxSHRINK = 4096--wxGROW :: Int-wxGROW = 8192--wxEXPAND :: Int-wxEXPAND = 8192--wxSHAPED :: Int-wxSHAPED = 16384--wxVSCROLL :: Int-wxVSCROLL = (-2147483648)--wxHSCROLL :: Int-wxHSCROLL = 1073741824--wxCAPTION :: Int-wxCAPTION = 536870912---- | Deprecated-wxDOUBLE_BORDER :: Int-wxDOUBLE_BORDER = 268435456--- DEPRECATED wxDOUBLE_BORDER "Use wxBORDER_THEME" #-}---- | Deprecated-wxSUNKEN_BORDER :: Int-wxSUNKEN_BORDER = 134217728--- DEPRECATED wxSUNKEN_BORDER "Use wxBORDER_SUNKEN" #-}---- | Deprecated-wxRAISED_BORDER :: Int-wxRAISED_BORDER = 67108864--- DEPRECATED wxRAISED_BORDER "Use wxBORDER_RAISED" #-}---- | Deprecated-wxSTATIC_BORDER :: Int-wxSTATIC_BORDER = 16777216--- DEPRECATED wxSTATIC_BORDER "Use wxBORDER_STATIC" #-}--wxBORDER :: Int-wxBORDER = 33554432---- | This is different from wxBORDER_NONE as by default the controls do--- have border-wxBORDER_DEFAULT :: Int-wxBORDER_DEFAULT = 0---- | Displays no border, overriding the default border style for the--- window. wxNO_BORDER is the old name for this style.-wxBORDER_NONE   :: Int-wxBORDER_NONE   = 0x00200000---- | Displays a border suitable for a static control. wxSTATIC_BORDER is--- the old name for this style. Windows only.-wxBORDER_STATIC :: Int-wxBORDER_STATIC = 0x01000000---- | Displays a thin border around the window. wxSIMPLE_BORDER is the old--- name for this style.-wxBORDER_SIMPLE :: Int-wxBORDER_SIMPLE = 0x02000000---- | Displays a raised border. wxRAISED_BORDER is the old name for this style.-wxBORDER_RAISED :: Int-wxBORDER_RAISED = 0x04000000---- | Displays a sunken border. wxSUNKEN_BORDER is the old name for this style.-wxBORDER_SUNKEN :: Int-wxBORDER_SUNKEN = 0x08000000---- | Displays a themed border where possible. Currently this has an effect--- on Windows XP and above only. For more information on themed borders,--- please see Themed borders on Windows--- <http://docs.wxwidgets.org/2.8/wx_wxmswport.html#wxmswthemedborders>.-wxBORDER_THEME  :: Int-wxBORDER_THEME  = 0x10000000---- | A mask to extract border style from the combination of flags-wxBORDER_MASK   :: Int-wxBORDER_MASK   = 0x1f200000---wxTRANSPARENT_WINDOW :: Int-wxTRANSPARENT_WINDOW = 1048576--wxNO_BORDER :: Int-wxNO_BORDER = 2097152--wxUSER_COLOURS :: Int-wxUSER_COLOURS = 8388608--wxNO_3D :: Int-wxNO_3D = 8388608--wxCLIP_CHILDREN :: Int-wxCLIP_CHILDREN = 4194304--wxTAB_TRAVERSAL :: Int-wxTAB_TRAVERSAL = 524288--wxWANTS_CHARS :: Int-wxWANTS_CHARS = 262144--wxRETAINED :: Int-wxRETAINED = 131072--wxNO_FULL_REPAINT_ON_RESIZE :: Int-wxNO_FULL_REPAINT_ON_RESIZE = 65536--wxWS_EX_VALIDATE_RECURSIVELY :: Int-wxWS_EX_VALIDATE_RECURSIVELY = 1--wxSTAY_ON_TOP :: Int-wxSTAY_ON_TOP = 32768--wxICONIZE :: Int-wxICONIZE = 16384--wxMAXIMIZE :: Int-wxMAXIMIZE = 8192--wxSYSTEM_MENU :: Int-wxSYSTEM_MENU = 2048--wxMINIMIZE_BOX :: Int-wxMINIMIZE_BOX = 1024--wxMAXIMIZE_BOX :: Int-wxMAXIMIZE_BOX = 512--wxDEFAULT_FRAME_STYLE :: Int-wxDEFAULT_FRAME_STYLE = 536878656--wxTINY_CAPTION_HORIZ :: Int-wxTINY_CAPTION_HORIZ = 256--wxTINY_CAPTION_VERT :: Int-wxTINY_CAPTION_VERT = 128--wxRESIZE_BORDER :: Int-wxRESIZE_BORDER = 64--wxDIALOG_MODAL :: Int-wxDIALOG_MODAL = 32--wxDIALOG_MODELESS :: Int-wxDIALOG_MODELESS = 0--wxFRAME_FLOAT_ON_PARENT :: Int-wxFRAME_FLOAT_ON_PARENT = 8--wxFRAME_NO_WINDOW_MENU :: Int-wxFRAME_NO_WINDOW_MENU = 256--wxED_CLIENT_MARGIN :: Int-wxED_CLIENT_MARGIN = 4--wxED_BUTTONS_BOTTOM :: Int-wxED_BUTTONS_BOTTOM = 0--wxED_BUTTONS_RIGHT :: Int-wxED_BUTTONS_RIGHT = 2--wxED_STATIC_LINE :: Int-wxED_STATIC_LINE = 1--wxTB_3DBUTTONS :: Int-wxTB_3DBUTTONS = 16--wxTB_FLAT :: Int-wxTB_FLAT = 32--wxTB_DOCKABLE :: Int-wxTB_DOCKABLE = 64--wxMB_DOCKABLE :: Int-wxMB_DOCKABLE = 1--wxMENU_TEAROFF :: Int-wxMENU_TEAROFF = 1--wxCOLOURED :: Int-wxCOLOURED = 2048--wxFIXED_LENGTH :: Int-wxFIXED_LENGTH = 1024--wxLB_SORT :: Int-wxLB_SORT = 16--wxLB_SINGLE :: Int-wxLB_SINGLE = 32--wxLB_MULTIPLE :: Int-wxLB_MULTIPLE = 64--wxLB_EXTENDED :: Int-wxLB_EXTENDED = 128--wxLB_OWNERDRAW :: Int-wxLB_OWNERDRAW = 256--wxLB_NEEDED_SB :: Int-wxLB_NEEDED_SB = 512--wxLB_ALWAYS_SB :: Int-wxLB_ALWAYS_SB = 1024--wxTE_READONLY :: Int-wxTE_READONLY = 16--wxTE_MULTILINE :: Int-wxTE_MULTILINE = 32--wxTE_PROCESS_TAB :: Int-wxTE_PROCESS_TAB = 64--wxTE_RICH :: Int-wxTE_RICH = 128--wxTE_NO_VSCROLL :: Int-wxTE_NO_VSCROLL = 256--wxTE_AUTO_SCROLL :: Int-wxTE_AUTO_SCROLL = 512--wxPROCESS_ENTER :: Int-wxPROCESS_ENTER = 1024--wxPASSWORD :: Int-wxPASSWORD = 2048--wxCB_SIMPLE :: Int-wxCB_SIMPLE = 4--wxCB_SORT :: Int-wxCB_SORT = 8--wxCB_READONLY :: Int-wxCB_READONLY = 16--wxCB_DROPDOWN :: Int-wxCB_DROPDOWN = 32--wxRB_GROUP :: Int-wxRB_GROUP = 4--wxGA_PROGRESSBAR :: Int-wxGA_PROGRESSBAR = 16--wxGA_SMOOTH :: Int-wxGA_SMOOTH = 32--wxSL_NOTIFY_DRAG :: Int-wxSL_NOTIFY_DRAG = 0--wxSL_AUTOTICKS :: Int-wxSL_AUTOTICKS = 16--wxSL_LABELS :: Int-wxSL_LABELS = 32--wxSL_LEFT :: Int-wxSL_LEFT = 64--wxSL_TOP :: Int-wxSL_TOP = 128--wxSL_RIGHT :: Int-wxSL_RIGHT = 256--wxSL_BOTTOM :: Int-wxSL_BOTTOM = 512--wxSL_BOTH :: Int-wxSL_BOTH = 1024--wxSL_SELRANGE :: Int-wxSL_SELRANGE = 2048--wxBU_AUTODRAW :: Int-wxBU_AUTODRAW = 4--wxBU_NOAUTODRAW :: Int-wxBU_NOAUTODRAW = 0--wxBU_LEFT :: Int-wxBU_LEFT = 64--wxBU_TOP :: Int-wxBU_TOP = 128--wxBU_RIGHT :: Int-wxBU_RIGHT = 256--wxBU_BOTTOM :: Int-wxBU_BOTTOM = 512--wxLC_VRULES :: Int-wxLC_VRULES = 1--wxLC_HRULES :: Int-wxLC_HRULES = 2--wxLC_ICON :: Int-wxLC_ICON = 4--wxLC_SMALL_ICON :: Int-wxLC_SMALL_ICON = 8--wxLC_LIST :: Int-wxLC_LIST = 16--wxLC_REPORT :: Int-wxLC_REPORT = 32--wxLC_ALIGN_TOP :: Int-wxLC_ALIGN_TOP = 64--wxLC_ALIGN_LEFT :: Int-wxLC_ALIGN_LEFT = 128--wxLC_AUTOARRANGE :: Int-wxLC_AUTOARRANGE = 256--wxLC_VIRTUAL :: Int-wxLC_VIRTUAL = 512--wxLC_EDIT_LABELS :: Int-wxLC_EDIT_LABELS = 1024--wxLC_NO_HEADER :: Int-wxLC_NO_HEADER = 2048--wxLC_NO_SORT_HEADER :: Int-wxLC_NO_SORT_HEADER = 4096--wxLC_SINGLE_SEL :: Int-wxLC_SINGLE_SEL = 8192--wxLC_SORT_ASCENDING :: Int-wxLC_SORT_ASCENDING = 16384--wxLC_SORT_DESCENDING :: Int-wxLC_SORT_DESCENDING = 32768--wxLC_MASK_TYPE  = wxLC_ICON .|. wxLC_SMALL_ICON .|. wxLC_LIST .|. wxLC_REPORT-wxLC_MASK_ALIGN = wxLC_ALIGN_TOP .|. wxLC_ALIGN_LEFT-wxLC_MASK_SORT  = wxLC_SORT_ASCENDING .|. wxLC_SORT_DESCENDING--wxSP_ARROW_KEYS :: Int-wxSP_ARROW_KEYS = 4096--wxSP_WRAP :: Int-wxSP_WRAP = 8192--wxSP_NOBORDER :: Int-wxSP_NOBORDER = 0--wxSP_NOSASH :: Int-wxSP_NOSASH = 16--wxSP_BORDER :: Int-wxSP_BORDER = 32--wxSP_PERMIT_UNSPLIT :: Int-wxSP_PERMIT_UNSPLIT = 64--wxSP_LIVE_UPDATE :: Int-wxSP_LIVE_UPDATE = 128--wxSP_3DSASH :: Int-wxSP_3DSASH = 256--wxSP_3DBORDER :: Int-wxSP_3DBORDER = 512--wxSP_3D :: Int-wxSP_3D = 768--wxSP_FULLSASH :: Int-wxSP_FULLSASH = 1024--wxFRAME_TOOL_WINDOW :: Int-wxFRAME_TOOL_WINDOW = 4--wxTC_MULTILINE :: Int-wxTC_MULTILINE = 0--wxTC_RIGHTJUSTIFY :: Int-wxTC_RIGHTJUSTIFY = 16--wxTC_FIXEDWIDTH :: Int-wxTC_FIXEDWIDTH = 32--wxTC_OWNERDRAW :: Int-wxTC_OWNERDRAW = 64--wxNB_FIXEDWIDTH :: Int-wxNB_FIXEDWIDTH = 16--wxST_SIZEGRIP :: Int-wxST_SIZEGRIP = 16--wxST_NO_AUTORESIZE :: Int-wxST_NO_AUTORESIZE = 1--wxPD_CAN_ABORT :: Int-wxPD_CAN_ABORT = 1--wxPD_APP_MODAL :: Int-wxPD_APP_MODAL = 2--wxPD_AUTO_HIDE :: Int-wxPD_AUTO_HIDE = 4--wxPD_ELAPSED_TIME :: Int-wxPD_ELAPSED_TIME = 8--wxPD_ESTIMATED_TIME :: Int-wxPD_ESTIMATED_TIME = 16--wxPD_REMAINING_TIME :: Int-wxPD_REMAINING_TIME = 64--wxHW_SCROLLBAR_NEVER :: Int-wxHW_SCROLLBAR_NEVER = 2--wxHW_SCROLLBAR_AUTO :: Int-wxHW_SCROLLBAR_AUTO = 4--wxCAL_SUNDAY_FIRST :: Int-wxCAL_SUNDAY_FIRST = 0--wxCAL_MONDAY_FIRST :: Int-wxCAL_MONDAY_FIRST = 1--wxCAL_SHOW_HOLIDAYS :: Int-wxCAL_SHOW_HOLIDAYS = 2--wxCAL_NO_YEAR_CHANGE :: Int-wxCAL_NO_YEAR_CHANGE = 4--wxCAL_NO_MONTH_CHANGE :: Int-wxCAL_NO_MONTH_CHANGE = 12--wxICON_EXCLAMATION :: Int-wxICON_EXCLAMATION = 256--wxICON_HAND :: Int-wxICON_HAND = 512--wxICON_QUESTION :: Int-wxICON_QUESTION = 1024--wxICON_INFORMATION :: Int-wxICON_INFORMATION = 2048--wxFORWARD :: Int-wxFORWARD = 4096--wxBACKWARD :: Int-wxBACKWARD = 8192--wxRESET :: Int-wxRESET = 16384--wxHELP :: Int-wxHELP = 32768--wxMORE :: Int-wxMORE = 65536--wxSETUP :: Int-wxSETUP = 131072--wxID_LOWEST :: Int-wxID_LOWEST = 4999--wxID_OPEN :: Int-wxID_OPEN = 5000--wxID_CLOSE :: Int-wxID_CLOSE = 5001--wxID_NEW :: Int-wxID_NEW = 5002--wxID_SAVE :: Int-wxID_SAVE = 5003--wxID_SAVEAS :: Int-wxID_SAVEAS = 5004--wxID_REVERT :: Int-wxID_REVERT = 5005--wxID_EXIT :: Int-wxID_EXIT = 5006--wxID_UNDO :: Int-wxID_UNDO = 5007--wxID_REDO :: Int-wxID_REDO = 5008--wxID_HELP :: Int-wxID_HELP = 5009--wxID_PRINT :: Int-wxID_PRINT = 5010--wxID_PRINT_SETUP :: Int-wxID_PRINT_SETUP = 5011--wxID_PREVIEW :: Int-wxID_PREVIEW = 5012--wxID_ABOUT :: Int-wxID_ABOUT = 5013--wxID_HELP_CONTENTS :: Int-wxID_HELP_CONTENTS = 5014--wxID_HELP_COMMANDS :: Int-wxID_HELP_COMMANDS = 5015--wxID_HELP_PROCEDURES :: Int-wxID_HELP_PROCEDURES = 5016--wxID_HELP_CONTEXT :: Int-wxID_HELP_CONTEXT = 5017--wxPG_DEFAULT_STYLE :: Int-wxPG_DEFAULT_STYLE = 0--wxID_CLOSE_ALL :: Int-wxID_CLOSE_ALL = 5018--wxID_PREFERENCES :: Int-wxID_PREFERENCES = 5019--wxID_EDIT :: Int-wxID_EDIT = 5030--wxID_CUT :: Int-wxID_CUT = 5031--wxID_COPY :: Int-wxID_COPY = 5032--wxID_PASTE :: Int-wxID_PASTE = 5033--wxID_CLEAR :: Int-wxID_CLEAR = 5034--wxID_FIND :: Int-wxID_FIND = 5035--wxID_DUPLICATE :: Int-wxID_DUPLICATE = 5036--wxID_SELECTALL :: Int-wxID_SELECTALL = 5037--wxID_DELETE :: Int-wxID_DELETE = 5038--wxID_REPLACE :: Int-wxID_REPLACE = 5039--wxID_REPLACE_ALL :: Int-wxID_REPLACE_ALL = 5040--wxID_PROPERTIES :: Int-wxID_PROPERTIES = 5041--wxID_VIEW_DETAILS :: Int-wxID_VIEW_DETAILS = 5042--wxID_VIEW_LARGEICONS :: Int-wxID_VIEW_LARGEICONS = 5043--wxID_VIEW_SMALLICONS :: Int-wxID_VIEW_SMALLICONS = 5044--wxID_VIEW_LIST :: Int-wxID_VIEW_LIST = 5045--wxID_VIEW_SORTDATE :: Int-wxID_VIEW_SORTDATE = 5046--wxID_VIEW_SORTNAME :: Int-wxID_VIEW_SORTNAME = 5047--wxID_VIEW_SORTSIZE :: Int-wxID_VIEW_SORTSIZE = 5048--wxID_VIEW_SORTTYPE :: Int-wxID_VIEW_SORTTYPE = 5049--wxID_FILE1 :: Int-wxID_FILE1 = 5050--wxID_FILE2 :: Int-wxID_FILE2 = 5051--wxID_FILE3 :: Int-wxID_FILE3 = 5052--wxID_FILE4 :: Int-wxID_FILE4 = 5053--wxID_FILE5 :: Int-wxID_FILE5 = 5054--wxID_FILE6 :: Int-wxID_FILE6 = 5055--wxID_FILE7 :: Int-wxID_FILE7 = 5056--wxID_FILE8 :: Int-wxID_FILE8 = 5057--wxID_FILE9 :: Int-wxID_FILE9 = 5058--wxID_OK :: Int-wxID_OK = 5100--wxID_CANCEL :: Int-wxID_CANCEL = 5101--wxID_APPLY :: Int-wxID_APPLY = 5102--wxID_YES :: Int-wxID_YES = 5103--wxID_NO :: Int-wxID_NO = 5104--wxID_STATIC :: Int-wxID_STATIC = 5105--wxID_FORWARD :: Int-wxID_FORWARD = 5106--wxID_BACKWARD :: Int-wxID_BACKWARD = 5107--wxID_DEFAULT :: Int-wxID_DEFAULT = 5108--wxID_MORE :: Int-wxID_MORE = 5109--wxID_SETUP :: Int-wxID_SETUP = 5110--wxID_RESET :: Int-wxID_RESET = 5111--wxID_FILEDLGG :: Int-wxID_FILEDLGG = 5900--wxID_HIGHEST :: Int-wxID_HIGHEST = 5999--wxSIZE_AUTO_WIDTH :: Int-wxSIZE_AUTO_WIDTH = 1--wxSIZE_AUTO_HEIGHT :: Int-wxSIZE_AUTO_HEIGHT = 2--wxSIZE_USE_EXISTING :: Int-wxSIZE_USE_EXISTING = 0--wxSIZE_ALLOW_MINUS_ONE :: Int-wxSIZE_ALLOW_MINUS_ONE = 4--wxSIZE_NO_ADJUSTMENTS :: Int-wxSIZE_NO_ADJUSTMENTS = 8--wxSOLID :: Int-wxSOLID = 100--wxDOT :: Int-wxDOT = 101--wxLONG_DASH :: Int-wxLONG_DASH = 102--wxSHORT_DASH :: Int-wxSHORT_DASH = 103--wxDOT_DASH :: Int-wxDOT_DASH = 104--wxUSER_DASH :: Int-wxUSER_DASH = 105--wxTRANSPARENT :: Int-wxTRANSPARENT = 106--wxSTIPPLE_MASK_OPAQUE :: Int-wxSTIPPLE_MASK_OPAQUE = 107--wxSTIPPLE_MASK :: Int-wxSTIPPLE_MASK = 108--wxSTIPPLE :: Int-wxSTIPPLE = 110--wxBDIAGONAL_HATCH :: Int-wxBDIAGONAL_HATCH = 111--wxCROSSDIAG_HATCH :: Int-wxCROSSDIAG_HATCH = 112--wxFDIAGONAL_HATCH :: Int-wxFDIAGONAL_HATCH = 113--wxCROSS_HATCH :: Int-wxCROSS_HATCH = 114--wxHORIZONTAL_HATCH :: Int-wxHORIZONTAL_HATCH = 115--wxVERTICAL_HATCH :: Int-wxVERTICAL_HATCH = 116--wxJOIN_BEVEL :: Int-wxJOIN_BEVEL = 120--wxJOIN_MITER :: Int-wxJOIN_MITER = 121--wxJOIN_ROUND :: Int-wxJOIN_ROUND = 122--wxCAP_ROUND :: Int-wxCAP_ROUND = 130--wxCAP_PROJECTING :: Int-wxCAP_PROJECTING = 131--wxCAP_BUTT :: Int-wxCAP_BUTT = 132--wxCLEAR :: Int-wxCLEAR = 0--wxXOR :: Int-wxXOR = 1--wxINVERT :: Int-wxINVERT = 2--wxOR_REVERSE :: Int-wxOR_REVERSE = 3--wxAND_REVERSE :: Int-wxAND_REVERSE = 4--wxCOPY :: Int-wxCOPY = 5--wxAND :: Int-wxAND = 6--wxAND_INVERT :: Int-wxAND_INVERT = 7--wxNO_OP :: Int-wxNO_OP = 8--wxNOR :: Int-wxNOR = 9--wxEQUIV :: Int-wxEQUIV = 10--wxSRC_INVERT :: Int-wxSRC_INVERT = 11--wxOR_INVERT :: Int-wxOR_INVERT = 12--wxNAND :: Int-wxNAND = 13--wxOR :: Int-wxOR = 14--wxSET :: Int-wxSET = 15--wxFLOOD_SURFACE :: Int-wxFLOOD_SURFACE = 1--wxFLOOD_BORDER :: Int-wxFLOOD_BORDER = 2--wxODDEVEN_RULE :: Int-wxODDEVEN_RULE = 1--wxWINDING_RULE :: Int-wxWINDING_RULE = 2--wxTOOL_TOP :: Int-wxTOOL_TOP = 1--wxTOOL_BOTTOM :: Int-wxTOOL_BOTTOM = 2--wxTOOL_LEFT :: Int-wxTOOL_LEFT = 3--wxTOOL_RIGHT :: Int-wxTOOL_RIGHT = 4--wxDF_INVALID :: Int-wxDF_INVALID = 1--wxDF_TEXT :: Int-wxDF_TEXT = 2--wxDF_BITMAP :: Int-wxDF_BITMAP = 3--wxDF_METAFILE :: Int-wxDF_METAFILE = 4--wxDF_SYLK :: Int-wxDF_SYLK = 5--wxDF_DIF :: Int-wxDF_DIF = 6--wxDF_TIFF :: Int-wxDF_TIFF = 7--wxDF_OEMTEXT :: Int-wxDF_OEMTEXT = 8--wxDF_DIB :: Int-wxDF_DIB = 9--wxDF_PALETTE :: Int-wxDF_PALETTE = 10--wxDF_PENDATA :: Int-wxDF_PENDATA = 11--wxDF_RIFF :: Int-wxDF_RIFF = 12--wxDF_WAVE :: Int-wxDF_WAVE = 13--wxDF_UNICODETEXT :: Int-wxDF_UNICODETEXT = 14--wxDF_ENHMETAFILE :: Int-wxDF_ENHMETAFILE = 15--wxDF_FILENAME :: Int-wxDF_FILENAME = 16--wxDF_LOCALE :: Int-wxDF_LOCALE = 17--wxDF_PRIVATE :: Int-wxDF_PRIVATE = 18--wxDF_MAX :: Int-wxDF_MAX = 19--wxMM_TEXT :: Int-wxMM_TEXT = 1--wxMM_LOMETRIC :: Int-wxMM_LOMETRIC = 2--wxMM_HIMETRIC :: Int-wxMM_HIMETRIC = 3--wxMM_LOENGLISH :: Int-wxMM_LOENGLISH = 4--wxMM_HIENGLISH :: Int-wxMM_HIENGLISH = 5--wxMM_TWIPS :: Int-wxMM_TWIPS = 6--wxMM_ISOTROPIC :: Int-wxMM_ISOTROPIC = 7--wxMM_ANISOTROPIC :: Int-wxMM_ANISOTROPIC = 8--wxMM_POINTS :: Int-wxMM_POINTS = 9--wxMM_METRIC :: Int-wxMM_METRIC = 10--wxPAPER_NONE :: Int-wxPAPER_NONE = 0--wxPAPER_LETTER :: Int-wxPAPER_LETTER = 1--wxPAPER_LEGAL :: Int-wxPAPER_LEGAL = 2--wxPAPER_A4 :: Int-wxPAPER_A4 = 3--wxPAPER_CSHEET :: Int-wxPAPER_CSHEET = 4--wxPAPER_DSHEET :: Int-wxPAPER_DSHEET = 5--wxPAPER_ESHEET :: Int-wxPAPER_ESHEET = 6--wxPAPER_LETTERSMALL :: Int-wxPAPER_LETTERSMALL = 7--wxPAPER_TABLOID :: Int-wxPAPER_TABLOID = 8--wxPAPER_LEDGER :: Int-wxPAPER_LEDGER = 9--wxPAPER_STATEMENT :: Int-wxPAPER_STATEMENT = 10--wxPAPER_EXECUTIVE :: Int-wxPAPER_EXECUTIVE = 11--wxPAPER_A3 :: Int-wxPAPER_A3 = 12--wxPAPER_A4SMALL :: Int-wxPAPER_A4SMALL = 13--wxPAPER_A5 :: Int-wxPAPER_A5 = 14--wxPAPER_B4 :: Int-wxPAPER_B4 = 15--wxPAPER_B5 :: Int-wxPAPER_B5 = 16--wxPAPER_FOLIO :: Int-wxPAPER_FOLIO = 17--wxPAPER_QUARTO :: Int-wxPAPER_QUARTO = 18--wxPAPER_10X14 :: Int-wxPAPER_10X14 = 19--wxPAPER_11X17 :: Int-wxPAPER_11X17 = 20--wxPAPER_NOTE :: Int-wxPAPER_NOTE = 21--wxPAPER_ENV_9 :: Int-wxPAPER_ENV_9 = 22--wxPAPER_ENV_10 :: Int-wxPAPER_ENV_10 = 23--wxPAPER_ENV_11 :: Int-wxPAPER_ENV_11 = 24--wxPAPER_ENV_12 :: Int-wxPAPER_ENV_12 = 25--wxPAPER_ENV_14 :: Int-wxPAPER_ENV_14 = 26--wxPAPER_ENV_DL :: Int-wxPAPER_ENV_DL = 27--wxPAPER_ENV_C5 :: Int-wxPAPER_ENV_C5 = 28--wxPAPER_ENV_C3 :: Int-wxPAPER_ENV_C3 = 29--wxPAPER_ENV_C4 :: Int-wxPAPER_ENV_C4 = 30--wxPAPER_ENV_C6 :: Int-wxPAPER_ENV_C6 = 31--wxPAPER_ENV_C65 :: Int-wxPAPER_ENV_C65 = 32--wxPAPER_ENV_B4 :: Int-wxPAPER_ENV_B4 = 33--wxPAPER_ENV_B5 :: Int-wxPAPER_ENV_B5 = 34--wxPAPER_ENV_B6 :: Int-wxPAPER_ENV_B6 = 35--wxPAPER_ENV_ITALY :: Int-wxPAPER_ENV_ITALY = 36--wxPAPER_ENV_MONARCH :: Int-wxPAPER_ENV_MONARCH = 37--wxPAPER_ENV_PERSONAL :: Int-wxPAPER_ENV_PERSONAL = 38--wxPAPER_FANFOLD_US :: Int-wxPAPER_FANFOLD_US = 39--wxPAPER_FANFOLD_STD_GERMAN :: Int-wxPAPER_FANFOLD_STD_GERMAN = 40--wxPAPER_FANFOLD_LGL_GERMAN :: Int-wxPAPER_FANFOLD_LGL_GERMAN = 41--wxPAPER_ISO_B4 :: Int-wxPAPER_ISO_B4 = 42--wxPAPER_JAPANESE_POSTCARD :: Int-wxPAPER_JAPANESE_POSTCARD = 43--wxPAPER_9X11 :: Int-wxPAPER_9X11 = 44--wxPAPER_10X11 :: Int-wxPAPER_10X11 = 45--wxPAPER_15X11 :: Int-wxPAPER_15X11 = 46--wxPAPER_ENV_INVITE :: Int-wxPAPER_ENV_INVITE = 47--wxPAPER_LETTER_EXTRA :: Int-wxPAPER_LETTER_EXTRA = 48--wxPAPER_LEGAL_EXTRA :: Int-wxPAPER_LEGAL_EXTRA = 49--wxPAPER_TABLOID_EXTRA :: Int-wxPAPER_TABLOID_EXTRA = 50--wxPAPER_A4_EXTRA :: Int-wxPAPER_A4_EXTRA = 51--wxPAPER_LETTER_TRANSVERSE :: Int-wxPAPER_LETTER_TRANSVERSE = 52--wxPAPER_A4_TRANSVERSE :: Int-wxPAPER_A4_TRANSVERSE = 53--wxPAPER_LETTER_EXTRA_TRANSVERSE :: Int-wxPAPER_LETTER_EXTRA_TRANSVERSE = 54--wxPAPER_A_PLUS :: Int-wxPAPER_A_PLUS = 55--wxPAPER_B_PLUS :: Int-wxPAPER_B_PLUS = 56--wxPAPER_LETTER_PLUS :: Int-wxPAPER_LETTER_PLUS = 57--wxPAPER_A4_PLUS :: Int-wxPAPER_A4_PLUS = 58--wxPAPER_A5_TRANSVERSE :: Int-wxPAPER_A5_TRANSVERSE = 59--wxPAPER_B5_TRANSVERSE :: Int-wxPAPER_B5_TRANSVERSE = 60--wxPAPER_A3_EXTRA :: Int-wxPAPER_A3_EXTRA = 61--wxPAPER_A5_EXTRA :: Int-wxPAPER_A5_EXTRA = 62--wxPAPER_B5_EXTRA :: Int-wxPAPER_B5_EXTRA = 63--wxPAPER_A2 :: Int-wxPAPER_A2 = 64--wxPAPER_A3_TRANSVERSE :: Int-wxPAPER_A3_TRANSVERSE = 65--wxPAPER_A3_EXTRA_TRANSVERSE :: Int-wxPAPER_A3_EXTRA_TRANSVERSE = 66--wxPORTRAIT :: Int-wxPORTRAIT = 1--wxLANDSCAPE :: Int-wxLANDSCAPE = 2--wxDUPLEX_SIMPLEX :: Int-wxDUPLEX_SIMPLEX = 0--wxDUPLEX_HORIZONTAL :: Int-wxDUPLEX_HORIZONTAL = 1--wxDUPLEX_VERTICAL :: Int-wxDUPLEX_VERTICAL = 2--wxPRINT_MODE_NONE :: Int-wxPRINT_MODE_NONE = 0--wxPRINT_MODE_PREVIEW :: Int-wxPRINT_MODE_PREVIEW = 1--wxPRINT_MODE_FILE :: Int-wxPRINT_MODE_FILE = 2--wxPRINT_MODE_PRINTER :: Int-wxPRINT_MODE_PRINTER = 3--wxFULLSCREEN_NOMENUBAR :: Int-wxFULLSCREEN_NOMENUBAR = 1--wxFULLSCREEN_NOTOOLBAR :: Int-wxFULLSCREEN_NOTOOLBAR = 2--wxFULLSCREEN_NOSTATUSBAR :: Int-wxFULLSCREEN_NOSTATUSBAR = 4--wxFULLSCREEN_NOBORDER :: Int-wxFULLSCREEN_NOBORDER = 8--wxFULLSCREEN_NOCAPTION :: Int-wxFULLSCREEN_NOCAPTION = 16--wxLAYOUT_DEFAULT_MARGIN :: Int-wxLAYOUT_DEFAULT_MARGIN = 0--wxEDGE_LEFT :: Int-wxEDGE_LEFT = 0--wxEDGE_TOP :: Int-wxEDGE_TOP = 1--wxEDGE_RIGHT :: Int-wxEDGE_RIGHT = 2--wxEDGE_BOTTOM :: Int-wxEDGE_BOTTOM = 3--wxEDGE_WIDTH :: Int-wxEDGE_WIDTH = 4--wxEDGE_HEIGHT :: Int-wxEDGE_HEIGHT = 5--wxEDGE_CENTER :: Int-wxEDGE_CENTER = 6--wxEDGE_CENTREX :: Int-wxEDGE_CENTREX = 7--wxEDGE_CENTREY :: Int-wxEDGE_CENTREY = 8--wxRELATIONSHIP_UNCONSTRAINED :: Int-wxRELATIONSHIP_UNCONSTRAINED = 0--wxRELATIONSHIP_ASIS :: Int-wxRELATIONSHIP_ASIS = 1--wxRELATIONSHIP_PERCENTOF :: Int-wxRELATIONSHIP_PERCENTOF = 2--wxRELATIONSHIP_ABOVE :: Int-wxRELATIONSHIP_ABOVE = 3--wxRELATIONSHIP_BELOW :: Int-wxRELATIONSHIP_BELOW = 4--wxRELATIONSHIP_LEFTOF :: Int-wxRELATIONSHIP_LEFTOF = 5--wxRELATIONSHIP_RIGHTOF :: Int-wxRELATIONSHIP_RIGHTOF = 6--wxRELATIONSHIP_SAMEAS :: Int-wxRELATIONSHIP_SAMEAS = 7--wxRELATIONSHIP_ABSOLUTE :: Int-wxRELATIONSHIP_ABSOLUTE = 8--wxFONTENCODING_SYSTEM :: Int-wxFONTENCODING_SYSTEM = (-1)--wxFONTENCODING_DEFAULT :: Int-wxFONTENCODING_DEFAULT = 0--wxFONTENCODING_ISO8859_1 :: Int-wxFONTENCODING_ISO8859_1 = 1--wxFONTENCODING_ISO8859_2 :: Int-wxFONTENCODING_ISO8859_2 = 2--wxFONTENCODING_ISO8859_3 :: Int-wxFONTENCODING_ISO8859_3 = 3--wxFONTENCODING_ISO8859_4 :: Int-wxFONTENCODING_ISO8859_4 = 4--wxFONTENCODING_ISO8859_5 :: Int-wxFONTENCODING_ISO8859_5 = 5--wxFONTENCODING_ISO8859_6 :: Int-wxFONTENCODING_ISO8859_6 = 6--wxFONTENCODING_ISO8859_7 :: Int-wxFONTENCODING_ISO8859_7 = 7--wxFONTENCODING_ISO8859_8 :: Int-wxFONTENCODING_ISO8859_8 = 8--wxFONTENCODING_ISO8859_9 :: Int-wxFONTENCODING_ISO8859_9 = 9--wxFONTENCODING_ISO8859_10 :: Int-wxFONTENCODING_ISO8859_10 = 10--wxFONTENCODING_ISO8859_11 :: Int-wxFONTENCODING_ISO8859_11 = 11--wxFONTENCODING_ISO8859_12 :: Int-wxFONTENCODING_ISO8859_12 = 12--wxFONTENCODING_ISO8859_13 :: Int-wxFONTENCODING_ISO8859_13 = 13--wxFONTENCODING_ISO8859_14 :: Int-wxFONTENCODING_ISO8859_14 = 14--wxFONTENCODING_ISO8859_15 :: Int-wxFONTENCODING_ISO8859_15 = 15--wxFONTENCODING_ISO8859_MAX :: Int-wxFONTENCODING_ISO8859_MAX = 16--wxFONTENCODING_KOI8 :: Int-wxFONTENCODING_KOI8 = 17--wxFONTENCODING_ALTERNATIVE :: Int-wxFONTENCODING_ALTERNATIVE = 18--wxFONTENCODING_BULGARIAN :: Int-wxFONTENCODING_BULGARIAN = 19--wxFONTENCODING_CP437 :: Int-wxFONTENCODING_CP437 = 20--wxFONTENCODING_CP850 :: Int-wxFONTENCODING_CP850 = 21--wxFONTENCODING_CP852 :: Int-wxFONTENCODING_CP852 = 22--wxFONTENCODING_CP855 :: Int-wxFONTENCODING_CP855 = 23--wxFONTENCODING_CP866 :: Int-wxFONTENCODING_CP866 = 24--wxFONTENCODING_CP874 :: Int-wxFONTENCODING_CP874 = 25--wxFONTENCODING_CP1250 :: Int-wxFONTENCODING_CP1250 = 26--wxFONTENCODING_CP1251 :: Int-wxFONTENCODING_CP1251 = 27--wxFONTENCODING_CP1252 :: Int-wxFONTENCODING_CP1252 = 28--wxFONTENCODING_CP1253 :: Int-wxFONTENCODING_CP1253 = 29--wxFONTENCODING_CP1254 :: Int-wxFONTENCODING_CP1254 = 30--wxFONTENCODING_CP1255 :: Int-wxFONTENCODING_CP1255 = 31--wxFONTENCODING_CP1256 :: Int-wxFONTENCODING_CP1256 = 32--wxFONTENCODING_CP1257 :: Int-wxFONTENCODING_CP1257 = 33--wxFONTENCODING_CP12_MAX :: Int-wxFONTENCODING_CP12_MAX = 34--wxFONTENCODING_UNICODE :: Int-wxFONTENCODING_UNICODE = 35--wxFONTENCODING_MAX :: Int-wxFONTENCODING_MAX = 36--wxGRIDTABLE_REQUEST_VIEW_GET_VALUES :: Int-wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000--wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES :: Int-wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES = 2001--wxGRIDTABLE_NOTIFY_ROWS_INSERTED :: Int-wxGRIDTABLE_NOTIFY_ROWS_INSERTED = 2002--wxGRIDTABLE_NOTIFY_ROWS_APPENDED :: Int-wxGRIDTABLE_NOTIFY_ROWS_APPENDED = 2003--wxGRIDTABLE_NOTIFY_ROWS_DELETED :: Int-wxGRIDTABLE_NOTIFY_ROWS_DELETED = 2004--wxGRIDTABLE_NOTIFY_COLS_INSERTED :: Int-wxGRIDTABLE_NOTIFY_COLS_INSERTED = 2005--wxGRIDTABLE_NOTIFY_COLS_APPENDED :: Int-wxGRIDTABLE_NOTIFY_COLS_APPENDED = 2006--wxGRIDTABLE_NOTIFY_COLS_DELETED :: Int-wxGRIDTABLE_NOTIFY_COLS_DELETED = 2007--wxGridSelectCells :: Int-wxGridSelectCells = 0--wxGridSelectRows :: Int-wxGridSelectRows = 1--wxGridSelectColumns :: Int-wxGridSelectColumns = 2--wxFILTER_NONE :: Int-wxFILTER_NONE = 0--wxFILTER_ASCII :: Int-wxFILTER_ASCII = 1--wxFILTER_ALPHA :: Int-wxFILTER_ALPHA = 2--wxFILTER_ALPHANUMERIC :: Int-wxFILTER_ALPHANUMERIC = 4--wxFILTER_NUMERIC :: Int-wxFILTER_NUMERIC = 8--wxFILTER_INCLUDE_LIST :: Int-wxFILTER_INCLUDE_LIST = 16--wxFILTER_EXCLUDE_LIST :: Int-wxFILTER_EXCLUDE_LIST = 32--wxFILTER_UPPER_CASE :: Int-wxFILTER_UPPER_CASE = 64--wxFILTER_LOWER_CASE :: Int-wxFILTER_LOWER_CASE = 128--wxBITMAP_TYPE_INVALID :: Int-wxBITMAP_TYPE_INVALID = 0--wxBITMAP_TYPE_BMP :: Int-wxBITMAP_TYPE_BMP = 1--wxBITMAP_TYPE_BMP_RESOURCE :: Int-wxBITMAP_TYPE_BMP_RESOURCE = 2--wxBITMAP_TYPE_RESOURCE :: Int-wxBITMAP_TYPE_RESOURCE = 2--wxBITMAP_TYPE_ICO :: Int-wxBITMAP_TYPE_ICO = 3--wxBITMAP_TYPE_ICO_RESOURCE :: Int-wxBITMAP_TYPE_ICO_RESOURCE = 4--wxBITMAP_TYPE_CUR :: Int-wxBITMAP_TYPE_CUR = 5--wxBITMAP_TYPE_CUR_RESOURCE :: Int-wxBITMAP_TYPE_CUR_RESOURCE = 6--wxBITMAP_TYPE_XBM :: Int-wxBITMAP_TYPE_XBM = 7--wxBITMAP_TYPE_XBM_DATA :: Int-wxBITMAP_TYPE_XBM_DATA = 8--wxBITMAP_TYPE_XPM :: Int-wxBITMAP_TYPE_XPM = 9--wxBITMAP_TYPE_XPM_DATA :: Int-wxBITMAP_TYPE_XPM_DATA = 10--wxBITMAP_TYPE_TIF :: Int-wxBITMAP_TYPE_TIF = 11--wxBITMAP_TYPE_TIF_RESOURCE :: Int-wxBITMAP_TYPE_TIF_RESOURCE = 12--wxBITMAP_TYPE_GIF :: Int-wxBITMAP_TYPE_GIF = 13--wxBITMAP_TYPE_GIF_RESOURCE :: Int-wxBITMAP_TYPE_GIF_RESOURCE = 14--wxBITMAP_TYPE_PNG :: Int-wxBITMAP_TYPE_PNG = 15--wxBITMAP_TYPE_PNG_RESOURCE :: Int-wxBITMAP_TYPE_PNG_RESOURCE = 16--wxBITMAP_TYPE_JPEG :: Int-wxBITMAP_TYPE_JPEG = 17--wxBITMAP_TYPE_JPEG_RESOURCE :: Int-wxBITMAP_TYPE_JPEG_RESOURCE = 18--wxBITMAP_TYPE_PNM :: Int-wxBITMAP_TYPE_PNM = 19--wxBITMAP_TYPE_PNM_RESOURCE :: Int-wxBITMAP_TYPE_PNM_RESOURCE = 20--wxBITMAP_TYPE_PCX :: Int-wxBITMAP_TYPE_PCX = 21--wxBITMAP_TYPE_PCX_RESOURCE :: Int-wxBITMAP_TYPE_PCX_RESOURCE = 22--wxBITMAP_TYPE_PICT :: Int-wxBITMAP_TYPE_PICT = 23--wxBITMAP_TYPE_PICT_RESOURCE :: Int-wxBITMAP_TYPE_PICT_RESOURCE = 24--wxBITMAP_TYPE_ICON :: Int-wxBITMAP_TYPE_ICON = 25--wxBITMAP_TYPE_ICON_RESOURCE :: Int-wxBITMAP_TYPE_ICON_RESOURCE = 26--wxBITMAP_TYPE_MACCURSOR :: Int-wxBITMAP_TYPE_MACCURSOR = 27--wxBITMAP_TYPE_MACCURSOR_RESOURCE :: Int-wxBITMAP_TYPE_MACCURSOR_RESOURCE = 28--wxBITMAP_TYPE_ANY :: Int-wxBITMAP_TYPE_ANY = 50--wxCURSOR_NONE :: Int-wxCURSOR_NONE = 0--wxCURSOR_ARROW :: Int-wxCURSOR_ARROW = 1--wxCURSOR_RIGHT_ARROW :: Int-wxCURSOR_RIGHT_ARROW = 2--wxCURSOR_BULLSEYE :: Int-wxCURSOR_BULLSEYE = 3--wxCURSOR_CHAR :: Int-wxCURSOR_CHAR = 4--wxCURSOR_CROSS :: Int-wxCURSOR_CROSS = 5--wxCURSOR_HAND :: Int-wxCURSOR_HAND = 6--wxCURSOR_IBEAM :: Int-wxCURSOR_IBEAM = 7--wxCURSOR_LEFT_BUTTON :: Int-wxCURSOR_LEFT_BUTTON = 8--wxCURSOR_MAGNIFIER :: Int-wxCURSOR_MAGNIFIER = 9--wxCURSOR_MIDDLE_BUTTON :: Int-wxCURSOR_MIDDLE_BUTTON = 10--wxCURSOR_NO_ENTRY :: Int-wxCURSOR_NO_ENTRY = 11--wxCURSOR_PAINT_BRUSH :: Int-wxCURSOR_PAINT_BRUSH = 12--wxCURSOR_PENCIL :: Int-wxCURSOR_PENCIL = 13--wxCURSOR_POINT_LEFT :: Int-wxCURSOR_POINT_LEFT = 14--wxCURSOR_POINT_RIGHT :: Int-wxCURSOR_POINT_RIGHT = 15--wxCURSOR_QUESTION_ARROW :: Int-wxCURSOR_QUESTION_ARROW = 16--wxCURSOR_RIGHT_BUTTON :: Int-wxCURSOR_RIGHT_BUTTON = 17--wxCURSOR_SIZENESW :: Int-wxCURSOR_SIZENESW = 18--wxCURSOR_SIZENS :: Int-wxCURSOR_SIZENS = 19--wxCURSOR_SIZENWSE :: Int-wxCURSOR_SIZENWSE = 20--wxCURSOR_SIZEWE :: Int-wxCURSOR_SIZEWE = 21--wxCURSOR_SIZING :: Int-wxCURSOR_SIZING = 22--wxCURSOR_SPRAYCAN :: Int-wxCURSOR_SPRAYCAN = 23--wxCURSOR_WAIT :: Int-wxCURSOR_WAIT = 24--wxCURSOR_WATCH :: Int-wxCURSOR_WATCH = 25--wxCURSOR_BLANK :: Int-wxCURSOR_BLANK = 26--wxOPEN :: Int-wxOPEN = 1--wxSAVE :: Int-wxSAVE = 2--wxOVERWRITE_PROMPT :: Int-wxOVERWRITE_PROMPT = 4--wxHIDE_READONLY :: Int-wxHIDE_READONLY = 8--wxFILE_MUST_EXIST :: Int-wxFILE_MUST_EXIST = 16--wxMULTIPLE :: Int-wxMULTIPLE = 32--wxCHANGE_DIR :: Int-wxCHANGE_DIR = 64--wxDRAG_ERROR :: Int-wxDRAG_ERROR = 0--wxDRAG_NONE :: Int-wxDRAG_NONE = 1--wxDRAG_COPY :: Int-wxDRAG_COPY = 2--wxDRAG_MOVE :: Int-wxDRAG_MOVE = 3--wxDRAG_LINK :: Int-wxDRAG_LINK = 4--wxDRAG_CANCEL :: Int-wxDRAG_CANCEL = 5--wxSPLIT_HORIZONTAL :: Int-wxSPLIT_HORIZONTAL = 1--wxSPLIT_VERTICAL :: Int-wxSPLIT_VERTICAL = 2--wxLIST_FORMAT_LEFT :: Int-wxLIST_FORMAT_LEFT = 0--wxLIST_FORMAT_RIGHT :: Int-wxLIST_FORMAT_RIGHT = 1--wxLIST_FORMAT_CENTRE :: Int-wxLIST_FORMAT_CENTRE = 2--wxLIST_FORMAT_CENTER :: Int-wxLIST_FORMAT_CENTER = 2--wxLIST_STATE_DONTCARE :: Int-wxLIST_STATE_DONTCARE = 0--wxLIST_STATE_DROPHILITED :: Int-wxLIST_STATE_DROPHILITED = 1--wxLIST_STATE_FOCUSED :: Int-wxLIST_STATE_FOCUSED = 2--wxLIST_STATE_SELECTED :: Int-wxLIST_STATE_SELECTED = 4--wxLIST_STATE_CUT :: Int-wxLIST_STATE_CUT = 8--wxLIST_MASK_STATE :: Int-wxLIST_MASK_STATE = 1--wxLIST_MASK_TEXT :: Int-wxLIST_MASK_TEXT = 2--wxLIST_MASK_IMAGE :: Int-wxLIST_MASK_IMAGE = 4--wxLIST_MASK_DATA :: Int-wxLIST_MASK_DATA = 8--wxLIST_MASK_WIDTH :: Int-wxLIST_MASK_WIDTH = 16--wxLIST_MASK_FORMAT :: Int-wxLIST_MASK_FORMAT = 32--wxLIST_NEXT_ABOVE :: Int-wxLIST_NEXT_ABOVE = 0--wxLIST_NEXT_ALL :: Int-wxLIST_NEXT_ALL = 1--wxLIST_NEXT_BELOW :: Int-wxLIST_NEXT_BELOW = 2--wxLIST_NEXT_LEFT :: Int-wxLIST_NEXT_LEFT = 3--wxLIST_NEXT_RIGHT :: Int-wxLIST_NEXT_RIGHT = 4--wxRA_SPECIFY_COLS :: Int-wxRA_SPECIFY_COLS = 4--wxRA_SPECIFY_ROWS :: Int-wxRA_SPECIFY_ROWS = 8--wxTREE_HITTEST_ABOVE :: Int-wxTREE_HITTEST_ABOVE = 1--wxTREE_HITTEST_BELOW :: Int-wxTREE_HITTEST_BELOW = 2--wxTREE_HITTEST_NOWHERE :: Int-wxTREE_HITTEST_NOWHERE = 4--wxTREE_HITTEST_ONITEMBUTTON :: Int-wxTREE_HITTEST_ONITEMBUTTON = 8--wxTREE_HITTEST_ONITEMICON :: Int-wxTREE_HITTEST_ONITEMICON = 16--wxTREE_HITTEST_ONITEMINDENT :: Int-wxTREE_HITTEST_ONITEMINDENT = 32--wxTREE_HITTEST_ONITEMLABEL :: Int-wxTREE_HITTEST_ONITEMLABEL = 64--wxTREE_HITTEST_ONITEMRIGHT :: Int-wxTREE_HITTEST_ONITEMRIGHT = 128--wxTREE_HITTEST_ONITEMSTATEICON :: Int-wxTREE_HITTEST_ONITEMSTATEICON = 256--wxTREE_HITTEST_TOLEFT :: Int-wxTREE_HITTEST_TOLEFT = 512--wxTREE_HITTEST_TORIGHT :: Int-wxTREE_HITTEST_TORIGHT = 1024--wxTREE_HITTEST_ONITEMUPPERPART :: Int-wxTREE_HITTEST_ONITEMUPPERPART = 2048--wxTREE_HITTEST_ONITEMLOWERPART :: Int-wxTREE_HITTEST_ONITEMLOWERPART = 4096--wxTREE_HITTEST_ONITEM :: Int-wxTREE_HITTEST_ONITEM = 80--wxDEFAULT :: Int-wxDEFAULT = 70--wxDECORATIVE :: Int-wxDECORATIVE = 71--wxROMAN :: Int-wxROMAN = 72--wxSCRIPT :: Int-wxSCRIPT = 73--wxSWISS :: Int-wxSWISS = 74--wxMODERN :: Int-wxMODERN = 75--wxTELETYPE :: Int-wxTELETYPE = 76--wxVARIABLE :: Int-wxVARIABLE = 80--wxFIXED :: Int-wxFIXED = 81--wxNORMAL :: Int-wxNORMAL = 90--wxLIGHT :: Int-wxLIGHT = 91--wxBOLD :: Int-wxBOLD = 92--wxITALIC :: Int-wxITALIC = 93--wxSLANT :: Int-wxSLANT = 94--wxBLUE_BRUSH :: Int-wxBLUE_BRUSH = 0--wxGREEN_BRUSH :: Int-wxGREEN_BRUSH = 1--wxWHITE_BRUSH :: Int-wxWHITE_BRUSH = 2--wxBLACK_BRUSH :: Int-wxBLACK_BRUSH = 3--wxGREY_BRUSH :: Int-wxGREY_BRUSH = 4--wxMEDIUM_GREY_BRUSH :: Int-wxMEDIUM_GREY_BRUSH = 5--wxLIGHT_GREY_BRUSH :: Int-wxLIGHT_GREY_BRUSH = 6--wxTRANSPARENT_BRUSH :: Int-wxTRANSPARENT_BRUSH = 7--wxCYAN_BRUSH :: Int-wxCYAN_BRUSH = 8--wxRED_BRUSH :: Int-wxRED_BRUSH = 9--wxBLACK :: Int-wxBLACK = 0--wxWHITE :: Int-wxWHITE = 1--wxRED :: Int-wxRED = 2--wxBLUE :: Int-wxBLUE = 3--wxGREEN :: Int-wxGREEN = 4--wxCYAN :: Int-wxCYAN = 5--wxLIGHT_GREY :: Int-wxLIGHT_GREY = 6--wxRED_PEN :: Int-wxRED_PEN = 0--wxCYAN_PEN :: Int-wxCYAN_PEN = 1--wxGREEN_PEN :: Int-wxGREEN_PEN = 2--wxBLACK_PEN :: Int-wxBLACK_PEN = 3--wxWHITE_PEN :: Int-wxWHITE_PEN = 4--wxTRANSPARENT_PEN :: Int-wxTRANSPARENT_PEN = 5--wxBLACK_DASHED_PEN :: Int-wxBLACK_DASHED_PEN = 6--wxGREY_PEN :: Int-wxGREY_PEN = 7--wxMEDIUM_GREY_PEN :: Int-wxMEDIUM_GREY_PEN = 8--wxLIGHT_GREY_PEN :: Int-wxLIGHT_GREY_PEN = 9--wxNOT_FOUND :: Int-wxNOT_FOUND = (-1)--wxPRINTER_NO_ERROR :: Int-wxPRINTER_NO_ERROR = 0--wxPRINTER_CANCELLED :: Int-wxPRINTER_CANCELLED = 1--wxPRINTER_ERROR :: Int-wxPRINTER_ERROR = 2--wxPREVIEW_PRINT :: Int-wxPREVIEW_PRINT = 1--wxPREVIEW_PREVIOUS :: Int-wxPREVIEW_PREVIOUS = 2--wxPREVIEW_NEXT :: Int-wxPREVIEW_NEXT = 4--wxPREVIEW_ZOOM :: Int-wxPREVIEW_ZOOM = 8--wxPREVIEW_FIRST :: Int-wxPREVIEW_FIRST = 8--wxPREVIEW_LAST :: Int-wxPREVIEW_LAST = 32--wxPREVIEW_GOTO :: Int-wxPREVIEW_GOTO = 64--wxPREVIEW_DEFAULT :: Int-wxPREVIEW_DEFAULT = 126--wxID_PREVIEW_CLOSE :: Int-wxID_PREVIEW_CLOSE = 1--wxID_PREVIEW_NEXT :: Int-wxID_PREVIEW_NEXT = 2--wxID_PREVIEW_PREVIOUS :: Int-wxID_PREVIEW_PREVIOUS = 3--wxID_PREVIEW_PRINT :: Int-wxID_PREVIEW_PRINT = 4--wxID_PREVIEW_ZOOM :: Int-wxID_PREVIEW_ZOOM = 5--wxID_PREVIEW_FIRST :: Int-wxID_PREVIEW_FIRST = 6--wxID_PREVIEW_LAST :: Int-wxID_PREVIEW_LAST = 7--wxID_PREVIEW_GOTO :: Int-wxID_PREVIEW_GOTO = 8--wxPRINTID_STATIC :: Int-wxPRINTID_STATIC = 10--wxPRINTID_RANGE :: Int-wxPRINTID_RANGE = 11--wxPRINTID_FROM :: Int-wxPRINTID_FROM = 12--wxPRINTID_TO :: Int-wxPRINTID_TO = 13--wxPRINTID_COPIES :: Int-wxPRINTID_COPIES = 14--wxPRINTID_PRINTTOFILE :: Int-wxPRINTID_PRINTTOFILE = 15--wxPRINTID_SETUP :: Int-wxPRINTID_SETUP = 16--wxPRINTID_LEFTMARGIN :: Int-wxPRINTID_LEFTMARGIN = 30--wxPRINTID_RIGHTMARGIN :: Int-wxPRINTID_RIGHTMARGIN = 31--wxPRINTID_TOPMARGIN :: Int-wxPRINTID_TOPMARGIN = 32--wxPRINTID_BOTTOMMARGIN :: Int-wxPRINTID_BOTTOMMARGIN = 33--wxPRINTID_PRINTCOLOUR :: Int-wxPRINTID_PRINTCOLOUR = 10--wxPRINTID_ORIENTATION :: Int-wxPRINTID_ORIENTATION = 11--wxPRINTID_COMMAND :: Int-wxPRINTID_COMMAND = 12--wxPRINTID_OPTIONS :: Int-wxPRINTID_OPTIONS = 13--wxPRINTID_PAPERSIZE :: Int-wxPRINTID_PAPERSIZE = 14--wxHF_TOOLBAR :: Int-wxHF_TOOLBAR = 1--wxHF_CONTENTS :: Int-wxHF_CONTENTS = 2--wxHF_INDEX :: Int-wxHF_INDEX = 4--wxHF_SEARCH :: Int-wxHF_SEARCH = 8--wxHF_BOOKMARKS :: Int-wxHF_BOOKMARKS = 16--wxHF_OPENFILES :: Int-wxHF_OPENFILES = 32--wxHF_PRINT :: Int-wxHF_PRINT = 64--wxHF_FLATTOOLBAR :: Int-wxHF_FLATTOOLBAR = 128--wxHF_DEFAULTSTYLE :: Int-wxHF_DEFAULTSTYLE = 95--wxLAYOUT_HORIZONTAL :: Int-wxLAYOUT_HORIZONTAL = 0--wxLAYOUT_VERTICAL :: Int-wxLAYOUT_VERTICAL = 1--wxLAYOUT_NONE :: Int-wxLAYOUT_NONE = 0--wxLAYOUT_TOP :: Int-wxLAYOUT_TOP = 1--wxLAYOUT_LEFT :: Int-wxLAYOUT_LEFT = 2--wxLAYOUT_RIGHT :: Int-wxLAYOUT_RIGHT = 3--wxLAYOUT_BOTTOM :: Int-wxLAYOUT_BOTTOM = 4--wxSASH_DRAG_NONE :: Int-wxSASH_DRAG_NONE = 0--wxSASH_DRAG_DRAGGING :: Int-wxSASH_DRAG_DRAGGING = 1--wxSASH_DRAG_LEFT_DOWN :: Int-wxSASH_DRAG_LEFT_DOWN = 2--wxSASH_TOP :: Int-wxSASH_TOP = 0--wxSASH_RIGHT :: Int-wxSASH_RIGHT = 1--wxSASH_BOTTOM :: Int-wxSASH_BOTTOM = 2--wxSASH_LEFT :: Int-wxSASH_LEFT = 3--wxSASH_NONE :: Int-wxSASH_NONE = 100--wxSW_NOBORDER :: Int-wxSW_NOBORDER = 0--wxSW_BORDER :: Int-wxSW_BORDER = 32--wxSW_3DSASH :: Int-wxSW_3DSASH = 64--wxSW_3DBORDER :: Int-wxSW_3DBORDER = 128--wxSW_3D :: Int-wxSW_3D = 192--wxSASH_STATUS_OK :: Int-wxSASH_STATUS_OK = 0--wxSASH_STATUS_OUT_OF_RANGE :: Int-wxSASH_STATUS_OUT_OF_RANGE = 1--wxXRC_NONE :: Int-wxXRC_NONE = 0--wxXRC_USE_LOCALE :: Int-wxXRC_USE_LOCALE = 1--wxXRC_NO_SUBCLASSING :: Int-wxXRC_NO_SUBCLASSING = 2--wxXRC_NO_RELOADING :: Int-wxXRC_NO_RELOADING = 4--wxSYS_WHITE_BRUSH :: Int-wxSYS_WHITE_BRUSH = 0--wxSYS_LTGRAY_BRUSH :: Int-wxSYS_LTGRAY_BRUSH = 1--wxSYS_GRAY_BRUSH :: Int-wxSYS_GRAY_BRUSH = 2--wxSYS_DKGRAY_BRUSH :: Int-wxSYS_DKGRAY_BRUSH = 3--wxSYS_BLACK_BRUSH :: Int-wxSYS_BLACK_BRUSH = 4--wxSYS_NULL_BRUSH :: Int-wxSYS_NULL_BRUSH = 5--wxSYS_HOLLOW_BRUSH :: Int-wxSYS_HOLLOW_BRUSH = 5--wxSYS_WHITE_PEN :: Int-wxSYS_WHITE_PEN = 6--wxSYS_BLACK_PEN :: Int-wxSYS_BLACK_PEN = 7--wxSYS_NULL_PEN :: Int-wxSYS_NULL_PEN = 8--wxSYS_OEM_FIXED_FONT :: Int-wxSYS_OEM_FIXED_FONT = 10--wxSYS_ANSI_FIXED_FONT :: Int-wxSYS_ANSI_FIXED_FONT = 11--wxSYS_ANSI_VAR_FONT :: Int-wxSYS_ANSI_VAR_FONT = 12--wxSYS_SYSTEM_FONT :: Int-wxSYS_SYSTEM_FONT = 13--wxSYS_DEVICE_DEFAULT_FONT :: Int-wxSYS_DEVICE_DEFAULT_FONT = 14--wxSYS_DEFAULT_PALETTE :: Int-wxSYS_DEFAULT_PALETTE = 15--wxSYS_SYSTEM_FIXED_FONT :: Int-wxSYS_SYSTEM_FIXED_FONT = 16--wxSYS_DEFAULT_GUI_FONT :: Int-wxSYS_DEFAULT_GUI_FONT = 17--wxSYS_COLOUR_SCROLLBAR :: Int-wxSYS_COLOUR_SCROLLBAR = 0--wxSYS_COLOUR_BACKGROUND :: Int-wxSYS_COLOUR_BACKGROUND = 1--wxSYS_COLOUR_ACTIVECAPTION :: Int-wxSYS_COLOUR_ACTIVECAPTION = 2--wxSYS_COLOUR_INACTIVECAPTION :: Int-wxSYS_COLOUR_INACTIVECAPTION = 3--wxSYS_COLOUR_MENU :: Int-wxSYS_COLOUR_MENU = 4--wxSYS_COLOUR_WINDOW :: Int-wxSYS_COLOUR_WINDOW = 5--wxSYS_COLOUR_WINDOWFRAME :: Int-wxSYS_COLOUR_WINDOWFRAME = 6--wxSYS_COLOUR_MENUTEXT :: Int-wxSYS_COLOUR_MENUTEXT = 7--wxSYS_COLOUR_WINDOWTEXT :: Int-wxSYS_COLOUR_WINDOWTEXT = 8--wxSYS_COLOUR_CAPTIONTEXT :: Int-wxSYS_COLOUR_CAPTIONTEXT = 9--wxSYS_COLOUR_ACTIVEBORDER :: Int-wxSYS_COLOUR_ACTIVEBORDER = 10--wxSYS_COLOUR_INACTIVEBORDER :: Int-wxSYS_COLOUR_INACTIVEBORDER = 11--wxSYS_COLOUR_APPWORKSPACE :: Int-wxSYS_COLOUR_APPWORKSPACE = 12--wxSYS_COLOUR_HIGHLIGHT :: Int-wxSYS_COLOUR_HIGHLIGHT = 13--wxSYS_COLOUR_HIGHLIGHTTEXT :: Int-wxSYS_COLOUR_HIGHLIGHTTEXT = 14--wxSYS_COLOUR_BTNFACE :: Int-wxSYS_COLOUR_BTNFACE = 15--wxSYS_COLOUR_BTNSHADOW :: Int-wxSYS_COLOUR_BTNSHADOW = 16--wxSYS_COLOUR_GRAYTEXT :: Int-wxSYS_COLOUR_GRAYTEXT = 17--wxSYS_COLOUR_BTNTEXT :: Int-wxSYS_COLOUR_BTNTEXT = 18--wxSYS_COLOUR_INACTIVECAPTIONTEXT :: Int-wxSYS_COLOUR_INACTIVECAPTIONTEXT = 19--wxSYS_COLOUR_BTNHIGHLIGHT :: Int-wxSYS_COLOUR_BTNHIGHLIGHT = 20--wxSYS_COLOUR_3DDKSHADOW :: Int-wxSYS_COLOUR_3DDKSHADOW = 21--wxSYS_COLOUR_3DLIGHT :: Int-wxSYS_COLOUR_3DLIGHT = 22--wxSYS_COLOUR_INFOTEXT :: Int-wxSYS_COLOUR_INFOTEXT = 23--wxSYS_COLOUR_INFOBK :: Int-wxSYS_COLOUR_INFOBK = 24--wxSYS_COLOUR_LISTBOX :: Int-wxSYS_COLOUR_LISTBOX = 25--wxSYS_COLOUR_DESKTOP :: Int-wxSYS_COLOUR_DESKTOP = 1--wxSYS_COLOUR_3DFACE :: Int-wxSYS_COLOUR_3DFACE = 15--wxSYS_COLOUR_3DSHADOW :: Int-wxSYS_COLOUR_3DSHADOW = 16--wxSYS_COLOUR_3DHIGHLIGHT :: Int-wxSYS_COLOUR_3DHIGHLIGHT = 20--wxSYS_COLOUR_3DHILIGHT :: Int-wxSYS_COLOUR_3DHILIGHT = 20--wxSYS_COLOUR_BTNHILIGHT :: Int-wxSYS_COLOUR_BTNHILIGHT = 20--wxSYS_MOUSE_BUTTONS :: Int-wxSYS_MOUSE_BUTTONS = 1--wxSYS_BORDER_X :: Int-wxSYS_BORDER_X = 2--wxSYS_BORDER_Y :: Int-wxSYS_BORDER_Y = 3--wxSYS_CURSOR_X :: Int-wxSYS_CURSOR_X = 4--wxSYS_CURSOR_Y :: Int-wxSYS_CURSOR_Y = 5--wxSYS_DCLICK_X :: Int-wxSYS_DCLICK_X = 6--wxSYS_DCLICK_Y :: Int-wxSYS_DCLICK_Y = 7--wxSYS_DRAG_X :: Int-wxSYS_DRAG_X = 8--wxSYS_DRAG_Y :: Int-wxSYS_DRAG_Y = 9--wxSYS_EDGE_X :: Int-wxSYS_EDGE_X = 10--wxSYS_EDGE_Y :: Int-wxSYS_EDGE_Y = 11--wxSYS_HSCROLL_ARROW_X :: Int-wxSYS_HSCROLL_ARROW_X = 12--wxSYS_HSCROLL_ARROW_Y :: Int-wxSYS_HSCROLL_ARROW_Y = 13--wxSYS_HTHUMB_X :: Int-wxSYS_HTHUMB_X = 14--wxSYS_ICON_X :: Int-wxSYS_ICON_X = 15--wxSYS_ICON_Y :: Int-wxSYS_ICON_Y = 16--wxSYS_ICONSPACING_X :: Int-wxSYS_ICONSPACING_X = 17--wxSYS_ICONSPACING_Y :: Int-wxSYS_ICONSPACING_Y = 18--wxSYS_WINDOWMIN_X :: Int-wxSYS_WINDOWMIN_X = 19--wxSYS_WINDOWMIN_Y :: Int-wxSYS_WINDOWMIN_Y = 20--wxSYS_SCREEN_X :: Int-wxSYS_SCREEN_X = 21--wxSYS_SCREEN_Y :: Int-wxSYS_SCREEN_Y = 22--wxSYS_FRAMESIZE_X :: Int-wxSYS_FRAMESIZE_X = 23--wxSYS_FRAMESIZE_Y :: Int-wxSYS_FRAMESIZE_Y = 24--wxSYS_SMALLICON_X :: Int-wxSYS_SMALLICON_X = 25--wxSYS_SMALLICON_Y :: Int-wxSYS_SMALLICON_Y = 26--wxSYS_HSCROLL_Y :: Int-wxSYS_HSCROLL_Y = 27--wxSYS_VSCROLL_X :: Int-wxSYS_VSCROLL_X = 28--wxSYS_VSCROLL_ARROW_X :: Int-wxSYS_VSCROLL_ARROW_X = 29--wxSYS_VSCROLL_ARROW_Y :: Int-wxSYS_VSCROLL_ARROW_Y = 30--wxSYS_VTHUMB_Y :: Int-wxSYS_VTHUMB_Y = 31--wxSYS_CAPTION_Y :: Int-wxSYS_CAPTION_Y = 32--wxSYS_MENU_Y :: Int-wxSYS_MENU_Y = 33--wxSYS_NETWORK_PRESENT :: Int-wxSYS_NETWORK_PRESENT = 34--wxSYS_PENWINDOWS_PRESENT :: Int-wxSYS_PENWINDOWS_PRESENT = 35--wxSYS_SHOW_SOUNDS :: Int-wxSYS_SHOW_SOUNDS = 36--wxSYS_SWAP_BUTTONS :: Int-wxSYS_SWAP_BUTTONS = 37--wxSYS_SCREEN_NONE :: Int-wxSYS_SCREEN_NONE = 0--wxSYS_SCREEN_TINY :: Int-wxSYS_SCREEN_TINY = 1--wxSYS_SCREEN_PDA :: Int-wxSYS_SCREEN_PDA = 2--wxSYS_SCREEN_SMALL :: Int-wxSYS_SCREEN_SMALL = 3--wxSYS_SCREEN_DESKTOP :: Int-wxSYS_SCREEN_DESKTOP = 4--wxCAL_BORDER_NONE :: Int-wxCAL_BORDER_NONE = 0--wxCAL_BORDER_SQUARE :: Int-wxCAL_BORDER_SQUARE = 1--wxCAL_BORDER_ROUND :: Int-wxCAL_BORDER_ROUND = 2--wxCAL_HITTEST_NOWHERE :: Int-wxCAL_HITTEST_NOWHERE = 0--wxCAL_HITTEST_HEADER :: Int-wxCAL_HITTEST_HEADER = 1--wxCAL_HITTEST_DAY :: Int-wxCAL_HITTEST_DAY = 2--wxUNKNOWN :: Int-wxUNKNOWN = 0--wxSTRING :: Int-wxSTRING = 1--wxBOOLEAN :: Int-wxBOOLEAN = 2--wxINTEGER :: Int-wxINTEGER = 3--wxFLOAT :: Int-wxFLOAT = 4--wxMUTEX_NO_ERROR :: Int-wxMUTEX_NO_ERROR = 0--wxMUTEX_DEAD_LOCK :: Int-wxMUTEX_DEAD_LOCK = 1--wxMUTEX_BUSY :: Int-wxMUTEX_BUSY = 2--wxMUTEX_UNLOCKED :: Int-wxMUTEX_UNLOCKED = 3--wxMUTEX_MISC_ERROR :: Int-wxMUTEX_MISC_ERROR = 4--wxPLATFORM_CURRENT :: Int-wxPLATFORM_CURRENT = (-1)--wxPLATFORM_UNIX :: Int-wxPLATFORM_UNIX = 0--wxPLATFORM_WINDOWS :: Int-wxPLATFORM_WINDOWS = 1--wxPLATFORM_OS2 :: Int-wxPLATFORM_OS2 = 2--wxPLATFORM_MAC :: Int-wxPLATFORM_MAC = 3--wxLED_ALIGN_LEFT :: Int-wxLED_ALIGN_LEFT = 1--wxLED_ALIGN_RIGHT :: Int-wxLED_ALIGN_RIGHT = 2--wxLED_ALIGN_CENTER :: Int-wxLED_ALIGN_CENTER = 4--wxLED_ALIGN_MASK :: Int-wxLED_ALIGN_MASK = 4--wxLED_DRAW_FADED :: Int-wxLED_DRAW_FADED = 8--wxDS_MANAGE_SCROLLBARS :: Int-wxDS_MANAGE_SCROLLBARS = 16--wxDS_DRAG_CORNER :: Int-wxDS_DRAG_CORNER = 32--wxEL_ALLOW_NEW :: Int-wxEL_ALLOW_NEW = 256--wxEL_ALLOW_EDIT :: Int-wxEL_ALLOW_EDIT = 512--wxEL_ALLOW_DELETE :: Int-wxEL_ALLOW_DELETE = 1024--wxTR_NO_BUTTONS :: Int-wxTR_NO_BUTTONS = 0--wxTR_HAS_BUTTONS :: Int-wxTR_HAS_BUTTONS = 1--wxTR_TWIST_BUTTONS :: Int-wxTR_TWIST_BUTTONS = 2--wxTR_NO_LINES :: Int-wxTR_NO_LINES = 4--wxTR_LINES_AT_ROOT :: Int-wxTR_LINES_AT_ROOT = 8--wxTR_AQUA_BUTTONS :: Int-wxTR_AQUA_BUTTONS = 16--wxTR_SINGLE :: Int-wxTR_SINGLE = 0--wxTR_MULTIPLE :: Int-wxTR_MULTIPLE = 32--wxTR_EXTENDED :: Int-wxTR_EXTENDED = 64--wxTR_FULL_ROW_HIGHLIGHT :: Int-wxTR_FULL_ROW_HIGHLIGHT = 8192--wxTR_EDIT_LABELS :: Int-wxTR_EDIT_LABELS = 512--wxTR_ROW_LINES :: Int-wxTR_ROW_LINES = 1024--wxTR_HIDE_ROOT :: Int-wxTR_HIDE_ROOT = 2048--wxTR_HAS_VARIABLE_ROW_HEIGHT :: Int-wxTR_HAS_VARIABLE_ROW_HEIGHT = 128--wxCBAR_DOCKED_HORIZONTALLY :: Int-wxCBAR_DOCKED_HORIZONTALLY = 0--wxCBAR_DOCKED_VERTICALLY :: Int-wxCBAR_DOCKED_VERTICALLY = 1--wxCBAR_FLOATING :: Int-wxCBAR_FLOATING = 2--wxCBAR_HIDDEN :: Int-wxCBAR_HIDDEN = 3--fL_ALIGN_TOP :: Int-fL_ALIGN_TOP = 0--fL_ALIGN_BOTTOM :: Int-fL_ALIGN_BOTTOM = 1--fL_ALIGN_LEFT :: Int-fL_ALIGN_LEFT = 2--fL_ALIGN_RIGHT :: Int-fL_ALIGN_RIGHT = 3--fL_ALIGN_TOP_PANE :: Int-fL_ALIGN_TOP_PANE = 1--fL_ALIGN_BOTTOM_PANE :: Int-fL_ALIGN_BOTTOM_PANE = 2--fL_ALIGN_LEFT_PANE :: Int-fL_ALIGN_LEFT_PANE = 4--fL_ALIGN_RIGHT_PANE :: Int-fL_ALIGN_RIGHT_PANE = 8--wxALL_PANES :: Int-wxALL_PANES = 15--cB_NO_ITEMS_HITTED :: Int-cB_NO_ITEMS_HITTED = 0--cB_UPPER_ROW_HANDLE_HITTED :: Int-cB_UPPER_ROW_HANDLE_HITTED = 1--cB_LOWER_ROW_HANDLE_HITTED :: Int-cB_LOWER_ROW_HANDLE_HITTED = 2--cB_LEFT_BAR_HANDLE_HITTED :: Int-cB_LEFT_BAR_HANDLE_HITTED = 3--cB_RIGHT_BAR_HANDLE_HITTED :: Int-cB_RIGHT_BAR_HANDLE_HITTED = 4--cB_BAR_CONTENT_HITTED :: Int-cB_BAR_CONTENT_HITTED = 5--wxOK :: Int-wxOK = 4--wxYES :: Int-wxYES = 2--wxNO :: Int-wxNO = 8--wxYES_NO :: Int-wxYES_NO = 10--wxCANCEL :: Int-wxCANCEL = 16--wxNO_DEFAULT :: Int-wxNO_DEFAULT = 128--wxYES_DEFAULT :: Int-wxYES_DEFAULT = 0--wxFR_DOWN :: Int-wxFR_DOWN = 1--wxFR_WHOLEWORD :: Int-wxFR_WHOLEWORD = 2--wxFR_MATCHCASE :: Int-wxFR_MATCHCASE = 4--wxFR_REPLACEDIALOG :: Int-wxFR_REPLACEDIALOG = 1--wxFR_NOUPDOWN :: Int-wxFR_NOUPDOWN = 2--wxFR_NOMATCHCASE :: Int-wxFR_NOMATCHCASE = 4--wxFR_NOWHOLEWORD :: Int-wxFR_NOWHOLEWORD = 8--wxQUANTIZE_INCLUDE_WINDOWS_COLOURS :: Int-wxQUANTIZE_INCLUDE_WINDOWS_COLOURS = 1--wxQUANTIZE_RETURN_8BIT_DATA :: Int-wxQUANTIZE_RETURN_8BIT_DATA = 2--wxQUANTIZE_FILL_DESTINATION_IMAGE :: Int-wxQUANTIZE_FILL_DESTINATION_IMAGE = 4--wxLANGUAGE_DEFAULT :: Int-wxLANGUAGE_DEFAULT = 0--wxLANGUAGE_UNKNOWN :: Int-wxLANGUAGE_UNKNOWN = 1--wxLANGUAGE_ABKHAZIAN :: Int-wxLANGUAGE_ABKHAZIAN = 2--wxLANGUAGE_AFAR :: Int-wxLANGUAGE_AFAR = 3--wxLANGUAGE_AFRIKAANS :: Int-wxLANGUAGE_AFRIKAANS = 4--wxLANGUAGE_ALBANIAN :: Int-wxLANGUAGE_ALBANIAN = 5--wxLANGUAGE_AMHARIC :: Int-wxLANGUAGE_AMHARIC = 6--wxLANGUAGE_ARABIC :: Int-wxLANGUAGE_ARABIC = 7--wxLANGUAGE_ARABIC_ALGERIA :: Int-wxLANGUAGE_ARABIC_ALGERIA = 8--wxLANGUAGE_ARABIC_BAHRAIN :: Int-wxLANGUAGE_ARABIC_BAHRAIN = 9--wxLANGUAGE_ARABIC_EGYPT :: Int-wxLANGUAGE_ARABIC_EGYPT = 10--wxLANGUAGE_ARABIC_IRAQ :: Int-wxLANGUAGE_ARABIC_IRAQ = 11--wxLANGUAGE_ARABIC_JORDAN :: Int-wxLANGUAGE_ARABIC_JORDAN = 12--wxLANGUAGE_ARABIC_KUWAIT :: Int-wxLANGUAGE_ARABIC_KUWAIT = 13--wxLANGUAGE_ARABIC_LEBANON :: Int-wxLANGUAGE_ARABIC_LEBANON = 14--wxLANGUAGE_ARABIC_LIBYA :: Int-wxLANGUAGE_ARABIC_LIBYA = 15--wxLANGUAGE_ARABIC_MOROCCO :: Int-wxLANGUAGE_ARABIC_MOROCCO = 16--wxLANGUAGE_ARABIC_OMAN :: Int-wxLANGUAGE_ARABIC_OMAN = 17--wxLANGUAGE_ARABIC_QATAR :: Int-wxLANGUAGE_ARABIC_QATAR = 18--wxLANGUAGE_ARABIC_SAUDI_ARABIA :: Int-wxLANGUAGE_ARABIC_SAUDI_ARABIA = 19--wxLANGUAGE_ARABIC_SUDAN :: Int-wxLANGUAGE_ARABIC_SUDAN = 20--wxLANGUAGE_ARABIC_SYRIA :: Int-wxLANGUAGE_ARABIC_SYRIA = 21--wxLANGUAGE_ARABIC_TUNISIA :: Int-wxLANGUAGE_ARABIC_TUNISIA = 22--wxLANGUAGE_ARABIC_UAE :: Int-wxLANGUAGE_ARABIC_UAE = 23--wxLANGUAGE_ARABIC_YEMEN :: Int-wxLANGUAGE_ARABIC_YEMEN = 24--wxLANGUAGE_ARMENIAN :: Int-wxLANGUAGE_ARMENIAN = 25--wxLANGUAGE_ASSAMESE :: Int-wxLANGUAGE_ASSAMESE = 26--wxLANGUAGE_AYMARA :: Int-wxLANGUAGE_AYMARA = 27--wxLANGUAGE_AZERI :: Int-wxLANGUAGE_AZERI = 28--wxLANGUAGE_AZERI_CYRILLIC :: Int-wxLANGUAGE_AZERI_CYRILLIC = 29--wxLANGUAGE_AZERI_LATIN :: Int-wxLANGUAGE_AZERI_LATIN = 30--wxLANGUAGE_BASHKIR :: Int-wxLANGUAGE_BASHKIR = 31--wxLANGUAGE_BASQUE :: Int-wxLANGUAGE_BASQUE = 32--wxLANGUAGE_BELARUSIAN :: Int-wxLANGUAGE_BELARUSIAN = 33--wxLANGUAGE_BENGALI :: Int-wxLANGUAGE_BENGALI = 34--wxLANGUAGE_BHUTANI :: Int-wxLANGUAGE_BHUTANI = 35--wxLANGUAGE_BIHARI :: Int-wxLANGUAGE_BIHARI = 36--wxLANGUAGE_BISLAMA :: Int-wxLANGUAGE_BISLAMA = 37--wxLANGUAGE_BRETON :: Int-wxLANGUAGE_BRETON = 38--wxLANGUAGE_BULGARIAN :: Int-wxLANGUAGE_BULGARIAN = 39--wxLANGUAGE_BURMESE :: Int-wxLANGUAGE_BURMESE = 40--wxLANGUAGE_CAMBODIAN :: Int-wxLANGUAGE_CAMBODIAN = 41--wxLANGUAGE_CATALAN :: Int-wxLANGUAGE_CATALAN = 42--wxLANGUAGE_CHINESE :: Int-wxLANGUAGE_CHINESE = 43--wxLANGUAGE_CHINESE_SIMPLIFIED :: Int-wxLANGUAGE_CHINESE_SIMPLIFIED = 44--wxLANGUAGE_CHINESE_TRADITIONAL :: Int-wxLANGUAGE_CHINESE_TRADITIONAL = 45--wxLANGUAGE_CHINESE_HONGKONG :: Int-wxLANGUAGE_CHINESE_HONGKONG = 46--wxLANGUAGE_CHINESE_MACAU :: Int-wxLANGUAGE_CHINESE_MACAU = 47--wxLANGUAGE_CHINESE_SINGAPORE :: Int-wxLANGUAGE_CHINESE_SINGAPORE = 48--wxLANGUAGE_CHINESE_TAIWAN :: Int-wxLANGUAGE_CHINESE_TAIWAN = 49--wxLANGUAGE_CORSICAN :: Int-wxLANGUAGE_CORSICAN = 50--wxLANGUAGE_CROATIAN :: Int-wxLANGUAGE_CROATIAN = 51--wxLANGUAGE_CZECH :: Int-wxLANGUAGE_CZECH = 52--wxLANGUAGE_DANISH :: Int-wxLANGUAGE_DANISH = 53--wxLANGUAGE_DUTCH :: Int-wxLANGUAGE_DUTCH = 54--wxLANGUAGE_DUTCH_BELGIAN :: Int-wxLANGUAGE_DUTCH_BELGIAN = 55--wxLANGUAGE_ENGLISH :: Int-wxLANGUAGE_ENGLISH = 56--wxLANGUAGE_ENGLISH_UK :: Int-wxLANGUAGE_ENGLISH_UK = 57--wxLANGUAGE_ENGLISH_US :: Int-wxLANGUAGE_ENGLISH_US = 58--wxLANGUAGE_ENGLISH_AUSTRALIA :: Int-wxLANGUAGE_ENGLISH_AUSTRALIA = 59--wxLANGUAGE_ENGLISH_BELIZE :: Int-wxLANGUAGE_ENGLISH_BELIZE = 60--wxLANGUAGE_ENGLISH_BOTSWANA :: Int-wxLANGUAGE_ENGLISH_BOTSWANA = 61--wxLANGUAGE_ENGLISH_CANADA :: Int-wxLANGUAGE_ENGLISH_CANADA = 62--wxLANGUAGE_ENGLISH_CARIBBEAN :: Int-wxLANGUAGE_ENGLISH_CARIBBEAN = 63--wxLANGUAGE_ENGLISH_DENMARK :: Int-wxLANGUAGE_ENGLISH_DENMARK = 64--wxLANGUAGE_ENGLISH_EIRE :: Int-wxLANGUAGE_ENGLISH_EIRE = 65--wxLANGUAGE_ENGLISH_JAMAICA :: Int-wxLANGUAGE_ENGLISH_JAMAICA = 66--wxLANGUAGE_ENGLISH_NEW_ZEALAND :: Int-wxLANGUAGE_ENGLISH_NEW_ZEALAND = 67--wxLANGUAGE_ENGLISH_PHILIPPINES :: Int-wxLANGUAGE_ENGLISH_PHILIPPINES = 68--wxLANGUAGE_ENGLISH_SOUTH_AFRICA :: Int-wxLANGUAGE_ENGLISH_SOUTH_AFRICA = 69--wxLANGUAGE_ENGLISH_TRINIDAD :: Int-wxLANGUAGE_ENGLISH_TRINIDAD = 70--wxLANGUAGE_ENGLISH_ZIMBABWE :: Int-wxLANGUAGE_ENGLISH_ZIMBABWE = 71--wxLANGUAGE_ESPERANTO :: Int-wxLANGUAGE_ESPERANTO = 72--wxLANGUAGE_ESTONIAN :: Int-wxLANGUAGE_ESTONIAN = 73--wxLANGUAGE_FAEROESE :: Int-wxLANGUAGE_FAEROESE = 74--wxLANGUAGE_FARSI :: Int-wxLANGUAGE_FARSI = 75--wxLANGUAGE_FIJI :: Int-wxLANGUAGE_FIJI = 76--wxLANGUAGE_FINNISH :: Int-wxLANGUAGE_FINNISH = 77--wxLANGUAGE_FRENCH :: Int-wxLANGUAGE_FRENCH = 78--wxLANGUAGE_FRENCH_BELGIAN :: Int-wxLANGUAGE_FRENCH_BELGIAN = 79--wxLANGUAGE_FRENCH_CANADIAN :: Int-wxLANGUAGE_FRENCH_CANADIAN = 80--wxLANGUAGE_FRENCH_LUXEMBOURG :: Int-wxLANGUAGE_FRENCH_LUXEMBOURG = 81--wxLANGUAGE_FRENCH_MONACO :: Int-wxLANGUAGE_FRENCH_MONACO = 82--wxLANGUAGE_FRENCH_SWISS :: Int-wxLANGUAGE_FRENCH_SWISS = 83--wxLANGUAGE_FRISIAN :: Int-wxLANGUAGE_FRISIAN = 84--wxLANGUAGE_GALICIAN :: Int-wxLANGUAGE_GALICIAN = 85--wxLANGUAGE_GEORGIAN :: Int-wxLANGUAGE_GEORGIAN = 86--wxLANGUAGE_GERMAN :: Int-wxLANGUAGE_GERMAN = 87--wxLANGUAGE_GERMAN_AUSTRIAN :: Int-wxLANGUAGE_GERMAN_AUSTRIAN = 88--wxLANGUAGE_GERMAN_BELGIUM :: Int-wxLANGUAGE_GERMAN_BELGIUM = 89--wxLANGUAGE_GERMAN_LIECHTENSTEIN :: Int-wxLANGUAGE_GERMAN_LIECHTENSTEIN = 90--wxLANGUAGE_GERMAN_LUXEMBOURG :: Int-wxLANGUAGE_GERMAN_LUXEMBOURG = 91--wxLANGUAGE_GERMAN_SWISS :: Int-wxLANGUAGE_GERMAN_SWISS = 92--wxLANGUAGE_GREEK :: Int-wxLANGUAGE_GREEK = 93--wxLANGUAGE_GREENLANDIC :: Int-wxLANGUAGE_GREENLANDIC = 94--wxLANGUAGE_GUARANI :: Int-wxLANGUAGE_GUARANI = 95--wxLANGUAGE_GUJARATI :: Int-wxLANGUAGE_GUJARATI = 96--wxLANGUAGE_HAUSA :: Int-wxLANGUAGE_HAUSA = 97--wxLANGUAGE_HEBREW :: Int-wxLANGUAGE_HEBREW = 98--wxLANGUAGE_HINDI :: Int-wxLANGUAGE_HINDI = 99--wxLANGUAGE_HUNGARIAN :: Int-wxLANGUAGE_HUNGARIAN = 100--wxLANGUAGE_ICELANDIC :: Int-wxLANGUAGE_ICELANDIC = 101--wxLANGUAGE_INDONESIAN :: Int-wxLANGUAGE_INDONESIAN = 102--wxLANGUAGE_INTERLINGUA :: Int-wxLANGUAGE_INTERLINGUA = 103--wxLANGUAGE_INTERLINGUE :: Int-wxLANGUAGE_INTERLINGUE = 104--wxLANGUAGE_INUKTITUT :: Int-wxLANGUAGE_INUKTITUT = 105--wxLANGUAGE_INUPIAK :: Int-wxLANGUAGE_INUPIAK = 106--wxLANGUAGE_IRISH :: Int-wxLANGUAGE_IRISH = 107--wxLANGUAGE_ITALIAN :: Int-wxLANGUAGE_ITALIAN = 108--wxLANGUAGE_ITALIAN_SWISS :: Int-wxLANGUAGE_ITALIAN_SWISS = 109--wxLANGUAGE_JAPANESE :: Int-wxLANGUAGE_JAPANESE = 110--wxLANGUAGE_JAVANESE :: Int-wxLANGUAGE_JAVANESE = 111--wxLANGUAGE_KANNADA :: Int-wxLANGUAGE_KANNADA = 112--wxLANGUAGE_KASHMIRI :: Int-wxLANGUAGE_KASHMIRI = 113--wxLANGUAGE_KASHMIRI_INDIA :: Int-wxLANGUAGE_KASHMIRI_INDIA = 114--wxLANGUAGE_KAZAKH :: Int-wxLANGUAGE_KAZAKH = 115--wxLANGUAGE_KERNEWEK :: Int-wxLANGUAGE_KERNEWEK = 116--wxLANGUAGE_KINYARWANDA :: Int-wxLANGUAGE_KINYARWANDA = 117--wxLANGUAGE_KIRGHIZ :: Int-wxLANGUAGE_KIRGHIZ = 118--wxLANGUAGE_KIRUNDI :: Int-wxLANGUAGE_KIRUNDI = 119--wxLANGUAGE_KONKANI :: Int-wxLANGUAGE_KONKANI = 120--wxLANGUAGE_KOREAN :: Int-wxLANGUAGE_KOREAN = 121--wxLANGUAGE_KURDISH :: Int-wxLANGUAGE_KURDISH = 122--wxLANGUAGE_LAOTHIAN :: Int-wxLANGUAGE_LAOTHIAN = 123--wxLANGUAGE_LATIN :: Int-wxLANGUAGE_LATIN = 124--wxLANGUAGE_LATVIAN :: Int-wxLANGUAGE_LATVIAN = 125--wxLANGUAGE_LINGALA :: Int-wxLANGUAGE_LINGALA = 126--wxLANGUAGE_LITHUANIAN :: Int-wxLANGUAGE_LITHUANIAN = 127--wxLANGUAGE_MACEDONIAN :: Int-wxLANGUAGE_MACEDONIAN = 128--wxLANGUAGE_MALAGASY :: Int-wxLANGUAGE_MALAGASY = 129--wxLANGUAGE_MALAY :: Int-wxLANGUAGE_MALAY = 130--wxLANGUAGE_MALAYALAM :: Int-wxLANGUAGE_MALAYALAM = 131--wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM :: Int-wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM = 132--wxLANGUAGE_MALAY_MALAYSIA :: Int-wxLANGUAGE_MALAY_MALAYSIA = 133--wxLANGUAGE_MALTESE :: Int-wxLANGUAGE_MALTESE = 134--wxLANGUAGE_MANIPURI :: Int-wxLANGUAGE_MANIPURI = 135--wxLANGUAGE_MAORI :: Int-wxLANGUAGE_MAORI = 136--wxLANGUAGE_MARATHI :: Int-wxLANGUAGE_MARATHI = 137--wxLANGUAGE_MOLDAVIAN :: Int-wxLANGUAGE_MOLDAVIAN = 138--wxLANGUAGE_MONGOLIAN :: Int-wxLANGUAGE_MONGOLIAN = 139--wxLANGUAGE_NAURU :: Int-wxLANGUAGE_NAURU = 140--wxLANGUAGE_NEPALI :: Int-wxLANGUAGE_NEPALI = 141--wxLANGUAGE_NEPALI_INDIA :: Int-wxLANGUAGE_NEPALI_INDIA = 142--wxLANGUAGE_NORWEGIAN_BOKMAL :: Int-wxLANGUAGE_NORWEGIAN_BOKMAL = 143--wxLANGUAGE_NORWEGIAN_NYNORSK :: Int-wxLANGUAGE_NORWEGIAN_NYNORSK = 144--wxLANGUAGE_OCCITAN :: Int-wxLANGUAGE_OCCITAN = 145--wxLANGUAGE_ORIYA :: Int-wxLANGUAGE_ORIYA = 146--wxLANGUAGE_OROMO :: Int-wxLANGUAGE_OROMO = 147--wxLANGUAGE_PASHTO :: Int-wxLANGUAGE_PASHTO = 148--wxLANGUAGE_POLISH :: Int-wxLANGUAGE_POLISH = 149--wxLANGUAGE_PORTUGUESE :: Int-wxLANGUAGE_PORTUGUESE = 150--wxLANGUAGE_PORTUGUESE_BRAZILIAN :: Int-wxLANGUAGE_PORTUGUESE_BRAZILIAN = 151--wxLANGUAGE_PUNJABI :: Int-wxLANGUAGE_PUNJABI = 152--wxLANGUAGE_QUECHUA :: Int-wxLANGUAGE_QUECHUA = 153--wxLANGUAGE_RHAETO_ROMANCE :: Int-wxLANGUAGE_RHAETO_ROMANCE = 154--wxLANGUAGE_ROMANIAN :: Int-wxLANGUAGE_ROMANIAN = 155--wxLANGUAGE_RUSSIAN :: Int-wxLANGUAGE_RUSSIAN = 156--wxLANGUAGE_RUSSIAN_UKRAINE :: Int-wxLANGUAGE_RUSSIAN_UKRAINE = 157--wxLANGUAGE_SAMOAN :: Int-wxLANGUAGE_SAMOAN = 158--wxLANGUAGE_SANGHO :: Int-wxLANGUAGE_SANGHO = 159--wxLANGUAGE_SANSKRIT :: Int-wxLANGUAGE_SANSKRIT = 160--wxLANGUAGE_SCOTS_GAELIC :: Int-wxLANGUAGE_SCOTS_GAELIC = 161--wxLANGUAGE_SERBIAN :: Int-wxLANGUAGE_SERBIAN = 162--wxLANGUAGE_SERBIAN_CYRILLIC :: Int-wxLANGUAGE_SERBIAN_CYRILLIC = 163--wxLANGUAGE_SERBIAN_LATIN :: Int-wxLANGUAGE_SERBIAN_LATIN = 164--wxLANGUAGE_SERBO_CROATIAN :: Int-wxLANGUAGE_SERBO_CROATIAN = 165--wxLANGUAGE_SESOTHO :: Int-wxLANGUAGE_SESOTHO = 166--wxLANGUAGE_SETSWANA :: Int-wxLANGUAGE_SETSWANA = 167--wxLANGUAGE_SHONA :: Int-wxLANGUAGE_SHONA = 168--wxLANGUAGE_SINDHI :: Int-wxLANGUAGE_SINDHI = 169--wxLANGUAGE_SINHALESE :: Int-wxLANGUAGE_SINHALESE = 170--wxLANGUAGE_SISWATI :: Int-wxLANGUAGE_SISWATI = 171--wxLANGUAGE_SLOVAK :: Int-wxLANGUAGE_SLOVAK = 172--wxLANGUAGE_SLOVENIAN :: Int-wxLANGUAGE_SLOVENIAN = 173--wxLANGUAGE_SOMALI :: Int-wxLANGUAGE_SOMALI = 174--wxLANGUAGE_SPANISH :: Int-wxLANGUAGE_SPANISH = 175--wxLANGUAGE_SPANISH_ARGENTINA :: Int-wxLANGUAGE_SPANISH_ARGENTINA = 176--wxLANGUAGE_SPANISH_BOLIVIA :: Int-wxLANGUAGE_SPANISH_BOLIVIA = 177--wxLANGUAGE_SPANISH_CHILE :: Int-wxLANGUAGE_SPANISH_CHILE = 178--wxLANGUAGE_SPANISH_COLOMBIA :: Int-wxLANGUAGE_SPANISH_COLOMBIA = 179--wxLANGUAGE_SPANISH_COSTA_RICA :: Int-wxLANGUAGE_SPANISH_COSTA_RICA = 180--wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC :: Int-wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC = 181--wxLANGUAGE_SPANISH_ECUADOR :: Int-wxLANGUAGE_SPANISH_ECUADOR = 182--wxLANGUAGE_SPANISH_EL_SALVADOR :: Int-wxLANGUAGE_SPANISH_EL_SALVADOR = 183--wxLANGUAGE_SPANISH_GUATEMALA :: Int-wxLANGUAGE_SPANISH_GUATEMALA = 184--wxLANGUAGE_SPANISH_HONDURAS :: Int-wxLANGUAGE_SPANISH_HONDURAS = 185--wxLANGUAGE_SPANISH_MEXICAN :: Int-wxLANGUAGE_SPANISH_MEXICAN = 186--wxLANGUAGE_SPANISH_MODERN :: Int-wxLANGUAGE_SPANISH_MODERN = 187--wxLANGUAGE_SPANISH_NICARAGUA :: Int-wxLANGUAGE_SPANISH_NICARAGUA = 188--wxLANGUAGE_SPANISH_PANAMA :: Int-wxLANGUAGE_SPANISH_PANAMA = 189--wxLANGUAGE_SPANISH_PARAGUAY :: Int-wxLANGUAGE_SPANISH_PARAGUAY = 190--wxLANGUAGE_SPANISH_PERU :: Int-wxLANGUAGE_SPANISH_PERU = 191--wxLANGUAGE_SPANISH_PUERTO_RICO :: Int-wxLANGUAGE_SPANISH_PUERTO_RICO = 192--wxLANGUAGE_SPANISH_URUGUAY :: Int-wxLANGUAGE_SPANISH_URUGUAY = 193--wxLANGUAGE_SPANISH_US :: Int-wxLANGUAGE_SPANISH_US = 194--wxLANGUAGE_SPANISH_VENEZUELA :: Int-wxLANGUAGE_SPANISH_VENEZUELA = 195--wxLANGUAGE_SUNDANESE :: Int-wxLANGUAGE_SUNDANESE = 196--wxLANGUAGE_SWAHILI :: Int-wxLANGUAGE_SWAHILI = 197--wxLANGUAGE_SWEDISH :: Int-wxLANGUAGE_SWEDISH = 198--wxLANGUAGE_SWEDISH_FINLAND :: Int-wxLANGUAGE_SWEDISH_FINLAND = 199--wxLANGUAGE_TAGALOG :: Int-wxLANGUAGE_TAGALOG = 200--wxLANGUAGE_TAJIK :: Int-wxLANGUAGE_TAJIK = 201--wxLANGUAGE_TAMIL :: Int-wxLANGUAGE_TAMIL = 202--wxLANGUAGE_TATAR :: Int-wxLANGUAGE_TATAR = 203--wxLANGUAGE_TELUGU :: Int-wxLANGUAGE_TELUGU = 204--wxLANGUAGE_THAI :: Int-wxLANGUAGE_THAI = 205--wxLANGUAGE_TIBETAN :: Int-wxLANGUAGE_TIBETAN = 206--wxLANGUAGE_TIGRINYA :: Int-wxLANGUAGE_TIGRINYA = 207--wxLANGUAGE_TONGA :: Int-wxLANGUAGE_TONGA = 208--wxLANGUAGE_TSONGA :: Int-wxLANGUAGE_TSONGA = 209--wxLANGUAGE_TURKISH :: Int-wxLANGUAGE_TURKISH = 210--wxLANGUAGE_TURKMEN :: Int-wxLANGUAGE_TURKMEN = 211--wxLANGUAGE_TWI :: Int-wxLANGUAGE_TWI = 212--wxLANGUAGE_UIGHUR :: Int-wxLANGUAGE_UIGHUR = 213--wxLANGUAGE_UKRAINIAN :: Int-wxLANGUAGE_UKRAINIAN = 214--wxLANGUAGE_URDU :: Int-wxLANGUAGE_URDU = 215--wxLANGUAGE_URDU_INDIA :: Int-wxLANGUAGE_URDU_INDIA = 216--wxLANGUAGE_URDU_PAKISTAN :: Int-wxLANGUAGE_URDU_PAKISTAN = 217--wxLANGUAGE_UZBEK :: Int-wxLANGUAGE_UZBEK = 218--wxLANGUAGE_UZBEK_CYRILLIC :: Int-wxLANGUAGE_UZBEK_CYRILLIC = 219--wxLANGUAGE_UZBEK_LATIN :: Int-wxLANGUAGE_UZBEK_LATIN = 220--wxLANGUAGE_VIETNAMESE :: Int-wxLANGUAGE_VIETNAMESE = 221--wxLANGUAGE_VOLAPUK :: Int-wxLANGUAGE_VOLAPUK = 222--wxLANGUAGE_WELSH :: Int-wxLANGUAGE_WELSH = 223--wxLANGUAGE_WOLOF :: Int-wxLANGUAGE_WOLOF = 224--wxLANGUAGE_XHOSA :: Int-wxLANGUAGE_XHOSA = 225--wxLANGUAGE_YIDDISH :: Int-wxLANGUAGE_YIDDISH = 226--wxLANGUAGE_YORUBA :: Int-wxLANGUAGE_YORUBA = 227--wxLANGUAGE_ZHUANG :: Int-wxLANGUAGE_ZHUANG = 228--wxLANGUAGE_ZULU :: Int-wxLANGUAGE_ZULU = 229--wxLANGUAGE_USER_DEFINE :: Int-wxLANGUAGE_USER_DEFINE = 230--wxLOCALE_THOUSANDS_SEP :: Int-wxLOCALE_THOUSANDS_SEP = 0--wxLOCALE_DECIMAL_POINT :: Int-wxLOCALE_DECIMAL_POINT = 1--wxLOCALE_LOAD_DEFAULT :: Int-wxLOCALE_LOAD_DEFAULT = 1--wxLOCALE_CONV_ENCODING :: Int-wxLOCALE_CONV_ENCODING = 2--wxSTC_INVALID_POSITION :: Int-wxSTC_INVALID_POSITION = (-1)--wxSTC_START :: Int-wxSTC_START = 2000--wxSTC_OPTIONAL_START :: Int-wxSTC_OPTIONAL_START = 3000--wxSTC_LEXER_START :: Int-wxSTC_LEXER_START = 4000--wxSTC_WS_INVISIBLE :: Int-wxSTC_WS_INVISIBLE = 0--wxSTC_WS_VISIBLEALWAYS :: Int-wxSTC_WS_VISIBLEALWAYS = 1--wxSTC_WS_VISIBLEAFTERINDENT :: Int-wxSTC_WS_VISIBLEAFTERINDENT = 2--wxSTC_EOL_CRLF :: Int-wxSTC_EOL_CRLF = 0--wxSTC_EOL_CR :: Int-wxSTC_EOL_CR = 1--wxSTC_EOL_LF :: Int-wxSTC_EOL_LF = 2--wxSTC_CP_UTF8 :: Int-wxSTC_CP_UTF8 = 65001--wxSTC_CP_DBCS :: Int-wxSTC_CP_DBCS = 1--wxSTC_MARKER_MAX :: Int-wxSTC_MARKER_MAX = 31--wxSTC_MARK_CIRCLE :: Int-wxSTC_MARK_CIRCLE = 0--wxSTC_MARK_ROUNDRECT :: Int-wxSTC_MARK_ROUNDRECT = 1--wxSTC_MARK_ARROW :: Int-wxSTC_MARK_ARROW = 2--wxSTC_MARK_SMALLRECT :: Int-wxSTC_MARK_SMALLRECT = 3--wxSTC_MARK_SHORTARROW :: Int-wxSTC_MARK_SHORTARROW = 4--wxSTC_MARK_EMPTY :: Int-wxSTC_MARK_EMPTY = 5--wxSTC_MARK_ARROWDOWN :: Int-wxSTC_MARK_ARROWDOWN = 6--wxSTC_MARK_MINUS :: Int-wxSTC_MARK_MINUS = 7--wxSTC_MARK_PLUS :: Int-wxSTC_MARK_PLUS = 8--wxSTC_MARK_VLINE :: Int-wxSTC_MARK_VLINE = 9--wxSTC_MARK_LCORNER :: Int-wxSTC_MARK_LCORNER = 10--wxSTC_MARK_TCORNER :: Int-wxSTC_MARK_TCORNER = 11--wxSTC_MARK_BOXPLUS :: Int-wxSTC_MARK_BOXPLUS = 12--wxSTC_MARK_BOXPLUSCONNECTED :: Int-wxSTC_MARK_BOXPLUSCONNECTED = 13--wxSTC_MARK_BOXMINUS :: Int-wxSTC_MARK_BOXMINUS = 14--wxSTC_MARK_BOXMINUSCONNECTED :: Int-wxSTC_MARK_BOXMINUSCONNECTED = 15--wxSTC_MARK_LCORNERCURVE :: Int-wxSTC_MARK_LCORNERCURVE = 16--wxSTC_MARK_TCORNERCURVE :: Int-wxSTC_MARK_TCORNERCURVE = 17--wxSTC_MARK_CIRCLEPLUS :: Int-wxSTC_MARK_CIRCLEPLUS = 18--wxSTC_MARK_CIRCLEPLUSCONNECTED :: Int-wxSTC_MARK_CIRCLEPLUSCONNECTED = 19--wxSTC_MARK_CIRCLEMINUS :: Int-wxSTC_MARK_CIRCLEMINUS = 20--wxSTC_MARK_CIRCLEMINUSCONNECTED :: Int-wxSTC_MARK_CIRCLEMINUSCONNECTED = 21--wxSTC_MARK_BACKGROUND :: Int-wxSTC_MARK_BACKGROUND = 22--wxSTC_MARK_DOTDOTDOT :: Int-wxSTC_MARK_DOTDOTDOT = 23--wxSTC_MARK_ARROWS :: Int-wxSTC_MARK_ARROWS = 24--wxSTC_MARK_PIXMAP :: Int-wxSTC_MARK_PIXMAP = 25--wxSTC_MARK_CHARACTER :: Int-wxSTC_MARK_CHARACTER = 10000--wxSTC_MARKNUM_FOLDEREND :: Int-wxSTC_MARKNUM_FOLDEREND = 25--wxSTC_MARKNUM_FOLDEROPENMID :: Int-wxSTC_MARKNUM_FOLDEROPENMID = 26--wxSTC_MARKNUM_FOLDERMIDTAIL :: Int-wxSTC_MARKNUM_FOLDERMIDTAIL = 27--wxSTC_MARKNUM_FOLDERTAIL :: Int-wxSTC_MARKNUM_FOLDERTAIL = 28--wxSTC_MARKNUM_FOLDERSUB :: Int-wxSTC_MARKNUM_FOLDERSUB = 29--wxSTC_MARKNUM_FOLDER :: Int-wxSTC_MARKNUM_FOLDER = 30--wxSTC_MARKNUM_FOLDEROPEN :: Int-wxSTC_MARKNUM_FOLDEROPEN = 31--wxSTC_MASK_FOLDERS :: Int-wxSTC_MASK_FOLDERS = (-33554432)--wxSTC_MARGIN_SYMBOL :: Int-wxSTC_MARGIN_SYMBOL = 0--wxSTC_MARGIN_NUMBER :: Int-wxSTC_MARGIN_NUMBER = 1--wxSTC_STYLE_DEFAULT :: Int-wxSTC_STYLE_DEFAULT = 32--wxSTC_STYLE_LINENUMBER :: Int-wxSTC_STYLE_LINENUMBER = 33--wxSTC_STYLE_BRACELIGHT :: Int-wxSTC_STYLE_BRACELIGHT = 34--wxSTC_STYLE_BRACEBAD :: Int-wxSTC_STYLE_BRACEBAD = 35--wxSTC_STYLE_CONTROLCHAR :: Int-wxSTC_STYLE_CONTROLCHAR = 36--wxSTC_STYLE_INDENTGUIDE :: Int-wxSTC_STYLE_INDENTGUIDE = 37--wxSTC_STYLE_LASTPREDEFINED :: Int-wxSTC_STYLE_LASTPREDEFINED = 39--wxSTC_STYLE_MAX :: Int-wxSTC_STYLE_MAX = 127--wxSTC_CHARSET_ANSI :: Int-wxSTC_CHARSET_ANSI = 0--wxSTC_CHARSET_DEFAULT :: Int-wxSTC_CHARSET_DEFAULT = 1--wxSTC_CHARSET_BALTIC :: Int-wxSTC_CHARSET_BALTIC = 186--wxSTC_CHARSET_CHINESEBIG5 :: Int-wxSTC_CHARSET_CHINESEBIG5 = 136--wxSTC_CHARSET_EASTEUROPE :: Int-wxSTC_CHARSET_EASTEUROPE = 238--wxSTC_CHARSET_GB2312 :: Int-wxSTC_CHARSET_GB2312 = 134--wxSTC_CHARSET_GREEK :: Int-wxSTC_CHARSET_GREEK = 161--wxSTC_CHARSET_HANGUL :: Int-wxSTC_CHARSET_HANGUL = 129--wxSTC_CHARSET_MAC :: Int-wxSTC_CHARSET_MAC = 77--wxSTC_CHARSET_OEM :: Int-wxSTC_CHARSET_OEM = 255--wxSTC_CHARSET_RUSSIAN :: Int-wxSTC_CHARSET_RUSSIAN = 204--wxSTC_CHARSET_SHIFTJIS :: Int-wxSTC_CHARSET_SHIFTJIS = 128--wxSTC_CHARSET_SYMBOL :: Int-wxSTC_CHARSET_SYMBOL = 2--wxSTC_CHARSET_TURKISH :: Int-wxSTC_CHARSET_TURKISH = 162--wxSTC_CHARSET_JOHAB :: Int-wxSTC_CHARSET_JOHAB = 130--wxSTC_CHARSET_HEBREW :: Int-wxSTC_CHARSET_HEBREW = 177--wxSTC_CHARSET_ARABIC :: Int-wxSTC_CHARSET_ARABIC = 178--wxSTC_CHARSET_VIETNAMESE :: Int-wxSTC_CHARSET_VIETNAMESE = 163--wxSTC_CHARSET_THAI :: Int-wxSTC_CHARSET_THAI = 222--wxSTC_CASE_MIXED :: Int-wxSTC_CASE_MIXED = 0--wxSTC_CASE_UPPER :: Int-wxSTC_CASE_UPPER = 1--wxSTC_CASE_LOWER :: Int-wxSTC_CASE_LOWER = 2--wxSTC_INDIC_MAX :: Int-wxSTC_INDIC_MAX = 7--wxSTC_INDIC_PLAIN :: Int-wxSTC_INDIC_PLAIN = 0--wxSTC_INDIC_SQUIGGLE :: Int-wxSTC_INDIC_SQUIGGLE = 1--wxSTC_INDIC_TT :: Int-wxSTC_INDIC_TT = 2--wxSTC_INDIC_DIAGONAL :: Int-wxSTC_INDIC_DIAGONAL = 3--wxSTC_INDIC_STRIKE :: Int-wxSTC_INDIC_STRIKE = 4--wxSTC_INDIC_HIDDEN :: Int-wxSTC_INDIC_HIDDEN = 5--wxSTC_INDIC0_MASK :: Int-wxSTC_INDIC0_MASK = 32--wxSTC_INDIC1_MASK :: Int-wxSTC_INDIC1_MASK = 64--wxSTC_INDIC2_MASK :: Int-wxSTC_INDIC2_MASK = 128--wxSTC_INDICS_MASK :: Int-wxSTC_INDICS_MASK = 224--wxSTC_PRINT_NORMAL :: Int-wxSTC_PRINT_NORMAL = 0--wxSTC_PRINT_INVERTLIGHT :: Int-wxSTC_PRINT_INVERTLIGHT = 1--wxSTC_PRINT_BLACKONWHITE :: Int-wxSTC_PRINT_BLACKONWHITE = 2--wxSTC_PRINT_COLOURONWHITE :: Int-wxSTC_PRINT_COLOURONWHITE = 3--wxSTC_PRINT_COLOURONWHITEDEFAULTBG :: Int-wxSTC_PRINT_COLOURONWHITEDEFAULTBG = 4--wxSTC_FIND_WHOLEWORD :: Int-wxSTC_FIND_WHOLEWORD = 2--wxSTC_FIND_MATCHCASE :: Int-wxSTC_FIND_MATCHCASE = 4--wxSTC_FIND_WORDSTART :: Int-wxSTC_FIND_WORDSTART = 1048576--wxSTC_FIND_REGEXP :: Int-wxSTC_FIND_REGEXP = 2097152--wxSTC_FIND_POSIX :: Int-wxSTC_FIND_POSIX = 4194304--wxSTC_FOLDLEVELBASE :: Int-wxSTC_FOLDLEVELBASE = 1024--wxSTC_FOLDLEVELWHITEFLAG :: Int-wxSTC_FOLDLEVELWHITEFLAG = 4096--wxSTC_FOLDLEVELHEADERFLAG :: Int-wxSTC_FOLDLEVELHEADERFLAG = 8192--wxSTC_FOLDLEVELBOXHEADERFLAG :: Int-wxSTC_FOLDLEVELBOXHEADERFLAG = 16384--wxSTC_FOLDLEVELBOXFOOTERFLAG :: Int-wxSTC_FOLDLEVELBOXFOOTERFLAG = 32768--wxSTC_FOLDLEVELCONTRACTED :: Int-wxSTC_FOLDLEVELCONTRACTED = 65536--wxSTC_FOLDLEVELUNINDENT :: Int-wxSTC_FOLDLEVELUNINDENT = 131072--wxSTC_FOLDLEVELNUMBERMASK :: Int-wxSTC_FOLDLEVELNUMBERMASK = 4095--wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED :: Int-wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = 2--wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED :: Int-wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = 4--wxSTC_FOLDFLAG_LINEAFTER_EXPANDED :: Int-wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = 8--wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED :: Int-wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = 16--wxSTC_FOLDFLAG_LEVELNUMBERS :: Int-wxSTC_FOLDFLAG_LEVELNUMBERS = 64--wxSTC_FOLDFLAG_BOX :: Int-wxSTC_FOLDFLAG_BOX = 1--wxSTC_TIME_FOREVER :: Int-wxSTC_TIME_FOREVER = 10000000--wxSTC_WRAP_NONE :: Int-wxSTC_WRAP_NONE = 0--wxSTC_WRAP_WORD :: Int-wxSTC_WRAP_WORD = 1--wxSTC_CACHE_NONE :: Int-wxSTC_CACHE_NONE = 0--wxSTC_CACHE_CARET :: Int-wxSTC_CACHE_CARET = 1--wxSTC_CACHE_PAGE :: Int-wxSTC_CACHE_PAGE = 2--wxSTC_CACHE_DOCUMENT :: Int-wxSTC_CACHE_DOCUMENT = 3--wxSTC_EDGE_NONE :: Int-wxSTC_EDGE_NONE = 0--wxSTC_EDGE_LINE :: Int-wxSTC_EDGE_LINE = 1--wxSTC_EDGE_BACKGROUND :: Int-wxSTC_EDGE_BACKGROUND = 2--wxSTC_CURSORNORMAL :: Int-wxSTC_CURSORNORMAL = (-1)--wxSTC_CURSORWAIT :: Int-wxSTC_CURSORWAIT = 4--wxSTC_VISIBLE_SLOP :: Int-wxSTC_VISIBLE_SLOP = 1--wxSTC_VISIBLE_STRICT :: Int-wxSTC_VISIBLE_STRICT = 4--wxSTC_CARET_SLOP :: Int-wxSTC_CARET_SLOP = 1--wxSTC_CARET_STRICT :: Int-wxSTC_CARET_STRICT = 4--wxSTC_CARET_JUMPS :: Int-wxSTC_CARET_JUMPS = 16--wxSTC_CARET_EVEN :: Int-wxSTC_CARET_EVEN = 8--wxSTC_SEL_STREAM :: Int-wxSTC_SEL_STREAM = 0--wxSTC_SEL_RECTANGLE :: Int-wxSTC_SEL_RECTANGLE = 1--wxSTC_SEL_LINES :: Int-wxSTC_SEL_LINES = 2--wxSTC_KEYWORDSET_MAX :: Int-wxSTC_KEYWORDSET_MAX = 8--wxSTC_MOD_INSERTTEXT :: Int-wxSTC_MOD_INSERTTEXT = 1--wxSTC_MOD_DELETETEXT :: Int-wxSTC_MOD_DELETETEXT = 2--wxSTC_MOD_CHANGESTYLE :: Int-wxSTC_MOD_CHANGESTYLE = 4--wxSTC_MOD_CHANGEFOLD :: Int-wxSTC_MOD_CHANGEFOLD = 8--wxSTC_PERFORMED_USER :: Int-wxSTC_PERFORMED_USER = 16--wxSTC_PERFORMED_UNDO :: Int-wxSTC_PERFORMED_UNDO = 32--wxSTC_PERFORMED_REDO :: Int-wxSTC_PERFORMED_REDO = 64--wxSTC_LASTSTEPINUNDOREDO :: Int-wxSTC_LASTSTEPINUNDOREDO = 256--wxSTC_MOD_CHANGEMARKER :: Int-wxSTC_MOD_CHANGEMARKER = 512--wxSTC_MOD_BEFOREINSERT :: Int-wxSTC_MOD_BEFOREINSERT = 1024--wxSTC_MOD_BEFOREDELETE :: Int-wxSTC_MOD_BEFOREDELETE = 2048--wxSTC_MODEVENTMASKALL :: Int-wxSTC_MODEVENTMASKALL = 3959--wxSTC_KEY_DOWN :: Int-wxSTC_KEY_DOWN = 300--wxSTC_KEY_UP :: Int-wxSTC_KEY_UP = 301--wxSTC_KEY_LEFT :: Int-wxSTC_KEY_LEFT = 302--wxSTC_KEY_RIGHT :: Int-wxSTC_KEY_RIGHT = 303--wxSTC_KEY_HOME :: Int-wxSTC_KEY_HOME = 304--wxSTC_KEY_END :: Int-wxSTC_KEY_END = 305--wxSTC_KEY_PRIOR :: Int-wxSTC_KEY_PRIOR = 306--wxSTC_KEY_NEXT :: Int-wxSTC_KEY_NEXT = 307--wxSTC_KEY_DELETE :: Int-wxSTC_KEY_DELETE = 308--wxSTC_KEY_INSERT :: Int-wxSTC_KEY_INSERT = 309--wxSTC_KEY_ESCAPE :: Int-wxSTC_KEY_ESCAPE = 7--wxSTC_KEY_BACK :: Int-wxSTC_KEY_BACK = 8--wxSTC_KEY_TAB :: Int-wxSTC_KEY_TAB = 9--wxSTC_KEY_RETURN :: Int-wxSTC_KEY_RETURN = 13--wxSTC_KEY_ADD :: Int-wxSTC_KEY_ADD = 310--wxSTC_KEY_SUBTRACT :: Int-wxSTC_KEY_SUBTRACT = 311--wxSTC_KEY_DIVIDE :: Int-wxSTC_KEY_DIVIDE = 312--wxSTC_SCMOD_SHIFT :: Int-wxSTC_SCMOD_SHIFT = 1--wxSTC_SCMOD_CTRL :: Int-wxSTC_SCMOD_CTRL = 2--wxSTC_SCMOD_ALT :: Int-wxSTC_SCMOD_ALT = 4--wxSTC_LEX_CONTAINER :: Int-wxSTC_LEX_CONTAINER = 0--wxSTC_LEX_NULL :: Int-wxSTC_LEX_NULL = 1--wxSTC_LEX_PYTHON :: Int-wxSTC_LEX_PYTHON = 2--wxSTC_LEX_CPP :: Int-wxSTC_LEX_CPP = 3--wxSTC_LEX_HTML :: Int-wxSTC_LEX_HTML = 4--wxSTC_LEX_XML :: Int-wxSTC_LEX_XML = 5--wxSTC_LEX_PERL :: Int-wxSTC_LEX_PERL = 6--wxSTC_LEX_SQL :: Int-wxSTC_LEX_SQL = 7--wxSTC_LEX_VB :: Int-wxSTC_LEX_VB = 8--wxSTC_LEX_PROPERTIES :: Int-wxSTC_LEX_PROPERTIES = 9--wxSTC_LEX_ERRORLIST :: Int-wxSTC_LEX_ERRORLIST = 10--wxSTC_LEX_MAKEFILE :: Int-wxSTC_LEX_MAKEFILE = 11--wxSTC_LEX_BATCH :: Int-wxSTC_LEX_BATCH = 12--wxSTC_LEX_XCODE :: Int-wxSTC_LEX_XCODE = 13--wxSTC_LEX_LATEX :: Int-wxSTC_LEX_LATEX = 14--wxSTC_LEX_LUA :: Int-wxSTC_LEX_LUA = 15--wxSTC_LEX_DIFF :: Int-wxSTC_LEX_DIFF = 16--wxSTC_LEX_CONF :: Int-wxSTC_LEX_CONF = 17--wxSTC_LEX_PASCAL :: Int-wxSTC_LEX_PASCAL = 18--wxSTC_LEX_AVE :: Int-wxSTC_LEX_AVE = 19--wxSTC_LEX_ADA :: Int-wxSTC_LEX_ADA = 20--wxSTC_LEX_LISP :: Int-wxSTC_LEX_LISP = 21--wxSTC_LEX_RUBY :: Int-wxSTC_LEX_RUBY = 22--wxSTC_LEX_EIFFEL :: Int-wxSTC_LEX_EIFFEL = 23--wxSTC_LEX_EIFFELKW :: Int-wxSTC_LEX_EIFFELKW = 24--wxSTC_LEX_TCL :: Int-wxSTC_LEX_TCL = 25--wxSTC_LEX_NNCRONTAB :: Int-wxSTC_LEX_NNCRONTAB = 26--wxSTC_LEX_BULLANT :: Int-wxSTC_LEX_BULLANT = 27--wxSTC_LEX_VBSCRIPT :: Int-wxSTC_LEX_VBSCRIPT = 28--wxSTC_LEX_ASP :: Int-wxSTC_LEX_ASP = 29--wxSTC_LEX_PHP :: Int-wxSTC_LEX_PHP = 30--wxSTC_LEX_BAAN :: Int-wxSTC_LEX_BAAN = 31--wxSTC_LEX_MATLAB :: Int-wxSTC_LEX_MATLAB = 32--wxSTC_LEX_SCRIPTOL :: Int-wxSTC_LEX_SCRIPTOL = 33--wxSTC_LEX_ASM :: Int-wxSTC_LEX_ASM = 34--wxSTC_LEX_CPPNOCASE :: Int-wxSTC_LEX_CPPNOCASE = 35--wxSTC_LEX_FORTRAN :: Int-wxSTC_LEX_FORTRAN = 36--wxSTC_LEX_F77 :: Int-wxSTC_LEX_F77 = 37--wxSTC_LEX_CSS :: Int-wxSTC_LEX_CSS = 38--wxSTC_LEX_POV :: Int-wxSTC_LEX_POV = 39--wxSTC_LEX_LOUT :: Int-wxSTC_LEX_LOUT = 40--wxSTC_LEX_ESCRIPT :: Int-wxSTC_LEX_ESCRIPT = 41--wxSTC_LEX_PS :: Int-wxSTC_LEX_PS = 42--wxSTC_LEX_NSIS :: Int-wxSTC_LEX_NSIS = 43--wxSTC_LEX_MMIXAL :: Int-wxSTC_LEX_MMIXAL = 44--wxSTC_LEX_PHPSCRIPT :: Int-wxSTC_LEX_PHPSCRIPT = 69--wxSTC_LEX_TADS3 :: Int-wxSTC_LEX_TADS3 = 70--wxSTC_LEX_REBOL :: Int-wxSTC_LEX_REBOL = 71--wxSTC_LEX_SMALLTALK :: Int-wxSTC_LEX_SMALLTALK = 72--wxSTC_LEX_FLAGSHIP :: Int-wxSTC_LEX_FLAGSHIP = 73--wxSTC_LEX_CSOUND :: Int-wxSTC_LEX_CSOUND = 74--wxSTC_LEX_FREEBASIC :: Int-wxSTC_LEX_FREEBASIC = 75--wxSTC_LEX_AUTOMATIC :: Int-wxSTC_LEX_AUTOMATIC = 1000--wxSTC_LEX_HASKELL :: Int-wxSTC_LEX_HASKELL = 68--wxSTC_P_DEFAULT :: Int-wxSTC_P_DEFAULT = 0--wxSTC_P_COMMENTLINE :: Int-wxSTC_P_COMMENTLINE = 1--wxSTC_P_NUMBER :: Int-wxSTC_P_NUMBER = 2--wxSTC_P_STRING :: Int-wxSTC_P_STRING = 3--wxSTC_P_CHARACTER :: Int-wxSTC_P_CHARACTER = 4--wxSTC_P_WORD :: Int-wxSTC_P_WORD = 5--wxSTC_P_TRIPLE :: Int-wxSTC_P_TRIPLE = 6--wxSTC_P_TRIPLEDOUBLE :: Int-wxSTC_P_TRIPLEDOUBLE = 7--wxSTC_P_CLASSNAME :: Int-wxSTC_P_CLASSNAME = 8--wxSTC_P_DEFNAME :: Int-wxSTC_P_DEFNAME = 9--wxSTC_P_OPERATOR :: Int-wxSTC_P_OPERATOR = 10--wxSTC_P_IDENTIFIER :: Int-wxSTC_P_IDENTIFIER = 11--wxSTC_P_COMMENTBLOCK :: Int-wxSTC_P_COMMENTBLOCK = 12--wxSTC_P_STRINGEOL :: Int-wxSTC_P_STRINGEOL = 13--wxSTC_C_DEFAULT :: Int-wxSTC_C_DEFAULT = 0--wxSTC_C_COMMENT :: Int-wxSTC_C_COMMENT = 1--wxSTC_C_COMMENTLINE :: Int-wxSTC_C_COMMENTLINE = 2--wxSTC_C_COMMENTDOC :: Int-wxSTC_C_COMMENTDOC = 3--wxSTC_C_NUMBER :: Int-wxSTC_C_NUMBER = 4--wxSTC_C_WORD :: Int-wxSTC_C_WORD = 5--wxSTC_C_STRING :: Int-wxSTC_C_STRING = 6--wxSTC_C_CHARACTER :: Int-wxSTC_C_CHARACTER = 7--wxSTC_C_UUID :: Int-wxSTC_C_UUID = 8--wxSTC_C_PREPROCESSOR :: Int-wxSTC_C_PREPROCESSOR = 9--wxSTC_C_OPERATOR :: Int-wxSTC_C_OPERATOR = 10--wxSTC_C_IDENTIFIER :: Int-wxSTC_C_IDENTIFIER = 11--wxSTC_C_STRINGEOL :: Int-wxSTC_C_STRINGEOL = 12--wxSTC_C_VERBATIM :: Int-wxSTC_C_VERBATIM = 13--wxSTC_C_REGEX :: Int-wxSTC_C_REGEX = 14--wxSTC_C_COMMENTLINEDOC :: Int-wxSTC_C_COMMENTLINEDOC = 15--wxSTC_C_WORD2 :: Int-wxSTC_C_WORD2 = 16--wxSTC_C_COMMENTDOCKEYWORD :: Int-wxSTC_C_COMMENTDOCKEYWORD = 17--wxSTC_C_COMMENTDOCKEYWORDERROR :: Int-wxSTC_C_COMMENTDOCKEYWORDERROR = 18--wxSTC_C_GLOBALCLASS :: Int-wxSTC_C_GLOBALCLASS = 19--wxSTC_H_DEFAULT :: Int-wxSTC_H_DEFAULT = 0--wxSTC_H_TAG :: Int-wxSTC_H_TAG = 1--wxSTC_H_TAGUNKNOWN :: Int-wxSTC_H_TAGUNKNOWN = 2--wxSTC_H_ATTRIBUTE :: Int-wxSTC_H_ATTRIBUTE = 3--wxSTC_H_ATTRIBUTEUNKNOWN :: Int-wxSTC_H_ATTRIBUTEUNKNOWN = 4--wxSTC_H_NUMBER :: Int-wxSTC_H_NUMBER = 5--wxSTC_H_DOUBLESTRING :: Int-wxSTC_H_DOUBLESTRING = 6--wxSTC_H_SINGLESTRING :: Int-wxSTC_H_SINGLESTRING = 7--wxSTC_H_OTHER :: Int-wxSTC_H_OTHER = 8--wxSTC_H_COMMENT :: Int-wxSTC_H_COMMENT = 9--wxSTC_H_ENTITY :: Int-wxSTC_H_ENTITY = 10--wxSTC_H_TAGEND :: Int-wxSTC_H_TAGEND = 11--wxSTC_H_XMLSTART :: Int-wxSTC_H_XMLSTART = 12--wxSTC_H_XMLEND :: Int-wxSTC_H_XMLEND = 13--wxSTC_H_SCRIPT :: Int-wxSTC_H_SCRIPT = 14--wxSTC_H_ASP :: Int-wxSTC_H_ASP = 15--wxSTC_H_ASPAT :: Int-wxSTC_H_ASPAT = 16--wxSTC_H_CDATA :: Int-wxSTC_H_CDATA = 17--wxSTC_H_QUESTION :: Int-wxSTC_H_QUESTION = 18--wxSTC_H_VALUE :: Int-wxSTC_H_VALUE = 19--wxSTC_H_XCCOMMENT :: Int-wxSTC_H_XCCOMMENT = 20--wxSTC_H_SGML_DEFAULT :: Int-wxSTC_H_SGML_DEFAULT = 21--wxSTC_H_SGML_COMMAND :: Int-wxSTC_H_SGML_COMMAND = 22--wxSTC_H_SGML_1ST_PARAM :: Int-wxSTC_H_SGML_1ST_PARAM = 23--wxSTC_H_SGML_DOUBLESTRING :: Int-wxSTC_H_SGML_DOUBLESTRING = 24--wxSTC_H_SGML_SIMPLESTRING :: Int-wxSTC_H_SGML_SIMPLESTRING = 25--wxSTC_H_SGML_ERROR :: Int-wxSTC_H_SGML_ERROR = 26--wxSTC_H_SGML_SPECIAL :: Int-wxSTC_H_SGML_SPECIAL = 27--wxSTC_H_SGML_ENTITY :: Int-wxSTC_H_SGML_ENTITY = 28--wxSTC_H_SGML_COMMENT :: Int-wxSTC_H_SGML_COMMENT = 29--wxSTC_H_SGML_1ST_PARAM_COMMENT :: Int-wxSTC_H_SGML_1ST_PARAM_COMMENT = 30--wxSTC_H_SGML_BLOCK_DEFAULT :: Int-wxSTC_H_SGML_BLOCK_DEFAULT = 31--wxSTC_HA_DEFAULT :: Int-wxSTC_HA_DEFAULT = 0--wxSTC_HA_IDENTIFIER :: Int-wxSTC_HA_IDENTIFIER = 1--wxSTC_HA_KEYWORD :: Int-wxSTC_HA_KEYWORD = 2--wxSTC_HA_NUMBER :: Int-wxSTC_HA_NUMBER = 3--wxSTC_HA_STRING :: Int-wxSTC_HA_STRING = 4--wxSTC_HA_CHARACTER :: Int-wxSTC_HA_CHARACTER = 5--wxSTC_HA_CLASS :: Int-wxSTC_HA_CLASS = 6--wxSTC_HA_MODULE :: Int-wxSTC_HA_MODULE = 7--wxSTC_HA_CAPITAL :: Int-wxSTC_HA_CAPITAL = 8--wxSTC_HA_DATA :: Int-wxSTC_HA_DATA = 9--wxSTC_HA_IMPORT :: Int-wxSTC_HA_IMPORT = 10--wxSTC_HA_OPERATOR :: Int-wxSTC_HA_OPERATOR = 11--wxSTC_HA_INSTANCE :: Int-wxSTC_HA_INSTANCE = 12--wxSTC_HA_COMMENTLINE :: Int-wxSTC_HA_COMMENTLINE = 13--wxSTC_HA_COMMENTBLOCK :: Int-wxSTC_HA_COMMENTBLOCK = 14--wxSTC_HA_COMMENTBLOCK2 :: Int-wxSTC_HA_COMMENTBLOCK2 = 15--wxSTC_HA_COMMENTBLOCK3 :: Int-wxSTC_HA_COMMENTBLOCK3 = 16--wxSTC_HA_PREPROCESSOR :: Int-wxSTC_HA_PREPROCESSOR = 17--wxSTC_HJ_START :: Int-wxSTC_HJ_START = 40--wxSTC_HJ_DEFAULT :: Int-wxSTC_HJ_DEFAULT = 41--wxSTC_HJ_COMMENT :: Int-wxSTC_HJ_COMMENT = 42--wxSTC_HJ_COMMENTLINE :: Int-wxSTC_HJ_COMMENTLINE = 43--wxSTC_HJ_COMMENTDOC :: Int-wxSTC_HJ_COMMENTDOC = 44--wxSTC_HJ_NUMBER :: Int-wxSTC_HJ_NUMBER = 45--wxSTC_HJ_WORD :: Int-wxSTC_HJ_WORD = 46--wxSTC_HJ_KEYWORD :: Int-wxSTC_HJ_KEYWORD = 47--wxSTC_HJ_DOUBLESTRING :: Int-wxSTC_HJ_DOUBLESTRING = 48--wxSTC_HJ_SINGLESTRING :: Int-wxSTC_HJ_SINGLESTRING = 49--wxSTC_HJ_SYMBOLS :: Int-wxSTC_HJ_SYMBOLS = 50--wxSTC_HJ_STRINGEOL :: Int-wxSTC_HJ_STRINGEOL = 51--wxSTC_HJ_REGEX :: Int-wxSTC_HJ_REGEX = 52--wxSTC_HJA_START :: Int-wxSTC_HJA_START = 55--wxSTC_HJA_DEFAULT :: Int-wxSTC_HJA_DEFAULT = 56--wxSTC_HJA_COMMENT :: Int-wxSTC_HJA_COMMENT = 57--wxSTC_HJA_COMMENTLINE :: Int-wxSTC_HJA_COMMENTLINE = 58--wxSTC_HJA_COMMENTDOC :: Int-wxSTC_HJA_COMMENTDOC = 59--wxSTC_HJA_NUMBER :: Int-wxSTC_HJA_NUMBER = 60--wxSTC_HJA_WORD :: Int-wxSTC_HJA_WORD = 61--wxSTC_HJA_KEYWORD :: Int-wxSTC_HJA_KEYWORD = 62--wxSTC_HJA_DOUBLESTRING :: Int-wxSTC_HJA_DOUBLESTRING = 63--wxSTC_HJA_SINGLESTRING :: Int-wxSTC_HJA_SINGLESTRING = 64--wxSTC_HJA_SYMBOLS :: Int-wxSTC_HJA_SYMBOLS = 65--wxSTC_HJA_STRINGEOL :: Int-wxSTC_HJA_STRINGEOL = 66--wxSTC_HJA_REGEX :: Int-wxSTC_HJA_REGEX = 67--wxSTC_HB_START :: Int-wxSTC_HB_START = 70--wxSTC_HB_DEFAULT :: Int-wxSTC_HB_DEFAULT = 71--wxSTC_HB_COMMENTLINE :: Int-wxSTC_HB_COMMENTLINE = 72--wxSTC_HB_NUMBER :: Int-wxSTC_HB_NUMBER = 73--wxSTC_HB_WORD :: Int-wxSTC_HB_WORD = 74--wxSTC_HB_STRING :: Int-wxSTC_HB_STRING = 75--wxSTC_HB_IDENTIFIER :: Int-wxSTC_HB_IDENTIFIER = 76--wxSTC_HB_STRINGEOL :: Int-wxSTC_HB_STRINGEOL = 77--wxSTC_HBA_START :: Int-wxSTC_HBA_START = 80--wxSTC_HBA_DEFAULT :: Int-wxSTC_HBA_DEFAULT = 81--wxSTC_HBA_COMMENTLINE :: Int-wxSTC_HBA_COMMENTLINE = 82--wxSTC_HBA_NUMBER :: Int-wxSTC_HBA_NUMBER = 83--wxSTC_HBA_WORD :: Int-wxSTC_HBA_WORD = 84--wxSTC_HBA_STRING :: Int-wxSTC_HBA_STRING = 85--wxSTC_HBA_IDENTIFIER :: Int-wxSTC_HBA_IDENTIFIER = 86--wxSTC_HBA_STRINGEOL :: Int-wxSTC_HBA_STRINGEOL = 87--wxSTC_HP_START :: Int-wxSTC_HP_START = 90--wxSTC_HP_DEFAULT :: Int-wxSTC_HP_DEFAULT = 91--wxSTC_HP_COMMENTLINE :: Int-wxSTC_HP_COMMENTLINE = 92--wxSTC_HP_NUMBER :: Int-wxSTC_HP_NUMBER = 93--wxSTC_HP_STRING :: Int-wxSTC_HP_STRING = 94--wxSTC_HP_CHARACTER :: Int-wxSTC_HP_CHARACTER = 95--wxSTC_HP_WORD :: Int-wxSTC_HP_WORD = 96--wxSTC_HP_TRIPLE :: Int-wxSTC_HP_TRIPLE = 97--wxSTC_HP_TRIPLEDOUBLE :: Int-wxSTC_HP_TRIPLEDOUBLE = 98--wxSTC_HP_CLASSNAME :: Int-wxSTC_HP_CLASSNAME = 99--wxSTC_HP_DEFNAME :: Int-wxSTC_HP_DEFNAME = 100--wxSTC_HP_OPERATOR :: Int-wxSTC_HP_OPERATOR = 101--wxSTC_HP_IDENTIFIER :: Int-wxSTC_HP_IDENTIFIER = 102--wxSTC_HPA_START :: Int-wxSTC_HPA_START = 105--wxSTC_HPA_DEFAULT :: Int-wxSTC_HPA_DEFAULT = 106--wxSTC_HPA_COMMENTLINE :: Int-wxSTC_HPA_COMMENTLINE = 107--wxSTC_HPA_NUMBER :: Int-wxSTC_HPA_NUMBER = 108--wxSTC_HPA_STRING :: Int-wxSTC_HPA_STRING = 109--wxSTC_HPA_CHARACTER :: Int-wxSTC_HPA_CHARACTER = 110--wxSTC_HPA_WORD :: Int-wxSTC_HPA_WORD = 111--wxSTC_HPA_TRIPLE :: Int-wxSTC_HPA_TRIPLE = 112--wxSTC_HPA_TRIPLEDOUBLE :: Int-wxSTC_HPA_TRIPLEDOUBLE = 113--wxSTC_HPA_CLASSNAME :: Int-wxSTC_HPA_CLASSNAME = 114--wxSTC_HPA_DEFNAME :: Int-wxSTC_HPA_DEFNAME = 115--wxSTC_HPA_OPERATOR :: Int-wxSTC_HPA_OPERATOR = 116--wxSTC_HPA_IDENTIFIER :: Int-wxSTC_HPA_IDENTIFIER = 117--wxSTC_HPHP_DEFAULT :: Int-wxSTC_HPHP_DEFAULT = 118--wxSTC_HPHP_HSTRING :: Int-wxSTC_HPHP_HSTRING = 119--wxSTC_HPHP_SIMPLESTRING :: Int-wxSTC_HPHP_SIMPLESTRING = 120--wxSTC_HPHP_WORD :: Int-wxSTC_HPHP_WORD = 121--wxSTC_HPHP_NUMBER :: Int-wxSTC_HPHP_NUMBER = 122--wxSTC_HPHP_VARIABLE :: Int-wxSTC_HPHP_VARIABLE = 123--wxSTC_HPHP_COMMENT :: Int-wxSTC_HPHP_COMMENT = 124--wxSTC_HPHP_COMMENTLINE :: Int-wxSTC_HPHP_COMMENTLINE = 125--wxSTC_HPHP_HSTRING_VARIABLE :: Int-wxSTC_HPHP_HSTRING_VARIABLE = 126--wxSTC_HPHP_OPERATOR :: Int-wxSTC_HPHP_OPERATOR = 127--wxSTC_PL_DEFAULT :: Int-wxSTC_PL_DEFAULT = 0--wxSTC_PL_ERROR :: Int-wxSTC_PL_ERROR = 1--wxSTC_PL_COMMENTLINE :: Int-wxSTC_PL_COMMENTLINE = 2--wxSTC_PL_POD :: Int-wxSTC_PL_POD = 3--wxSTC_PL_NUMBER :: Int-wxSTC_PL_NUMBER = 4--wxSTC_PL_WORD :: Int-wxSTC_PL_WORD = 5--wxSTC_PL_STRING :: Int-wxSTC_PL_STRING = 6--wxSTC_PL_CHARACTER :: Int-wxSTC_PL_CHARACTER = 7--wxSTC_PL_PUNCTUATION :: Int-wxSTC_PL_PUNCTUATION = 8--wxSTC_PL_PREPROCESSOR :: Int-wxSTC_PL_PREPROCESSOR = 9--wxSTC_PL_OPERATOR :: Int-wxSTC_PL_OPERATOR = 10--wxSTC_PL_IDENTIFIER :: Int-wxSTC_PL_IDENTIFIER = 11--wxSTC_PL_SCALAR :: Int-wxSTC_PL_SCALAR = 12--wxSTC_PL_ARRAY :: Int-wxSTC_PL_ARRAY = 13--wxSTC_PL_HASH :: Int-wxSTC_PL_HASH = 14--wxSTC_PL_SYMBOLTABLE :: Int-wxSTC_PL_SYMBOLTABLE = 15--wxSTC_PL_REGEX :: Int-wxSTC_PL_REGEX = 17--wxSTC_PL_REGSUBST :: Int-wxSTC_PL_REGSUBST = 18--wxSTC_PL_LONGQUOTE :: Int-wxSTC_PL_LONGQUOTE = 19--wxSTC_PL_BACKTICKS :: Int-wxSTC_PL_BACKTICKS = 20--wxSTC_PL_DATASECTION :: Int-wxSTC_PL_DATASECTION = 21--wxSTC_PL_HERE_DELIM :: Int-wxSTC_PL_HERE_DELIM = 22--wxSTC_PL_HERE_Q :: Int-wxSTC_PL_HERE_Q = 23--wxSTC_PL_HERE_QQ :: Int-wxSTC_PL_HERE_QQ = 24--wxSTC_PL_HERE_QX :: Int-wxSTC_PL_HERE_QX = 25--wxSTC_PL_STRING_Q :: Int-wxSTC_PL_STRING_Q = 26--wxSTC_PL_STRING_QQ :: Int-wxSTC_PL_STRING_QQ = 27--wxSTC_PL_STRING_QX :: Int-wxSTC_PL_STRING_QX = 28--wxSTC_PL_STRING_QR :: Int-wxSTC_PL_STRING_QR = 29--wxSTC_PL_STRING_QW :: Int-wxSTC_PL_STRING_QW = 30--wxSTC_B_DEFAULT :: Int-wxSTC_B_DEFAULT = 0--wxSTC_B_COMMENT :: Int-wxSTC_B_COMMENT = 1--wxSTC_B_NUMBER :: Int-wxSTC_B_NUMBER = 2--wxSTC_B_KEYWORD :: Int-wxSTC_B_KEYWORD = 3--wxSTC_B_STRING :: Int-wxSTC_B_STRING = 4--wxSTC_B_PREPROCESSOR :: Int-wxSTC_B_PREPROCESSOR = 5--wxSTC_B_OPERATOR :: Int-wxSTC_B_OPERATOR = 6--wxSTC_B_IDENTIFIER :: Int-wxSTC_B_IDENTIFIER = 7--wxSTC_B_DATE :: Int-wxSTC_B_DATE = 8--wxSTC_PROPS_DEFAULT :: Int-wxSTC_PROPS_DEFAULT = 0--wxSTC_PROPS_COMMENT :: Int-wxSTC_PROPS_COMMENT = 1--wxSTC_PROPS_SECTION :: Int-wxSTC_PROPS_SECTION = 2--wxSTC_PROPS_ASSIGNMENT :: Int-wxSTC_PROPS_ASSIGNMENT = 3--wxSTC_PROPS_DEFVAL :: Int-wxSTC_PROPS_DEFVAL = 4--wxSTC_L_DEFAULT :: Int-wxSTC_L_DEFAULT = 0--wxSTC_L_COMMAND :: Int-wxSTC_L_COMMAND = 1--wxSTC_L_TAG :: Int-wxSTC_L_TAG = 2--wxSTC_L_MATH :: Int-wxSTC_L_MATH = 3--wxSTC_L_COMMENT :: Int-wxSTC_L_COMMENT = 4--wxSTC_LUA_DEFAULT :: Int-wxSTC_LUA_DEFAULT = 0--wxSTC_LUA_COMMENT :: Int-wxSTC_LUA_COMMENT = 1--wxSTC_LUA_COMMENTLINE :: Int-wxSTC_LUA_COMMENTLINE = 2--wxSTC_LUA_COMMENTDOC :: Int-wxSTC_LUA_COMMENTDOC = 3--wxSTC_LUA_NUMBER :: Int-wxSTC_LUA_NUMBER = 4--wxSTC_LUA_WORD :: Int-wxSTC_LUA_WORD = 5--wxSTC_LUA_STRING :: Int-wxSTC_LUA_STRING = 6--wxSTC_LUA_CHARACTER :: Int-wxSTC_LUA_CHARACTER = 7--wxSTC_LUA_LITERALSTRING :: Int-wxSTC_LUA_LITERALSTRING = 8--wxSTC_LUA_PREPROCESSOR :: Int-wxSTC_LUA_PREPROCESSOR = 9--wxSTC_LUA_OPERATOR :: Int-wxSTC_LUA_OPERATOR = 10--wxSTC_LUA_IDENTIFIER :: Int-wxSTC_LUA_IDENTIFIER = 11--wxSTC_LUA_STRINGEOL :: Int-wxSTC_LUA_STRINGEOL = 12--wxSTC_LUA_WORD2 :: Int-wxSTC_LUA_WORD2 = 13--wxSTC_LUA_WORD3 :: Int-wxSTC_LUA_WORD3 = 14--wxSTC_LUA_WORD4 :: Int-wxSTC_LUA_WORD4 = 15--wxSTC_LUA_WORD5 :: Int-wxSTC_LUA_WORD5 = 16--wxSTC_LUA_WORD6 :: Int-wxSTC_LUA_WORD6 = 17--wxSTC_LUA_WORD7 :: Int-wxSTC_LUA_WORD7 = 18--wxSTC_LUA_WORD8 :: Int-wxSTC_LUA_WORD8 = 19--wxSTC_ERR_DEFAULT :: Int-wxSTC_ERR_DEFAULT = 0--wxSTC_ERR_PYTHON :: Int-wxSTC_ERR_PYTHON = 1--wxSTC_ERR_GCC :: Int-wxSTC_ERR_GCC = 2--wxSTC_ERR_MS :: Int-wxSTC_ERR_MS = 3--wxSTC_ERR_CMD :: Int-wxSTC_ERR_CMD = 4--wxSTC_ERR_BORLAND :: Int-wxSTC_ERR_BORLAND = 5--wxSTC_ERR_PERL :: Int-wxSTC_ERR_PERL = 6--wxSTC_ERR_NET :: Int-wxSTC_ERR_NET = 7--wxSTC_ERR_LUA :: Int-wxSTC_ERR_LUA = 8--wxSTC_ERR_CTAG :: Int-wxSTC_ERR_CTAG = 9--wxSTC_ERR_DIFF_CHANGED :: Int-wxSTC_ERR_DIFF_CHANGED = 10--wxSTC_ERR_DIFF_ADDITION :: Int-wxSTC_ERR_DIFF_ADDITION = 11--wxSTC_ERR_DIFF_DELETION :: Int-wxSTC_ERR_DIFF_DELETION = 12--wxSTC_ERR_DIFF_MESSAGE :: Int-wxSTC_ERR_DIFF_MESSAGE = 13--wxSTC_ERR_PHP :: Int-wxSTC_ERR_PHP = 14--wxSTC_ERR_ELF :: Int-wxSTC_ERR_ELF = 15--wxSTC_ERR_IFC :: Int-wxSTC_ERR_IFC = 16--wxSTC_BAT_DEFAULT :: Int-wxSTC_BAT_DEFAULT = 0--wxSTC_BAT_COMMENT :: Int-wxSTC_BAT_COMMENT = 1--wxSTC_BAT_WORD :: Int-wxSTC_BAT_WORD = 2--wxSTC_BAT_LABEL :: Int-wxSTC_BAT_LABEL = 3--wxSTC_BAT_HIDE :: Int-wxSTC_BAT_HIDE = 4--wxSTC_BAT_COMMAND :: Int-wxSTC_BAT_COMMAND = 5--wxSTC_BAT_IDENTIFIER :: Int-wxSTC_BAT_IDENTIFIER = 6--wxSTC_BAT_OPERATOR :: Int-wxSTC_BAT_OPERATOR = 7--wxSTC_MAKE_DEFAULT :: Int-wxSTC_MAKE_DEFAULT = 0--wxSTC_MAKE_COMMENT :: Int-wxSTC_MAKE_COMMENT = 1--wxSTC_MAKE_PREPROCESSOR :: Int-wxSTC_MAKE_PREPROCESSOR = 2--wxSTC_MAKE_IDENTIFIER :: Int-wxSTC_MAKE_IDENTIFIER = 3--wxSTC_MAKE_OPERATOR :: Int-wxSTC_MAKE_OPERATOR = 4--wxSTC_MAKE_TARGET :: Int-wxSTC_MAKE_TARGET = 5--wxSTC_MAKE_IDEOL :: Int-wxSTC_MAKE_IDEOL = 9--wxSTC_DIFF_DEFAULT :: Int-wxSTC_DIFF_DEFAULT = 0--wxSTC_DIFF_COMMENT :: Int-wxSTC_DIFF_COMMENT = 1--wxSTC_DIFF_COMMAND :: Int-wxSTC_DIFF_COMMAND = 2--wxSTC_DIFF_HEADER :: Int-wxSTC_DIFF_HEADER = 3--wxSTC_DIFF_POSITION :: Int-wxSTC_DIFF_POSITION = 4--wxSTC_DIFF_DELETED :: Int-wxSTC_DIFF_DELETED = 5--wxSTC_DIFF_ADDED :: Int-wxSTC_DIFF_ADDED = 6--wxSTC_CONF_DEFAULT :: Int-wxSTC_CONF_DEFAULT = 0--wxSTC_CONF_COMMENT :: Int-wxSTC_CONF_COMMENT = 1--wxSTC_CONF_NUMBER :: Int-wxSTC_CONF_NUMBER = 2--wxSTC_CONF_IDENTIFIER :: Int-wxSTC_CONF_IDENTIFIER = 3--wxSTC_CONF_EXTENSION :: Int-wxSTC_CONF_EXTENSION = 4--wxSTC_CONF_PARAMETER :: Int-wxSTC_CONF_PARAMETER = 5--wxSTC_CONF_STRING :: Int-wxSTC_CONF_STRING = 6--wxSTC_CONF_OPERATOR :: Int-wxSTC_CONF_OPERATOR = 7--wxSTC_CONF_IP :: Int-wxSTC_CONF_IP = 8--wxSTC_CONF_DIRECTIVE :: Int-wxSTC_CONF_DIRECTIVE = 9--wxSTC_AVE_DEFAULT :: Int-wxSTC_AVE_DEFAULT = 0--wxSTC_AVE_COMMENT :: Int-wxSTC_AVE_COMMENT = 1--wxSTC_AVE_NUMBER :: Int-wxSTC_AVE_NUMBER = 2--wxSTC_AVE_WORD :: Int-wxSTC_AVE_WORD = 3--wxSTC_AVE_STRING :: Int-wxSTC_AVE_STRING = 6--wxSTC_AVE_ENUM :: Int-wxSTC_AVE_ENUM = 7--wxSTC_AVE_STRINGEOL :: Int-wxSTC_AVE_STRINGEOL = 8--wxSTC_AVE_IDENTIFIER :: Int-wxSTC_AVE_IDENTIFIER = 9--wxSTC_AVE_OPERATOR :: Int-wxSTC_AVE_OPERATOR = 10--wxSTC_AVE_WORD1 :: Int-wxSTC_AVE_WORD1 = 11--wxSTC_AVE_WORD2 :: Int-wxSTC_AVE_WORD2 = 12--wxSTC_AVE_WORD3 :: Int-wxSTC_AVE_WORD3 = 13--wxSTC_AVE_WORD4 :: Int-wxSTC_AVE_WORD4 = 14--wxSTC_AVE_WORD5 :: Int-wxSTC_AVE_WORD5 = 15--wxSTC_AVE_WORD6 :: Int-wxSTC_AVE_WORD6 = 16--wxSTC_ADA_DEFAULT :: Int-wxSTC_ADA_DEFAULT = 0--wxSTC_ADA_WORD :: Int-wxSTC_ADA_WORD = 1--wxSTC_ADA_IDENTIFIER :: Int-wxSTC_ADA_IDENTIFIER = 2--wxSTC_ADA_NUMBER :: Int-wxSTC_ADA_NUMBER = 3--wxSTC_ADA_DELIMITER :: Int-wxSTC_ADA_DELIMITER = 4--wxSTC_ADA_CHARACTER :: Int-wxSTC_ADA_CHARACTER = 5--wxSTC_ADA_CHARACTEREOL :: Int-wxSTC_ADA_CHARACTEREOL = 6--wxSTC_ADA_STRING :: Int-wxSTC_ADA_STRING = 7--wxSTC_ADA_STRINGEOL :: Int-wxSTC_ADA_STRINGEOL = 8--wxSTC_ADA_LABEL :: Int-wxSTC_ADA_LABEL = 9--wxSTC_ADA_COMMENTLINE :: Int-wxSTC_ADA_COMMENTLINE = 10--wxSTC_ADA_ILLEGAL :: Int-wxSTC_ADA_ILLEGAL = 11--wxSTC_BAAN_DEFAULT :: Int-wxSTC_BAAN_DEFAULT = 0--wxSTC_BAAN_COMMENT :: Int-wxSTC_BAAN_COMMENT = 1--wxSTC_BAAN_COMMENTDOC :: Int-wxSTC_BAAN_COMMENTDOC = 2--wxSTC_BAAN_NUMBER :: Int-wxSTC_BAAN_NUMBER = 3--wxSTC_BAAN_WORD :: Int-wxSTC_BAAN_WORD = 4--wxSTC_BAAN_STRING :: Int-wxSTC_BAAN_STRING = 5--wxSTC_BAAN_PREPROCESSOR :: Int-wxSTC_BAAN_PREPROCESSOR = 6--wxSTC_BAAN_OPERATOR :: Int-wxSTC_BAAN_OPERATOR = 7--wxSTC_BAAN_IDENTIFIER :: Int-wxSTC_BAAN_IDENTIFIER = 8--wxSTC_BAAN_STRINGEOL :: Int-wxSTC_BAAN_STRINGEOL = 9--wxSTC_BAAN_WORD2 :: Int-wxSTC_BAAN_WORD2 = 10--wxSTC_LISP_DEFAULT :: Int-wxSTC_LISP_DEFAULT = 0--wxSTC_LISP_COMMENT :: Int-wxSTC_LISP_COMMENT = 1--wxSTC_LISP_NUMBER :: Int-wxSTC_LISP_NUMBER = 2--wxSTC_LISP_KEYWORD :: Int-wxSTC_LISP_KEYWORD = 3--wxSTC_LISP_STRING :: Int-wxSTC_LISP_STRING = 6--wxSTC_LISP_STRINGEOL :: Int-wxSTC_LISP_STRINGEOL = 8--wxSTC_LISP_IDENTIFIER :: Int-wxSTC_LISP_IDENTIFIER = 9--wxSTC_LISP_OPERATOR :: Int-wxSTC_LISP_OPERATOR = 10--wxSTC_EIFFEL_DEFAULT :: Int-wxSTC_EIFFEL_DEFAULT = 0--wxSTC_EIFFEL_COMMENTLINE :: Int-wxSTC_EIFFEL_COMMENTLINE = 1--wxSTC_EIFFEL_NUMBER :: Int-wxSTC_EIFFEL_NUMBER = 2--wxSTC_EIFFEL_WORD :: Int-wxSTC_EIFFEL_WORD = 3--wxSTC_EIFFEL_STRING :: Int-wxSTC_EIFFEL_STRING = 4--wxSTC_EIFFEL_CHARACTER :: Int-wxSTC_EIFFEL_CHARACTER = 5--wxSTC_EIFFEL_OPERATOR :: Int-wxSTC_EIFFEL_OPERATOR = 6--wxSTC_EIFFEL_IDENTIFIER :: Int-wxSTC_EIFFEL_IDENTIFIER = 7--wxSTC_EIFFEL_STRINGEOL :: Int-wxSTC_EIFFEL_STRINGEOL = 8--wxSTC_NNCRONTAB_DEFAULT :: Int-wxSTC_NNCRONTAB_DEFAULT = 0--wxSTC_NNCRONTAB_COMMENT :: Int-wxSTC_NNCRONTAB_COMMENT = 1--wxSTC_NNCRONTAB_TASK :: Int-wxSTC_NNCRONTAB_TASK = 2--wxSTC_NNCRONTAB_SECTION :: Int-wxSTC_NNCRONTAB_SECTION = 3--wxSTC_NNCRONTAB_KEYWORD :: Int-wxSTC_NNCRONTAB_KEYWORD = 4--wxSTC_NNCRONTAB_MODIFIER :: Int-wxSTC_NNCRONTAB_MODIFIER = 5--wxSTC_NNCRONTAB_ASTERISK :: Int-wxSTC_NNCRONTAB_ASTERISK = 6--wxSTC_NNCRONTAB_NUMBER :: Int-wxSTC_NNCRONTAB_NUMBER = 7--wxSTC_NNCRONTAB_STRING :: Int-wxSTC_NNCRONTAB_STRING = 8--wxSTC_NNCRONTAB_ENVIRONMENT :: Int-wxSTC_NNCRONTAB_ENVIRONMENT = 9--wxSTC_NNCRONTAB_IDENTIFIER :: Int-wxSTC_NNCRONTAB_IDENTIFIER = 10--wxSTC_MATLAB_DEFAULT :: Int-wxSTC_MATLAB_DEFAULT = 0--wxSTC_MATLAB_COMMENT :: Int-wxSTC_MATLAB_COMMENT = 1--wxSTC_MATLAB_COMMAND :: Int-wxSTC_MATLAB_COMMAND = 2--wxSTC_MATLAB_NUMBER :: Int-wxSTC_MATLAB_NUMBER = 3--wxSTC_MATLAB_KEYWORD :: Int-wxSTC_MATLAB_KEYWORD = 4--wxSTC_MATLAB_STRING :: Int-wxSTC_MATLAB_STRING = 5--wxSTC_MATLAB_OPERATOR :: Int-wxSTC_MATLAB_OPERATOR = 6--wxSTC_MATLAB_IDENTIFIER :: Int-wxSTC_MATLAB_IDENTIFIER = 7--wxSTC_SCRIPTOL_DEFAULT :: Int-wxSTC_SCRIPTOL_DEFAULT = 0--wxSTC_SCRIPTOL_COMMENT :: Int-wxSTC_SCRIPTOL_COMMENT = 1--wxSTC_SCRIPTOL_COMMENTLINE :: Int-wxSTC_SCRIPTOL_COMMENTLINE = 2--wxSTC_SCRIPTOL_COMMENTDOC :: Int-wxSTC_SCRIPTOL_COMMENTDOC = 3--wxSTC_SCRIPTOL_NUMBER :: Int-wxSTC_SCRIPTOL_NUMBER = 4--wxSTC_SCRIPTOL_WORD :: Int-wxSTC_SCRIPTOL_WORD = 5--wxSTC_SCRIPTOL_STRING :: Int-wxSTC_SCRIPTOL_STRING = 6--wxSTC_SCRIPTOL_CHARACTER :: Int-wxSTC_SCRIPTOL_CHARACTER = 7--wxSTC_SCRIPTOL_UUID :: Int-wxSTC_SCRIPTOL_UUID = 8--wxSTC_SCRIPTOL_PREPROCESSOR :: Int-wxSTC_SCRIPTOL_PREPROCESSOR = 9--wxSTC_SCRIPTOL_OPERATOR :: Int-wxSTC_SCRIPTOL_OPERATOR = 10--wxSTC_SCRIPTOL_IDENTIFIER :: Int-wxSTC_SCRIPTOL_IDENTIFIER = 11--wxSTC_SCRIPTOL_STRINGEOL :: Int-wxSTC_SCRIPTOL_STRINGEOL = 12--wxSTC_SCRIPTOL_VERBATIM :: Int-wxSTC_SCRIPTOL_VERBATIM = 13--wxSTC_SCRIPTOL_REGEX :: Int-wxSTC_SCRIPTOL_REGEX = 14--wxSTC_SCRIPTOL_COMMENTLINEDOC :: Int-wxSTC_SCRIPTOL_COMMENTLINEDOC = 15--wxSTC_SCRIPTOL_WORD2 :: Int-wxSTC_SCRIPTOL_WORD2 = 16--wxSTC_SCRIPTOL_COMMENTDOCKEYWORD :: Int-wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = 17--wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR :: Int-wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = 18--wxSTC_SCRIPTOL_COMMENTBASIC :: Int-wxSTC_SCRIPTOL_COMMENTBASIC = 19--wxSTC_ASM_DEFAULT :: Int-wxSTC_ASM_DEFAULT = 0--wxSTC_ASM_COMMENT :: Int-wxSTC_ASM_COMMENT = 1--wxSTC_ASM_NUMBER :: Int-wxSTC_ASM_NUMBER = 2--wxSTC_ASM_STRING :: Int-wxSTC_ASM_STRING = 3--wxSTC_ASM_OPERATOR :: Int-wxSTC_ASM_OPERATOR = 4--wxSTC_ASM_IDENTIFIER :: Int-wxSTC_ASM_IDENTIFIER = 5--wxSTC_ASM_CPUINSTRUCTION :: Int-wxSTC_ASM_CPUINSTRUCTION = 6--wxSTC_ASM_MATHINSTRUCTION :: Int-wxSTC_ASM_MATHINSTRUCTION = 7--wxSTC_ASM_REGISTER :: Int-wxSTC_ASM_REGISTER = 8--wxSTC_ASM_DIRECTIVE :: Int-wxSTC_ASM_DIRECTIVE = 9--wxSTC_ASM_DIRECTIVEOPERAND :: Int-wxSTC_ASM_DIRECTIVEOPERAND = 10--wxSTC_F_DEFAULT :: Int-wxSTC_F_DEFAULT = 0--wxSTC_F_COMMENT :: Int-wxSTC_F_COMMENT = 1--wxSTC_F_NUMBER :: Int-wxSTC_F_NUMBER = 2--wxSTC_F_STRING1 :: Int-wxSTC_F_STRING1 = 3--wxSTC_F_STRING2 :: Int-wxSTC_F_STRING2 = 4--wxSTC_F_STRINGEOL :: Int-wxSTC_F_STRINGEOL = 5--wxSTC_F_OPERATOR :: Int-wxSTC_F_OPERATOR = 6--wxSTC_F_IDENTIFIER :: Int-wxSTC_F_IDENTIFIER = 7--wxSTC_F_WORD :: Int-wxSTC_F_WORD = 8--wxSTC_F_WORD2 :: Int-wxSTC_F_WORD2 = 9--wxSTC_F_WORD3 :: Int-wxSTC_F_WORD3 = 10--wxSTC_F_PREPROCESSOR :: Int-wxSTC_F_PREPROCESSOR = 11--wxSTC_F_OPERATOR2 :: Int-wxSTC_F_OPERATOR2 = 12--wxSTC_F_LABEL :: Int-wxSTC_F_LABEL = 13--wxSTC_F_CONTINUATION :: Int-wxSTC_F_CONTINUATION = 14--wxSTC_CSS_DEFAULT :: Int-wxSTC_CSS_DEFAULT = 0--wxSTC_CSS_TAG :: Int-wxSTC_CSS_TAG = 1--wxSTC_CSS_CLASS :: Int-wxSTC_CSS_CLASS = 2--wxSTC_CSS_PSEUDOCLASS :: Int-wxSTC_CSS_PSEUDOCLASS = 3--wxSTC_CSS_UNKNOWN_PSEUDOCLASS :: Int-wxSTC_CSS_UNKNOWN_PSEUDOCLASS = 4--wxSTC_CSS_OPERATOR :: Int-wxSTC_CSS_OPERATOR = 5--wxSTC_CSS_IDENTIFIER :: Int-wxSTC_CSS_IDENTIFIER = 6--wxSTC_CSS_UNKNOWN_IDENTIFIER :: Int-wxSTC_CSS_UNKNOWN_IDENTIFIER = 7--wxSTC_CSS_VALUE :: Int-wxSTC_CSS_VALUE = 8--wxSTC_CSS_COMMENT :: Int-wxSTC_CSS_COMMENT = 9--wxSTC_CSS_ID :: Int-wxSTC_CSS_ID = 10--wxSTC_CSS_IMPORTANT :: Int-wxSTC_CSS_IMPORTANT = 11--wxSTC_CSS_DIRECTIVE :: Int-wxSTC_CSS_DIRECTIVE = 12--wxSTC_CSS_DOUBLESTRING :: Int-wxSTC_CSS_DOUBLESTRING = 13--wxSTC_CSS_SINGLESTRING :: Int-wxSTC_CSS_SINGLESTRING = 14--wxSTC_POV_DEFAULT :: Int-wxSTC_POV_DEFAULT = 0--wxSTC_POV_COMMENT :: Int-wxSTC_POV_COMMENT = 1--wxSTC_POV_COMMENTLINE :: Int-wxSTC_POV_COMMENTLINE = 2--wxSTC_POV_NUMBER :: Int-wxSTC_POV_NUMBER = 3--wxSTC_POV_OPERATOR :: Int-wxSTC_POV_OPERATOR = 4--wxSTC_POV_IDENTIFIER :: Int-wxSTC_POV_IDENTIFIER = 5--wxSTC_POV_STRING :: Int-wxSTC_POV_STRING = 6--wxSTC_POV_STRINGEOL :: Int-wxSTC_POV_STRINGEOL = 7--wxSTC_POV_DIRECTIVE :: Int-wxSTC_POV_DIRECTIVE = 8--wxSTC_POV_BADDIRECTIVE :: Int-wxSTC_POV_BADDIRECTIVE = 9--wxSTC_POV_WORD2 :: Int-wxSTC_POV_WORD2 = 10--wxSTC_POV_WORD3 :: Int-wxSTC_POV_WORD3 = 11--wxSTC_POV_WORD4 :: Int-wxSTC_POV_WORD4 = 12--wxSTC_POV_WORD5 :: Int-wxSTC_POV_WORD5 = 13--wxSTC_POV_WORD6 :: Int-wxSTC_POV_WORD6 = 14--wxSTC_POV_WORD7 :: Int-wxSTC_POV_WORD7 = 15--wxSTC_POV_WORD8 :: Int-wxSTC_POV_WORD8 = 16--wxSTC_LOUT_DEFAULT :: Int-wxSTC_LOUT_DEFAULT = 0--wxSTC_LOUT_COMMENT :: Int-wxSTC_LOUT_COMMENT = 1--wxSTC_LOUT_NUMBER :: Int-wxSTC_LOUT_NUMBER = 2--wxSTC_LOUT_WORD :: Int-wxSTC_LOUT_WORD = 3--wxSTC_LOUT_WORD2 :: Int-wxSTC_LOUT_WORD2 = 4--wxSTC_LOUT_WORD3 :: Int-wxSTC_LOUT_WORD3 = 5--wxSTC_LOUT_WORD4 :: Int-wxSTC_LOUT_WORD4 = 6--wxSTC_LOUT_STRING :: Int-wxSTC_LOUT_STRING = 7--wxSTC_LOUT_OPERATOR :: Int-wxSTC_LOUT_OPERATOR = 8--wxSTC_LOUT_IDENTIFIER :: Int-wxSTC_LOUT_IDENTIFIER = 9--wxSTC_LOUT_STRINGEOL :: Int-wxSTC_LOUT_STRINGEOL = 10--wxSTC_ESCRIPT_DEFAULT :: Int-wxSTC_ESCRIPT_DEFAULT = 0--wxSTC_ESCRIPT_COMMENT :: Int-wxSTC_ESCRIPT_COMMENT = 1--wxSTC_ESCRIPT_COMMENTLINE :: Int-wxSTC_ESCRIPT_COMMENTLINE = 2--wxSTC_ESCRIPT_COMMENTDOC :: Int-wxSTC_ESCRIPT_COMMENTDOC = 3--wxSTC_ESCRIPT_NUMBER :: Int-wxSTC_ESCRIPT_NUMBER = 4--wxSTC_ESCRIPT_WORD :: Int-wxSTC_ESCRIPT_WORD = 5--wxSTC_ESCRIPT_STRING :: Int-wxSTC_ESCRIPT_STRING = 6--wxSTC_ESCRIPT_OPERATOR :: Int-wxSTC_ESCRIPT_OPERATOR = 7--wxSTC_ESCRIPT_IDENTIFIER :: Int-wxSTC_ESCRIPT_IDENTIFIER = 8--wxSTC_ESCRIPT_BRACE :: Int-wxSTC_ESCRIPT_BRACE = 9--wxSTC_ESCRIPT_WORD2 :: Int-wxSTC_ESCRIPT_WORD2 = 10--wxSTC_ESCRIPT_WORD3 :: Int-wxSTC_ESCRIPT_WORD3 = 11--wxSTC_PS_DEFAULT :: Int-wxSTC_PS_DEFAULT = 0--wxSTC_PS_COMMENT :: Int-wxSTC_PS_COMMENT = 1--wxSTC_PS_DSC_COMMENT :: Int-wxSTC_PS_DSC_COMMENT = 2--wxSTC_PS_DSC_VALUE :: Int-wxSTC_PS_DSC_VALUE = 3--wxSTC_PS_NUMBER :: Int-wxSTC_PS_NUMBER = 4--wxSTC_PS_NAME :: Int-wxSTC_PS_NAME = 5--wxSTC_PS_KEYWORD :: Int-wxSTC_PS_KEYWORD = 6--wxSTC_PS_LITERAL :: Int-wxSTC_PS_LITERAL = 7--wxSTC_PS_IMMEVAL :: Int-wxSTC_PS_IMMEVAL = 8--wxSTC_PS_PAREN_ARRAY :: Int-wxSTC_PS_PAREN_ARRAY = 9--wxSTC_PS_PAREN_DICT :: Int-wxSTC_PS_PAREN_DICT = 10--wxSTC_PS_PAREN_PROC :: Int-wxSTC_PS_PAREN_PROC = 11--wxSTC_PS_TEXT :: Int-wxSTC_PS_TEXT = 12--wxSTC_PS_HEXSTRING :: Int-wxSTC_PS_HEXSTRING = 13--wxSTC_PS_BASE85STRING :: Int-wxSTC_PS_BASE85STRING = 14--wxSTC_PS_BADSTRINGCHAR :: Int-wxSTC_PS_BADSTRINGCHAR = 15--wxSTC_NSIS_DEFAULT :: Int-wxSTC_NSIS_DEFAULT = 0--wxSTC_NSIS_COMMENT :: Int-wxSTC_NSIS_COMMENT = 1--wxSTC_NSIS_STRINGDQ :: Int-wxSTC_NSIS_STRINGDQ = 2--wxSTC_NSIS_STRINGLQ :: Int-wxSTC_NSIS_STRINGLQ = 3--wxSTC_NSIS_STRINGRQ :: Int-wxSTC_NSIS_STRINGRQ = 4--wxSTC_NSIS_FUNCTION :: Int-wxSTC_NSIS_FUNCTION = 5--wxSTC_NSIS_VARIABLE :: Int-wxSTC_NSIS_VARIABLE = 6--wxSTC_NSIS_LABEL :: Int-wxSTC_NSIS_LABEL = 7--wxSTC_NSIS_USERDEFINED :: Int-wxSTC_NSIS_USERDEFINED = 8--wxSTC_NSIS_SECTIONDEF :: Int-wxSTC_NSIS_SECTIONDEF = 9--wxSTC_NSIS_SUBSECTIONDEF :: Int-wxSTC_NSIS_SUBSECTIONDEF = 10--wxSTC_NSIS_IFDEFINEDEF :: Int-wxSTC_NSIS_IFDEFINEDEF = 11--wxSTC_NSIS_MACRODEF :: Int-wxSTC_NSIS_MACRODEF = 12--wxSTC_NSIS_STRINGVAR :: Int-wxSTC_NSIS_STRINGVAR = 13--wxSTC_MMIXAL_LEADWS :: Int-wxSTC_MMIXAL_LEADWS = 0--wxSTC_MMIXAL_COMMENT :: Int-wxSTC_MMIXAL_COMMENT = 1--wxSTC_MMIXAL_LABEL :: Int-wxSTC_MMIXAL_LABEL = 2--wxSTC_MMIXAL_OPCODE :: Int-wxSTC_MMIXAL_OPCODE = 3--wxSTC_MMIXAL_OPCODE_PRE :: Int-wxSTC_MMIXAL_OPCODE_PRE = 4--wxSTC_MMIXAL_OPCODE_VALID :: Int-wxSTC_MMIXAL_OPCODE_VALID = 5--wxSTC_MMIXAL_OPCODE_UNKNOWN :: Int-wxSTC_MMIXAL_OPCODE_UNKNOWN = 6--wxSTC_MMIXAL_OPCODE_POST :: Int-wxSTC_MMIXAL_OPCODE_POST = 7--wxSTC_MMIXAL_OPERANDS :: Int-wxSTC_MMIXAL_OPERANDS = 8--wxSTC_MMIXAL_NUMBER :: Int-wxSTC_MMIXAL_NUMBER = 9--wxSTC_MMIXAL_REF :: Int-wxSTC_MMIXAL_REF = 10--wxSTC_MMIXAL_CHAR :: Int-wxSTC_MMIXAL_CHAR = 11--wxSTC_MMIXAL_STRING :: Int-wxSTC_MMIXAL_STRING = 12--wxSTC_MMIXAL_REGISTER :: Int-wxSTC_MMIXAL_REGISTER = 13--wxSTC_MMIXAL_HEX :: Int-wxSTC_MMIXAL_HEX = 14--wxSTC_MMIXAL_OPERATOR :: Int-wxSTC_MMIXAL_OPERATOR = 15--wxSTC_MMIXAL_SYMBOL :: Int-wxSTC_MMIXAL_SYMBOL = 16--wxSTC_MMIXAL_INCLUDE :: Int-wxSTC_MMIXAL_INCLUDE = 17--wxSTC_CLW_DEFAULT :: Int-wxSTC_CLW_DEFAULT = 0--wxSTC_CLW_LABEL :: Int-wxSTC_CLW_LABEL = 1--wxSTC_CLW_COMMENT :: Int-wxSTC_CLW_COMMENT = 2--wxSTC_CLW_STRING :: Int-wxSTC_CLW_STRING = 3--wxSTC_CLW_USER_IDENTIFIER :: Int-wxSTC_CLW_USER_IDENTIFIER = 4--wxSTC_CLW_INTEGER_CONSTANT :: Int-wxSTC_CLW_INTEGER_CONSTANT = 5--wxSTC_CLW_REAL_CONSTANT :: Int-wxSTC_CLW_REAL_CONSTANT = 6--wxSTC_CLW_PICTURE_STRING :: Int-wxSTC_CLW_PICTURE_STRING = 7--wxSTC_CLW_KEYWORD :: Int-wxSTC_CLW_KEYWORD = 8--wxSTC_CLW_COMPILER_DIRECTIVE :: Int-wxSTC_CLW_COMPILER_DIRECTIVE = 9--wxSTC_CLW_RUNTIME_EXPRESSIONS :: Int-wxSTC_CLW_RUNTIME_EXPRESSIONS = 10--wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION :: Int-wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION = 11--wxSTC_CLW_STRUCTURE_DATA_TYPE :: Int-wxSTC_CLW_STRUCTURE_DATA_TYPE = 12--wxSTC_CLW_ATTRIBUTE :: Int-wxSTC_CLW_ATTRIBUTE = 13--wxSTC_CLW_STANDARD_EQUATE :: Int-wxSTC_CLW_STANDARD_EQUATE = 14--wxSTC_CLW_ERROR :: Int-wxSTC_CLW_ERROR = 15--wxSTC_CLW_DEPRECATED :: Int-wxSTC_CLW_DEPRECATED = 16--wxSTC_LOT_DEFAULT :: Int-wxSTC_LOT_DEFAULT = 0--wxSTC_LOT_HEADER :: Int-wxSTC_LOT_HEADER = 1--wxSTC_LOT_BREAK :: Int-wxSTC_LOT_BREAK = 2--wxSTC_LOT_SET :: Int-wxSTC_LOT_SET = 3--wxSTC_LOT_PASS :: Int-wxSTC_LOT_PASS = 4--wxSTC_LOT_FAIL :: Int-wxSTC_LOT_FAIL = 5--wxSTC_LOT_ABORT :: Int-wxSTC_LOT_ABORT = 6--wxSTC_YAML_DEFAULT :: Int-wxSTC_YAML_DEFAULT = 0--wxSTC_YAML_COMMENT :: Int-wxSTC_YAML_COMMENT = 1--wxSTC_YAML_IDENTIFIER :: Int-wxSTC_YAML_IDENTIFIER = 2--wxSTC_YAML_KEYWORD :: Int-wxSTC_YAML_KEYWORD = 3--wxSTC_YAML_NUMBER :: Int-wxSTC_YAML_NUMBER = 4--wxSTC_YAML_REFERENCE :: Int-wxSTC_YAML_REFERENCE = 5--wxSTC_YAML_DOCUMENT :: Int-wxSTC_YAML_DOCUMENT = 6--wxSTC_YAML_TEXT :: Int-wxSTC_YAML_TEXT = 7--wxSTC_YAML_ERROR :: Int-wxSTC_YAML_ERROR = 8--wxSTC_TEX_DEFAULT :: Int-wxSTC_TEX_DEFAULT = 0--wxSTC_TEX_SPECIAL :: Int-wxSTC_TEX_SPECIAL = 1--wxSTC_TEX_GROUP :: Int-wxSTC_TEX_GROUP = 2--wxSTC_TEX_SYMBOL :: Int-wxSTC_TEX_SYMBOL = 3--wxSTC_TEX_COMMAND :: Int-wxSTC_TEX_COMMAND = 4--wxSTC_TEX_TEXT :: Int-wxSTC_TEX_TEXT = 5--wxSTC_METAPOST_DEFAULT :: Int-wxSTC_METAPOST_DEFAULT = 0--wxSTC_METAPOST_SPECIAL :: Int-wxSTC_METAPOST_SPECIAL = 1--wxSTC_METAPOST_GROUP :: Int-wxSTC_METAPOST_GROUP = 2--wxSTC_METAPOST_SYMBOL :: Int-wxSTC_METAPOST_SYMBOL = 3--wxSTC_METAPOST_COMMAND :: Int-wxSTC_METAPOST_COMMAND = 4--wxSTC_METAPOST_TEXT :: Int-wxSTC_METAPOST_TEXT = 5--wxSTC_METAPOST_EXTRA :: Int-wxSTC_METAPOST_EXTRA = 6--wxSTC_ERLANG_DEFAULT :: Int-wxSTC_ERLANG_DEFAULT = 0--wxSTC_ERLANG_COMMENT :: Int-wxSTC_ERLANG_COMMENT = 1--wxSTC_ERLANG_VARIABLE :: Int-wxSTC_ERLANG_VARIABLE = 2--wxSTC_ERLANG_NUMBER :: Int-wxSTC_ERLANG_NUMBER = 3--wxSTC_ERLANG_KEYWORD :: Int-wxSTC_ERLANG_KEYWORD = 4--wxSTC_ERLANG_STRING :: Int-wxSTC_ERLANG_STRING = 5--wxSTC_ERLANG_OPERATOR :: Int-wxSTC_ERLANG_OPERATOR = 6--wxSTC_ERLANG_ATOM :: Int-wxSTC_ERLANG_ATOM = 7--wxSTC_ERLANG_FUNCTION_NAME :: Int-wxSTC_ERLANG_FUNCTION_NAME = 8--wxSTC_ERLANG_CHARACTER :: Int-wxSTC_ERLANG_CHARACTER = 9--wxSTC_ERLANG_MACRO :: Int-wxSTC_ERLANG_MACRO = 10--wxSTC_ERLANG_RECORD :: Int-wxSTC_ERLANG_RECORD = 11--wxSTC_ERLANG_SEPARATOR :: Int-wxSTC_ERLANG_SEPARATOR = 12--wxSTC_ERLANG_NODE_NAME :: Int-wxSTC_ERLANG_NODE_NAME = 13--wxSTC_ERLANG_UNKNOWN :: Int-wxSTC_ERLANG_UNKNOWN = 31--wxSTC_MSSQL_DEFAULT :: Int-wxSTC_MSSQL_DEFAULT = 0--wxSTC_MSSQL_COMMENT :: Int-wxSTC_MSSQL_COMMENT = 1--wxSTC_MSSQL_LINE_COMMENT :: Int-wxSTC_MSSQL_LINE_COMMENT = 2--wxSTC_MSSQL_NUMBER :: Int-wxSTC_MSSQL_NUMBER = 3--wxSTC_MSSQL_STRING :: Int-wxSTC_MSSQL_STRING = 4--wxSTC_MSSQL_OPERATOR :: Int-wxSTC_MSSQL_OPERATOR = 5--wxSTC_MSSQL_IDENTIFIER :: Int-wxSTC_MSSQL_IDENTIFIER = 6--wxSTC_MSSQL_VARIABLE :: Int-wxSTC_MSSQL_VARIABLE = 7--wxSTC_MSSQL_COLUMN_NAME :: Int-wxSTC_MSSQL_COLUMN_NAME = 8--wxSTC_MSSQL_STATEMENT :: Int-wxSTC_MSSQL_STATEMENT = 9--wxSTC_MSSQL_DATATYPE :: Int-wxSTC_MSSQL_DATATYPE = 10--wxSTC_MSSQL_SYSTABLE :: Int-wxSTC_MSSQL_SYSTABLE = 11--wxSTC_MSSQL_GLOBAL_VARIABLE :: Int-wxSTC_MSSQL_GLOBAL_VARIABLE = 12--wxSTC_MSSQL_FUNCTION :: Int-wxSTC_MSSQL_FUNCTION = 13--wxSTC_MSSQL_STORED_PROCEDURE :: Int-wxSTC_MSSQL_STORED_PROCEDURE = 14--wxSTC_MSSQL_DEFAULT_PREF_DATATYPE :: Int-wxSTC_MSSQL_DEFAULT_PREF_DATATYPE = 15--wxSTC_MSSQL_COLUMN_NAME_2 :: Int-wxSTC_MSSQL_COLUMN_NAME_2 = 16--wxSTC_V_DEFAULT :: Int-wxSTC_V_DEFAULT = 0--wxSTC_V_COMMENT :: Int-wxSTC_V_COMMENT = 1--wxSTC_V_COMMENTLINE :: Int-wxSTC_V_COMMENTLINE = 2--wxSTC_V_COMMENTLINEBANG :: Int-wxSTC_V_COMMENTLINEBANG = 3--wxSTC_V_NUMBER :: Int-wxSTC_V_NUMBER = 4--wxSTC_V_WORD :: Int-wxSTC_V_WORD = 5--wxSTC_V_STRING :: Int-wxSTC_V_STRING = 6--wxSTC_V_WORD2 :: Int-wxSTC_V_WORD2 = 7--wxSTC_V_WORD3 :: Int-wxSTC_V_WORD3 = 8--wxSTC_V_PREPROCESSOR :: Int-wxSTC_V_PREPROCESSOR = 9--wxSTC_V_OPERATOR :: Int-wxSTC_V_OPERATOR = 10--wxSTC_V_IDENTIFIER :: Int-wxSTC_V_IDENTIFIER = 11--wxSTC_V_STRINGEOL :: Int-wxSTC_V_STRINGEOL = 12--wxSTC_V_USER :: Int-wxSTC_V_USER = 19--wxSTC_KIX_DEFAULT :: Int-wxSTC_KIX_DEFAULT = 0--wxSTC_KIX_COMMENT :: Int-wxSTC_KIX_COMMENT = 1--wxSTC_KIX_STRING1 :: Int-wxSTC_KIX_STRING1 = 2--wxSTC_KIX_STRING2 :: Int-wxSTC_KIX_STRING2 = 3--wxSTC_KIX_NUMBER :: Int-wxSTC_KIX_NUMBER = 4--wxSTC_KIX_VAR :: Int-wxSTC_KIX_VAR = 5--wxSTC_KIX_MACRO :: Int-wxSTC_KIX_MACRO = 6--wxSTC_KIX_KEYWORD :: Int-wxSTC_KIX_KEYWORD = 7--wxSTC_KIX_FUNCTIONS :: Int-wxSTC_KIX_FUNCTIONS = 8--wxSTC_KIX_OPERATOR :: Int-wxSTC_KIX_OPERATOR = 9--wxSTC_KIX_IDENTIFIER :: Int-wxSTC_KIX_IDENTIFIER = 31--wxSTC_GC_DEFAULT :: Int-wxSTC_GC_DEFAULT = 0--wxSTC_GC_COMMENTLINE :: Int-wxSTC_GC_COMMENTLINE = 1--wxSTC_GC_COMMENTBLOCK :: Int-wxSTC_GC_COMMENTBLOCK = 2--wxSTC_GC_GLOBAL :: Int-wxSTC_GC_GLOBAL = 3--wxSTC_GC_EVENT :: Int-wxSTC_GC_EVENT = 4--wxSTC_GC_ATTRIBUTE :: Int-wxSTC_GC_ATTRIBUTE = 5--wxSTC_GC_CONTROL :: Int-wxSTC_GC_CONTROL = 6--wxSTC_GC_COMMAND :: Int-wxSTC_GC_COMMAND = 7--wxSTC_GC_STRING :: Int-wxSTC_GC_STRING = 8--wxSTC_GC_OPERATOR :: Int-wxSTC_GC_OPERATOR = 9--wxSTC_SN_DEFAULT :: Int-wxSTC_SN_DEFAULT = 0--wxSTC_SN_CODE :: Int-wxSTC_SN_CODE = 1--wxSTC_SN_COMMENTLINE :: Int-wxSTC_SN_COMMENTLINE = 2--wxSTC_SN_COMMENTLINEBANG :: Int-wxSTC_SN_COMMENTLINEBANG = 3--wxSTC_SN_NUMBER :: Int-wxSTC_SN_NUMBER = 4--wxSTC_SN_WORD :: Int-wxSTC_SN_WORD = 5--wxSTC_SN_STRING :: Int-wxSTC_SN_STRING = 6--wxSTC_SN_WORD2 :: Int-wxSTC_SN_WORD2 = 7--wxSTC_SN_WORD3 :: Int-wxSTC_SN_WORD3 = 8--wxSTC_SN_PREPROCESSOR :: Int-wxSTC_SN_PREPROCESSOR = 9--wxSTC_SN_OPERATOR :: Int-wxSTC_SN_OPERATOR = 10--wxSTC_SN_IDENTIFIER :: Int-wxSTC_SN_IDENTIFIER = 11--wxSTC_SN_STRINGEOL :: Int-wxSTC_SN_STRINGEOL = 12--wxSTC_SN_REGEXTAG :: Int-wxSTC_SN_REGEXTAG = 13--wxSTC_SN_SIGNAL :: Int-wxSTC_SN_SIGNAL = 14--wxSTC_SN_USER :: Int-wxSTC_SN_USER = 19--wxSTC_AU3_DEFAULT :: Int-wxSTC_AU3_DEFAULT = 0--wxSTC_AU3_COMMENT :: Int-wxSTC_AU3_COMMENT = 1--wxSTC_AU3_COMMENTBLOCK :: Int-wxSTC_AU3_COMMENTBLOCK = 2--wxSTC_AU3_NUMBER :: Int-wxSTC_AU3_NUMBER = 3--wxSTC_AU3_FUNCTION :: Int-wxSTC_AU3_FUNCTION = 4--wxSTC_AU3_KEYWORD :: Int-wxSTC_AU3_KEYWORD = 5--wxSTC_AU3_MACRO :: Int-wxSTC_AU3_MACRO = 6--wxSTC_AU3_STRING :: Int-wxSTC_AU3_STRING = 7--wxSTC_AU3_OPERATOR :: Int-wxSTC_AU3_OPERATOR = 8--wxSTC_AU3_VARIABLE :: Int-wxSTC_AU3_VARIABLE = 9--wxSTC_AU3_SENT :: Int-wxSTC_AU3_SENT = 10--wxSTC_AU3_PREPROCESSOR :: Int-wxSTC_AU3_PREPROCESSOR = 11--wxSTC_AU3_SPECIAL :: Int-wxSTC_AU3_SPECIAL = 12--wxSTC_AU3_EXPAND :: Int-wxSTC_AU3_EXPAND = 13--wxSTC_AU3_COMOBJ :: Int-wxSTC_AU3_COMOBJ = 14--wxSTC_APDL_DEFAULT :: Int-wxSTC_APDL_DEFAULT = 0--wxSTC_APDL_COMMENT :: Int-wxSTC_APDL_COMMENT = 1--wxSTC_APDL_COMMENTBLOCK :: Int-wxSTC_APDL_COMMENTBLOCK = 2--wxSTC_APDL_NUMBER :: Int-wxSTC_APDL_NUMBER = 3--wxSTC_APDL_STRING :: Int-wxSTC_APDL_STRING = 4--wxSTC_APDL_OPERATOR :: Int-wxSTC_APDL_OPERATOR = 5--wxSTC_APDL_WORD :: Int-wxSTC_APDL_WORD = 6--wxSTC_APDL_PROCESSOR :: Int-wxSTC_APDL_PROCESSOR = 7--wxSTC_APDL_COMMAND :: Int-wxSTC_APDL_COMMAND = 8--wxSTC_APDL_SLASHCOMMAND :: Int-wxSTC_APDL_SLASHCOMMAND = 9--wxSTC_APDL_STARCOMMAND :: Int-wxSTC_APDL_STARCOMMAND = 10--wxSTC_APDL_ARGUMENT :: Int-wxSTC_APDL_ARGUMENT = 11--wxSTC_APDL_FUNCTION :: Int-wxSTC_APDL_FUNCTION = 12--wxSTC_SH_DEFAULT :: Int-wxSTC_SH_DEFAULT = 0--wxSTC_SH_ERROR :: Int-wxSTC_SH_ERROR = 1--wxSTC_SH_COMMENTLINE :: Int-wxSTC_SH_COMMENTLINE = 2--wxSTC_SH_NUMBER :: Int-wxSTC_SH_NUMBER = 3--wxSTC_SH_WORD :: Int-wxSTC_SH_WORD = 4--wxSTC_SH_STRING :: Int-wxSTC_SH_STRING = 5--wxSTC_SH_CHARACTER :: Int-wxSTC_SH_CHARACTER = 6--wxSTC_SH_OPERATOR :: Int-wxSTC_SH_OPERATOR = 7--wxSTC_SH_IDENTIFIER :: Int-wxSTC_SH_IDENTIFIER = 8--wxSTC_SH_SCALAR :: Int-wxSTC_SH_SCALAR = 9--wxSTC_SH_PARAM :: Int-wxSTC_SH_PARAM = 10--wxSTC_SH_BACKTICKS :: Int-wxSTC_SH_BACKTICKS = 11--wxSTC_SH_HERE_DELIM :: Int-wxSTC_SH_HERE_DELIM = 12--wxSTC_SH_HERE_Q :: Int-wxSTC_SH_HERE_Q = 13--wxSTC_ASN1_DEFAULT :: Int-wxSTC_ASN1_DEFAULT = 0--wxSTC_ASN1_COMMENT :: Int-wxSTC_ASN1_COMMENT = 1--wxSTC_ASN1_IDENTIFIER :: Int-wxSTC_ASN1_IDENTIFIER = 2--wxSTC_ASN1_STRING :: Int-wxSTC_ASN1_STRING = 3--wxSTC_ASN1_OID :: Int-wxSTC_ASN1_OID = 4--wxSTC_ASN1_SCALAR :: Int-wxSTC_ASN1_SCALAR = 5--wxSTC_ASN1_KEYWORD :: Int-wxSTC_ASN1_KEYWORD = 6--wxSTC_ASN1_ATTRIBUTE :: Int-wxSTC_ASN1_ATTRIBUTE = 7--wxSTC_ASN1_DESCRIPTOR :: Int-wxSTC_ASN1_DESCRIPTOR = 8--wxSTC_ASN1_TYPE :: Int-wxSTC_ASN1_TYPE = 9--wxSTC_ASN1_OPERATOR :: Int-wxSTC_ASN1_OPERATOR = 10--wxSTC_VHDL_DEFAULT :: Int-wxSTC_VHDL_DEFAULT = 0--wxSTC_VHDL_COMMENT :: Int-wxSTC_VHDL_COMMENT = 1--wxSTC_VHDL_COMMENTLINEBANG :: Int-wxSTC_VHDL_COMMENTLINEBANG = 2--wxSTC_VHDL_NUMBER :: Int-wxSTC_VHDL_NUMBER = 3--wxSTC_VHDL_STRING :: Int-wxSTC_VHDL_STRING = 4--wxSTC_VHDL_OPERATOR :: Int-wxSTC_VHDL_OPERATOR = 5--wxSTC_VHDL_IDENTIFIER :: Int-wxSTC_VHDL_IDENTIFIER = 6--wxSTC_VHDL_STRINGEOL :: Int-wxSTC_VHDL_STRINGEOL = 7--wxSTC_VHDL_KEYWORD :: Int-wxSTC_VHDL_KEYWORD = 8--wxSTC_VHDL_STDOPERATOR :: Int-wxSTC_VHDL_STDOPERATOR = 9--wxSTC_VHDL_ATTRIBUTE :: Int-wxSTC_VHDL_ATTRIBUTE = 10--wxSTC_VHDL_STDFUNCTION :: Int-wxSTC_VHDL_STDFUNCTION = 11--wxSTC_VHDL_STDPACKAGE :: Int-wxSTC_VHDL_STDPACKAGE = 12--wxSTC_VHDL_STDTYPE :: Int-wxSTC_VHDL_STDTYPE = 13--wxSTC_VHDL_USERWORD :: Int-wxSTC_VHDL_USERWORD = 14--wxSTC_CAML_DEFAULT :: Int-wxSTC_CAML_DEFAULT = 0--wxSTC_CAML_IDENTIFIER :: Int-wxSTC_CAML_IDENTIFIER = 1--wxSTC_CAML_TAGNAME :: Int-wxSTC_CAML_TAGNAME = 2--wxSTC_CAML_KEYWORD :: Int-wxSTC_CAML_KEYWORD = 3--wxSTC_CAML_KEYWORD2 :: Int-wxSTC_CAML_KEYWORD2 = 4--wxSTC_CAML_KEYWORD3 :: Int-wxSTC_CAML_KEYWORD3 = 5--wxSTC_CAML_LINENUM :: Int-wxSTC_CAML_LINENUM = 6--wxSTC_CAML_OPERATOR :: Int-wxSTC_CAML_OPERATOR = 7--wxSTC_CAML_NUMBER :: Int-wxSTC_CAML_NUMBER = 8--wxSTC_CAML_CHAR :: Int-wxSTC_CAML_CHAR = 9--wxSTC_CAML_STRING :: Int-wxSTC_CAML_STRING = 11--wxSTC_CAML_COMMENT :: Int-wxSTC_CAML_COMMENT = 12--wxSTC_CAML_COMMENT1 :: Int-wxSTC_CAML_COMMENT1 = 13--wxSTC_CAML_COMMENT2 :: Int-wxSTC_CAML_COMMENT2 = 14--wxSTC_CAML_COMMENT3 :: Int-wxSTC_CAML_COMMENT3 = 15--wxSTC_T3_DEFAULT :: Int-wxSTC_T3_DEFAULT = 0--wxSTC_T3_X_DEFAULT :: Int-wxSTC_T3_X_DEFAULT = 1--wxSTC_T3_PREPROCESSOR :: Int-wxSTC_T3_PREPROCESSOR = 2--wxSTC_T3_BLOCK_COMMENT :: Int-wxSTC_T3_BLOCK_COMMENT = 3--wxSTC_T3_LINE_COMMENT :: Int-wxSTC_T3_LINE_COMMENT = 4--wxSTC_T3_OPERATOR :: Int-wxSTC_T3_OPERATOR = 5--wxSTC_T3_KEYWORD :: Int-wxSTC_T3_KEYWORD = 6--wxSTC_T3_NUMBER :: Int-wxSTC_T3_NUMBER = 7--wxSTC_T3_IDENTIFIER :: Int-wxSTC_T3_IDENTIFIER = 8--wxSTC_T3_S_STRING :: Int-wxSTC_T3_S_STRING = 9--wxSTC_T3_D_STRING :: Int-wxSTC_T3_D_STRING = 10--wxSTC_T3_X_STRING :: Int-wxSTC_T3_X_STRING = 11--wxSTC_T3_LIB_DIRECTIVE :: Int-wxSTC_T3_LIB_DIRECTIVE = 12--wxSTC_T3_MSG_PARAM :: Int-wxSTC_T3_MSG_PARAM = 13--wxSTC_T3_HTML_TAG :: Int-wxSTC_T3_HTML_TAG = 14--wxSTC_T3_HTML_DEFAULT :: Int-wxSTC_T3_HTML_DEFAULT = 15--wxSTC_T3_HTML_STRING :: Int-wxSTC_T3_HTML_STRING = 16--wxSTC_T3_USER1 :: Int-wxSTC_T3_USER1 = 17--wxSTC_T3_USER2 :: Int-wxSTC_T3_USER2 = 18--wxSTC_T3_USER3 :: Int-wxSTC_T3_USER3 = 19--wxSTC_REBOL_DEFAULT :: Int-wxSTC_REBOL_DEFAULT = 0--wxSTC_REBOL_COMMENTLINE :: Int-wxSTC_REBOL_COMMENTLINE = 1--wxSTC_REBOL_COMMENTBLOCK :: Int-wxSTC_REBOL_COMMENTBLOCK = 2--wxSTC_REBOL_PREFACE :: Int-wxSTC_REBOL_PREFACE = 3--wxSTC_REBOL_OPERATOR :: Int-wxSTC_REBOL_OPERATOR = 4--wxSTC_REBOL_CHARACTER :: Int-wxSTC_REBOL_CHARACTER = 5--wxSTC_REBOL_QUOTEDSTRING :: Int-wxSTC_REBOL_QUOTEDSTRING = 6--wxSTC_REBOL_BRACEDSTRING :: Int-wxSTC_REBOL_BRACEDSTRING = 7--wxSTC_REBOL_NUMBER :: Int-wxSTC_REBOL_NUMBER = 8--wxSTC_REBOL_PAIR :: Int-wxSTC_REBOL_PAIR = 9--wxSTC_REBOL_TUPLE :: Int-wxSTC_REBOL_TUPLE = 10--wxSTC_REBOL_BINARY :: Int-wxSTC_REBOL_BINARY = 11--wxSTC_REBOL_MONEY :: Int-wxSTC_REBOL_MONEY = 12--wxSTC_REBOL_ISSUE :: Int-wxSTC_REBOL_ISSUE = 13--wxSTC_REBOL_TAG :: Int-wxSTC_REBOL_TAG = 14--wxSTC_REBOL_FILE :: Int-wxSTC_REBOL_FILE = 15--wxSTC_REBOL_EMAIL :: Int-wxSTC_REBOL_EMAIL = 16--wxSTC_REBOL_URL :: Int-wxSTC_REBOL_URL = 17--wxSTC_REBOL_DATE :: Int-wxSTC_REBOL_DATE = 18--wxSTC_REBOL_TIME :: Int-wxSTC_REBOL_TIME = 19--wxSTC_REBOL_IDENTIFIER :: Int-wxSTC_REBOL_IDENTIFIER = 20--wxSTC_REBOL_WORD :: Int-wxSTC_REBOL_WORD = 21--wxSTC_REBOL_WORD2 :: Int-wxSTC_REBOL_WORD2 = 22--wxSTC_REBOL_WORD3 :: Int-wxSTC_REBOL_WORD3 = 23--wxSTC_REBOL_WORD4 :: Int-wxSTC_REBOL_WORD4 = 24--wxSTC_REBOL_WORD5 :: Int-wxSTC_REBOL_WORD5 = 25--wxSTC_REBOL_WORD6 :: Int-wxSTC_REBOL_WORD6 = 26--wxSTC_REBOL_WORD7 :: Int-wxSTC_REBOL_WORD7 = 27--wxSTC_REBOL_WORD8 :: Int-wxSTC_REBOL_WORD8 = 28--wxSTC_SQL_DEFAULT :: Int-wxSTC_SQL_DEFAULT = 0--wxSTC_SQL_COMMENT :: Int-wxSTC_SQL_COMMENT = 1--wxSTC_SQL_COMMENTLINE :: Int-wxSTC_SQL_COMMENTLINE = 2--wxSTC_SQL_COMMENTDOC :: Int-wxSTC_SQL_COMMENTDOC = 3--wxSTC_SQL_NUMBER :: Int-wxSTC_SQL_NUMBER = 4--wxSTC_SQL_WORD :: Int-wxSTC_SQL_WORD = 5--wxSTC_SQL_STRING :: Int-wxSTC_SQL_STRING = 6--wxSTC_SQL_CHARACTER :: Int-wxSTC_SQL_CHARACTER = 7--wxSTC_SQL_SQLPLUS :: Int-wxSTC_SQL_SQLPLUS = 8--wxSTC_SQL_SQLPLUS_PROMPT :: Int-wxSTC_SQL_SQLPLUS_PROMPT = 9--wxSTC_SQL_OPERATOR :: Int-wxSTC_SQL_OPERATOR = 10--wxSTC_SQL_IDENTIFIER :: Int-wxSTC_SQL_IDENTIFIER = 11--wxSTC_SQL_SQLPLUS_COMMENT :: Int-wxSTC_SQL_SQLPLUS_COMMENT = 13--wxSTC_SQL_COMMENTLINEDOC :: Int-wxSTC_SQL_COMMENTLINEDOC = 15--wxSTC_SQL_WORD2 :: Int-wxSTC_SQL_WORD2 = 16--wxSTC_SQL_COMMENTDOCKEYWORD :: Int-wxSTC_SQL_COMMENTDOCKEYWORD = 17--wxSTC_SQL_COMMENTDOCKEYWORDERROR :: Int-wxSTC_SQL_COMMENTDOCKEYWORDERROR = 18--wxSTC_SQL_USER1 :: Int-wxSTC_SQL_USER1 = 19--wxSTC_SQL_USER2 :: Int-wxSTC_SQL_USER2 = 20--wxSTC_SQL_USER3 :: Int-wxSTC_SQL_USER3 = 21--wxSTC_SQL_USER4 :: Int-wxSTC_SQL_USER4 = 22--wxSTC_SQL_QUOTEDIDENTIFIER :: Int-wxSTC_SQL_QUOTEDIDENTIFIER = 23--wxSTC_ST_DEFAULT :: Int-wxSTC_ST_DEFAULT = 0--wxSTC_ST_STRING :: Int-wxSTC_ST_STRING = 1--wxSTC_ST_NUMBER :: Int-wxSTC_ST_NUMBER = 2--wxSTC_ST_COMMENT :: Int-wxSTC_ST_COMMENT = 3--wxSTC_ST_SYMBOL :: Int-wxSTC_ST_SYMBOL = 4--wxSTC_ST_BINARY :: Int-wxSTC_ST_BINARY = 5--wxSTC_ST_BOOL :: Int-wxSTC_ST_BOOL = 6--wxSTC_ST_SELF :: Int-wxSTC_ST_SELF = 7--wxSTC_ST_SUPER :: Int-wxSTC_ST_SUPER = 8--wxSTC_ST_NIL :: Int-wxSTC_ST_NIL = 9--wxSTC_ST_GLOBAL :: Int-wxSTC_ST_GLOBAL = 10--wxSTC_ST_RETURN :: Int-wxSTC_ST_RETURN = 11--wxSTC_ST_SPECIAL :: Int-wxSTC_ST_SPECIAL = 12--wxSTC_ST_KWSEND :: Int-wxSTC_ST_KWSEND = 13--wxSTC_ST_ASSIGN :: Int-wxSTC_ST_ASSIGN = 14--wxSTC_ST_CHARACTER :: Int-wxSTC_ST_CHARACTER = 15--wxSTC_ST_SPEC_SEL :: Int-wxSTC_ST_SPEC_SEL = 16--wxSTC_FS_DEFAULT :: Int-wxSTC_FS_DEFAULT = 0--wxSTC_FS_COMMENT :: Int-wxSTC_FS_COMMENT = 1--wxSTC_FS_COMMENTLINE :: Int-wxSTC_FS_COMMENTLINE = 2--wxSTC_FS_COMMENTDOC :: Int-wxSTC_FS_COMMENTDOC = 3--wxSTC_FS_COMMENTLINEDOC :: Int-wxSTC_FS_COMMENTLINEDOC = 4--wxSTC_FS_COMMENTDOCKEYWORD :: Int-wxSTC_FS_COMMENTDOCKEYWORD = 5--wxSTC_FS_COMMENTDOCKEYWORDERROR :: Int-wxSTC_FS_COMMENTDOCKEYWORDERROR = 6--wxSTC_FS_KEYWORD :: Int-wxSTC_FS_KEYWORD = 7--wxSTC_FS_KEYWORD2 :: Int-wxSTC_FS_KEYWORD2 = 8--wxSTC_FS_KEYWORD3 :: Int-wxSTC_FS_KEYWORD3 = 9--wxSTC_FS_KEYWORD4 :: Int-wxSTC_FS_KEYWORD4 = 10--wxSTC_FS_NUMBER :: Int-wxSTC_FS_NUMBER = 11--wxSTC_FS_STRING :: Int-wxSTC_FS_STRING = 12--wxSTC_FS_PREPROCESSOR :: Int-wxSTC_FS_PREPROCESSOR = 13--wxSTC_FS_OPERATOR :: Int-wxSTC_FS_OPERATOR = 14--wxSTC_FS_IDENTIFIER :: Int-wxSTC_FS_IDENTIFIER = 15--wxSTC_FS_DATE :: Int-wxSTC_FS_DATE = 16--wxSTC_FS_STRINGEOL :: Int-wxSTC_FS_STRINGEOL = 17--wxSTC_FS_CONSTANT :: Int-wxSTC_FS_CONSTANT = 18--wxSTC_FS_ASM :: Int-wxSTC_FS_ASM = 19--wxSTC_FS_LABEL :: Int-wxSTC_FS_LABEL = 20--wxSTC_FS_ERROR :: Int-wxSTC_FS_ERROR = 21--wxSTC_FS_HEXNUMBER :: Int-wxSTC_FS_HEXNUMBER = 22--wxSTC_FS_BINNUMBER :: Int-wxSTC_FS_BINNUMBER = 23--wxSTC_CSOUND_DEFAULT :: Int-wxSTC_CSOUND_DEFAULT = 0--wxSTC_CSOUND_COMMENT :: Int-wxSTC_CSOUND_COMMENT = 1--wxSTC_CSOUND_NUMBER :: Int-wxSTC_CSOUND_NUMBER = 2--wxSTC_CSOUND_OPERATOR :: Int-wxSTC_CSOUND_OPERATOR = 3--wxSTC_CSOUND_INSTR :: Int-wxSTC_CSOUND_INSTR = 4--wxSTC_CSOUND_IDENTIFIER :: Int-wxSTC_CSOUND_IDENTIFIER = 5--wxSTC_CSOUND_OPCODE :: Int-wxSTC_CSOUND_OPCODE = 6--wxSTC_CSOUND_HEADERSTMT :: Int-wxSTC_CSOUND_HEADERSTMT = 7--wxSTC_CSOUND_USERKEYWORD :: Int-wxSTC_CSOUND_USERKEYWORD = 8--wxSTC_CSOUND_COMMENTBLOCK :: Int-wxSTC_CSOUND_COMMENTBLOCK = 9--wxSTC_CSOUND_PARAM :: Int-wxSTC_CSOUND_PARAM = 10--wxSTC_CSOUND_ARATE_VAR :: Int-wxSTC_CSOUND_ARATE_VAR = 11--wxSTC_CSOUND_KRATE_VAR :: Int-wxSTC_CSOUND_KRATE_VAR = 12--wxSTC_CSOUND_IRATE_VAR :: Int-wxSTC_CSOUND_IRATE_VAR = 13--wxSTC_CSOUND_GLOBAL_VAR :: Int-wxSTC_CSOUND_GLOBAL_VAR = 14--wxSTC_CSOUND_STRINGEOL :: Int-wxSTC_CSOUND_STRINGEOL = 15--wxSTC_CMD_REDO :: Int-wxSTC_CMD_REDO = 2011--wxSTC_CMD_SELECTALL :: Int-wxSTC_CMD_SELECTALL = 2013--wxSTC_CMD_UNDO :: Int-wxSTC_CMD_UNDO = 2176--wxSTC_CMD_CUT :: Int-wxSTC_CMD_CUT = 2177--wxSTC_CMD_COPY :: Int-wxSTC_CMD_COPY = 2178--wxSTC_CMD_PASTE :: Int-wxSTC_CMD_PASTE = 2179--wxSTC_CMD_CLEAR :: Int-wxSTC_CMD_CLEAR = 2180--wxSTC_CMD_LINEDOWN :: Int-wxSTC_CMD_LINEDOWN = 2300--wxSTC_CMD_LINEDOWNEXTEND :: Int-wxSTC_CMD_LINEDOWNEXTEND = 2301--wxSTC_CMD_LINEUP :: Int-wxSTC_CMD_LINEUP = 2302--wxSTC_CMD_LINEUPEXTEND :: Int-wxSTC_CMD_LINEUPEXTEND = 2303--wxSTC_CMD_CHARLEFT :: Int-wxSTC_CMD_CHARLEFT = 2304--wxSTC_CMD_CHARLEFTEXTEND :: Int-wxSTC_CMD_CHARLEFTEXTEND = 2305--wxSTC_CMD_CHARRIGHT :: Int-wxSTC_CMD_CHARRIGHT = 2306--wxSTC_CMD_CHARRIGHTEXTEND :: Int-wxSTC_CMD_CHARRIGHTEXTEND = 2307--wxSTC_CMD_WORDLEFT :: Int-wxSTC_CMD_WORDLEFT = 2308--wxSTC_CMD_WORDLEFTEXTEND :: Int-wxSTC_CMD_WORDLEFTEXTEND = 2309--wxSTC_CMD_WORDRIGHT :: Int-wxSTC_CMD_WORDRIGHT = 2310--wxSTC_CMD_WORDRIGHTEXTEND :: Int-wxSTC_CMD_WORDRIGHTEXTEND = 2311--wxSTC_CMD_HOME :: Int-wxSTC_CMD_HOME = 2312--wxSTC_CMD_HOMEEXTEND :: Int-wxSTC_CMD_HOMEEXTEND = 2313--wxSTC_CMD_LINEEND :: Int-wxSTC_CMD_LINEEND = 2314--wxSTC_CMD_LINEENDEXTEND :: Int-wxSTC_CMD_LINEENDEXTEND = 2315--wxSTC_CMD_DOCUMENTSTART :: Int-wxSTC_CMD_DOCUMENTSTART = 2316--wxSTC_CMD_DOCUMENTSTARTEXTEND :: Int-wxSTC_CMD_DOCUMENTSTARTEXTEND = 2317--wxSTC_CMD_DOCUMENTEND :: Int-wxSTC_CMD_DOCUMENTEND = 2318--wxSTC_CMD_DOCUMENTENDEXTEND :: Int-wxSTC_CMD_DOCUMENTENDEXTEND = 2319--wxSTC_CMD_PAGEUP :: Int-wxSTC_CMD_PAGEUP = 2320--wxSTC_CMD_PAGEUPEXTEND :: Int-wxSTC_CMD_PAGEUPEXTEND = 2321--wxSTC_CMD_PAGEDOWN :: Int-wxSTC_CMD_PAGEDOWN = 2322--wxSTC_CMD_PAGEDOWNEXTEND :: Int-wxSTC_CMD_PAGEDOWNEXTEND = 2323--wxSTC_CMD_EDITTOGGLEOVERTYPE :: Int-wxSTC_CMD_EDITTOGGLEOVERTYPE = 2324--wxSTC_CMD_CANCEL :: Int-wxSTC_CMD_CANCEL = 2325--wxSTC_CMD_DELETEBACK :: Int-wxSTC_CMD_DELETEBACK = 2326--wxSTC_CMD_TAB :: Int-wxSTC_CMD_TAB = 2327--wxSTC_CMD_BACKTAB :: Int-wxSTC_CMD_BACKTAB = 2328--wxSTC_CMD_NEWLINE :: Int-wxSTC_CMD_NEWLINE = 2329--wxSTC_CMD_FORMFEED :: Int-wxSTC_CMD_FORMFEED = 2330--wxSTC_CMD_VCHOME :: Int-wxSTC_CMD_VCHOME = 2331--wxSTC_CMD_VCHOMEEXTEND :: Int-wxSTC_CMD_VCHOMEEXTEND = 2332--wxSTC_CMD_ZOOMIN :: Int-wxSTC_CMD_ZOOMIN = 2333--wxSTC_CMD_ZOOMOUT :: Int-wxSTC_CMD_ZOOMOUT = 2334--wxSTC_CMD_DELWORDLEFT :: Int-wxSTC_CMD_DELWORDLEFT = 2335--wxSTC_CMD_DELWORDRIGHT :: Int-wxSTC_CMD_DELWORDRIGHT = 2336--wxSTC_CMD_LINECUT :: Int-wxSTC_CMD_LINECUT = 2337--wxSTC_CMD_LINEDELETE :: Int-wxSTC_CMD_LINEDELETE = 2338--wxSTC_CMD_LINETRANSPOSE :: Int-wxSTC_CMD_LINETRANSPOSE = 2339--wxSTC_CMD_LINEDUPLICATE :: Int-wxSTC_CMD_LINEDUPLICATE = 2404--wxSTC_CMD_LOWERCASE :: Int-wxSTC_CMD_LOWERCASE = 2340--wxSTC_CMD_UPPERCASE :: Int-wxSTC_CMD_UPPERCASE = 2341--wxSTC_CMD_LINESCROLLDOWN :: Int-wxSTC_CMD_LINESCROLLDOWN = 2342--wxSTC_CMD_LINESCROLLUP :: Int-wxSTC_CMD_LINESCROLLUP = 2343--wxSTC_CMD_DELETEBACKNOTLINE :: Int-wxSTC_CMD_DELETEBACKNOTLINE = 2344--wxSTC_CMD_HOMEDISPLAY :: Int-wxSTC_CMD_HOMEDISPLAY = 2345--wxSTC_CMD_HOMEDISPLAYEXTEND :: Int-wxSTC_CMD_HOMEDISPLAYEXTEND = 2346--wxSTC_CMD_LINEENDDISPLAY :: Int-wxSTC_CMD_LINEENDDISPLAY = 2347--wxSTC_CMD_LINEENDDISPLAYEXTEND :: Int-wxSTC_CMD_LINEENDDISPLAYEXTEND = 2348--wxSTC_CMD_HOMEWRAP :: Int-wxSTC_CMD_HOMEWRAP = 2349--wxSTC_CMD_HOMEWRAPEXTEND :: Int-wxSTC_CMD_HOMEWRAPEXTEND = 2450--wxSTC_CMD_LINEENDWRAP :: Int-wxSTC_CMD_LINEENDWRAP = 2451--wxSTC_CMD_LINEENDWRAPEXTEND :: Int-wxSTC_CMD_LINEENDWRAPEXTEND = 2452--wxSTC_CMD_VCHOMEWRAP :: Int-wxSTC_CMD_VCHOMEWRAP = 2453--wxSTC_CMD_VCHOMEWRAPEXTEND :: Int-wxSTC_CMD_VCHOMEWRAPEXTEND = 2454--wxSTC_CMD_LINECOPY :: Int-wxSTC_CMD_LINECOPY = 2455--wxSTC_CMD_WORDPARTLEFT :: Int-wxSTC_CMD_WORDPARTLEFT = 2390--wxSTC_CMD_WORDPARTLEFTEXTEND :: Int-wxSTC_CMD_WORDPARTLEFTEXTEND = 2391--wxSTC_CMD_WORDPARTRIGHT :: Int-wxSTC_CMD_WORDPARTRIGHT = 2392--wxSTC_CMD_WORDPARTRIGHTEXTEND :: Int-wxSTC_CMD_WORDPARTRIGHTEXTEND = 2393--wxSTC_CMD_DELLINELEFT :: Int-wxSTC_CMD_DELLINELEFT = 2395--wxSTC_CMD_DELLINERIGHT :: Int-wxSTC_CMD_DELLINERIGHT = 2396--wxSTC_CMD_PARADOWN :: Int-wxSTC_CMD_PARADOWN = 2413--wxSTC_CMD_PARADOWNEXTEND :: Int-wxSTC_CMD_PARADOWNEXTEND = 2414--wxSTC_CMD_PARAUP :: Int-wxSTC_CMD_PARAUP = 2415--wxSTC_CMD_PARAUPEXTEND :: Int-wxSTC_CMD_PARAUPEXTEND = 2416--wxSTC_CMD_LINEDOWNRECTEXTEND :: Int-wxSTC_CMD_LINEDOWNRECTEXTEND = 2426--wxSTC_CMD_LINEUPRECTEXTEND :: Int-wxSTC_CMD_LINEUPRECTEXTEND = 2427--wxSTC_CMD_CHARLEFTRECTEXTEND :: Int-wxSTC_CMD_CHARLEFTRECTEXTEND = 2428--wxSTC_CMD_CHARRIGHTRECTEXTEND :: Int-wxSTC_CMD_CHARRIGHTRECTEXTEND = 2429--wxSTC_CMD_HOMERECTEXTEND :: Int-wxSTC_CMD_HOMERECTEXTEND = 2430--wxSTC_CMD_VCHOMERECTEXTEND :: Int-wxSTC_CMD_VCHOMERECTEXTEND = 2431--wxSTC_CMD_LINEENDRECTEXTEND :: Int-wxSTC_CMD_LINEENDRECTEXTEND = 2432--wxSTC_CMD_PAGEUPRECTEXTEND :: Int-wxSTC_CMD_PAGEUPRECTEXTEND = 2433--wxSTC_CMD_PAGEDOWNRECTEXTEND :: Int-wxSTC_CMD_PAGEDOWNRECTEXTEND = 2434--wxSTC_CMD_STUTTEREDPAGEUP :: Int-wxSTC_CMD_STUTTEREDPAGEUP = 2435--wxSTC_CMD_STUTTEREDPAGEUPEXTEND :: Int-wxSTC_CMD_STUTTEREDPAGEUPEXTEND = 2436--wxSTC_CMD_STUTTEREDPAGEDOWN :: Int-wxSTC_CMD_STUTTEREDPAGEDOWN = 2437--wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND :: Int-wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND = 2438--wxSTC_CMD_WORDLEFTEND :: Int-wxSTC_CMD_WORDLEFTEND = 2439--wxSTC_CMD_WORDLEFTENDEXTEND :: Int-wxSTC_CMD_WORDLEFTENDEXTEND = 2440--wxSTC_CMD_WORDRIGHTEND :: Int-wxSTC_CMD_WORDRIGHTEND = 2441--wxSTC_CMD_WORDRIGHTENDEXTEND :: Int-wxSTC_CMD_WORDRIGHTENDEXTEND = 2442-+--------------------------------------------------------------------------------
+{-| Module      :  WxcDefs
+    Copyright   :  Copyright (c) Daan Leijen 2003, 2004
+    License     :  wxWidgets
+
+    Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+    Stability   :  provisional
+    Portability :  portable
+
+Haskell constant definitions for the wxWidgets C library (@wxc.dll@).
+
+This file was originally generated automatically by wxDirect; it
+is now manually maintained.
+
+-}
+--------------------------------------------------------------------------------
+module Graphics.UI.WXCore.WxcDefs
+    ( -- * Types
+      BitFlag
+      -- * Constants
+    , cB_BAR_CONTENT_HITTED
+    , cB_LEFT_BAR_HANDLE_HITTED
+    , cB_LOWER_ROW_HANDLE_HITTED
+    , cB_NO_ITEMS_HITTED
+    , cB_RIGHT_BAR_HANDLE_HITTED
+    , cB_UPPER_ROW_HANDLE_HITTED
+    , fL_ALIGN_BOTTOM
+    , fL_ALIGN_BOTTOM_PANE
+    , fL_ALIGN_LEFT
+    , fL_ALIGN_LEFT_PANE
+    , fL_ALIGN_RIGHT
+    , fL_ALIGN_RIGHT_PANE
+    , fL_ALIGN_TOP
+    , fL_ALIGN_TOP_PANE
+    , wxACCEL_ALT
+    , wxACCEL_CTRL
+    , wxACCEL_NORMAL
+    , wxACCEL_SHIFT
+    , wxADJUST_MINSIZE
+    , wxALIGN_BOTTOM
+    , wxALIGN_CENTER
+    , wxALIGN_CENTER_HORIZONTAL
+    , wxALIGN_CENTER_VERTICAL
+    , wxALIGN_CENTRE
+    , wxALIGN_CENTRE_HORIZONTAL
+    , wxALIGN_CENTRE_VERTICAL
+    , wxALIGN_LEFT
+    , wxALIGN_NOT
+    , wxALIGN_RIGHT
+    , wxALIGN_TOP
+    , wxALL
+    , wxALL_PANES
+    , wxAND
+    , wxAND_INVERT
+    , wxAND_REVERSE
+    , wxBACKWARD
+    , wxBDIAGONAL_HATCH
+    , wxBEOS
+    , wxBIG_ENDIAN
+    , wxBITMAP_TYPE_ANY
+    , wxBITMAP_TYPE_BMP
+    , wxBITMAP_TYPE_BMP_RESOURCE
+    , wxBITMAP_TYPE_CUR
+    , wxBITMAP_TYPE_CUR_RESOURCE
+    , wxBITMAP_TYPE_GIF
+    , wxBITMAP_TYPE_GIF_RESOURCE
+    , wxBITMAP_TYPE_ICO
+    , wxBITMAP_TYPE_ICON
+    , wxBITMAP_TYPE_ICON_RESOURCE
+    , wxBITMAP_TYPE_ICO_RESOURCE
+    , wxBITMAP_TYPE_INVALID
+    , wxBITMAP_TYPE_JPEG
+    , wxBITMAP_TYPE_JPEG_RESOURCE
+    , wxBITMAP_TYPE_MACCURSOR
+    , wxBITMAP_TYPE_MACCURSOR_RESOURCE
+    , wxBITMAP_TYPE_PCX
+    , wxBITMAP_TYPE_PCX_RESOURCE
+    , wxBITMAP_TYPE_PICT
+    , wxBITMAP_TYPE_PICT_RESOURCE
+    , wxBITMAP_TYPE_PNG
+    , wxBITMAP_TYPE_PNG_RESOURCE
+    , wxBITMAP_TYPE_PNM
+    , wxBITMAP_TYPE_PNM_RESOURCE
+    , wxBITMAP_TYPE_RESOURCE
+    , wxBITMAP_TYPE_TIF
+    , wxBITMAP_TYPE_TIF_RESOURCE
+    , wxBITMAP_TYPE_XBM
+    , wxBITMAP_TYPE_XBM_DATA
+    , wxBITMAP_TYPE_XPM
+    , wxBITMAP_TYPE_XPM_DATA
+    , wxBLACK
+    , wxBLACK_BRUSH
+    , wxBLACK_DASHED_PEN
+    , wxBLACK_PEN
+    , wxBLUE
+    , wxBLUE_BRUSH
+    , wxBOLD
+    , wxBOOLEAN
+    , wxBORDER
+    , wxBORDER_DEFAULT
+    , wxBORDER_MASK
+    , wxBORDER_NONE
+    , wxBORDER_RAISED
+    , wxBORDER_SIMPLE
+    , wxBORDER_STATIC
+    , wxBORDER_SUNKEN
+    , wxBORDER_THEME
+    , wxBOTH
+    , wxBOTTOM
+    , wxBRUSHSTYLE_BDIAGONAL_HATCH
+    , wxBRUSHSTYLE_CROSSDIAG_HATCH
+    , wxBRUSHSTYLE_CROSS_HATCH
+    , wxBRUSHSTYLE_FDIAGONAL_HATCH
+    , wxBRUSHSTYLE_FIRST_HATCH
+    , wxBRUSHSTYLE_HORIZONTAL_HATCH
+    , wxBRUSHSTYLE_INVALID
+    , wxBRUSHSTYLE_LAST_HATCH
+    , wxBRUSHSTYLE_SOLID
+    , wxBRUSHSTYLE_STIPPLE
+    , wxBRUSHSTYLE_STIPPLE_MASK
+    , wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE
+    , wxBRUSHSTYLE_TRANSPARENT
+    , wxBRUSHSTYLE_VERTICAL_HATCH
+    , wxBU_ALIGN_MASK
+    , wxBU_AUTODRAW
+    , wxBU_BOTTOM
+    , wxBU_EXACTFIT
+    , wxBU_LEFT
+    , wxBU_NOAUTODRAW
+    , wxBU_NOTEXT
+    , wxBU_RIGHT
+    , wxBU_TOP
+    , wxCAL_BORDER_NONE
+    , wxCAL_BORDER_ROUND
+    , wxCAL_BORDER_SQUARE
+    , wxCAL_HITTEST_DAY
+    , wxCAL_HITTEST_HEADER
+    , wxCAL_HITTEST_NOWHERE
+    , wxCAL_MONDAY_FIRST
+    , wxCAL_NO_MONTH_CHANGE
+    , wxCAL_NO_YEAR_CHANGE
+    , wxCAL_SHOW_HOLIDAYS
+    , wxCAL_SUNDAY_FIRST
+    , wxCANCEL
+    , wxCAPTION
+    , wxCAP_BUTT
+    , wxCAP_INVALID
+    , wxCAP_PROJECTING
+    , wxCAP_ROUND
+    , wxCBAR_DOCKED_HORIZONTALLY
+    , wxCBAR_DOCKED_VERTICALLY
+    , wxCBAR_FLOATING
+    , wxCBAR_HIDDEN
+    , wxCB_DROPDOWN
+    , wxCB_READONLY
+    , wxCB_SIMPLE
+    , wxCB_SORT
+    , wxCENTER
+    , wxCENTER_FRAME
+    , wxCENTRE
+    , wxCENTRE_ON_SCREEN
+    , wxCHANGE_DIR
+    , wxCLEAR
+    , wxCLIP_CHILDREN
+    , wxCLOSE_BOX
+    , wxCOLOURED
+    , wxCONFIG_TYPE_BOOLEAN
+    , wxCONFIG_TYPE_FLOAT
+    , wxCONFIG_TYPE_INTEGER
+    , wxCONFIG_TYPE_STRING
+    , wxCONFIG_TYPE_UNKNOWN
+    , wxCONFIG_USE_GLOBAL_FILE
+    , wxCONFIG_USE_LOCAL_FILE
+    , wxCONFIG_USE_NO_ESCAPE_CHARACTERS
+    , wxCONFIG_USE_RELATIVE_PATH
+    , wxCOPY
+    , wxCOSE_X
+    , wxCROSSDIAG_HATCH
+    , wxCROSS_HATCH
+    , wxCURSES
+    , wxCURSOR_ARROW
+    , wxCURSOR_BLANK
+    , wxCURSOR_BULLSEYE
+    , wxCURSOR_CHAR
+    , wxCURSOR_CROSS
+    , wxCURSOR_HAND
+    , wxCURSOR_IBEAM
+    , wxCURSOR_LEFT_BUTTON
+    , wxCURSOR_MAGNIFIER
+    , wxCURSOR_MIDDLE_BUTTON
+    , wxCURSOR_NONE
+    , wxCURSOR_NO_ENTRY
+    , wxCURSOR_PAINT_BRUSH
+    , wxCURSOR_PENCIL
+    , wxCURSOR_POINT_LEFT
+    , wxCURSOR_POINT_RIGHT
+    , wxCURSOR_QUESTION_ARROW
+    , wxCURSOR_RIGHT_ARROW
+    , wxCURSOR_RIGHT_BUTTON
+    , wxCURSOR_SIZENESW
+    , wxCURSOR_SIZENS
+    , wxCURSOR_SIZENWSE
+    , wxCURSOR_SIZEWE
+    , wxCURSOR_SIZING
+    , wxCURSOR_SPRAYCAN
+    , wxCURSOR_WAIT
+    , wxCURSOR_WATCH
+    , wxCYAN
+    , wxCYAN_BRUSH
+    , wxCYAN_PEN
+    , wxDB_DATA_TYPE_BLOB
+    , wxDB_DATA_TYPE_DATE
+    , wxDB_DATA_TYPE_FLOAT
+    , wxDB_DATA_TYPE_INTEGER
+    , wxDB_DATA_TYPE_VARCHAR
+    , wxDB_DEL_KEYFIELDS
+    , wxDB_DEL_MATCHING
+    , wxDB_DEL_WHERE
+    , wxDB_GRANT_ALL
+    , wxDB_GRANT_DELETE
+    , wxDB_GRANT_INSERT
+    , wxDB_GRANT_SELECT
+    , wxDB_GRANT_UPDATE
+    , wxDB_MAX_COLUMN_NAME_LEN
+    , wxDB_MAX_ERROR_HISTORY
+    , wxDB_MAX_ERROR_MSG_LEN
+    , wxDB_MAX_STATEMENT_LEN
+    , wxDB_MAX_TABLE_NAME_LEN
+    , wxDB_MAX_WHERE_CLAUSE_LEN
+    , wxDB_SELECT_KEYFIELDS
+    , wxDB_SELECT_MATCHING
+    , wxDB_SELECT_STATEMENT
+    , wxDB_SELECT_WHERE
+    , wxDB_TYPE_NAME_LEN
+    , wxDB_UPD_KEYFIELDS
+    , wxDB_UPD_WHERE
+    , wxDB_WHERE_KEYFIELDS
+    , wxDB_WHERE_MATCHING
+    , wxDECORATIVE
+    , wxDEFAULT
+    , wxDEFAULT_FRAME_STYLE
+    , wxDF_BITMAP
+    , wxDF_DIB
+    , wxDF_DIF
+    , wxDF_ENHMETAFILE
+    , wxDF_FILENAME
+    , wxDF_HTML
+    , wxDF_INVALID
+    , wxDF_LOCALE
+    , wxDF_MAX
+    , wxDF_METAFILE
+    , wxDF_OEMTEXT
+    , wxDF_PALETTE
+    , wxDF_PENDATA
+    , wxDF_PRIVATE
+    , wxDF_RIFF
+    , wxDF_SYLK
+    , wxDF_TEXT
+    , wxDF_TIFF
+    , wxDF_UNICODETEXT
+    , wxDF_WAVE
+    , wxDIALOG_EX_CONTEXTHELP
+    , wxDIALOG_MODAL
+    , wxDIALOG_MODELESS
+    , wxDOT
+    , wxDOT_DASH
+    , wxDOUBLE_BORDER
+    , wxDOWN
+    , wxDRAG_ALLOWMOVE
+    , wxDRAG_CANCEL
+    , wxDRAG_COPY
+    , wxDRAG_COPYONLY
+    , wxDRAG_DEFALUTMOVE
+    , wxDRAG_ERROR
+    , wxDRAG_LINK
+    , wxDRAG_MOVE
+    , wxDRAG_NONE
+    , wxDS_DRAG_CORNER
+    , wxDS_MANAGE_SCROLLBARS
+    , wxDUPLEX_HORIZONTAL
+    , wxDUPLEX_SIMPLEX
+    , wxDUPLEX_VERTICAL
+    , wxEAST
+    , wxEDGE_BOTTOM
+    , wxEDGE_CENTER
+    , wxEDGE_CENTREX
+    , wxEDGE_CENTREY
+    , wxEDGE_HEIGHT
+    , wxEDGE_LEFT
+    , wxEDGE_RIGHT
+    , wxEDGE_TOP
+    , wxEDGE_WIDTH
+    , wxED_BUTTONS_BOTTOM
+    , wxED_BUTTONS_RIGHT
+    , wxED_CLIENT_MARGIN
+    , wxED_STATIC_LINE
+    , wxEL_ALLOW_DELETE
+    , wxEL_ALLOW_EDIT
+    , wxEL_ALLOW_NEW
+    , wxEQUIV
+    , wxEVT_FIRST
+    , wxEVT_NULL
+    , wxEXEC_ASYNC
+    , wxEXEC_MAKE_GROUP_LEADER
+    , wxEXEC_NOHIDE
+    , wxEXEC_SYNC
+    , wxEXPAND
+    , wxFDIAGONAL_HATCH
+    , wxFILE_MUST_EXIST
+    , wxFILTER_ALPHA
+    , wxFILTER_ALPHANUMERIC
+    , wxFILTER_ASCII
+    , wxFILTER_EXCLUDE_LIST
+    , wxFILTER_INCLUDE_LIST
+    , wxFILTER_LOWER_CASE
+    , wxFILTER_NONE
+    , wxFILTER_NUMERIC
+    , wxFILTER_UPPER_CASE
+    , wxFIXED
+    , wxFIXED_LENGTH
+    , wxFIXED_MINSIZE
+    , wxFLOAT
+    , wxFLOOD_BORDER
+    , wxFLOOD_SURFACE
+    , wxFONTENCODING_ALTERNATIVE
+    , wxFONTENCODING_BULGARIAN
+    , wxFONTENCODING_CP1250
+    , wxFONTENCODING_CP1251
+    , wxFONTENCODING_CP1252
+    , wxFONTENCODING_CP1253
+    , wxFONTENCODING_CP1254
+    , wxFONTENCODING_CP1255
+    , wxFONTENCODING_CP1256
+    , wxFONTENCODING_CP1257
+    , wxFONTENCODING_CP12_MAX
+    , wxFONTENCODING_CP437
+    , wxFONTENCODING_CP850
+    , wxFONTENCODING_CP852
+    , wxFONTENCODING_CP855
+    , wxFONTENCODING_CP866
+    , wxFONTENCODING_CP874
+    , wxFONTENCODING_DEFAULT
+    , wxFONTENCODING_ISO8859_1
+    , wxFONTENCODING_ISO8859_10
+    , wxFONTENCODING_ISO8859_11
+    , wxFONTENCODING_ISO8859_12
+    , wxFONTENCODING_ISO8859_13
+    , wxFONTENCODING_ISO8859_14
+    , wxFONTENCODING_ISO8859_15
+    , wxFONTENCODING_ISO8859_2
+    , wxFONTENCODING_ISO8859_3
+    , wxFONTENCODING_ISO8859_4
+    , wxFONTENCODING_ISO8859_5
+    , wxFONTENCODING_ISO8859_6
+    , wxFONTENCODING_ISO8859_7
+    , wxFONTENCODING_ISO8859_8
+    , wxFONTENCODING_ISO8859_9
+    , wxFONTENCODING_ISO8859_MAX
+    , wxFONTENCODING_KOI8
+    , wxFONTENCODING_MAX
+    , wxFONTENCODING_SYSTEM
+    , wxFONTENCODING_UNICODE
+    , wxFONTFAMILY_DECORATIVE
+    , wxFONTFAMILY_DEFAULT
+    , wxFONTFAMILY_MAX
+    , wxFONTFAMILY_MODERN
+    , wxFONTFAMILY_ROMAN
+    , wxFONTFAMILY_SCRIPT
+    , wxFONTFAMILY_SWISS
+    , wxFONTFAMILY_TELETYPE
+    , wxFONTFAMILY_UNKNOWN
+    , wxFONTFLAG_ANTIALIASED
+    , wxFONTFLAG_BOLD
+    , wxFONTFLAG_DEFAULT
+    , wxFONTFLAG_ITALIC
+    , wxFONTFLAG_LIGHT
+    , wxFONTFLAG_MASK
+    , wxFONTFLAG_NOT_ANTIALIASED
+    , wxFONTFLAG_SLANT
+    , wxFONTFLAG_STRIKETHROUGH
+    , wxFONTFLAG_UNDERLINED
+    , wxFONTSIZE_LARGE
+    , wxFONTSIZE_MEDIUM
+    , wxFONTSIZE_SMALL
+    , wxFONTSIZE_XX_LARGE
+    , wxFONTSIZE_XX_SMALL
+    , wxFONTSIZE_X_LARGE
+    , wxFONTSIZE_X_SMALL
+    , wxFONTSTYLE_ITALIC
+    , wxFONTSTYLE_MAX
+    , wxFONTSTYLE_NORMAL
+    , wxFONTSTYLE_SLANT
+    , wxFONTWEIGHT_BOLD
+    , wxFONTWEIGHT_LIGHT
+    , wxFONTWEIGHT_MAX
+    , wxFONTWEIGHT_NORMAL
+    , wxFORWARD
+    , wxFRAME_EX_CONTEXTHELP
+    , wxFRAME_FLOAT_ON_PARENT
+    , wxFRAME_NO_WINDOW_MENU
+    , wxFRAME_SHAPED
+    , wxFRAME_TOOL_WINDOW
+    , wxFR_DOWN
+    , wxFR_MATCHCASE
+    , wxFR_NOMATCHCASE
+    , wxFR_NOUPDOWN
+    , wxFR_NOWHOLEWORD
+    , wxFR_REPLACEDIALOG
+    , wxFR_WHOLEWORD
+    , wxFULLSCREEN_ALL
+    , wxFULLSCREEN_NOBORDER
+    , wxFULLSCREEN_NOCAPTION
+    , wxFULLSCREEN_NOMENUBAR
+    , wxFULLSCREEN_NOSTATUSBAR
+    , wxFULLSCREEN_NOTOOLBAR
+    , wxGA_PROGRESSBAR
+    , wxGA_SMOOTH
+    , wxGEOS
+    , wxGREEN
+    , wxGREEN_BRUSH
+    , wxGREEN_PEN
+    , wxGREY_BRUSH
+    , wxGREY_PEN
+    , wxGRIDTABLE_NOTIFY_COLS_APPENDED
+    , wxGRIDTABLE_NOTIFY_COLS_DELETED
+    , wxGRIDTABLE_NOTIFY_COLS_INSERTED
+    , wxGRIDTABLE_NOTIFY_ROWS_APPENDED
+    , wxGRIDTABLE_NOTIFY_ROWS_DELETED
+    , wxGRIDTABLE_NOTIFY_ROWS_INSERTED
+    , wxGRIDTABLE_REQUEST_VIEW_GET_VALUES
+    , wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES
+    , wxGROW
+    , wxGTK
+    , wxGTK_BEOS
+    , wxGTK_OS2
+    , wxGTK_WIN32
+    , wxGridSelectCells
+    , wxGridSelectColumns
+    , wxGridSelectRows
+    , wxHATCHSTYLE_BDIAGONAL
+    , wxHATCHSTYLE_CROSS
+    , wxHATCHSTYLE_CROSSDIAG
+    , wxHATCHSTYLE_FDIAGONAL
+    , wxHATCHSTYLE_FIRST
+    , wxHATCHSTYLE_HORIZONTAL
+    , wxHATCHSTYLE_LAST
+    , wxHATCHSTYLE_VERTICAL
+    , wxHELP
+    , wxHF_BOOKMARKS
+    , wxHF_CONTENTS
+    , wxHF_DEFAULTSTYLE
+    , wxHF_FLATTOOLBAR
+    , wxHF_INDEX
+    , wxHF_OPENFILES
+    , wxHF_PRINT
+    , wxHF_SEARCH
+    , wxHF_TOOLBAR
+    , wxHIDE_READONLY
+    , wxHORIZONTAL
+    , wxHORIZONTAL_HATCH
+    , wxHSCROLL
+    , wxHW_SCROLLBAR_AUTO
+    , wxHW_SCROLLBAR_NEVER
+    , wxICONIZE
+    , wxICON_EXCLAMATION
+    , wxICON_HAND
+    , wxICON_INFORMATION
+    , wxICON_QUESTION
+    , wxID_ABOUT
+    , wxID_APPLY
+    , wxID_BACKWARD
+    , wxID_CANCEL
+    , wxID_CLEAR
+    , wxID_CLOSE
+    , wxID_CLOSE_ALL
+    , wxID_COPY
+    , wxID_CUT
+    , wxID_DEFAULT
+    , wxID_DELETE
+    , wxID_DUPLICATE
+    , wxID_EDIT
+    , wxID_EXIT
+    , wxID_FILE1
+    , wxID_FILE2
+    , wxID_FILE3
+    , wxID_FILE4
+    , wxID_FILE5
+    , wxID_FILE6
+    , wxID_FILE7
+    , wxID_FILE8
+    , wxID_FILE9
+    , wxID_FILEDLGG
+    , wxID_FIND
+    , wxID_FORWARD
+    , wxID_HELP
+    , wxID_HELP_COMMANDS
+    , wxID_HELP_CONTENTS
+    , wxID_HELP_CONTEXT
+    , wxID_HELP_PROCEDURES
+    , wxID_HIGHEST
+    , wxID_LOWEST
+    , wxID_MORE
+    , wxID_NEW
+    , wxID_NO
+    , wxID_OK
+    , wxID_OPEN
+    , wxID_PASTE
+    , wxID_PREFERENCES
+    , wxID_PREVIEW
+    , wxID_PREVIEW_CLOSE
+    , wxID_PREVIEW_FIRST
+    , wxID_PREVIEW_GOTO
+    , wxID_PREVIEW_LAST
+    , wxID_PREVIEW_NEXT
+    , wxID_PREVIEW_PREVIOUS
+    , wxID_PREVIEW_PRINT
+    , wxID_PREVIEW_ZOOM
+    , wxID_PRINT
+    , wxID_PRINT_SETUP
+    , wxID_PROPERTIES
+    , wxID_REDO
+    , wxID_REPLACE
+    , wxID_REPLACE_ALL
+    , wxID_RESET
+    , wxID_REVERT
+    , wxID_SAVE
+    , wxID_SAVEAS
+    , wxID_SELECTALL
+    , wxID_SETUP
+    , wxID_STATIC
+    , wxID_UNDO
+    , wxID_VIEW_DETAILS
+    , wxID_VIEW_LARGEICONS
+    , wxID_VIEW_LIST
+    , wxID_VIEW_SMALLICONS
+    , wxID_VIEW_SORTDATE
+    , wxID_VIEW_SORTNAME
+    , wxID_VIEW_SORTSIZE
+    , wxID_VIEW_SORTTYPE
+    , wxID_YES
+    , wxIMAGE_LIST_NORMAL
+    , wxIMAGE_LIST_SMALL
+    , wxIMAGE_LIST_STATE
+    , wxINTEGER
+    , wxINVERT
+    , wxITALIC
+    , wxITEM_CHECK
+    , wxITEM_MAX
+    , wxITEM_NORMAL
+    , wxITEM_RADIO
+    , wxITEM_SEPARATOR
+    , wxJOIN_BEVEL
+    , wxJOIN_INVALID
+    , wxJOIN_MITER
+    , wxJOIN_ROUND
+    , wxJOYSTICK1
+    , wxJOYSTICK2
+    , wxJOY_BUTTON1
+    , wxJOY_BUTTON2
+    , wxJOY_BUTTON3
+    , wxJOY_BUTTON4
+    , wxKILL_ACCESS_DENIED
+    , wxKILL_BAD_SIGNAL
+    , wxKILL_ERROR
+    , wxKILL_NO_PROCESS
+    , wxKILL_OK
+    , wxLANDSCAPE
+    , wxLANGUAGE_ABKHAZIAN
+    , wxLANGUAGE_AFAR
+    , wxLANGUAGE_AFRIKAANS
+    , wxLANGUAGE_ALBANIAN
+    , wxLANGUAGE_AMHARIC
+    , wxLANGUAGE_ARABIC
+    , wxLANGUAGE_ARABIC_ALGERIA
+    , wxLANGUAGE_ARABIC_BAHRAIN
+    , wxLANGUAGE_ARABIC_EGYPT
+    , wxLANGUAGE_ARABIC_IRAQ
+    , wxLANGUAGE_ARABIC_JORDAN
+    , wxLANGUAGE_ARABIC_KUWAIT
+    , wxLANGUAGE_ARABIC_LEBANON
+    , wxLANGUAGE_ARABIC_LIBYA
+    , wxLANGUAGE_ARABIC_MOROCCO
+    , wxLANGUAGE_ARABIC_OMAN
+    , wxLANGUAGE_ARABIC_QATAR
+    , wxLANGUAGE_ARABIC_SAUDI_ARABIA
+    , wxLANGUAGE_ARABIC_SUDAN
+    , wxLANGUAGE_ARABIC_SYRIA
+    , wxLANGUAGE_ARABIC_TUNISIA
+    , wxLANGUAGE_ARABIC_UAE
+    , wxLANGUAGE_ARABIC_YEMEN
+    , wxLANGUAGE_ARMENIAN
+    , wxLANGUAGE_ASSAMESE
+    , wxLANGUAGE_AYMARA
+    , wxLANGUAGE_AZERI
+    , wxLANGUAGE_AZERI_CYRILLIC
+    , wxLANGUAGE_AZERI_LATIN
+    , wxLANGUAGE_BASHKIR
+    , wxLANGUAGE_BASQUE
+    , wxLANGUAGE_BELARUSIAN
+    , wxLANGUAGE_BENGALI
+    , wxLANGUAGE_BHUTANI
+    , wxLANGUAGE_BIHARI
+    , wxLANGUAGE_BISLAMA
+    , wxLANGUAGE_BRETON
+    , wxLANGUAGE_BULGARIAN
+    , wxLANGUAGE_BURMESE
+    , wxLANGUAGE_CAMBODIAN
+    , wxLANGUAGE_CATALAN
+    , wxLANGUAGE_CHINESE
+    , wxLANGUAGE_CHINESE_HONGKONG
+    , wxLANGUAGE_CHINESE_MACAU
+    , wxLANGUAGE_CHINESE_SIMPLIFIED
+    , wxLANGUAGE_CHINESE_SINGAPORE
+    , wxLANGUAGE_CHINESE_TAIWAN
+    , wxLANGUAGE_CHINESE_TRADITIONAL
+    , wxLANGUAGE_CORSICAN
+    , wxLANGUAGE_CROATIAN
+    , wxLANGUAGE_CZECH
+    , wxLANGUAGE_DANISH
+    , wxLANGUAGE_DEFAULT
+    , wxLANGUAGE_DUTCH
+    , wxLANGUAGE_DUTCH_BELGIAN
+    , wxLANGUAGE_ENGLISH
+    , wxLANGUAGE_ENGLISH_AUSTRALIA
+    , wxLANGUAGE_ENGLISH_BELIZE
+    , wxLANGUAGE_ENGLISH_BOTSWANA
+    , wxLANGUAGE_ENGLISH_CANADA
+    , wxLANGUAGE_ENGLISH_CARIBBEAN
+    , wxLANGUAGE_ENGLISH_DENMARK
+    , wxLANGUAGE_ENGLISH_EIRE
+    , wxLANGUAGE_ENGLISH_JAMAICA
+    , wxLANGUAGE_ENGLISH_NEW_ZEALAND
+    , wxLANGUAGE_ENGLISH_PHILIPPINES
+    , wxLANGUAGE_ENGLISH_SOUTH_AFRICA
+    , wxLANGUAGE_ENGLISH_TRINIDAD
+    , wxLANGUAGE_ENGLISH_UK
+    , wxLANGUAGE_ENGLISH_US
+    , wxLANGUAGE_ENGLISH_ZIMBABWE
+    , wxLANGUAGE_ESPERANTO
+    , wxLANGUAGE_ESTONIAN
+    , wxLANGUAGE_FAEROESE
+    , wxLANGUAGE_FARSI
+    , wxLANGUAGE_FIJI
+    , wxLANGUAGE_FINNISH
+    , wxLANGUAGE_FRENCH
+    , wxLANGUAGE_FRENCH_BELGIAN
+    , wxLANGUAGE_FRENCH_CANADIAN
+    , wxLANGUAGE_FRENCH_LUXEMBOURG
+    , wxLANGUAGE_FRENCH_MONACO
+    , wxLANGUAGE_FRENCH_SWISS
+    , wxLANGUAGE_FRISIAN
+    , wxLANGUAGE_GALICIAN
+    , wxLANGUAGE_GEORGIAN
+    , wxLANGUAGE_GERMAN
+    , wxLANGUAGE_GERMAN_AUSTRIAN
+    , wxLANGUAGE_GERMAN_BELGIUM
+    , wxLANGUAGE_GERMAN_LIECHTENSTEIN
+    , wxLANGUAGE_GERMAN_LUXEMBOURG
+    , wxLANGUAGE_GERMAN_SWISS
+    , wxLANGUAGE_GREEK
+    , wxLANGUAGE_GREENLANDIC
+    , wxLANGUAGE_GUARANI
+    , wxLANGUAGE_GUJARATI
+    , wxLANGUAGE_HAUSA
+    , wxLANGUAGE_HEBREW
+    , wxLANGUAGE_HINDI
+    , wxLANGUAGE_HUNGARIAN
+    , wxLANGUAGE_ICELANDIC
+    , wxLANGUAGE_INDONESIAN
+    , wxLANGUAGE_INTERLINGUA
+    , wxLANGUAGE_INTERLINGUE
+    , wxLANGUAGE_INUKTITUT
+    , wxLANGUAGE_INUPIAK
+    , wxLANGUAGE_IRISH
+    , wxLANGUAGE_ITALIAN
+    , wxLANGUAGE_ITALIAN_SWISS
+    , wxLANGUAGE_JAPANESE
+    , wxLANGUAGE_JAVANESE
+    , wxLANGUAGE_KANNADA
+    , wxLANGUAGE_KASHMIRI
+    , wxLANGUAGE_KASHMIRI_INDIA
+    , wxLANGUAGE_KAZAKH
+    , wxLANGUAGE_KERNEWEK
+    , wxLANGUAGE_KINYARWANDA
+    , wxLANGUAGE_KIRGHIZ
+    , wxLANGUAGE_KIRUNDI
+    , wxLANGUAGE_KONKANI
+    , wxLANGUAGE_KOREAN
+    , wxLANGUAGE_KURDISH
+    , wxLANGUAGE_LAOTHIAN
+    , wxLANGUAGE_LATIN
+    , wxLANGUAGE_LATVIAN
+    , wxLANGUAGE_LINGALA
+    , wxLANGUAGE_LITHUANIAN
+    , wxLANGUAGE_MACEDONIAN
+    , wxLANGUAGE_MALAGASY
+    , wxLANGUAGE_MALAY
+    , wxLANGUAGE_MALAYALAM
+    , wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM
+    , wxLANGUAGE_MALAY_MALAYSIA
+    , wxLANGUAGE_MALTESE
+    , wxLANGUAGE_MANIPURI
+    , wxLANGUAGE_MAORI
+    , wxLANGUAGE_MARATHI
+    , wxLANGUAGE_MOLDAVIAN
+    , wxLANGUAGE_MONGOLIAN
+    , wxLANGUAGE_NAURU
+    , wxLANGUAGE_NEPALI
+    , wxLANGUAGE_NEPALI_INDIA
+    , wxLANGUAGE_NORWEGIAN_BOKMAL
+    , wxLANGUAGE_NORWEGIAN_NYNORSK
+    , wxLANGUAGE_OCCITAN
+    , wxLANGUAGE_ORIYA
+    , wxLANGUAGE_OROMO
+    , wxLANGUAGE_PASHTO
+    , wxLANGUAGE_POLISH
+    , wxLANGUAGE_PORTUGUESE
+    , wxLANGUAGE_PORTUGUESE_BRAZILIAN
+    , wxLANGUAGE_PUNJABI
+    , wxLANGUAGE_QUECHUA
+    , wxLANGUAGE_RHAETO_ROMANCE
+    , wxLANGUAGE_ROMANIAN
+    , wxLANGUAGE_RUSSIAN
+    , wxLANGUAGE_RUSSIAN_UKRAINE
+    , wxLANGUAGE_SAMOAN
+    , wxLANGUAGE_SANGHO
+    , wxLANGUAGE_SANSKRIT
+    , wxLANGUAGE_SCOTS_GAELIC
+    , wxLANGUAGE_SERBIAN
+    , wxLANGUAGE_SERBIAN_CYRILLIC
+    , wxLANGUAGE_SERBIAN_LATIN
+    , wxLANGUAGE_SERBO_CROATIAN
+    , wxLANGUAGE_SESOTHO
+    , wxLANGUAGE_SETSWANA
+    , wxLANGUAGE_SHONA
+    , wxLANGUAGE_SINDHI
+    , wxLANGUAGE_SINHALESE
+    , wxLANGUAGE_SISWATI
+    , wxLANGUAGE_SLOVAK
+    , wxLANGUAGE_SLOVENIAN
+    , wxLANGUAGE_SOMALI
+    , wxLANGUAGE_SPANISH
+    , wxLANGUAGE_SPANISH_ARGENTINA
+    , wxLANGUAGE_SPANISH_BOLIVIA
+    , wxLANGUAGE_SPANISH_CHILE
+    , wxLANGUAGE_SPANISH_COLOMBIA
+    , wxLANGUAGE_SPANISH_COSTA_RICA
+    , wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC
+    , wxLANGUAGE_SPANISH_ECUADOR
+    , wxLANGUAGE_SPANISH_EL_SALVADOR
+    , wxLANGUAGE_SPANISH_GUATEMALA
+    , wxLANGUAGE_SPANISH_HONDURAS
+    , wxLANGUAGE_SPANISH_MEXICAN
+    , wxLANGUAGE_SPANISH_MODERN
+    , wxLANGUAGE_SPANISH_NICARAGUA
+    , wxLANGUAGE_SPANISH_PANAMA
+    , wxLANGUAGE_SPANISH_PARAGUAY
+    , wxLANGUAGE_SPANISH_PERU
+    , wxLANGUAGE_SPANISH_PUERTO_RICO
+    , wxLANGUAGE_SPANISH_URUGUAY
+    , wxLANGUAGE_SPANISH_US
+    , wxLANGUAGE_SPANISH_VENEZUELA
+    , wxLANGUAGE_SUNDANESE
+    , wxLANGUAGE_SWAHILI
+    , wxLANGUAGE_SWEDISH
+    , wxLANGUAGE_SWEDISH_FINLAND
+    , wxLANGUAGE_TAGALOG
+    , wxLANGUAGE_TAJIK
+    , wxLANGUAGE_TAMIL
+    , wxLANGUAGE_TATAR
+    , wxLANGUAGE_TELUGU
+    , wxLANGUAGE_THAI
+    , wxLANGUAGE_TIBETAN
+    , wxLANGUAGE_TIGRINYA
+    , wxLANGUAGE_TONGA
+    , wxLANGUAGE_TSONGA
+    , wxLANGUAGE_TURKISH
+    , wxLANGUAGE_TURKMEN
+    , wxLANGUAGE_TWI
+    , wxLANGUAGE_UIGHUR
+    , wxLANGUAGE_UKRAINIAN
+    , wxLANGUAGE_UNKNOWN
+    , wxLANGUAGE_URDU
+    , wxLANGUAGE_URDU_INDIA
+    , wxLANGUAGE_URDU_PAKISTAN
+    , wxLANGUAGE_USER_DEFINE
+    , wxLANGUAGE_UZBEK
+    , wxLANGUAGE_UZBEK_CYRILLIC
+    , wxLANGUAGE_UZBEK_LATIN
+    , wxLANGUAGE_VIETNAMESE
+    , wxLANGUAGE_VOLAPUK
+    , wxLANGUAGE_WELSH
+    , wxLANGUAGE_WOLOF
+    , wxLANGUAGE_XHOSA
+    , wxLANGUAGE_YIDDISH
+    , wxLANGUAGE_YORUBA
+    , wxLANGUAGE_ZHUANG
+    , wxLANGUAGE_ZULU
+    , wxLAYOUT_BOTTOM
+    , wxLAYOUT_DEFAULT_MARGIN
+    , wxLAYOUT_HORIZONTAL
+    , wxLAYOUT_LEFT
+    , wxLAYOUT_NONE
+    , wxLAYOUT_RIGHT
+    , wxLAYOUT_TOP
+    , wxLAYOUT_VERTICAL
+    , wxLB_ALWAYS_SB
+    , wxLB_EXTENDED
+    , wxLB_MULTIPLE
+    , wxLB_NEEDED_SB
+    , wxLB_OWNERDRAW
+    , wxLB_SINGLE
+    , wxLB_SORT
+    , wxLC_ALIGN_LEFT
+    , wxLC_ALIGN_TOP
+    , wxLC_AUTOARRANGE
+    , wxLC_EDIT_LABELS
+    , wxLC_HRULES
+    , wxLC_ICON
+    , wxLC_LIST
+    , wxLC_MASK_ALIGN
+    , wxLC_MASK_SORT
+    , wxLC_MASK_TYPE
+    , wxLC_NO_HEADER
+    , wxLC_NO_SORT_HEADER
+    , wxLC_REPORT
+    , wxLC_SINGLE_SEL
+    , wxLC_SMALL_ICON
+    , wxLC_SORT_ASCENDING
+    , wxLC_SORT_DESCENDING
+    , wxLC_VIRTUAL
+    , wxLC_VRULES
+    , wxLED_ALIGN_CENTER
+    , wxLED_ALIGN_LEFT
+    , wxLED_ALIGN_MASK
+    , wxLED_ALIGN_RIGHT
+    , wxLED_DRAW_FADED
+    , wxLEFT
+    , wxLIGHT
+    , wxLIGHT_GREY
+    , wxLIGHT_GREY_BRUSH
+    , wxLIGHT_GREY_PEN
+    , wxLIST_FORMAT_CENTER
+    , wxLIST_FORMAT_CENTRE
+    , wxLIST_FORMAT_LEFT
+    , wxLIST_FORMAT_RIGHT
+    , wxLIST_MASK_DATA
+    , wxLIST_MASK_FORMAT
+    , wxLIST_MASK_IMAGE
+    , wxLIST_MASK_STATE
+    , wxLIST_MASK_TEXT
+    , wxLIST_MASK_WIDTH
+    , wxLIST_NEXT_ABOVE
+    , wxLIST_NEXT_ALL
+    , wxLIST_NEXT_BELOW
+    , wxLIST_NEXT_LEFT
+    , wxLIST_NEXT_RIGHT
+    , wxLIST_STATE_CUT
+    , wxLIST_STATE_DONTCARE
+    , wxLIST_STATE_DROPHILITED
+    , wxLIST_STATE_FOCUSED
+    , wxLIST_STATE_SELECTED
+    , wxLITTLE_ENDIAN
+    , wxLOCALE_CONV_ENCODING
+    , wxLOCALE_DECIMAL_POINT
+    , wxLOCALE_LOAD_DEFAULT
+    , wxLOCALE_THOUSANDS_SEP
+    , wxLONG_DASH
+    , wxMACINTOSH
+    , wxMAXIMIZE
+    , wxMAXIMIZE_BOX
+    , wxMB_DOCKABLE
+    , wxMEDIACTRLPLAYERCONTROLS_DEFAULT
+    , wxMEDIACTRLPLAYERCONTROLS_NONE
+    , wxMEDIACTRLPLAYERCONTROLS_STEP
+    , wxMEDIACTRLPLAYERCONTROLS_VOLUME
+    , wxMEDIUM_GREY_BRUSH
+    , wxMEDIUM_GREY_PEN
+    , wxMENU_TEAROFF
+    , wxMGL_OS2
+    , wxMGL_UNIX
+    , wxMGL_WIN32
+    , wxMGL_X
+    , wxMINIMIZE_BOX
+    , wxMM_ANISOTROPIC
+    , wxMM_HIENGLISH
+    , wxMM_HIMETRIC
+    , wxMM_ISOTROPIC
+    , wxMM_LOENGLISH
+    , wxMM_LOMETRIC
+    , wxMM_METRIC
+    , wxMM_POINTS
+    , wxMM_TEXT
+    , wxMM_TWIPS
+    , wxMODERN
+    , wxMORE
+    , wxMOTIF_X
+    , wxMULTIPLE
+    , wxMUTEX_BUSY
+    , wxMUTEX_DEAD_LOCK
+    , wxMUTEX_MISC_ERROR
+    , wxMUTEX_NO_ERROR
+    , wxMUTEX_UNLOCKED
+    , wxNAND
+    , wxNB_FIXEDWIDTH
+    , wxNB_MULTILINE
+    , wxNEXTSTEP
+    , wxNO
+    , wxNOR
+    , wxNORMAL
+    , wxNORTH
+    , wxNOT_FOUND
+    , wxNO_3D
+    , wxNO_BORDER
+    , wxNO_DEFAULT
+    , wxNO_FULL_REPAINT_ON_RESIZE
+    , wxNO_OP
+    , wxNULL_FLAG
+    , wxODDEVEN_RULE
+    , wxOK
+    , wxOPEN
+    , wxOR
+    , wxOR_INVERT
+    , wxOR_REVERSE
+    , wxOS2_PM
+    , wxOVERWRITE_PROMPT
+    , wxPAPER_10X11
+    , wxPAPER_10X14
+    , wxPAPER_11X17
+    , wxPAPER_15X11
+    , wxPAPER_9X11
+    , wxPAPER_A2
+    , wxPAPER_A3
+    , wxPAPER_A3_EXTRA
+    , wxPAPER_A3_EXTRA_TRANSVERSE
+    , wxPAPER_A3_TRANSVERSE
+    , wxPAPER_A4
+    , wxPAPER_A4SMALL
+    , wxPAPER_A4_EXTRA
+    , wxPAPER_A4_PLUS
+    , wxPAPER_A4_TRANSVERSE
+    , wxPAPER_A5
+    , wxPAPER_A5_EXTRA
+    , wxPAPER_A5_TRANSVERSE
+    , wxPAPER_A_PLUS
+    , wxPAPER_B4
+    , wxPAPER_B5
+    , wxPAPER_B5_EXTRA
+    , wxPAPER_B5_TRANSVERSE
+    , wxPAPER_B_PLUS
+    , wxPAPER_CSHEET
+    , wxPAPER_DSHEET
+    , wxPAPER_ENV_10
+    , wxPAPER_ENV_11
+    , wxPAPER_ENV_12
+    , wxPAPER_ENV_14
+    , wxPAPER_ENV_9
+    , wxPAPER_ENV_B4
+    , wxPAPER_ENV_B5
+    , wxPAPER_ENV_B6
+    , wxPAPER_ENV_C3
+    , wxPAPER_ENV_C4
+    , wxPAPER_ENV_C5
+    , wxPAPER_ENV_C6
+    , wxPAPER_ENV_C65
+    , wxPAPER_ENV_DL
+    , wxPAPER_ENV_INVITE
+    , wxPAPER_ENV_ITALY
+    , wxPAPER_ENV_MONARCH
+    , wxPAPER_ENV_PERSONAL
+    , wxPAPER_ESHEET
+    , wxPAPER_EXECUTIVE
+    , wxPAPER_FANFOLD_LGL_GERMAN
+    , wxPAPER_FANFOLD_STD_GERMAN
+    , wxPAPER_FANFOLD_US
+    , wxPAPER_FOLIO
+    , wxPAPER_ISO_B4
+    , wxPAPER_JAPANESE_POSTCARD
+    , wxPAPER_LEDGER
+    , wxPAPER_LEGAL
+    , wxPAPER_LEGAL_EXTRA
+    , wxPAPER_LETTER
+    , wxPAPER_LETTERSMALL
+    , wxPAPER_LETTER_EXTRA
+    , wxPAPER_LETTER_EXTRA_TRANSVERSE
+    , wxPAPER_LETTER_PLUS
+    , wxPAPER_LETTER_TRANSVERSE
+    , wxPAPER_NONE
+    , wxPAPER_NOTE
+    , wxPAPER_QUARTO
+    , wxPAPER_STATEMENT
+    , wxPAPER_TABLOID
+    , wxPAPER_TABLOID_EXTRA
+    , wxPASSWORD
+    , wxPDP_ENDIAN
+    , wxPD_APP_MODAL
+    , wxPD_AUTO_HIDE
+    , wxPD_CAN_ABORT
+    , wxPD_ELAPSED_TIME
+    , wxPD_ESTIMATED_TIME
+    , wxPD_REMAINING_TIME
+    , wxPENSTYLE_BDIAGONAL_HATCH
+    , wxPENSTYLE_CROSSDIAG_HATCH
+    , wxPENSTYLE_CROSS_HATCH
+    , wxPENSTYLE_DOT
+    , wxPENSTYLE_DOT_DASH
+    , wxPENSTYLE_FDIAGONAL_HATCH
+    , wxPENSTYLE_FIRST_HATCH
+    , wxPENSTYLE_HORIZONTAL_HATCH
+    , wxPENSTYLE_INVALID
+    , wxPENSTYLE_LAST_HATCH
+    , wxPENSTYLE_LONG_DASH
+    , wxPENSTYLE_SHORT_DASH
+    , wxPENSTYLE_SOLID
+    , wxPENSTYLE_STIPPLE
+    , wxPENSTYLE_STIPPLE_MASK
+    , wxPENSTYLE_STIPPLE_MASK_OPAQUE
+    , wxPENSTYLE_TRANSPARENT
+    , wxPENSTYLE_USER_DASH
+    , wxPENSTYLE_VERTICAL_HATCH
+    , wxPENWINDOWS
+    , wxPG_DEFAULT_STYLE
+    , wxPLATFORM_CURRENT
+    , wxPLATFORM_MAC
+    , wxPLATFORM_OS2
+    , wxPLATFORM_UNIX
+    , wxPLATFORM_WINDOWS
+    , wxPORTRAIT
+    , wxPREVIEW_DEFAULT
+    , wxPREVIEW_FIRST
+    , wxPREVIEW_GOTO
+    , wxPREVIEW_LAST
+    , wxPREVIEW_NEXT
+    , wxPREVIEW_PREVIOUS
+    , wxPREVIEW_PRINT
+    , wxPREVIEW_ZOOM
+    , wxPRINTER_CANCELLED
+    , wxPRINTER_ERROR
+    , wxPRINTER_NO_ERROR
+    , wxPRINTID_BOTTOMMARGIN
+    , wxPRINTID_COMMAND
+    , wxPRINTID_COPIES
+    , wxPRINTID_FROM
+    , wxPRINTID_LEFTMARGIN
+    , wxPRINTID_OPTIONS
+    , wxPRINTID_ORIENTATION
+    , wxPRINTID_PAPERSIZE
+    , wxPRINTID_PRINTCOLOUR
+    , wxPRINTID_PRINTTOFILE
+    , wxPRINTID_RANGE
+    , wxPRINTID_RIGHTMARGIN
+    , wxPRINTID_SETUP
+    , wxPRINTID_STATIC
+    , wxPRINTID_TO
+    , wxPRINTID_TOPMARGIN
+    , wxPRINT_MODE_FILE
+    , wxPRINT_MODE_NONE
+    , wxPRINT_MODE_PREVIEW
+    , wxPRINT_MODE_PRINTER
+    , wxPROCESS_ENTER
+    , wxQT
+    , wxQUANTIZE_FILL_DESTINATION_IMAGE
+    , wxQUANTIZE_INCLUDE_WINDOWS_COLOURS
+    , wxQUANTIZE_RETURN_8BIT_DATA
+    , wxRAISED_BORDER
+    , wxRA_SPECIFY_COLS
+    , wxRA_SPECIFY_ROWS
+    , wxRB_GROUP
+    , wxRED
+    , wxRED_BRUSH
+    , wxRED_PEN
+    , wxRELATIONSHIP_ABOVE
+    , wxRELATIONSHIP_ABSOLUTE
+    , wxRELATIONSHIP_ASIS
+    , wxRELATIONSHIP_BELOW
+    , wxRELATIONSHIP_LEFTOF
+    , wxRELATIONSHIP_PERCENTOF
+    , wxRELATIONSHIP_RIGHTOF
+    , wxRELATIONSHIP_SAMEAS
+    , wxRELATIONSHIP_UNCONSTRAINED
+    , wxRESERVE_SPACE_EVEN_IF_HIDDEN
+    , wxRESET
+    , wxRESIZE_BORDER
+    , wxRETAINED
+    , wxRIGHT
+    , wxROMAN
+    , wxSASH_BOTTOM
+    , wxSASH_DRAG_DRAGGING
+    , wxSASH_DRAG_LEFT_DOWN
+    , wxSASH_DRAG_NONE
+    , wxSASH_LEFT
+    , wxSASH_NONE
+    , wxSASH_RIGHT
+    , wxSASH_STATUS_OK
+    , wxSASH_STATUS_OUT_OF_RANGE
+    , wxSASH_TOP
+    , wxSAVE
+    , wxSCRIPT
+    , wxSET
+    , wxSETUP
+    , wxSHAPED
+    , wxSHORT_DASH
+    , wxSHRINK
+    , wxSIGABRT
+    , wxSIGALRM
+    , wxSIGBUS
+    , wxSIGEMT
+    , wxSIGFPE
+    , wxSIGHUP
+    , wxSIGILL
+    , wxSIGINT
+    , wxSIGKILL
+    , wxSIGNONE
+    , wxSIGPIPE
+    , wxSIGQUIT
+    , wxSIGSEGV
+    , wxSIGSYS
+    , wxSIGTERM
+    , wxSIGTRAP
+    , wxSIZER_FLAG_BITS_MASK
+    , wxSIZE_ALLOW_MINUS_ONE
+    , wxSIZE_AUTO_HEIGHT
+    , wxSIZE_AUTO_WIDTH
+    , wxSIZE_NO_ADJUSTMENTS
+    , wxSIZE_USE_EXISTING
+    , wxSLANT
+    , wxSL_AUTOTICKS
+    , wxSL_BOTH
+    , wxSL_BOTTOM
+    , wxSL_LABELS
+    , wxSL_LEFT
+    , wxSL_NOTIFY_DRAG
+    , wxSL_RIGHT
+    , wxSL_SELRANGE
+    , wxSL_TOP
+    , wxSOLID
+    , wxSOUND_ASYNC
+    , wxSOUND_LOOP
+    , wxSOUND_SYNC
+    , wxSOUTH
+    , wxSPLIT_HORIZONTAL
+    , wxSPLIT_VERTICAL
+    , wxSP_3D
+    , wxSP_3DBORDER
+    , wxSP_3DSASH
+    , wxSP_ARROW_KEYS
+    , wxSP_BORDER
+    , wxSP_FULLSASH
+    , wxSP_LIVE_UPDATE
+    , wxSP_NOBORDER
+    , wxSP_NOSASH
+    , wxSP_PERMIT_UNSPLIT
+    , wxSP_WRAP
+    , wxSQL_CHAR
+    , wxSQL_C_CHAR
+    , wxSQL_C_DATE
+    , wxSQL_C_DEFAULT
+    , wxSQL_C_DOUBLE
+    , wxSQL_C_FLOAT
+    , wxSQL_C_LONG
+    , wxSQL_C_SHORT
+    , wxSQL_C_TIME
+    , wxSQL_C_TIMESTAMP
+    , wxSQL_DATA_AT_EXEC
+    , wxSQL_DATE
+    , wxSQL_DECIMAL
+    , wxSQL_DOUBLE
+    , wxSQL_ERROR
+    , wxSQL_FETCH_ABSOLUTE
+    , wxSQL_FETCH_BOOKMARK
+    , wxSQL_FETCH_FIRST
+    , wxSQL_FETCH_LAST
+    , wxSQL_FETCH_NEXT
+    , wxSQL_FETCH_PRIOR
+    , wxSQL_FETCH_RELATIVE
+    , wxSQL_FLOAT
+    , wxSQL_INTEGER
+    , wxSQL_INVALID_HANDLE
+    , wxSQL_NO_DATA_FOUND
+    , wxSQL_NO_NULLS
+    , wxSQL_NTS
+    , wxSQL_NULLABLE
+    , wxSQL_NULLABLE_UNKNOWN
+    , wxSQL_NULL_DATA
+    , wxSQL_NUMERIC
+    , wxSQL_REAL
+    , wxSQL_SMALLINT
+    , wxSQL_SUCCESS
+    , wxSQL_SUCCESS_WITH_INFO
+    , wxSQL_TIME
+    , wxSQL_TIMESTAMP
+    , wxSQL_VARCHAR
+    , wxSRC_INVERT
+    , wxSTATIC_BORDER
+    , wxSTAY_ON_TOP
+    , wxSTC_ADA_CHARACTER
+    , wxSTC_ADA_CHARACTEREOL
+    , wxSTC_ADA_COMMENTLINE
+    , wxSTC_ADA_DEFAULT
+    , wxSTC_ADA_DELIMITER
+    , wxSTC_ADA_IDENTIFIER
+    , wxSTC_ADA_ILLEGAL
+    , wxSTC_ADA_LABEL
+    , wxSTC_ADA_NUMBER
+    , wxSTC_ADA_STRING
+    , wxSTC_ADA_STRINGEOL
+    , wxSTC_ADA_WORD
+    , wxSTC_APDL_ARGUMENT
+    , wxSTC_APDL_COMMAND
+    , wxSTC_APDL_COMMENT
+    , wxSTC_APDL_COMMENTBLOCK
+    , wxSTC_APDL_DEFAULT
+    , wxSTC_APDL_FUNCTION
+    , wxSTC_APDL_NUMBER
+    , wxSTC_APDL_OPERATOR
+    , wxSTC_APDL_PROCESSOR
+    , wxSTC_APDL_SLASHCOMMAND
+    , wxSTC_APDL_STARCOMMAND
+    , wxSTC_APDL_STRING
+    , wxSTC_APDL_WORD
+    , wxSTC_ASM_COMMENT
+    , wxSTC_ASM_CPUINSTRUCTION
+    , wxSTC_ASM_DEFAULT
+    , wxSTC_ASM_DIRECTIVE
+    , wxSTC_ASM_DIRECTIVEOPERAND
+    , wxSTC_ASM_IDENTIFIER
+    , wxSTC_ASM_MATHINSTRUCTION
+    , wxSTC_ASM_NUMBER
+    , wxSTC_ASM_OPERATOR
+    , wxSTC_ASM_REGISTER
+    , wxSTC_ASM_STRING
+    , wxSTC_ASN1_ATTRIBUTE
+    , wxSTC_ASN1_COMMENT
+    , wxSTC_ASN1_DEFAULT
+    , wxSTC_ASN1_DESCRIPTOR
+    , wxSTC_ASN1_IDENTIFIER
+    , wxSTC_ASN1_KEYWORD
+    , wxSTC_ASN1_OID
+    , wxSTC_ASN1_OPERATOR
+    , wxSTC_ASN1_SCALAR
+    , wxSTC_ASN1_STRING
+    , wxSTC_ASN1_TYPE
+    , wxSTC_AU3_COMMENT
+    , wxSTC_AU3_COMMENTBLOCK
+    , wxSTC_AU3_COMOBJ
+    , wxSTC_AU3_DEFAULT
+    , wxSTC_AU3_EXPAND
+    , wxSTC_AU3_FUNCTION
+    , wxSTC_AU3_KEYWORD
+    , wxSTC_AU3_MACRO
+    , wxSTC_AU3_NUMBER
+    , wxSTC_AU3_OPERATOR
+    , wxSTC_AU3_PREPROCESSOR
+    , wxSTC_AU3_SENT
+    , wxSTC_AU3_SPECIAL
+    , wxSTC_AU3_STRING
+    , wxSTC_AU3_VARIABLE
+    , wxSTC_AVE_COMMENT
+    , wxSTC_AVE_DEFAULT
+    , wxSTC_AVE_ENUM
+    , wxSTC_AVE_IDENTIFIER
+    , wxSTC_AVE_NUMBER
+    , wxSTC_AVE_OPERATOR
+    , wxSTC_AVE_STRING
+    , wxSTC_AVE_STRINGEOL
+    , wxSTC_AVE_WORD
+    , wxSTC_AVE_WORD1
+    , wxSTC_AVE_WORD2
+    , wxSTC_AVE_WORD3
+    , wxSTC_AVE_WORD4
+    , wxSTC_AVE_WORD5
+    , wxSTC_AVE_WORD6
+    , wxSTC_BAAN_COMMENT
+    , wxSTC_BAAN_COMMENTDOC
+    , wxSTC_BAAN_DEFAULT
+    , wxSTC_BAAN_IDENTIFIER
+    , wxSTC_BAAN_NUMBER
+    , wxSTC_BAAN_OPERATOR
+    , wxSTC_BAAN_PREPROCESSOR
+    , wxSTC_BAAN_STRING
+    , wxSTC_BAAN_STRINGEOL
+    , wxSTC_BAAN_WORD
+    , wxSTC_BAAN_WORD2
+    , wxSTC_BAT_COMMAND
+    , wxSTC_BAT_COMMENT
+    , wxSTC_BAT_DEFAULT
+    , wxSTC_BAT_HIDE
+    , wxSTC_BAT_IDENTIFIER
+    , wxSTC_BAT_LABEL
+    , wxSTC_BAT_OPERATOR
+    , wxSTC_BAT_WORD
+    , wxSTC_B_COMMENT
+    , wxSTC_B_DATE
+    , wxSTC_B_DEFAULT
+    , wxSTC_B_IDENTIFIER
+    , wxSTC_B_KEYWORD
+    , wxSTC_B_NUMBER
+    , wxSTC_B_OPERATOR
+    , wxSTC_B_PREPROCESSOR
+    , wxSTC_B_STRING
+    , wxSTC_CACHE_CARET
+    , wxSTC_CACHE_DOCUMENT
+    , wxSTC_CACHE_NONE
+    , wxSTC_CACHE_PAGE
+    , wxSTC_CAML_CHAR
+    , wxSTC_CAML_COMMENT
+    , wxSTC_CAML_COMMENT1
+    , wxSTC_CAML_COMMENT2
+    , wxSTC_CAML_COMMENT3
+    , wxSTC_CAML_DEFAULT
+    , wxSTC_CAML_IDENTIFIER
+    , wxSTC_CAML_KEYWORD
+    , wxSTC_CAML_KEYWORD2
+    , wxSTC_CAML_KEYWORD3
+    , wxSTC_CAML_LINENUM
+    , wxSTC_CAML_NUMBER
+    , wxSTC_CAML_OPERATOR
+    , wxSTC_CAML_STRING
+    , wxSTC_CAML_TAGNAME
+    , wxSTC_CARET_EVEN
+    , wxSTC_CARET_JUMPS
+    , wxSTC_CARET_SLOP
+    , wxSTC_CARET_STRICT
+    , wxSTC_CASE_LOWER
+    , wxSTC_CASE_MIXED
+    , wxSTC_CASE_UPPER
+    , wxSTC_CHARSET_ANSI
+    , wxSTC_CHARSET_ARABIC
+    , wxSTC_CHARSET_BALTIC
+    , wxSTC_CHARSET_CHINESEBIG5
+    , wxSTC_CHARSET_DEFAULT
+    , wxSTC_CHARSET_EASTEUROPE
+    , wxSTC_CHARSET_GB2312
+    , wxSTC_CHARSET_GREEK
+    , wxSTC_CHARSET_HANGUL
+    , wxSTC_CHARSET_HEBREW
+    , wxSTC_CHARSET_JOHAB
+    , wxSTC_CHARSET_MAC
+    , wxSTC_CHARSET_OEM
+    , wxSTC_CHARSET_RUSSIAN
+    , wxSTC_CHARSET_SHIFTJIS
+    , wxSTC_CHARSET_SYMBOL
+    , wxSTC_CHARSET_THAI
+    , wxSTC_CHARSET_TURKISH
+    , wxSTC_CHARSET_VIETNAMESE
+    , wxSTC_CLW_ATTRIBUTE
+    , wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION
+    , wxSTC_CLW_COMMENT
+    , wxSTC_CLW_COMPILER_DIRECTIVE
+    , wxSTC_CLW_DEFAULT
+    , wxSTC_CLW_DEPRECATED
+    , wxSTC_CLW_ERROR
+    , wxSTC_CLW_INTEGER_CONSTANT
+    , wxSTC_CLW_KEYWORD
+    , wxSTC_CLW_LABEL
+    , wxSTC_CLW_PICTURE_STRING
+    , wxSTC_CLW_REAL_CONSTANT
+    , wxSTC_CLW_RUNTIME_EXPRESSIONS
+    , wxSTC_CLW_STANDARD_EQUATE
+    , wxSTC_CLW_STRING
+    , wxSTC_CLW_STRUCTURE_DATA_TYPE
+    , wxSTC_CLW_USER_IDENTIFIER
+    , wxSTC_CMD_BACKTAB
+    , wxSTC_CMD_CANCEL
+    , wxSTC_CMD_CHARLEFT
+    , wxSTC_CMD_CHARLEFTEXTEND
+    , wxSTC_CMD_CHARLEFTRECTEXTEND
+    , wxSTC_CMD_CHARRIGHT
+    , wxSTC_CMD_CHARRIGHTEXTEND
+    , wxSTC_CMD_CHARRIGHTRECTEXTEND
+    , wxSTC_CMD_CLEAR
+    , wxSTC_CMD_COPY
+    , wxSTC_CMD_CUT
+    , wxSTC_CMD_DELETEBACK
+    , wxSTC_CMD_DELETEBACKNOTLINE
+    , wxSTC_CMD_DELLINELEFT
+    , wxSTC_CMD_DELLINERIGHT
+    , wxSTC_CMD_DELWORDLEFT
+    , wxSTC_CMD_DELWORDRIGHT
+    , wxSTC_CMD_DOCUMENTEND
+    , wxSTC_CMD_DOCUMENTENDEXTEND
+    , wxSTC_CMD_DOCUMENTSTART
+    , wxSTC_CMD_DOCUMENTSTARTEXTEND
+    , wxSTC_CMD_EDITTOGGLEOVERTYPE
+    , wxSTC_CMD_FORMFEED
+    , wxSTC_CMD_HOME
+    , wxSTC_CMD_HOMEDISPLAY
+    , wxSTC_CMD_HOMEDISPLAYEXTEND
+    , wxSTC_CMD_HOMEEXTEND
+    , wxSTC_CMD_HOMERECTEXTEND
+    , wxSTC_CMD_HOMEWRAP
+    , wxSTC_CMD_HOMEWRAPEXTEND
+    , wxSTC_CMD_LINECOPY
+    , wxSTC_CMD_LINECUT
+    , wxSTC_CMD_LINEDELETE
+    , wxSTC_CMD_LINEDOWN
+    , wxSTC_CMD_LINEDOWNEXTEND
+    , wxSTC_CMD_LINEDOWNRECTEXTEND
+    , wxSTC_CMD_LINEDUPLICATE
+    , wxSTC_CMD_LINEEND
+    , wxSTC_CMD_LINEENDDISPLAY
+    , wxSTC_CMD_LINEENDDISPLAYEXTEND
+    , wxSTC_CMD_LINEENDEXTEND
+    , wxSTC_CMD_LINEENDRECTEXTEND
+    , wxSTC_CMD_LINEENDWRAP
+    , wxSTC_CMD_LINEENDWRAPEXTEND
+    , wxSTC_CMD_LINESCROLLDOWN
+    , wxSTC_CMD_LINESCROLLUP
+    , wxSTC_CMD_LINETRANSPOSE
+    , wxSTC_CMD_LINEUP
+    , wxSTC_CMD_LINEUPEXTEND
+    , wxSTC_CMD_LINEUPRECTEXTEND
+    , wxSTC_CMD_LOWERCASE
+    , wxSTC_CMD_NEWLINE
+    , wxSTC_CMD_PAGEDOWN
+    , wxSTC_CMD_PAGEDOWNEXTEND
+    , wxSTC_CMD_PAGEDOWNRECTEXTEND
+    , wxSTC_CMD_PAGEUP
+    , wxSTC_CMD_PAGEUPEXTEND
+    , wxSTC_CMD_PAGEUPRECTEXTEND
+    , wxSTC_CMD_PARADOWN
+    , wxSTC_CMD_PARADOWNEXTEND
+    , wxSTC_CMD_PARAUP
+    , wxSTC_CMD_PARAUPEXTEND
+    , wxSTC_CMD_PASTE
+    , wxSTC_CMD_REDO
+    , wxSTC_CMD_SELECTALL
+    , wxSTC_CMD_STUTTEREDPAGEDOWN
+    , wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND
+    , wxSTC_CMD_STUTTEREDPAGEUP
+    , wxSTC_CMD_STUTTEREDPAGEUPEXTEND
+    , wxSTC_CMD_TAB
+    , wxSTC_CMD_UNDO
+    , wxSTC_CMD_UPPERCASE
+    , wxSTC_CMD_VCHOME
+    , wxSTC_CMD_VCHOMEEXTEND
+    , wxSTC_CMD_VCHOMERECTEXTEND
+    , wxSTC_CMD_VCHOMEWRAP
+    , wxSTC_CMD_VCHOMEWRAPEXTEND
+    , wxSTC_CMD_WORDLEFT
+    , wxSTC_CMD_WORDLEFTEND
+    , wxSTC_CMD_WORDLEFTENDEXTEND
+    , wxSTC_CMD_WORDLEFTEXTEND
+    , wxSTC_CMD_WORDPARTLEFT
+    , wxSTC_CMD_WORDPARTLEFTEXTEND
+    , wxSTC_CMD_WORDPARTRIGHT
+    , wxSTC_CMD_WORDPARTRIGHTEXTEND
+    , wxSTC_CMD_WORDRIGHT
+    , wxSTC_CMD_WORDRIGHTEND
+    , wxSTC_CMD_WORDRIGHTENDEXTEND
+    , wxSTC_CMD_WORDRIGHTEXTEND
+    , wxSTC_CMD_ZOOMIN
+    , wxSTC_CMD_ZOOMOUT
+    , wxSTC_CONF_COMMENT
+    , wxSTC_CONF_DEFAULT
+    , wxSTC_CONF_DIRECTIVE
+    , wxSTC_CONF_EXTENSION
+    , wxSTC_CONF_IDENTIFIER
+    , wxSTC_CONF_IP
+    , wxSTC_CONF_NUMBER
+    , wxSTC_CONF_OPERATOR
+    , wxSTC_CONF_PARAMETER
+    , wxSTC_CONF_STRING
+    , wxSTC_CP_DBCS
+    , wxSTC_CP_UTF8
+    , wxSTC_CSOUND_ARATE_VAR
+    , wxSTC_CSOUND_COMMENT
+    , wxSTC_CSOUND_COMMENTBLOCK
+    , wxSTC_CSOUND_DEFAULT
+    , wxSTC_CSOUND_GLOBAL_VAR
+    , wxSTC_CSOUND_HEADERSTMT
+    , wxSTC_CSOUND_IDENTIFIER
+    , wxSTC_CSOUND_INSTR
+    , wxSTC_CSOUND_IRATE_VAR
+    , wxSTC_CSOUND_KRATE_VAR
+    , wxSTC_CSOUND_NUMBER
+    , wxSTC_CSOUND_OPCODE
+    , wxSTC_CSOUND_OPERATOR
+    , wxSTC_CSOUND_PARAM
+    , wxSTC_CSOUND_STRINGEOL
+    , wxSTC_CSOUND_USERKEYWORD
+    , wxSTC_CSS_CLASS
+    , wxSTC_CSS_COMMENT
+    , wxSTC_CSS_DEFAULT
+    , wxSTC_CSS_DIRECTIVE
+    , wxSTC_CSS_DOUBLESTRING
+    , wxSTC_CSS_ID
+    , wxSTC_CSS_IDENTIFIER
+    , wxSTC_CSS_IMPORTANT
+    , wxSTC_CSS_OPERATOR
+    , wxSTC_CSS_PSEUDOCLASS
+    , wxSTC_CSS_SINGLESTRING
+    , wxSTC_CSS_TAG
+    , wxSTC_CSS_UNKNOWN_IDENTIFIER
+    , wxSTC_CSS_UNKNOWN_PSEUDOCLASS
+    , wxSTC_CSS_VALUE
+    , wxSTC_CURSORNORMAL
+    , wxSTC_CURSORWAIT
+    , wxSTC_C_CHARACTER
+    , wxSTC_C_COMMENT
+    , wxSTC_C_COMMENTDOC
+    , wxSTC_C_COMMENTDOCKEYWORD
+    , wxSTC_C_COMMENTDOCKEYWORDERROR
+    , wxSTC_C_COMMENTLINE
+    , wxSTC_C_COMMENTLINEDOC
+    , wxSTC_C_DEFAULT
+    , wxSTC_C_GLOBALCLASS
+    , wxSTC_C_IDENTIFIER
+    , wxSTC_C_NUMBER
+    , wxSTC_C_OPERATOR
+    , wxSTC_C_PREPROCESSOR
+    , wxSTC_C_REGEX
+    , wxSTC_C_STRING
+    , wxSTC_C_STRINGEOL
+    , wxSTC_C_UUID
+    , wxSTC_C_VERBATIM
+    , wxSTC_C_WORD
+    , wxSTC_C_WORD2
+    , wxSTC_DIFF_ADDED
+    , wxSTC_DIFF_COMMAND
+    , wxSTC_DIFF_COMMENT
+    , wxSTC_DIFF_DEFAULT
+    , wxSTC_DIFF_DELETED
+    , wxSTC_DIFF_HEADER
+    , wxSTC_DIFF_POSITION
+    , wxSTC_EDGE_BACKGROUND
+    , wxSTC_EDGE_LINE
+    , wxSTC_EDGE_NONE
+    , wxSTC_EIFFEL_CHARACTER
+    , wxSTC_EIFFEL_COMMENTLINE
+    , wxSTC_EIFFEL_DEFAULT
+    , wxSTC_EIFFEL_IDENTIFIER
+    , wxSTC_EIFFEL_NUMBER
+    , wxSTC_EIFFEL_OPERATOR
+    , wxSTC_EIFFEL_STRING
+    , wxSTC_EIFFEL_STRINGEOL
+    , wxSTC_EIFFEL_WORD
+    , wxSTC_EOL_CR
+    , wxSTC_EOL_CRLF
+    , wxSTC_EOL_LF
+    , wxSTC_ERLANG_ATOM
+    , wxSTC_ERLANG_CHARACTER
+    , wxSTC_ERLANG_COMMENT
+    , wxSTC_ERLANG_DEFAULT
+    , wxSTC_ERLANG_FUNCTION_NAME
+    , wxSTC_ERLANG_KEYWORD
+    , wxSTC_ERLANG_MACRO
+    , wxSTC_ERLANG_NODE_NAME
+    , wxSTC_ERLANG_NUMBER
+    , wxSTC_ERLANG_OPERATOR
+    , wxSTC_ERLANG_RECORD
+    , wxSTC_ERLANG_SEPARATOR
+    , wxSTC_ERLANG_STRING
+    , wxSTC_ERLANG_UNKNOWN
+    , wxSTC_ERLANG_VARIABLE
+    , wxSTC_ERR_BORLAND
+    , wxSTC_ERR_CMD
+    , wxSTC_ERR_CTAG
+    , wxSTC_ERR_DEFAULT
+    , wxSTC_ERR_DIFF_ADDITION
+    , wxSTC_ERR_DIFF_CHANGED
+    , wxSTC_ERR_DIFF_DELETION
+    , wxSTC_ERR_DIFF_MESSAGE
+    , wxSTC_ERR_ELF
+    , wxSTC_ERR_GCC
+    , wxSTC_ERR_IFC
+    , wxSTC_ERR_LUA
+    , wxSTC_ERR_MS
+    , wxSTC_ERR_NET
+    , wxSTC_ERR_PERL
+    , wxSTC_ERR_PHP
+    , wxSTC_ERR_PYTHON
+    , wxSTC_ESCRIPT_BRACE
+    , wxSTC_ESCRIPT_COMMENT
+    , wxSTC_ESCRIPT_COMMENTDOC
+    , wxSTC_ESCRIPT_COMMENTLINE
+    , wxSTC_ESCRIPT_DEFAULT
+    , wxSTC_ESCRIPT_IDENTIFIER
+    , wxSTC_ESCRIPT_NUMBER
+    , wxSTC_ESCRIPT_OPERATOR
+    , wxSTC_ESCRIPT_STRING
+    , wxSTC_ESCRIPT_WORD
+    , wxSTC_ESCRIPT_WORD2
+    , wxSTC_ESCRIPT_WORD3
+    , wxSTC_FIND_MATCHCASE
+    , wxSTC_FIND_POSIX
+    , wxSTC_FIND_REGEXP
+    , wxSTC_FIND_WHOLEWORD
+    , wxSTC_FIND_WORDSTART
+    , wxSTC_FOLDFLAG_BOX
+    , wxSTC_FOLDFLAG_LEVELNUMBERS
+    , wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED
+    , wxSTC_FOLDFLAG_LINEAFTER_EXPANDED
+    , wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED
+    , wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED
+    , wxSTC_FOLDLEVELBASE
+    , wxSTC_FOLDLEVELBOXFOOTERFLAG
+    , wxSTC_FOLDLEVELBOXHEADERFLAG
+    , wxSTC_FOLDLEVELCONTRACTED
+    , wxSTC_FOLDLEVELHEADERFLAG
+    , wxSTC_FOLDLEVELNUMBERMASK
+    , wxSTC_FOLDLEVELUNINDENT
+    , wxSTC_FOLDLEVELWHITEFLAG
+    , wxSTC_FS_ASM
+    , wxSTC_FS_BINNUMBER
+    , wxSTC_FS_COMMENT
+    , wxSTC_FS_COMMENTDOC
+    , wxSTC_FS_COMMENTDOCKEYWORD
+    , wxSTC_FS_COMMENTDOCKEYWORDERROR
+    , wxSTC_FS_COMMENTLINE
+    , wxSTC_FS_COMMENTLINEDOC
+    , wxSTC_FS_CONSTANT
+    , wxSTC_FS_DATE
+    , wxSTC_FS_DEFAULT
+    , wxSTC_FS_ERROR
+    , wxSTC_FS_HEXNUMBER
+    , wxSTC_FS_IDENTIFIER
+    , wxSTC_FS_KEYWORD
+    , wxSTC_FS_KEYWORD2
+    , wxSTC_FS_KEYWORD3
+    , wxSTC_FS_KEYWORD4
+    , wxSTC_FS_LABEL
+    , wxSTC_FS_NUMBER
+    , wxSTC_FS_OPERATOR
+    , wxSTC_FS_PREPROCESSOR
+    , wxSTC_FS_STRING
+    , wxSTC_FS_STRINGEOL
+    , wxSTC_F_COMMENT
+    , wxSTC_F_CONTINUATION
+    , wxSTC_F_DEFAULT
+    , wxSTC_F_IDENTIFIER
+    , wxSTC_F_LABEL
+    , wxSTC_F_NUMBER
+    , wxSTC_F_OPERATOR
+    , wxSTC_F_OPERATOR2
+    , wxSTC_F_PREPROCESSOR
+    , wxSTC_F_STRING1
+    , wxSTC_F_STRING2
+    , wxSTC_F_STRINGEOL
+    , wxSTC_F_WORD
+    , wxSTC_F_WORD2
+    , wxSTC_F_WORD3
+    , wxSTC_GC_ATTRIBUTE
+    , wxSTC_GC_COMMAND
+    , wxSTC_GC_COMMENTBLOCK
+    , wxSTC_GC_COMMENTLINE
+    , wxSTC_GC_CONTROL
+    , wxSTC_GC_DEFAULT
+    , wxSTC_GC_EVENT
+    , wxSTC_GC_GLOBAL
+    , wxSTC_GC_OPERATOR
+    , wxSTC_GC_STRING
+    , wxSTC_HA_CAPITAL
+    , wxSTC_HA_CHARACTER
+    , wxSTC_HA_CLASS
+    , wxSTC_HA_COMMENTBLOCK
+    , wxSTC_HA_COMMENTBLOCK2
+    , wxSTC_HA_COMMENTBLOCK3
+    , wxSTC_HA_COMMENTLINE
+    , wxSTC_HA_DATA
+    , wxSTC_HA_DEFAULT
+    , wxSTC_HA_IDENTIFIER
+    , wxSTC_HA_IMPORT
+    , wxSTC_HA_INSTANCE
+    , wxSTC_HA_KEYWORD
+    , wxSTC_HA_MODULE
+    , wxSTC_HA_NUMBER
+    , wxSTC_HA_OPERATOR
+    , wxSTC_HA_PREPROCESSOR
+    , wxSTC_HA_STRING
+    , wxSTC_HBA_COMMENTLINE
+    , wxSTC_HBA_DEFAULT
+    , wxSTC_HBA_IDENTIFIER
+    , wxSTC_HBA_NUMBER
+    , wxSTC_HBA_START
+    , wxSTC_HBA_STRING
+    , wxSTC_HBA_STRINGEOL
+    , wxSTC_HBA_WORD
+    , wxSTC_HB_COMMENTLINE
+    , wxSTC_HB_DEFAULT
+    , wxSTC_HB_IDENTIFIER
+    , wxSTC_HB_NUMBER
+    , wxSTC_HB_START
+    , wxSTC_HB_STRING
+    , wxSTC_HB_STRINGEOL
+    , wxSTC_HB_WORD
+    , wxSTC_HJA_COMMENT
+    , wxSTC_HJA_COMMENTDOC
+    , wxSTC_HJA_COMMENTLINE
+    , wxSTC_HJA_DEFAULT
+    , wxSTC_HJA_DOUBLESTRING
+    , wxSTC_HJA_KEYWORD
+    , wxSTC_HJA_NUMBER
+    , wxSTC_HJA_REGEX
+    , wxSTC_HJA_SINGLESTRING
+    , wxSTC_HJA_START
+    , wxSTC_HJA_STRINGEOL
+    , wxSTC_HJA_SYMBOLS
+    , wxSTC_HJA_WORD
+    , wxSTC_HJ_COMMENT
+    , wxSTC_HJ_COMMENTDOC
+    , wxSTC_HJ_COMMENTLINE
+    , wxSTC_HJ_DEFAULT
+    , wxSTC_HJ_DOUBLESTRING
+    , wxSTC_HJ_KEYWORD
+    , wxSTC_HJ_NUMBER
+    , wxSTC_HJ_REGEX
+    , wxSTC_HJ_SINGLESTRING
+    , wxSTC_HJ_START
+    , wxSTC_HJ_STRINGEOL
+    , wxSTC_HJ_SYMBOLS
+    , wxSTC_HJ_WORD
+    , wxSTC_HPA_CHARACTER
+    , wxSTC_HPA_CLASSNAME
+    , wxSTC_HPA_COMMENTLINE
+    , wxSTC_HPA_DEFAULT
+    , wxSTC_HPA_DEFNAME
+    , wxSTC_HPA_IDENTIFIER
+    , wxSTC_HPA_NUMBER
+    , wxSTC_HPA_OPERATOR
+    , wxSTC_HPA_START
+    , wxSTC_HPA_STRING
+    , wxSTC_HPA_TRIPLE
+    , wxSTC_HPA_TRIPLEDOUBLE
+    , wxSTC_HPA_WORD
+    , wxSTC_HPHP_COMMENT
+    , wxSTC_HPHP_COMMENTLINE
+    , wxSTC_HPHP_DEFAULT
+    , wxSTC_HPHP_HSTRING
+    , wxSTC_HPHP_HSTRING_VARIABLE
+    , wxSTC_HPHP_NUMBER
+    , wxSTC_HPHP_OPERATOR
+    , wxSTC_HPHP_SIMPLESTRING
+    , wxSTC_HPHP_VARIABLE
+    , wxSTC_HPHP_WORD
+    , wxSTC_HP_CHARACTER
+    , wxSTC_HP_CLASSNAME
+    , wxSTC_HP_COMMENTLINE
+    , wxSTC_HP_DEFAULT
+    , wxSTC_HP_DEFNAME
+    , wxSTC_HP_IDENTIFIER
+    , wxSTC_HP_NUMBER
+    , wxSTC_HP_OPERATOR
+    , wxSTC_HP_START
+    , wxSTC_HP_STRING
+    , wxSTC_HP_TRIPLE
+    , wxSTC_HP_TRIPLEDOUBLE
+    , wxSTC_HP_WORD
+    , wxSTC_H_ASP
+    , wxSTC_H_ASPAT
+    , wxSTC_H_ATTRIBUTE
+    , wxSTC_H_ATTRIBUTEUNKNOWN
+    , wxSTC_H_CDATA
+    , wxSTC_H_COMMENT
+    , wxSTC_H_DEFAULT
+    , wxSTC_H_DOUBLESTRING
+    , wxSTC_H_ENTITY
+    , wxSTC_H_NUMBER
+    , wxSTC_H_OTHER
+    , wxSTC_H_QUESTION
+    , wxSTC_H_SCRIPT
+    , wxSTC_H_SGML_1ST_PARAM
+    , wxSTC_H_SGML_1ST_PARAM_COMMENT
+    , wxSTC_H_SGML_BLOCK_DEFAULT
+    , wxSTC_H_SGML_COMMAND
+    , wxSTC_H_SGML_COMMENT
+    , wxSTC_H_SGML_DEFAULT
+    , wxSTC_H_SGML_DOUBLESTRING
+    , wxSTC_H_SGML_ENTITY
+    , wxSTC_H_SGML_ERROR
+    , wxSTC_H_SGML_SIMPLESTRING
+    , wxSTC_H_SGML_SPECIAL
+    , wxSTC_H_SINGLESTRING
+    , wxSTC_H_TAG
+    , wxSTC_H_TAGEND
+    , wxSTC_H_TAGUNKNOWN
+    , wxSTC_H_VALUE
+    , wxSTC_H_XCCOMMENT
+    , wxSTC_H_XMLEND
+    , wxSTC_H_XMLSTART
+    , wxSTC_INDIC0_MASK
+    , wxSTC_INDIC1_MASK
+    , wxSTC_INDIC2_MASK
+    , wxSTC_INDICS_MASK
+    , wxSTC_INDIC_DIAGONAL
+    , wxSTC_INDIC_HIDDEN
+    , wxSTC_INDIC_MAX
+    , wxSTC_INDIC_PLAIN
+    , wxSTC_INDIC_SQUIGGLE
+    , wxSTC_INDIC_STRIKE
+    , wxSTC_INDIC_TT
+    , wxSTC_INVALID_POSITION
+    , wxSTC_KEYWORDSET_MAX
+    , wxSTC_KEY_ADD
+    , wxSTC_KEY_BACK
+    , wxSTC_KEY_DELETE
+    , wxSTC_KEY_DIVIDE
+    , wxSTC_KEY_DOWN
+    , wxSTC_KEY_END
+    , wxSTC_KEY_ESCAPE
+    , wxSTC_KEY_HOME
+    , wxSTC_KEY_INSERT
+    , wxSTC_KEY_LEFT
+    , wxSTC_KEY_NEXT
+    , wxSTC_KEY_PRIOR
+    , wxSTC_KEY_RETURN
+    , wxSTC_KEY_RIGHT
+    , wxSTC_KEY_SUBTRACT
+    , wxSTC_KEY_TAB
+    , wxSTC_KEY_UP
+    , wxSTC_KIX_COMMENT
+    , wxSTC_KIX_DEFAULT
+    , wxSTC_KIX_FUNCTIONS
+    , wxSTC_KIX_IDENTIFIER
+    , wxSTC_KIX_KEYWORD
+    , wxSTC_KIX_MACRO
+    , wxSTC_KIX_NUMBER
+    , wxSTC_KIX_OPERATOR
+    , wxSTC_KIX_STRING1
+    , wxSTC_KIX_STRING2
+    , wxSTC_KIX_VAR
+    , wxSTC_LASTSTEPINUNDOREDO
+    , wxSTC_LEXER_START
+    , wxSTC_LEX_ADA
+    , wxSTC_LEX_ASM
+    , wxSTC_LEX_ASP
+    , wxSTC_LEX_AUTOMATIC
+    , wxSTC_LEX_AVE
+    , wxSTC_LEX_BAAN
+    , wxSTC_LEX_BATCH
+    , wxSTC_LEX_BULLANT
+    , wxSTC_LEX_CONF
+    , wxSTC_LEX_CONTAINER
+    , wxSTC_LEX_CPP
+    , wxSTC_LEX_CPPNOCASE
+    , wxSTC_LEX_CSOUND
+    , wxSTC_LEX_CSS
+    , wxSTC_LEX_DIFF
+    , wxSTC_LEX_EIFFEL
+    , wxSTC_LEX_EIFFELKW
+    , wxSTC_LEX_ERRORLIST
+    , wxSTC_LEX_ESCRIPT
+    , wxSTC_LEX_F77
+    , wxSTC_LEX_FLAGSHIP
+    , wxSTC_LEX_FORTRAN
+    , wxSTC_LEX_FREEBASIC
+    , wxSTC_LEX_HASKELL
+    , wxSTC_LEX_HTML
+    , wxSTC_LEX_LATEX
+    , wxSTC_LEX_LISP
+    , wxSTC_LEX_LOUT
+    , wxSTC_LEX_LUA
+    , wxSTC_LEX_MAKEFILE
+    , wxSTC_LEX_MATLAB
+    , wxSTC_LEX_MMIXAL
+    , wxSTC_LEX_NNCRONTAB
+    , wxSTC_LEX_NSIS
+    , wxSTC_LEX_NULL
+    , wxSTC_LEX_PASCAL
+    , wxSTC_LEX_PERL
+    , wxSTC_LEX_PHP
+    , wxSTC_LEX_PHPSCRIPT
+    , wxSTC_LEX_POV
+    , wxSTC_LEX_PROPERTIES
+    , wxSTC_LEX_PS
+    , wxSTC_LEX_PYTHON
+    , wxSTC_LEX_REBOL
+    , wxSTC_LEX_RUBY
+    , wxSTC_LEX_SCRIPTOL
+    , wxSTC_LEX_SMALLTALK
+    , wxSTC_LEX_SQL
+    , wxSTC_LEX_TADS3
+    , wxSTC_LEX_TCL
+    , wxSTC_LEX_VB
+    , wxSTC_LEX_VBSCRIPT
+    , wxSTC_LEX_XCODE
+    , wxSTC_LEX_XML
+    , wxSTC_LISP_COMMENT
+    , wxSTC_LISP_DEFAULT
+    , wxSTC_LISP_IDENTIFIER
+    , wxSTC_LISP_KEYWORD
+    , wxSTC_LISP_NUMBER
+    , wxSTC_LISP_OPERATOR
+    , wxSTC_LISP_STRING
+    , wxSTC_LISP_STRINGEOL
+    , wxSTC_LOT_ABORT
+    , wxSTC_LOT_BREAK
+    , wxSTC_LOT_DEFAULT
+    , wxSTC_LOT_FAIL
+    , wxSTC_LOT_HEADER
+    , wxSTC_LOT_PASS
+    , wxSTC_LOT_SET
+    , wxSTC_LOUT_COMMENT
+    , wxSTC_LOUT_DEFAULT
+    , wxSTC_LOUT_IDENTIFIER
+    , wxSTC_LOUT_NUMBER
+    , wxSTC_LOUT_OPERATOR
+    , wxSTC_LOUT_STRING
+    , wxSTC_LOUT_STRINGEOL
+    , wxSTC_LOUT_WORD
+    , wxSTC_LOUT_WORD2
+    , wxSTC_LOUT_WORD3
+    , wxSTC_LOUT_WORD4
+    , wxSTC_LUA_CHARACTER
+    , wxSTC_LUA_COMMENT
+    , wxSTC_LUA_COMMENTDOC
+    , wxSTC_LUA_COMMENTLINE
+    , wxSTC_LUA_DEFAULT
+    , wxSTC_LUA_IDENTIFIER
+    , wxSTC_LUA_LITERALSTRING
+    , wxSTC_LUA_NUMBER
+    , wxSTC_LUA_OPERATOR
+    , wxSTC_LUA_PREPROCESSOR
+    , wxSTC_LUA_STRING
+    , wxSTC_LUA_STRINGEOL
+    , wxSTC_LUA_WORD
+    , wxSTC_LUA_WORD2
+    , wxSTC_LUA_WORD3
+    , wxSTC_LUA_WORD4
+    , wxSTC_LUA_WORD5
+    , wxSTC_LUA_WORD6
+    , wxSTC_LUA_WORD7
+    , wxSTC_LUA_WORD8
+    , wxSTC_L_COMMAND
+    , wxSTC_L_COMMENT
+    , wxSTC_L_DEFAULT
+    , wxSTC_L_MATH
+    , wxSTC_L_TAG
+    , wxSTC_MAKE_COMMENT
+    , wxSTC_MAKE_DEFAULT
+    , wxSTC_MAKE_IDENTIFIER
+    , wxSTC_MAKE_IDEOL
+    , wxSTC_MAKE_OPERATOR
+    , wxSTC_MAKE_PREPROCESSOR
+    , wxSTC_MAKE_TARGET
+    , wxSTC_MARGIN_NUMBER
+    , wxSTC_MARGIN_SYMBOL
+    , wxSTC_MARKER_MAX
+    , wxSTC_MARKNUM_FOLDER
+    , wxSTC_MARKNUM_FOLDEREND
+    , wxSTC_MARKNUM_FOLDERMIDTAIL
+    , wxSTC_MARKNUM_FOLDEROPEN
+    , wxSTC_MARKNUM_FOLDEROPENMID
+    , wxSTC_MARKNUM_FOLDERSUB
+    , wxSTC_MARKNUM_FOLDERTAIL
+    , wxSTC_MARK_ARROW
+    , wxSTC_MARK_ARROWDOWN
+    , wxSTC_MARK_ARROWS
+    , wxSTC_MARK_BACKGROUND
+    , wxSTC_MARK_BOXMINUS
+    , wxSTC_MARK_BOXMINUSCONNECTED
+    , wxSTC_MARK_BOXPLUS
+    , wxSTC_MARK_BOXPLUSCONNECTED
+    , wxSTC_MARK_CHARACTER
+    , wxSTC_MARK_CIRCLE
+    , wxSTC_MARK_CIRCLEMINUS
+    , wxSTC_MARK_CIRCLEMINUSCONNECTED
+    , wxSTC_MARK_CIRCLEPLUS
+    , wxSTC_MARK_CIRCLEPLUSCONNECTED
+    , wxSTC_MARK_DOTDOTDOT
+    , wxSTC_MARK_EMPTY
+    , wxSTC_MARK_LCORNER
+    , wxSTC_MARK_LCORNERCURVE
+    , wxSTC_MARK_MINUS
+    , wxSTC_MARK_PIXMAP
+    , wxSTC_MARK_PLUS
+    , wxSTC_MARK_ROUNDRECT
+    , wxSTC_MARK_SHORTARROW
+    , wxSTC_MARK_SMALLRECT
+    , wxSTC_MARK_TCORNER
+    , wxSTC_MARK_TCORNERCURVE
+    , wxSTC_MARK_VLINE
+    , wxSTC_MASK_FOLDERS
+    , wxSTC_MATLAB_COMMAND
+    , wxSTC_MATLAB_COMMENT
+    , wxSTC_MATLAB_DEFAULT
+    , wxSTC_MATLAB_IDENTIFIER
+    , wxSTC_MATLAB_KEYWORD
+    , wxSTC_MATLAB_NUMBER
+    , wxSTC_MATLAB_OPERATOR
+    , wxSTC_MATLAB_STRING
+    , wxSTC_METAPOST_COMMAND
+    , wxSTC_METAPOST_DEFAULT
+    , wxSTC_METAPOST_EXTRA
+    , wxSTC_METAPOST_GROUP
+    , wxSTC_METAPOST_SPECIAL
+    , wxSTC_METAPOST_SYMBOL
+    , wxSTC_METAPOST_TEXT
+    , wxSTC_MMIXAL_CHAR
+    , wxSTC_MMIXAL_COMMENT
+    , wxSTC_MMIXAL_HEX
+    , wxSTC_MMIXAL_INCLUDE
+    , wxSTC_MMIXAL_LABEL
+    , wxSTC_MMIXAL_LEADWS
+    , wxSTC_MMIXAL_NUMBER
+    , wxSTC_MMIXAL_OPCODE
+    , wxSTC_MMIXAL_OPCODE_POST
+    , wxSTC_MMIXAL_OPCODE_PRE
+    , wxSTC_MMIXAL_OPCODE_UNKNOWN
+    , wxSTC_MMIXAL_OPCODE_VALID
+    , wxSTC_MMIXAL_OPERANDS
+    , wxSTC_MMIXAL_OPERATOR
+    , wxSTC_MMIXAL_REF
+    , wxSTC_MMIXAL_REGISTER
+    , wxSTC_MMIXAL_STRING
+    , wxSTC_MMIXAL_SYMBOL
+    , wxSTC_MODEVENTMASKALL
+    , wxSTC_MOD_BEFOREDELETE
+    , wxSTC_MOD_BEFOREINSERT
+    , wxSTC_MOD_CHANGEFOLD
+    , wxSTC_MOD_CHANGEMARKER
+    , wxSTC_MOD_CHANGESTYLE
+    , wxSTC_MOD_DELETETEXT
+    , wxSTC_MOD_INSERTTEXT
+    , wxSTC_MSSQL_COLUMN_NAME
+    , wxSTC_MSSQL_COLUMN_NAME_2
+    , wxSTC_MSSQL_COMMENT
+    , wxSTC_MSSQL_DATATYPE
+    , wxSTC_MSSQL_DEFAULT
+    , wxSTC_MSSQL_DEFAULT_PREF_DATATYPE
+    , wxSTC_MSSQL_FUNCTION
+    , wxSTC_MSSQL_GLOBAL_VARIABLE
+    , wxSTC_MSSQL_IDENTIFIER
+    , wxSTC_MSSQL_LINE_COMMENT
+    , wxSTC_MSSQL_NUMBER
+    , wxSTC_MSSQL_OPERATOR
+    , wxSTC_MSSQL_STATEMENT
+    , wxSTC_MSSQL_STORED_PROCEDURE
+    , wxSTC_MSSQL_STRING
+    , wxSTC_MSSQL_SYSTABLE
+    , wxSTC_MSSQL_VARIABLE
+    , wxSTC_NNCRONTAB_ASTERISK
+    , wxSTC_NNCRONTAB_COMMENT
+    , wxSTC_NNCRONTAB_DEFAULT
+    , wxSTC_NNCRONTAB_ENVIRONMENT
+    , wxSTC_NNCRONTAB_IDENTIFIER
+    , wxSTC_NNCRONTAB_KEYWORD
+    , wxSTC_NNCRONTAB_MODIFIER
+    , wxSTC_NNCRONTAB_NUMBER
+    , wxSTC_NNCRONTAB_SECTION
+    , wxSTC_NNCRONTAB_STRING
+    , wxSTC_NNCRONTAB_TASK
+    , wxSTC_NSIS_COMMENT
+    , wxSTC_NSIS_DEFAULT
+    , wxSTC_NSIS_FUNCTION
+    , wxSTC_NSIS_IFDEFINEDEF
+    , wxSTC_NSIS_LABEL
+    , wxSTC_NSIS_MACRODEF
+    , wxSTC_NSIS_SECTIONDEF
+    , wxSTC_NSIS_STRINGDQ
+    , wxSTC_NSIS_STRINGLQ
+    , wxSTC_NSIS_STRINGRQ
+    , wxSTC_NSIS_STRINGVAR
+    , wxSTC_NSIS_SUBSECTIONDEF
+    , wxSTC_NSIS_USERDEFINED
+    , wxSTC_NSIS_VARIABLE
+    , wxSTC_OPTIONAL_START
+    , wxSTC_PERFORMED_REDO
+    , wxSTC_PERFORMED_UNDO
+    , wxSTC_PERFORMED_USER
+    , wxSTC_PL_ARRAY
+    , wxSTC_PL_BACKTICKS
+    , wxSTC_PL_CHARACTER
+    , wxSTC_PL_COMMENTLINE
+    , wxSTC_PL_DATASECTION
+    , wxSTC_PL_DEFAULT
+    , wxSTC_PL_ERROR
+    , wxSTC_PL_HASH
+    , wxSTC_PL_HERE_DELIM
+    , wxSTC_PL_HERE_Q
+    , wxSTC_PL_HERE_QQ
+    , wxSTC_PL_HERE_QX
+    , wxSTC_PL_IDENTIFIER
+    , wxSTC_PL_LONGQUOTE
+    , wxSTC_PL_NUMBER
+    , wxSTC_PL_OPERATOR
+    , wxSTC_PL_POD
+    , wxSTC_PL_PREPROCESSOR
+    , wxSTC_PL_PUNCTUATION
+    , wxSTC_PL_REGEX
+    , wxSTC_PL_REGSUBST
+    , wxSTC_PL_SCALAR
+    , wxSTC_PL_STRING
+    , wxSTC_PL_STRING_Q
+    , wxSTC_PL_STRING_QQ
+    , wxSTC_PL_STRING_QR
+    , wxSTC_PL_STRING_QW
+    , wxSTC_PL_STRING_QX
+    , wxSTC_PL_SYMBOLTABLE
+    , wxSTC_PL_WORD
+    , wxSTC_POV_BADDIRECTIVE
+    , wxSTC_POV_COMMENT
+    , wxSTC_POV_COMMENTLINE
+    , wxSTC_POV_DEFAULT
+    , wxSTC_POV_DIRECTIVE
+    , wxSTC_POV_IDENTIFIER
+    , wxSTC_POV_NUMBER
+    , wxSTC_POV_OPERATOR
+    , wxSTC_POV_STRING
+    , wxSTC_POV_STRINGEOL
+    , wxSTC_POV_WORD2
+    , wxSTC_POV_WORD3
+    , wxSTC_POV_WORD4
+    , wxSTC_POV_WORD5
+    , wxSTC_POV_WORD6
+    , wxSTC_POV_WORD7
+    , wxSTC_POV_WORD8
+    , wxSTC_PRINT_BLACKONWHITE
+    , wxSTC_PRINT_COLOURONWHITE
+    , wxSTC_PRINT_COLOURONWHITEDEFAULTBG
+    , wxSTC_PRINT_INVERTLIGHT
+    , wxSTC_PRINT_NORMAL
+    , wxSTC_PROPS_ASSIGNMENT
+    , wxSTC_PROPS_COMMENT
+    , wxSTC_PROPS_DEFAULT
+    , wxSTC_PROPS_DEFVAL
+    , wxSTC_PROPS_SECTION
+    , wxSTC_PS_BADSTRINGCHAR
+    , wxSTC_PS_BASE85STRING
+    , wxSTC_PS_COMMENT
+    , wxSTC_PS_DEFAULT
+    , wxSTC_PS_DSC_COMMENT
+    , wxSTC_PS_DSC_VALUE
+    , wxSTC_PS_HEXSTRING
+    , wxSTC_PS_IMMEVAL
+    , wxSTC_PS_KEYWORD
+    , wxSTC_PS_LITERAL
+    , wxSTC_PS_NAME
+    , wxSTC_PS_NUMBER
+    , wxSTC_PS_PAREN_ARRAY
+    , wxSTC_PS_PAREN_DICT
+    , wxSTC_PS_PAREN_PROC
+    , wxSTC_PS_TEXT
+    , wxSTC_P_CHARACTER
+    , wxSTC_P_CLASSNAME
+    , wxSTC_P_COMMENTBLOCK
+    , wxSTC_P_COMMENTLINE
+    , wxSTC_P_DEFAULT
+    , wxSTC_P_DEFNAME
+    , wxSTC_P_IDENTIFIER
+    , wxSTC_P_NUMBER
+    , wxSTC_P_OPERATOR
+    , wxSTC_P_STRING
+    , wxSTC_P_STRINGEOL
+    , wxSTC_P_TRIPLE
+    , wxSTC_P_TRIPLEDOUBLE
+    , wxSTC_P_WORD
+    , wxSTC_REBOL_BINARY
+    , wxSTC_REBOL_BRACEDSTRING
+    , wxSTC_REBOL_CHARACTER
+    , wxSTC_REBOL_COMMENTBLOCK
+    , wxSTC_REBOL_COMMENTLINE
+    , wxSTC_REBOL_DATE
+    , wxSTC_REBOL_DEFAULT
+    , wxSTC_REBOL_EMAIL
+    , wxSTC_REBOL_FILE
+    , wxSTC_REBOL_IDENTIFIER
+    , wxSTC_REBOL_ISSUE
+    , wxSTC_REBOL_MONEY
+    , wxSTC_REBOL_NUMBER
+    , wxSTC_REBOL_OPERATOR
+    , wxSTC_REBOL_PAIR
+    , wxSTC_REBOL_PREFACE
+    , wxSTC_REBOL_QUOTEDSTRING
+    , wxSTC_REBOL_TAG
+    , wxSTC_REBOL_TIME
+    , wxSTC_REBOL_TUPLE
+    , wxSTC_REBOL_URL
+    , wxSTC_REBOL_WORD
+    , wxSTC_REBOL_WORD2
+    , wxSTC_REBOL_WORD3
+    , wxSTC_REBOL_WORD4
+    , wxSTC_REBOL_WORD5
+    , wxSTC_REBOL_WORD6
+    , wxSTC_REBOL_WORD7
+    , wxSTC_REBOL_WORD8
+    , wxSTC_SCMOD_ALT
+    , wxSTC_SCMOD_CTRL
+    , wxSTC_SCMOD_SHIFT
+    , wxSTC_SCRIPTOL_CHARACTER
+    , wxSTC_SCRIPTOL_COMMENT
+    , wxSTC_SCRIPTOL_COMMENTBASIC
+    , wxSTC_SCRIPTOL_COMMENTDOC
+    , wxSTC_SCRIPTOL_COMMENTDOCKEYWORD
+    , wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR
+    , wxSTC_SCRIPTOL_COMMENTLINE
+    , wxSTC_SCRIPTOL_COMMENTLINEDOC
+    , wxSTC_SCRIPTOL_DEFAULT
+    , wxSTC_SCRIPTOL_IDENTIFIER
+    , wxSTC_SCRIPTOL_NUMBER
+    , wxSTC_SCRIPTOL_OPERATOR
+    , wxSTC_SCRIPTOL_PREPROCESSOR
+    , wxSTC_SCRIPTOL_REGEX
+    , wxSTC_SCRIPTOL_STRING
+    , wxSTC_SCRIPTOL_STRINGEOL
+    , wxSTC_SCRIPTOL_UUID
+    , wxSTC_SCRIPTOL_VERBATIM
+    , wxSTC_SCRIPTOL_WORD
+    , wxSTC_SCRIPTOL_WORD2
+    , wxSTC_SEL_LINES
+    , wxSTC_SEL_RECTANGLE
+    , wxSTC_SEL_STREAM
+    , wxSTC_SH_BACKTICKS
+    , wxSTC_SH_CHARACTER
+    , wxSTC_SH_COMMENTLINE
+    , wxSTC_SH_DEFAULT
+    , wxSTC_SH_ERROR
+    , wxSTC_SH_HERE_DELIM
+    , wxSTC_SH_HERE_Q
+    , wxSTC_SH_IDENTIFIER
+    , wxSTC_SH_NUMBER
+    , wxSTC_SH_OPERATOR
+    , wxSTC_SH_PARAM
+    , wxSTC_SH_SCALAR
+    , wxSTC_SH_STRING
+    , wxSTC_SH_WORD
+    , wxSTC_SN_CODE
+    , wxSTC_SN_COMMENTLINE
+    , wxSTC_SN_COMMENTLINEBANG
+    , wxSTC_SN_DEFAULT
+    , wxSTC_SN_IDENTIFIER
+    , wxSTC_SN_NUMBER
+    , wxSTC_SN_OPERATOR
+    , wxSTC_SN_PREPROCESSOR
+    , wxSTC_SN_REGEXTAG
+    , wxSTC_SN_SIGNAL
+    , wxSTC_SN_STRING
+    , wxSTC_SN_STRINGEOL
+    , wxSTC_SN_USER
+    , wxSTC_SN_WORD
+    , wxSTC_SN_WORD2
+    , wxSTC_SN_WORD3
+    , wxSTC_SQL_CHARACTER
+    , wxSTC_SQL_COMMENT
+    , wxSTC_SQL_COMMENTDOC
+    , wxSTC_SQL_COMMENTDOCKEYWORD
+    , wxSTC_SQL_COMMENTDOCKEYWORDERROR
+    , wxSTC_SQL_COMMENTLINE
+    , wxSTC_SQL_COMMENTLINEDOC
+    , wxSTC_SQL_DEFAULT
+    , wxSTC_SQL_IDENTIFIER
+    , wxSTC_SQL_NUMBER
+    , wxSTC_SQL_OPERATOR
+    , wxSTC_SQL_QUOTEDIDENTIFIER
+    , wxSTC_SQL_SQLPLUS
+    , wxSTC_SQL_SQLPLUS_COMMENT
+    , wxSTC_SQL_SQLPLUS_PROMPT
+    , wxSTC_SQL_STRING
+    , wxSTC_SQL_USER1
+    , wxSTC_SQL_USER2
+    , wxSTC_SQL_USER3
+    , wxSTC_SQL_USER4
+    , wxSTC_SQL_WORD
+    , wxSTC_SQL_WORD2
+    , wxSTC_START
+    , wxSTC_STYLE_BRACEBAD
+    , wxSTC_STYLE_BRACELIGHT
+    , wxSTC_STYLE_CONTROLCHAR
+    , wxSTC_STYLE_DEFAULT
+    , wxSTC_STYLE_INDENTGUIDE
+    , wxSTC_STYLE_LASTPREDEFINED
+    , wxSTC_STYLE_LINENUMBER
+    , wxSTC_STYLE_MAX
+    , wxSTC_ST_ASSIGN
+    , wxSTC_ST_BINARY
+    , wxSTC_ST_BOOL
+    , wxSTC_ST_CHARACTER
+    , wxSTC_ST_COMMENT
+    , wxSTC_ST_DEFAULT
+    , wxSTC_ST_GLOBAL
+    , wxSTC_ST_KWSEND
+    , wxSTC_ST_NIL
+    , wxSTC_ST_NUMBER
+    , wxSTC_ST_RETURN
+    , wxSTC_ST_SELF
+    , wxSTC_ST_SPECIAL
+    , wxSTC_ST_SPEC_SEL
+    , wxSTC_ST_STRING
+    , wxSTC_ST_SUPER
+    , wxSTC_ST_SYMBOL
+    , wxSTC_T3_BLOCK_COMMENT
+    , wxSTC_T3_DEFAULT
+    , wxSTC_T3_D_STRING
+    , wxSTC_T3_HTML_DEFAULT
+    , wxSTC_T3_HTML_STRING
+    , wxSTC_T3_HTML_TAG
+    , wxSTC_T3_IDENTIFIER
+    , wxSTC_T3_KEYWORD
+    , wxSTC_T3_LIB_DIRECTIVE
+    , wxSTC_T3_LINE_COMMENT
+    , wxSTC_T3_MSG_PARAM
+    , wxSTC_T3_NUMBER
+    , wxSTC_T3_OPERATOR
+    , wxSTC_T3_PREPROCESSOR
+    , wxSTC_T3_S_STRING
+    , wxSTC_T3_USER1
+    , wxSTC_T3_USER2
+    , wxSTC_T3_USER3
+    , wxSTC_T3_X_DEFAULT
+    , wxSTC_T3_X_STRING
+    , wxSTC_TEX_COMMAND
+    , wxSTC_TEX_DEFAULT
+    , wxSTC_TEX_GROUP
+    , wxSTC_TEX_SPECIAL
+    , wxSTC_TEX_SYMBOL
+    , wxSTC_TEX_TEXT
+    , wxSTC_TIME_FOREVER
+    , wxSTC_VHDL_ATTRIBUTE
+    , wxSTC_VHDL_COMMENT
+    , wxSTC_VHDL_COMMENTLINEBANG
+    , wxSTC_VHDL_DEFAULT
+    , wxSTC_VHDL_IDENTIFIER
+    , wxSTC_VHDL_KEYWORD
+    , wxSTC_VHDL_NUMBER
+    , wxSTC_VHDL_OPERATOR
+    , wxSTC_VHDL_STDFUNCTION
+    , wxSTC_VHDL_STDOPERATOR
+    , wxSTC_VHDL_STDPACKAGE
+    , wxSTC_VHDL_STDTYPE
+    , wxSTC_VHDL_STRING
+    , wxSTC_VHDL_STRINGEOL
+    , wxSTC_VHDL_USERWORD
+    , wxSTC_VISIBLE_SLOP
+    , wxSTC_VISIBLE_STRICT
+    , wxSTC_V_COMMENT
+    , wxSTC_V_COMMENTLINE
+    , wxSTC_V_COMMENTLINEBANG
+    , wxSTC_V_DEFAULT
+    , wxSTC_V_IDENTIFIER
+    , wxSTC_V_NUMBER
+    , wxSTC_V_OPERATOR
+    , wxSTC_V_PREPROCESSOR
+    , wxSTC_V_STRING
+    , wxSTC_V_STRINGEOL
+    , wxSTC_V_USER
+    , wxSTC_V_WORD
+    , wxSTC_V_WORD2
+    , wxSTC_V_WORD3
+    , wxSTC_WRAP_NONE
+    , wxSTC_WRAP_WORD
+    , wxSTC_WS_INVISIBLE
+    , wxSTC_WS_VISIBLEAFTERINDENT
+    , wxSTC_WS_VISIBLEALWAYS
+    , wxSTC_YAML_COMMENT
+    , wxSTC_YAML_DEFAULT
+    , wxSTC_YAML_DOCUMENT
+    , wxSTC_YAML_ERROR
+    , wxSTC_YAML_IDENTIFIER
+    , wxSTC_YAML_KEYWORD
+    , wxSTC_YAML_NUMBER
+    , wxSTC_YAML_REFERENCE
+    , wxSTC_YAML_TEXT
+    , wxSTIPPLE
+    , wxSTIPPLE_MASK
+    , wxSTIPPLE_MASK_OPAQUE
+    , wxSTREAM_EOF
+    , wxSTREAM_NO_ERROR
+    , wxSTREAM_READ_ERROR
+    , wxSTREAM_WRITE_ERROR
+    , wxSTRETCH_NOT
+    , wxSTRING
+    , wxST_NO_AUTORESIZE
+    , wxST_SIZEGRIP
+    , wxSUNKEN_BORDER
+    , wxSWISS
+    , wxSW_3D
+    , wxSW_3DBORDER
+    , wxSW_3DSASH
+    , wxSW_BORDER
+    , wxSW_NOBORDER
+    , wxSYSTEM_MENU
+    , wxSYS_ANSI_FIXED_FONT
+    , wxSYS_ANSI_VAR_FONT
+    , wxSYS_BLACK_BRUSH
+    , wxSYS_BLACK_PEN
+    , wxSYS_BORDER_X
+    , wxSYS_BORDER_Y
+    , wxSYS_CAPTION_Y
+    , wxSYS_COLOUR_3DDKSHADOW
+    , wxSYS_COLOUR_3DFACE
+    , wxSYS_COLOUR_3DHIGHLIGHT
+    , wxSYS_COLOUR_3DHILIGHT
+    , wxSYS_COLOUR_3DLIGHT
+    , wxSYS_COLOUR_3DSHADOW
+    , wxSYS_COLOUR_ACTIVEBORDER
+    , wxSYS_COLOUR_ACTIVECAPTION
+    , wxSYS_COLOUR_APPWORKSPACE
+    , wxSYS_COLOUR_BACKGROUND
+    , wxSYS_COLOUR_BTNFACE
+    , wxSYS_COLOUR_BTNHIGHLIGHT
+    , wxSYS_COLOUR_BTNHILIGHT
+    , wxSYS_COLOUR_BTNSHADOW
+    , wxSYS_COLOUR_BTNTEXT
+    , wxSYS_COLOUR_CAPTIONTEXT
+    , wxSYS_COLOUR_DESKTOP
+    , wxSYS_COLOUR_GRAYTEXT
+    , wxSYS_COLOUR_HIGHLIGHT
+    , wxSYS_COLOUR_HIGHLIGHTTEXT
+    , wxSYS_COLOUR_INACTIVEBORDER
+    , wxSYS_COLOUR_INACTIVECAPTION
+    , wxSYS_COLOUR_INACTIVECAPTIONTEXT
+    , wxSYS_COLOUR_INFOBK
+    , wxSYS_COLOUR_INFOTEXT
+    , wxSYS_COLOUR_LISTBOX
+    , wxSYS_COLOUR_MENU
+    , wxSYS_COLOUR_MENUTEXT
+    , wxSYS_COLOUR_SCROLLBAR
+    , wxSYS_COLOUR_WINDOW
+    , wxSYS_COLOUR_WINDOWFRAME
+    , wxSYS_COLOUR_WINDOWTEXT
+    , wxSYS_CURSOR_X
+    , wxSYS_CURSOR_Y
+    , wxSYS_DCLICK_X
+    , wxSYS_DCLICK_Y
+    , wxSYS_DEFAULT_GUI_FONT
+    , wxSYS_DEFAULT_PALETTE
+    , wxSYS_DEVICE_DEFAULT_FONT
+    , wxSYS_DKGRAY_BRUSH
+    , wxSYS_DRAG_X
+    , wxSYS_DRAG_Y
+    , wxSYS_EDGE_X
+    , wxSYS_EDGE_Y
+    , wxSYS_FRAMESIZE_X
+    , wxSYS_FRAMESIZE_Y
+    , wxSYS_GRAY_BRUSH
+    , wxSYS_HOLLOW_BRUSH
+    , wxSYS_HSCROLL_ARROW_X
+    , wxSYS_HSCROLL_ARROW_Y
+    , wxSYS_HSCROLL_Y
+    , wxSYS_HTHUMB_X
+    , wxSYS_ICONSPACING_X
+    , wxSYS_ICONSPACING_Y
+    , wxSYS_ICON_X
+    , wxSYS_ICON_Y
+    , wxSYS_LTGRAY_BRUSH
+    , wxSYS_MENU_Y
+    , wxSYS_MOUSE_BUTTONS
+    , wxSYS_NETWORK_PRESENT
+    , wxSYS_NULL_BRUSH
+    , wxSYS_NULL_PEN
+    , wxSYS_OEM_FIXED_FONT
+    , wxSYS_PENWINDOWS_PRESENT
+    , wxSYS_SCREEN_DESKTOP
+    , wxSYS_SCREEN_NONE
+    , wxSYS_SCREEN_PDA
+    , wxSYS_SCREEN_SMALL
+    , wxSYS_SCREEN_TINY
+    , wxSYS_SCREEN_X
+    , wxSYS_SCREEN_Y
+    , wxSYS_SHOW_SOUNDS
+    , wxSYS_SMALLICON_X
+    , wxSYS_SMALLICON_Y
+    , wxSYS_SWAP_BUTTONS
+    , wxSYS_SYSTEM_FIXED_FONT
+    , wxSYS_SYSTEM_FONT
+    , wxSYS_VSCROLL_ARROW_X
+    , wxSYS_VSCROLL_ARROW_Y
+    , wxSYS_VSCROLL_X
+    , wxSYS_VTHUMB_Y
+    , wxSYS_WHITE_BRUSH
+    , wxSYS_WHITE_PEN
+    , wxSYS_WINDOWMIN_X
+    , wxSYS_WINDOWMIN_Y
+    , wxTAB_TRAVERSAL
+    , wxTB_3DBUTTONS
+    , wxTB_BOTTOM
+    , wxTB_DEFAULT_STYLE
+    , wxTB_DOCKABLE
+    , wxTB_FLAT
+    , wxTB_HORIZONTAL
+    , wxTB_HORZ_LAYOUT
+    , wxTB_HORZ_TEXT
+    , wxTB_LEFT
+    , wxTB_NOALIGN
+    , wxTB_NODIVIDER
+    , wxTB_NOICONS
+    , wxTB_NO_TOOLTIPS
+    , wxTB_RIGHT
+    , wxTB_TEXT
+    , wxTB_TOP
+    , wxTB_VERTICAL
+    , wxTC_FIXEDWIDTH
+    , wxTC_MULTILINE
+    , wxTC_OWNERDRAW
+    , wxTC_RIGHTJUSTIFY
+    , wxTELETYPE
+    , wxTEXT_ALIGNMENT_CENTER
+    , wxTEXT_ALIGNMENT_CENTRE
+    , wxTEXT_ALIGNMENT_DEFAULT
+    , wxTEXT_ALIGNMENT_JUSTIFIED
+    , wxTEXT_ALIGNMENT_LEFT
+    , wxTEXT_ALIGNMENT_RIGHT
+    , wxTEXT_ATTR_ALIGNMENT
+    , wxTEXT_ATTR_ALL
+    , wxTEXT_ATTR_BACKGROUND_COLOUR
+    , wxTEXT_ATTR_BULLET
+    , wxTEXT_ATTR_BULLET_NAME
+    , wxTEXT_ATTR_BULLET_NUMBER
+    , wxTEXT_ATTR_BULLET_STYLE
+    , wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE
+    , wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT
+    , wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT
+    , wxTEXT_ATTR_BULLET_STYLE_ARABIC
+    , wxTEXT_ATTR_BULLET_STYLE_BITMAP
+    , wxTEXT_ATTR_BULLET_STYLE_CONTINUATION
+    , wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER
+    , wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER
+    , wxTEXT_ATTR_BULLET_STYLE_NONE
+    , wxTEXT_ATTR_BULLET_STYLE_OUTLINE
+    , wxTEXT_ATTR_BULLET_STYLE_PARENTHESES
+    , wxTEXT_ATTR_BULLET_STYLE_PERIOD
+    , wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS
+    , wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER
+    , wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER
+    , wxTEXT_ATTR_BULLET_STYLE_STANDARD
+    , wxTEXT_ATTR_BULLET_STYLE_SYMBOL
+    , wxTEXT_ATTR_BULLET_TEXT
+    , wxTEXT_ATTR_CHARACTER
+    , wxTEXT_ATTR_CHARACTER_STYLE_NAME
+    , wxTEXT_ATTR_EFFECTS
+    , wxTEXT_ATTR_EFFECT_CAPITALS
+    , wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH
+    , wxTEXT_ATTR_EFFECT_EMBOSS
+    , wxTEXT_ATTR_EFFECT_ENGRAVE
+    , wxTEXT_ATTR_EFFECT_NONE
+    , wxTEXT_ATTR_EFFECT_OUTLINE
+    , wxTEXT_ATTR_EFFECT_SHADOW
+    , wxTEXT_ATTR_EFFECT_SMALL_CAPITALS
+    , wxTEXT_ATTR_EFFECT_STRIKETHROUGH
+    , wxTEXT_ATTR_EFFECT_SUBSCRIPT
+    , wxTEXT_ATTR_EFFECT_SUPERSCRIPT
+    , wxTEXT_ATTR_FONT
+    , wxTEXT_ATTR_FONT_ENCODING
+    , wxTEXT_ATTR_FONT_FACE
+    , wxTEXT_ATTR_FONT_FAMILY
+    , wxTEXT_ATTR_FONT_ITALIC
+    , wxTEXT_ATTR_FONT_PIXEL_SIZE
+    , wxTEXT_ATTR_FONT_POINT_SIZE
+    , wxTEXT_ATTR_FONT_SIZE
+    , wxTEXT_ATTR_FONT_STRIKETHROUGH
+    , wxTEXT_ATTR_FONT_UNDERLINE
+    , wxTEXT_ATTR_FONT_WEIGHT
+    , wxTEXT_ATTR_LEFT_INDENT
+    , wxTEXT_ATTR_LINE_SPACING
+    , wxTEXT_ATTR_LINE_SPACING_HALF
+    , wxTEXT_ATTR_LINE_SPACING_NORMAL
+    , wxTEXT_ATTR_LINE_SPACING_TWICE
+    , wxTEXT_ATTR_LIST_STYLE_NAME
+    , wxTEXT_ATTR_OUTLINE_LEVEL
+    , wxTEXT_ATTR_PAGE_BREAK
+    , wxTEXT_ATTR_PARAGRAPH
+    , wxTEXT_ATTR_PARAGRAPH_STYLE_NAME
+    , wxTEXT_ATTR_PARA_SPACING_AFTER
+    , wxTEXT_ATTR_PARA_SPACING_BEFORE
+    , wxTEXT_ATTR_RIGHT_INDENT
+    , wxTEXT_ATTR_TABS
+    , wxTEXT_ATTR_TEXT_COLOUR
+    , wxTEXT_ATTR_URL
+    , wxTEXT_TYPE_ANY
+    , wxTE_AUTO_SCROLL
+    , wxTE_AUTO_URL
+    , wxTE_BESTWRAP
+    , wxTE_CAPITALIZE
+    , wxTE_CENTER
+    , wxTE_CENTRE
+    , wxTE_CHARWRAP
+    , wxTE_DONTWRAP
+    , wxTE_HT_BEFORE
+    , wxTE_HT_BELOW
+    , wxTE_HT_BEYOND
+    , wxTE_HT_ON_TEXT
+    , wxTE_HT_UNKNOWN
+    , wxTE_LEFT
+    , wxTE_LINEWRAP
+    , wxTE_MULTILINE
+    , wxTE_NOHIDESEL
+    , wxTE_NO_VSCROLL
+    , wxTE_PASSWORD
+    , wxTE_PROCESS_ENTER
+    , wxTE_PROCESS_TAB
+    , wxTE_READONLY
+    , wxTE_RICH
+    , wxTE_RICH2
+    , wxTE_RIGHT
+    , wxTE_WORDWRAP
+    , wxTILE
+    , wxTINY_CAPTION_HORIZ
+    , wxTINY_CAPTION_VERT
+    , wxTOOL_BOTTOM
+    , wxTOOL_LEFT
+    , wxTOOL_RIGHT
+    , wxTOOL_TOP
+    , wxTOP
+    , wxTRANSPARENT
+    , wxTRANSPARENT_BRUSH
+    , wxTRANSPARENT_PEN
+    , wxTRANSPARENT_WINDOW
+    , wxTREE_HITTEST_ABOVE
+    , wxTREE_HITTEST_BELOW
+    , wxTREE_HITTEST_NOWHERE
+    , wxTREE_HITTEST_ONITEM
+    , wxTREE_HITTEST_ONITEMBUTTON
+    , wxTREE_HITTEST_ONITEMICON
+    , wxTREE_HITTEST_ONITEMINDENT
+    , wxTREE_HITTEST_ONITEMLABEL
+    , wxTREE_HITTEST_ONITEMLOWERPART
+    , wxTREE_HITTEST_ONITEMRIGHT
+    , wxTREE_HITTEST_ONITEMSTATEICON
+    , wxTREE_HITTEST_ONITEMUPPERPART
+    , wxTREE_HITTEST_TOLEFT
+    , wxTREE_HITTEST_TORIGHT
+    , wxTR_AQUA_BUTTONS
+    , wxTR_EDIT_LABELS
+    , wxTR_EXTENDED
+    , wxTR_FULL_ROW_HIGHLIGHT
+    , wxTR_HAS_BUTTONS
+    , wxTR_HAS_VARIABLE_ROW_HEIGHT
+    , wxTR_HIDE_ROOT
+    , wxTR_LINES_AT_ROOT
+    , wxTR_MULTIPLE
+    , wxTR_NO_BUTTONS
+    , wxTR_NO_LINES
+    , wxTR_ROW_LINES
+    , wxTR_SINGLE
+    , wxTR_TWIST_BUTTONS
+    , wxTreeItemIcon_Expanded
+    , wxTreeItemIcon_Normal
+    , wxTreeItemIcon_Selected
+    , wxTreeItemIcon_SelectedExpanded
+    , wxUNIX
+    , wxUNKNOWN
+    , wxUNKNOWN_PLATFORM
+    , wxUP
+    , wxUSER_COLOURS
+    , wxUSER_DASH
+    , wxVARIABLE
+    , wxVERTICAL
+    , wxVERTICAL_HATCH
+    , wxVSCROLL
+    , wxWANTS_CHARS
+    , wxWEST
+    , wxWHITE
+    , wxWHITE_BRUSH
+    , wxWHITE_PEN
+    , wxWIN32S
+    , wxWIN386
+    , wxWIN95
+    , wxWINDING_RULE
+    , wxWINDOWS
+    , wxWINDOWS_NT
+    , wxWINDOWS_OS2
+    , wxWS_EX_VALIDATE_RECURSIVELY
+    , wxXOR
+    , wxXRC_NONE
+    , wxXRC_NO_RELOADING
+    , wxXRC_NO_SUBCLASSING
+    , wxXRC_USE_LOCALE
+    , wxXVIEW_X
+    , wxYES
+    , wxYES_DEFAULT
+    , wxYES_NO
+    ) where
+
+import Data.Bits
+
+-- A utility function
+(<<) :: Int -> Int -> Int
+x << i = shift x i
+
+-- NEW! converted from wxWidgets\2.9.5\include\wx\defs.h
+
+-- From wxWidgets\2.9.5\include\wx\defs.h
+{-
+   The value of the first style is chosen to fit with
+   wxDeprecatedGUIConstants values below, don't change it.
+-}
+wxHATCHSTYLE_FIRST      :: Int
+wxHATCHSTYLE_FIRST      = 111
+wxHATCHSTYLE_BDIAGONAL  :: Int
+wxHATCHSTYLE_BDIAGONAL  = wxHATCHSTYLE_FIRST
+wxHATCHSTYLE_CROSSDIAG  :: Int
+wxHATCHSTYLE_CROSSDIAG  = wxHATCHSTYLE_BDIAGONAL + 1
+wxHATCHSTYLE_FDIAGONAL  :: Int
+wxHATCHSTYLE_FDIAGONAL  = wxHATCHSTYLE_CROSSDIAG + 1
+wxHATCHSTYLE_CROSS      :: Int
+wxHATCHSTYLE_CROSS      = wxHATCHSTYLE_FDIAGONAL + 1
+wxHATCHSTYLE_HORIZONTAL :: Int
+wxHATCHSTYLE_HORIZONTAL = wxHATCHSTYLE_CROSS + 1
+wxHATCHSTYLE_VERTICAL   :: Int
+wxHATCHSTYLE_VERTICAL   = wxHATCHSTYLE_HORIZONTAL + 1
+wxHATCHSTYLE_LAST       :: Int
+wxHATCHSTYLE_LAST       = wxHATCHSTYLE_VERTICAL
+
+
+-- End NEW!
+
+-- | A flag can be combined with other flags to a bit mask.
+type BitFlag = Int
+
+wxEXEC_ASYNC :: BitFlag
+wxEXEC_ASYNC = 0
+
+wxEXEC_SYNC :: BitFlag
+wxEXEC_SYNC = 1
+
+wxEXEC_NOHIDE :: BitFlag
+wxEXEC_NOHIDE = 2
+
+wxEXEC_MAKE_GROUP_LEADER :: BitFlag
+wxEXEC_MAKE_GROUP_LEADER = 4
+
+wxITEM_SEPARATOR :: Int
+wxITEM_SEPARATOR = (-1)
+
+wxITEM_NORMAL :: Int
+wxITEM_NORMAL = 0
+
+wxITEM_CHECK :: Int
+wxITEM_CHECK = 1
+
+wxITEM_RADIO :: Int
+wxITEM_RADIO = 2
+
+wxITEM_MAX :: Int
+wxITEM_MAX = 3
+
+wxCLOSE_BOX :: Int
+wxCLOSE_BOX = 4096
+
+wxFRAME_EX_CONTEXTHELP :: Int
+wxFRAME_EX_CONTEXTHELP = 4
+
+wxDIALOG_EX_CONTEXTHELP :: Int
+wxDIALOG_EX_CONTEXTHELP = 4
+
+wxFRAME_SHAPED :: Int
+wxFRAME_SHAPED = 16
+
+wxFULLSCREEN_ALL :: Int
+wxFULLSCREEN_ALL = 31
+
+wxTreeItemIcon_Normal :: Int
+wxTreeItemIcon_Normal = 0
+
+wxTreeItemIcon_Selected :: Int
+wxTreeItemIcon_Selected = 1
+
+wxTreeItemIcon_Expanded :: Int
+wxTreeItemIcon_Expanded = 2
+
+wxTreeItemIcon_SelectedExpanded :: Int
+wxTreeItemIcon_SelectedExpanded = 3
+
+wxCONFIG_USE_LOCAL_FILE :: Int
+wxCONFIG_USE_LOCAL_FILE = 1
+
+wxCONFIG_USE_GLOBAL_FILE :: Int
+wxCONFIG_USE_GLOBAL_FILE = 2
+
+wxCONFIG_USE_RELATIVE_PATH :: Int
+wxCONFIG_USE_RELATIVE_PATH = 4
+
+wxCONFIG_USE_NO_ESCAPE_CHARACTERS :: Int
+wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8
+
+wxCONFIG_TYPE_UNKNOWN :: Int
+wxCONFIG_TYPE_UNKNOWN = 0
+
+wxCONFIG_TYPE_STRING :: Int
+wxCONFIG_TYPE_STRING = 1
+
+wxCONFIG_TYPE_BOOLEAN :: Int
+wxCONFIG_TYPE_BOOLEAN = 2
+
+wxCONFIG_TYPE_INTEGER :: Int
+wxCONFIG_TYPE_INTEGER = 3
+
+wxCONFIG_TYPE_FLOAT :: Int
+wxCONFIG_TYPE_FLOAT = 4
+
+wxSIGNONE :: Int
+wxSIGNONE = 0
+
+wxSIGHUP :: Int
+wxSIGHUP = 1
+
+wxSIGINT :: Int
+wxSIGINT = 2
+
+wxSIGQUIT :: Int
+wxSIGQUIT = 3
+
+wxSIGILL :: Int
+wxSIGILL = 4
+
+wxSIGTRAP :: Int
+wxSIGTRAP = 5
+
+wxSIGABRT :: Int
+wxSIGABRT = 6
+
+wxSIGEMT :: Int
+wxSIGEMT = 7
+
+wxSIGFPE :: Int
+wxSIGFPE = 8
+
+wxSIGKILL :: Int
+wxSIGKILL = 9
+
+wxSIGBUS :: Int
+wxSIGBUS = 10
+
+wxSIGSEGV :: Int
+wxSIGSEGV = 11
+
+wxSIGSYS :: Int
+wxSIGSYS = 12
+
+wxSIGPIPE :: Int
+wxSIGPIPE = 13
+
+wxSIGALRM :: Int
+wxSIGALRM = 14
+
+wxSIGTERM :: Int
+wxSIGTERM = 15
+
+wxKILL_OK :: Int
+wxKILL_OK = 0
+
+wxKILL_BAD_SIGNAL :: Int
+wxKILL_BAD_SIGNAL = 1
+
+wxKILL_ACCESS_DENIED :: Int
+wxKILL_ACCESS_DENIED = 2
+
+wxKILL_NO_PROCESS :: Int
+wxKILL_NO_PROCESS = 3
+
+wxKILL_ERROR :: Int
+wxKILL_ERROR = 4
+
+wxSTREAM_NO_ERROR :: Int
+wxSTREAM_NO_ERROR = 0
+
+wxSTREAM_EOF :: Int
+wxSTREAM_EOF = 1
+
+wxSTREAM_WRITE_ERROR :: Int
+wxSTREAM_WRITE_ERROR = 2
+
+wxSTREAM_READ_ERROR :: Int
+wxSTREAM_READ_ERROR = 3
+
+wxNB_MULTILINE :: Int
+wxNB_MULTILINE = 256
+
+wxIMAGE_LIST_NORMAL :: Int
+wxIMAGE_LIST_NORMAL = 0
+
+wxIMAGE_LIST_SMALL :: Int
+wxIMAGE_LIST_SMALL = 1
+
+wxIMAGE_LIST_STATE :: Int
+wxIMAGE_LIST_STATE = 2
+
+
+-- wxToolBar style flags
+
+-- lay out the toolbar horizontally
+wxTB_HORIZONTAL  :: Int
+wxTB_HORIZONTAL  = wxHORIZONTAL    -- == 0x0004
+wxTB_TOP         :: Int
+wxTB_TOP         = wxTB_HORIZONTAL
+
+-- lay out the toolbar vertically
+wxTB_VERTICAL    :: Int
+wxTB_VERTICAL    = wxVERTICAL      -- == 0x0008
+
+wxTB_LEFT        :: Int
+wxTB_LEFT        = wxTB_VERTICAL
+
+-- show 3D buttons (wxToolBarSimple only)
+wxTB_3DBUTTONS   :: Int
+wxTB_3DBUTTONS   = 0x0010
+
+-- "flat" buttons (Win32/GTK only)
+wxTB_FLAT        :: Int
+wxTB_FLAT        = 0x0020
+
+-- dockable toolbar (GTK only)
+wxTB_DOCKABLE    :: Int
+wxTB_DOCKABLE    = 0x0040
+
+-- don't show the icons (they're shown by default)
+wxTB_NOICONS     :: Int
+wxTB_NOICONS     = 0x0080
+
+-- show the text (not shown by default)
+wxTB_TEXT        :: Int
+wxTB_TEXT        = 0x0100
+
+-- don't show the divider between toolbar and the window (Win32 only)
+wxTB_NODIVIDER   :: Int
+wxTB_NODIVIDER   = 0x0200
+
+-- no automatic alignment (Win32 only useless)
+wxTB_NOALIGN     :: Int
+wxTB_NOALIGN     = 0x0400
+
+-- show the text and the icons alongside not vertically stacked (Win32/GTK)
+wxTB_HORZ_LAYOUT :: Int
+wxTB_HORZ_LAYOUT = 0x0800
+
+wxTB_HORZ_TEXT   :: Int
+wxTB_HORZ_TEXT   = wxTB_HORZ_LAYOUT .|. wxTB_TEXT
+
+-- don't show the toolbar short help tooltips
+wxTB_NO_TOOLTIPS   :: Int
+wxTB_NO_TOOLTIPS   = 0x1000
+
+-- lay out toolbar at the bottom of the window
+wxTB_BOTTOM        :: Int
+wxTB_BOTTOM        = 0x2000
+
+-- lay out toolbar at the right edge of the window
+wxTB_RIGHT         :: Int
+wxTB_RIGHT         = 0x4000
+
+wxTB_DEFAULT_STYLE :: Int
+wxTB_DEFAULT_STYLE = wxTB_HORIZONTAL .|. wxTB_FLAT
+
+-- End wxToolBar style flags
+
+
+wxADJUST_MINSIZE :: Int
+wxADJUST_MINSIZE = 32768
+{-# DEPRECATED wxADJUST_MINSIZE "Don't use this" #-}
+
+wxDB_TYPE_NAME_LEN :: Int
+wxDB_TYPE_NAME_LEN = 40
+
+wxDB_MAX_STATEMENT_LEN :: Int
+wxDB_MAX_STATEMENT_LEN = 4096
+
+wxDB_MAX_WHERE_CLAUSE_LEN :: Int
+wxDB_MAX_WHERE_CLAUSE_LEN = 2048
+
+wxDB_MAX_ERROR_MSG_LEN :: Int
+wxDB_MAX_ERROR_MSG_LEN = 512
+
+wxDB_MAX_ERROR_HISTORY :: Int
+wxDB_MAX_ERROR_HISTORY = 5
+
+wxDB_MAX_TABLE_NAME_LEN :: Int
+wxDB_MAX_TABLE_NAME_LEN = 128
+
+wxDB_MAX_COLUMN_NAME_LEN :: Int
+wxDB_MAX_COLUMN_NAME_LEN = 128
+
+wxDB_DATA_TYPE_VARCHAR :: Int
+wxDB_DATA_TYPE_VARCHAR = 1
+
+wxDB_DATA_TYPE_INTEGER :: Int
+wxDB_DATA_TYPE_INTEGER = 2
+
+wxDB_DATA_TYPE_FLOAT :: Int
+wxDB_DATA_TYPE_FLOAT = 3
+
+wxDB_DATA_TYPE_DATE :: Int
+wxDB_DATA_TYPE_DATE = 4
+
+wxDB_DATA_TYPE_BLOB :: Int
+wxDB_DATA_TYPE_BLOB = 5
+
+wxDB_SELECT_KEYFIELDS :: Int
+wxDB_SELECT_KEYFIELDS = 1
+
+wxDB_SELECT_WHERE :: Int
+wxDB_SELECT_WHERE = 2
+
+wxDB_SELECT_MATCHING :: Int
+wxDB_SELECT_MATCHING = 3
+
+wxDB_SELECT_STATEMENT :: Int
+wxDB_SELECT_STATEMENT = 4
+
+wxDB_UPD_KEYFIELDS :: Int
+wxDB_UPD_KEYFIELDS = 1
+
+wxDB_UPD_WHERE :: Int
+wxDB_UPD_WHERE = 2
+
+wxDB_DEL_KEYFIELDS :: Int
+wxDB_DEL_KEYFIELDS = 1
+
+wxDB_DEL_WHERE :: Int
+wxDB_DEL_WHERE = 2
+
+wxDB_DEL_MATCHING :: Int
+wxDB_DEL_MATCHING = 3
+
+wxDB_WHERE_KEYFIELDS :: Int
+wxDB_WHERE_KEYFIELDS = 1
+
+wxDB_WHERE_MATCHING :: Int
+wxDB_WHERE_MATCHING = 2
+
+wxDB_GRANT_SELECT :: Int
+wxDB_GRANT_SELECT = 1
+
+wxDB_GRANT_INSERT :: Int
+wxDB_GRANT_INSERT = 2
+
+wxDB_GRANT_UPDATE :: Int
+wxDB_GRANT_UPDATE = 4
+
+wxDB_GRANT_DELETE :: Int
+wxDB_GRANT_DELETE = 8
+
+wxDB_GRANT_ALL :: Int
+wxDB_GRANT_ALL = 15
+
+wxSQL_INVALID_HANDLE :: Int
+wxSQL_INVALID_HANDLE = (-2)
+
+wxSQL_ERROR :: Int
+wxSQL_ERROR = (-1)
+
+wxSQL_SUCCESS :: Int
+wxSQL_SUCCESS = 0
+
+wxSQL_SUCCESS_WITH_INFO :: Int
+wxSQL_SUCCESS_WITH_INFO = 1
+
+wxSQL_NO_DATA_FOUND :: Int
+wxSQL_NO_DATA_FOUND = 100
+
+wxSQL_CHAR :: Int
+wxSQL_CHAR = 1
+
+wxSQL_NUMERIC :: Int
+wxSQL_NUMERIC = 2
+
+wxSQL_DECIMAL :: Int
+wxSQL_DECIMAL = 3
+
+wxSQL_INTEGER :: Int
+wxSQL_INTEGER = 4
+
+wxSQL_SMALLINT :: Int
+wxSQL_SMALLINT = 5
+
+wxSQL_FLOAT :: Int
+wxSQL_FLOAT = 6
+
+wxSQL_REAL :: Int
+wxSQL_REAL = 7
+
+wxSQL_DOUBLE :: Int
+wxSQL_DOUBLE = 8
+
+wxSQL_VARCHAR :: Int
+wxSQL_VARCHAR = 12
+
+wxSQL_C_CHAR :: Int
+wxSQL_C_CHAR = 1
+
+wxSQL_C_LONG :: Int
+wxSQL_C_LONG = 4
+
+wxSQL_C_SHORT :: Int
+wxSQL_C_SHORT = 5
+
+wxSQL_C_FLOAT :: Int
+wxSQL_C_FLOAT = 7
+
+wxSQL_C_DOUBLE :: Int
+wxSQL_C_DOUBLE = 8
+
+wxSQL_C_DEFAULT :: Int
+wxSQL_C_DEFAULT = 99
+
+wxSQL_NO_NULLS :: Int
+wxSQL_NO_NULLS = 0
+
+wxSQL_NULLABLE :: Int
+wxSQL_NULLABLE = 1
+
+wxSQL_NULLABLE_UNKNOWN :: Int
+wxSQL_NULLABLE_UNKNOWN = 2
+
+wxSQL_NULL_DATA :: Int
+wxSQL_NULL_DATA = (-1)
+
+wxSQL_DATA_AT_EXEC :: Int
+wxSQL_DATA_AT_EXEC = (-2)
+
+wxSQL_NTS :: Int
+wxSQL_NTS = (-3)
+
+wxSQL_DATE :: Int
+wxSQL_DATE = 9
+
+wxSQL_TIME :: Int
+wxSQL_TIME = 10
+
+wxSQL_TIMESTAMP :: Int
+wxSQL_TIMESTAMP = 11
+
+wxSQL_C_DATE :: Int
+wxSQL_C_DATE = 9
+
+wxSQL_C_TIME :: Int
+wxSQL_C_TIME = 10
+
+wxSQL_C_TIMESTAMP :: Int
+wxSQL_C_TIMESTAMP = 11
+
+wxSQL_FETCH_NEXT :: Int
+wxSQL_FETCH_NEXT = 1
+
+wxSQL_FETCH_FIRST :: Int
+wxSQL_FETCH_FIRST = 2
+
+wxSQL_FETCH_LAST :: Int
+wxSQL_FETCH_LAST = 3
+
+wxSQL_FETCH_PRIOR :: Int
+wxSQL_FETCH_PRIOR = 4
+
+wxSQL_FETCH_ABSOLUTE :: Int
+wxSQL_FETCH_ABSOLUTE = 5
+
+wxSQL_FETCH_RELATIVE :: Int
+wxSQL_FETCH_RELATIVE = 6
+
+wxSQL_FETCH_BOOKMARK :: Int
+wxSQL_FETCH_BOOKMARK = 8
+
+wxSOUND_SYNC :: Int
+wxSOUND_SYNC = 0
+
+wxSOUND_ASYNC :: Int
+wxSOUND_ASYNC = 1
+
+wxSOUND_LOOP :: Int
+wxSOUND_LOOP = 2
+
+wxDRAG_COPYONLY :: Int
+wxDRAG_COPYONLY = 0
+
+wxDRAG_ALLOWMOVE :: Int
+wxDRAG_ALLOWMOVE = 1
+
+wxDRAG_DEFALUTMOVE :: Int
+wxDRAG_DEFALUTMOVE = 3
+
+wxMEDIACTRLPLAYERCONTROLS_NONE :: BitFlag
+wxMEDIACTRLPLAYERCONTROLS_NONE = 0
+
+wxMEDIACTRLPLAYERCONTROLS_STEP :: BitFlag
+wxMEDIACTRLPLAYERCONTROLS_STEP = 1
+
+wxMEDIACTRLPLAYERCONTROLS_VOLUME :: BitFlag
+wxMEDIACTRLPLAYERCONTROLS_VOLUME = 2
+
+wxMEDIACTRLPLAYERCONTROLS_DEFAULT :: BitFlag
+wxMEDIACTRLPLAYERCONTROLS_DEFAULT = 3
+
+wxACCEL_ALT :: Int
+wxACCEL_ALT = 1
+
+wxACCEL_CTRL :: Int
+wxACCEL_CTRL = 2
+
+wxACCEL_SHIFT :: Int
+wxACCEL_SHIFT = 4
+
+wxACCEL_NORMAL :: Int
+wxACCEL_NORMAL = 0
+
+wxNULL_FLAG :: Int
+wxNULL_FLAG = 0
+
+wxEVT_NULL :: Int
+wxEVT_NULL = 0
+
+wxEVT_FIRST :: Int
+wxEVT_FIRST = 10000
+
+wxJOYSTICK1 :: Int
+wxJOYSTICK1 = 0
+
+wxJOYSTICK2 :: Int
+wxJOYSTICK2 = 1
+
+wxJOY_BUTTON1 :: Int
+wxJOY_BUTTON1 = 1
+
+wxJOY_BUTTON2 :: Int
+wxJOY_BUTTON2 = 2
+
+wxJOY_BUTTON3 :: Int
+wxJOY_BUTTON3 = 4
+
+wxJOY_BUTTON4 :: Int
+wxJOY_BUTTON4 = 8
+
+wxUNKNOWN_PLATFORM :: Int
+wxUNKNOWN_PLATFORM = 1
+
+wxCURSES :: Int
+wxCURSES = 2
+
+wxXVIEW_X :: Int
+wxXVIEW_X = 3
+
+wxMOTIF_X :: Int
+wxMOTIF_X = 4
+
+wxCOSE_X :: Int
+wxCOSE_X = 5
+
+wxNEXTSTEP :: Int
+wxNEXTSTEP = 6
+
+wxMACINTOSH :: Int
+wxMACINTOSH = 7
+
+wxBEOS :: Int
+wxBEOS = 8
+
+wxGTK :: Int
+wxGTK = 9
+
+wxGTK_WIN32 :: Int
+wxGTK_WIN32 = 10
+
+wxGTK_OS2 :: Int
+wxGTK_OS2 = 11
+
+wxGTK_BEOS :: Int
+wxGTK_BEOS = 12
+
+wxQT :: Int
+wxQT = 13
+
+wxGEOS :: Int
+wxGEOS = 14
+
+wxOS2_PM :: Int
+wxOS2_PM = 15
+
+wxWINDOWS :: Int
+wxWINDOWS = 16
+
+wxPENWINDOWS :: Int
+wxPENWINDOWS = 17
+
+wxWINDOWS_NT :: Int
+wxWINDOWS_NT = 18
+
+wxWIN32S :: Int
+wxWIN32S = 19
+
+wxWIN95 :: Int
+wxWIN95 = 20
+
+wxWIN386 :: Int
+wxWIN386 = 21
+
+wxMGL_UNIX :: Int
+wxMGL_UNIX = 22
+
+wxMGL_X :: Int
+wxMGL_X = 23
+
+wxMGL_WIN32 :: Int
+wxMGL_WIN32 = 24
+
+wxMGL_OS2 :: Int
+wxMGL_OS2 = 25
+
+wxWINDOWS_OS2 :: Int
+wxWINDOWS_OS2 = 26
+
+wxUNIX :: Int
+wxUNIX = 27
+
+wxBIG_ENDIAN :: Int
+wxBIG_ENDIAN = 4321
+
+wxLITTLE_ENDIAN :: Int
+wxLITTLE_ENDIAN = 1234
+
+wxPDP_ENDIAN :: Int
+wxPDP_ENDIAN = 3412
+
+wxCENTRE :: Int
+wxCENTRE = 1
+
+wxCENTER :: Int
+wxCENTER = 1
+
+wxCENTER_FRAME :: Int
+wxCENTER_FRAME = 0
+
+wxCENTRE_ON_SCREEN :: Int
+wxCENTRE_ON_SCREEN = 2
+
+wxHORIZONTAL :: Int
+wxHORIZONTAL = 4
+
+wxVERTICAL :: Int
+wxVERTICAL = 8
+
+wxBOTH :: Int
+wxBOTH = 12
+
+wxLEFT :: Int
+wxLEFT = 16
+
+wxRIGHT :: Int
+wxRIGHT = 32
+
+wxUP :: Int
+wxUP = 64
+
+wxDOWN :: Int
+wxDOWN = 128
+
+wxTOP :: Int
+wxTOP = 64
+
+wxBOTTOM :: Int
+wxBOTTOM = 128
+
+wxNORTH :: Int
+wxNORTH = 64
+
+wxSOUTH :: Int
+wxSOUTH = 128
+
+wxWEST :: Int
+wxWEST = 16
+
+wxEAST :: Int
+wxEAST = 32
+
+wxALL :: Int
+wxALL = 240
+
+-- enum wxAlignment
+
+wxALIGN_NOT :: Int
+wxALIGN_NOT = 0
+
+wxALIGN_CENTER_HORIZONTAL :: Int
+wxALIGN_CENTER_HORIZONTAL = 256
+
+wxALIGN_CENTRE_HORIZONTAL :: Int
+wxALIGN_CENTRE_HORIZONTAL = 256
+
+wxALIGN_LEFT :: Int
+wxALIGN_LEFT = 0
+
+wxALIGN_TOP :: Int
+wxALIGN_TOP = 0
+
+wxALIGN_RIGHT :: Int
+wxALIGN_RIGHT = 512
+
+wxALIGN_BOTTOM :: Int
+wxALIGN_BOTTOM = 1024
+
+wxALIGN_CENTER_VERTICAL :: Int
+wxALIGN_CENTER_VERTICAL = 2048
+
+wxALIGN_CENTRE_VERTICAL :: Int
+wxALIGN_CENTRE_VERTICAL = 2048
+
+wxALIGN_CENTER :: Int
+wxALIGN_CENTER = 2304
+
+wxALIGN_CENTRE :: Int
+wxALIGN_CENTRE = 2304
+
+-- End enum wxAlignment
+
+-- enum wxSizerFlagBits
+
+wxFIXED_MINSIZE :: Int
+wxFIXED_MINSIZE                = 0x8000
+
+wxRESERVE_SPACE_EVEN_IF_HIDDEN :: Int
+wxRESERVE_SPACE_EVEN_IF_HIDDEN = 0x0002
+
+-- a mask to extract wxSizerFlagBits from combination of flags
+wxSIZER_FLAG_BITS_MASK :: Int
+wxSIZER_FLAG_BITS_MASK         = 0x8002
+
+-- End enum wxSizerFlagBits
+
+-- enum wxStretch
+
+wxSTRETCH_NOT :: Int
+wxSTRETCH_NOT = 0
+
+wxSHRINK :: Int
+wxSHRINK = 4096
+
+wxGROW :: Int
+wxGROW = 8192
+
+wxEXPAND :: Int
+wxEXPAND = 8192
+
+wxSHAPED :: Int
+wxSHAPED = 16384
+
+wxTILE :: Int
+wxTILE = wxSHAPED .|. wxFIXED_MINSIZE
+
+-- a mask to extract stretch from the combination of flags
+wxSTRETCH_MASK = 0x7000 -- sans wxTILE
+
+-- End enum wxStretch
+
+-- enum wxBorder
+
+{-
+ - Window (Frame/dialog/subwindow/panel item) style flags
+ -}
+wxVSCROLL :: Int
+wxVSCROLL = 0x80000000
+
+wxHSCROLL :: Int
+wxHSCROLL = 0x40000000
+
+wxCAPTION :: Int
+wxCAPTION = 0x20000000
+
+-- | Deprecated
+wxDOUBLE_BORDER :: Int
+wxDOUBLE_BORDER = 268435456
+{-# DEPRECATED wxDOUBLE_BORDER "Use wxBORDER_THEME" #-}
+
+-- | Deprecated
+wxSUNKEN_BORDER :: Int
+wxSUNKEN_BORDER = 134217728
+{-# DEPRECATED wxSUNKEN_BORDER "Use wxBORDER_SUNKEN" #-}
+
+-- | Deprecated
+wxRAISED_BORDER :: Int
+wxRAISED_BORDER = 67108864
+{-# DEPRECATED wxRAISED_BORDER "Use wxBORDER_RAISED" #-}
+
+-- | Deprecated
+wxSTATIC_BORDER :: Int
+wxSTATIC_BORDER = 16777216
+{-# DEPRECATED wxSTATIC_BORDER "Use wxBORDER_STATIC" #-}
+
+wxBORDER :: Int
+wxBORDER = 33554432
+
+-- | This is different from wxBORDER_NONE as by default the controls do
+-- have border
+wxBORDER_DEFAULT :: Int
+wxBORDER_DEFAULT = 0
+
+-- | Displays no border, overriding the default border style for the
+-- window. wxNO_BORDER is the old name for this style.
+wxBORDER_NONE   :: Int
+wxBORDER_NONE   = 0x00200000
+
+-- | Displays a border suitable for a static control. wxSTATIC_BORDER is
+-- the old name for this style. Windows only.
+wxBORDER_STATIC :: Int
+wxBORDER_STATIC = 0x01000000
+
+-- | Displays a thin border around the window. wxSIMPLE_BORDER is the old
+-- name for this style.
+wxBORDER_SIMPLE :: Int
+wxBORDER_SIMPLE = 0x02000000
+
+-- | Displays a raised border. wxRAISED_BORDER is the old name for this style.
+wxBORDER_RAISED :: Int
+wxBORDER_RAISED = 0x04000000
+
+-- | Displays a sunken border. wxSUNKEN_BORDER is the old name for this style.
+wxBORDER_SUNKEN :: Int
+wxBORDER_SUNKEN = 0x08000000
+
+-- | Displays a themed border where possible. Currently this has an effect
+-- on Windows XP and above only. For more information on themed borders,
+-- please see Themed borders on Windows
+-- <http://docs.wxwidgets.org/2.8/wx_wxmswport.html#wxmswthemedborders>.
+wxBORDER_THEME  :: Int
+wxBORDER_THEME  = 0x10000000
+
+-- | A mask to extract border style from the combination of flags
+wxBORDER_MASK   :: Int
+wxBORDER_MASK   = 0x1f200000
+
+-- End enum wxBorder
+
+
+wxTRANSPARENT_WINDOW :: Int
+wxTRANSPARENT_WINDOW = 1048576
+
+wxNO_BORDER :: Int
+wxNO_BORDER = 2097152
+
+wxUSER_COLOURS :: Int
+wxUSER_COLOURS = 8388608
+
+wxNO_3D :: Int
+wxNO_3D = 8388608
+
+wxCLIP_CHILDREN :: Int
+wxCLIP_CHILDREN = 4194304
+
+wxTAB_TRAVERSAL :: Int
+wxTAB_TRAVERSAL = 524288
+
+wxWANTS_CHARS :: Int
+wxWANTS_CHARS = 262144
+
+wxRETAINED :: Int
+wxRETAINED = 131072
+
+wxNO_FULL_REPAINT_ON_RESIZE :: Int
+wxNO_FULL_REPAINT_ON_RESIZE = 65536
+
+wxWS_EX_VALIDATE_RECURSIVELY :: Int
+wxWS_EX_VALIDATE_RECURSIVELY = 1
+
+wxSTAY_ON_TOP :: Int
+wxSTAY_ON_TOP = 32768
+
+wxICONIZE :: Int
+wxICONIZE = 16384
+
+wxMAXIMIZE :: Int
+wxMAXIMIZE = 8192
+
+wxSYSTEM_MENU :: Int
+wxSYSTEM_MENU = 2048
+
+wxMINIMIZE_BOX :: Int
+wxMINIMIZE_BOX = 1024
+
+wxMAXIMIZE_BOX :: Int
+wxMAXIMIZE_BOX = 512
+
+wxDEFAULT_FRAME_STYLE :: Int
+wxDEFAULT_FRAME_STYLE = 536878656
+
+wxTINY_CAPTION_HORIZ :: Int
+wxTINY_CAPTION_HORIZ = 256
+
+wxTINY_CAPTION_VERT :: Int
+wxTINY_CAPTION_VERT = 128
+
+wxRESIZE_BORDER :: Int
+wxRESIZE_BORDER = 64
+
+wxDIALOG_MODAL :: Int
+wxDIALOG_MODAL = 32
+
+wxDIALOG_MODELESS :: Int
+wxDIALOG_MODELESS = 0
+
+wxFRAME_FLOAT_ON_PARENT :: Int
+wxFRAME_FLOAT_ON_PARENT = 8
+
+wxFRAME_NO_WINDOW_MENU :: Int
+wxFRAME_NO_WINDOW_MENU = 256
+
+wxED_CLIENT_MARGIN :: Int
+wxED_CLIENT_MARGIN = 4
+
+wxED_BUTTONS_BOTTOM :: Int
+wxED_BUTTONS_BOTTOM = 0
+
+wxED_BUTTONS_RIGHT :: Int
+wxED_BUTTONS_RIGHT = 2
+
+wxED_STATIC_LINE :: Int
+wxED_STATIC_LINE = 1
+
+wxMB_DOCKABLE :: Int
+wxMB_DOCKABLE = 1
+
+wxMENU_TEAROFF :: Int
+wxMENU_TEAROFF = 1
+
+wxCOLOURED :: Int
+wxCOLOURED = 2048
+
+wxFIXED_LENGTH :: Int
+wxFIXED_LENGTH = 1024
+
+wxLB_SORT :: Int
+wxLB_SORT = 16
+
+wxLB_SINGLE :: Int
+wxLB_SINGLE = 32
+
+wxLB_MULTIPLE :: Int
+wxLB_MULTIPLE = 64
+
+wxLB_EXTENDED :: Int
+wxLB_EXTENDED = 128
+
+wxLB_OWNERDRAW :: Int
+wxLB_OWNERDRAW = 256
+
+wxLB_NEEDED_SB :: Int
+wxLB_NEEDED_SB = 512
+
+wxLB_ALWAYS_SB :: Int
+wxLB_ALWAYS_SB = 1024
+
+-- ----------------------------------------------------------------------------
+-- wxTextCtrl style flags
+-- ----------------------------------------------------------------------------
+
+wxTE_NO_VSCROLL :: Int
+wxTE_NO_VSCROLL =     0x0002
+
+wxTE_READONLY :: Int
+wxTE_READONLY =       0x0010
+wxTE_MULTILINE :: Int
+wxTE_MULTILINE =      0x0020
+wxTE_PROCESS_TAB :: Int
+wxTE_PROCESS_TAB =    0x0040
+
+-- alignment flags
+wxTE_LEFT :: Int
+wxTE_LEFT =           0x0000                    -- 0x0000
+wxTE_CENTER :: Int
+wxTE_CENTER =         wxALIGN_CENTER_HORIZONTAL -- 0x0100
+wxTE_RIGHT :: Int
+wxTE_RIGHT =          wxALIGN_RIGHT             -- 0x0200
+wxTE_CENTRE :: Int
+wxTE_CENTRE =         wxTE_CENTER
+
+-- this style means to use RICHEDIT control and does something only under wxMSW
+-- and Win32 and is silently ignored under all other platforms
+wxTE_RICH :: Int
+wxTE_RICH =           0x0080
+
+wxTE_PROCESS_ENTER :: Int
+wxTE_PROCESS_ENTER =  0x0400
+
+wxTE_PASSWORD :: Int
+wxTE_PASSWORD =       0x0800
+
+-- automatically detect the URLs and generate the events when mouse is
+-- moved/clicked over an URL
+--
+-- this is for Win32 richedit and wxGTK2 multiline controls only so far
+wxTE_AUTO_URL :: Int
+wxTE_AUTO_URL =       0x1000
+
+-- by default, the Windows text control doesn't show the selection when it
+-- doesn't have focus - use this style to force it to always show it
+wxTE_NOHIDESEL :: Int
+wxTE_NOHIDESEL =      0x2000
+
+-- use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any
+-- position and wxTE_WORDWRAP to wrap at words boundary
+--
+-- if no wrapping style is given at all, the control wraps at word boundary
+wxTE_DONTWRAP :: Int
+wxTE_DONTWRAP =       wxHSCROLL
+wxTE_CHARWRAP :: Int
+wxTE_CHARWRAP =       0x4000  -- wrap at any position
+wxTE_WORDWRAP :: Int
+wxTE_WORDWRAP =       0x0001  -- wrap only at words boundaries
+wxTE_BESTWRAP :: Int
+wxTE_BESTWRAP =       0x0000  -- this is the default
+
+-- if WXWIN_COMPATIBILITY_2_6
+-- obsolete synonym
+wxTE_LINEWRAP :: Int
+wxTE_LINEWRAP =       wxTE_CHARWRAP
+{-# DEPRECATED wxTE_LINEWRAP "Don't use this" #-}
+-- endif -- WXWIN_COMPATIBILITY_2_6
+
+-- if WXWIN_COMPATIBILITY_2_8
+-- this style is (or at least should be) on by default now, don't use it
+wxTE_AUTO_SCROLL :: Int
+wxTE_AUTO_SCROLL =    0
+{-# DEPRECATED wxTE_AUTO_SCROLL "Don't use this" #-}
+-- endif -- WXWIN_COMPATIBILITY_2_8
+
+-- force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for
+-- wxTE_RICH controls - can be used together with or instead of wxTE_RICH
+wxTE_RICH2 :: Int
+wxTE_RICH2 =          0x8000
+
+-- reuse wxTE_RICH2's value for CAPEDIT control on Windows CE
+-- #if defined(__SMARTPHONE__) || defined(__POCKETPC__)
+-- wxTE_CAPITALIZE :: Int
+-- wxTE_CAPITALIZE =     wxTE_RICH2
+-- #else
+wxTE_CAPITALIZE :: Int
+wxTE_CAPITALIZE =     0
+-- #endif
+
+-- ----------------------------------------------------------------------------
+-- wxTextCtrl file types
+-- ----------------------------------------------------------------------------
+
+wxTEXT_TYPE_ANY :: Int
+wxTEXT_TYPE_ANY =     0
+
+-- ----------------------------------------------------------------------------
+-- wxTextCtrl::HitTest return values
+-- ----------------------------------------------------------------------------
+
+-- the point asked is ...
+-- enum wxTextCtrlHitTestResult
+wxTE_HT_UNKNOWN :: Int
+wxTE_HT_UNKNOWN = -2    -- this means HitTest() is simply not implemented
+wxTE_HT_BEFORE :: Int
+wxTE_HT_BEFORE  = -1    -- either to the left or upper
+wxTE_HT_ON_TEXT :: Int
+wxTE_HT_ON_TEXT = 0     -- directly on
+wxTE_HT_BELOW :: Int
+wxTE_HT_BELOW   = 1     -- below [the last line]
+wxTE_HT_BEYOND :: Int
+wxTE_HT_BEYOND  = 2     -- after [the end of line]
+-- ... the character returned
+
+-- ----------------------------------------------------------------------------
+-- Types for wxTextAttr
+-- ----------------------------------------------------------------------------
+
+-- Alignment
+
+-- enum wxTextAttrAlignment
+wxTEXT_ALIGNMENT_DEFAULT   :: Int 
+wxTEXT_ALIGNMENT_DEFAULT   = 0
+wxTEXT_ALIGNMENT_LEFT      :: Int
+wxTEXT_ALIGNMENT_LEFT      = 1
+wxTEXT_ALIGNMENT_CENTRE    :: Int
+wxTEXT_ALIGNMENT_CENTRE    = 2
+wxTEXT_ALIGNMENT_CENTER    :: Int
+wxTEXT_ALIGNMENT_CENTER    = wxTEXT_ALIGNMENT_CENTRE
+wxTEXT_ALIGNMENT_RIGHT     :: Int
+wxTEXT_ALIGNMENT_RIGHT     = 3
+wxTEXT_ALIGNMENT_JUSTIFIED :: Int
+wxTEXT_ALIGNMENT_JUSTIFIED = 4
+
+-- Flags to indicate which attributes are being applied
+-- enum wxTextAttrFlags
+wxTEXT_ATTR_TEXT_COLOUR          :: Int
+wxTEXT_ATTR_TEXT_COLOUR          = 0x00000001
+wxTEXT_ATTR_BACKGROUND_COLOUR    :: Int
+wxTEXT_ATTR_BACKGROUND_COLOUR    = 0x00000002
+
+wxTEXT_ATTR_FONT_FACE            :: Int
+wxTEXT_ATTR_FONT_FACE            = 0x00000004
+wxTEXT_ATTR_FONT_POINT_SIZE      :: Int
+wxTEXT_ATTR_FONT_POINT_SIZE      = 0x00000008
+wxTEXT_ATTR_FONT_PIXEL_SIZE      :: Int
+wxTEXT_ATTR_FONT_PIXEL_SIZE      = 0x10000000
+wxTEXT_ATTR_FONT_WEIGHT          :: Int
+wxTEXT_ATTR_FONT_WEIGHT          = 0x00000010
+wxTEXT_ATTR_FONT_ITALIC          :: Int
+wxTEXT_ATTR_FONT_ITALIC          = 0x00000020
+wxTEXT_ATTR_FONT_UNDERLINE       :: Int
+wxTEXT_ATTR_FONT_UNDERLINE       = 0x00000040
+wxTEXT_ATTR_FONT_STRIKETHROUGH   :: Int
+wxTEXT_ATTR_FONT_STRIKETHROUGH   = 0x08000000
+wxTEXT_ATTR_FONT_ENCODING        :: Int
+wxTEXT_ATTR_FONT_ENCODING        = 0x02000000
+wxTEXT_ATTR_FONT_FAMILY          :: Int
+wxTEXT_ATTR_FONT_FAMILY          = 0x04000000
+wxTEXT_ATTR_FONT_SIZE :: Int
+wxTEXT_ATTR_FONT_SIZE = 
+  wxTEXT_ATTR_FONT_POINT_SIZE .|.
+  wxTEXT_ATTR_FONT_PIXEL_SIZE
+wxTEXT_ATTR_FONT :: Int
+wxTEXT_ATTR_FONT =
+  wxTEXT_ATTR_FONT_FACE .|.
+  wxTEXT_ATTR_FONT_SIZE .|.
+  wxTEXT_ATTR_FONT_WEIGHT .|.
+  wxTEXT_ATTR_FONT_ITALIC .|.
+  wxTEXT_ATTR_FONT_UNDERLINE .|.
+  wxTEXT_ATTR_FONT_STRIKETHROUGH .|.
+  wxTEXT_ATTR_FONT_ENCODING .|.
+  wxTEXT_ATTR_FONT_FAMILY 
+
+wxTEXT_ATTR_ALIGNMENT            :: Int
+wxTEXT_ATTR_ALIGNMENT            = 0x00000080
+wxTEXT_ATTR_LEFT_INDENT          :: Int
+wxTEXT_ATTR_LEFT_INDENT          = 0x00000100
+wxTEXT_ATTR_RIGHT_INDENT         :: Int
+wxTEXT_ATTR_RIGHT_INDENT         = 0x00000200
+wxTEXT_ATTR_TABS                 :: Int
+wxTEXT_ATTR_TABS                 = 0x00000400
+wxTEXT_ATTR_PARA_SPACING_AFTER   :: Int
+wxTEXT_ATTR_PARA_SPACING_AFTER   = 0x00000800
+wxTEXT_ATTR_PARA_SPACING_BEFORE  :: Int
+wxTEXT_ATTR_PARA_SPACING_BEFORE  = 0x00001000
+wxTEXT_ATTR_LINE_SPACING         :: Int
+wxTEXT_ATTR_LINE_SPACING         = 0x00002000
+wxTEXT_ATTR_CHARACTER_STYLE_NAME :: Int
+wxTEXT_ATTR_CHARACTER_STYLE_NAME = 0x00004000
+wxTEXT_ATTR_PARAGRAPH_STYLE_NAME :: Int
+wxTEXT_ATTR_PARAGRAPH_STYLE_NAME = 0x00008000
+wxTEXT_ATTR_LIST_STYLE_NAME      :: Int
+wxTEXT_ATTR_LIST_STYLE_NAME      = 0x00010000
+
+wxTEXT_ATTR_BULLET_STYLE         :: Int
+wxTEXT_ATTR_BULLET_STYLE         = 0x00020000
+wxTEXT_ATTR_BULLET_NUMBER        :: Int
+wxTEXT_ATTR_BULLET_NUMBER        = 0x00040000
+wxTEXT_ATTR_BULLET_TEXT          :: Int
+wxTEXT_ATTR_BULLET_TEXT          = 0x00080000
+wxTEXT_ATTR_BULLET_NAME          :: Int
+wxTEXT_ATTR_BULLET_NAME          = 0x00100000
+
+wxTEXT_ATTR_BULLET :: Int
+wxTEXT_ATTR_BULLET =
+  wxTEXT_ATTR_BULLET_STYLE .|.
+  wxTEXT_ATTR_BULLET_NUMBER .|.
+  wxTEXT_ATTR_BULLET_TEXT .|.
+  wxTEXT_ATTR_BULLET_NAME
+
+
+wxTEXT_ATTR_URL                  :: Int
+wxTEXT_ATTR_URL                  = 0x00200000
+wxTEXT_ATTR_PAGE_BREAK           :: Int
+wxTEXT_ATTR_PAGE_BREAK           = 0x00400000
+wxTEXT_ATTR_EFFECTS              :: Int
+wxTEXT_ATTR_EFFECTS              = 0x00800000
+wxTEXT_ATTR_OUTLINE_LEVEL        :: Int
+wxTEXT_ATTR_OUTLINE_LEVEL        = 0x01000000
+
+{-!
+* Character and paragraph combined styles
+-}
+
+wxTEXT_ATTR_CHARACTER :: Int
+wxTEXT_ATTR_CHARACTER =
+  wxTEXT_ATTR_FONT .|.
+  wxTEXT_ATTR_EFFECTS .|.
+  wxTEXT_ATTR_BACKGROUND_COLOUR .|.
+  wxTEXT_ATTR_TEXT_COLOUR .|.
+  wxTEXT_ATTR_CHARACTER_STYLE_NAME .|.
+  wxTEXT_ATTR_URL
+
+wxTEXT_ATTR_PARAGRAPH :: Int
+wxTEXT_ATTR_PARAGRAPH = 
+  wxTEXT_ATTR_ALIGNMENT .|.
+  wxTEXT_ATTR_LEFT_INDENT .|.
+  wxTEXT_ATTR_RIGHT_INDENT .|.
+  wxTEXT_ATTR_TABS .|.
+  wxTEXT_ATTR_PARA_SPACING_BEFORE .|.
+  wxTEXT_ATTR_PARA_SPACING_AFTER .|.
+  wxTEXT_ATTR_LINE_SPACING .|.
+  wxTEXT_ATTR_BULLET .|.
+  wxTEXT_ATTR_PARAGRAPH_STYLE_NAME .|.
+  wxTEXT_ATTR_LIST_STYLE_NAME .|.
+  wxTEXT_ATTR_OUTLINE_LEVEL .|.
+  wxTEXT_ATTR_PAGE_BREAK
+
+wxTEXT_ATTR_ALL :: Int
+wxTEXT_ATTR_ALL =
+  wxTEXT_ATTR_CHARACTER .|.
+  wxTEXT_ATTR_PARAGRAPH
+
+{-!
+* Styles for wxTextAttr::SetBulletStyle
+-}
+-- enum wxTextAttrBulletStyle
+wxTEXT_ATTR_BULLET_STYLE_NONE            :: Int
+wxTEXT_ATTR_BULLET_STYLE_NONE            = 0x00000000
+wxTEXT_ATTR_BULLET_STYLE_ARABIC          :: Int
+wxTEXT_ATTR_BULLET_STYLE_ARABIC          = 0x00000001
+wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER   :: Int
+wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER   = 0x00000002
+wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER   :: Int
+wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER   = 0x00000004
+wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER     :: Int
+wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER     = 0x00000008
+wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER     :: Int
+wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER     = 0x00000010
+wxTEXT_ATTR_BULLET_STYLE_SYMBOL          :: Int
+wxTEXT_ATTR_BULLET_STYLE_SYMBOL          = 0x00000020
+wxTEXT_ATTR_BULLET_STYLE_BITMAP          :: Int
+wxTEXT_ATTR_BULLET_STYLE_BITMAP          = 0x00000040
+wxTEXT_ATTR_BULLET_STYLE_PARENTHESES     :: Int
+wxTEXT_ATTR_BULLET_STYLE_PARENTHESES     = 0x00000080
+wxTEXT_ATTR_BULLET_STYLE_PERIOD          :: Int
+wxTEXT_ATTR_BULLET_STYLE_PERIOD          = 0x00000100
+wxTEXT_ATTR_BULLET_STYLE_STANDARD        :: Int
+wxTEXT_ATTR_BULLET_STYLE_STANDARD        = 0x00000200
+wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS :: Int
+wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS = 0x00000400
+wxTEXT_ATTR_BULLET_STYLE_OUTLINE         :: Int
+wxTEXT_ATTR_BULLET_STYLE_OUTLINE         = 0x00000800
+
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT      :: Int
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT      = 0x00000000
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT     :: Int
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT     = 0x00001000
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE    :: Int
+wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE    = 0x00002000
+
+wxTEXT_ATTR_BULLET_STYLE_CONTINUATION    :: Int
+wxTEXT_ATTR_BULLET_STYLE_CONTINUATION    = 0x00004000
+
+{-!
+* Styles for wxTextAttr::SetTextEffects
+-}
+-- enum wxTextAttrEffects
+wxTEXT_ATTR_EFFECT_NONE                  :: Int
+wxTEXT_ATTR_EFFECT_NONE                  = 0x00000000
+wxTEXT_ATTR_EFFECT_CAPITALS              :: Int
+wxTEXT_ATTR_EFFECT_CAPITALS              = 0x00000001
+wxTEXT_ATTR_EFFECT_SMALL_CAPITALS        :: Int
+wxTEXT_ATTR_EFFECT_SMALL_CAPITALS        = 0x00000002
+wxTEXT_ATTR_EFFECT_STRIKETHROUGH         :: Int
+wxTEXT_ATTR_EFFECT_STRIKETHROUGH         = 0x00000004
+wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH  :: Int
+wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH  = 0x00000008
+wxTEXT_ATTR_EFFECT_SHADOW                :: Int
+wxTEXT_ATTR_EFFECT_SHADOW                = 0x00000010
+wxTEXT_ATTR_EFFECT_EMBOSS                :: Int
+wxTEXT_ATTR_EFFECT_EMBOSS                = 0x00000020
+wxTEXT_ATTR_EFFECT_OUTLINE               :: Int
+wxTEXT_ATTR_EFFECT_OUTLINE               = 0x00000040
+wxTEXT_ATTR_EFFECT_ENGRAVE               :: Int
+wxTEXT_ATTR_EFFECT_ENGRAVE               = 0x00000080
+wxTEXT_ATTR_EFFECT_SUPERSCRIPT           :: Int
+wxTEXT_ATTR_EFFECT_SUPERSCRIPT           = 0x00000100
+wxTEXT_ATTR_EFFECT_SUBSCRIPT             :: Int
+wxTEXT_ATTR_EFFECT_SUBSCRIPT             = 0x00000200
+
+{-!
+* Line spacing values
+-}
+-- enum wxTextAttrLineSpacing
+wxTEXT_ATTR_LINE_SPACING_NORMAL         :: Int
+wxTEXT_ATTR_LINE_SPACING_NORMAL         = 10
+wxTEXT_ATTR_LINE_SPACING_HALF           :: Int
+wxTEXT_ATTR_LINE_SPACING_HALF           = 15
+wxTEXT_ATTR_LINE_SPACING_TWICE          :: Int
+wxTEXT_ATTR_LINE_SPACING_TWICE          = 20
+
+--End wxTextCtrl style flags
+
+
+wxPROCESS_ENTER :: Int
+wxPROCESS_ENTER = 1024
+{-# DEPRECATED wxPROCESS_ENTER "Use wxTE_PROCESS_ENTER" #-}
+
+wxPASSWORD :: Int
+wxPASSWORD = 2048
+{-# DEPRECATED wxPASSWORD "Use wxTE_PASSWORD" #-}
+
+wxCB_SIMPLE :: Int
+wxCB_SIMPLE = 4
+
+wxCB_SORT :: Int
+wxCB_SORT = 8
+
+wxCB_READONLY :: Int
+wxCB_READONLY = 16
+
+wxCB_DROPDOWN :: Int
+wxCB_DROPDOWN = 32
+
+wxRB_GROUP :: Int
+wxRB_GROUP = 4
+
+wxGA_PROGRESSBAR :: Int
+wxGA_PROGRESSBAR = 16
+
+wxGA_SMOOTH :: Int
+wxGA_SMOOTH = 32
+
+wxSL_NOTIFY_DRAG :: Int
+wxSL_NOTIFY_DRAG = 0
+
+wxSL_AUTOTICKS :: Int
+wxSL_AUTOTICKS = 16
+
+wxSL_LABELS :: Int
+wxSL_LABELS = 32
+
+wxSL_LEFT :: Int
+wxSL_LEFT = 64
+
+wxSL_TOP :: Int
+wxSL_TOP = 128
+
+wxSL_RIGHT :: Int
+wxSL_RIGHT = 256
+
+wxSL_BOTTOM :: Int
+wxSL_BOTTOM = 512
+
+wxSL_BOTH :: Int
+wxSL_BOTH = 1024
+
+wxSL_SELRANGE :: Int
+wxSL_SELRANGE = 2048
+
+
+-- wxAnyButton specific flags
+
+-- These flags affect label alignment
+wxBU_LEFT :: Int
+wxBU_LEFT = 64
+
+wxBU_TOP :: Int
+wxBU_TOP = 128
+
+wxBU_RIGHT :: Int
+wxBU_RIGHT = 256
+
+wxBU_BOTTOM :: Int
+wxBU_BOTTOM = 512
+
+wxBU_ALIGN_MASK :: Int
+wxBU_ALIGN_MASK = wxBU_LEFT .|. wxBU_TOP .|. wxBU_RIGHT .|. wxBU_BOTTOM
+
+-- These two flags are obsolete
+wxBU_AUTODRAW :: Int
+wxBU_AUTODRAW = 4
+{-# DEPRECATED wxBU_AUTODRAW "Don't use this" #-}
+
+wxBU_NOAUTODRAW :: Int
+wxBU_NOAUTODRAW = 0
+{-# DEPRECATED wxBU_NOAUTODRAW "Don't use this" #-}
+
+-- by default, the buttons will be created with some (system dependent)
+-- minimal size to make them look nicer, giving this style will make them as
+-- small as possible
+wxBU_EXACTFIT :: Int
+wxBU_EXACTFIT = 0x0001
+
+-- this flag can be used to disable using the text label in the button: it is
+-- mostly useful when creating buttons showing bitmap and having stock id as
+-- without it both the standard label corresponding to the stock id and the
+-- bitmap would be shown
+wxBU_NOTEXT :: Int
+wxBU_NOTEXT = 0x0002
+
+-- End wxAnyButton specific flags
+
+
+wxLC_VRULES :: Int
+wxLC_VRULES = 1
+
+wxLC_HRULES :: Int
+wxLC_HRULES = 2
+
+wxLC_ICON :: Int
+wxLC_ICON = 4
+
+wxLC_SMALL_ICON :: Int
+wxLC_SMALL_ICON = 8
+
+wxLC_LIST :: Int
+wxLC_LIST = 16
+
+wxLC_REPORT :: Int
+wxLC_REPORT = 32
+
+wxLC_ALIGN_TOP :: Int
+wxLC_ALIGN_TOP = 64
+
+wxLC_ALIGN_LEFT :: Int
+wxLC_ALIGN_LEFT = 128
+
+wxLC_AUTOARRANGE :: Int
+wxLC_AUTOARRANGE = 256
+
+wxLC_VIRTUAL :: Int
+wxLC_VIRTUAL = 512
+
+wxLC_EDIT_LABELS :: Int
+wxLC_EDIT_LABELS = 1024
+
+wxLC_NO_HEADER :: Int
+wxLC_NO_HEADER = 2048
+
+wxLC_NO_SORT_HEADER :: Int
+wxLC_NO_SORT_HEADER = 4096
+
+wxLC_SINGLE_SEL :: Int
+wxLC_SINGLE_SEL = 8192
+
+wxLC_SORT_ASCENDING :: Int
+wxLC_SORT_ASCENDING = 16384
+
+wxLC_SORT_DESCENDING :: Int
+wxLC_SORT_DESCENDING = 32768
+
+wxLC_MASK_TYPE  :: Int
+wxLC_MASK_TYPE  = wxLC_ICON .|. wxLC_SMALL_ICON .|. wxLC_LIST .|. wxLC_REPORT
+
+wxLC_MASK_ALIGN :: Int
+wxLC_MASK_ALIGN = wxLC_ALIGN_TOP .|. wxLC_ALIGN_LEFT
+
+wxLC_MASK_SORT  :: Int
+wxLC_MASK_SORT  = wxLC_SORT_ASCENDING .|. wxLC_SORT_DESCENDING
+
+wxSP_ARROW_KEYS :: Int
+wxSP_ARROW_KEYS = 4096
+
+wxSP_WRAP :: Int
+wxSP_WRAP = 8192
+
+wxSP_NOBORDER :: Int
+wxSP_NOBORDER = 0
+
+wxSP_NOSASH :: Int
+wxSP_NOSASH = 16
+
+wxSP_BORDER :: Int
+wxSP_BORDER = 32
+
+wxSP_PERMIT_UNSPLIT :: Int
+wxSP_PERMIT_UNSPLIT = 64
+
+wxSP_LIVE_UPDATE :: Int
+wxSP_LIVE_UPDATE = 128
+
+wxSP_3DSASH :: Int
+wxSP_3DSASH = 256
+
+wxSP_3DBORDER :: Int
+wxSP_3DBORDER = 512
+
+wxSP_3D :: Int
+wxSP_3D = 768
+
+wxSP_FULLSASH :: Int
+wxSP_FULLSASH = 1024
+
+wxFRAME_TOOL_WINDOW :: Int
+wxFRAME_TOOL_WINDOW = 4
+
+wxTC_MULTILINE :: Int
+wxTC_MULTILINE = 0
+
+wxTC_RIGHTJUSTIFY :: Int
+wxTC_RIGHTJUSTIFY = 16
+
+wxTC_FIXEDWIDTH :: Int
+wxTC_FIXEDWIDTH = 32
+
+wxTC_OWNERDRAW :: Int
+wxTC_OWNERDRAW = 64
+
+wxNB_FIXEDWIDTH :: Int
+wxNB_FIXEDWIDTH = 16
+
+wxST_SIZEGRIP :: Int
+wxST_SIZEGRIP = 16
+
+wxST_NO_AUTORESIZE :: Int
+wxST_NO_AUTORESIZE = 1
+
+wxPD_CAN_ABORT :: Int
+wxPD_CAN_ABORT = 1
+
+wxPD_APP_MODAL :: Int
+wxPD_APP_MODAL = 2
+
+wxPD_AUTO_HIDE :: Int
+wxPD_AUTO_HIDE = 4
+
+wxPD_ELAPSED_TIME :: Int
+wxPD_ELAPSED_TIME = 8
+
+wxPD_ESTIMATED_TIME :: Int
+wxPD_ESTIMATED_TIME = 16
+
+wxPD_REMAINING_TIME :: Int
+wxPD_REMAINING_TIME = 64
+
+wxHW_SCROLLBAR_NEVER :: Int
+wxHW_SCROLLBAR_NEVER = 2
+
+wxHW_SCROLLBAR_AUTO :: Int
+wxHW_SCROLLBAR_AUTO = 4
+
+wxCAL_SUNDAY_FIRST :: Int
+wxCAL_SUNDAY_FIRST = 0
+
+wxCAL_MONDAY_FIRST :: Int
+wxCAL_MONDAY_FIRST = 1
+
+wxCAL_SHOW_HOLIDAYS :: Int
+wxCAL_SHOW_HOLIDAYS = 2
+
+wxCAL_NO_YEAR_CHANGE :: Int
+wxCAL_NO_YEAR_CHANGE = 4
+
+wxCAL_NO_MONTH_CHANGE :: Int
+wxCAL_NO_MONTH_CHANGE = 12
+
+wxICON_EXCLAMATION :: Int
+wxICON_EXCLAMATION = 256
+
+wxICON_HAND :: Int
+wxICON_HAND = 512
+
+wxICON_QUESTION :: Int
+wxICON_QUESTION = 1024
+
+wxICON_INFORMATION :: Int
+wxICON_INFORMATION = 2048
+
+wxFORWARD :: Int
+wxFORWARD = 4096
+
+wxBACKWARD :: Int
+wxBACKWARD = 8192
+
+wxRESET :: Int
+wxRESET = 16384
+
+wxHELP :: Int
+wxHELP = 32768
+
+wxMORE :: Int
+wxMORE = 65536
+
+wxSETUP :: Int
+wxSETUP = 131072
+
+wxID_LOWEST :: Int
+wxID_LOWEST = 4999
+
+wxID_OPEN :: Int
+wxID_OPEN = 5000
+
+wxID_CLOSE :: Int
+wxID_CLOSE = 5001
+
+wxID_NEW :: Int
+wxID_NEW = 5002
+
+wxID_SAVE :: Int
+wxID_SAVE = 5003
+
+wxID_SAVEAS :: Int
+wxID_SAVEAS = 5004
+
+wxID_REVERT :: Int
+wxID_REVERT = 5005
+
+wxID_EXIT :: Int
+wxID_EXIT = 5006
+
+wxID_UNDO :: Int
+wxID_UNDO = 5007
+
+wxID_REDO :: Int
+wxID_REDO = 5008
+
+wxID_HELP :: Int
+wxID_HELP = 5009
+
+wxID_PRINT :: Int
+wxID_PRINT = 5010
+
+wxID_PRINT_SETUP :: Int
+wxID_PRINT_SETUP = 5011
+
+wxID_PREVIEW :: Int
+wxID_PREVIEW = 5012
+
+wxID_ABOUT :: Int
+wxID_ABOUT = 5013
+
+wxID_HELP_CONTENTS :: Int
+wxID_HELP_CONTENTS = 5014
+
+wxID_HELP_COMMANDS :: Int
+wxID_HELP_COMMANDS = 5015
+
+wxID_HELP_PROCEDURES :: Int
+wxID_HELP_PROCEDURES = 5016
+
+wxID_HELP_CONTEXT :: Int
+wxID_HELP_CONTEXT = 5017
+
+wxPG_DEFAULT_STYLE :: Int
+wxPG_DEFAULT_STYLE = 0
+
+wxID_CLOSE_ALL :: Int
+wxID_CLOSE_ALL = 5018
+
+wxID_PREFERENCES :: Int
+wxID_PREFERENCES = 5019
+
+wxID_EDIT :: Int
+wxID_EDIT = 5030
+
+wxID_CUT :: Int
+wxID_CUT = 5031
+
+wxID_COPY :: Int
+wxID_COPY = 5032
+
+wxID_PASTE :: Int
+wxID_PASTE = 5033
+
+wxID_CLEAR :: Int
+wxID_CLEAR = 5034
+
+wxID_FIND :: Int
+wxID_FIND = 5035
+
+wxID_DUPLICATE :: Int
+wxID_DUPLICATE = 5036
+
+wxID_SELECTALL :: Int
+wxID_SELECTALL = 5037
+
+wxID_DELETE :: Int
+wxID_DELETE = 5038
+
+wxID_REPLACE :: Int
+wxID_REPLACE = 5039
+
+wxID_REPLACE_ALL :: Int
+wxID_REPLACE_ALL = 5040
+
+wxID_PROPERTIES :: Int
+wxID_PROPERTIES = 5041
+
+wxID_VIEW_DETAILS :: Int
+wxID_VIEW_DETAILS = 5042
+
+wxID_VIEW_LARGEICONS :: Int
+wxID_VIEW_LARGEICONS = 5043
+
+wxID_VIEW_SMALLICONS :: Int
+wxID_VIEW_SMALLICONS = 5044
+
+wxID_VIEW_LIST :: Int
+wxID_VIEW_LIST = 5045
+
+wxID_VIEW_SORTDATE :: Int
+wxID_VIEW_SORTDATE = 5046
+
+wxID_VIEW_SORTNAME :: Int
+wxID_VIEW_SORTNAME = 5047
+
+wxID_VIEW_SORTSIZE :: Int
+wxID_VIEW_SORTSIZE = 5048
+
+wxID_VIEW_SORTTYPE :: Int
+wxID_VIEW_SORTTYPE = 5049
+
+wxID_FILE1 :: Int
+wxID_FILE1 = 5050
+
+wxID_FILE2 :: Int
+wxID_FILE2 = 5051
+
+wxID_FILE3 :: Int
+wxID_FILE3 = 5052
+
+wxID_FILE4 :: Int
+wxID_FILE4 = 5053
+
+wxID_FILE5 :: Int
+wxID_FILE5 = 5054
+
+wxID_FILE6 :: Int
+wxID_FILE6 = 5055
+
+wxID_FILE7 :: Int
+wxID_FILE7 = 5056
+
+wxID_FILE8 :: Int
+wxID_FILE8 = 5057
+
+wxID_FILE9 :: Int
+wxID_FILE9 = 5058
+
+wxID_OK :: Int
+wxID_OK = 5100
+
+wxID_CANCEL :: Int
+wxID_CANCEL = 5101
+
+wxID_APPLY :: Int
+wxID_APPLY = 5102
+
+wxID_YES :: Int
+wxID_YES = 5103
+
+wxID_NO :: Int
+wxID_NO = 5104
+
+wxID_STATIC :: Int
+wxID_STATIC = 5105
+
+wxID_FORWARD :: Int
+wxID_FORWARD = 5106
+
+wxID_BACKWARD :: Int
+wxID_BACKWARD = 5107
+
+wxID_DEFAULT :: Int
+wxID_DEFAULT = 5108
+
+wxID_MORE :: Int
+wxID_MORE = 5109
+
+wxID_SETUP :: Int
+wxID_SETUP = 5110
+
+wxID_RESET :: Int
+wxID_RESET = 5111
+
+wxID_FILEDLGG :: Int
+wxID_FILEDLGG = 5900
+
+wxID_HIGHEST :: Int
+wxID_HIGHEST = 5999
+
+wxSIZE_AUTO_WIDTH :: Int
+wxSIZE_AUTO_WIDTH = 1
+
+wxSIZE_AUTO_HEIGHT :: Int
+wxSIZE_AUTO_HEIGHT = 2
+
+wxSIZE_USE_EXISTING :: Int
+wxSIZE_USE_EXISTING = 0
+
+wxSIZE_ALLOW_MINUS_ONE :: Int
+wxSIZE_ALLOW_MINUS_ONE = 4
+
+wxSIZE_NO_ADJUSTMENTS :: Int
+wxSIZE_NO_ADJUSTMENTS = 8
+
+wxSOLID :: Int
+wxSOLID = 100
+{-# DEPRECATED wxSOLID "Don't use this" #-}
+
+wxDOT :: Int
+wxDOT = 101
+{-# DEPRECATED wxDOT "Don't use this" #-}
+
+wxLONG_DASH :: Int
+wxLONG_DASH = 102
+{-# DEPRECATED wxLONG_DASH "Don't use this" #-}
+
+wxSHORT_DASH :: Int
+wxSHORT_DASH = 103
+{-# DEPRECATED wxSHORT_DASH "Don't use this" #-}
+
+wxDOT_DASH :: Int
+wxDOT_DASH = 104
+{-# DEPRECATED wxDOT_DASH "Don't use this" #-}
+
+wxUSER_DASH :: Int
+wxUSER_DASH = 105
+{-# DEPRECATED wxUSER_DASH "Don't use this" #-}
+
+wxTRANSPARENT :: Int
+wxTRANSPARENT = 106
+{-# DEPRECATED wxTRANSPARENT "Don't use this" #-}
+
+wxSTIPPLE_MASK_OPAQUE :: Int
+wxSTIPPLE_MASK_OPAQUE = 107
+{-# DEPRECATED wxSTIPPLE_MASK_OPAQUE "Don't use this" #-}
+
+wxSTIPPLE_MASK :: Int
+wxSTIPPLE_MASK = 108
+{-# DEPRECATED wxSTIPPLE_MASK "Don't use this" #-}
+
+wxSTIPPLE :: Int
+wxSTIPPLE = 110
+{-# DEPRECATED wxSTIPPLE "Don't use this" #-}
+
+wxBDIAGONAL_HATCH :: Int
+wxBDIAGONAL_HATCH = 111
+{-# DEPRECATED wxBDIAGONAL_HATCH "Don't use this" #-}
+
+wxCROSSDIAG_HATCH :: Int
+wxCROSSDIAG_HATCH = 112
+{-# DEPRECATED wxCROSSDIAG_HATCH "Don't use this" #-}
+
+wxFDIAGONAL_HATCH :: Int
+wxFDIAGONAL_HATCH = 113
+{-# DEPRECATED wxFDIAGONAL_HATCH "Don't use this" #-}
+
+wxCROSS_HATCH :: Int
+wxCROSS_HATCH = 114
+{-# DEPRECATED wxCROSS_HATCH "Don't use this" #-}
+
+wxHORIZONTAL_HATCH :: Int
+wxHORIZONTAL_HATCH = 115
+{-# DEPRECATED wxHORIZONTAL_HATCH "Don't use this" #-}
+
+wxVERTICAL_HATCH :: Int
+wxVERTICAL_HATCH = 116
+{-# DEPRECATED wxVERTICAL_HATCH "Don't use this" #-}
+
+
+wxCLEAR :: Int
+wxCLEAR = 0
+
+wxXOR :: Int
+wxXOR = 1
+
+wxINVERT :: Int
+wxINVERT = 2
+
+wxOR_REVERSE :: Int
+wxOR_REVERSE = 3
+
+wxAND_REVERSE :: Int
+wxAND_REVERSE = 4
+
+wxCOPY :: Int
+wxCOPY = 5
+
+wxAND :: Int
+wxAND = 6
+
+wxAND_INVERT :: Int
+wxAND_INVERT = 7
+
+wxNO_OP :: Int
+wxNO_OP = 8
+
+wxNOR :: Int
+wxNOR = 9
+
+wxEQUIV :: Int
+wxEQUIV = 10
+
+wxSRC_INVERT :: Int
+wxSRC_INVERT = 11
+
+wxOR_INVERT :: Int
+wxOR_INVERT = 12
+
+wxNAND :: Int
+wxNAND = 13
+
+wxOR :: Int
+wxOR = 14
+
+wxSET :: Int
+wxSET = 15
+
+wxFLOOD_SURFACE :: Int
+wxFLOOD_SURFACE = 1
+
+wxFLOOD_BORDER :: Int
+wxFLOOD_BORDER = 2
+
+wxODDEVEN_RULE :: Int
+wxODDEVEN_RULE = 1
+
+wxWINDING_RULE :: Int
+wxWINDING_RULE = 2
+
+wxTOOL_TOP :: Int
+wxTOOL_TOP = 1
+
+wxTOOL_BOTTOM :: Int
+wxTOOL_BOTTOM = 2
+
+wxTOOL_LEFT :: Int
+wxTOOL_LEFT = 3
+
+wxTOOL_RIGHT :: Int
+wxTOOL_RIGHT = 4
+
+-- enum wxDataFormatId
+--  the values of the format constants should be the same as corresponding
+--  CF_XXX constants in Windows API
+
+wxDF_INVALID :: Int
+wxDF_INVALID  = 0
+
+wxDF_TEXT :: Int
+wxDF_TEXT     = 1   -- CF_TEXT
+
+wxDF_BITMAP :: Int
+wxDF_BITMAP   = 2   -- CF_BITMAP
+
+wxDF_METAFILE :: Int
+wxDF_METAFILE = 3   -- CF_METAFILEPICT
+
+wxDF_SYLK :: Int
+wxDF_SYLK     = 4
+
+wxDF_DIF :: Int
+wxDF_DIF      = 5
+
+wxDF_TIFF :: Int
+wxDF_TIFF     = 6
+
+wxDF_OEMTEXT :: Int
+wxDF_OEMTEXT  = 7   -- CF_OEMTEXT
+
+wxDF_DIB :: Int
+wxDF_DIB      = 8   -- CF_DIB
+
+wxDF_PALETTE :: Int
+wxDF_PALETTE  = 9
+
+wxDF_PENDATA :: Int
+wxDF_PENDATA  = 10
+
+wxDF_RIFF :: Int
+wxDF_RIFF     = 11
+
+wxDF_WAVE :: Int
+wxDF_WAVE     = 12
+
+wxDF_UNICODETEXT :: Int
+wxDF_UNICODETEXT = 13
+
+wxDF_ENHMETAFILE :: Int
+wxDF_ENHMETAFILE = 14
+
+wxDF_FILENAME :: Int
+wxDF_FILENAME    = 15  -- CF_HDROP
+
+wxDF_LOCALE :: Int
+wxDF_LOCALE      = 16
+
+wxDF_PRIVATE :: Int
+wxDF_PRIVATE     = 20
+
+wxDF_HTML :: Int
+wxDF_HTML        = 30 -- Note: does not correspond to CF_ constant
+
+wxDF_MAX :: Int
+wxDF_MAX         = 31
+
+-- End enum wxDataFormatId
+
+
+wxMM_TEXT :: Int
+wxMM_TEXT = 1
+
+wxMM_LOMETRIC :: Int
+wxMM_LOMETRIC = 2
+
+wxMM_HIMETRIC :: Int
+wxMM_HIMETRIC = 3
+
+wxMM_LOENGLISH :: Int
+wxMM_LOENGLISH = 4
+
+wxMM_HIENGLISH :: Int
+wxMM_HIENGLISH = 5
+
+wxMM_TWIPS :: Int
+wxMM_TWIPS = 6
+
+wxMM_ISOTROPIC :: Int
+wxMM_ISOTROPIC = 7
+
+wxMM_ANISOTROPIC :: Int
+wxMM_ANISOTROPIC = 8
+
+wxMM_POINTS :: Int
+wxMM_POINTS = 9
+
+wxMM_METRIC :: Int
+wxMM_METRIC = 10
+
+wxPAPER_NONE :: Int
+wxPAPER_NONE = 0
+
+wxPAPER_LETTER :: Int
+wxPAPER_LETTER = 1
+
+wxPAPER_LEGAL :: Int
+wxPAPER_LEGAL = 2
+
+wxPAPER_A4 :: Int
+wxPAPER_A4 = 3
+
+wxPAPER_CSHEET :: Int
+wxPAPER_CSHEET = 4
+
+wxPAPER_DSHEET :: Int
+wxPAPER_DSHEET = 5
+
+wxPAPER_ESHEET :: Int
+wxPAPER_ESHEET = 6
+
+wxPAPER_LETTERSMALL :: Int
+wxPAPER_LETTERSMALL = 7
+
+wxPAPER_TABLOID :: Int
+wxPAPER_TABLOID = 8
+
+wxPAPER_LEDGER :: Int
+wxPAPER_LEDGER = 9
+
+wxPAPER_STATEMENT :: Int
+wxPAPER_STATEMENT = 10
+
+wxPAPER_EXECUTIVE :: Int
+wxPAPER_EXECUTIVE = 11
+
+wxPAPER_A3 :: Int
+wxPAPER_A3 = 12
+
+wxPAPER_A4SMALL :: Int
+wxPAPER_A4SMALL = 13
+
+wxPAPER_A5 :: Int
+wxPAPER_A5 = 14
+
+wxPAPER_B4 :: Int
+wxPAPER_B4 = 15
+
+wxPAPER_B5 :: Int
+wxPAPER_B5 = 16
+
+wxPAPER_FOLIO :: Int
+wxPAPER_FOLIO = 17
+
+wxPAPER_QUARTO :: Int
+wxPAPER_QUARTO = 18
+
+wxPAPER_10X14 :: Int
+wxPAPER_10X14 = 19
+
+wxPAPER_11X17 :: Int
+wxPAPER_11X17 = 20
+
+wxPAPER_NOTE :: Int
+wxPAPER_NOTE = 21
+
+wxPAPER_ENV_9 :: Int
+wxPAPER_ENV_9 = 22
+
+wxPAPER_ENV_10 :: Int
+wxPAPER_ENV_10 = 23
+
+wxPAPER_ENV_11 :: Int
+wxPAPER_ENV_11 = 24
+
+wxPAPER_ENV_12 :: Int
+wxPAPER_ENV_12 = 25
+
+wxPAPER_ENV_14 :: Int
+wxPAPER_ENV_14 = 26
+
+wxPAPER_ENV_DL :: Int
+wxPAPER_ENV_DL = 27
+
+wxPAPER_ENV_C5 :: Int
+wxPAPER_ENV_C5 = 28
+
+wxPAPER_ENV_C3 :: Int
+wxPAPER_ENV_C3 = 29
+
+wxPAPER_ENV_C4 :: Int
+wxPAPER_ENV_C4 = 30
+
+wxPAPER_ENV_C6 :: Int
+wxPAPER_ENV_C6 = 31
+
+wxPAPER_ENV_C65 :: Int
+wxPAPER_ENV_C65 = 32
+
+wxPAPER_ENV_B4 :: Int
+wxPAPER_ENV_B4 = 33
+
+wxPAPER_ENV_B5 :: Int
+wxPAPER_ENV_B5 = 34
+
+wxPAPER_ENV_B6 :: Int
+wxPAPER_ENV_B6 = 35
+
+wxPAPER_ENV_ITALY :: Int
+wxPAPER_ENV_ITALY = 36
+
+wxPAPER_ENV_MONARCH :: Int
+wxPAPER_ENV_MONARCH = 37
+
+wxPAPER_ENV_PERSONAL :: Int
+wxPAPER_ENV_PERSONAL = 38
+
+wxPAPER_FANFOLD_US :: Int
+wxPAPER_FANFOLD_US = 39
+
+wxPAPER_FANFOLD_STD_GERMAN :: Int
+wxPAPER_FANFOLD_STD_GERMAN = 40
+
+wxPAPER_FANFOLD_LGL_GERMAN :: Int
+wxPAPER_FANFOLD_LGL_GERMAN = 41
+
+wxPAPER_ISO_B4 :: Int
+wxPAPER_ISO_B4 = 42
+
+wxPAPER_JAPANESE_POSTCARD :: Int
+wxPAPER_JAPANESE_POSTCARD = 43
+
+wxPAPER_9X11 :: Int
+wxPAPER_9X11 = 44
+
+wxPAPER_10X11 :: Int
+wxPAPER_10X11 = 45
+
+wxPAPER_15X11 :: Int
+wxPAPER_15X11 = 46
+
+wxPAPER_ENV_INVITE :: Int
+wxPAPER_ENV_INVITE = 47
+
+wxPAPER_LETTER_EXTRA :: Int
+wxPAPER_LETTER_EXTRA = 48
+
+wxPAPER_LEGAL_EXTRA :: Int
+wxPAPER_LEGAL_EXTRA = 49
+
+wxPAPER_TABLOID_EXTRA :: Int
+wxPAPER_TABLOID_EXTRA = 50
+
+wxPAPER_A4_EXTRA :: Int
+wxPAPER_A4_EXTRA = 51
+
+wxPAPER_LETTER_TRANSVERSE :: Int
+wxPAPER_LETTER_TRANSVERSE = 52
+
+wxPAPER_A4_TRANSVERSE :: Int
+wxPAPER_A4_TRANSVERSE = 53
+
+wxPAPER_LETTER_EXTRA_TRANSVERSE :: Int
+wxPAPER_LETTER_EXTRA_TRANSVERSE = 54
+
+wxPAPER_A_PLUS :: Int
+wxPAPER_A_PLUS = 55
+
+wxPAPER_B_PLUS :: Int
+wxPAPER_B_PLUS = 56
+
+wxPAPER_LETTER_PLUS :: Int
+wxPAPER_LETTER_PLUS = 57
+
+wxPAPER_A4_PLUS :: Int
+wxPAPER_A4_PLUS = 58
+
+wxPAPER_A5_TRANSVERSE :: Int
+wxPAPER_A5_TRANSVERSE = 59
+
+wxPAPER_B5_TRANSVERSE :: Int
+wxPAPER_B5_TRANSVERSE = 60
+
+wxPAPER_A3_EXTRA :: Int
+wxPAPER_A3_EXTRA = 61
+
+wxPAPER_A5_EXTRA :: Int
+wxPAPER_A5_EXTRA = 62
+
+wxPAPER_B5_EXTRA :: Int
+wxPAPER_B5_EXTRA = 63
+
+wxPAPER_A2 :: Int
+wxPAPER_A2 = 64
+
+wxPAPER_A3_TRANSVERSE :: Int
+wxPAPER_A3_TRANSVERSE = 65
+
+wxPAPER_A3_EXTRA_TRANSVERSE :: Int
+wxPAPER_A3_EXTRA_TRANSVERSE = 66
+
+wxPORTRAIT :: Int
+wxPORTRAIT = 1
+
+wxLANDSCAPE :: Int
+wxLANDSCAPE = 2
+
+wxDUPLEX_SIMPLEX :: Int
+wxDUPLEX_SIMPLEX = 0
+
+wxDUPLEX_HORIZONTAL :: Int
+wxDUPLEX_HORIZONTAL = 1
+
+wxDUPLEX_VERTICAL :: Int
+wxDUPLEX_VERTICAL = 2
+
+wxPRINT_MODE_NONE :: Int
+wxPRINT_MODE_NONE = 0
+
+wxPRINT_MODE_PREVIEW :: Int
+wxPRINT_MODE_PREVIEW = 1
+
+wxPRINT_MODE_FILE :: Int
+wxPRINT_MODE_FILE = 2
+
+wxPRINT_MODE_PRINTER :: Int
+wxPRINT_MODE_PRINTER = 3
+
+wxFULLSCREEN_NOMENUBAR :: Int
+wxFULLSCREEN_NOMENUBAR = 1
+
+wxFULLSCREEN_NOTOOLBAR :: Int
+wxFULLSCREEN_NOTOOLBAR = 2
+
+wxFULLSCREEN_NOSTATUSBAR :: Int
+wxFULLSCREEN_NOSTATUSBAR = 4
+
+wxFULLSCREEN_NOBORDER :: Int
+wxFULLSCREEN_NOBORDER = 8
+
+wxFULLSCREEN_NOCAPTION :: Int
+wxFULLSCREEN_NOCAPTION = 16
+
+wxLAYOUT_DEFAULT_MARGIN :: Int
+wxLAYOUT_DEFAULT_MARGIN = 0
+
+wxEDGE_LEFT :: Int
+wxEDGE_LEFT = 0
+
+wxEDGE_TOP :: Int
+wxEDGE_TOP = 1
+
+wxEDGE_RIGHT :: Int
+wxEDGE_RIGHT = 2
+
+wxEDGE_BOTTOM :: Int
+wxEDGE_BOTTOM = 3
+
+wxEDGE_WIDTH :: Int
+wxEDGE_WIDTH = 4
+
+wxEDGE_HEIGHT :: Int
+wxEDGE_HEIGHT = 5
+
+wxEDGE_CENTER :: Int
+wxEDGE_CENTER = 6
+
+wxEDGE_CENTREX :: Int
+wxEDGE_CENTREX = 7
+
+wxEDGE_CENTREY :: Int
+wxEDGE_CENTREY = 8
+
+wxRELATIONSHIP_UNCONSTRAINED :: Int
+wxRELATIONSHIP_UNCONSTRAINED = 0
+
+wxRELATIONSHIP_ASIS :: Int
+wxRELATIONSHIP_ASIS = 1
+
+wxRELATIONSHIP_PERCENTOF :: Int
+wxRELATIONSHIP_PERCENTOF = 2
+
+wxRELATIONSHIP_ABOVE :: Int
+wxRELATIONSHIP_ABOVE = 3
+
+wxRELATIONSHIP_BELOW :: Int
+wxRELATIONSHIP_BELOW = 4
+
+wxRELATIONSHIP_LEFTOF :: Int
+wxRELATIONSHIP_LEFTOF = 5
+
+wxRELATIONSHIP_RIGHTOF :: Int
+wxRELATIONSHIP_RIGHTOF = 6
+
+wxRELATIONSHIP_SAMEAS :: Int
+wxRELATIONSHIP_SAMEAS = 7
+
+wxRELATIONSHIP_ABSOLUTE :: Int
+wxRELATIONSHIP_ABSOLUTE = 8
+
+wxFONTENCODING_SYSTEM :: Int
+wxFONTENCODING_SYSTEM = (-1)
+
+wxFONTENCODING_DEFAULT :: Int
+wxFONTENCODING_DEFAULT = 0
+
+wxFONTENCODING_ISO8859_1 :: Int
+wxFONTENCODING_ISO8859_1 = 1
+
+wxFONTENCODING_ISO8859_2 :: Int
+wxFONTENCODING_ISO8859_2 = 2
+
+wxFONTENCODING_ISO8859_3 :: Int
+wxFONTENCODING_ISO8859_3 = 3
+
+wxFONTENCODING_ISO8859_4 :: Int
+wxFONTENCODING_ISO8859_4 = 4
+
+wxFONTENCODING_ISO8859_5 :: Int
+wxFONTENCODING_ISO8859_5 = 5
+
+wxFONTENCODING_ISO8859_6 :: Int
+wxFONTENCODING_ISO8859_6 = 6
+
+wxFONTENCODING_ISO8859_7 :: Int
+wxFONTENCODING_ISO8859_7 = 7
+
+wxFONTENCODING_ISO8859_8 :: Int
+wxFONTENCODING_ISO8859_8 = 8
+
+wxFONTENCODING_ISO8859_9 :: Int
+wxFONTENCODING_ISO8859_9 = 9
+
+wxFONTENCODING_ISO8859_10 :: Int
+wxFONTENCODING_ISO8859_10 = 10
+
+wxFONTENCODING_ISO8859_11 :: Int
+wxFONTENCODING_ISO8859_11 = 11
+
+wxFONTENCODING_ISO8859_12 :: Int
+wxFONTENCODING_ISO8859_12 = 12
+
+wxFONTENCODING_ISO8859_13 :: Int
+wxFONTENCODING_ISO8859_13 = 13
+
+wxFONTENCODING_ISO8859_14 :: Int
+wxFONTENCODING_ISO8859_14 = 14
+
+wxFONTENCODING_ISO8859_15 :: Int
+wxFONTENCODING_ISO8859_15 = 15
+
+wxFONTENCODING_ISO8859_MAX :: Int
+wxFONTENCODING_ISO8859_MAX = 16
+
+wxFONTENCODING_KOI8 :: Int
+wxFONTENCODING_KOI8 = 17
+
+wxFONTENCODING_ALTERNATIVE :: Int
+wxFONTENCODING_ALTERNATIVE = 18
+
+wxFONTENCODING_BULGARIAN :: Int
+wxFONTENCODING_BULGARIAN = 19
+
+wxFONTENCODING_CP437 :: Int
+wxFONTENCODING_CP437 = 20
+
+wxFONTENCODING_CP850 :: Int
+wxFONTENCODING_CP850 = 21
+
+wxFONTENCODING_CP852 :: Int
+wxFONTENCODING_CP852 = 22
+
+wxFONTENCODING_CP855 :: Int
+wxFONTENCODING_CP855 = 23
+
+wxFONTENCODING_CP866 :: Int
+wxFONTENCODING_CP866 = 24
+
+wxFONTENCODING_CP874 :: Int
+wxFONTENCODING_CP874 = 25
+
+wxFONTENCODING_CP1250 :: Int
+wxFONTENCODING_CP1250 = 26
+
+wxFONTENCODING_CP1251 :: Int
+wxFONTENCODING_CP1251 = 27
+
+wxFONTENCODING_CP1252 :: Int
+wxFONTENCODING_CP1252 = 28
+
+wxFONTENCODING_CP1253 :: Int
+wxFONTENCODING_CP1253 = 29
+
+wxFONTENCODING_CP1254 :: Int
+wxFONTENCODING_CP1254 = 30
+
+wxFONTENCODING_CP1255 :: Int
+wxFONTENCODING_CP1255 = 31
+
+wxFONTENCODING_CP1256 :: Int
+wxFONTENCODING_CP1256 = 32
+
+wxFONTENCODING_CP1257 :: Int
+wxFONTENCODING_CP1257 = 33
+
+wxFONTENCODING_CP12_MAX :: Int
+wxFONTENCODING_CP12_MAX = 34
+
+wxFONTENCODING_UNICODE :: Int
+wxFONTENCODING_UNICODE = 35
+
+wxFONTENCODING_MAX :: Int
+wxFONTENCODING_MAX = 36
+
+wxGRIDTABLE_REQUEST_VIEW_GET_VALUES :: Int
+wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000
+
+wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES :: Int
+wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES = 2001
+
+wxGRIDTABLE_NOTIFY_ROWS_INSERTED :: Int
+wxGRIDTABLE_NOTIFY_ROWS_INSERTED = 2002
+
+wxGRIDTABLE_NOTIFY_ROWS_APPENDED :: Int
+wxGRIDTABLE_NOTIFY_ROWS_APPENDED = 2003
+
+wxGRIDTABLE_NOTIFY_ROWS_DELETED :: Int
+wxGRIDTABLE_NOTIFY_ROWS_DELETED = 2004
+
+wxGRIDTABLE_NOTIFY_COLS_INSERTED :: Int
+wxGRIDTABLE_NOTIFY_COLS_INSERTED = 2005
+
+wxGRIDTABLE_NOTIFY_COLS_APPENDED :: Int
+wxGRIDTABLE_NOTIFY_COLS_APPENDED = 2006
+
+wxGRIDTABLE_NOTIFY_COLS_DELETED :: Int
+wxGRIDTABLE_NOTIFY_COLS_DELETED = 2007
+
+wxGridSelectCells :: Int
+wxGridSelectCells = 0
+
+wxGridSelectRows :: Int
+wxGridSelectRows = 1
+
+wxGridSelectColumns :: Int
+wxGridSelectColumns = 2
+
+wxFILTER_NONE :: Int
+wxFILTER_NONE = 0
+
+wxFILTER_ASCII :: Int
+wxFILTER_ASCII = 1
+
+wxFILTER_ALPHA :: Int
+wxFILTER_ALPHA = 2
+
+wxFILTER_ALPHANUMERIC :: Int
+wxFILTER_ALPHANUMERIC = 4
+
+wxFILTER_NUMERIC :: Int
+wxFILTER_NUMERIC = 8
+
+wxFILTER_INCLUDE_LIST :: Int
+wxFILTER_INCLUDE_LIST = 16
+
+wxFILTER_EXCLUDE_LIST :: Int
+wxFILTER_EXCLUDE_LIST = 32
+
+wxFILTER_UPPER_CASE :: Int
+wxFILTER_UPPER_CASE = 64
+
+wxFILTER_LOWER_CASE :: Int
+wxFILTER_LOWER_CASE = 128
+
+wxBITMAP_TYPE_INVALID :: Int
+wxBITMAP_TYPE_INVALID = 0
+
+wxBITMAP_TYPE_BMP :: Int
+wxBITMAP_TYPE_BMP = 1
+
+wxBITMAP_TYPE_BMP_RESOURCE :: Int
+wxBITMAP_TYPE_BMP_RESOURCE = 2
+
+wxBITMAP_TYPE_RESOURCE :: Int
+wxBITMAP_TYPE_RESOURCE = 2
+
+wxBITMAP_TYPE_ICO :: Int
+wxBITMAP_TYPE_ICO = 3
+
+wxBITMAP_TYPE_ICO_RESOURCE :: Int
+wxBITMAP_TYPE_ICO_RESOURCE = 4
+
+wxBITMAP_TYPE_CUR :: Int
+wxBITMAP_TYPE_CUR = 5
+
+wxBITMAP_TYPE_CUR_RESOURCE :: Int
+wxBITMAP_TYPE_CUR_RESOURCE = 6
+
+wxBITMAP_TYPE_XBM :: Int
+wxBITMAP_TYPE_XBM = 7
+
+wxBITMAP_TYPE_XBM_DATA :: Int
+wxBITMAP_TYPE_XBM_DATA = 8
+
+wxBITMAP_TYPE_XPM :: Int
+wxBITMAP_TYPE_XPM = 9
+
+wxBITMAP_TYPE_XPM_DATA :: Int
+wxBITMAP_TYPE_XPM_DATA = 10
+
+wxBITMAP_TYPE_TIF :: Int
+wxBITMAP_TYPE_TIF = 11
+
+wxBITMAP_TYPE_TIF_RESOURCE :: Int
+wxBITMAP_TYPE_TIF_RESOURCE = 12
+
+wxBITMAP_TYPE_GIF :: Int
+wxBITMAP_TYPE_GIF = 13
+
+wxBITMAP_TYPE_GIF_RESOURCE :: Int
+wxBITMAP_TYPE_GIF_RESOURCE = 14
+
+wxBITMAP_TYPE_PNG :: Int
+wxBITMAP_TYPE_PNG = 15
+
+wxBITMAP_TYPE_PNG_RESOURCE :: Int
+wxBITMAP_TYPE_PNG_RESOURCE = 16
+
+wxBITMAP_TYPE_JPEG :: Int
+wxBITMAP_TYPE_JPEG = 17
+
+wxBITMAP_TYPE_JPEG_RESOURCE :: Int
+wxBITMAP_TYPE_JPEG_RESOURCE = 18
+
+wxBITMAP_TYPE_PNM :: Int
+wxBITMAP_TYPE_PNM = 19
+
+wxBITMAP_TYPE_PNM_RESOURCE :: Int
+wxBITMAP_TYPE_PNM_RESOURCE = 20
+
+wxBITMAP_TYPE_PCX :: Int
+wxBITMAP_TYPE_PCX = 21
+
+wxBITMAP_TYPE_PCX_RESOURCE :: Int
+wxBITMAP_TYPE_PCX_RESOURCE = 22
+
+wxBITMAP_TYPE_PICT :: Int
+wxBITMAP_TYPE_PICT = 23
+
+wxBITMAP_TYPE_PICT_RESOURCE :: Int
+wxBITMAP_TYPE_PICT_RESOURCE = 24
+
+wxBITMAP_TYPE_ICON :: Int
+wxBITMAP_TYPE_ICON = 25
+
+wxBITMAP_TYPE_ICON_RESOURCE :: Int
+wxBITMAP_TYPE_ICON_RESOURCE = 26
+
+wxBITMAP_TYPE_MACCURSOR :: Int
+wxBITMAP_TYPE_MACCURSOR = 27
+
+wxBITMAP_TYPE_MACCURSOR_RESOURCE :: Int
+wxBITMAP_TYPE_MACCURSOR_RESOURCE = 28
+
+wxBITMAP_TYPE_ANY :: Int
+wxBITMAP_TYPE_ANY = 50
+
+wxCURSOR_NONE :: Int
+wxCURSOR_NONE = 0
+
+wxCURSOR_ARROW :: Int
+wxCURSOR_ARROW = 1
+
+wxCURSOR_RIGHT_ARROW :: Int
+wxCURSOR_RIGHT_ARROW = 2
+
+wxCURSOR_BULLSEYE :: Int
+wxCURSOR_BULLSEYE = 3
+
+wxCURSOR_CHAR :: Int
+wxCURSOR_CHAR = 4
+
+wxCURSOR_CROSS :: Int
+wxCURSOR_CROSS = 5
+
+wxCURSOR_HAND :: Int
+wxCURSOR_HAND = 6
+
+wxCURSOR_IBEAM :: Int
+wxCURSOR_IBEAM = 7
+
+wxCURSOR_LEFT_BUTTON :: Int
+wxCURSOR_LEFT_BUTTON = 8
+
+wxCURSOR_MAGNIFIER :: Int
+wxCURSOR_MAGNIFIER = 9
+
+wxCURSOR_MIDDLE_BUTTON :: Int
+wxCURSOR_MIDDLE_BUTTON = 10
+
+wxCURSOR_NO_ENTRY :: Int
+wxCURSOR_NO_ENTRY = 11
+
+wxCURSOR_PAINT_BRUSH :: Int
+wxCURSOR_PAINT_BRUSH = 12
+
+wxCURSOR_PENCIL :: Int
+wxCURSOR_PENCIL = 13
+
+wxCURSOR_POINT_LEFT :: Int
+wxCURSOR_POINT_LEFT = 14
+
+wxCURSOR_POINT_RIGHT :: Int
+wxCURSOR_POINT_RIGHT = 15
+
+wxCURSOR_QUESTION_ARROW :: Int
+wxCURSOR_QUESTION_ARROW = 16
+
+wxCURSOR_RIGHT_BUTTON :: Int
+wxCURSOR_RIGHT_BUTTON = 17
+
+wxCURSOR_SIZENESW :: Int
+wxCURSOR_SIZENESW = 18
+
+wxCURSOR_SIZENS :: Int
+wxCURSOR_SIZENS = 19
+
+wxCURSOR_SIZENWSE :: Int
+wxCURSOR_SIZENWSE = 20
+
+wxCURSOR_SIZEWE :: Int
+wxCURSOR_SIZEWE = 21
+
+wxCURSOR_SIZING :: Int
+wxCURSOR_SIZING = 22
+
+wxCURSOR_SPRAYCAN :: Int
+wxCURSOR_SPRAYCAN = 23
+
+wxCURSOR_WAIT :: Int
+wxCURSOR_WAIT = 24
+
+wxCURSOR_WATCH :: Int
+wxCURSOR_WATCH = 25
+
+wxCURSOR_BLANK :: Int
+wxCURSOR_BLANK = 26
+
+wxOPEN :: Int
+wxOPEN = 1
+
+wxSAVE :: Int
+wxSAVE = 2
+
+wxOVERWRITE_PROMPT :: Int
+wxOVERWRITE_PROMPT = 4
+
+wxHIDE_READONLY :: Int
+wxHIDE_READONLY = 8
+
+wxFILE_MUST_EXIST :: Int
+wxFILE_MUST_EXIST = 16
+
+wxMULTIPLE :: Int
+wxMULTIPLE = 32
+
+wxCHANGE_DIR :: Int
+wxCHANGE_DIR = 64
+
+wxDRAG_ERROR :: Int
+wxDRAG_ERROR = 0
+
+wxDRAG_NONE :: Int
+wxDRAG_NONE = 1
+
+wxDRAG_COPY :: Int
+wxDRAG_COPY = 2
+
+wxDRAG_MOVE :: Int
+wxDRAG_MOVE = 3
+
+wxDRAG_LINK :: Int
+wxDRAG_LINK = 4
+
+wxDRAG_CANCEL :: Int
+wxDRAG_CANCEL = 5
+
+wxSPLIT_HORIZONTAL :: Int
+wxSPLIT_HORIZONTAL = 1
+
+wxSPLIT_VERTICAL :: Int
+wxSPLIT_VERTICAL = 2
+
+wxLIST_FORMAT_LEFT :: Int
+wxLIST_FORMAT_LEFT = 0
+
+wxLIST_FORMAT_RIGHT :: Int
+wxLIST_FORMAT_RIGHT = 1
+
+wxLIST_FORMAT_CENTRE :: Int
+wxLIST_FORMAT_CENTRE = 2
+
+wxLIST_FORMAT_CENTER :: Int
+wxLIST_FORMAT_CENTER = 2
+
+wxLIST_STATE_DONTCARE :: Int
+wxLIST_STATE_DONTCARE = 0
+
+wxLIST_STATE_DROPHILITED :: Int
+wxLIST_STATE_DROPHILITED = 1
+
+wxLIST_STATE_FOCUSED :: Int
+wxLIST_STATE_FOCUSED = 2
+
+wxLIST_STATE_SELECTED :: Int
+wxLIST_STATE_SELECTED = 4
+
+wxLIST_STATE_CUT :: Int
+wxLIST_STATE_CUT = 8
+
+wxLIST_MASK_STATE :: Int
+wxLIST_MASK_STATE = 1
+
+wxLIST_MASK_TEXT :: Int
+wxLIST_MASK_TEXT = 2
+
+wxLIST_MASK_IMAGE :: Int
+wxLIST_MASK_IMAGE = 4
+
+wxLIST_MASK_DATA :: Int
+wxLIST_MASK_DATA = 8
+
+wxLIST_MASK_WIDTH :: Int
+wxLIST_MASK_WIDTH = 16
+
+wxLIST_MASK_FORMAT :: Int
+wxLIST_MASK_FORMAT = 32
+
+wxLIST_NEXT_ABOVE :: Int
+wxLIST_NEXT_ABOVE = 0
+
+wxLIST_NEXT_ALL :: Int
+wxLIST_NEXT_ALL = 1
+
+wxLIST_NEXT_BELOW :: Int
+wxLIST_NEXT_BELOW = 2
+
+wxLIST_NEXT_LEFT :: Int
+wxLIST_NEXT_LEFT = 3
+
+wxLIST_NEXT_RIGHT :: Int
+wxLIST_NEXT_RIGHT = 4
+
+wxRA_SPECIFY_COLS :: Int
+wxRA_SPECIFY_COLS = 4
+
+wxRA_SPECIFY_ROWS :: Int
+wxRA_SPECIFY_ROWS = 8
+
+wxTREE_HITTEST_ABOVE :: Int
+wxTREE_HITTEST_ABOVE = 1
+
+wxTREE_HITTEST_BELOW :: Int
+wxTREE_HITTEST_BELOW = 2
+
+wxTREE_HITTEST_NOWHERE :: Int
+wxTREE_HITTEST_NOWHERE = 4
+
+wxTREE_HITTEST_ONITEMBUTTON :: Int
+wxTREE_HITTEST_ONITEMBUTTON = 8
+
+wxTREE_HITTEST_ONITEMICON :: Int
+wxTREE_HITTEST_ONITEMICON = 16
+
+wxTREE_HITTEST_ONITEMINDENT :: Int
+wxTREE_HITTEST_ONITEMINDENT = 32
+
+wxTREE_HITTEST_ONITEMLABEL :: Int
+wxTREE_HITTEST_ONITEMLABEL = 64
+
+wxTREE_HITTEST_ONITEMRIGHT :: Int
+wxTREE_HITTEST_ONITEMRIGHT = 128
+
+wxTREE_HITTEST_ONITEMSTATEICON :: Int
+wxTREE_HITTEST_ONITEMSTATEICON = 256
+
+wxTREE_HITTEST_TOLEFT :: Int
+wxTREE_HITTEST_TOLEFT = 512
+
+wxTREE_HITTEST_TORIGHT :: Int
+wxTREE_HITTEST_TORIGHT = 1024
+
+wxTREE_HITTEST_ONITEMUPPERPART :: Int
+wxTREE_HITTEST_ONITEMUPPERPART = 2048
+
+wxTREE_HITTEST_ONITEMLOWERPART :: Int
+wxTREE_HITTEST_ONITEMLOWERPART = 4096
+
+wxTREE_HITTEST_ONITEM :: Int
+wxTREE_HITTEST_ONITEM = 80
+
+wxDEFAULT :: Int
+wxDEFAULT = 70
+{-# DEPRECATED wxDEFAULT "Don't use this" #-}
+
+wxDECORATIVE :: Int
+wxDECORATIVE = 71
+{-# DEPRECATED wxDECORATIVE "Don't use this" #-}
+
+wxROMAN :: Int
+wxROMAN = 72
+{-# DEPRECATED wxROMAN "Don't use this" #-}
+
+wxSCRIPT :: Int
+wxSCRIPT = 73
+{-# DEPRECATED wxSCRIPT "Don't use this" #-}
+
+wxSWISS :: Int
+wxSWISS = 74
+{-# DEPRECATED wxSWISS "Don't use this" #-}
+
+wxMODERN :: Int
+wxMODERN = 75
+{-# DEPRECATED wxMODERN "Don't use this" #-}
+
+wxTELETYPE :: Int
+wxTELETYPE = 76
+{-# DEPRECATED wxTELETYPE "Don't use this" #-}
+
+wxVARIABLE :: Int
+wxVARIABLE = 80
+{-# DEPRECATED wxVARIABLE "Don't use this" #-}
+
+wxFIXED :: Int
+wxFIXED = 81
+{-# DEPRECATED wxFIXED "Don't use this" #-}
+
+wxNORMAL :: Int
+wxNORMAL = 90
+{-# DEPRECATED wxNORMAL "Don't use this" #-}
+
+wxLIGHT :: Int
+wxLIGHT = 91
+{-# DEPRECATED wxLIGHT "Don't use this" #-}
+
+wxBOLD :: Int
+wxBOLD = 92
+{-# DEPRECATED wxBOLD "Don't use this" #-}
+
+wxITALIC :: Int
+wxITALIC = 93
+{-# DEPRECATED wxITALIC "Don't use this" #-}
+
+wxSLANT :: Int
+wxSLANT = 94
+{-# DEPRECATED wxSLANT "Don't use this" #-}
+
+-- ----------------------------------------------------------------------------
+-- font constants
+-- ----------------------------------------------------------------------------
+
+-- standard font families: these may be used only for the font creation, it
+-- doesn't make sense to query an existing font for its font family as,
+-- especially if the font had been created from a native font description, it
+-- may be unknown
+
+-- enum wxFontFamily
+wxFONTFAMILY_DEFAULT :: Int
+wxFONTFAMILY_DEFAULT = wxDEFAULT
+wxFONTFAMILY_DECORATIVE :: Int
+wxFONTFAMILY_DECORATIVE = wxDECORATIVE
+wxFONTFAMILY_ROMAN :: Int
+wxFONTFAMILY_ROMAN = wxROMAN
+wxFONTFAMILY_SCRIPT :: Int
+wxFONTFAMILY_SCRIPT = wxSCRIPT
+wxFONTFAMILY_SWISS :: Int
+wxFONTFAMILY_SWISS = wxSWISS
+wxFONTFAMILY_MODERN :: Int
+wxFONTFAMILY_MODERN = wxMODERN
+wxFONTFAMILY_TELETYPE :: Int
+wxFONTFAMILY_TELETYPE = wxTELETYPE
+wxFONTFAMILY_MAX :: Int
+wxFONTFAMILY_MAX = wxFONTFAMILY_TELETYPE + 1
+wxFONTFAMILY_UNKNOWN :: Int
+wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX
+
+-- font styles
+-- enum wxFontStyle
+wxFONTSTYLE_NORMAL :: Int
+wxFONTSTYLE_NORMAL = wxNORMAL
+wxFONTSTYLE_ITALIC :: Int
+wxFONTSTYLE_ITALIC = wxITALIC
+wxFONTSTYLE_SLANT :: Int
+wxFONTSTYLE_SLANT = wxSLANT
+wxFONTSTYLE_MAX :: Int
+wxFONTSTYLE_MAX = wxFONTSTYLE_SLANT + 1
+
+-- font weights
+-- enum wxFontWeight
+wxFONTWEIGHT_NORMAL :: Int
+wxFONTWEIGHT_NORMAL = wxNORMAL
+wxFONTWEIGHT_LIGHT :: Int
+wxFONTWEIGHT_LIGHT = wxLIGHT
+wxFONTWEIGHT_BOLD :: Int
+wxFONTWEIGHT_BOLD = wxBOLD
+wxFONTWEIGHT_MAX :: Int
+wxFONTWEIGHT_MAX = wxFONTWEIGHT_BOLD + 1
+
+-- Symbolic font sizes as defined in CSS specification.
+-- enum wxFontSymbolicSize
+wxFONTSIZE_XX_SMALL :: Int
+wxFONTSIZE_XX_SMALL = -3
+wxFONTSIZE_X_SMALL :: Int
+wxFONTSIZE_X_SMALL = -2
+wxFONTSIZE_SMALL :: Int
+wxFONTSIZE_SMALL = -1
+wxFONTSIZE_MEDIUM :: Int
+wxFONTSIZE_MEDIUM = 0
+wxFONTSIZE_LARGE :: Int
+wxFONTSIZE_LARGE = 1
+wxFONTSIZE_X_LARGE :: Int
+wxFONTSIZE_X_LARGE = 2
+wxFONTSIZE_XX_LARGE :: Int
+wxFONTSIZE_XX_LARGE = 3
+
+-- the font flag bits for the new font ctor accepting one combined flags word
+-- enum wxFontFlag
+-- no special flags: font with default weight/slant/anti-aliasing
+wxFONTFLAG_DEFAULT :: Int
+wxFONTFLAG_DEFAULT          = 0
+
+-- slant flags (default: no slant)
+wxFONTFLAG_ITALIC :: Int
+wxFONTFLAG_ITALIC           = 1 << 0
+wxFONTFLAG_SLANT :: Int
+wxFONTFLAG_SLANT            = 1 << 1
+
+-- weight flags (default: medium)
+wxFONTFLAG_LIGHT :: Int
+wxFONTFLAG_LIGHT            = 1 << 2
+wxFONTFLAG_BOLD :: Int
+wxFONTFLAG_BOLD             = 1 << 3
+
+-- anti-aliasing flag: force on or off (default: the current system default)
+wxFONTFLAG_ANTIALIASED :: Int
+wxFONTFLAG_ANTIALIASED      = 1 << 4
+wxFONTFLAG_NOT_ANTIALIASED :: Int
+wxFONTFLAG_NOT_ANTIALIASED  = 1 << 5
+
+-- underlined/strikethrough flags (default: no lines)
+wxFONTFLAG_UNDERLINED :: Int
+wxFONTFLAG_UNDERLINED       = 1 << 6
+wxFONTFLAG_STRIKETHROUGH :: Int
+wxFONTFLAG_STRIKETHROUGH    = 1 << 7
+
+-- the mask of all currently used flags
+wxFONTFLAG_MASK :: Int
+wxFONTFLAG_MASK = wxFONTFLAG_ITALIC             .|.
+                  wxFONTFLAG_SLANT              .|.
+                  wxFONTFLAG_LIGHT              .|.
+                  wxFONTFLAG_BOLD               .|.
+                  wxFONTFLAG_ANTIALIASED        .|.
+                  wxFONTFLAG_NOT_ANTIALIASED    .|.
+                  wxFONTFLAG_UNDERLINED         .|.
+                  wxFONTFLAG_STRIKETHROUGH
+
+-- End font constants
+
+
+wxBLUE_BRUSH :: Int
+wxBLUE_BRUSH = 0
+
+wxGREEN_BRUSH :: Int
+wxGREEN_BRUSH = 1
+
+wxWHITE_BRUSH :: Int
+wxWHITE_BRUSH = 2
+
+wxBLACK_BRUSH :: Int
+wxBLACK_BRUSH = 3
+
+wxGREY_BRUSH :: Int
+wxGREY_BRUSH = 4
+
+wxMEDIUM_GREY_BRUSH :: Int
+wxMEDIUM_GREY_BRUSH = 5
+
+wxLIGHT_GREY_BRUSH :: Int
+wxLIGHT_GREY_BRUSH = 6
+
+wxTRANSPARENT_BRUSH :: Int
+wxTRANSPARENT_BRUSH = 7
+
+wxCYAN_BRUSH :: Int
+wxCYAN_BRUSH = 8
+
+wxRED_BRUSH :: Int
+wxRED_BRUSH = 9
+
+-- From wx/brush.h
+-- NOTE: these values cannot be combined together!
+-- enum wxBrushStyle
+wxBRUSHSTYLE_INVALID :: Int
+wxBRUSHSTYLE_INVALID = -1
+
+wxBRUSHSTYLE_SOLID :: Int
+wxBRUSHSTYLE_SOLID = wxSOLID
+wxBRUSHSTYLE_TRANSPARENT :: Int
+wxBRUSHSTYLE_TRANSPARENT = wxTRANSPARENT
+wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE :: Int
+wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE = wxSTIPPLE_MASK_OPAQUE
+wxBRUSHSTYLE_STIPPLE_MASK :: Int
+wxBRUSHSTYLE_STIPPLE_MASK = wxSTIPPLE_MASK
+wxBRUSHSTYLE_STIPPLE :: Int
+wxBRUSHSTYLE_STIPPLE = wxSTIPPLE
+wxBRUSHSTYLE_BDIAGONAL_HATCH :: Int
+wxBRUSHSTYLE_BDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL
+wxBRUSHSTYLE_CROSSDIAG_HATCH :: Int
+wxBRUSHSTYLE_CROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG
+wxBRUSHSTYLE_FDIAGONAL_HATCH :: Int
+wxBRUSHSTYLE_FDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL
+wxBRUSHSTYLE_CROSS_HATCH :: Int
+wxBRUSHSTYLE_CROSS_HATCH = wxHATCHSTYLE_CROSS
+wxBRUSHSTYLE_HORIZONTAL_HATCH :: Int
+wxBRUSHSTYLE_HORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL
+wxBRUSHSTYLE_VERTICAL_HATCH :: Int
+wxBRUSHSTYLE_VERTICAL_HATCH = wxHATCHSTYLE_VERTICAL
+wxBRUSHSTYLE_FIRST_HATCH :: Int
+wxBRUSHSTYLE_FIRST_HATCH = wxHATCHSTYLE_FIRST
+wxBRUSHSTYLE_LAST_HATCH :: Int
+wxBRUSHSTYLE_LAST_HATCH = wxHATCHSTYLE_LAST
+
+
+wxBLACK :: Int
+wxBLACK = 0
+
+wxWHITE :: Int
+wxWHITE = 1
+
+wxRED :: Int
+wxRED = 2
+
+wxBLUE :: Int
+wxBLUE = 3
+
+wxGREEN :: Int
+wxGREEN = 4
+
+wxCYAN :: Int
+wxCYAN = 5
+
+wxLIGHT_GREY :: Int
+wxLIGHT_GREY = 6
+
+wxRED_PEN :: Int
+wxRED_PEN = 0
+
+wxCYAN_PEN :: Int
+wxCYAN_PEN = 1
+
+wxGREEN_PEN :: Int
+wxGREEN_PEN = 2
+
+wxBLACK_PEN :: Int
+wxBLACK_PEN = 3
+
+wxWHITE_PEN :: Int
+wxWHITE_PEN = 4
+
+wxTRANSPARENT_PEN :: Int
+wxTRANSPARENT_PEN = 5
+
+wxBLACK_DASHED_PEN :: Int
+wxBLACK_DASHED_PEN = 6
+
+wxGREY_PEN :: Int
+wxGREY_PEN = 7
+
+wxMEDIUM_GREY_PEN :: Int
+wxMEDIUM_GREY_PEN = 8
+
+wxLIGHT_GREY_PEN :: Int
+wxLIGHT_GREY_PEN = 9
+
+
+-- From wx/pen.h
+
+-- enum wxPenStyle
+wxPENSTYLE_INVALID :: Int
+wxPENSTYLE_INVALID = -1
+
+wxPENSTYLE_SOLID :: Int
+wxPENSTYLE_SOLID = wxSOLID
+wxPENSTYLE_DOT :: Int
+wxPENSTYLE_DOT = wxDOT
+wxPENSTYLE_LONG_DASH :: Int
+wxPENSTYLE_LONG_DASH = wxLONG_DASH
+wxPENSTYLE_SHORT_DASH :: Int
+wxPENSTYLE_SHORT_DASH = wxSHORT_DASH
+wxPENSTYLE_DOT_DASH :: Int
+wxPENSTYLE_DOT_DASH = wxDOT_DASH
+wxPENSTYLE_USER_DASH :: Int
+wxPENSTYLE_USER_DASH = wxUSER_DASH
+
+wxPENSTYLE_TRANSPARENT :: Int
+wxPENSTYLE_TRANSPARENT = wxTRANSPARENT
+
+wxPENSTYLE_STIPPLE_MASK_OPAQUE :: Int
+wxPENSTYLE_STIPPLE_MASK_OPAQUE = wxSTIPPLE_MASK_OPAQUE
+wxPENSTYLE_STIPPLE_MASK :: Int
+wxPENSTYLE_STIPPLE_MASK = wxSTIPPLE_MASK
+wxPENSTYLE_STIPPLE :: Int
+wxPENSTYLE_STIPPLE = wxSTIPPLE
+
+wxPENSTYLE_BDIAGONAL_HATCH :: Int
+wxPENSTYLE_BDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL
+wxPENSTYLE_CROSSDIAG_HATCH :: Int
+wxPENSTYLE_CROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG
+wxPENSTYLE_FDIAGONAL_HATCH :: Int
+wxPENSTYLE_FDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL
+wxPENSTYLE_CROSS_HATCH :: Int
+wxPENSTYLE_CROSS_HATCH = wxHATCHSTYLE_CROSS
+wxPENSTYLE_HORIZONTAL_HATCH :: Int
+wxPENSTYLE_HORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL
+wxPENSTYLE_VERTICAL_HATCH :: Int
+wxPENSTYLE_VERTICAL_HATCH = wxHATCHSTYLE_VERTICAL
+wxPENSTYLE_FIRST_HATCH :: Int
+wxPENSTYLE_FIRST_HATCH = wxHATCHSTYLE_FIRST
+wxPENSTYLE_LAST_HATCH :: Int
+wxPENSTYLE_LAST_HATCH = wxHATCHSTYLE_LAST
+
+-- enum wxPenJoin
+wxJOIN_INVALID :: Int
+wxJOIN_INVALID = -1
+
+wxJOIN_BEVEL :: Int
+wxJOIN_BEVEL = 120
+wxJOIN_MITER :: Int
+wxJOIN_MITER = 121
+wxJOIN_ROUND :: Int
+wxJOIN_ROUND = 122
+
+-- enum wxPenCap
+wxCAP_INVALID :: Int
+wxCAP_INVALID = -1
+
+wxCAP_ROUND :: Int
+wxCAP_ROUND = 130
+wxCAP_PROJECTING :: Int
+wxCAP_PROJECTING = 131
+wxCAP_BUTT :: Int
+wxCAP_BUTT = 132
+
+-- End from wx/pen.h
+
+
+wxNOT_FOUND :: Int
+wxNOT_FOUND = (-1)
+
+wxPRINTER_NO_ERROR :: Int
+wxPRINTER_NO_ERROR = 0
+
+wxPRINTER_CANCELLED :: Int
+wxPRINTER_CANCELLED = 1
+
+wxPRINTER_ERROR :: Int
+wxPRINTER_ERROR = 2
+
+wxPREVIEW_PRINT :: Int
+wxPREVIEW_PRINT = 1
+
+wxPREVIEW_PREVIOUS :: Int
+wxPREVIEW_PREVIOUS = 2
+
+wxPREVIEW_NEXT :: Int
+wxPREVIEW_NEXT = 4
+
+wxPREVIEW_ZOOM :: Int
+wxPREVIEW_ZOOM = 8
+
+wxPREVIEW_FIRST :: Int
+wxPREVIEW_FIRST = 8
+
+wxPREVIEW_LAST :: Int
+wxPREVIEW_LAST = 32
+
+wxPREVIEW_GOTO :: Int
+wxPREVIEW_GOTO = 64
+
+wxPREVIEW_DEFAULT :: Int
+wxPREVIEW_DEFAULT = 126
+
+wxID_PREVIEW_CLOSE :: Int
+wxID_PREVIEW_CLOSE = 1
+
+wxID_PREVIEW_NEXT :: Int
+wxID_PREVIEW_NEXT = 2
+
+wxID_PREVIEW_PREVIOUS :: Int
+wxID_PREVIEW_PREVIOUS = 3
+
+wxID_PREVIEW_PRINT :: Int
+wxID_PREVIEW_PRINT = 4
+
+wxID_PREVIEW_ZOOM :: Int
+wxID_PREVIEW_ZOOM = 5
+
+wxID_PREVIEW_FIRST :: Int
+wxID_PREVIEW_FIRST = 6
+
+wxID_PREVIEW_LAST :: Int
+wxID_PREVIEW_LAST = 7
+
+wxID_PREVIEW_GOTO :: Int
+wxID_PREVIEW_GOTO = 8
+
+wxPRINTID_STATIC :: Int
+wxPRINTID_STATIC = 10
+
+wxPRINTID_RANGE :: Int
+wxPRINTID_RANGE = 11
+
+wxPRINTID_FROM :: Int
+wxPRINTID_FROM = 12
+
+wxPRINTID_TO :: Int
+wxPRINTID_TO = 13
+
+wxPRINTID_COPIES :: Int
+wxPRINTID_COPIES = 14
+
+wxPRINTID_PRINTTOFILE :: Int
+wxPRINTID_PRINTTOFILE = 15
+
+wxPRINTID_SETUP :: Int
+wxPRINTID_SETUP = 16
+
+wxPRINTID_LEFTMARGIN :: Int
+wxPRINTID_LEFTMARGIN = 30
+
+wxPRINTID_RIGHTMARGIN :: Int
+wxPRINTID_RIGHTMARGIN = 31
+
+wxPRINTID_TOPMARGIN :: Int
+wxPRINTID_TOPMARGIN = 32
+
+wxPRINTID_BOTTOMMARGIN :: Int
+wxPRINTID_BOTTOMMARGIN = 33
+
+wxPRINTID_PRINTCOLOUR :: Int
+wxPRINTID_PRINTCOLOUR = 10
+
+wxPRINTID_ORIENTATION :: Int
+wxPRINTID_ORIENTATION = 11
+
+wxPRINTID_COMMAND :: Int
+wxPRINTID_COMMAND = 12
+
+wxPRINTID_OPTIONS :: Int
+wxPRINTID_OPTIONS = 13
+
+wxPRINTID_PAPERSIZE :: Int
+wxPRINTID_PAPERSIZE = 14
+
+wxHF_TOOLBAR :: Int
+wxHF_TOOLBAR = 1
+
+wxHF_CONTENTS :: Int
+wxHF_CONTENTS = 2
+
+wxHF_INDEX :: Int
+wxHF_INDEX = 4
+
+wxHF_SEARCH :: Int
+wxHF_SEARCH = 8
+
+wxHF_BOOKMARKS :: Int
+wxHF_BOOKMARKS = 16
+
+wxHF_OPENFILES :: Int
+wxHF_OPENFILES = 32
+
+wxHF_PRINT :: Int
+wxHF_PRINT = 64
+
+wxHF_FLATTOOLBAR :: Int
+wxHF_FLATTOOLBAR = 128
+
+wxHF_DEFAULTSTYLE :: Int
+wxHF_DEFAULTSTYLE = 95
+
+wxLAYOUT_HORIZONTAL :: Int
+wxLAYOUT_HORIZONTAL = 0
+
+wxLAYOUT_VERTICAL :: Int
+wxLAYOUT_VERTICAL = 1
+
+wxLAYOUT_NONE :: Int
+wxLAYOUT_NONE = 0
+
+wxLAYOUT_TOP :: Int
+wxLAYOUT_TOP = 1
+
+wxLAYOUT_LEFT :: Int
+wxLAYOUT_LEFT = 2
+
+wxLAYOUT_RIGHT :: Int
+wxLAYOUT_RIGHT = 3
+
+wxLAYOUT_BOTTOM :: Int
+wxLAYOUT_BOTTOM = 4
+
+wxSASH_DRAG_NONE :: Int
+wxSASH_DRAG_NONE = 0
+
+wxSASH_DRAG_DRAGGING :: Int
+wxSASH_DRAG_DRAGGING = 1
+
+wxSASH_DRAG_LEFT_DOWN :: Int
+wxSASH_DRAG_LEFT_DOWN = 2
+
+wxSASH_TOP :: Int
+wxSASH_TOP = 0
+
+wxSASH_RIGHT :: Int
+wxSASH_RIGHT = 1
+
+wxSASH_BOTTOM :: Int
+wxSASH_BOTTOM = 2
+
+wxSASH_LEFT :: Int
+wxSASH_LEFT = 3
+
+wxSASH_NONE :: Int
+wxSASH_NONE = 100
+
+wxSW_NOBORDER :: Int
+wxSW_NOBORDER = 0
+
+wxSW_BORDER :: Int
+wxSW_BORDER = 32
+
+wxSW_3DSASH :: Int
+wxSW_3DSASH = 64
+
+wxSW_3DBORDER :: Int
+wxSW_3DBORDER = 128
+
+wxSW_3D :: Int
+wxSW_3D = 192
+
+wxSASH_STATUS_OK :: Int
+wxSASH_STATUS_OK = 0
+
+wxSASH_STATUS_OUT_OF_RANGE :: Int
+wxSASH_STATUS_OUT_OF_RANGE = 1
+
+wxXRC_NONE :: Int
+wxXRC_NONE = 0
+
+wxXRC_USE_LOCALE :: Int
+wxXRC_USE_LOCALE = 1
+
+wxXRC_NO_SUBCLASSING :: Int
+wxXRC_NO_SUBCLASSING = 2
+
+wxXRC_NO_RELOADING :: Int
+wxXRC_NO_RELOADING = 4
+
+wxSYS_WHITE_BRUSH :: Int
+wxSYS_WHITE_BRUSH = 0
+
+wxSYS_LTGRAY_BRUSH :: Int
+wxSYS_LTGRAY_BRUSH = 1
+
+wxSYS_GRAY_BRUSH :: Int
+wxSYS_GRAY_BRUSH = 2
+
+wxSYS_DKGRAY_BRUSH :: Int
+wxSYS_DKGRAY_BRUSH = 3
+
+wxSYS_BLACK_BRUSH :: Int
+wxSYS_BLACK_BRUSH = 4
+
+wxSYS_NULL_BRUSH :: Int
+wxSYS_NULL_BRUSH = 5
+
+wxSYS_HOLLOW_BRUSH :: Int
+wxSYS_HOLLOW_BRUSH = 5
+
+wxSYS_WHITE_PEN :: Int
+wxSYS_WHITE_PEN = 6
+
+wxSYS_BLACK_PEN :: Int
+wxSYS_BLACK_PEN = 7
+
+wxSYS_NULL_PEN :: Int
+wxSYS_NULL_PEN = 8
+
+wxSYS_OEM_FIXED_FONT :: Int
+wxSYS_OEM_FIXED_FONT = 10
+
+wxSYS_ANSI_FIXED_FONT :: Int
+wxSYS_ANSI_FIXED_FONT = 11
+
+wxSYS_ANSI_VAR_FONT :: Int
+wxSYS_ANSI_VAR_FONT = 12
+
+wxSYS_SYSTEM_FONT :: Int
+wxSYS_SYSTEM_FONT = 13
+
+wxSYS_DEVICE_DEFAULT_FONT :: Int
+wxSYS_DEVICE_DEFAULT_FONT = 14
+
+wxSYS_DEFAULT_PALETTE :: Int
+wxSYS_DEFAULT_PALETTE = 15
+
+wxSYS_SYSTEM_FIXED_FONT :: Int
+wxSYS_SYSTEM_FIXED_FONT = 16
+
+wxSYS_DEFAULT_GUI_FONT :: Int
+wxSYS_DEFAULT_GUI_FONT = 17
+
+wxSYS_COLOUR_SCROLLBAR :: Int
+wxSYS_COLOUR_SCROLLBAR = 0
+
+wxSYS_COLOUR_BACKGROUND :: Int
+wxSYS_COLOUR_BACKGROUND = 1
+
+wxSYS_COLOUR_ACTIVECAPTION :: Int
+wxSYS_COLOUR_ACTIVECAPTION = 2
+
+wxSYS_COLOUR_INACTIVECAPTION :: Int
+wxSYS_COLOUR_INACTIVECAPTION = 3
+
+wxSYS_COLOUR_MENU :: Int
+wxSYS_COLOUR_MENU = 4
+
+wxSYS_COLOUR_WINDOW :: Int
+wxSYS_COLOUR_WINDOW = 5
+
+wxSYS_COLOUR_WINDOWFRAME :: Int
+wxSYS_COLOUR_WINDOWFRAME = 6
+
+wxSYS_COLOUR_MENUTEXT :: Int
+wxSYS_COLOUR_MENUTEXT = 7
+
+wxSYS_COLOUR_WINDOWTEXT :: Int
+wxSYS_COLOUR_WINDOWTEXT = 8
+
+wxSYS_COLOUR_CAPTIONTEXT :: Int
+wxSYS_COLOUR_CAPTIONTEXT = 9
+
+wxSYS_COLOUR_ACTIVEBORDER :: Int
+wxSYS_COLOUR_ACTIVEBORDER = 10
+
+wxSYS_COLOUR_INACTIVEBORDER :: Int
+wxSYS_COLOUR_INACTIVEBORDER = 11
+
+wxSYS_COLOUR_APPWORKSPACE :: Int
+wxSYS_COLOUR_APPWORKSPACE = 12
+
+wxSYS_COLOUR_HIGHLIGHT :: Int
+wxSYS_COLOUR_HIGHLIGHT = 13
+
+wxSYS_COLOUR_HIGHLIGHTTEXT :: Int
+wxSYS_COLOUR_HIGHLIGHTTEXT = 14
+
+wxSYS_COLOUR_BTNFACE :: Int
+wxSYS_COLOUR_BTNFACE = 15
+
+wxSYS_COLOUR_BTNSHADOW :: Int
+wxSYS_COLOUR_BTNSHADOW = 16
+
+wxSYS_COLOUR_GRAYTEXT :: Int
+wxSYS_COLOUR_GRAYTEXT = 17
+
+wxSYS_COLOUR_BTNTEXT :: Int
+wxSYS_COLOUR_BTNTEXT = 18
+
+wxSYS_COLOUR_INACTIVECAPTIONTEXT :: Int
+wxSYS_COLOUR_INACTIVECAPTIONTEXT = 19
+
+wxSYS_COLOUR_BTNHIGHLIGHT :: Int
+wxSYS_COLOUR_BTNHIGHLIGHT = 20
+
+wxSYS_COLOUR_3DDKSHADOW :: Int
+wxSYS_COLOUR_3DDKSHADOW = 21
+
+wxSYS_COLOUR_3DLIGHT :: Int
+wxSYS_COLOUR_3DLIGHT = 22
+
+wxSYS_COLOUR_INFOTEXT :: Int
+wxSYS_COLOUR_INFOTEXT = 23
+
+wxSYS_COLOUR_INFOBK :: Int
+wxSYS_COLOUR_INFOBK = 24
+
+wxSYS_COLOUR_LISTBOX :: Int
+wxSYS_COLOUR_LISTBOX = 25
+
+wxSYS_COLOUR_DESKTOP :: Int
+wxSYS_COLOUR_DESKTOP = 1
+
+wxSYS_COLOUR_3DFACE :: Int
+wxSYS_COLOUR_3DFACE = 15
+
+wxSYS_COLOUR_3DSHADOW :: Int
+wxSYS_COLOUR_3DSHADOW = 16
+
+wxSYS_COLOUR_3DHIGHLIGHT :: Int
+wxSYS_COLOUR_3DHIGHLIGHT = 20
+
+wxSYS_COLOUR_3DHILIGHT :: Int
+wxSYS_COLOUR_3DHILIGHT = 20
+
+wxSYS_COLOUR_BTNHILIGHT :: Int
+wxSYS_COLOUR_BTNHILIGHT = 20
+
+wxSYS_MOUSE_BUTTONS :: Int
+wxSYS_MOUSE_BUTTONS = 1
+
+wxSYS_BORDER_X :: Int
+wxSYS_BORDER_X = 2
+
+wxSYS_BORDER_Y :: Int
+wxSYS_BORDER_Y = 3
+
+wxSYS_CURSOR_X :: Int
+wxSYS_CURSOR_X = 4
+
+wxSYS_CURSOR_Y :: Int
+wxSYS_CURSOR_Y = 5
+
+wxSYS_DCLICK_X :: Int
+wxSYS_DCLICK_X = 6
+
+wxSYS_DCLICK_Y :: Int
+wxSYS_DCLICK_Y = 7
+
+wxSYS_DRAG_X :: Int
+wxSYS_DRAG_X = 8
+
+wxSYS_DRAG_Y :: Int
+wxSYS_DRAG_Y = 9
+
+wxSYS_EDGE_X :: Int
+wxSYS_EDGE_X = 10
+
+wxSYS_EDGE_Y :: Int
+wxSYS_EDGE_Y = 11
+
+wxSYS_HSCROLL_ARROW_X :: Int
+wxSYS_HSCROLL_ARROW_X = 12
+
+wxSYS_HSCROLL_ARROW_Y :: Int
+wxSYS_HSCROLL_ARROW_Y = 13
+
+wxSYS_HTHUMB_X :: Int
+wxSYS_HTHUMB_X = 14
+
+wxSYS_ICON_X :: Int
+wxSYS_ICON_X = 15
+
+wxSYS_ICON_Y :: Int
+wxSYS_ICON_Y = 16
+
+wxSYS_ICONSPACING_X :: Int
+wxSYS_ICONSPACING_X = 17
+
+wxSYS_ICONSPACING_Y :: Int
+wxSYS_ICONSPACING_Y = 18
+
+wxSYS_WINDOWMIN_X :: Int
+wxSYS_WINDOWMIN_X = 19
+
+wxSYS_WINDOWMIN_Y :: Int
+wxSYS_WINDOWMIN_Y = 20
+
+wxSYS_SCREEN_X :: Int
+wxSYS_SCREEN_X = 21
+
+wxSYS_SCREEN_Y :: Int
+wxSYS_SCREEN_Y = 22
+
+wxSYS_FRAMESIZE_X :: Int
+wxSYS_FRAMESIZE_X = 23
+
+wxSYS_FRAMESIZE_Y :: Int
+wxSYS_FRAMESIZE_Y = 24
+
+wxSYS_SMALLICON_X :: Int
+wxSYS_SMALLICON_X = 25
+
+wxSYS_SMALLICON_Y :: Int
+wxSYS_SMALLICON_Y = 26
+
+wxSYS_HSCROLL_Y :: Int
+wxSYS_HSCROLL_Y = 27
+
+wxSYS_VSCROLL_X :: Int
+wxSYS_VSCROLL_X = 28
+
+wxSYS_VSCROLL_ARROW_X :: Int
+wxSYS_VSCROLL_ARROW_X = 29
+
+wxSYS_VSCROLL_ARROW_Y :: Int
+wxSYS_VSCROLL_ARROW_Y = 30
+
+wxSYS_VTHUMB_Y :: Int
+wxSYS_VTHUMB_Y = 31
+
+wxSYS_CAPTION_Y :: Int
+wxSYS_CAPTION_Y = 32
+
+wxSYS_MENU_Y :: Int
+wxSYS_MENU_Y = 33
+
+wxSYS_NETWORK_PRESENT :: Int
+wxSYS_NETWORK_PRESENT = 34
+
+wxSYS_PENWINDOWS_PRESENT :: Int
+wxSYS_PENWINDOWS_PRESENT = 35
+
+wxSYS_SHOW_SOUNDS :: Int
+wxSYS_SHOW_SOUNDS = 36
+
+wxSYS_SWAP_BUTTONS :: Int
+wxSYS_SWAP_BUTTONS = 37
+
+wxSYS_SCREEN_NONE :: Int
+wxSYS_SCREEN_NONE = 0
+
+wxSYS_SCREEN_TINY :: Int
+wxSYS_SCREEN_TINY = 1
+
+wxSYS_SCREEN_PDA :: Int
+wxSYS_SCREEN_PDA = 2
+
+wxSYS_SCREEN_SMALL :: Int
+wxSYS_SCREEN_SMALL = 3
+
+wxSYS_SCREEN_DESKTOP :: Int
+wxSYS_SCREEN_DESKTOP = 4
+
+wxCAL_BORDER_NONE :: Int
+wxCAL_BORDER_NONE = 0
+
+wxCAL_BORDER_SQUARE :: Int
+wxCAL_BORDER_SQUARE = 1
+
+wxCAL_BORDER_ROUND :: Int
+wxCAL_BORDER_ROUND = 2
+
+wxCAL_HITTEST_NOWHERE :: Int
+wxCAL_HITTEST_NOWHERE = 0
+
+wxCAL_HITTEST_HEADER :: Int
+wxCAL_HITTEST_HEADER = 1
+
+wxCAL_HITTEST_DAY :: Int
+wxCAL_HITTEST_DAY = 2
+
+wxUNKNOWN :: Int
+wxUNKNOWN = 0
+
+wxSTRING :: Int
+wxSTRING = 1
+
+wxBOOLEAN :: Int
+wxBOOLEAN = 2
+
+wxINTEGER :: Int
+wxINTEGER = 3
+
+wxFLOAT :: Int
+wxFLOAT = 4
+
+wxMUTEX_NO_ERROR :: Int
+wxMUTEX_NO_ERROR = 0
+
+wxMUTEX_DEAD_LOCK :: Int
+wxMUTEX_DEAD_LOCK = 1
+
+wxMUTEX_BUSY :: Int
+wxMUTEX_BUSY = 2
+
+wxMUTEX_UNLOCKED :: Int
+wxMUTEX_UNLOCKED = 3
+
+wxMUTEX_MISC_ERROR :: Int
+wxMUTEX_MISC_ERROR = 4
+
+wxPLATFORM_CURRENT :: Int
+wxPLATFORM_CURRENT = (-1)
+
+wxPLATFORM_UNIX :: Int
+wxPLATFORM_UNIX = 0
+
+wxPLATFORM_WINDOWS :: Int
+wxPLATFORM_WINDOWS = 1
+
+wxPLATFORM_OS2 :: Int
+wxPLATFORM_OS2 = 2
+
+wxPLATFORM_MAC :: Int
+wxPLATFORM_MAC = 3
+
+wxLED_ALIGN_LEFT :: Int
+wxLED_ALIGN_LEFT = 1
+
+wxLED_ALIGN_RIGHT :: Int
+wxLED_ALIGN_RIGHT = 2
+
+wxLED_ALIGN_CENTER :: Int
+wxLED_ALIGN_CENTER = 4
+
+wxLED_ALIGN_MASK :: Int
+wxLED_ALIGN_MASK = 4
+
+wxLED_DRAW_FADED :: Int
+wxLED_DRAW_FADED = 8
+
+wxDS_MANAGE_SCROLLBARS :: Int
+wxDS_MANAGE_SCROLLBARS = 16
+
+wxDS_DRAG_CORNER :: Int
+wxDS_DRAG_CORNER = 32
+
+wxEL_ALLOW_NEW :: Int
+wxEL_ALLOW_NEW = 256
+
+wxEL_ALLOW_EDIT :: Int
+wxEL_ALLOW_EDIT = 512
+
+wxEL_ALLOW_DELETE :: Int
+wxEL_ALLOW_DELETE = 1024
+
+wxTR_NO_BUTTONS :: Int
+wxTR_NO_BUTTONS = 0
+
+wxTR_HAS_BUTTONS :: Int
+wxTR_HAS_BUTTONS = 1
+
+wxTR_TWIST_BUTTONS :: Int
+wxTR_TWIST_BUTTONS = 2
+
+wxTR_NO_LINES :: Int
+wxTR_NO_LINES = 4
+
+wxTR_LINES_AT_ROOT :: Int
+wxTR_LINES_AT_ROOT = 8
+
+wxTR_AQUA_BUTTONS :: Int
+wxTR_AQUA_BUTTONS = 16
+
+wxTR_SINGLE :: Int
+wxTR_SINGLE = 0
+
+wxTR_MULTIPLE :: Int
+wxTR_MULTIPLE = 32
+
+wxTR_EXTENDED :: Int
+wxTR_EXTENDED = 64
+
+wxTR_FULL_ROW_HIGHLIGHT :: Int
+wxTR_FULL_ROW_HIGHLIGHT = 8192
+
+wxTR_EDIT_LABELS :: Int
+wxTR_EDIT_LABELS = 512
+
+wxTR_ROW_LINES :: Int
+wxTR_ROW_LINES = 1024
+
+wxTR_HIDE_ROOT :: Int
+wxTR_HIDE_ROOT = 2048
+
+wxTR_HAS_VARIABLE_ROW_HEIGHT :: Int
+wxTR_HAS_VARIABLE_ROW_HEIGHT = 128
+
+wxCBAR_DOCKED_HORIZONTALLY :: Int
+wxCBAR_DOCKED_HORIZONTALLY = 0
+
+wxCBAR_DOCKED_VERTICALLY :: Int
+wxCBAR_DOCKED_VERTICALLY = 1
+
+wxCBAR_FLOATING :: Int
+wxCBAR_FLOATING = 2
+
+wxCBAR_HIDDEN :: Int
+wxCBAR_HIDDEN = 3
+
+fL_ALIGN_TOP :: Int
+fL_ALIGN_TOP = 0
+
+fL_ALIGN_BOTTOM :: Int
+fL_ALIGN_BOTTOM = 1
+
+fL_ALIGN_LEFT :: Int
+fL_ALIGN_LEFT = 2
+
+fL_ALIGN_RIGHT :: Int
+fL_ALIGN_RIGHT = 3
+
+fL_ALIGN_TOP_PANE :: Int
+fL_ALIGN_TOP_PANE = 1
+
+fL_ALIGN_BOTTOM_PANE :: Int
+fL_ALIGN_BOTTOM_PANE = 2
+
+fL_ALIGN_LEFT_PANE :: Int
+fL_ALIGN_LEFT_PANE = 4
+
+fL_ALIGN_RIGHT_PANE :: Int
+fL_ALIGN_RIGHT_PANE = 8
+
+wxALL_PANES :: Int
+wxALL_PANES = 15
+
+cB_NO_ITEMS_HITTED :: Int
+cB_NO_ITEMS_HITTED = 0
+
+cB_UPPER_ROW_HANDLE_HITTED :: Int
+cB_UPPER_ROW_HANDLE_HITTED = 1
+
+cB_LOWER_ROW_HANDLE_HITTED :: Int
+cB_LOWER_ROW_HANDLE_HITTED = 2
+
+cB_LEFT_BAR_HANDLE_HITTED :: Int
+cB_LEFT_BAR_HANDLE_HITTED = 3
+
+cB_RIGHT_BAR_HANDLE_HITTED :: Int
+cB_RIGHT_BAR_HANDLE_HITTED = 4
+
+cB_BAR_CONTENT_HITTED :: Int
+cB_BAR_CONTENT_HITTED = 5
+
+wxOK :: Int
+wxOK = 4
+
+wxYES :: Int
+wxYES = 2
+
+wxNO :: Int
+wxNO = 8
+
+wxYES_NO :: Int
+wxYES_NO = 10
+
+wxCANCEL :: Int
+wxCANCEL = 16
+
+wxNO_DEFAULT :: Int
+wxNO_DEFAULT = 128
+
+wxYES_DEFAULT :: Int
+wxYES_DEFAULT = 0
+
+wxFR_DOWN :: Int
+wxFR_DOWN = 1
+
+wxFR_WHOLEWORD :: Int
+wxFR_WHOLEWORD = 2
+
+wxFR_MATCHCASE :: Int
+wxFR_MATCHCASE = 4
+
+wxFR_REPLACEDIALOG :: Int
+wxFR_REPLACEDIALOG = 1
+
+wxFR_NOUPDOWN :: Int
+wxFR_NOUPDOWN = 2
+
+wxFR_NOMATCHCASE :: Int
+wxFR_NOMATCHCASE = 4
+
+wxFR_NOWHOLEWORD :: Int
+wxFR_NOWHOLEWORD = 8
+
+wxQUANTIZE_INCLUDE_WINDOWS_COLOURS :: Int
+wxQUANTIZE_INCLUDE_WINDOWS_COLOURS = 1
+
+wxQUANTIZE_RETURN_8BIT_DATA :: Int
+wxQUANTIZE_RETURN_8BIT_DATA = 2
+
+wxQUANTIZE_FILL_DESTINATION_IMAGE :: Int
+wxQUANTIZE_FILL_DESTINATION_IMAGE = 4
+
+wxLANGUAGE_DEFAULT :: Int
+wxLANGUAGE_DEFAULT = 0
+
+wxLANGUAGE_UNKNOWN :: Int
+wxLANGUAGE_UNKNOWN = 1
+
+wxLANGUAGE_ABKHAZIAN :: Int
+wxLANGUAGE_ABKHAZIAN = 2
+
+wxLANGUAGE_AFAR :: Int
+wxLANGUAGE_AFAR = 3
+
+wxLANGUAGE_AFRIKAANS :: Int
+wxLANGUAGE_AFRIKAANS = 4
+
+wxLANGUAGE_ALBANIAN :: Int
+wxLANGUAGE_ALBANIAN = 5
+
+wxLANGUAGE_AMHARIC :: Int
+wxLANGUAGE_AMHARIC = 6
+
+wxLANGUAGE_ARABIC :: Int
+wxLANGUAGE_ARABIC = 7
+
+wxLANGUAGE_ARABIC_ALGERIA :: Int
+wxLANGUAGE_ARABIC_ALGERIA = 8
+
+wxLANGUAGE_ARABIC_BAHRAIN :: Int
+wxLANGUAGE_ARABIC_BAHRAIN = 9
+
+wxLANGUAGE_ARABIC_EGYPT :: Int
+wxLANGUAGE_ARABIC_EGYPT = 10
+
+wxLANGUAGE_ARABIC_IRAQ :: Int
+wxLANGUAGE_ARABIC_IRAQ = 11
+
+wxLANGUAGE_ARABIC_JORDAN :: Int
+wxLANGUAGE_ARABIC_JORDAN = 12
+
+wxLANGUAGE_ARABIC_KUWAIT :: Int
+wxLANGUAGE_ARABIC_KUWAIT = 13
+
+wxLANGUAGE_ARABIC_LEBANON :: Int
+wxLANGUAGE_ARABIC_LEBANON = 14
+
+wxLANGUAGE_ARABIC_LIBYA :: Int
+wxLANGUAGE_ARABIC_LIBYA = 15
+
+wxLANGUAGE_ARABIC_MOROCCO :: Int
+wxLANGUAGE_ARABIC_MOROCCO = 16
+
+wxLANGUAGE_ARABIC_OMAN :: Int
+wxLANGUAGE_ARABIC_OMAN = 17
+
+wxLANGUAGE_ARABIC_QATAR :: Int
+wxLANGUAGE_ARABIC_QATAR = 18
+
+wxLANGUAGE_ARABIC_SAUDI_ARABIA :: Int
+wxLANGUAGE_ARABIC_SAUDI_ARABIA = 19
+
+wxLANGUAGE_ARABIC_SUDAN :: Int
+wxLANGUAGE_ARABIC_SUDAN = 20
+
+wxLANGUAGE_ARABIC_SYRIA :: Int
+wxLANGUAGE_ARABIC_SYRIA = 21
+
+wxLANGUAGE_ARABIC_TUNISIA :: Int
+wxLANGUAGE_ARABIC_TUNISIA = 22
+
+wxLANGUAGE_ARABIC_UAE :: Int
+wxLANGUAGE_ARABIC_UAE = 23
+
+wxLANGUAGE_ARABIC_YEMEN :: Int
+wxLANGUAGE_ARABIC_YEMEN = 24
+
+wxLANGUAGE_ARMENIAN :: Int
+wxLANGUAGE_ARMENIAN = 25
+
+wxLANGUAGE_ASSAMESE :: Int
+wxLANGUAGE_ASSAMESE = 26
+
+wxLANGUAGE_AYMARA :: Int
+wxLANGUAGE_AYMARA = 27
+
+wxLANGUAGE_AZERI :: Int
+wxLANGUAGE_AZERI = 28
+
+wxLANGUAGE_AZERI_CYRILLIC :: Int
+wxLANGUAGE_AZERI_CYRILLIC = 29
+
+wxLANGUAGE_AZERI_LATIN :: Int
+wxLANGUAGE_AZERI_LATIN = 30
+
+wxLANGUAGE_BASHKIR :: Int
+wxLANGUAGE_BASHKIR = 31
+
+wxLANGUAGE_BASQUE :: Int
+wxLANGUAGE_BASQUE = 32
+
+wxLANGUAGE_BELARUSIAN :: Int
+wxLANGUAGE_BELARUSIAN = 33
+
+wxLANGUAGE_BENGALI :: Int
+wxLANGUAGE_BENGALI = 34
+
+wxLANGUAGE_BHUTANI :: Int
+wxLANGUAGE_BHUTANI = 35
+
+wxLANGUAGE_BIHARI :: Int
+wxLANGUAGE_BIHARI = 36
+
+wxLANGUAGE_BISLAMA :: Int
+wxLANGUAGE_BISLAMA = 37
+
+wxLANGUAGE_BRETON :: Int
+wxLANGUAGE_BRETON = 38
+
+wxLANGUAGE_BULGARIAN :: Int
+wxLANGUAGE_BULGARIAN = 39
+
+wxLANGUAGE_BURMESE :: Int
+wxLANGUAGE_BURMESE = 40
+
+wxLANGUAGE_CAMBODIAN :: Int
+wxLANGUAGE_CAMBODIAN = 41
+
+wxLANGUAGE_CATALAN :: Int
+wxLANGUAGE_CATALAN = 42
+
+wxLANGUAGE_CHINESE :: Int
+wxLANGUAGE_CHINESE = 43
+
+wxLANGUAGE_CHINESE_SIMPLIFIED :: Int
+wxLANGUAGE_CHINESE_SIMPLIFIED = 44
+
+wxLANGUAGE_CHINESE_TRADITIONAL :: Int
+wxLANGUAGE_CHINESE_TRADITIONAL = 45
+
+wxLANGUAGE_CHINESE_HONGKONG :: Int
+wxLANGUAGE_CHINESE_HONGKONG = 46
+
+wxLANGUAGE_CHINESE_MACAU :: Int
+wxLANGUAGE_CHINESE_MACAU = 47
+
+wxLANGUAGE_CHINESE_SINGAPORE :: Int
+wxLANGUAGE_CHINESE_SINGAPORE = 48
+
+wxLANGUAGE_CHINESE_TAIWAN :: Int
+wxLANGUAGE_CHINESE_TAIWAN = 49
+
+wxLANGUAGE_CORSICAN :: Int
+wxLANGUAGE_CORSICAN = 50
+
+wxLANGUAGE_CROATIAN :: Int
+wxLANGUAGE_CROATIAN = 51
+
+wxLANGUAGE_CZECH :: Int
+wxLANGUAGE_CZECH = 52
+
+wxLANGUAGE_DANISH :: Int
+wxLANGUAGE_DANISH = 53
+
+wxLANGUAGE_DUTCH :: Int
+wxLANGUAGE_DUTCH = 54
+
+wxLANGUAGE_DUTCH_BELGIAN :: Int
+wxLANGUAGE_DUTCH_BELGIAN = 55
+
+wxLANGUAGE_ENGLISH :: Int
+wxLANGUAGE_ENGLISH = 56
+
+wxLANGUAGE_ENGLISH_UK :: Int
+wxLANGUAGE_ENGLISH_UK = 57
+
+wxLANGUAGE_ENGLISH_US :: Int
+wxLANGUAGE_ENGLISH_US = 58
+
+wxLANGUAGE_ENGLISH_AUSTRALIA :: Int
+wxLANGUAGE_ENGLISH_AUSTRALIA = 59
+
+wxLANGUAGE_ENGLISH_BELIZE :: Int
+wxLANGUAGE_ENGLISH_BELIZE = 60
+
+wxLANGUAGE_ENGLISH_BOTSWANA :: Int
+wxLANGUAGE_ENGLISH_BOTSWANA = 61
+
+wxLANGUAGE_ENGLISH_CANADA :: Int
+wxLANGUAGE_ENGLISH_CANADA = 62
+
+wxLANGUAGE_ENGLISH_CARIBBEAN :: Int
+wxLANGUAGE_ENGLISH_CARIBBEAN = 63
+
+wxLANGUAGE_ENGLISH_DENMARK :: Int
+wxLANGUAGE_ENGLISH_DENMARK = 64
+
+wxLANGUAGE_ENGLISH_EIRE :: Int
+wxLANGUAGE_ENGLISH_EIRE = 65
+
+wxLANGUAGE_ENGLISH_JAMAICA :: Int
+wxLANGUAGE_ENGLISH_JAMAICA = 66
+
+wxLANGUAGE_ENGLISH_NEW_ZEALAND :: Int
+wxLANGUAGE_ENGLISH_NEW_ZEALAND = 67
+
+wxLANGUAGE_ENGLISH_PHILIPPINES :: Int
+wxLANGUAGE_ENGLISH_PHILIPPINES = 68
+
+wxLANGUAGE_ENGLISH_SOUTH_AFRICA :: Int
+wxLANGUAGE_ENGLISH_SOUTH_AFRICA = 69
+
+wxLANGUAGE_ENGLISH_TRINIDAD :: Int
+wxLANGUAGE_ENGLISH_TRINIDAD = 70
+
+wxLANGUAGE_ENGLISH_ZIMBABWE :: Int
+wxLANGUAGE_ENGLISH_ZIMBABWE = 71
+
+wxLANGUAGE_ESPERANTO :: Int
+wxLANGUAGE_ESPERANTO = 72
+
+wxLANGUAGE_ESTONIAN :: Int
+wxLANGUAGE_ESTONIAN = 73
+
+wxLANGUAGE_FAEROESE :: Int
+wxLANGUAGE_FAEROESE = 74
+
+wxLANGUAGE_FARSI :: Int
+wxLANGUAGE_FARSI = 75
+
+wxLANGUAGE_FIJI :: Int
+wxLANGUAGE_FIJI = 76
+
+wxLANGUAGE_FINNISH :: Int
+wxLANGUAGE_FINNISH = 77
+
+wxLANGUAGE_FRENCH :: Int
+wxLANGUAGE_FRENCH = 78
+
+wxLANGUAGE_FRENCH_BELGIAN :: Int
+wxLANGUAGE_FRENCH_BELGIAN = 79
+
+wxLANGUAGE_FRENCH_CANADIAN :: Int
+wxLANGUAGE_FRENCH_CANADIAN = 80
+
+wxLANGUAGE_FRENCH_LUXEMBOURG :: Int
+wxLANGUAGE_FRENCH_LUXEMBOURG = 81
+
+wxLANGUAGE_FRENCH_MONACO :: Int
+wxLANGUAGE_FRENCH_MONACO = 82
+
+wxLANGUAGE_FRENCH_SWISS :: Int
+wxLANGUAGE_FRENCH_SWISS = 83
+
+wxLANGUAGE_FRISIAN :: Int
+wxLANGUAGE_FRISIAN = 84
+
+wxLANGUAGE_GALICIAN :: Int
+wxLANGUAGE_GALICIAN = 85
+
+wxLANGUAGE_GEORGIAN :: Int
+wxLANGUAGE_GEORGIAN = 86
+
+wxLANGUAGE_GERMAN :: Int
+wxLANGUAGE_GERMAN = 87
+
+wxLANGUAGE_GERMAN_AUSTRIAN :: Int
+wxLANGUAGE_GERMAN_AUSTRIAN = 88
+
+wxLANGUAGE_GERMAN_BELGIUM :: Int
+wxLANGUAGE_GERMAN_BELGIUM = 89
+
+wxLANGUAGE_GERMAN_LIECHTENSTEIN :: Int
+wxLANGUAGE_GERMAN_LIECHTENSTEIN = 90
+
+wxLANGUAGE_GERMAN_LUXEMBOURG :: Int
+wxLANGUAGE_GERMAN_LUXEMBOURG = 91
+
+wxLANGUAGE_GERMAN_SWISS :: Int
+wxLANGUAGE_GERMAN_SWISS = 92
+
+wxLANGUAGE_GREEK :: Int
+wxLANGUAGE_GREEK = 93
+
+wxLANGUAGE_GREENLANDIC :: Int
+wxLANGUAGE_GREENLANDIC = 94
+
+wxLANGUAGE_GUARANI :: Int
+wxLANGUAGE_GUARANI = 95
+
+wxLANGUAGE_GUJARATI :: Int
+wxLANGUAGE_GUJARATI = 96
+
+wxLANGUAGE_HAUSA :: Int
+wxLANGUAGE_HAUSA = 97
+
+wxLANGUAGE_HEBREW :: Int
+wxLANGUAGE_HEBREW = 98
+
+wxLANGUAGE_HINDI :: Int
+wxLANGUAGE_HINDI = 99
+
+wxLANGUAGE_HUNGARIAN :: Int
+wxLANGUAGE_HUNGARIAN = 100
+
+wxLANGUAGE_ICELANDIC :: Int
+wxLANGUAGE_ICELANDIC = 101
+
+wxLANGUAGE_INDONESIAN :: Int
+wxLANGUAGE_INDONESIAN = 102
+
+wxLANGUAGE_INTERLINGUA :: Int
+wxLANGUAGE_INTERLINGUA = 103
+
+wxLANGUAGE_INTERLINGUE :: Int
+wxLANGUAGE_INTERLINGUE = 104
+
+wxLANGUAGE_INUKTITUT :: Int
+wxLANGUAGE_INUKTITUT = 105
+
+wxLANGUAGE_INUPIAK :: Int
+wxLANGUAGE_INUPIAK = 106
+
+wxLANGUAGE_IRISH :: Int
+wxLANGUAGE_IRISH = 107
+
+wxLANGUAGE_ITALIAN :: Int
+wxLANGUAGE_ITALIAN = 108
+
+wxLANGUAGE_ITALIAN_SWISS :: Int
+wxLANGUAGE_ITALIAN_SWISS = 109
+
+wxLANGUAGE_JAPANESE :: Int
+wxLANGUAGE_JAPANESE = 110
+
+wxLANGUAGE_JAVANESE :: Int
+wxLANGUAGE_JAVANESE = 111
+
+wxLANGUAGE_KANNADA :: Int
+wxLANGUAGE_KANNADA = 112
+
+wxLANGUAGE_KASHMIRI :: Int
+wxLANGUAGE_KASHMIRI = 113
+
+wxLANGUAGE_KASHMIRI_INDIA :: Int
+wxLANGUAGE_KASHMIRI_INDIA = 114
+
+wxLANGUAGE_KAZAKH :: Int
+wxLANGUAGE_KAZAKH = 115
+
+wxLANGUAGE_KERNEWEK :: Int
+wxLANGUAGE_KERNEWEK = 116
+
+wxLANGUAGE_KINYARWANDA :: Int
+wxLANGUAGE_KINYARWANDA = 117
+
+wxLANGUAGE_KIRGHIZ :: Int
+wxLANGUAGE_KIRGHIZ = 118
+
+wxLANGUAGE_KIRUNDI :: Int
+wxLANGUAGE_KIRUNDI = 119
+
+wxLANGUAGE_KONKANI :: Int
+wxLANGUAGE_KONKANI = 120
+
+wxLANGUAGE_KOREAN :: Int
+wxLANGUAGE_KOREAN = 121
+
+wxLANGUAGE_KURDISH :: Int
+wxLANGUAGE_KURDISH = 122
+
+wxLANGUAGE_LAOTHIAN :: Int
+wxLANGUAGE_LAOTHIAN = 123
+
+wxLANGUAGE_LATIN :: Int
+wxLANGUAGE_LATIN = 124
+
+wxLANGUAGE_LATVIAN :: Int
+wxLANGUAGE_LATVIAN = 125
+
+wxLANGUAGE_LINGALA :: Int
+wxLANGUAGE_LINGALA = 126
+
+wxLANGUAGE_LITHUANIAN :: Int
+wxLANGUAGE_LITHUANIAN = 127
+
+wxLANGUAGE_MACEDONIAN :: Int
+wxLANGUAGE_MACEDONIAN = 128
+
+wxLANGUAGE_MALAGASY :: Int
+wxLANGUAGE_MALAGASY = 129
+
+wxLANGUAGE_MALAY :: Int
+wxLANGUAGE_MALAY = 130
+
+wxLANGUAGE_MALAYALAM :: Int
+wxLANGUAGE_MALAYALAM = 131
+
+wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM :: Int
+wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM = 132
+
+wxLANGUAGE_MALAY_MALAYSIA :: Int
+wxLANGUAGE_MALAY_MALAYSIA = 133
+
+wxLANGUAGE_MALTESE :: Int
+wxLANGUAGE_MALTESE = 134
+
+wxLANGUAGE_MANIPURI :: Int
+wxLANGUAGE_MANIPURI = 135
+
+wxLANGUAGE_MAORI :: Int
+wxLANGUAGE_MAORI = 136
+
+wxLANGUAGE_MARATHI :: Int
+wxLANGUAGE_MARATHI = 137
+
+wxLANGUAGE_MOLDAVIAN :: Int
+wxLANGUAGE_MOLDAVIAN = 138
+
+wxLANGUAGE_MONGOLIAN :: Int
+wxLANGUAGE_MONGOLIAN = 139
+
+wxLANGUAGE_NAURU :: Int
+wxLANGUAGE_NAURU = 140
+
+wxLANGUAGE_NEPALI :: Int
+wxLANGUAGE_NEPALI = 141
+
+wxLANGUAGE_NEPALI_INDIA :: Int
+wxLANGUAGE_NEPALI_INDIA = 142
+
+wxLANGUAGE_NORWEGIAN_BOKMAL :: Int
+wxLANGUAGE_NORWEGIAN_BOKMAL = 143
+
+wxLANGUAGE_NORWEGIAN_NYNORSK :: Int
+wxLANGUAGE_NORWEGIAN_NYNORSK = 144
+
+wxLANGUAGE_OCCITAN :: Int
+wxLANGUAGE_OCCITAN = 145
+
+wxLANGUAGE_ORIYA :: Int
+wxLANGUAGE_ORIYA = 146
+
+wxLANGUAGE_OROMO :: Int
+wxLANGUAGE_OROMO = 147
+
+wxLANGUAGE_PASHTO :: Int
+wxLANGUAGE_PASHTO = 148
+
+wxLANGUAGE_POLISH :: Int
+wxLANGUAGE_POLISH = 149
+
+wxLANGUAGE_PORTUGUESE :: Int
+wxLANGUAGE_PORTUGUESE = 150
+
+wxLANGUAGE_PORTUGUESE_BRAZILIAN :: Int
+wxLANGUAGE_PORTUGUESE_BRAZILIAN = 151
+
+wxLANGUAGE_PUNJABI :: Int
+wxLANGUAGE_PUNJABI = 152
+
+wxLANGUAGE_QUECHUA :: Int
+wxLANGUAGE_QUECHUA = 153
+
+wxLANGUAGE_RHAETO_ROMANCE :: Int
+wxLANGUAGE_RHAETO_ROMANCE = 154
+
+wxLANGUAGE_ROMANIAN :: Int
+wxLANGUAGE_ROMANIAN = 155
+
+wxLANGUAGE_RUSSIAN :: Int
+wxLANGUAGE_RUSSIAN = 156
+
+wxLANGUAGE_RUSSIAN_UKRAINE :: Int
+wxLANGUAGE_RUSSIAN_UKRAINE = 157
+
+wxLANGUAGE_SAMOAN :: Int
+wxLANGUAGE_SAMOAN = 158
+
+wxLANGUAGE_SANGHO :: Int
+wxLANGUAGE_SANGHO = 159
+
+wxLANGUAGE_SANSKRIT :: Int
+wxLANGUAGE_SANSKRIT = 160
+
+wxLANGUAGE_SCOTS_GAELIC :: Int
+wxLANGUAGE_SCOTS_GAELIC = 161
+
+wxLANGUAGE_SERBIAN :: Int
+wxLANGUAGE_SERBIAN = 162
+
+wxLANGUAGE_SERBIAN_CYRILLIC :: Int
+wxLANGUAGE_SERBIAN_CYRILLIC = 163
+
+wxLANGUAGE_SERBIAN_LATIN :: Int
+wxLANGUAGE_SERBIAN_LATIN = 164
+
+wxLANGUAGE_SERBO_CROATIAN :: Int
+wxLANGUAGE_SERBO_CROATIAN = 165
+
+wxLANGUAGE_SESOTHO :: Int
+wxLANGUAGE_SESOTHO = 166
+
+wxLANGUAGE_SETSWANA :: Int
+wxLANGUAGE_SETSWANA = 167
+
+wxLANGUAGE_SHONA :: Int
+wxLANGUAGE_SHONA = 168
+
+wxLANGUAGE_SINDHI :: Int
+wxLANGUAGE_SINDHI = 169
+
+wxLANGUAGE_SINHALESE :: Int
+wxLANGUAGE_SINHALESE = 170
+
+wxLANGUAGE_SISWATI :: Int
+wxLANGUAGE_SISWATI = 171
+
+wxLANGUAGE_SLOVAK :: Int
+wxLANGUAGE_SLOVAK = 172
+
+wxLANGUAGE_SLOVENIAN :: Int
+wxLANGUAGE_SLOVENIAN = 173
+
+wxLANGUAGE_SOMALI :: Int
+wxLANGUAGE_SOMALI = 174
+
+wxLANGUAGE_SPANISH :: Int
+wxLANGUAGE_SPANISH = 175
+
+wxLANGUAGE_SPANISH_ARGENTINA :: Int
+wxLANGUAGE_SPANISH_ARGENTINA = 176
+
+wxLANGUAGE_SPANISH_BOLIVIA :: Int
+wxLANGUAGE_SPANISH_BOLIVIA = 177
+
+wxLANGUAGE_SPANISH_CHILE :: Int
+wxLANGUAGE_SPANISH_CHILE = 178
+
+wxLANGUAGE_SPANISH_COLOMBIA :: Int
+wxLANGUAGE_SPANISH_COLOMBIA = 179
+
+wxLANGUAGE_SPANISH_COSTA_RICA :: Int
+wxLANGUAGE_SPANISH_COSTA_RICA = 180
+
+wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC :: Int
+wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC = 181
+
+wxLANGUAGE_SPANISH_ECUADOR :: Int
+wxLANGUAGE_SPANISH_ECUADOR = 182
+
+wxLANGUAGE_SPANISH_EL_SALVADOR :: Int
+wxLANGUAGE_SPANISH_EL_SALVADOR = 183
+
+wxLANGUAGE_SPANISH_GUATEMALA :: Int
+wxLANGUAGE_SPANISH_GUATEMALA = 184
+
+wxLANGUAGE_SPANISH_HONDURAS :: Int
+wxLANGUAGE_SPANISH_HONDURAS = 185
+
+wxLANGUAGE_SPANISH_MEXICAN :: Int
+wxLANGUAGE_SPANISH_MEXICAN = 186
+
+wxLANGUAGE_SPANISH_MODERN :: Int
+wxLANGUAGE_SPANISH_MODERN = 187
+
+wxLANGUAGE_SPANISH_NICARAGUA :: Int
+wxLANGUAGE_SPANISH_NICARAGUA = 188
+
+wxLANGUAGE_SPANISH_PANAMA :: Int
+wxLANGUAGE_SPANISH_PANAMA = 189
+
+wxLANGUAGE_SPANISH_PARAGUAY :: Int
+wxLANGUAGE_SPANISH_PARAGUAY = 190
+
+wxLANGUAGE_SPANISH_PERU :: Int
+wxLANGUAGE_SPANISH_PERU = 191
+
+wxLANGUAGE_SPANISH_PUERTO_RICO :: Int
+wxLANGUAGE_SPANISH_PUERTO_RICO = 192
+
+wxLANGUAGE_SPANISH_URUGUAY :: Int
+wxLANGUAGE_SPANISH_URUGUAY = 193
+
+wxLANGUAGE_SPANISH_US :: Int
+wxLANGUAGE_SPANISH_US = 194
+
+wxLANGUAGE_SPANISH_VENEZUELA :: Int
+wxLANGUAGE_SPANISH_VENEZUELA = 195
+
+wxLANGUAGE_SUNDANESE :: Int
+wxLANGUAGE_SUNDANESE = 196
+
+wxLANGUAGE_SWAHILI :: Int
+wxLANGUAGE_SWAHILI = 197
+
+wxLANGUAGE_SWEDISH :: Int
+wxLANGUAGE_SWEDISH = 198
+
+wxLANGUAGE_SWEDISH_FINLAND :: Int
+wxLANGUAGE_SWEDISH_FINLAND = 199
+
+wxLANGUAGE_TAGALOG :: Int
+wxLANGUAGE_TAGALOG = 200
+
+wxLANGUAGE_TAJIK :: Int
+wxLANGUAGE_TAJIK = 201
+
+wxLANGUAGE_TAMIL :: Int
+wxLANGUAGE_TAMIL = 202
+
+wxLANGUAGE_TATAR :: Int
+wxLANGUAGE_TATAR = 203
+
+wxLANGUAGE_TELUGU :: Int
+wxLANGUAGE_TELUGU = 204
+
+wxLANGUAGE_THAI :: Int
+wxLANGUAGE_THAI = 205
+
+wxLANGUAGE_TIBETAN :: Int
+wxLANGUAGE_TIBETAN = 206
+
+wxLANGUAGE_TIGRINYA :: Int
+wxLANGUAGE_TIGRINYA = 207
+
+wxLANGUAGE_TONGA :: Int
+wxLANGUAGE_TONGA = 208
+
+wxLANGUAGE_TSONGA :: Int
+wxLANGUAGE_TSONGA = 209
+
+wxLANGUAGE_TURKISH :: Int
+wxLANGUAGE_TURKISH = 210
+
+wxLANGUAGE_TURKMEN :: Int
+wxLANGUAGE_TURKMEN = 211
+
+wxLANGUAGE_TWI :: Int
+wxLANGUAGE_TWI = 212
+
+wxLANGUAGE_UIGHUR :: Int
+wxLANGUAGE_UIGHUR = 213
+
+wxLANGUAGE_UKRAINIAN :: Int
+wxLANGUAGE_UKRAINIAN = 214
+
+wxLANGUAGE_URDU :: Int
+wxLANGUAGE_URDU = 215
+
+wxLANGUAGE_URDU_INDIA :: Int
+wxLANGUAGE_URDU_INDIA = 216
+
+wxLANGUAGE_URDU_PAKISTAN :: Int
+wxLANGUAGE_URDU_PAKISTAN = 217
+
+wxLANGUAGE_UZBEK :: Int
+wxLANGUAGE_UZBEK = 218
+
+wxLANGUAGE_UZBEK_CYRILLIC :: Int
+wxLANGUAGE_UZBEK_CYRILLIC = 219
+
+wxLANGUAGE_UZBEK_LATIN :: Int
+wxLANGUAGE_UZBEK_LATIN = 220
+
+wxLANGUAGE_VIETNAMESE :: Int
+wxLANGUAGE_VIETNAMESE = 221
+
+wxLANGUAGE_VOLAPUK :: Int
+wxLANGUAGE_VOLAPUK = 222
+
+wxLANGUAGE_WELSH :: Int
+wxLANGUAGE_WELSH = 223
+
+wxLANGUAGE_WOLOF :: Int
+wxLANGUAGE_WOLOF = 224
+
+wxLANGUAGE_XHOSA :: Int
+wxLANGUAGE_XHOSA = 225
+
+wxLANGUAGE_YIDDISH :: Int
+wxLANGUAGE_YIDDISH = 226
+
+wxLANGUAGE_YORUBA :: Int
+wxLANGUAGE_YORUBA = 227
+
+wxLANGUAGE_ZHUANG :: Int
+wxLANGUAGE_ZHUANG = 228
+
+wxLANGUAGE_ZULU :: Int
+wxLANGUAGE_ZULU = 229
+
+wxLANGUAGE_USER_DEFINE :: Int
+wxLANGUAGE_USER_DEFINE = 230
+
+wxLOCALE_THOUSANDS_SEP :: Int
+wxLOCALE_THOUSANDS_SEP = 0
+
+wxLOCALE_DECIMAL_POINT :: Int
+wxLOCALE_DECIMAL_POINT = 1
+
+wxLOCALE_LOAD_DEFAULT :: Int
+wxLOCALE_LOAD_DEFAULT = 1
+
+wxLOCALE_CONV_ENCODING :: Int
+wxLOCALE_CONV_ENCODING = 2
+
+wxSTC_INVALID_POSITION :: Int
+wxSTC_INVALID_POSITION = (-1)
+
+wxSTC_START :: Int
+wxSTC_START = 2000
+
+wxSTC_OPTIONAL_START :: Int
+wxSTC_OPTIONAL_START = 3000
+
+wxSTC_LEXER_START :: Int
+wxSTC_LEXER_START = 4000
+
+wxSTC_WS_INVISIBLE :: Int
+wxSTC_WS_INVISIBLE = 0
+
+wxSTC_WS_VISIBLEALWAYS :: Int
+wxSTC_WS_VISIBLEALWAYS = 1
+
+wxSTC_WS_VISIBLEAFTERINDENT :: Int
+wxSTC_WS_VISIBLEAFTERINDENT = 2
+
+wxSTC_EOL_CRLF :: Int
+wxSTC_EOL_CRLF = 0
+
+wxSTC_EOL_CR :: Int
+wxSTC_EOL_CR = 1
+
+wxSTC_EOL_LF :: Int
+wxSTC_EOL_LF = 2
+
+wxSTC_CP_UTF8 :: Int
+wxSTC_CP_UTF8 = 65001
+
+wxSTC_CP_DBCS :: Int
+wxSTC_CP_DBCS = 1
+
+wxSTC_MARKER_MAX :: Int
+wxSTC_MARKER_MAX = 31
+
+wxSTC_MARK_CIRCLE :: Int
+wxSTC_MARK_CIRCLE = 0
+
+wxSTC_MARK_ROUNDRECT :: Int
+wxSTC_MARK_ROUNDRECT = 1
+
+wxSTC_MARK_ARROW :: Int
+wxSTC_MARK_ARROW = 2
+
+wxSTC_MARK_SMALLRECT :: Int
+wxSTC_MARK_SMALLRECT = 3
+
+wxSTC_MARK_SHORTARROW :: Int
+wxSTC_MARK_SHORTARROW = 4
+
+wxSTC_MARK_EMPTY :: Int
+wxSTC_MARK_EMPTY = 5
+
+wxSTC_MARK_ARROWDOWN :: Int
+wxSTC_MARK_ARROWDOWN = 6
+
+wxSTC_MARK_MINUS :: Int
+wxSTC_MARK_MINUS = 7
+
+wxSTC_MARK_PLUS :: Int
+wxSTC_MARK_PLUS = 8
+
+wxSTC_MARK_VLINE :: Int
+wxSTC_MARK_VLINE = 9
+
+wxSTC_MARK_LCORNER :: Int
+wxSTC_MARK_LCORNER = 10
+
+wxSTC_MARK_TCORNER :: Int
+wxSTC_MARK_TCORNER = 11
+
+wxSTC_MARK_BOXPLUS :: Int
+wxSTC_MARK_BOXPLUS = 12
+
+wxSTC_MARK_BOXPLUSCONNECTED :: Int
+wxSTC_MARK_BOXPLUSCONNECTED = 13
+
+wxSTC_MARK_BOXMINUS :: Int
+wxSTC_MARK_BOXMINUS = 14
+
+wxSTC_MARK_BOXMINUSCONNECTED :: Int
+wxSTC_MARK_BOXMINUSCONNECTED = 15
+
+wxSTC_MARK_LCORNERCURVE :: Int
+wxSTC_MARK_LCORNERCURVE = 16
+
+wxSTC_MARK_TCORNERCURVE :: Int
+wxSTC_MARK_TCORNERCURVE = 17
+
+wxSTC_MARK_CIRCLEPLUS :: Int
+wxSTC_MARK_CIRCLEPLUS = 18
+
+wxSTC_MARK_CIRCLEPLUSCONNECTED :: Int
+wxSTC_MARK_CIRCLEPLUSCONNECTED = 19
+
+wxSTC_MARK_CIRCLEMINUS :: Int
+wxSTC_MARK_CIRCLEMINUS = 20
+
+wxSTC_MARK_CIRCLEMINUSCONNECTED :: Int
+wxSTC_MARK_CIRCLEMINUSCONNECTED = 21
+
+wxSTC_MARK_BACKGROUND :: Int
+wxSTC_MARK_BACKGROUND = 22
+
+wxSTC_MARK_DOTDOTDOT :: Int
+wxSTC_MARK_DOTDOTDOT = 23
+
+wxSTC_MARK_ARROWS :: Int
+wxSTC_MARK_ARROWS = 24
+
+wxSTC_MARK_PIXMAP :: Int
+wxSTC_MARK_PIXMAP = 25
+
+wxSTC_MARK_CHARACTER :: Int
+wxSTC_MARK_CHARACTER = 10000
+
+wxSTC_MARKNUM_FOLDEREND :: Int
+wxSTC_MARKNUM_FOLDEREND = 25
+
+wxSTC_MARKNUM_FOLDEROPENMID :: Int
+wxSTC_MARKNUM_FOLDEROPENMID = 26
+
+wxSTC_MARKNUM_FOLDERMIDTAIL :: Int
+wxSTC_MARKNUM_FOLDERMIDTAIL = 27
+
+wxSTC_MARKNUM_FOLDERTAIL :: Int
+wxSTC_MARKNUM_FOLDERTAIL = 28
+
+wxSTC_MARKNUM_FOLDERSUB :: Int
+wxSTC_MARKNUM_FOLDERSUB = 29
+
+wxSTC_MARKNUM_FOLDER :: Int
+wxSTC_MARKNUM_FOLDER = 30
+
+wxSTC_MARKNUM_FOLDEROPEN :: Int
+wxSTC_MARKNUM_FOLDEROPEN = 31
+
+wxSTC_MASK_FOLDERS :: Int
+wxSTC_MASK_FOLDERS = (-33554432)
+
+wxSTC_MARGIN_SYMBOL :: Int
+wxSTC_MARGIN_SYMBOL = 0
+
+wxSTC_MARGIN_NUMBER :: Int
+wxSTC_MARGIN_NUMBER = 1
+
+wxSTC_STYLE_DEFAULT :: Int
+wxSTC_STYLE_DEFAULT = 32
+
+wxSTC_STYLE_LINENUMBER :: Int
+wxSTC_STYLE_LINENUMBER = 33
+
+wxSTC_STYLE_BRACELIGHT :: Int
+wxSTC_STYLE_BRACELIGHT = 34
+
+wxSTC_STYLE_BRACEBAD :: Int
+wxSTC_STYLE_BRACEBAD = 35
+
+wxSTC_STYLE_CONTROLCHAR :: Int
+wxSTC_STYLE_CONTROLCHAR = 36
+
+wxSTC_STYLE_INDENTGUIDE :: Int
+wxSTC_STYLE_INDENTGUIDE = 37
+
+wxSTC_STYLE_LASTPREDEFINED :: Int
+wxSTC_STYLE_LASTPREDEFINED = 39
+
+wxSTC_STYLE_MAX :: Int
+wxSTC_STYLE_MAX = 127
+
+wxSTC_CHARSET_ANSI :: Int
+wxSTC_CHARSET_ANSI = 0
+
+wxSTC_CHARSET_DEFAULT :: Int
+wxSTC_CHARSET_DEFAULT = 1
+
+wxSTC_CHARSET_BALTIC :: Int
+wxSTC_CHARSET_BALTIC = 186
+
+wxSTC_CHARSET_CHINESEBIG5 :: Int
+wxSTC_CHARSET_CHINESEBIG5 = 136
+
+wxSTC_CHARSET_EASTEUROPE :: Int
+wxSTC_CHARSET_EASTEUROPE = 238
+
+wxSTC_CHARSET_GB2312 :: Int
+wxSTC_CHARSET_GB2312 = 134
+
+wxSTC_CHARSET_GREEK :: Int
+wxSTC_CHARSET_GREEK = 161
+
+wxSTC_CHARSET_HANGUL :: Int
+wxSTC_CHARSET_HANGUL = 129
+
+wxSTC_CHARSET_MAC :: Int
+wxSTC_CHARSET_MAC = 77
+
+wxSTC_CHARSET_OEM :: Int
+wxSTC_CHARSET_OEM = 255
+
+wxSTC_CHARSET_RUSSIAN :: Int
+wxSTC_CHARSET_RUSSIAN = 204
+
+wxSTC_CHARSET_SHIFTJIS :: Int
+wxSTC_CHARSET_SHIFTJIS = 128
+
+wxSTC_CHARSET_SYMBOL :: Int
+wxSTC_CHARSET_SYMBOL = 2
+
+wxSTC_CHARSET_TURKISH :: Int
+wxSTC_CHARSET_TURKISH = 162
+
+wxSTC_CHARSET_JOHAB :: Int
+wxSTC_CHARSET_JOHAB = 130
+
+wxSTC_CHARSET_HEBREW :: Int
+wxSTC_CHARSET_HEBREW = 177
+
+wxSTC_CHARSET_ARABIC :: Int
+wxSTC_CHARSET_ARABIC = 178
+
+wxSTC_CHARSET_VIETNAMESE :: Int
+wxSTC_CHARSET_VIETNAMESE = 163
+
+wxSTC_CHARSET_THAI :: Int
+wxSTC_CHARSET_THAI = 222
+
+wxSTC_CASE_MIXED :: Int
+wxSTC_CASE_MIXED = 0
+
+wxSTC_CASE_UPPER :: Int
+wxSTC_CASE_UPPER = 1
+
+wxSTC_CASE_LOWER :: Int
+wxSTC_CASE_LOWER = 2
+
+wxSTC_INDIC_MAX :: Int
+wxSTC_INDIC_MAX = 7
+
+wxSTC_INDIC_PLAIN :: Int
+wxSTC_INDIC_PLAIN = 0
+
+wxSTC_INDIC_SQUIGGLE :: Int
+wxSTC_INDIC_SQUIGGLE = 1
+
+wxSTC_INDIC_TT :: Int
+wxSTC_INDIC_TT = 2
+
+wxSTC_INDIC_DIAGONAL :: Int
+wxSTC_INDIC_DIAGONAL = 3
+
+wxSTC_INDIC_STRIKE :: Int
+wxSTC_INDIC_STRIKE = 4
+
+wxSTC_INDIC_HIDDEN :: Int
+wxSTC_INDIC_HIDDEN = 5
+
+wxSTC_INDIC0_MASK :: Int
+wxSTC_INDIC0_MASK = 32
+
+wxSTC_INDIC1_MASK :: Int
+wxSTC_INDIC1_MASK = 64
+
+wxSTC_INDIC2_MASK :: Int
+wxSTC_INDIC2_MASK = 128
+
+wxSTC_INDICS_MASK :: Int
+wxSTC_INDICS_MASK = 224
+
+wxSTC_PRINT_NORMAL :: Int
+wxSTC_PRINT_NORMAL = 0
+
+wxSTC_PRINT_INVERTLIGHT :: Int
+wxSTC_PRINT_INVERTLIGHT = 1
+
+wxSTC_PRINT_BLACKONWHITE :: Int
+wxSTC_PRINT_BLACKONWHITE = 2
+
+wxSTC_PRINT_COLOURONWHITE :: Int
+wxSTC_PRINT_COLOURONWHITE = 3
+
+wxSTC_PRINT_COLOURONWHITEDEFAULTBG :: Int
+wxSTC_PRINT_COLOURONWHITEDEFAULTBG = 4
+
+wxSTC_FIND_WHOLEWORD :: Int
+wxSTC_FIND_WHOLEWORD = 2
+
+wxSTC_FIND_MATCHCASE :: Int
+wxSTC_FIND_MATCHCASE = 4
+
+wxSTC_FIND_WORDSTART :: Int
+wxSTC_FIND_WORDSTART = 1048576
+
+wxSTC_FIND_REGEXP :: Int
+wxSTC_FIND_REGEXP = 2097152
+
+wxSTC_FIND_POSIX :: Int
+wxSTC_FIND_POSIX = 4194304
+
+wxSTC_FOLDLEVELBASE :: Int
+wxSTC_FOLDLEVELBASE = 1024
+
+wxSTC_FOLDLEVELWHITEFLAG :: Int
+wxSTC_FOLDLEVELWHITEFLAG = 4096
+
+wxSTC_FOLDLEVELHEADERFLAG :: Int
+wxSTC_FOLDLEVELHEADERFLAG = 8192
+
+wxSTC_FOLDLEVELBOXHEADERFLAG :: Int
+wxSTC_FOLDLEVELBOXHEADERFLAG = 16384
+
+wxSTC_FOLDLEVELBOXFOOTERFLAG :: Int
+wxSTC_FOLDLEVELBOXFOOTERFLAG = 32768
+
+wxSTC_FOLDLEVELCONTRACTED :: Int
+wxSTC_FOLDLEVELCONTRACTED = 65536
+
+wxSTC_FOLDLEVELUNINDENT :: Int
+wxSTC_FOLDLEVELUNINDENT = 131072
+
+wxSTC_FOLDLEVELNUMBERMASK :: Int
+wxSTC_FOLDLEVELNUMBERMASK = 4095
+
+wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED :: Int
+wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = 2
+
+wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED :: Int
+wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = 4
+
+wxSTC_FOLDFLAG_LINEAFTER_EXPANDED :: Int
+wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = 8
+
+wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED :: Int
+wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = 16
+
+wxSTC_FOLDFLAG_LEVELNUMBERS :: Int
+wxSTC_FOLDFLAG_LEVELNUMBERS = 64
+
+wxSTC_FOLDFLAG_BOX :: Int
+wxSTC_FOLDFLAG_BOX = 1
+
+wxSTC_TIME_FOREVER :: Int
+wxSTC_TIME_FOREVER = 10000000
+
+wxSTC_WRAP_NONE :: Int
+wxSTC_WRAP_NONE = 0
+
+wxSTC_WRAP_WORD :: Int
+wxSTC_WRAP_WORD = 1
+
+wxSTC_CACHE_NONE :: Int
+wxSTC_CACHE_NONE = 0
+
+wxSTC_CACHE_CARET :: Int
+wxSTC_CACHE_CARET = 1
+
+wxSTC_CACHE_PAGE :: Int
+wxSTC_CACHE_PAGE = 2
+
+wxSTC_CACHE_DOCUMENT :: Int
+wxSTC_CACHE_DOCUMENT = 3
+
+wxSTC_EDGE_NONE :: Int
+wxSTC_EDGE_NONE = 0
+
+wxSTC_EDGE_LINE :: Int
+wxSTC_EDGE_LINE = 1
+
+wxSTC_EDGE_BACKGROUND :: Int
+wxSTC_EDGE_BACKGROUND = 2
+
+wxSTC_CURSORNORMAL :: Int
+wxSTC_CURSORNORMAL = (-1)
+
+wxSTC_CURSORWAIT :: Int
+wxSTC_CURSORWAIT = 4
+
+wxSTC_VISIBLE_SLOP :: Int
+wxSTC_VISIBLE_SLOP = 1
+
+wxSTC_VISIBLE_STRICT :: Int
+wxSTC_VISIBLE_STRICT = 4
+
+wxSTC_CARET_SLOP :: Int
+wxSTC_CARET_SLOP = 1
+
+wxSTC_CARET_STRICT :: Int
+wxSTC_CARET_STRICT = 4
+
+wxSTC_CARET_JUMPS :: Int
+wxSTC_CARET_JUMPS = 16
+
+wxSTC_CARET_EVEN :: Int
+wxSTC_CARET_EVEN = 8
+
+wxSTC_SEL_STREAM :: Int
+wxSTC_SEL_STREAM = 0
+
+wxSTC_SEL_RECTANGLE :: Int
+wxSTC_SEL_RECTANGLE = 1
+
+wxSTC_SEL_LINES :: Int
+wxSTC_SEL_LINES = 2
+
+wxSTC_KEYWORDSET_MAX :: Int
+wxSTC_KEYWORDSET_MAX = 8
+
+wxSTC_MOD_INSERTTEXT :: Int
+wxSTC_MOD_INSERTTEXT = 1
+
+wxSTC_MOD_DELETETEXT :: Int
+wxSTC_MOD_DELETETEXT = 2
+
+wxSTC_MOD_CHANGESTYLE :: Int
+wxSTC_MOD_CHANGESTYLE = 4
+
+wxSTC_MOD_CHANGEFOLD :: Int
+wxSTC_MOD_CHANGEFOLD = 8
+
+wxSTC_PERFORMED_USER :: Int
+wxSTC_PERFORMED_USER = 16
+
+wxSTC_PERFORMED_UNDO :: Int
+wxSTC_PERFORMED_UNDO = 32
+
+wxSTC_PERFORMED_REDO :: Int
+wxSTC_PERFORMED_REDO = 64
+
+wxSTC_LASTSTEPINUNDOREDO :: Int
+wxSTC_LASTSTEPINUNDOREDO = 256
+
+wxSTC_MOD_CHANGEMARKER :: Int
+wxSTC_MOD_CHANGEMARKER = 512
+
+wxSTC_MOD_BEFOREINSERT :: Int
+wxSTC_MOD_BEFOREINSERT = 1024
+
+wxSTC_MOD_BEFOREDELETE :: Int
+wxSTC_MOD_BEFOREDELETE = 2048
+
+wxSTC_MODEVENTMASKALL :: Int
+wxSTC_MODEVENTMASKALL = 3959
+
+wxSTC_KEY_DOWN :: Int
+wxSTC_KEY_DOWN = 300
+
+wxSTC_KEY_UP :: Int
+wxSTC_KEY_UP = 301
+
+wxSTC_KEY_LEFT :: Int
+wxSTC_KEY_LEFT = 302
+
+wxSTC_KEY_RIGHT :: Int
+wxSTC_KEY_RIGHT = 303
+
+wxSTC_KEY_HOME :: Int
+wxSTC_KEY_HOME = 304
+
+wxSTC_KEY_END :: Int
+wxSTC_KEY_END = 305
+
+wxSTC_KEY_PRIOR :: Int
+wxSTC_KEY_PRIOR = 306
+
+wxSTC_KEY_NEXT :: Int
+wxSTC_KEY_NEXT = 307
+
+wxSTC_KEY_DELETE :: Int
+wxSTC_KEY_DELETE = 308
+
+wxSTC_KEY_INSERT :: Int
+wxSTC_KEY_INSERT = 309
+
+wxSTC_KEY_ESCAPE :: Int
+wxSTC_KEY_ESCAPE = 7
+
+wxSTC_KEY_BACK :: Int
+wxSTC_KEY_BACK = 8
+
+wxSTC_KEY_TAB :: Int
+wxSTC_KEY_TAB = 9
+
+wxSTC_KEY_RETURN :: Int
+wxSTC_KEY_RETURN = 13
+
+wxSTC_KEY_ADD :: Int
+wxSTC_KEY_ADD = 310
+
+wxSTC_KEY_SUBTRACT :: Int
+wxSTC_KEY_SUBTRACT = 311
+
+wxSTC_KEY_DIVIDE :: Int
+wxSTC_KEY_DIVIDE = 312
+
+wxSTC_SCMOD_SHIFT :: Int
+wxSTC_SCMOD_SHIFT = 1
+
+wxSTC_SCMOD_CTRL :: Int
+wxSTC_SCMOD_CTRL = 2
+
+wxSTC_SCMOD_ALT :: Int
+wxSTC_SCMOD_ALT = 4
+
+wxSTC_LEX_CONTAINER :: Int
+wxSTC_LEX_CONTAINER = 0
+
+wxSTC_LEX_NULL :: Int
+wxSTC_LEX_NULL = 1
+
+wxSTC_LEX_PYTHON :: Int
+wxSTC_LEX_PYTHON = 2
+
+wxSTC_LEX_CPP :: Int
+wxSTC_LEX_CPP = 3
+
+wxSTC_LEX_HTML :: Int
+wxSTC_LEX_HTML = 4
+
+wxSTC_LEX_XML :: Int
+wxSTC_LEX_XML = 5
+
+wxSTC_LEX_PERL :: Int
+wxSTC_LEX_PERL = 6
+
+wxSTC_LEX_SQL :: Int
+wxSTC_LEX_SQL = 7
+
+wxSTC_LEX_VB :: Int
+wxSTC_LEX_VB = 8
+
+wxSTC_LEX_PROPERTIES :: Int
+wxSTC_LEX_PROPERTIES = 9
+
+wxSTC_LEX_ERRORLIST :: Int
+wxSTC_LEX_ERRORLIST = 10
+
+wxSTC_LEX_MAKEFILE :: Int
+wxSTC_LEX_MAKEFILE = 11
+
+wxSTC_LEX_BATCH :: Int
+wxSTC_LEX_BATCH = 12
+
+wxSTC_LEX_XCODE :: Int
+wxSTC_LEX_XCODE = 13
+
+wxSTC_LEX_LATEX :: Int
+wxSTC_LEX_LATEX = 14
+
+wxSTC_LEX_LUA :: Int
+wxSTC_LEX_LUA = 15
+
+wxSTC_LEX_DIFF :: Int
+wxSTC_LEX_DIFF = 16
+
+wxSTC_LEX_CONF :: Int
+wxSTC_LEX_CONF = 17
+
+wxSTC_LEX_PASCAL :: Int
+wxSTC_LEX_PASCAL = 18
+
+wxSTC_LEX_AVE :: Int
+wxSTC_LEX_AVE = 19
+
+wxSTC_LEX_ADA :: Int
+wxSTC_LEX_ADA = 20
+
+wxSTC_LEX_LISP :: Int
+wxSTC_LEX_LISP = 21
+
+wxSTC_LEX_RUBY :: Int
+wxSTC_LEX_RUBY = 22
+
+wxSTC_LEX_EIFFEL :: Int
+wxSTC_LEX_EIFFEL = 23
+
+wxSTC_LEX_EIFFELKW :: Int
+wxSTC_LEX_EIFFELKW = 24
+
+wxSTC_LEX_TCL :: Int
+wxSTC_LEX_TCL = 25
+
+wxSTC_LEX_NNCRONTAB :: Int
+wxSTC_LEX_NNCRONTAB = 26
+
+wxSTC_LEX_BULLANT :: Int
+wxSTC_LEX_BULLANT = 27
+
+wxSTC_LEX_VBSCRIPT :: Int
+wxSTC_LEX_VBSCRIPT = 28
+
+wxSTC_LEX_ASP :: Int
+wxSTC_LEX_ASP = 29
+
+wxSTC_LEX_PHP :: Int
+wxSTC_LEX_PHP = 30
+
+wxSTC_LEX_BAAN :: Int
+wxSTC_LEX_BAAN = 31
+
+wxSTC_LEX_MATLAB :: Int
+wxSTC_LEX_MATLAB = 32
+
+wxSTC_LEX_SCRIPTOL :: Int
+wxSTC_LEX_SCRIPTOL = 33
+
+wxSTC_LEX_ASM :: Int
+wxSTC_LEX_ASM = 34
+
+wxSTC_LEX_CPPNOCASE :: Int
+wxSTC_LEX_CPPNOCASE = 35
+
+wxSTC_LEX_FORTRAN :: Int
+wxSTC_LEX_FORTRAN = 36
+
+wxSTC_LEX_F77 :: Int
+wxSTC_LEX_F77 = 37
+
+wxSTC_LEX_CSS :: Int
+wxSTC_LEX_CSS = 38
+
+wxSTC_LEX_POV :: Int
+wxSTC_LEX_POV = 39
+
+wxSTC_LEX_LOUT :: Int
+wxSTC_LEX_LOUT = 40
+
+wxSTC_LEX_ESCRIPT :: Int
+wxSTC_LEX_ESCRIPT = 41
+
+wxSTC_LEX_PS :: Int
+wxSTC_LEX_PS = 42
+
+wxSTC_LEX_NSIS :: Int
+wxSTC_LEX_NSIS = 43
+
+wxSTC_LEX_MMIXAL :: Int
+wxSTC_LEX_MMIXAL = 44
+
+wxSTC_LEX_PHPSCRIPT :: Int
+wxSTC_LEX_PHPSCRIPT = 69
+
+wxSTC_LEX_TADS3 :: Int
+wxSTC_LEX_TADS3 = 70
+
+wxSTC_LEX_REBOL :: Int
+wxSTC_LEX_REBOL = 71
+
+wxSTC_LEX_SMALLTALK :: Int
+wxSTC_LEX_SMALLTALK = 72
+
+wxSTC_LEX_FLAGSHIP :: Int
+wxSTC_LEX_FLAGSHIP = 73
+
+wxSTC_LEX_CSOUND :: Int
+wxSTC_LEX_CSOUND = 74
+
+wxSTC_LEX_FREEBASIC :: Int
+wxSTC_LEX_FREEBASIC = 75
+
+wxSTC_LEX_AUTOMATIC :: Int
+wxSTC_LEX_AUTOMATIC = 1000
+
+wxSTC_LEX_HASKELL :: Int
+wxSTC_LEX_HASKELL = 68
+
+wxSTC_P_DEFAULT :: Int
+wxSTC_P_DEFAULT = 0
+
+wxSTC_P_COMMENTLINE :: Int
+wxSTC_P_COMMENTLINE = 1
+
+wxSTC_P_NUMBER :: Int
+wxSTC_P_NUMBER = 2
+
+wxSTC_P_STRING :: Int
+wxSTC_P_STRING = 3
+
+wxSTC_P_CHARACTER :: Int
+wxSTC_P_CHARACTER = 4
+
+wxSTC_P_WORD :: Int
+wxSTC_P_WORD = 5
+
+wxSTC_P_TRIPLE :: Int
+wxSTC_P_TRIPLE = 6
+
+wxSTC_P_TRIPLEDOUBLE :: Int
+wxSTC_P_TRIPLEDOUBLE = 7
+
+wxSTC_P_CLASSNAME :: Int
+wxSTC_P_CLASSNAME = 8
+
+wxSTC_P_DEFNAME :: Int
+wxSTC_P_DEFNAME = 9
+
+wxSTC_P_OPERATOR :: Int
+wxSTC_P_OPERATOR = 10
+
+wxSTC_P_IDENTIFIER :: Int
+wxSTC_P_IDENTIFIER = 11
+
+wxSTC_P_COMMENTBLOCK :: Int
+wxSTC_P_COMMENTBLOCK = 12
+
+wxSTC_P_STRINGEOL :: Int
+wxSTC_P_STRINGEOL = 13
+
+wxSTC_C_DEFAULT :: Int
+wxSTC_C_DEFAULT = 0
+
+wxSTC_C_COMMENT :: Int
+wxSTC_C_COMMENT = 1
+
+wxSTC_C_COMMENTLINE :: Int
+wxSTC_C_COMMENTLINE = 2
+
+wxSTC_C_COMMENTDOC :: Int
+wxSTC_C_COMMENTDOC = 3
+
+wxSTC_C_NUMBER :: Int
+wxSTC_C_NUMBER = 4
+
+wxSTC_C_WORD :: Int
+wxSTC_C_WORD = 5
+
+wxSTC_C_STRING :: Int
+wxSTC_C_STRING = 6
+
+wxSTC_C_CHARACTER :: Int
+wxSTC_C_CHARACTER = 7
+
+wxSTC_C_UUID :: Int
+wxSTC_C_UUID = 8
+
+wxSTC_C_PREPROCESSOR :: Int
+wxSTC_C_PREPROCESSOR = 9
+
+wxSTC_C_OPERATOR :: Int
+wxSTC_C_OPERATOR = 10
+
+wxSTC_C_IDENTIFIER :: Int
+wxSTC_C_IDENTIFIER = 11
+
+wxSTC_C_STRINGEOL :: Int
+wxSTC_C_STRINGEOL = 12
+
+wxSTC_C_VERBATIM :: Int
+wxSTC_C_VERBATIM = 13
+
+wxSTC_C_REGEX :: Int
+wxSTC_C_REGEX = 14
+
+wxSTC_C_COMMENTLINEDOC :: Int
+wxSTC_C_COMMENTLINEDOC = 15
+
+wxSTC_C_WORD2 :: Int
+wxSTC_C_WORD2 = 16
+
+wxSTC_C_COMMENTDOCKEYWORD :: Int
+wxSTC_C_COMMENTDOCKEYWORD = 17
+
+wxSTC_C_COMMENTDOCKEYWORDERROR :: Int
+wxSTC_C_COMMENTDOCKEYWORDERROR = 18
+
+wxSTC_C_GLOBALCLASS :: Int
+wxSTC_C_GLOBALCLASS = 19
+
+wxSTC_H_DEFAULT :: Int
+wxSTC_H_DEFAULT = 0
+
+wxSTC_H_TAG :: Int
+wxSTC_H_TAG = 1
+
+wxSTC_H_TAGUNKNOWN :: Int
+wxSTC_H_TAGUNKNOWN = 2
+
+wxSTC_H_ATTRIBUTE :: Int
+wxSTC_H_ATTRIBUTE = 3
+
+wxSTC_H_ATTRIBUTEUNKNOWN :: Int
+wxSTC_H_ATTRIBUTEUNKNOWN = 4
+
+wxSTC_H_NUMBER :: Int
+wxSTC_H_NUMBER = 5
+
+wxSTC_H_DOUBLESTRING :: Int
+wxSTC_H_DOUBLESTRING = 6
+
+wxSTC_H_SINGLESTRING :: Int
+wxSTC_H_SINGLESTRING = 7
+
+wxSTC_H_OTHER :: Int
+wxSTC_H_OTHER = 8
+
+wxSTC_H_COMMENT :: Int
+wxSTC_H_COMMENT = 9
+
+wxSTC_H_ENTITY :: Int
+wxSTC_H_ENTITY = 10
+
+wxSTC_H_TAGEND :: Int
+wxSTC_H_TAGEND = 11
+
+wxSTC_H_XMLSTART :: Int
+wxSTC_H_XMLSTART = 12
+
+wxSTC_H_XMLEND :: Int
+wxSTC_H_XMLEND = 13
+
+wxSTC_H_SCRIPT :: Int
+wxSTC_H_SCRIPT = 14
+
+wxSTC_H_ASP :: Int
+wxSTC_H_ASP = 15
+
+wxSTC_H_ASPAT :: Int
+wxSTC_H_ASPAT = 16
+
+wxSTC_H_CDATA :: Int
+wxSTC_H_CDATA = 17
+
+wxSTC_H_QUESTION :: Int
+wxSTC_H_QUESTION = 18
+
+wxSTC_H_VALUE :: Int
+wxSTC_H_VALUE = 19
+
+wxSTC_H_XCCOMMENT :: Int
+wxSTC_H_XCCOMMENT = 20
+
+wxSTC_H_SGML_DEFAULT :: Int
+wxSTC_H_SGML_DEFAULT = 21
+
+wxSTC_H_SGML_COMMAND :: Int
+wxSTC_H_SGML_COMMAND = 22
+
+wxSTC_H_SGML_1ST_PARAM :: Int
+wxSTC_H_SGML_1ST_PARAM = 23
+
+wxSTC_H_SGML_DOUBLESTRING :: Int
+wxSTC_H_SGML_DOUBLESTRING = 24
+
+wxSTC_H_SGML_SIMPLESTRING :: Int
+wxSTC_H_SGML_SIMPLESTRING = 25
+
+wxSTC_H_SGML_ERROR :: Int
+wxSTC_H_SGML_ERROR = 26
+
+wxSTC_H_SGML_SPECIAL :: Int
+wxSTC_H_SGML_SPECIAL = 27
+
+wxSTC_H_SGML_ENTITY :: Int
+wxSTC_H_SGML_ENTITY = 28
+
+wxSTC_H_SGML_COMMENT :: Int
+wxSTC_H_SGML_COMMENT = 29
+
+wxSTC_H_SGML_1ST_PARAM_COMMENT :: Int
+wxSTC_H_SGML_1ST_PARAM_COMMENT = 30
+
+wxSTC_H_SGML_BLOCK_DEFAULT :: Int
+wxSTC_H_SGML_BLOCK_DEFAULT = 31
+
+wxSTC_HA_DEFAULT :: Int
+wxSTC_HA_DEFAULT = 0
+
+wxSTC_HA_IDENTIFIER :: Int
+wxSTC_HA_IDENTIFIER = 1
+
+wxSTC_HA_KEYWORD :: Int
+wxSTC_HA_KEYWORD = 2
+
+wxSTC_HA_NUMBER :: Int
+wxSTC_HA_NUMBER = 3
+
+wxSTC_HA_STRING :: Int
+wxSTC_HA_STRING = 4
+
+wxSTC_HA_CHARACTER :: Int
+wxSTC_HA_CHARACTER = 5
+
+wxSTC_HA_CLASS :: Int
+wxSTC_HA_CLASS = 6
+
+wxSTC_HA_MODULE :: Int
+wxSTC_HA_MODULE = 7
+
+wxSTC_HA_CAPITAL :: Int
+wxSTC_HA_CAPITAL = 8
+
+wxSTC_HA_DATA :: Int
+wxSTC_HA_DATA = 9
+
+wxSTC_HA_IMPORT :: Int
+wxSTC_HA_IMPORT = 10
+
+wxSTC_HA_OPERATOR :: Int
+wxSTC_HA_OPERATOR = 11
+
+wxSTC_HA_INSTANCE :: Int
+wxSTC_HA_INSTANCE = 12
+
+wxSTC_HA_COMMENTLINE :: Int
+wxSTC_HA_COMMENTLINE = 13
+
+wxSTC_HA_COMMENTBLOCK :: Int
+wxSTC_HA_COMMENTBLOCK = 14
+
+wxSTC_HA_COMMENTBLOCK2 :: Int
+wxSTC_HA_COMMENTBLOCK2 = 15
+
+wxSTC_HA_COMMENTBLOCK3 :: Int
+wxSTC_HA_COMMENTBLOCK3 = 16
+
+wxSTC_HA_PREPROCESSOR :: Int
+wxSTC_HA_PREPROCESSOR = 17
+
+wxSTC_HJ_START :: Int
+wxSTC_HJ_START = 40
+
+wxSTC_HJ_DEFAULT :: Int
+wxSTC_HJ_DEFAULT = 41
+
+wxSTC_HJ_COMMENT :: Int
+wxSTC_HJ_COMMENT = 42
+
+wxSTC_HJ_COMMENTLINE :: Int
+wxSTC_HJ_COMMENTLINE = 43
+
+wxSTC_HJ_COMMENTDOC :: Int
+wxSTC_HJ_COMMENTDOC = 44
+
+wxSTC_HJ_NUMBER :: Int
+wxSTC_HJ_NUMBER = 45
+
+wxSTC_HJ_WORD :: Int
+wxSTC_HJ_WORD = 46
+
+wxSTC_HJ_KEYWORD :: Int
+wxSTC_HJ_KEYWORD = 47
+
+wxSTC_HJ_DOUBLESTRING :: Int
+wxSTC_HJ_DOUBLESTRING = 48
+
+wxSTC_HJ_SINGLESTRING :: Int
+wxSTC_HJ_SINGLESTRING = 49
+
+wxSTC_HJ_SYMBOLS :: Int
+wxSTC_HJ_SYMBOLS = 50
+
+wxSTC_HJ_STRINGEOL :: Int
+wxSTC_HJ_STRINGEOL = 51
+
+wxSTC_HJ_REGEX :: Int
+wxSTC_HJ_REGEX = 52
+
+wxSTC_HJA_START :: Int
+wxSTC_HJA_START = 55
+
+wxSTC_HJA_DEFAULT :: Int
+wxSTC_HJA_DEFAULT = 56
+
+wxSTC_HJA_COMMENT :: Int
+wxSTC_HJA_COMMENT = 57
+
+wxSTC_HJA_COMMENTLINE :: Int
+wxSTC_HJA_COMMENTLINE = 58
+
+wxSTC_HJA_COMMENTDOC :: Int
+wxSTC_HJA_COMMENTDOC = 59
+
+wxSTC_HJA_NUMBER :: Int
+wxSTC_HJA_NUMBER = 60
+
+wxSTC_HJA_WORD :: Int
+wxSTC_HJA_WORD = 61
+
+wxSTC_HJA_KEYWORD :: Int
+wxSTC_HJA_KEYWORD = 62
+
+wxSTC_HJA_DOUBLESTRING :: Int
+wxSTC_HJA_DOUBLESTRING = 63
+
+wxSTC_HJA_SINGLESTRING :: Int
+wxSTC_HJA_SINGLESTRING = 64
+
+wxSTC_HJA_SYMBOLS :: Int
+wxSTC_HJA_SYMBOLS = 65
+
+wxSTC_HJA_STRINGEOL :: Int
+wxSTC_HJA_STRINGEOL = 66
+
+wxSTC_HJA_REGEX :: Int
+wxSTC_HJA_REGEX = 67
+
+wxSTC_HB_START :: Int
+wxSTC_HB_START = 70
+
+wxSTC_HB_DEFAULT :: Int
+wxSTC_HB_DEFAULT = 71
+
+wxSTC_HB_COMMENTLINE :: Int
+wxSTC_HB_COMMENTLINE = 72
+
+wxSTC_HB_NUMBER :: Int
+wxSTC_HB_NUMBER = 73
+
+wxSTC_HB_WORD :: Int
+wxSTC_HB_WORD = 74
+
+wxSTC_HB_STRING :: Int
+wxSTC_HB_STRING = 75
+
+wxSTC_HB_IDENTIFIER :: Int
+wxSTC_HB_IDENTIFIER = 76
+
+wxSTC_HB_STRINGEOL :: Int
+wxSTC_HB_STRINGEOL = 77
+
+wxSTC_HBA_START :: Int
+wxSTC_HBA_START = 80
+
+wxSTC_HBA_DEFAULT :: Int
+wxSTC_HBA_DEFAULT = 81
+
+wxSTC_HBA_COMMENTLINE :: Int
+wxSTC_HBA_COMMENTLINE = 82
+
+wxSTC_HBA_NUMBER :: Int
+wxSTC_HBA_NUMBER = 83
+
+wxSTC_HBA_WORD :: Int
+wxSTC_HBA_WORD = 84
+
+wxSTC_HBA_STRING :: Int
+wxSTC_HBA_STRING = 85
+
+wxSTC_HBA_IDENTIFIER :: Int
+wxSTC_HBA_IDENTIFIER = 86
+
+wxSTC_HBA_STRINGEOL :: Int
+wxSTC_HBA_STRINGEOL = 87
+
+wxSTC_HP_START :: Int
+wxSTC_HP_START = 90
+
+wxSTC_HP_DEFAULT :: Int
+wxSTC_HP_DEFAULT = 91
+
+wxSTC_HP_COMMENTLINE :: Int
+wxSTC_HP_COMMENTLINE = 92
+
+wxSTC_HP_NUMBER :: Int
+wxSTC_HP_NUMBER = 93
+
+wxSTC_HP_STRING :: Int
+wxSTC_HP_STRING = 94
+
+wxSTC_HP_CHARACTER :: Int
+wxSTC_HP_CHARACTER = 95
+
+wxSTC_HP_WORD :: Int
+wxSTC_HP_WORD = 96
+
+wxSTC_HP_TRIPLE :: Int
+wxSTC_HP_TRIPLE = 97
+
+wxSTC_HP_TRIPLEDOUBLE :: Int
+wxSTC_HP_TRIPLEDOUBLE = 98
+
+wxSTC_HP_CLASSNAME :: Int
+wxSTC_HP_CLASSNAME = 99
+
+wxSTC_HP_DEFNAME :: Int
+wxSTC_HP_DEFNAME = 100
+
+wxSTC_HP_OPERATOR :: Int
+wxSTC_HP_OPERATOR = 101
+
+wxSTC_HP_IDENTIFIER :: Int
+wxSTC_HP_IDENTIFIER = 102
+
+wxSTC_HPA_START :: Int
+wxSTC_HPA_START = 105
+
+wxSTC_HPA_DEFAULT :: Int
+wxSTC_HPA_DEFAULT = 106
+
+wxSTC_HPA_COMMENTLINE :: Int
+wxSTC_HPA_COMMENTLINE = 107
+
+wxSTC_HPA_NUMBER :: Int
+wxSTC_HPA_NUMBER = 108
+
+wxSTC_HPA_STRING :: Int
+wxSTC_HPA_STRING = 109
+
+wxSTC_HPA_CHARACTER :: Int
+wxSTC_HPA_CHARACTER = 110
+
+wxSTC_HPA_WORD :: Int
+wxSTC_HPA_WORD = 111
+
+wxSTC_HPA_TRIPLE :: Int
+wxSTC_HPA_TRIPLE = 112
+
+wxSTC_HPA_TRIPLEDOUBLE :: Int
+wxSTC_HPA_TRIPLEDOUBLE = 113
+
+wxSTC_HPA_CLASSNAME :: Int
+wxSTC_HPA_CLASSNAME = 114
+
+wxSTC_HPA_DEFNAME :: Int
+wxSTC_HPA_DEFNAME = 115
+
+wxSTC_HPA_OPERATOR :: Int
+wxSTC_HPA_OPERATOR = 116
+
+wxSTC_HPA_IDENTIFIER :: Int
+wxSTC_HPA_IDENTIFIER = 117
+
+wxSTC_HPHP_DEFAULT :: Int
+wxSTC_HPHP_DEFAULT = 118
+
+wxSTC_HPHP_HSTRING :: Int
+wxSTC_HPHP_HSTRING = 119
+
+wxSTC_HPHP_SIMPLESTRING :: Int
+wxSTC_HPHP_SIMPLESTRING = 120
+
+wxSTC_HPHP_WORD :: Int
+wxSTC_HPHP_WORD = 121
+
+wxSTC_HPHP_NUMBER :: Int
+wxSTC_HPHP_NUMBER = 122
+
+wxSTC_HPHP_VARIABLE :: Int
+wxSTC_HPHP_VARIABLE = 123
+
+wxSTC_HPHP_COMMENT :: Int
+wxSTC_HPHP_COMMENT = 124
+
+wxSTC_HPHP_COMMENTLINE :: Int
+wxSTC_HPHP_COMMENTLINE = 125
+
+wxSTC_HPHP_HSTRING_VARIABLE :: Int
+wxSTC_HPHP_HSTRING_VARIABLE = 126
+
+wxSTC_HPHP_OPERATOR :: Int
+wxSTC_HPHP_OPERATOR = 127
+
+wxSTC_PL_DEFAULT :: Int
+wxSTC_PL_DEFAULT = 0
+
+wxSTC_PL_ERROR :: Int
+wxSTC_PL_ERROR = 1
+
+wxSTC_PL_COMMENTLINE :: Int
+wxSTC_PL_COMMENTLINE = 2
+
+wxSTC_PL_POD :: Int
+wxSTC_PL_POD = 3
+
+wxSTC_PL_NUMBER :: Int
+wxSTC_PL_NUMBER = 4
+
+wxSTC_PL_WORD :: Int
+wxSTC_PL_WORD = 5
+
+wxSTC_PL_STRING :: Int
+wxSTC_PL_STRING = 6
+
+wxSTC_PL_CHARACTER :: Int
+wxSTC_PL_CHARACTER = 7
+
+wxSTC_PL_PUNCTUATION :: Int
+wxSTC_PL_PUNCTUATION = 8
+
+wxSTC_PL_PREPROCESSOR :: Int
+wxSTC_PL_PREPROCESSOR = 9
+
+wxSTC_PL_OPERATOR :: Int
+wxSTC_PL_OPERATOR = 10
+
+wxSTC_PL_IDENTIFIER :: Int
+wxSTC_PL_IDENTIFIER = 11
+
+wxSTC_PL_SCALAR :: Int
+wxSTC_PL_SCALAR = 12
+
+wxSTC_PL_ARRAY :: Int
+wxSTC_PL_ARRAY = 13
+
+wxSTC_PL_HASH :: Int
+wxSTC_PL_HASH = 14
+
+wxSTC_PL_SYMBOLTABLE :: Int
+wxSTC_PL_SYMBOLTABLE = 15
+
+wxSTC_PL_REGEX :: Int
+wxSTC_PL_REGEX = 17
+
+wxSTC_PL_REGSUBST :: Int
+wxSTC_PL_REGSUBST = 18
+
+wxSTC_PL_LONGQUOTE :: Int
+wxSTC_PL_LONGQUOTE = 19
+
+wxSTC_PL_BACKTICKS :: Int
+wxSTC_PL_BACKTICKS = 20
+
+wxSTC_PL_DATASECTION :: Int
+wxSTC_PL_DATASECTION = 21
+
+wxSTC_PL_HERE_DELIM :: Int
+wxSTC_PL_HERE_DELIM = 22
+
+wxSTC_PL_HERE_Q :: Int
+wxSTC_PL_HERE_Q = 23
+
+wxSTC_PL_HERE_QQ :: Int
+wxSTC_PL_HERE_QQ = 24
+
+wxSTC_PL_HERE_QX :: Int
+wxSTC_PL_HERE_QX = 25
+
+wxSTC_PL_STRING_Q :: Int
+wxSTC_PL_STRING_Q = 26
+
+wxSTC_PL_STRING_QQ :: Int
+wxSTC_PL_STRING_QQ = 27
+
+wxSTC_PL_STRING_QX :: Int
+wxSTC_PL_STRING_QX = 28
+
+wxSTC_PL_STRING_QR :: Int
+wxSTC_PL_STRING_QR = 29
+
+wxSTC_PL_STRING_QW :: Int
+wxSTC_PL_STRING_QW = 30
+
+wxSTC_B_DEFAULT :: Int
+wxSTC_B_DEFAULT = 0
+
+wxSTC_B_COMMENT :: Int
+wxSTC_B_COMMENT = 1
+
+wxSTC_B_NUMBER :: Int
+wxSTC_B_NUMBER = 2
+
+wxSTC_B_KEYWORD :: Int
+wxSTC_B_KEYWORD = 3
+
+wxSTC_B_STRING :: Int
+wxSTC_B_STRING = 4
+
+wxSTC_B_PREPROCESSOR :: Int
+wxSTC_B_PREPROCESSOR = 5
+
+wxSTC_B_OPERATOR :: Int
+wxSTC_B_OPERATOR = 6
+
+wxSTC_B_IDENTIFIER :: Int
+wxSTC_B_IDENTIFIER = 7
+
+wxSTC_B_DATE :: Int
+wxSTC_B_DATE = 8
+
+wxSTC_PROPS_DEFAULT :: Int
+wxSTC_PROPS_DEFAULT = 0
+
+wxSTC_PROPS_COMMENT :: Int
+wxSTC_PROPS_COMMENT = 1
+
+wxSTC_PROPS_SECTION :: Int
+wxSTC_PROPS_SECTION = 2
+
+wxSTC_PROPS_ASSIGNMENT :: Int
+wxSTC_PROPS_ASSIGNMENT = 3
+
+wxSTC_PROPS_DEFVAL :: Int
+wxSTC_PROPS_DEFVAL = 4
+
+wxSTC_L_DEFAULT :: Int
+wxSTC_L_DEFAULT = 0
+
+wxSTC_L_COMMAND :: Int
+wxSTC_L_COMMAND = 1
+
+wxSTC_L_TAG :: Int
+wxSTC_L_TAG = 2
+
+wxSTC_L_MATH :: Int
+wxSTC_L_MATH = 3
+
+wxSTC_L_COMMENT :: Int
+wxSTC_L_COMMENT = 4
+
+wxSTC_LUA_DEFAULT :: Int
+wxSTC_LUA_DEFAULT = 0
+
+wxSTC_LUA_COMMENT :: Int
+wxSTC_LUA_COMMENT = 1
+
+wxSTC_LUA_COMMENTLINE :: Int
+wxSTC_LUA_COMMENTLINE = 2
+
+wxSTC_LUA_COMMENTDOC :: Int
+wxSTC_LUA_COMMENTDOC = 3
+
+wxSTC_LUA_NUMBER :: Int
+wxSTC_LUA_NUMBER = 4
+
+wxSTC_LUA_WORD :: Int
+wxSTC_LUA_WORD = 5
+
+wxSTC_LUA_STRING :: Int
+wxSTC_LUA_STRING = 6
+
+wxSTC_LUA_CHARACTER :: Int
+wxSTC_LUA_CHARACTER = 7
+
+wxSTC_LUA_LITERALSTRING :: Int
+wxSTC_LUA_LITERALSTRING = 8
+
+wxSTC_LUA_PREPROCESSOR :: Int
+wxSTC_LUA_PREPROCESSOR = 9
+
+wxSTC_LUA_OPERATOR :: Int
+wxSTC_LUA_OPERATOR = 10
+
+wxSTC_LUA_IDENTIFIER :: Int
+wxSTC_LUA_IDENTIFIER = 11
+
+wxSTC_LUA_STRINGEOL :: Int
+wxSTC_LUA_STRINGEOL = 12
+
+wxSTC_LUA_WORD2 :: Int
+wxSTC_LUA_WORD2 = 13
+
+wxSTC_LUA_WORD3 :: Int
+wxSTC_LUA_WORD3 = 14
+
+wxSTC_LUA_WORD4 :: Int
+wxSTC_LUA_WORD4 = 15
+
+wxSTC_LUA_WORD5 :: Int
+wxSTC_LUA_WORD5 = 16
+
+wxSTC_LUA_WORD6 :: Int
+wxSTC_LUA_WORD6 = 17
+
+wxSTC_LUA_WORD7 :: Int
+wxSTC_LUA_WORD7 = 18
+
+wxSTC_LUA_WORD8 :: Int
+wxSTC_LUA_WORD8 = 19
+
+wxSTC_ERR_DEFAULT :: Int
+wxSTC_ERR_DEFAULT = 0
+
+wxSTC_ERR_PYTHON :: Int
+wxSTC_ERR_PYTHON = 1
+
+wxSTC_ERR_GCC :: Int
+wxSTC_ERR_GCC = 2
+
+wxSTC_ERR_MS :: Int
+wxSTC_ERR_MS = 3
+
+wxSTC_ERR_CMD :: Int
+wxSTC_ERR_CMD = 4
+
+wxSTC_ERR_BORLAND :: Int
+wxSTC_ERR_BORLAND = 5
+
+wxSTC_ERR_PERL :: Int
+wxSTC_ERR_PERL = 6
+
+wxSTC_ERR_NET :: Int
+wxSTC_ERR_NET = 7
+
+wxSTC_ERR_LUA :: Int
+wxSTC_ERR_LUA = 8
+
+wxSTC_ERR_CTAG :: Int
+wxSTC_ERR_CTAG = 9
+
+wxSTC_ERR_DIFF_CHANGED :: Int
+wxSTC_ERR_DIFF_CHANGED = 10
+
+wxSTC_ERR_DIFF_ADDITION :: Int
+wxSTC_ERR_DIFF_ADDITION = 11
+
+wxSTC_ERR_DIFF_DELETION :: Int
+wxSTC_ERR_DIFF_DELETION = 12
+
+wxSTC_ERR_DIFF_MESSAGE :: Int
+wxSTC_ERR_DIFF_MESSAGE = 13
+
+wxSTC_ERR_PHP :: Int
+wxSTC_ERR_PHP = 14
+
+wxSTC_ERR_ELF :: Int
+wxSTC_ERR_ELF = 15
+
+wxSTC_ERR_IFC :: Int
+wxSTC_ERR_IFC = 16
+
+wxSTC_BAT_DEFAULT :: Int
+wxSTC_BAT_DEFAULT = 0
+
+wxSTC_BAT_COMMENT :: Int
+wxSTC_BAT_COMMENT = 1
+
+wxSTC_BAT_WORD :: Int
+wxSTC_BAT_WORD = 2
+
+wxSTC_BAT_LABEL :: Int
+wxSTC_BAT_LABEL = 3
+
+wxSTC_BAT_HIDE :: Int
+wxSTC_BAT_HIDE = 4
+
+wxSTC_BAT_COMMAND :: Int
+wxSTC_BAT_COMMAND = 5
+
+wxSTC_BAT_IDENTIFIER :: Int
+wxSTC_BAT_IDENTIFIER = 6
+
+wxSTC_BAT_OPERATOR :: Int
+wxSTC_BAT_OPERATOR = 7
+
+wxSTC_MAKE_DEFAULT :: Int
+wxSTC_MAKE_DEFAULT = 0
+
+wxSTC_MAKE_COMMENT :: Int
+wxSTC_MAKE_COMMENT = 1
+
+wxSTC_MAKE_PREPROCESSOR :: Int
+wxSTC_MAKE_PREPROCESSOR = 2
+
+wxSTC_MAKE_IDENTIFIER :: Int
+wxSTC_MAKE_IDENTIFIER = 3
+
+wxSTC_MAKE_OPERATOR :: Int
+wxSTC_MAKE_OPERATOR = 4
+
+wxSTC_MAKE_TARGET :: Int
+wxSTC_MAKE_TARGET = 5
+
+wxSTC_MAKE_IDEOL :: Int
+wxSTC_MAKE_IDEOL = 9
+
+wxSTC_DIFF_DEFAULT :: Int
+wxSTC_DIFF_DEFAULT = 0
+
+wxSTC_DIFF_COMMENT :: Int
+wxSTC_DIFF_COMMENT = 1
+
+wxSTC_DIFF_COMMAND :: Int
+wxSTC_DIFF_COMMAND = 2
+
+wxSTC_DIFF_HEADER :: Int
+wxSTC_DIFF_HEADER = 3
+
+wxSTC_DIFF_POSITION :: Int
+wxSTC_DIFF_POSITION = 4
+
+wxSTC_DIFF_DELETED :: Int
+wxSTC_DIFF_DELETED = 5
+
+wxSTC_DIFF_ADDED :: Int
+wxSTC_DIFF_ADDED = 6
+
+wxSTC_CONF_DEFAULT :: Int
+wxSTC_CONF_DEFAULT = 0
+
+wxSTC_CONF_COMMENT :: Int
+wxSTC_CONF_COMMENT = 1
+
+wxSTC_CONF_NUMBER :: Int
+wxSTC_CONF_NUMBER = 2
+
+wxSTC_CONF_IDENTIFIER :: Int
+wxSTC_CONF_IDENTIFIER = 3
+
+wxSTC_CONF_EXTENSION :: Int
+wxSTC_CONF_EXTENSION = 4
+
+wxSTC_CONF_PARAMETER :: Int
+wxSTC_CONF_PARAMETER = 5
+
+wxSTC_CONF_STRING :: Int
+wxSTC_CONF_STRING = 6
+
+wxSTC_CONF_OPERATOR :: Int
+wxSTC_CONF_OPERATOR = 7
+
+wxSTC_CONF_IP :: Int
+wxSTC_CONF_IP = 8
+
+wxSTC_CONF_DIRECTIVE :: Int
+wxSTC_CONF_DIRECTIVE = 9
+
+wxSTC_AVE_DEFAULT :: Int
+wxSTC_AVE_DEFAULT = 0
+
+wxSTC_AVE_COMMENT :: Int
+wxSTC_AVE_COMMENT = 1
+
+wxSTC_AVE_NUMBER :: Int
+wxSTC_AVE_NUMBER = 2
+
+wxSTC_AVE_WORD :: Int
+wxSTC_AVE_WORD = 3
+
+wxSTC_AVE_STRING :: Int
+wxSTC_AVE_STRING = 6
+
+wxSTC_AVE_ENUM :: Int
+wxSTC_AVE_ENUM = 7
+
+wxSTC_AVE_STRINGEOL :: Int
+wxSTC_AVE_STRINGEOL = 8
+
+wxSTC_AVE_IDENTIFIER :: Int
+wxSTC_AVE_IDENTIFIER = 9
+
+wxSTC_AVE_OPERATOR :: Int
+wxSTC_AVE_OPERATOR = 10
+
+wxSTC_AVE_WORD1 :: Int
+wxSTC_AVE_WORD1 = 11
+
+wxSTC_AVE_WORD2 :: Int
+wxSTC_AVE_WORD2 = 12
+
+wxSTC_AVE_WORD3 :: Int
+wxSTC_AVE_WORD3 = 13
+
+wxSTC_AVE_WORD4 :: Int
+wxSTC_AVE_WORD4 = 14
+
+wxSTC_AVE_WORD5 :: Int
+wxSTC_AVE_WORD5 = 15
+
+wxSTC_AVE_WORD6 :: Int
+wxSTC_AVE_WORD6 = 16
+
+wxSTC_ADA_DEFAULT :: Int
+wxSTC_ADA_DEFAULT = 0
+
+wxSTC_ADA_WORD :: Int
+wxSTC_ADA_WORD = 1
+
+wxSTC_ADA_IDENTIFIER :: Int
+wxSTC_ADA_IDENTIFIER = 2
+
+wxSTC_ADA_NUMBER :: Int
+wxSTC_ADA_NUMBER = 3
+
+wxSTC_ADA_DELIMITER :: Int
+wxSTC_ADA_DELIMITER = 4
+
+wxSTC_ADA_CHARACTER :: Int
+wxSTC_ADA_CHARACTER = 5
+
+wxSTC_ADA_CHARACTEREOL :: Int
+wxSTC_ADA_CHARACTEREOL = 6
+
+wxSTC_ADA_STRING :: Int
+wxSTC_ADA_STRING = 7
+
+wxSTC_ADA_STRINGEOL :: Int
+wxSTC_ADA_STRINGEOL = 8
+
+wxSTC_ADA_LABEL :: Int
+wxSTC_ADA_LABEL = 9
+
+wxSTC_ADA_COMMENTLINE :: Int
+wxSTC_ADA_COMMENTLINE = 10
+
+wxSTC_ADA_ILLEGAL :: Int
+wxSTC_ADA_ILLEGAL = 11
+
+wxSTC_BAAN_DEFAULT :: Int
+wxSTC_BAAN_DEFAULT = 0
+
+wxSTC_BAAN_COMMENT :: Int
+wxSTC_BAAN_COMMENT = 1
+
+wxSTC_BAAN_COMMENTDOC :: Int
+wxSTC_BAAN_COMMENTDOC = 2
+
+wxSTC_BAAN_NUMBER :: Int
+wxSTC_BAAN_NUMBER = 3
+
+wxSTC_BAAN_WORD :: Int
+wxSTC_BAAN_WORD = 4
+
+wxSTC_BAAN_STRING :: Int
+wxSTC_BAAN_STRING = 5
+
+wxSTC_BAAN_PREPROCESSOR :: Int
+wxSTC_BAAN_PREPROCESSOR = 6
+
+wxSTC_BAAN_OPERATOR :: Int
+wxSTC_BAAN_OPERATOR = 7
+
+wxSTC_BAAN_IDENTIFIER :: Int
+wxSTC_BAAN_IDENTIFIER = 8
+
+wxSTC_BAAN_STRINGEOL :: Int
+wxSTC_BAAN_STRINGEOL = 9
+
+wxSTC_BAAN_WORD2 :: Int
+wxSTC_BAAN_WORD2 = 10
+
+wxSTC_LISP_DEFAULT :: Int
+wxSTC_LISP_DEFAULT = 0
+
+wxSTC_LISP_COMMENT :: Int
+wxSTC_LISP_COMMENT = 1
+
+wxSTC_LISP_NUMBER :: Int
+wxSTC_LISP_NUMBER = 2
+
+wxSTC_LISP_KEYWORD :: Int
+wxSTC_LISP_KEYWORD = 3
+
+wxSTC_LISP_STRING :: Int
+wxSTC_LISP_STRING = 6
+
+wxSTC_LISP_STRINGEOL :: Int
+wxSTC_LISP_STRINGEOL = 8
+
+wxSTC_LISP_IDENTIFIER :: Int
+wxSTC_LISP_IDENTIFIER = 9
+
+wxSTC_LISP_OPERATOR :: Int
+wxSTC_LISP_OPERATOR = 10
+
+wxSTC_EIFFEL_DEFAULT :: Int
+wxSTC_EIFFEL_DEFAULT = 0
+
+wxSTC_EIFFEL_COMMENTLINE :: Int
+wxSTC_EIFFEL_COMMENTLINE = 1
+
+wxSTC_EIFFEL_NUMBER :: Int
+wxSTC_EIFFEL_NUMBER = 2
+
+wxSTC_EIFFEL_WORD :: Int
+wxSTC_EIFFEL_WORD = 3
+
+wxSTC_EIFFEL_STRING :: Int
+wxSTC_EIFFEL_STRING = 4
+
+wxSTC_EIFFEL_CHARACTER :: Int
+wxSTC_EIFFEL_CHARACTER = 5
+
+wxSTC_EIFFEL_OPERATOR :: Int
+wxSTC_EIFFEL_OPERATOR = 6
+
+wxSTC_EIFFEL_IDENTIFIER :: Int
+wxSTC_EIFFEL_IDENTIFIER = 7
+
+wxSTC_EIFFEL_STRINGEOL :: Int
+wxSTC_EIFFEL_STRINGEOL = 8
+
+wxSTC_NNCRONTAB_DEFAULT :: Int
+wxSTC_NNCRONTAB_DEFAULT = 0
+
+wxSTC_NNCRONTAB_COMMENT :: Int
+wxSTC_NNCRONTAB_COMMENT = 1
+
+wxSTC_NNCRONTAB_TASK :: Int
+wxSTC_NNCRONTAB_TASK = 2
+
+wxSTC_NNCRONTAB_SECTION :: Int
+wxSTC_NNCRONTAB_SECTION = 3
+
+wxSTC_NNCRONTAB_KEYWORD :: Int
+wxSTC_NNCRONTAB_KEYWORD = 4
+
+wxSTC_NNCRONTAB_MODIFIER :: Int
+wxSTC_NNCRONTAB_MODIFIER = 5
+
+wxSTC_NNCRONTAB_ASTERISK :: Int
+wxSTC_NNCRONTAB_ASTERISK = 6
+
+wxSTC_NNCRONTAB_NUMBER :: Int
+wxSTC_NNCRONTAB_NUMBER = 7
+
+wxSTC_NNCRONTAB_STRING :: Int
+wxSTC_NNCRONTAB_STRING = 8
+
+wxSTC_NNCRONTAB_ENVIRONMENT :: Int
+wxSTC_NNCRONTAB_ENVIRONMENT = 9
+
+wxSTC_NNCRONTAB_IDENTIFIER :: Int
+wxSTC_NNCRONTAB_IDENTIFIER = 10
+
+wxSTC_MATLAB_DEFAULT :: Int
+wxSTC_MATLAB_DEFAULT = 0
+
+wxSTC_MATLAB_COMMENT :: Int
+wxSTC_MATLAB_COMMENT = 1
+
+wxSTC_MATLAB_COMMAND :: Int
+wxSTC_MATLAB_COMMAND = 2
+
+wxSTC_MATLAB_NUMBER :: Int
+wxSTC_MATLAB_NUMBER = 3
+
+wxSTC_MATLAB_KEYWORD :: Int
+wxSTC_MATLAB_KEYWORD = 4
+
+wxSTC_MATLAB_STRING :: Int
+wxSTC_MATLAB_STRING = 5
+
+wxSTC_MATLAB_OPERATOR :: Int
+wxSTC_MATLAB_OPERATOR = 6
+
+wxSTC_MATLAB_IDENTIFIER :: Int
+wxSTC_MATLAB_IDENTIFIER = 7
+
+wxSTC_SCRIPTOL_DEFAULT :: Int
+wxSTC_SCRIPTOL_DEFAULT = 0
+
+wxSTC_SCRIPTOL_COMMENT :: Int
+wxSTC_SCRIPTOL_COMMENT = 1
+
+wxSTC_SCRIPTOL_COMMENTLINE :: Int
+wxSTC_SCRIPTOL_COMMENTLINE = 2
+
+wxSTC_SCRIPTOL_COMMENTDOC :: Int
+wxSTC_SCRIPTOL_COMMENTDOC = 3
+
+wxSTC_SCRIPTOL_NUMBER :: Int
+wxSTC_SCRIPTOL_NUMBER = 4
+
+wxSTC_SCRIPTOL_WORD :: Int
+wxSTC_SCRIPTOL_WORD = 5
+
+wxSTC_SCRIPTOL_STRING :: Int
+wxSTC_SCRIPTOL_STRING = 6
+
+wxSTC_SCRIPTOL_CHARACTER :: Int
+wxSTC_SCRIPTOL_CHARACTER = 7
+
+wxSTC_SCRIPTOL_UUID :: Int
+wxSTC_SCRIPTOL_UUID = 8
+
+wxSTC_SCRIPTOL_PREPROCESSOR :: Int
+wxSTC_SCRIPTOL_PREPROCESSOR = 9
+
+wxSTC_SCRIPTOL_OPERATOR :: Int
+wxSTC_SCRIPTOL_OPERATOR = 10
+
+wxSTC_SCRIPTOL_IDENTIFIER :: Int
+wxSTC_SCRIPTOL_IDENTIFIER = 11
+
+wxSTC_SCRIPTOL_STRINGEOL :: Int
+wxSTC_SCRIPTOL_STRINGEOL = 12
+
+wxSTC_SCRIPTOL_VERBATIM :: Int
+wxSTC_SCRIPTOL_VERBATIM = 13
+
+wxSTC_SCRIPTOL_REGEX :: Int
+wxSTC_SCRIPTOL_REGEX = 14
+
+wxSTC_SCRIPTOL_COMMENTLINEDOC :: Int
+wxSTC_SCRIPTOL_COMMENTLINEDOC = 15
+
+wxSTC_SCRIPTOL_WORD2 :: Int
+wxSTC_SCRIPTOL_WORD2 = 16
+
+wxSTC_SCRIPTOL_COMMENTDOCKEYWORD :: Int
+wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = 17
+
+wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR :: Int
+wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = 18
+
+wxSTC_SCRIPTOL_COMMENTBASIC :: Int
+wxSTC_SCRIPTOL_COMMENTBASIC = 19
+
+wxSTC_ASM_DEFAULT :: Int
+wxSTC_ASM_DEFAULT = 0
+
+wxSTC_ASM_COMMENT :: Int
+wxSTC_ASM_COMMENT = 1
+
+wxSTC_ASM_NUMBER :: Int
+wxSTC_ASM_NUMBER = 2
+
+wxSTC_ASM_STRING :: Int
+wxSTC_ASM_STRING = 3
+
+wxSTC_ASM_OPERATOR :: Int
+wxSTC_ASM_OPERATOR = 4
+
+wxSTC_ASM_IDENTIFIER :: Int
+wxSTC_ASM_IDENTIFIER = 5
+
+wxSTC_ASM_CPUINSTRUCTION :: Int
+wxSTC_ASM_CPUINSTRUCTION = 6
+
+wxSTC_ASM_MATHINSTRUCTION :: Int
+wxSTC_ASM_MATHINSTRUCTION = 7
+
+wxSTC_ASM_REGISTER :: Int
+wxSTC_ASM_REGISTER = 8
+
+wxSTC_ASM_DIRECTIVE :: Int
+wxSTC_ASM_DIRECTIVE = 9
+
+wxSTC_ASM_DIRECTIVEOPERAND :: Int
+wxSTC_ASM_DIRECTIVEOPERAND = 10
+
+wxSTC_F_DEFAULT :: Int
+wxSTC_F_DEFAULT = 0
+
+wxSTC_F_COMMENT :: Int
+wxSTC_F_COMMENT = 1
+
+wxSTC_F_NUMBER :: Int
+wxSTC_F_NUMBER = 2
+
+wxSTC_F_STRING1 :: Int
+wxSTC_F_STRING1 = 3
+
+wxSTC_F_STRING2 :: Int
+wxSTC_F_STRING2 = 4
+
+wxSTC_F_STRINGEOL :: Int
+wxSTC_F_STRINGEOL = 5
+
+wxSTC_F_OPERATOR :: Int
+wxSTC_F_OPERATOR = 6
+
+wxSTC_F_IDENTIFIER :: Int
+wxSTC_F_IDENTIFIER = 7
+
+wxSTC_F_WORD :: Int
+wxSTC_F_WORD = 8
+
+wxSTC_F_WORD2 :: Int
+wxSTC_F_WORD2 = 9
+
+wxSTC_F_WORD3 :: Int
+wxSTC_F_WORD3 = 10
+
+wxSTC_F_PREPROCESSOR :: Int
+wxSTC_F_PREPROCESSOR = 11
+
+wxSTC_F_OPERATOR2 :: Int
+wxSTC_F_OPERATOR2 = 12
+
+wxSTC_F_LABEL :: Int
+wxSTC_F_LABEL = 13
+
+wxSTC_F_CONTINUATION :: Int
+wxSTC_F_CONTINUATION = 14
+
+wxSTC_CSS_DEFAULT :: Int
+wxSTC_CSS_DEFAULT = 0
+
+wxSTC_CSS_TAG :: Int
+wxSTC_CSS_TAG = 1
+
+wxSTC_CSS_CLASS :: Int
+wxSTC_CSS_CLASS = 2
+
+wxSTC_CSS_PSEUDOCLASS :: Int
+wxSTC_CSS_PSEUDOCLASS = 3
+
+wxSTC_CSS_UNKNOWN_PSEUDOCLASS :: Int
+wxSTC_CSS_UNKNOWN_PSEUDOCLASS = 4
+
+wxSTC_CSS_OPERATOR :: Int
+wxSTC_CSS_OPERATOR = 5
+
+wxSTC_CSS_IDENTIFIER :: Int
+wxSTC_CSS_IDENTIFIER = 6
+
+wxSTC_CSS_UNKNOWN_IDENTIFIER :: Int
+wxSTC_CSS_UNKNOWN_IDENTIFIER = 7
+
+wxSTC_CSS_VALUE :: Int
+wxSTC_CSS_VALUE = 8
+
+wxSTC_CSS_COMMENT :: Int
+wxSTC_CSS_COMMENT = 9
+
+wxSTC_CSS_ID :: Int
+wxSTC_CSS_ID = 10
+
+wxSTC_CSS_IMPORTANT :: Int
+wxSTC_CSS_IMPORTANT = 11
+
+wxSTC_CSS_DIRECTIVE :: Int
+wxSTC_CSS_DIRECTIVE = 12
+
+wxSTC_CSS_DOUBLESTRING :: Int
+wxSTC_CSS_DOUBLESTRING = 13
+
+wxSTC_CSS_SINGLESTRING :: Int
+wxSTC_CSS_SINGLESTRING = 14
+
+wxSTC_POV_DEFAULT :: Int
+wxSTC_POV_DEFAULT = 0
+
+wxSTC_POV_COMMENT :: Int
+wxSTC_POV_COMMENT = 1
+
+wxSTC_POV_COMMENTLINE :: Int
+wxSTC_POV_COMMENTLINE = 2
+
+wxSTC_POV_NUMBER :: Int
+wxSTC_POV_NUMBER = 3
+
+wxSTC_POV_OPERATOR :: Int
+wxSTC_POV_OPERATOR = 4
+
+wxSTC_POV_IDENTIFIER :: Int
+wxSTC_POV_IDENTIFIER = 5
+
+wxSTC_POV_STRING :: Int
+wxSTC_POV_STRING = 6
+
+wxSTC_POV_STRINGEOL :: Int
+wxSTC_POV_STRINGEOL = 7
+
+wxSTC_POV_DIRECTIVE :: Int
+wxSTC_POV_DIRECTIVE = 8
+
+wxSTC_POV_BADDIRECTIVE :: Int
+wxSTC_POV_BADDIRECTIVE = 9
+
+wxSTC_POV_WORD2 :: Int
+wxSTC_POV_WORD2 = 10
+
+wxSTC_POV_WORD3 :: Int
+wxSTC_POV_WORD3 = 11
+
+wxSTC_POV_WORD4 :: Int
+wxSTC_POV_WORD4 = 12
+
+wxSTC_POV_WORD5 :: Int
+wxSTC_POV_WORD5 = 13
+
+wxSTC_POV_WORD6 :: Int
+wxSTC_POV_WORD6 = 14
+
+wxSTC_POV_WORD7 :: Int
+wxSTC_POV_WORD7 = 15
+
+wxSTC_POV_WORD8 :: Int
+wxSTC_POV_WORD8 = 16
+
+wxSTC_LOUT_DEFAULT :: Int
+wxSTC_LOUT_DEFAULT = 0
+
+wxSTC_LOUT_COMMENT :: Int
+wxSTC_LOUT_COMMENT = 1
+
+wxSTC_LOUT_NUMBER :: Int
+wxSTC_LOUT_NUMBER = 2
+
+wxSTC_LOUT_WORD :: Int
+wxSTC_LOUT_WORD = 3
+
+wxSTC_LOUT_WORD2 :: Int
+wxSTC_LOUT_WORD2 = 4
+
+wxSTC_LOUT_WORD3 :: Int
+wxSTC_LOUT_WORD3 = 5
+
+wxSTC_LOUT_WORD4 :: Int
+wxSTC_LOUT_WORD4 = 6
+
+wxSTC_LOUT_STRING :: Int
+wxSTC_LOUT_STRING = 7
+
+wxSTC_LOUT_OPERATOR :: Int
+wxSTC_LOUT_OPERATOR = 8
+
+wxSTC_LOUT_IDENTIFIER :: Int
+wxSTC_LOUT_IDENTIFIER = 9
+
+wxSTC_LOUT_STRINGEOL :: Int
+wxSTC_LOUT_STRINGEOL = 10
+
+wxSTC_ESCRIPT_DEFAULT :: Int
+wxSTC_ESCRIPT_DEFAULT = 0
+
+wxSTC_ESCRIPT_COMMENT :: Int
+wxSTC_ESCRIPT_COMMENT = 1
+
+wxSTC_ESCRIPT_COMMENTLINE :: Int
+wxSTC_ESCRIPT_COMMENTLINE = 2
+
+wxSTC_ESCRIPT_COMMENTDOC :: Int
+wxSTC_ESCRIPT_COMMENTDOC = 3
+
+wxSTC_ESCRIPT_NUMBER :: Int
+wxSTC_ESCRIPT_NUMBER = 4
+
+wxSTC_ESCRIPT_WORD :: Int
+wxSTC_ESCRIPT_WORD = 5
+
+wxSTC_ESCRIPT_STRING :: Int
+wxSTC_ESCRIPT_STRING = 6
+
+wxSTC_ESCRIPT_OPERATOR :: Int
+wxSTC_ESCRIPT_OPERATOR = 7
+
+wxSTC_ESCRIPT_IDENTIFIER :: Int
+wxSTC_ESCRIPT_IDENTIFIER = 8
+
+wxSTC_ESCRIPT_BRACE :: Int
+wxSTC_ESCRIPT_BRACE = 9
+
+wxSTC_ESCRIPT_WORD2 :: Int
+wxSTC_ESCRIPT_WORD2 = 10
+
+wxSTC_ESCRIPT_WORD3 :: Int
+wxSTC_ESCRIPT_WORD3 = 11
+
+wxSTC_PS_DEFAULT :: Int
+wxSTC_PS_DEFAULT = 0
+
+wxSTC_PS_COMMENT :: Int
+wxSTC_PS_COMMENT = 1
+
+wxSTC_PS_DSC_COMMENT :: Int
+wxSTC_PS_DSC_COMMENT = 2
+
+wxSTC_PS_DSC_VALUE :: Int
+wxSTC_PS_DSC_VALUE = 3
+
+wxSTC_PS_NUMBER :: Int
+wxSTC_PS_NUMBER = 4
+
+wxSTC_PS_NAME :: Int
+wxSTC_PS_NAME = 5
+
+wxSTC_PS_KEYWORD :: Int
+wxSTC_PS_KEYWORD = 6
+
+wxSTC_PS_LITERAL :: Int
+wxSTC_PS_LITERAL = 7
+
+wxSTC_PS_IMMEVAL :: Int
+wxSTC_PS_IMMEVAL = 8
+
+wxSTC_PS_PAREN_ARRAY :: Int
+wxSTC_PS_PAREN_ARRAY = 9
+
+wxSTC_PS_PAREN_DICT :: Int
+wxSTC_PS_PAREN_DICT = 10
+
+wxSTC_PS_PAREN_PROC :: Int
+wxSTC_PS_PAREN_PROC = 11
+
+wxSTC_PS_TEXT :: Int
+wxSTC_PS_TEXT = 12
+
+wxSTC_PS_HEXSTRING :: Int
+wxSTC_PS_HEXSTRING = 13
+
+wxSTC_PS_BASE85STRING :: Int
+wxSTC_PS_BASE85STRING = 14
+
+wxSTC_PS_BADSTRINGCHAR :: Int
+wxSTC_PS_BADSTRINGCHAR = 15
+
+wxSTC_NSIS_DEFAULT :: Int
+wxSTC_NSIS_DEFAULT = 0
+
+wxSTC_NSIS_COMMENT :: Int
+wxSTC_NSIS_COMMENT = 1
+
+wxSTC_NSIS_STRINGDQ :: Int
+wxSTC_NSIS_STRINGDQ = 2
+
+wxSTC_NSIS_STRINGLQ :: Int
+wxSTC_NSIS_STRINGLQ = 3
+
+wxSTC_NSIS_STRINGRQ :: Int
+wxSTC_NSIS_STRINGRQ = 4
+
+wxSTC_NSIS_FUNCTION :: Int
+wxSTC_NSIS_FUNCTION = 5
+
+wxSTC_NSIS_VARIABLE :: Int
+wxSTC_NSIS_VARIABLE = 6
+
+wxSTC_NSIS_LABEL :: Int
+wxSTC_NSIS_LABEL = 7
+
+wxSTC_NSIS_USERDEFINED :: Int
+wxSTC_NSIS_USERDEFINED = 8
+
+wxSTC_NSIS_SECTIONDEF :: Int
+wxSTC_NSIS_SECTIONDEF = 9
+
+wxSTC_NSIS_SUBSECTIONDEF :: Int
+wxSTC_NSIS_SUBSECTIONDEF = 10
+
+wxSTC_NSIS_IFDEFINEDEF :: Int
+wxSTC_NSIS_IFDEFINEDEF = 11
+
+wxSTC_NSIS_MACRODEF :: Int
+wxSTC_NSIS_MACRODEF = 12
+
+wxSTC_NSIS_STRINGVAR :: Int
+wxSTC_NSIS_STRINGVAR = 13
+
+wxSTC_MMIXAL_LEADWS :: Int
+wxSTC_MMIXAL_LEADWS = 0
+
+wxSTC_MMIXAL_COMMENT :: Int
+wxSTC_MMIXAL_COMMENT = 1
+
+wxSTC_MMIXAL_LABEL :: Int
+wxSTC_MMIXAL_LABEL = 2
+
+wxSTC_MMIXAL_OPCODE :: Int
+wxSTC_MMIXAL_OPCODE = 3
+
+wxSTC_MMIXAL_OPCODE_PRE :: Int
+wxSTC_MMIXAL_OPCODE_PRE = 4
+
+wxSTC_MMIXAL_OPCODE_VALID :: Int
+wxSTC_MMIXAL_OPCODE_VALID = 5
+
+wxSTC_MMIXAL_OPCODE_UNKNOWN :: Int
+wxSTC_MMIXAL_OPCODE_UNKNOWN = 6
+
+wxSTC_MMIXAL_OPCODE_POST :: Int
+wxSTC_MMIXAL_OPCODE_POST = 7
+
+wxSTC_MMIXAL_OPERANDS :: Int
+wxSTC_MMIXAL_OPERANDS = 8
+
+wxSTC_MMIXAL_NUMBER :: Int
+wxSTC_MMIXAL_NUMBER = 9
+
+wxSTC_MMIXAL_REF :: Int
+wxSTC_MMIXAL_REF = 10
+
+wxSTC_MMIXAL_CHAR :: Int
+wxSTC_MMIXAL_CHAR = 11
+
+wxSTC_MMIXAL_STRING :: Int
+wxSTC_MMIXAL_STRING = 12
+
+wxSTC_MMIXAL_REGISTER :: Int
+wxSTC_MMIXAL_REGISTER = 13
+
+wxSTC_MMIXAL_HEX :: Int
+wxSTC_MMIXAL_HEX = 14
+
+wxSTC_MMIXAL_OPERATOR :: Int
+wxSTC_MMIXAL_OPERATOR = 15
+
+wxSTC_MMIXAL_SYMBOL :: Int
+wxSTC_MMIXAL_SYMBOL = 16
+
+wxSTC_MMIXAL_INCLUDE :: Int
+wxSTC_MMIXAL_INCLUDE = 17
+
+wxSTC_CLW_DEFAULT :: Int
+wxSTC_CLW_DEFAULT = 0
+
+wxSTC_CLW_LABEL :: Int
+wxSTC_CLW_LABEL = 1
+
+wxSTC_CLW_COMMENT :: Int
+wxSTC_CLW_COMMENT = 2
+
+wxSTC_CLW_STRING :: Int
+wxSTC_CLW_STRING = 3
+
+wxSTC_CLW_USER_IDENTIFIER :: Int
+wxSTC_CLW_USER_IDENTIFIER = 4
+
+wxSTC_CLW_INTEGER_CONSTANT :: Int
+wxSTC_CLW_INTEGER_CONSTANT = 5
+
+wxSTC_CLW_REAL_CONSTANT :: Int
+wxSTC_CLW_REAL_CONSTANT = 6
+
+wxSTC_CLW_PICTURE_STRING :: Int
+wxSTC_CLW_PICTURE_STRING = 7
+
+wxSTC_CLW_KEYWORD :: Int
+wxSTC_CLW_KEYWORD = 8
+
+wxSTC_CLW_COMPILER_DIRECTIVE :: Int
+wxSTC_CLW_COMPILER_DIRECTIVE = 9
+
+wxSTC_CLW_RUNTIME_EXPRESSIONS :: Int
+wxSTC_CLW_RUNTIME_EXPRESSIONS = 10
+
+wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION :: Int
+wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION = 11
+
+wxSTC_CLW_STRUCTURE_DATA_TYPE :: Int
+wxSTC_CLW_STRUCTURE_DATA_TYPE = 12
+
+wxSTC_CLW_ATTRIBUTE :: Int
+wxSTC_CLW_ATTRIBUTE = 13
+
+wxSTC_CLW_STANDARD_EQUATE :: Int
+wxSTC_CLW_STANDARD_EQUATE = 14
+
+wxSTC_CLW_ERROR :: Int
+wxSTC_CLW_ERROR = 15
+
+wxSTC_CLW_DEPRECATED :: Int
+wxSTC_CLW_DEPRECATED = 16
+
+wxSTC_LOT_DEFAULT :: Int
+wxSTC_LOT_DEFAULT = 0
+
+wxSTC_LOT_HEADER :: Int
+wxSTC_LOT_HEADER = 1
+
+wxSTC_LOT_BREAK :: Int
+wxSTC_LOT_BREAK = 2
+
+wxSTC_LOT_SET :: Int
+wxSTC_LOT_SET = 3
+
+wxSTC_LOT_PASS :: Int
+wxSTC_LOT_PASS = 4
+
+wxSTC_LOT_FAIL :: Int
+wxSTC_LOT_FAIL = 5
+
+wxSTC_LOT_ABORT :: Int
+wxSTC_LOT_ABORT = 6
+
+wxSTC_YAML_DEFAULT :: Int
+wxSTC_YAML_DEFAULT = 0
+
+wxSTC_YAML_COMMENT :: Int
+wxSTC_YAML_COMMENT = 1
+
+wxSTC_YAML_IDENTIFIER :: Int
+wxSTC_YAML_IDENTIFIER = 2
+
+wxSTC_YAML_KEYWORD :: Int
+wxSTC_YAML_KEYWORD = 3
+
+wxSTC_YAML_NUMBER :: Int
+wxSTC_YAML_NUMBER = 4
+
+wxSTC_YAML_REFERENCE :: Int
+wxSTC_YAML_REFERENCE = 5
+
+wxSTC_YAML_DOCUMENT :: Int
+wxSTC_YAML_DOCUMENT = 6
+
+wxSTC_YAML_TEXT :: Int
+wxSTC_YAML_TEXT = 7
+
+wxSTC_YAML_ERROR :: Int
+wxSTC_YAML_ERROR = 8
+
+wxSTC_TEX_DEFAULT :: Int
+wxSTC_TEX_DEFAULT = 0
+
+wxSTC_TEX_SPECIAL :: Int
+wxSTC_TEX_SPECIAL = 1
+
+wxSTC_TEX_GROUP :: Int
+wxSTC_TEX_GROUP = 2
+
+wxSTC_TEX_SYMBOL :: Int
+wxSTC_TEX_SYMBOL = 3
+
+wxSTC_TEX_COMMAND :: Int
+wxSTC_TEX_COMMAND = 4
+
+wxSTC_TEX_TEXT :: Int
+wxSTC_TEX_TEXT = 5
+
+wxSTC_METAPOST_DEFAULT :: Int
+wxSTC_METAPOST_DEFAULT = 0
+
+wxSTC_METAPOST_SPECIAL :: Int
+wxSTC_METAPOST_SPECIAL = 1
+
+wxSTC_METAPOST_GROUP :: Int
+wxSTC_METAPOST_GROUP = 2
+
+wxSTC_METAPOST_SYMBOL :: Int
+wxSTC_METAPOST_SYMBOL = 3
+
+wxSTC_METAPOST_COMMAND :: Int
+wxSTC_METAPOST_COMMAND = 4
+
+wxSTC_METAPOST_TEXT :: Int
+wxSTC_METAPOST_TEXT = 5
+
+wxSTC_METAPOST_EXTRA :: Int
+wxSTC_METAPOST_EXTRA = 6
+
+wxSTC_ERLANG_DEFAULT :: Int
+wxSTC_ERLANG_DEFAULT = 0
+
+wxSTC_ERLANG_COMMENT :: Int
+wxSTC_ERLANG_COMMENT = 1
+
+wxSTC_ERLANG_VARIABLE :: Int
+wxSTC_ERLANG_VARIABLE = 2
+
+wxSTC_ERLANG_NUMBER :: Int
+wxSTC_ERLANG_NUMBER = 3
+
+wxSTC_ERLANG_KEYWORD :: Int
+wxSTC_ERLANG_KEYWORD = 4
+
+wxSTC_ERLANG_STRING :: Int
+wxSTC_ERLANG_STRING = 5
+
+wxSTC_ERLANG_OPERATOR :: Int
+wxSTC_ERLANG_OPERATOR = 6
+
+wxSTC_ERLANG_ATOM :: Int
+wxSTC_ERLANG_ATOM = 7
+
+wxSTC_ERLANG_FUNCTION_NAME :: Int
+wxSTC_ERLANG_FUNCTION_NAME = 8
+
+wxSTC_ERLANG_CHARACTER :: Int
+wxSTC_ERLANG_CHARACTER = 9
+
+wxSTC_ERLANG_MACRO :: Int
+wxSTC_ERLANG_MACRO = 10
+
+wxSTC_ERLANG_RECORD :: Int
+wxSTC_ERLANG_RECORD = 11
+
+wxSTC_ERLANG_SEPARATOR :: Int
+wxSTC_ERLANG_SEPARATOR = 12
+
+wxSTC_ERLANG_NODE_NAME :: Int
+wxSTC_ERLANG_NODE_NAME = 13
+
+wxSTC_ERLANG_UNKNOWN :: Int
+wxSTC_ERLANG_UNKNOWN = 31
+
+wxSTC_MSSQL_DEFAULT :: Int
+wxSTC_MSSQL_DEFAULT = 0
+
+wxSTC_MSSQL_COMMENT :: Int
+wxSTC_MSSQL_COMMENT = 1
+
+wxSTC_MSSQL_LINE_COMMENT :: Int
+wxSTC_MSSQL_LINE_COMMENT = 2
+
+wxSTC_MSSQL_NUMBER :: Int
+wxSTC_MSSQL_NUMBER = 3
+
+wxSTC_MSSQL_STRING :: Int
+wxSTC_MSSQL_STRING = 4
+
+wxSTC_MSSQL_OPERATOR :: Int
+wxSTC_MSSQL_OPERATOR = 5
+
+wxSTC_MSSQL_IDENTIFIER :: Int
+wxSTC_MSSQL_IDENTIFIER = 6
+
+wxSTC_MSSQL_VARIABLE :: Int
+wxSTC_MSSQL_VARIABLE = 7
+
+wxSTC_MSSQL_COLUMN_NAME :: Int
+wxSTC_MSSQL_COLUMN_NAME = 8
+
+wxSTC_MSSQL_STATEMENT :: Int
+wxSTC_MSSQL_STATEMENT = 9
+
+wxSTC_MSSQL_DATATYPE :: Int
+wxSTC_MSSQL_DATATYPE = 10
+
+wxSTC_MSSQL_SYSTABLE :: Int
+wxSTC_MSSQL_SYSTABLE = 11
+
+wxSTC_MSSQL_GLOBAL_VARIABLE :: Int
+wxSTC_MSSQL_GLOBAL_VARIABLE = 12
+
+wxSTC_MSSQL_FUNCTION :: Int
+wxSTC_MSSQL_FUNCTION = 13
+
+wxSTC_MSSQL_STORED_PROCEDURE :: Int
+wxSTC_MSSQL_STORED_PROCEDURE = 14
+
+wxSTC_MSSQL_DEFAULT_PREF_DATATYPE :: Int
+wxSTC_MSSQL_DEFAULT_PREF_DATATYPE = 15
+
+wxSTC_MSSQL_COLUMN_NAME_2 :: Int
+wxSTC_MSSQL_COLUMN_NAME_2 = 16
+
+wxSTC_V_DEFAULT :: Int
+wxSTC_V_DEFAULT = 0
+
+wxSTC_V_COMMENT :: Int
+wxSTC_V_COMMENT = 1
+
+wxSTC_V_COMMENTLINE :: Int
+wxSTC_V_COMMENTLINE = 2
+
+wxSTC_V_COMMENTLINEBANG :: Int
+wxSTC_V_COMMENTLINEBANG = 3
+
+wxSTC_V_NUMBER :: Int
+wxSTC_V_NUMBER = 4
+
+wxSTC_V_WORD :: Int
+wxSTC_V_WORD = 5
+
+wxSTC_V_STRING :: Int
+wxSTC_V_STRING = 6
+
+wxSTC_V_WORD2 :: Int
+wxSTC_V_WORD2 = 7
+
+wxSTC_V_WORD3 :: Int
+wxSTC_V_WORD3 = 8
+
+wxSTC_V_PREPROCESSOR :: Int
+wxSTC_V_PREPROCESSOR = 9
+
+wxSTC_V_OPERATOR :: Int
+wxSTC_V_OPERATOR = 10
+
+wxSTC_V_IDENTIFIER :: Int
+wxSTC_V_IDENTIFIER = 11
+
+wxSTC_V_STRINGEOL :: Int
+wxSTC_V_STRINGEOL = 12
+
+wxSTC_V_USER :: Int
+wxSTC_V_USER = 19
+
+wxSTC_KIX_DEFAULT :: Int
+wxSTC_KIX_DEFAULT = 0
+
+wxSTC_KIX_COMMENT :: Int
+wxSTC_KIX_COMMENT = 1
+
+wxSTC_KIX_STRING1 :: Int
+wxSTC_KIX_STRING1 = 2
+
+wxSTC_KIX_STRING2 :: Int
+wxSTC_KIX_STRING2 = 3
+
+wxSTC_KIX_NUMBER :: Int
+wxSTC_KIX_NUMBER = 4
+
+wxSTC_KIX_VAR :: Int
+wxSTC_KIX_VAR = 5
+
+wxSTC_KIX_MACRO :: Int
+wxSTC_KIX_MACRO = 6
+
+wxSTC_KIX_KEYWORD :: Int
+wxSTC_KIX_KEYWORD = 7
+
+wxSTC_KIX_FUNCTIONS :: Int
+wxSTC_KIX_FUNCTIONS = 8
+
+wxSTC_KIX_OPERATOR :: Int
+wxSTC_KIX_OPERATOR = 9
+
+wxSTC_KIX_IDENTIFIER :: Int
+wxSTC_KIX_IDENTIFIER = 31
+
+wxSTC_GC_DEFAULT :: Int
+wxSTC_GC_DEFAULT = 0
+
+wxSTC_GC_COMMENTLINE :: Int
+wxSTC_GC_COMMENTLINE = 1
+
+wxSTC_GC_COMMENTBLOCK :: Int
+wxSTC_GC_COMMENTBLOCK = 2
+
+wxSTC_GC_GLOBAL :: Int
+wxSTC_GC_GLOBAL = 3
+
+wxSTC_GC_EVENT :: Int
+wxSTC_GC_EVENT = 4
+
+wxSTC_GC_ATTRIBUTE :: Int
+wxSTC_GC_ATTRIBUTE = 5
+
+wxSTC_GC_CONTROL :: Int
+wxSTC_GC_CONTROL = 6
+
+wxSTC_GC_COMMAND :: Int
+wxSTC_GC_COMMAND = 7
+
+wxSTC_GC_STRING :: Int
+wxSTC_GC_STRING = 8
+
+wxSTC_GC_OPERATOR :: Int
+wxSTC_GC_OPERATOR = 9
+
+wxSTC_SN_DEFAULT :: Int
+wxSTC_SN_DEFAULT = 0
+
+wxSTC_SN_CODE :: Int
+wxSTC_SN_CODE = 1
+
+wxSTC_SN_COMMENTLINE :: Int
+wxSTC_SN_COMMENTLINE = 2
+
+wxSTC_SN_COMMENTLINEBANG :: Int
+wxSTC_SN_COMMENTLINEBANG = 3
+
+wxSTC_SN_NUMBER :: Int
+wxSTC_SN_NUMBER = 4
+
+wxSTC_SN_WORD :: Int
+wxSTC_SN_WORD = 5
+
+wxSTC_SN_STRING :: Int
+wxSTC_SN_STRING = 6
+
+wxSTC_SN_WORD2 :: Int
+wxSTC_SN_WORD2 = 7
+
+wxSTC_SN_WORD3 :: Int
+wxSTC_SN_WORD3 = 8
+
+wxSTC_SN_PREPROCESSOR :: Int
+wxSTC_SN_PREPROCESSOR = 9
+
+wxSTC_SN_OPERATOR :: Int
+wxSTC_SN_OPERATOR = 10
+
+wxSTC_SN_IDENTIFIER :: Int
+wxSTC_SN_IDENTIFIER = 11
+
+wxSTC_SN_STRINGEOL :: Int
+wxSTC_SN_STRINGEOL = 12
+
+wxSTC_SN_REGEXTAG :: Int
+wxSTC_SN_REGEXTAG = 13
+
+wxSTC_SN_SIGNAL :: Int
+wxSTC_SN_SIGNAL = 14
+
+wxSTC_SN_USER :: Int
+wxSTC_SN_USER = 19
+
+wxSTC_AU3_DEFAULT :: Int
+wxSTC_AU3_DEFAULT = 0
+
+wxSTC_AU3_COMMENT :: Int
+wxSTC_AU3_COMMENT = 1
+
+wxSTC_AU3_COMMENTBLOCK :: Int
+wxSTC_AU3_COMMENTBLOCK = 2
+
+wxSTC_AU3_NUMBER :: Int
+wxSTC_AU3_NUMBER = 3
+
+wxSTC_AU3_FUNCTION :: Int
+wxSTC_AU3_FUNCTION = 4
+
+wxSTC_AU3_KEYWORD :: Int
+wxSTC_AU3_KEYWORD = 5
+
+wxSTC_AU3_MACRO :: Int
+wxSTC_AU3_MACRO = 6
+
+wxSTC_AU3_STRING :: Int
+wxSTC_AU3_STRING = 7
+
+wxSTC_AU3_OPERATOR :: Int
+wxSTC_AU3_OPERATOR = 8
+
+wxSTC_AU3_VARIABLE :: Int
+wxSTC_AU3_VARIABLE = 9
+
+wxSTC_AU3_SENT :: Int
+wxSTC_AU3_SENT = 10
+
+wxSTC_AU3_PREPROCESSOR :: Int
+wxSTC_AU3_PREPROCESSOR = 11
+
+wxSTC_AU3_SPECIAL :: Int
+wxSTC_AU3_SPECIAL = 12
+
+wxSTC_AU3_EXPAND :: Int
+wxSTC_AU3_EXPAND = 13
+
+wxSTC_AU3_COMOBJ :: Int
+wxSTC_AU3_COMOBJ = 14
+
+wxSTC_APDL_DEFAULT :: Int
+wxSTC_APDL_DEFAULT = 0
+
+wxSTC_APDL_COMMENT :: Int
+wxSTC_APDL_COMMENT = 1
+
+wxSTC_APDL_COMMENTBLOCK :: Int
+wxSTC_APDL_COMMENTBLOCK = 2
+
+wxSTC_APDL_NUMBER :: Int
+wxSTC_APDL_NUMBER = 3
+
+wxSTC_APDL_STRING :: Int
+wxSTC_APDL_STRING = 4
+
+wxSTC_APDL_OPERATOR :: Int
+wxSTC_APDL_OPERATOR = 5
+
+wxSTC_APDL_WORD :: Int
+wxSTC_APDL_WORD = 6
+
+wxSTC_APDL_PROCESSOR :: Int
+wxSTC_APDL_PROCESSOR = 7
+
+wxSTC_APDL_COMMAND :: Int
+wxSTC_APDL_COMMAND = 8
+
+wxSTC_APDL_SLASHCOMMAND :: Int
+wxSTC_APDL_SLASHCOMMAND = 9
+
+wxSTC_APDL_STARCOMMAND :: Int
+wxSTC_APDL_STARCOMMAND = 10
+
+wxSTC_APDL_ARGUMENT :: Int
+wxSTC_APDL_ARGUMENT = 11
+
+wxSTC_APDL_FUNCTION :: Int
+wxSTC_APDL_FUNCTION = 12
+
+wxSTC_SH_DEFAULT :: Int
+wxSTC_SH_DEFAULT = 0
+
+wxSTC_SH_ERROR :: Int
+wxSTC_SH_ERROR = 1
+
+wxSTC_SH_COMMENTLINE :: Int
+wxSTC_SH_COMMENTLINE = 2
+
+wxSTC_SH_NUMBER :: Int
+wxSTC_SH_NUMBER = 3
+
+wxSTC_SH_WORD :: Int
+wxSTC_SH_WORD = 4
+
+wxSTC_SH_STRING :: Int
+wxSTC_SH_STRING = 5
+
+wxSTC_SH_CHARACTER :: Int
+wxSTC_SH_CHARACTER = 6
+
+wxSTC_SH_OPERATOR :: Int
+wxSTC_SH_OPERATOR = 7
+
+wxSTC_SH_IDENTIFIER :: Int
+wxSTC_SH_IDENTIFIER = 8
+
+wxSTC_SH_SCALAR :: Int
+wxSTC_SH_SCALAR = 9
+
+wxSTC_SH_PARAM :: Int
+wxSTC_SH_PARAM = 10
+
+wxSTC_SH_BACKTICKS :: Int
+wxSTC_SH_BACKTICKS = 11
+
+wxSTC_SH_HERE_DELIM :: Int
+wxSTC_SH_HERE_DELIM = 12
+
+wxSTC_SH_HERE_Q :: Int
+wxSTC_SH_HERE_Q = 13
+
+wxSTC_ASN1_DEFAULT :: Int
+wxSTC_ASN1_DEFAULT = 0
+
+wxSTC_ASN1_COMMENT :: Int
+wxSTC_ASN1_COMMENT = 1
+
+wxSTC_ASN1_IDENTIFIER :: Int
+wxSTC_ASN1_IDENTIFIER = 2
+
+wxSTC_ASN1_STRING :: Int
+wxSTC_ASN1_STRING = 3
+
+wxSTC_ASN1_OID :: Int
+wxSTC_ASN1_OID = 4
+
+wxSTC_ASN1_SCALAR :: Int
+wxSTC_ASN1_SCALAR = 5
+
+wxSTC_ASN1_KEYWORD :: Int
+wxSTC_ASN1_KEYWORD = 6
+
+wxSTC_ASN1_ATTRIBUTE :: Int
+wxSTC_ASN1_ATTRIBUTE = 7
+
+wxSTC_ASN1_DESCRIPTOR :: Int
+wxSTC_ASN1_DESCRIPTOR = 8
+
+wxSTC_ASN1_TYPE :: Int
+wxSTC_ASN1_TYPE = 9
+
+wxSTC_ASN1_OPERATOR :: Int
+wxSTC_ASN1_OPERATOR = 10
+
+wxSTC_VHDL_DEFAULT :: Int
+wxSTC_VHDL_DEFAULT = 0
+
+wxSTC_VHDL_COMMENT :: Int
+wxSTC_VHDL_COMMENT = 1
+
+wxSTC_VHDL_COMMENTLINEBANG :: Int
+wxSTC_VHDL_COMMENTLINEBANG = 2
+
+wxSTC_VHDL_NUMBER :: Int
+wxSTC_VHDL_NUMBER = 3
+
+wxSTC_VHDL_STRING :: Int
+wxSTC_VHDL_STRING = 4
+
+wxSTC_VHDL_OPERATOR :: Int
+wxSTC_VHDL_OPERATOR = 5
+
+wxSTC_VHDL_IDENTIFIER :: Int
+wxSTC_VHDL_IDENTIFIER = 6
+
+wxSTC_VHDL_STRINGEOL :: Int
+wxSTC_VHDL_STRINGEOL = 7
+
+wxSTC_VHDL_KEYWORD :: Int
+wxSTC_VHDL_KEYWORD = 8
+
+wxSTC_VHDL_STDOPERATOR :: Int
+wxSTC_VHDL_STDOPERATOR = 9
+
+wxSTC_VHDL_ATTRIBUTE :: Int
+wxSTC_VHDL_ATTRIBUTE = 10
+
+wxSTC_VHDL_STDFUNCTION :: Int
+wxSTC_VHDL_STDFUNCTION = 11
+
+wxSTC_VHDL_STDPACKAGE :: Int
+wxSTC_VHDL_STDPACKAGE = 12
+
+wxSTC_VHDL_STDTYPE :: Int
+wxSTC_VHDL_STDTYPE = 13
+
+wxSTC_VHDL_USERWORD :: Int
+wxSTC_VHDL_USERWORD = 14
+
+wxSTC_CAML_DEFAULT :: Int
+wxSTC_CAML_DEFAULT = 0
+
+wxSTC_CAML_IDENTIFIER :: Int
+wxSTC_CAML_IDENTIFIER = 1
+
+wxSTC_CAML_TAGNAME :: Int
+wxSTC_CAML_TAGNAME = 2
+
+wxSTC_CAML_KEYWORD :: Int
+wxSTC_CAML_KEYWORD = 3
+
+wxSTC_CAML_KEYWORD2 :: Int
+wxSTC_CAML_KEYWORD2 = 4
+
+wxSTC_CAML_KEYWORD3 :: Int
+wxSTC_CAML_KEYWORD3 = 5
+
+wxSTC_CAML_LINENUM :: Int
+wxSTC_CAML_LINENUM = 6
+
+wxSTC_CAML_OPERATOR :: Int
+wxSTC_CAML_OPERATOR = 7
+
+wxSTC_CAML_NUMBER :: Int
+wxSTC_CAML_NUMBER = 8
+
+wxSTC_CAML_CHAR :: Int
+wxSTC_CAML_CHAR = 9
+
+wxSTC_CAML_STRING :: Int
+wxSTC_CAML_STRING = 11
+
+wxSTC_CAML_COMMENT :: Int
+wxSTC_CAML_COMMENT = 12
+
+wxSTC_CAML_COMMENT1 :: Int
+wxSTC_CAML_COMMENT1 = 13
+
+wxSTC_CAML_COMMENT2 :: Int
+wxSTC_CAML_COMMENT2 = 14
+
+wxSTC_CAML_COMMENT3 :: Int
+wxSTC_CAML_COMMENT3 = 15
+
+wxSTC_T3_DEFAULT :: Int
+wxSTC_T3_DEFAULT = 0
+
+wxSTC_T3_X_DEFAULT :: Int
+wxSTC_T3_X_DEFAULT = 1
+
+wxSTC_T3_PREPROCESSOR :: Int
+wxSTC_T3_PREPROCESSOR = 2
+
+wxSTC_T3_BLOCK_COMMENT :: Int
+wxSTC_T3_BLOCK_COMMENT = 3
+
+wxSTC_T3_LINE_COMMENT :: Int
+wxSTC_T3_LINE_COMMENT = 4
+
+wxSTC_T3_OPERATOR :: Int
+wxSTC_T3_OPERATOR = 5
+
+wxSTC_T3_KEYWORD :: Int
+wxSTC_T3_KEYWORD = 6
+
+wxSTC_T3_NUMBER :: Int
+wxSTC_T3_NUMBER = 7
+
+wxSTC_T3_IDENTIFIER :: Int
+wxSTC_T3_IDENTIFIER = 8
+
+wxSTC_T3_S_STRING :: Int
+wxSTC_T3_S_STRING = 9
+
+wxSTC_T3_D_STRING :: Int
+wxSTC_T3_D_STRING = 10
+
+wxSTC_T3_X_STRING :: Int
+wxSTC_T3_X_STRING = 11
+
+wxSTC_T3_LIB_DIRECTIVE :: Int
+wxSTC_T3_LIB_DIRECTIVE = 12
+
+wxSTC_T3_MSG_PARAM :: Int
+wxSTC_T3_MSG_PARAM = 13
+
+wxSTC_T3_HTML_TAG :: Int
+wxSTC_T3_HTML_TAG = 14
+
+wxSTC_T3_HTML_DEFAULT :: Int
+wxSTC_T3_HTML_DEFAULT = 15
+
+wxSTC_T3_HTML_STRING :: Int
+wxSTC_T3_HTML_STRING = 16
+
+wxSTC_T3_USER1 :: Int
+wxSTC_T3_USER1 = 17
+
+wxSTC_T3_USER2 :: Int
+wxSTC_T3_USER2 = 18
+
+wxSTC_T3_USER3 :: Int
+wxSTC_T3_USER3 = 19
+
+wxSTC_REBOL_DEFAULT :: Int
+wxSTC_REBOL_DEFAULT = 0
+
+wxSTC_REBOL_COMMENTLINE :: Int
+wxSTC_REBOL_COMMENTLINE = 1
+
+wxSTC_REBOL_COMMENTBLOCK :: Int
+wxSTC_REBOL_COMMENTBLOCK = 2
+
+wxSTC_REBOL_PREFACE :: Int
+wxSTC_REBOL_PREFACE = 3
+
+wxSTC_REBOL_OPERATOR :: Int
+wxSTC_REBOL_OPERATOR = 4
+
+wxSTC_REBOL_CHARACTER :: Int
+wxSTC_REBOL_CHARACTER = 5
+
+wxSTC_REBOL_QUOTEDSTRING :: Int
+wxSTC_REBOL_QUOTEDSTRING = 6
+
+wxSTC_REBOL_BRACEDSTRING :: Int
+wxSTC_REBOL_BRACEDSTRING = 7
+
+wxSTC_REBOL_NUMBER :: Int
+wxSTC_REBOL_NUMBER = 8
+
+wxSTC_REBOL_PAIR :: Int
+wxSTC_REBOL_PAIR = 9
+
+wxSTC_REBOL_TUPLE :: Int
+wxSTC_REBOL_TUPLE = 10
+
+wxSTC_REBOL_BINARY :: Int
+wxSTC_REBOL_BINARY = 11
+
+wxSTC_REBOL_MONEY :: Int
+wxSTC_REBOL_MONEY = 12
+
+wxSTC_REBOL_ISSUE :: Int
+wxSTC_REBOL_ISSUE = 13
+
+wxSTC_REBOL_TAG :: Int
+wxSTC_REBOL_TAG = 14
+
+wxSTC_REBOL_FILE :: Int
+wxSTC_REBOL_FILE = 15
+
+wxSTC_REBOL_EMAIL :: Int
+wxSTC_REBOL_EMAIL = 16
+
+wxSTC_REBOL_URL :: Int
+wxSTC_REBOL_URL = 17
+
+wxSTC_REBOL_DATE :: Int
+wxSTC_REBOL_DATE = 18
+
+wxSTC_REBOL_TIME :: Int
+wxSTC_REBOL_TIME = 19
+
+wxSTC_REBOL_IDENTIFIER :: Int
+wxSTC_REBOL_IDENTIFIER = 20
+
+wxSTC_REBOL_WORD :: Int
+wxSTC_REBOL_WORD = 21
+
+wxSTC_REBOL_WORD2 :: Int
+wxSTC_REBOL_WORD2 = 22
+
+wxSTC_REBOL_WORD3 :: Int
+wxSTC_REBOL_WORD3 = 23
+
+wxSTC_REBOL_WORD4 :: Int
+wxSTC_REBOL_WORD4 = 24
+
+wxSTC_REBOL_WORD5 :: Int
+wxSTC_REBOL_WORD5 = 25
+
+wxSTC_REBOL_WORD6 :: Int
+wxSTC_REBOL_WORD6 = 26
+
+wxSTC_REBOL_WORD7 :: Int
+wxSTC_REBOL_WORD7 = 27
+
+wxSTC_REBOL_WORD8 :: Int
+wxSTC_REBOL_WORD8 = 28
+
+wxSTC_SQL_DEFAULT :: Int
+wxSTC_SQL_DEFAULT = 0
+
+wxSTC_SQL_COMMENT :: Int
+wxSTC_SQL_COMMENT = 1
+
+wxSTC_SQL_COMMENTLINE :: Int
+wxSTC_SQL_COMMENTLINE = 2
+
+wxSTC_SQL_COMMENTDOC :: Int
+wxSTC_SQL_COMMENTDOC = 3
+
+wxSTC_SQL_NUMBER :: Int
+wxSTC_SQL_NUMBER = 4
+
+wxSTC_SQL_WORD :: Int
+wxSTC_SQL_WORD = 5
+
+wxSTC_SQL_STRING :: Int
+wxSTC_SQL_STRING = 6
+
+wxSTC_SQL_CHARACTER :: Int
+wxSTC_SQL_CHARACTER = 7
+
+wxSTC_SQL_SQLPLUS :: Int
+wxSTC_SQL_SQLPLUS = 8
+
+wxSTC_SQL_SQLPLUS_PROMPT :: Int
+wxSTC_SQL_SQLPLUS_PROMPT = 9
+
+wxSTC_SQL_OPERATOR :: Int
+wxSTC_SQL_OPERATOR = 10
+
+wxSTC_SQL_IDENTIFIER :: Int
+wxSTC_SQL_IDENTIFIER = 11
+
+wxSTC_SQL_SQLPLUS_COMMENT :: Int
+wxSTC_SQL_SQLPLUS_COMMENT = 13
+
+wxSTC_SQL_COMMENTLINEDOC :: Int
+wxSTC_SQL_COMMENTLINEDOC = 15
+
+wxSTC_SQL_WORD2 :: Int
+wxSTC_SQL_WORD2 = 16
+
+wxSTC_SQL_COMMENTDOCKEYWORD :: Int
+wxSTC_SQL_COMMENTDOCKEYWORD = 17
+
+wxSTC_SQL_COMMENTDOCKEYWORDERROR :: Int
+wxSTC_SQL_COMMENTDOCKEYWORDERROR = 18
+
+wxSTC_SQL_USER1 :: Int
+wxSTC_SQL_USER1 = 19
+
+wxSTC_SQL_USER2 :: Int
+wxSTC_SQL_USER2 = 20
+
+wxSTC_SQL_USER3 :: Int
+wxSTC_SQL_USER3 = 21
+
+wxSTC_SQL_USER4 :: Int
+wxSTC_SQL_USER4 = 22
+
+wxSTC_SQL_QUOTEDIDENTIFIER :: Int
+wxSTC_SQL_QUOTEDIDENTIFIER = 23
+
+wxSTC_ST_DEFAULT :: Int
+wxSTC_ST_DEFAULT = 0
+
+wxSTC_ST_STRING :: Int
+wxSTC_ST_STRING = 1
+
+wxSTC_ST_NUMBER :: Int
+wxSTC_ST_NUMBER = 2
+
+wxSTC_ST_COMMENT :: Int
+wxSTC_ST_COMMENT = 3
+
+wxSTC_ST_SYMBOL :: Int
+wxSTC_ST_SYMBOL = 4
+
+wxSTC_ST_BINARY :: Int
+wxSTC_ST_BINARY = 5
+
+wxSTC_ST_BOOL :: Int
+wxSTC_ST_BOOL = 6
+
+wxSTC_ST_SELF :: Int
+wxSTC_ST_SELF = 7
+
+wxSTC_ST_SUPER :: Int
+wxSTC_ST_SUPER = 8
+
+wxSTC_ST_NIL :: Int
+wxSTC_ST_NIL = 9
+
+wxSTC_ST_GLOBAL :: Int
+wxSTC_ST_GLOBAL = 10
+
+wxSTC_ST_RETURN :: Int
+wxSTC_ST_RETURN = 11
+
+wxSTC_ST_SPECIAL :: Int
+wxSTC_ST_SPECIAL = 12
+
+wxSTC_ST_KWSEND :: Int
+wxSTC_ST_KWSEND = 13
+
+wxSTC_ST_ASSIGN :: Int
+wxSTC_ST_ASSIGN = 14
+
+wxSTC_ST_CHARACTER :: Int
+wxSTC_ST_CHARACTER = 15
+
+wxSTC_ST_SPEC_SEL :: Int
+wxSTC_ST_SPEC_SEL = 16
+
+wxSTC_FS_DEFAULT :: Int
+wxSTC_FS_DEFAULT = 0
+
+wxSTC_FS_COMMENT :: Int
+wxSTC_FS_COMMENT = 1
+
+wxSTC_FS_COMMENTLINE :: Int
+wxSTC_FS_COMMENTLINE = 2
+
+wxSTC_FS_COMMENTDOC :: Int
+wxSTC_FS_COMMENTDOC = 3
+
+wxSTC_FS_COMMENTLINEDOC :: Int
+wxSTC_FS_COMMENTLINEDOC = 4
+
+wxSTC_FS_COMMENTDOCKEYWORD :: Int
+wxSTC_FS_COMMENTDOCKEYWORD = 5
+
+wxSTC_FS_COMMENTDOCKEYWORDERROR :: Int
+wxSTC_FS_COMMENTDOCKEYWORDERROR = 6
+
+wxSTC_FS_KEYWORD :: Int
+wxSTC_FS_KEYWORD = 7
+
+wxSTC_FS_KEYWORD2 :: Int
+wxSTC_FS_KEYWORD2 = 8
+
+wxSTC_FS_KEYWORD3 :: Int
+wxSTC_FS_KEYWORD3 = 9
+
+wxSTC_FS_KEYWORD4 :: Int
+wxSTC_FS_KEYWORD4 = 10
+
+wxSTC_FS_NUMBER :: Int
+wxSTC_FS_NUMBER = 11
+
+wxSTC_FS_STRING :: Int
+wxSTC_FS_STRING = 12
+
+wxSTC_FS_PREPROCESSOR :: Int
+wxSTC_FS_PREPROCESSOR = 13
+
+wxSTC_FS_OPERATOR :: Int
+wxSTC_FS_OPERATOR = 14
+
+wxSTC_FS_IDENTIFIER :: Int
+wxSTC_FS_IDENTIFIER = 15
+
+wxSTC_FS_DATE :: Int
+wxSTC_FS_DATE = 16
+
+wxSTC_FS_STRINGEOL :: Int
+wxSTC_FS_STRINGEOL = 17
+
+wxSTC_FS_CONSTANT :: Int
+wxSTC_FS_CONSTANT = 18
+
+wxSTC_FS_ASM :: Int
+wxSTC_FS_ASM = 19
+
+wxSTC_FS_LABEL :: Int
+wxSTC_FS_LABEL = 20
+
+wxSTC_FS_ERROR :: Int
+wxSTC_FS_ERROR = 21
+
+wxSTC_FS_HEXNUMBER :: Int
+wxSTC_FS_HEXNUMBER = 22
+
+wxSTC_FS_BINNUMBER :: Int
+wxSTC_FS_BINNUMBER = 23
+
+wxSTC_CSOUND_DEFAULT :: Int
+wxSTC_CSOUND_DEFAULT = 0
+
+wxSTC_CSOUND_COMMENT :: Int
+wxSTC_CSOUND_COMMENT = 1
+
+wxSTC_CSOUND_NUMBER :: Int
+wxSTC_CSOUND_NUMBER = 2
+
+wxSTC_CSOUND_OPERATOR :: Int
+wxSTC_CSOUND_OPERATOR = 3
+
+wxSTC_CSOUND_INSTR :: Int
+wxSTC_CSOUND_INSTR = 4
+
+wxSTC_CSOUND_IDENTIFIER :: Int
+wxSTC_CSOUND_IDENTIFIER = 5
+
+wxSTC_CSOUND_OPCODE :: Int
+wxSTC_CSOUND_OPCODE = 6
+
+wxSTC_CSOUND_HEADERSTMT :: Int
+wxSTC_CSOUND_HEADERSTMT = 7
+
+wxSTC_CSOUND_USERKEYWORD :: Int
+wxSTC_CSOUND_USERKEYWORD = 8
+
+wxSTC_CSOUND_COMMENTBLOCK :: Int
+wxSTC_CSOUND_COMMENTBLOCK = 9
+
+wxSTC_CSOUND_PARAM :: Int
+wxSTC_CSOUND_PARAM = 10
+
+wxSTC_CSOUND_ARATE_VAR :: Int
+wxSTC_CSOUND_ARATE_VAR = 11
+
+wxSTC_CSOUND_KRATE_VAR :: Int
+wxSTC_CSOUND_KRATE_VAR = 12
+
+wxSTC_CSOUND_IRATE_VAR :: Int
+wxSTC_CSOUND_IRATE_VAR = 13
+
+wxSTC_CSOUND_GLOBAL_VAR :: Int
+wxSTC_CSOUND_GLOBAL_VAR = 14
+
+wxSTC_CSOUND_STRINGEOL :: Int
+wxSTC_CSOUND_STRINGEOL = 15
+
+wxSTC_CMD_REDO :: Int
+wxSTC_CMD_REDO = 2011
+
+wxSTC_CMD_SELECTALL :: Int
+wxSTC_CMD_SELECTALL = 2013
+
+wxSTC_CMD_UNDO :: Int
+wxSTC_CMD_UNDO = 2176
+
+wxSTC_CMD_CUT :: Int
+wxSTC_CMD_CUT = 2177
+
+wxSTC_CMD_COPY :: Int
+wxSTC_CMD_COPY = 2178
+
+wxSTC_CMD_PASTE :: Int
+wxSTC_CMD_PASTE = 2179
+
+wxSTC_CMD_CLEAR :: Int
+wxSTC_CMD_CLEAR = 2180
+
+wxSTC_CMD_LINEDOWN :: Int
+wxSTC_CMD_LINEDOWN = 2300
+
+wxSTC_CMD_LINEDOWNEXTEND :: Int
+wxSTC_CMD_LINEDOWNEXTEND = 2301
+
+wxSTC_CMD_LINEUP :: Int
+wxSTC_CMD_LINEUP = 2302
+
+wxSTC_CMD_LINEUPEXTEND :: Int
+wxSTC_CMD_LINEUPEXTEND = 2303
+
+wxSTC_CMD_CHARLEFT :: Int
+wxSTC_CMD_CHARLEFT = 2304
+
+wxSTC_CMD_CHARLEFTEXTEND :: Int
+wxSTC_CMD_CHARLEFTEXTEND = 2305
+
+wxSTC_CMD_CHARRIGHT :: Int
+wxSTC_CMD_CHARRIGHT = 2306
+
+wxSTC_CMD_CHARRIGHTEXTEND :: Int
+wxSTC_CMD_CHARRIGHTEXTEND = 2307
+
+wxSTC_CMD_WORDLEFT :: Int
+wxSTC_CMD_WORDLEFT = 2308
+
+wxSTC_CMD_WORDLEFTEXTEND :: Int
+wxSTC_CMD_WORDLEFTEXTEND = 2309
+
+wxSTC_CMD_WORDRIGHT :: Int
+wxSTC_CMD_WORDRIGHT = 2310
+
+wxSTC_CMD_WORDRIGHTEXTEND :: Int
+wxSTC_CMD_WORDRIGHTEXTEND = 2311
+
+wxSTC_CMD_HOME :: Int
+wxSTC_CMD_HOME = 2312
+
+wxSTC_CMD_HOMEEXTEND :: Int
+wxSTC_CMD_HOMEEXTEND = 2313
+
+wxSTC_CMD_LINEEND :: Int
+wxSTC_CMD_LINEEND = 2314
+
+wxSTC_CMD_LINEENDEXTEND :: Int
+wxSTC_CMD_LINEENDEXTEND = 2315
+
+wxSTC_CMD_DOCUMENTSTART :: Int
+wxSTC_CMD_DOCUMENTSTART = 2316
+
+wxSTC_CMD_DOCUMENTSTARTEXTEND :: Int
+wxSTC_CMD_DOCUMENTSTARTEXTEND = 2317
+
+wxSTC_CMD_DOCUMENTEND :: Int
+wxSTC_CMD_DOCUMENTEND = 2318
+
+wxSTC_CMD_DOCUMENTENDEXTEND :: Int
+wxSTC_CMD_DOCUMENTENDEXTEND = 2319
+
+wxSTC_CMD_PAGEUP :: Int
+wxSTC_CMD_PAGEUP = 2320
+
+wxSTC_CMD_PAGEUPEXTEND :: Int
+wxSTC_CMD_PAGEUPEXTEND = 2321
+
+wxSTC_CMD_PAGEDOWN :: Int
+wxSTC_CMD_PAGEDOWN = 2322
+
+wxSTC_CMD_PAGEDOWNEXTEND :: Int
+wxSTC_CMD_PAGEDOWNEXTEND = 2323
+
+wxSTC_CMD_EDITTOGGLEOVERTYPE :: Int
+wxSTC_CMD_EDITTOGGLEOVERTYPE = 2324
+
+wxSTC_CMD_CANCEL :: Int
+wxSTC_CMD_CANCEL = 2325
+
+wxSTC_CMD_DELETEBACK :: Int
+wxSTC_CMD_DELETEBACK = 2326
+
+wxSTC_CMD_TAB :: Int
+wxSTC_CMD_TAB = 2327
+
+wxSTC_CMD_BACKTAB :: Int
+wxSTC_CMD_BACKTAB = 2328
+
+wxSTC_CMD_NEWLINE :: Int
+wxSTC_CMD_NEWLINE = 2329
+
+wxSTC_CMD_FORMFEED :: Int
+wxSTC_CMD_FORMFEED = 2330
+
+wxSTC_CMD_VCHOME :: Int
+wxSTC_CMD_VCHOME = 2331
+
+wxSTC_CMD_VCHOMEEXTEND :: Int
+wxSTC_CMD_VCHOMEEXTEND = 2332
+
+wxSTC_CMD_ZOOMIN :: Int
+wxSTC_CMD_ZOOMIN = 2333
+
+wxSTC_CMD_ZOOMOUT :: Int
+wxSTC_CMD_ZOOMOUT = 2334
+
+wxSTC_CMD_DELWORDLEFT :: Int
+wxSTC_CMD_DELWORDLEFT = 2335
+
+wxSTC_CMD_DELWORDRIGHT :: Int
+wxSTC_CMD_DELWORDRIGHT = 2336
+
+wxSTC_CMD_LINECUT :: Int
+wxSTC_CMD_LINECUT = 2337
+
+wxSTC_CMD_LINEDELETE :: Int
+wxSTC_CMD_LINEDELETE = 2338
+
+wxSTC_CMD_LINETRANSPOSE :: Int
+wxSTC_CMD_LINETRANSPOSE = 2339
+
+wxSTC_CMD_LINEDUPLICATE :: Int
+wxSTC_CMD_LINEDUPLICATE = 2404
+
+wxSTC_CMD_LOWERCASE :: Int
+wxSTC_CMD_LOWERCASE = 2340
+
+wxSTC_CMD_UPPERCASE :: Int
+wxSTC_CMD_UPPERCASE = 2341
+
+wxSTC_CMD_LINESCROLLDOWN :: Int
+wxSTC_CMD_LINESCROLLDOWN = 2342
+
+wxSTC_CMD_LINESCROLLUP :: Int
+wxSTC_CMD_LINESCROLLUP = 2343
+
+wxSTC_CMD_DELETEBACKNOTLINE :: Int
+wxSTC_CMD_DELETEBACKNOTLINE = 2344
+
+wxSTC_CMD_HOMEDISPLAY :: Int
+wxSTC_CMD_HOMEDISPLAY = 2345
+
+wxSTC_CMD_HOMEDISPLAYEXTEND :: Int
+wxSTC_CMD_HOMEDISPLAYEXTEND = 2346
+
+wxSTC_CMD_LINEENDDISPLAY :: Int
+wxSTC_CMD_LINEENDDISPLAY = 2347
+
+wxSTC_CMD_LINEENDDISPLAYEXTEND :: Int
+wxSTC_CMD_LINEENDDISPLAYEXTEND = 2348
+
+wxSTC_CMD_HOMEWRAP :: Int
+wxSTC_CMD_HOMEWRAP = 2349
+
+wxSTC_CMD_HOMEWRAPEXTEND :: Int
+wxSTC_CMD_HOMEWRAPEXTEND = 2450
+
+wxSTC_CMD_LINEENDWRAP :: Int
+wxSTC_CMD_LINEENDWRAP = 2451
+
+wxSTC_CMD_LINEENDWRAPEXTEND :: Int
+wxSTC_CMD_LINEENDWRAPEXTEND = 2452
+
+wxSTC_CMD_VCHOMEWRAP :: Int
+wxSTC_CMD_VCHOMEWRAP = 2453
+
+wxSTC_CMD_VCHOMEWRAPEXTEND :: Int
+wxSTC_CMD_VCHOMEWRAPEXTEND = 2454
+
+wxSTC_CMD_LINECOPY :: Int
+wxSTC_CMD_LINECOPY = 2455
+
+wxSTC_CMD_WORDPARTLEFT :: Int
+wxSTC_CMD_WORDPARTLEFT = 2390
+
+wxSTC_CMD_WORDPARTLEFTEXTEND :: Int
+wxSTC_CMD_WORDPARTLEFTEXTEND = 2391
+
+wxSTC_CMD_WORDPARTRIGHT :: Int
+wxSTC_CMD_WORDPARTRIGHT = 2392
+
+wxSTC_CMD_WORDPARTRIGHTEXTEND :: Int
+wxSTC_CMD_WORDPARTRIGHTEXTEND = 2393
+
+wxSTC_CMD_DELLINELEFT :: Int
+wxSTC_CMD_DELLINELEFT = 2395
+
+wxSTC_CMD_DELLINERIGHT :: Int
+wxSTC_CMD_DELLINERIGHT = 2396
+
+wxSTC_CMD_PARADOWN :: Int
+wxSTC_CMD_PARADOWN = 2413
+
+wxSTC_CMD_PARADOWNEXTEND :: Int
+wxSTC_CMD_PARADOWNEXTEND = 2414
+
+wxSTC_CMD_PARAUP :: Int
+wxSTC_CMD_PARAUP = 2415
+
+wxSTC_CMD_PARAUPEXTEND :: Int
+wxSTC_CMD_PARAUPEXTEND = 2416
+
+wxSTC_CMD_LINEDOWNRECTEXTEND :: Int
+wxSTC_CMD_LINEDOWNRECTEXTEND = 2426
+
+wxSTC_CMD_LINEUPRECTEXTEND :: Int
+wxSTC_CMD_LINEUPRECTEXTEND = 2427
+
+wxSTC_CMD_CHARLEFTRECTEXTEND :: Int
+wxSTC_CMD_CHARLEFTRECTEXTEND = 2428
+
+wxSTC_CMD_CHARRIGHTRECTEXTEND :: Int
+wxSTC_CMD_CHARRIGHTRECTEXTEND = 2429
+
+wxSTC_CMD_HOMERECTEXTEND :: Int
+wxSTC_CMD_HOMERECTEXTEND = 2430
+
+wxSTC_CMD_VCHOMERECTEXTEND :: Int
+wxSTC_CMD_VCHOMERECTEXTEND = 2431
+
+wxSTC_CMD_LINEENDRECTEXTEND :: Int
+wxSTC_CMD_LINEENDRECTEXTEND = 2432
+
+wxSTC_CMD_PAGEUPRECTEXTEND :: Int
+wxSTC_CMD_PAGEUPRECTEXTEND = 2433
+
+wxSTC_CMD_PAGEDOWNRECTEXTEND :: Int
+wxSTC_CMD_PAGEDOWNRECTEXTEND = 2434
+
+wxSTC_CMD_STUTTEREDPAGEUP :: Int
+wxSTC_CMD_STUTTEREDPAGEUP = 2435
+
+wxSTC_CMD_STUTTEREDPAGEUPEXTEND :: Int
+wxSTC_CMD_STUTTEREDPAGEUPEXTEND = 2436
+
+wxSTC_CMD_STUTTEREDPAGEDOWN :: Int
+wxSTC_CMD_STUTTEREDPAGEDOWN = 2437
+
+wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND :: Int
+wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND = 2438
+
+wxSTC_CMD_WORDLEFTEND :: Int
+wxSTC_CMD_WORDLEFTEND = 2439
+
+wxSTC_CMD_WORDLEFTENDEXTEND :: Int
+wxSTC_CMD_WORDLEFTENDEXTEND = 2440
+
+wxSTC_CMD_WORDRIGHTEND :: Int
+wxSTC_CMD_WORDRIGHTEND = 2441
+
+wxSTC_CMD_WORDRIGHTENDEXTEND :: Int
+wxSTC_CMD_WORDRIGHTENDEXTEND = 2442
+
src/haskell/Graphics/UI/WXCore/WxcObject.hs view
@@ -1,194 +1,194 @@-{-# LANGUAGE CPP, ForeignFunctionInterface #-}-------------------------------------------------------------------------------------------{-|	Module      :  WxcObject-	Copyright   :  (c) Daan Leijen 2003, 2004-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Basic object type.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcObject(-            -- * Object types-              Object, objectNull, objectIsNull, objectCast, objectIsManaged-            , objectFromPtr, objectFromManagedPtr-            , withObjectPtr-            , objectFinalize, objectNoFinalize-            -- * Managed objects-            , ManagedPtr, TManagedPtr, CManagedPtr-            ) where--import Control.Exception -import System.IO.Unsafe( unsafePerformIO )-import Foreign.C-import Foreign.Ptr-import Foreign.Storable-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array--{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"-   See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}-import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)-import Foreign.Concurrent--{------------------------------------------------------------------------------------------    Objects------------------------------------------------------------------------------------------}--{- | An @Object a@ is a pointer to an object of type @a@. The @a@ parameter is used-   to encode the inheritance relation. When the type parameter is unit @()@, it denotes-   an object of exactly that class, when the parameter is a type variable @a@, it-   specifies an object that is at least an instance of that class. For example in -   wxWidgets, we have the following class hierarchy:--   > EvtHandler-   >   |- Window-   >        |- Frame-   >        |- Control-   >            |- Button-   >            |- Radiobox--   In wxHaskell, all the creation functions will return objects of exactly that-   class and use the @()@ type:--   > frameCreate :: Window a -> ... -> IO (Frame ())-   > buttonCreate :: Window a -> ... -> IO (Button ())-   > ...--   In contrast, all the /this/ (or /self/) pointers of methods can take objects-   of any instance of that class and have a type variable, for example:--   > windowSetClientSize :: Window a -> Size -> IO ()-   > controlSetLabel     :: Control a -> String -> IO ()-   > buttonSetDefault    :: Button a -> IO ()--   This means that we can use @windowSetClientSize@ on any window, including-   buttons and frames, but we can only use @controlSetLabel@ on controls, not-   including frames.--   In wxHaskell, this works since a @Frame ()@ is actually a type synonym for-   @Window (CFrame ())@ (where @CFrame@ is an abstract data type). We can thus-   pass a value of type @Frame ()@ to anything that expects some @Window a@.-   For a button this works too, as it is a synonym for @Control (CButton ())@-   which is in turn a synonym for @Window (CControl (CButton ()))@. Note that-   we can\'t pass a frame to something that expects a value of type @Control a@.-   Of course, a @Window a@ is actually a type synonym for @EvtHandler (CWindow a)@.-   If you study the documentation in "Graphics.UI.WX.Classes" closely, you-   can discover where this chain ends :-).  --   Objects are not automatically deleted. Normally you can use a delete function-   like @windowDelete@ to delete an object. However, almost all objects in the-   wxWidgets library are automatically deleted by the library. The only objects-   that should be used with care are resources as bitmaps, fonts and brushes.--}-data Object a   = Object  !(Ptr a)-                | Managed !(ForeignPtr (TManagedPtr a))----- | Managed pointer (proxy) objects-type ManagedPtr a   = Ptr (CManagedPtr a)-type TManagedPtr a  = CManagedPtr a-data CManagedPtr a  = CManagedPtr---instance Eq (Object a) where-  obj1 == obj2-    = unsafePerformIO $-      withObjectPtr obj1 $ \p1 ->-      withObjectPtr obj2 $ \p2 ->-      return (p1 == p2)--instance Ord (Object a) where-  compare obj1 obj2-    = unsafePerformIO $-      withObjectPtr obj1 $ \p1 ->-      withObjectPtr obj2 $ \p2 ->-      return (compare p1 p2)--instance Show (Object a) where-  show obj-    = unsafePerformIO $-      withObjectPtr obj $ \p ->-      return (show p)---- | A null object. Use with care.-objectNull :: Object a-objectNull-  = Object nullPtr---- | Is this a managed object?-objectIsManaged :: Object a -> Bool-objectIsManaged obj-  = case obj of-      Managed fp -> True-      _          -> False---- | Test for null object.-objectIsNull :: Object a -> Bool-objectIsNull obj-  = unsafePerformIO $-    withObjectPtr obj $ \p -> return (p == nullPtr)-      ---- | Cast an object to another type. Use with care.-objectCast :: Object a -> Object b-objectCast obj-  = case obj of-      Object p   -> Object (castPtr p)-      Managed fp -> Managed (castForeignPtr fp) ----- | Do something with the object pointer.-withObjectPtr :: Object a -> (Ptr a -> IO b) -> IO b-withObjectPtr obj f-  = case obj of-      Object p   -> f p-      Managed fp -> withForeignPtr fp $ \mp ->-                    do p <- wxManagedPtr_GetPtr mp-                       f p---- | Finalize a managed object manually. (No effect on unmanaged objects.)-objectFinalize :: Object a -> IO ()-objectFinalize obj-  = case obj of-      Object p   -> return ()-      Managed fp -> withForeignPtr fp $ wxManagedPtr_Finalize-                          --- | Remove the finalizer on a managed object. (No effect on unmanaged objects.)-objectNoFinalize :: Object a -> IO ()-objectNoFinalize obj-  = case obj of-      Object p   -> return ()-      Managed fp -> withForeignPtr fp $ wxManagedPtr_NoFinalize----- | Create an unmanaged object.-objectFromPtr :: Ptr a -> Object a-objectFromPtr p-  = Object p---- | Create a managed object with a given finalizer.-objectFromManagedPtr :: ManagedPtr a -> IO (Object a)-objectFromManagedPtr mp-  = do fun <- wxManagedPtrDeleteFunction-       -- wxManagedPtr_NoFinalize mp    {- turn off finalization -}-       fp <- newForeignPtr mp (fun mp)-       return (Managed fp)---wxManagedPtrDeleteFunction :: IO (ManagedPtr a -> IO ())-wxManagedPtrDeleteFunction-  = do fun <- wxManagedPtr_GetDeleteFunction-       return $ wxManagedPtr_CallbackFunction fun--{---------------------------------------------------------------------------  Managed pointers---------------------------------------------------------------------------}-foreign import ccall wxManagedPtr_GetPtr     :: Ptr (TManagedPtr a) -> IO (Ptr a)-foreign import ccall wxManagedPtr_Finalize   :: ManagedPtr a -> IO ()-foreign import ccall wxManagedPtr_NoFinalize :: ManagedPtr a -> IO ()-foreign import ccall wxManagedPtr_GetDeleteFunction :: IO (FunPtr (ManagedPtr a -> IO ()))-foreign import ccall "dynamic" wxManagedPtr_CallbackFunction :: FunPtr (ManagedPtr a -> IO ()) -> ManagedPtr a -> IO ()+{-# LANGUAGE CPP, ForeignFunctionInterface #-}
+-----------------------------------------------------------------------------------------
+{-|	Module      :  WxcObject
+	Copyright   :  (c) Daan Leijen 2003, 2004
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Basic object type.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.WxcObject(
+            -- * Object types
+              Object, objectNull, objectIsNull, objectCast, objectIsManaged
+            , objectFromPtr, objectFromManagedPtr
+            , withObjectPtr
+            , objectFinalize, objectNoFinalize
+            -- * Managed objects
+            , ManagedPtr, TManagedPtr, CManagedPtr
+            ) where
+
+import Control.Exception 
+import System.IO.Unsafe( unsafePerformIO )
+import Foreign.C
+import Foreign.Ptr
+import Foreign.Storable
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Array
+
+{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"
+   See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}
+import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)
+import Foreign.Concurrent
+
+{-----------------------------------------------------------------------------------------
+    Objects
+-----------------------------------------------------------------------------------------}
+
+{- | An @Object a@ is a pointer to an object of type @a@. The @a@ parameter is used
+   to encode the inheritance relation. When the type parameter is unit @()@, it denotes
+   an object of exactly that class, when the parameter is a type variable @a@, it
+   specifies an object that is at least an instance of that class. For example in 
+   wxWidgets, we have the following class hierarchy:
+
+   > EvtHandler
+   >   |- Window
+   >        |- Frame
+   >        |- Control
+   >            |- Button
+   >            |- Radiobox
+
+   In wxHaskell, all the creation functions will return objects of exactly that
+   class and use the @()@ type:
+
+   > frameCreate :: Window a -> ... -> IO (Frame ())
+   > buttonCreate :: Window a -> ... -> IO (Button ())
+   > ...
+
+   In contrast, all the /this/ (or /self/) pointers of methods can take objects
+   of any instance of that class and have a type variable, for example:
+
+   > windowSetClientSize :: Window a -> Size -> IO ()
+   > controlSetLabel     :: Control a -> String -> IO ()
+   > buttonSetDefault    :: Button a -> IO ()
+
+   This means that we can use @windowSetClientSize@ on any window, including
+   buttons and frames, but we can only use @controlSetLabel@ on controls, not
+   including frames.
+
+   In wxHaskell, this works since a @Frame ()@ is actually a type synonym for
+   @Window (CFrame ())@ (where @CFrame@ is an abstract data type). We can thus
+   pass a value of type @Frame ()@ to anything that expects some @Window a@.
+   For a button this works too, as it is a synonym for @Control (CButton ())@
+   which is in turn a synonym for @Window (CControl (CButton ()))@. Note that
+   we can\'t pass a frame to something that expects a value of type @Control a@.
+   Of course, a @Window a@ is actually a type synonym for @EvtHandler (CWindow a)@.
+   If you study the documentation in "Graphics.UI.WX.Classes" closely, you
+   can discover where this chain ends :-).  
+
+   Objects are not automatically deleted. Normally you can use a delete function
+   like @windowDelete@ to delete an object. However, almost all objects in the
+   wxWidgets library are automatically deleted by the library. The only objects
+   that should be used with care are resources as bitmaps, fonts and brushes.
+-}
+data Object a   = Object  !(Ptr a)
+                | Managed !(ForeignPtr (TManagedPtr a))
+
+
+-- | Managed pointer (proxy) objects
+type ManagedPtr a   = Ptr (CManagedPtr a)
+type TManagedPtr a  = CManagedPtr a
+data CManagedPtr a  = CManagedPtr
+
+
+instance Eq (Object a) where
+  obj1 == obj2
+    = unsafePerformIO $
+      withObjectPtr obj1 $ \p1 ->
+      withObjectPtr obj2 $ \p2 ->
+      return (p1 == p2)
+
+instance Ord (Object a) where
+  compare obj1 obj2
+    = unsafePerformIO $
+      withObjectPtr obj1 $ \p1 ->
+      withObjectPtr obj2 $ \p2 ->
+      return (compare p1 p2)
+
+instance Show (Object a) where
+  show obj
+    = unsafePerformIO $
+      withObjectPtr obj $ \p ->
+      return (show p)
+
+-- | A null object. Use with care.
+objectNull :: Object a
+objectNull
+  = Object nullPtr
+
+-- | Is this a managed object?
+objectIsManaged :: Object a -> Bool
+objectIsManaged obj
+  = case obj of
+      Managed fp -> True
+      _          -> False
+
+-- | Test for null object.
+objectIsNull :: Object a -> Bool
+objectIsNull obj
+  = unsafePerformIO $
+    withObjectPtr obj $ \p -> return (p == nullPtr)
+      
+
+-- | Cast an object to another type. Use with care.
+objectCast :: Object a -> Object b
+objectCast obj
+  = case obj of
+      Object p   -> Object (castPtr p)
+      Managed fp -> Managed (castForeignPtr fp) 
+
+
+-- | Do something with the object pointer.
+withObjectPtr :: Object a -> (Ptr a -> IO b) -> IO b
+withObjectPtr obj f
+  = case obj of
+      Object p   -> f p
+      Managed fp -> withForeignPtr fp $ \mp ->
+                    do p <- wxManagedPtr_GetPtr mp
+                       f p
+
+-- | Finalize a managed object manually. (No effect on unmanaged objects.)
+objectFinalize :: Object a -> IO ()
+objectFinalize obj
+  = case obj of
+      Object p   -> return ()
+      Managed fp -> withForeignPtr fp $ wxManagedPtr_Finalize
+                          
+-- | Remove the finalizer on a managed object. (No effect on unmanaged objects.)
+objectNoFinalize :: Object a -> IO ()
+objectNoFinalize obj
+  = case obj of
+      Object p   -> return ()
+      Managed fp -> withForeignPtr fp $ wxManagedPtr_NoFinalize
+
+
+-- | Create an unmanaged object.
+objectFromPtr :: Ptr a -> Object a
+objectFromPtr p
+  = Object p
+
+-- | Create a managed object with a given finalizer.
+objectFromManagedPtr :: ManagedPtr a -> IO (Object a)
+objectFromManagedPtr mp
+  = do fun <- wxManagedPtrDeleteFunction
+       -- wxManagedPtr_NoFinalize mp    {- turn off finalization -}
+       fp <- newForeignPtr mp (fun mp)
+       return (Managed fp)
+
+
+wxManagedPtrDeleteFunction :: IO (ManagedPtr a -> IO ())
+wxManagedPtrDeleteFunction
+  = do fun <- wxManagedPtr_GetDeleteFunction
+       return $ wxManagedPtr_CallbackFunction fun
+
+{--------------------------------------------------------------------------
+  Managed pointers
+--------------------------------------------------------------------------}
+foreign import ccall wxManagedPtr_GetPtr     :: Ptr (TManagedPtr a) -> IO (Ptr a)
+foreign import ccall wxManagedPtr_Finalize   :: ManagedPtr a -> IO ()
+foreign import ccall wxManagedPtr_NoFinalize :: ManagedPtr a -> IO ()
+foreign import ccall wxManagedPtr_GetDeleteFunction :: IO (FunPtr (ManagedPtr a -> IO ()))
+foreign import ccall "dynamic" wxManagedPtr_CallbackFunction :: FunPtr (ManagedPtr a -> IO ()) -> ManagedPtr a -> IO ()
src/haskell/Graphics/UI/WXCore/WxcTypes.hs view
@@ -1,1439 +1,1439 @@-{-# LANGUAGE CPP, ForeignFunctionInterface, DeriveDataTypeable #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-------------------------------------------------------------------------------------------{-|	Module      :  WxcTypes-	Copyright   :  (c) Daan Leijen 2003, 2004-	License     :  wxWindows--	Maintainer  :  wxhaskell-devel@lists.sourceforge.net-	Stability   :  provisional-	Portability :  portable--Basic types and marshalling code for the wxWidgets C library.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcTypes(-            -- * Object types-              Object, objectNull, objectIsNull, objectCast, objectIsManaged-            , objectDelete-            , objectFromPtr, managedObjectFromPtr-            , withObjectPtr, withObjectRef-            , withObjectResult, withManagedObjectResult-            , objectFinalize, objectNoFinalize-            ---            , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch--            -- * Type synonyms-            , Id-            , Style-            , EventId--            -- * Basic types-            , fromBool, toBool--            -- ** Point-            , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull--            -- ** Size-            , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull--            -- ** Vector-            , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull--            -- ** Rectangle-            , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)-            , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight-            , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty--            -- ** Color-            , Color(..), rgb, colorRGB, rgba, colorRGBA, colorRed, colorGreen, colorBlue, colorAlpha-            , intFromColor, colorFromInt, fromColor, toColor, colorOk, colorIsOk--            -- * Marshalling-            -- ** Basic types-            , withPointResult, withWxPointResult, toCIntPointX, toCIntPointY, fromCPoint, withCPoint-            , withPointDoubleResult, toCDoublePointX, toCDoublePointY, fromCPointDouble, withCPointDouble-            , withSizeResult, withWxSizeResult, toCIntSizeW, toCIntSizeH, fromCSize, withCSize-            , withSizeDoubleResult, toCDoubleSizeW, toCDoubleSizeH, fromCSizeDouble, withCSizeDouble-            , withVectorResult, withWxVectorResult, toCIntVectorX, toCIntVectorY, fromCVector, withCVector-            , withVectorDoubleResult, toCDoubleVectorX, toCDoubleVectorY, fromCVectorDouble, withCVectorDouble-            , withRectResult, withWxRectResult, withWxRectPtr, toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH, fromCRect, withCRect-            , withRectDoubleResult, toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH, fromCRectDouble, withCRectDouble-            , withArray, withArrayString, withArrayWString, withArrayInt, withArrayIntPtr, withArrayObject-            , withArrayIntResult, withArrayIntPtrResult, withArrayStringResult, withArrayWStringResult, withArrayObjectResult--            , colourFromColor, colorFromColour-            , colourCreate, colourSafeDelete -- , colourCreateRGB, colourRed, colourGreen, colourBlue colourAlpha--  -            -- ** Managed object types--            -- , managedAddFinalizer-            , TreeItem, treeItemInvalid, treeItemIsOk, treeItemFromInt-            , withRefTreeItemId, withTreeItemIdPtr, withTreeItemIdRef, withManagedTreeItemIdResult-            , withStringRef, withStringPtr, withManagedStringResult-            , withRefColour, withColourRef, withColourPtr, withManagedColourResult-            , withRefBitmap, withManagedBitmapResult-            , withRefCursor, withManagedCursorResult-            , withRefIcon, withManagedIconResult-            , withRefPen, withManagedPenResult-            , withRefBrush, withManagedBrushResult-            , withRefFont, withManagedFontResult-            , withRefImage-            , withRefListItem-            , withRefFontData-            , withRefPrintData-            , withRefPageSetupDialogData-            , withRefPrintDialogData-            , withRefDateTime, withManagedDateTimeResult-            , withRefGridCellCoordsArray, withManagedGridCellCoordsArrayResult---            -- ** Primitive types-            -- *** CString-            , CString(..), withCString, withStringResult-            , CWString(..), withCWString, withWStringResult-            -- *** ByteString-            , withByteStringResult, withLazyByteStringResult-            -- *** CInt-            , CInt(..), toCInt, fromCInt, withIntResult-            -- *** IntPtr-            , IntPtr(..)-            -- *** CIntPtr-            , CIntPtr(..), toCIntPtr, fromCIntPtr, withIntPtrResult-            -- *** Word-            , Word(..)-            -- *** 8 bit Word-            , Word8(..)-            -- *** 64 bit Integer-            , Int64(..)-            -- *** CDouble-            , CDouble(..), toCDouble, fromCDouble, withDoubleResult-            -- *** CChar-            , CChar(..), toCChar, fromCChar, withCharResult-            , CWchar(..), toCWchar-            -- *** CBool-            , CBool(..), toCBool, fromCBool, withBoolResult-            -- ** Pointers-            , Ptr(..), ptrNull, ptrIsNull, ptrCast, ForeignPtr, FunPtr, toCFunPtr-            ) where--import Control.Exception -import System.IO.Unsafe( unsafePerformIO )-import Foreign.C-import Foreign.Ptr-import Foreign.Storable-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array-import Foreign.Marshal.Utils (fromBool, toBool)--{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"-   See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}-import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)-import Foreign.Concurrent--import Data.Array.MArray (MArray)-import Data.Array.Unboxed (IArray, UArray)-import Data.Bits( shiftL, shiftR, (.&.), (.|.) )--import qualified Data.ByteString as B-import qualified Data.ByteString.Lazy as LB-import qualified Data.ByteString.Char8 as BC (pack)-import qualified Data.ByteString.Lazy.Char8 as LBC (pack)--{- note: this is just for instances for the WX library and not necessary for WXCore -}-import Data.Dynamic--import Data.Int-import Data.Word-import Debug.Trace (traceIO)--import Graphics.UI.WXCore.WxcObject-import Graphics.UI.WXCore.WxcClassTypes--{------------------------------------------------------------------------------------------    Objects------------------------------------------------------------------------------------------}--- | An @Id@ is used to identify objects during event handling.-type Id = Int---- | An @EventId@ is identifies specific events.-type EventId = Int---- | A @Style@ is normally used as a flag mask to specify some window style-type Style = Int----- | Delete a wxObject, works for managed and unmanaged objects.-objectDelete :: WxObject a -> IO ()-objectDelete obj-  = if objectIsManaged obj-     then objectFinalize obj-     else withObjectPtr obj $ \p ->-          wxObject_SafeDelete p-                                    --- | Create a managed object that will be deleted using |wxObject_SafeDelete|.-managedObjectFromPtr :: Ptr (TWxObject a) -> IO (WxObject a)-managedObjectFromPtr p -  = do mp <- wxManagedPtr_CreateFromObject p-       objectFromManagedPtr mp---- | Create a managed object that will be deleted using |wxObject_SafeDelete|.-withManagedObjectResult :: IO (Ptr (TWxObject a)) -> IO (WxObject a)-withManagedObjectResult io-  = do p <- io-       managedObjectFromPtr p---- | Return an unmanaged object.-withObjectResult :: IO (Ptr a) -> IO (Object a)-withObjectResult io-  = do p <- io-       return (objectFromPtr p)---- | Extract the object pointer and raise an exception if @NULL@.--- Otherwise continue with the valid pointer.-withObjectRef :: String -> Object a -> (Ptr a -> IO b) -> IO b-withObjectRef msg obj f-  = withObjectPtr obj $ \p -> -    withValidPtr msg p f---- | Execute the continuation when the pointer is not null and--- raise an error otherwise.-withValidPtr :: String -> Ptr a -> (Ptr a -> IO b) -> IO b-withValidPtr msg p f-  = if (p == nullPtr)-     then ioError (userError ("wxHaskell: NULL object" ++ (if null msg then "" else ": " ++ msg)))-     else f p---foreign import ccall wxManagedPtr_CreateFromObject :: Ptr (TWxObject a) -> IO (ManagedPtr (TWxObject a))-foreign import ccall wxObject_SafeDelete           :: Ptr (TWxObject a) -> IO ()---{------------------------------------------------------------------------------------------  Point------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Point = Point2 Int---- | A point has an x and y coordinate. Coordinates are normally relative to the--- upper-left corner of their view frame, where a positive x goes to the right and--- a positive y to the bottom of the view.-data (Num a) => Point2 a = Point-        { pointX :: !a -- ^ x component of a point.-        , pointY :: !a -- ^ y component of a point.-        }-        deriving (Eq,Show,Read,Typeable)---- | Construct a point.-point :: (Num a) => a -> a -> Point2 a-point x y  = Point x y---- | Shorter function to construct a point.-pt :: (Num a) => a -> a -> Point2 a-pt x y  = Point x y--pointFromVec :: (Num a) => Vector -> Point2 a-pointFromVec (Vector x y)-  = Point (fromIntegral x) (fromIntegral y)--pointFromSize :: (Num a) => Size -> Point2 a-pointFromSize (Size w h)-  = Point (fromIntegral w) (fromIntegral h)---- | Point at the origin.-pointZero :: (Num a) => Point2 a-pointZero-  = Point 0 0---- | A `null' point is not a legal point (x and y are -1) and can be used for some--- wxWidgets functions to select a default point.-pointNull :: (Num a) => Point2 a-pointNull-  = Point (-1) (-1)---- marshalling-withCPoint :: Point2 Int -> (CInt -> CInt -> IO a) -> IO a-withCPoint (Point x y) f-  = f (toCInt x) (toCInt y)--withPointResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO (Point2 Int)-withPointResult f-  = alloca $ \px ->-    alloca $ \py ->-    do f px py-       x <- peek px-       y <- peek py-       return (fromCPoint x y)--toCIntPointX, toCIntPointY :: Point2 Int -> CInt-toCIntPointX (Point x y)  = toCInt x-toCIntPointY (Point x y)  = toCInt y--fromCPoint :: CInt -> CInt -> Point2 Int-fromCPoint x y-  = Point (fromCInt x) (fromCInt y)--withCPointDouble :: Point2 Double -> (CDouble -> CDouble -> IO a) -> IO a-withCPointDouble (Point x y) f-  = f (toCDouble x) (toCDouble y)--withPointDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Point2 Double)-withPointDoubleResult f-  = alloca $ \px ->-    alloca $ \py ->-    do f px py-       x <- peek px-       y <- peek py-       return (fromCPointDouble x y)--toCDoublePointX, toCDoublePointY :: Point2 Double -> CDouble-toCDoublePointX (Point x y)  = toCDouble x-toCDoublePointY (Point x y)  = toCDouble y--fromCPointDouble :: CDouble -> CDouble -> Point2 Double-fromCPointDouble x y-  = Point (fromCDouble x) (fromCDouble y)--{---- | A @wxPoint@ object.-type WxPointObject a   = Ptr (CWxPointObject a)-type TWxPointObject a  = CWxPointObject a-data CWxPointObject a  = CWxPointObject--}--withWxPointResult :: IO (Ptr (TWxPoint a)) -> IO (Point2 Int)-withWxPointResult io-  = do pt <- io-       x  <- wxPoint_GetX pt-       y  <- wxPoint_GetY pt-       wxPoint_Delete pt-       return (fromCPoint x y)--foreign import ccall wxPoint_Delete :: Ptr (TWxPoint a) -> IO ()-foreign import ccall wxPoint_GetX   :: Ptr (TWxPoint a) -> IO CInt-foreign import ccall wxPoint_GetY   :: Ptr (TWxPoint a) -> IO CInt---{------------------------------------------------------------------------------------------  Size------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Size = Size2D Int---- | A @Size@ has a width and height.-data (Num a) => Size2D a = Size-        { sizeW :: !a -- ^ the width  of a size-        , sizeH :: !a -- ^ the height of a size-        }-        deriving (Eq,Show,Typeable)---- | Construct a size from a width and height.-size :: (Num a) => a -> a -> Size2D a-size w h-  = Size w h---- | Short function to construct a size-sz :: (Num a) => a -> a -> Size2D a-sz w h-  = Size w h--sizeFromPoint :: (Num a) => Point2 a -> Size2D a-sizeFromPoint (Point x y)-  = Size x y--sizeFromVec   :: (Num a) => Vector2 a -> Size2D a-sizeFromVec (Vector x y)-  = Size x y--sizeZero :: (Num a) => Size2D a-sizeZero-  = Size 0 0---- | A `null' size is not a legal size (width and height are -1) and can be used for some--- wxWidgets functions to select a default size.-sizeNull :: (Num a) => Size2D a-sizeNull-  = Size (-1) (-1)---- marshalling-withCSize :: Size -> (CInt -> CInt -> IO a) -> IO a-withCSize (Size w h) f-  = f (toCInt w) (toCInt h)--withSizeResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Size-withSizeResult f-  = alloca $ \cw ->-    alloca $ \ch ->-    do f cw ch-       w <- peek cw-       h <- peek ch-       return (fromCSize w h)--fromCSize :: CInt -> CInt -> Size-fromCSize w h-  = Size (fromCInt w) (fromCInt h)--toCIntSizeW, toCIntSizeH :: Size -> CInt-toCIntSizeW (Size w h)  = toCInt w-toCIntSizeH (Size w h)  = toCInt h--withCSizeDouble :: Size2D Double -> (CDouble -> CDouble -> IO a) -> IO a-withCSizeDouble (Size w h) f-  = f (toCDouble w) (toCDouble h)--withSizeDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Size2D Double)-withSizeDoubleResult f-  = alloca $ \cw ->-    alloca $ \ch ->-    do f cw ch-       w <- peek cw-       h <- peek ch-       return (fromCSizeDouble w h)--fromCSizeDouble :: CDouble -> CDouble -> Size2D Double-fromCSizeDouble w h-  = Size (fromCDouble w) (fromCDouble h)--toCDoubleSizeW, toCDoubleSizeH :: Size2D Double -> CDouble-toCDoubleSizeW (Size w h)  = toCDouble w-toCDoubleSizeH (Size w h)  = toCDouble h--{---- | A @wxSize@ object.-type WxSizeObject a   = Ptr (CWxSizeObject a)-type TWxSizeObject a  = CWxSizeObject a-data CWxSizeObject a  = CWxSizeObject--}--withWxSizeResult :: IO (Ptr (TWxSize a)) -> IO Size-withWxSizeResult io-  = do sz <- io-       w  <- wxSize_GetWidth  sz-       h  <- wxSize_GetHeight sz-       wxSize_Delete sz-       return (fromCSize w h)--foreign import ccall wxSize_Delete    :: Ptr (TWxSize a) -> IO ()-foreign import ccall wxSize_GetWidth  :: Ptr (TWxSize a) -> IO CInt-foreign import ccall wxSize_GetHeight :: Ptr (TWxSize a) -> IO CInt---{------------------------------------------------------------------------------------------  Vector------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Vector = Vector2 Int---- | A vector with an x and y delta.-data (Num a) => Vector2 a = Vector-        { vecX :: !a -- ^ delta-x component of a vector-        , vecY :: !a -- ^ delta-y component of a vector-        }-        deriving (Eq,Show,Read,Typeable)---- | Construct a vector.-vector :: (Num a) => a -> a -> Vector2 a-vector dx dy  = Vector dx dy---- | Short function to construct a vector.-vec :: (Num a) => a -> a -> Vector2 a-vec dx dy  = Vector dx dy---- | A zero vector-vecZero :: (Num a) => Vector2 a-vecZero-  = Vector 0 0---- | A `null' vector has a delta x and y of -1 and can be used for some--- wxWidgets functions to select a default vector.-vecNull :: (Num a) => Vector2 a-vecNull-  = Vector (-1) (-1)--vecFromPoint :: (Num a) => Point2 a -> Vector2 a-vecFromPoint (Point x y)-  = Vector x y--vecFromSize :: Size -> Vector-vecFromSize (Size w h)-  = Vector w h----- marshalling-withCVector :: Vector -> (CInt -> CInt -> IO a) -> IO a-withCVector (Vector x y) f-  = f (toCInt x) (toCInt y)--withVectorResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Vector-withVectorResult f-  = alloca $ \px ->-    alloca $ \py ->-    do f px py-       x <- peek px-       y <- peek py-       return (fromCVector x y)--toCIntVectorX, toCIntVectorY :: Vector -> CInt-toCIntVectorX (Vector x y)  = toCInt x-toCIntVectorY (Vector x y)  = toCInt y--fromCVector :: CInt -> CInt -> Vector-fromCVector x y-  = Vector (fromCInt x) (fromCInt y)--withCVectorDouble :: Vector2 Double -> (CDouble -> CDouble -> IO a) -> IO a-withCVectorDouble (Vector x y) f-  = f (toCDouble x) (toCDouble y)--withVectorDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Vector2 Double)-withVectorDoubleResult f-  = alloca $ \px ->-    alloca $ \py ->-    do f px py-       x <- peek px-       y <- peek py-       return (fromCVectorDouble x y)--toCDoubleVectorX, toCDoubleVectorY :: Vector2 Double -> CDouble-toCDoubleVectorX (Vector x y)  = toCDouble x-toCDoubleVectorY (Vector x y)  = toCDouble y--fromCVectorDouble :: CDouble -> CDouble -> Vector2 Double-fromCVectorDouble x y-  = Vector (fromCDouble x) (fromCDouble y)---withWxVectorResult :: IO (Ptr (TWxPoint a)) -> IO Vector-withWxVectorResult io-  = do pt <- io-       x  <- wxPoint_GetX pt-       y  <- wxPoint_GetY pt-       wxPoint_Delete pt-       return (fromCVector x y)---{------------------------------------------------------------------------------------------  Rectangle------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Rect = Rect2D Int---- | A rectangle is defined by the left x coordinate, the top y coordinate,--- the width and the height.-data (Num a) => Rect2D a = Rect-        { rectLeft   :: !a-        , rectTop    :: !a-        , rectWidth  :: !a-        , rectHeight :: !a-        }-        deriving (Eq,Show,Read,Typeable)---rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight :: (Num a) => Rect2D a -> Point2 a-rectTopLeft     (Rect l t w h)  = Point l t-rectTopRight    (Rect l t w h)  = Point (l+w) t-rectBottomLeft  (Rect l t w h)  = Point l (t+h)-rectBottomRight (Rect l t w h)  = Point (l+w) (t+h)--rectBottom, rectRight :: (Num a) => Rect2D a -> a-rectBottom (Rect x y w h)  = y + h-rectRight  (Rect x y w h)  = x + w---- | Create a rectangle at a certain (upper-left) point with a certain size.-rect :: (Num a) => Point2 a -> Size2D a -> Rect2D a-rect (Point x y) (Size w h)-  = Rect x y w h---- | Construct a (positive) rectangle between two (arbitrary) points.-rectBetween :: (Num a, Ord a) => Point2 a -> Point2 a -> Rect2D a-rectBetween (Point x0 y0) (Point x1 y1)-  = Rect (min x0 x1) (min y0 y1) (abs (x1-x0)) (abs (y1-y0))---- | An empty rectangle at (0,0).-rectZero :: (Num a) => Rect2D a-rectZero-  = Rect 0 0 0 0---- | An `null' rectangle is not a valid rectangle (@Rect -1 -1 -1 -1@) but can--- used for some wxWidgets functions to select a default rectangle. (i.e. 'frameCreate').-rectNull :: (Num a) => Rect2D a-rectNull-  = Rect (-1) (-1) (-1) (-1)---- | Get the size of a rectangle.-rectSize :: (Num a) => Rect2D a -> Size2D a-rectSize (Rect l t w h)-  = Size w h---- | Create a rectangle of a certain size with the upper-left corner at ('pt' 0 0).-rectFromSize :: (Num a) => Size2D a -> Rect2D a-rectFromSize (Size w h)-  = Rect 0 0 w h--rectIsEmpty :: (Num a, Eq a) => Rect2D a -> Bool-rectIsEmpty (Rect l t w h)-  = (w==0 && h==0)------ marshalling 1-withCRect :: Rect -> (CInt -> CInt -> CInt -> CInt -> IO a) -> IO a-withCRect (Rect x0 y0 x1 y1) f-  = f (toCInt (x0)) (toCInt (y0)) (toCInt (x1)) (toCInt (y1))--withRectResult :: (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()) -> IO Rect-withRectResult f-  = alloca $ \cx ->-    alloca $ \cy ->-    alloca $ \cw ->-    alloca $ \ch ->-    do f cx cy cw ch-       x <- peek cx-       y <- peek cy-       w <- peek cw-       h <- peek ch-       return (fromCRect x y w h)--fromCRect :: CInt -> CInt -> CInt -> CInt -> Rect-fromCRect x y w h-  = Rect (fromCInt x) (fromCInt y) (fromCInt w) (fromCInt h)--toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH :: Rect -> CInt-toCIntRectX (Rect x y w h)  = toCInt x-toCIntRectY (Rect x y w h)  = toCInt y-toCIntRectW (Rect x y w h)  = toCInt w-toCIntRectH (Rect x y w h)  = toCInt h--withCRectDouble :: Rect2D Double -> (CDouble -> CDouble -> CDouble -> CDouble -> IO a) -> IO a-withCRectDouble (Rect x0 y0 x1 y1) f-  = f (toCDouble (x0)) (toCDouble (y0)) (toCDouble (x1)) (toCDouble (y1))--withRectDoubleResult :: (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Rect2D Double)-withRectDoubleResult f-  = alloca $ \cx ->-    alloca $ \cy ->-    alloca $ \cw ->-    alloca $ \ch ->-    do f cx cy cw ch-       x <- peek cx-       y <- peek cy-       w <- peek cw-       h <- peek ch-       return (fromCRectDouble x y w h)--fromCRectDouble :: CDouble -> CDouble -> CDouble -> CDouble -> Rect2D Double-fromCRectDouble x y w h-  = Rect (fromCDouble x) (fromCDouble y) (fromCDouble w) (fromCDouble h)--toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH :: Rect2D Double -> CDouble-toCDoubleRectX (Rect x y w h)  = toCDouble x-toCDoubleRectY (Rect x y w h)  = toCDouble y-toCDoubleRectW (Rect x y w h)  = toCDouble w-toCDoubleRectH (Rect x y w h)  = toCDouble h---- marshalling 2-{---- | A @wxRect@ object.-type WxRectObject a   = Ptr (CWxRectObject a)-type TWxRectObject a  = CWxRectObject a-data CWxRectObject a  = CWxRectObject--}--withWxRectRef :: String -> Rect -> (Ptr (TWxRect r) -> IO a) -> IO a-withWxRectRef msg r f-  = withWxRectPtr r $ \p -> withValidPtr msg p f--withWxRectPtr :: Rect -> (Ptr (TWxRect r) -> IO a) -> IO a-withWxRectPtr r f-  = bracket (withCRect r wxRect_Create)-            (wxRect_Delete)-            f--withWxRectResult :: IO (Ptr (TWxRect a)) -> IO Rect-withWxRectResult io-  = do rt <- io-       x  <- wxRect_GetX  rt-       y  <- wxRect_GetY  rt-       w  <- wxRect_GetWidth  rt-       h  <- wxRect_GetHeight rt-       wxRect_Delete rt-       return (fromCRect x y w h)--foreign import ccall wxRect_Create    :: CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect a))-foreign import ccall wxRect_Delete    :: Ptr (TWxRect a) -> IO ()-foreign import ccall wxRect_GetX      :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetY      :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetWidth  :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetHeight :: Ptr (TWxRect a) -> IO CInt---{------------------------------------------------------------------------------------------  CInt------------------------------------------------------------------------------------------}-withIntResult :: IO CInt -> IO Int-withIntResult io-  = do x <- io-       return (fromCInt x)--toCInt :: Int -> CInt-toCInt i = fromIntegral i--fromCInt :: CInt -> Int-fromCInt ci-  = fromIntegral ci--{------------------------------------------------------------------------------------------  CIntPtr------------------------------------------------------------------------------------------}-withIntPtrResult :: IO CIntPtr -> IO IntPtr-withIntPtrResult io-  = do x <- io-       return (fromCIntPtr x)--toCIntPtr :: IntPtr -> CIntPtr-toCIntPtr i = fromIntegral i--fromCIntPtr :: CIntPtr -> IntPtr-fromCIntPtr ci-  = fromIntegral ci--{------------------------------------------------------------------------------------------  CDouble------------------------------------------------------------------------------------------}-withDoubleResult :: IO CDouble -> IO Double-withDoubleResult io-  = do x <- io-       return (fromCDouble x)--toCDouble :: Double -> CDouble-toCDouble d = realToFrac d--fromCDouble :: CDouble -> Double-fromCDouble cd-  = realToFrac cd--{------------------------------------------------------------------------------------------  CBool------------------------------------------------------------------------------------------}-type CBool  = CInt--toCBool :: Bool -> CBool-toCBool = intToCBool . fromBool--withBoolResult :: IO CBool -> IO Bool-withBoolResult io-  = do x <- io-       return (fromCBool x)--fromCBool :: CBool -> Bool-fromCBool  = toBool . cboolToInt--foreign import ccall "intToBool" intToCBool :: Int -> CBool-foreign import ccall "boolToInt" cboolToInt :: CBool -> Int--{------------------------------------------------------------------------------------------  CString------------------------------------------------------------------------------------------}-withStringResult :: (Ptr CChar -> IO CInt) -> IO String-withStringResult f-  = do len <- f nullPtr-       if (len<=0)-        then return ""-        else withCString (replicate (fromCInt len) ' ') $ \cstr ->-             do f cstr-                peekCStringLen (cstr,fromCInt len)--withWStringResult :: (Ptr CWchar -> IO CInt) -> IO String-withWStringResult f-  = do len <- f nullPtr-       if (len<=0)-        then return ""-        else withCWString (replicate (fromCInt len) ' ') $ \cstr ->-             do f cstr-                peekCWString cstr--{------------------------------------------------------------------------------------------  ByteString------------------------------------------------------------------------------------------}--- TODO: replace this by more efficient implementation.--- e.g. use mmap when bytestring support mmap interface.-withByteStringResult :: (Ptr CChar -> IO CInt) -> IO B.ByteString-withByteStringResult f-  = do len <- f nullPtr-       if (len<=0)-        then return $ BC.pack ""-        else withCString (replicate (fromCInt len) ' ') $ \cstr ->-             do f cstr-                B.packCStringLen (cstr,fromCInt len)--withLazyByteStringResult :: (Ptr CChar -> IO CInt) -> IO LB.ByteString-withLazyByteStringResult f-  = do str <- withStringResult f-       return $ LBC.pack str--{------------------------------------------------------------------------------------------  Arrays------------------------------------------------------------------------------------------}-withArrayStringResult :: (Ptr (Ptr CChar) -> IO CInt) -> IO [String]-withArrayStringResult f-  = do clen <- f nullPtr-       let len = fromCInt clen-       if (len <= 0)-        then return []-        else allocaArray len $ \carr ->-             do f carr-                arr <- peekArray len carr-                mapM peekCString arr---- FIXME: factorise with withArrayStringResult-withArrayWStringResult :: (Ptr (Ptr CWchar) -> IO CInt) -> IO [String]-withArrayWStringResult f-  = do clen <- f nullPtr-       let len = fromCInt clen-       if (len <= 0)-        then return []-        else allocaArray len $ \carr ->-             do f carr-                arr <- peekArray len carr-                mapM peekCWString arr---withArrayIntResult :: (Ptr CInt -> IO CInt) -> IO [Int]-withArrayIntResult f-  = do clen <- f nullPtr-       let len = fromCInt clen-       if (len <= 0)-        then return []-        else allocaArray len $ \carr ->-             do f carr-                xs <- peekArray len carr-                return (map fromCInt xs)--withArrayIntPtrResult :: (Ptr CIntPtr -> IO CInt) -> IO [IntPtr]-withArrayIntPtrResult f-  = do clen <- f nullPtr-       let len = fromCInt clen-       if (len <= 0)-        then return []-        else allocaArray len $ \carr ->-             do f carr-                xs <- peekArray len carr-                return (map fromCIntPtr xs)--withArrayObjectResult :: (Ptr (Ptr a) -> IO CInt) -> IO [Object a]-withArrayObjectResult f-  = do clen <- f nullPtr-       let len = fromCInt clen-       if (len <= 0)-        then return []-        else allocaArray len $ \carr ->-             do f carr-                ps <- peekArray len carr-                return (map objectFromPtr ps)--withArrayString :: [String] -> (CInt -> Ptr CString -> IO a) -> IO a-withArrayString xs f-  = withCStrings xs [] $ \cxs ->-    withArray0 ptrNull cxs $ \carr ->-    f (toCInt len) carr-  where-    len = length xs--    withCStrings [] cxs f-      = f (reverse cxs)-    withCStrings (x:xs) cxs f-      = withCString x $ \cx ->-        withCStrings xs (cx:cxs) f---- FIXME: factorise with withArrayString-withArrayWString :: [String] -> (CInt -> Ptr CWString -> IO a) -> IO a-withArrayWString xs f-  = withCWStrings xs [] $ \cxs ->-    withArray0 ptrNull cxs $ \carr ->-    f (toCInt len) carr-  where-    len = length xs--    withCWStrings [] cxs f-      = f (reverse cxs)-    withCWStrings (x:xs) cxs f-      = withCWString x $ \cx ->-        withCWStrings xs (cx:cxs) f---withArrayInt :: [Int] -> (CInt -> Ptr CInt -> IO a) -> IO a-withArrayInt xs f-  = withArray0 0 (map toCInt xs) $ \carr ->-    f (toCInt (length xs)) carr--withArrayIntPtr :: [IntPtr] -> (CInt -> Ptr CIntPtr -> IO a) -> IO a-withArrayIntPtr xs f-  = withArray0 0 (map toCIntPtr xs) $ \carr ->-    f (toCInt (length xs)) carr--withArrayObject :: [Ptr a] -> (CInt -> Ptr (Ptr a) -> IO b) -> IO b-withArrayObject xs f-  = withArray0 ptrNull xs $ \carr ->-    f (toCInt (length xs)) carr--{------------------------------------------------------------------------------------------  CCHar------------------------------------------------------------------------------------------}-toCChar :: Char -> CChar-toCChar = castCharToCChar---- generalised to work with Char and CChar-withCharResult :: (Num a, Integral a, Show a) => IO a -> IO Char-withCharResult io-  = do x <- io-       if (x < 0)-          then do traceIO ("Recieved negative unicode: " ++ (show x))-                  return '\n'-          else return (fromCWchar x)--{- The (x < 0) if expression in withCharResult is a workaround for-"processExecAsyncTimed dies with Prelude.chr bad argument"- bug-reported here-http://sourceforge.net/mailarchive/message.php?msg_id=54647.129.16.31.149.1111686341.squirrel%40webmail.chalmers.se-and here-http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg00267.html--Windows GUI-only programs have no stdin, stdout or stderr. So we use Debug.Trace.traceIO-for reporting message.-http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/terminal-interaction.html-http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Debug-Trace.html#v:traceIO--}---fromCChar :: CChar -> Char-fromCChar = castCCharToChar--{------------------------------------------------------------------------------------------  CCHar------------------------------------------------------------------------------------------}-toCWchar :: (Num a) => Char -> a-toCWchar = fromIntegral . fromEnum---fromCWchar :: (Num a, Integral a) => a -> Char-fromCWchar = toEnum . fromIntegral---{------------------------------------------------------------------------------------------  CFunPtr------------------------------------------------------------------------------------------}-toCFunPtr :: FunPtr a -> Ptr a-toCFunPtr fptr-  = castFunPtrToPtr fptr---- | Null pointer, use with care.-ptrNull :: Ptr a-ptrNull-  = nullPtr---- | Test for null.-ptrIsNull :: Ptr a -> Bool-ptrIsNull p-  = (p == ptrNull)---- | Cast a pointer type, use with care.-ptrCast :: Ptr a -> Ptr b-ptrCast p-  = castPtr p--{------------------------------------------------------------------------------------------  Marshalling of classes that are managed------------------------------------------------------------------------------------------}--- | A @Managed a@ is a pointer to an object of type @a@, just like 'Object'. However,--- managed objects are automatically deleted when garbage collected. This is used for--- certain classes that are not managed by the wxWidgets library, like 'Bitmap's-type Managed a  = ForeignPtr a---- | Create a managed object. Takes a finalizer as argument. This is normally a--- a delete function like 'windowDelete'.-createManaged :: IO () -> Ptr a -> IO (Managed a)-createManaged final obj-  = newForeignPtr obj final---- | Add an extra finalizer to a managed object.-managedAddFinalizer :: IO () -> Managed a -> IO ()-managedAddFinalizer io managed-  = addForeignPtrFinalizer managed io---- | Do something with the object from a managed object.-withManaged :: Managed a -> (Ptr a -> IO b) -> IO b-withManaged fptr f-  = withForeignPtr fptr f----- | Keep a managed object explicitly alive.-managedTouch :: Managed a -> IO ()-managedTouch fptr-  = touchForeignPtr fptr---- | A null pointer, use with care.-{-# NOINLINE managedNull #-}-managedNull :: Managed a-managedNull-  = unsafePerformIO (createManaged (return ()) ptrNull)---- | Test for null.-managedIsNull :: Managed a -> Bool-managedIsNull managed-  = (managed == managedNull)---- | Cast a managed object, use with care.-managedCast :: Managed a -> Managed b-managedCast fptr-  = castForeignPtr fptr---{------------------------------------------------------------------------------------------  Classes assigned by value.------------------------------------------------------------------------------------------}-assignRef :: IO (Ptr (TWxObject a)) -> (Ptr (TWxObject a) -> IO ()) -> IO (WxObject a)-assignRef create f-  = withManagedObjectResult (assignRefPtr create f)--assignRefPtr :: IO (Ptr a) -> (Ptr a -> IO ()) -> IO (Ptr a)-assignRefPtr create f-  = do p <- create-       f p-       return p---withManagedBitmapResult :: IO (Ptr (TBitmap a)) -> IO (Bitmap a)-withManagedBitmapResult io-  = do p      <- io-       static <- wxBitmap_IsStatic p-       if (static) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromBitmap p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromBitmap :: Ptr (TBitmap a) -> IO (ManagedPtr (TBitmap a))-foreign import ccall wxBitmap_IsStatic :: Ptr (TBitmap a) -> IO Bool--withManagedIconResult :: IO (Ptr (TIcon a)) -> IO (Icon a)-withManagedIconResult io-  = do p      <- io-       if (wxIcon_IsStatic p) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromIcon p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromIcon :: Ptr (TIcon a) -> IO (ManagedPtr (TIcon a))-foreign import ccall wxIcon_IsStatic :: Ptr (TIcon a) -> Bool--withManagedBrushResult :: IO (Ptr (TBrush a)) -> IO (Brush a)-withManagedBrushResult io-  = do p      <- io-       if (wxBrush_IsStatic p) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromBrush p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromBrush :: Ptr (TBrush a) -> IO (ManagedPtr (TBrush a))-foreign import ccall wxBrush_IsStatic :: Ptr (TBrush a) -> Bool--withManagedCursorResult :: IO (Ptr (TCursor a)) -> IO (Cursor a)-withManagedCursorResult io-  = do p      <- io-       if (wxCursor_IsStatic p) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromCursor p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromCursor :: Ptr (TCursor a) -> IO (ManagedPtr (TCursor a))-foreign import ccall wxCursor_IsStatic :: Ptr (TCursor a) -> Bool--withManagedFontResult :: IO (Ptr (TFont a)) -> IO (Font a)-withManagedFontResult io-  = do p      <- io-       if (wxFont_IsStatic p) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromFont p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromFont :: Ptr (TFont a) -> IO (ManagedPtr (TFont a))-foreign import ccall wxFont_IsStatic :: Ptr (TFont a) -> Bool--withManagedPenResult :: IO (Ptr (TPen a)) -> IO (Pen a)-withManagedPenResult io-  = do p      <- io-       if (wxPen_IsStatic p) -        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromPen p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromPen :: Ptr (TPen a) -> IO (ManagedPtr (TPen a))-foreign import ccall wxPen_IsStatic :: Ptr (TPen a) -> Bool----withRefBitmap :: (Ptr (TBitmap a) -> IO ()) -> IO (Bitmap a)-withRefBitmap f-  = withManagedBitmapResult $ assignRefPtr wxBitmap_Create  f-foreign import ccall "wxBitmap_CreateDefault" wxBitmap_Create :: IO (Ptr (TBitmap a))--withRefCursor :: (Ptr (TCursor a) -> IO ()) -> IO (Cursor a)-withRefCursor f-  = withManagedCursorResult $ assignRefPtr (wx_Cursor_CreateFromStock 1)  f-foreign import ccall "Cursor_CreateFromStock" wx_Cursor_CreateFromStock :: CInt -> IO (Ptr (TCursor a))--withRefIcon :: (Ptr (TIcon a) -> IO ()) -> IO (Icon a)-withRefIcon f-  = withManagedIconResult $ assignRefPtr wxIcon_Create  f-foreign import ccall "wxIcon_CreateDefault" wxIcon_Create :: IO (Ptr (TIcon a))--withRefImage :: (Ptr (TImage a) -> IO ()) -> IO (Image a)-withRefImage f-  = assignRef wxImage_Create  f-foreign import ccall "wxImage_CreateDefault" wxImage_Create :: IO (Ptr (TImage a))--withRefFont :: (Ptr (TFont a) -> IO ()) -> IO (Font a)-withRefFont f-  = withManagedFontResult $ assignRefPtr wxFont_Create  f-foreign import ccall "wxFont_CreateDefault" wxFont_Create :: IO (Ptr (TFont a))---withRefPen :: (Ptr (TPen a) -> IO ()) -> IO (Pen a)-withRefPen f-  = withManagedPenResult $ assignRefPtr wxPen_Create  f-foreign import ccall "wxPen_CreateDefault" wxPen_Create :: IO (Ptr (TPen a))---withRefBrush :: (Ptr (TBrush a) -> IO ()) -> IO (Brush a)-withRefBrush f-  = withManagedBrushResult $ assignRefPtr wxBrush_Create  f-foreign import ccall "wxBrush_CreateDefault" wxBrush_Create :: IO (Ptr (TBrush a))--withRefFontData :: (Ptr (TFontData a) -> IO ()) -> IO (FontData a)-withRefFontData f-  = assignRef wxFontData_Create  f-foreign import ccall "wxFontData_Create" wxFontData_Create :: IO (Ptr (TFontData a))--withRefListItem :: (Ptr (TListItem a) -> IO ()) -> IO (ListItem a)-withRefListItem f-  = assignRef wxListItem_Create  f-foreign import ccall "wxListItem_Create" wxListItem_Create :: IO (Ptr (TListItem a))--withRefPrintData :: (Ptr (TPrintData a) -> IO ()) -> IO (PrintData a)-withRefPrintData f-  = assignRef wxPrintData_Create  f-foreign import ccall "wxPrintData_Create" wxPrintData_Create :: IO (Ptr (TPrintData a))--withRefPrintDialogData :: (Ptr (TPrintDialogData a) -> IO ()) -> IO (PrintDialogData a)-withRefPrintDialogData f-  = assignRef wxPrintDialogData_Create  f-foreign import ccall "wxPrintDialogData_CreateDefault" wxPrintDialogData_Create :: IO (Ptr (TPrintDialogData a))--withRefPageSetupDialogData :: (Ptr (TPageSetupDialogData a) -> IO ()) -> IO (PageSetupDialogData a)-withRefPageSetupDialogData f-  = assignRef wxPageSetupDialogData_Create  f-foreign import ccall "wxPageSetupDialogData_Create" wxPageSetupDialogData_Create :: IO (Ptr (TPageSetupDialogData a))---withManagedDateTimeResult :: IO (Ptr (TDateTime a)) -> IO (DateTime a)-withManagedDateTimeResult io-  = do p  <- io-       if (p==nullPtr)-        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromDateTime p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromDateTime :: Ptr (TDateTime a) -> IO (ManagedPtr (TDateTime a))---withRefDateTime :: (Ptr (TDateTime a) -> IO ()) -> IO (DateTime a)-withRefDateTime f-  = withManagedDateTimeResult $ assignRefPtr wxDateTime_Create  f-foreign import ccall "wxDateTime_Create" wxDateTime_Create :: IO (Ptr (TDateTime a))---withManagedGridCellCoordsArrayResult :: IO (Ptr (TGridCellCoordsArray a)) -> IO (GridCellCoordsArray a)-withManagedGridCellCoordsArrayResult io-  = do p  <- io-       if (p==nullPtr)-        then return (objectFromPtr p)-        else do mp <- wxManagedPtr_CreateFromGridCellCoordsArray p-                objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromGridCellCoordsArray :: Ptr (TGridCellCoordsArray a) -> IO (ManagedPtr (TGridCellCoordsArray a))--withRefGridCellCoordsArray :: (Ptr (TGridCellCoordsArray a) -> IO ()) -> IO (GridCellCoordsArray a)-withRefGridCellCoordsArray f-  = withManagedGridCellCoordsArrayResult $ assignRefPtr wxGridCellCoordsArray_Create  f-foreign import ccall "wxGridCellCoordsArray_Create" wxGridCellCoordsArray_Create :: IO (Ptr (TGridCellCoordsArray a))-----{------------------------------------------------------------------------------------------  Tree items------------------------------------------------------------------------------------------}--- | Identifies tree items. Note: Replaces the @TreeItemId@ object and takes automatically--- care of allocation issues.-newtype TreeItem  = TreeItem IntPtr-                  deriving (Eq,Show,Read)---- | Invalid tree item.-treeItemInvalid :: TreeItem-treeItemInvalid   = TreeItem 0---- | Is a tree item ok? (i.e. not invalid).-treeItemIsOk :: TreeItem -> Bool-treeItemIsOk (TreeItem val)-  = (val /= 0)--treeItemFromInt :: IntPtr -> TreeItem-treeItemFromInt i-  = TreeItem i--withRefTreeItemId :: (Ptr (TTreeItemId ()) -> IO ()) -> IO TreeItem-withRefTreeItemId f-  = do item <- assignRefPtr treeItemIdCreate f-       val  <- treeItemIdGetValue item-       treeItemIdDelete item-       return (TreeItem (fromCIntPtr val))--withTreeItemIdRef :: String -> TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b-withTreeItemIdRef msg t f-  = withTreeItemIdPtr t $ \p -> withValidPtr msg p f--withTreeItemIdPtr :: TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b-withTreeItemIdPtr (TreeItem val) f -  = do item <- treeItemIdCreateFromValue (toCIntPtr val)-       x    <- f item-       treeItemIdDelete item-       return x--withManagedTreeItemIdResult :: IO (Ptr (TTreeItemId a)) -> IO TreeItem -withManagedTreeItemIdResult io-  = do item <- io-       val  <- treeItemIdGetValue item-       treeItemIdDelete item-       return (TreeItem (fromCIntPtr val))--foreign import ccall "wxTreeItemId_Create" treeItemIdCreate :: IO (Ptr (TTreeItemId a))-foreign import ccall "wxTreeItemId_GetValue" treeItemIdGetValue :: Ptr (TTreeItemId a) -> IO CIntPtr-foreign import ccall "wxTreeItemId_CreateFromValue" treeItemIdCreateFromValue :: CIntPtr -> IO (Ptr (TTreeItemId a))-foreign import ccall "wxTreeItemId_Delete" treeItemIdDelete :: Ptr (TTreeItemId a) -> IO ()--{------------------------------------------------------------------------------------------  String------------------------------------------------------------------------------------------}-{---- | A @wxString@ object.-type WxStringObject a   = Ptr (CWxStringObject a)-type TWxStringObject a  = CWxStringObject a-data CWxStringObject a  = CWxStringObject--}---- FIXME: I am blithely changing these over to use CWString instead of String--- whereas in the rest of the code, I actually make a new version of the fns-withStringRef :: String -> String -> (Ptr (TWxString s) -> IO a) -> IO a-withStringRef msg s f-  = withStringPtr s $ \p -> withValidPtr msg p f--withStringPtr :: String -> (Ptr (TWxString s) -> IO a) -> IO a-withStringPtr s f-  = withCWString s $ \cstr ->-    bracket (wxString_Create cstr)-            (wxString_Delete)-            f--withManagedStringResult :: IO (Ptr (TWxString a)) -> IO String-withManagedStringResult io-  = do wxs <- io-       len <- wxString_Length wxs-       s   <- if (len<=0)-                then return ""-                else withCWString (replicate (fromCInt len) ' ') $ \cstr ->-                     do wxString_GetString wxs cstr-                        peekCWStringLen (cstr, fromCInt len)-       wxString_Delete wxs-       return s---foreign import ccall wxString_Create    :: Ptr CWchar -> IO (Ptr (TWxString a))-foreign import ccall wxString_CreateLen :: Ptr CWchar -> CInt -> IO (Ptr (TWxString a))-foreign import ccall wxString_Delete    :: Ptr (TWxString a) -> IO ()-foreign import ccall wxString_GetString :: Ptr (TWxString a) -> Ptr CWchar -> IO CInt-foreign import ccall wxString_Length    :: Ptr (TWxString a) -> IO CInt---{------------------------------------------------------------------------------------------  Color------------------------------------------------------------------------------------------}--- | An abstract data type to define colors.------   Note: Haddock 0.8 and 0.9 doesn't support GeneralizedNewtypeDeriving. So, This class---   doesn't have 'IArray' class's unboxed array instance now. If you want to use this type---   with unboxed array, you must write code like this.------ > {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, MultiParamTypeClasses #-}--- > import Graphics.UI.WXCore.WxcTypes--- > ...--- > deriving instance IArray UArray Color------   We can't derive 'MArray' class's unboxed array instance this way. This is a bad point---   of current 'MArray' class definition.----newtype Color = Color Word -              deriving (Eq, Typeable) -- , IArray UArray) --instance Show Color where-  showsPrec d c-    = showParen (d > 0) (showString "rgba(" . shows (colorRed   c) .-                          showChar   ','    . shows (colorGreen c) .-                          showChar   ','    . shows (colorBlue  c) .-                          showChar   ','    . shows (colorAlpha c) .-                          showChar   ')' )---- | Create a color from a red\/green\/blue triple.-colorRGB :: (Integral a) => a -> a -> a -> Color-colorRGB r g b = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. 255)---- | Create a color from a red\/green\/blue triple.-rgb :: (Integral a) => a -> a -> a -> Color-rgb r g b = colorRGB r g b---- | Create a color from a red\/green\/blue\/alpha quadruple.-colorRGBA :: (Integral a) => a -> a -> a -> a -> Color-colorRGBA r g b a = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. (fromIntegral a))---- | Create a color from a red\/green\/blue\/alpha quadruple.-rgba :: (Integral a) => a -> a -> a -> a -> Color-rgba r g b a = colorRGBA r g b a----- | Return an 'Int' where the three least significant bytes contain--- the red, green, and blue component of a color.-intFromColor :: Color -> Int-intFromColor rgb-  = let r = colorRed rgb-        g = colorGreen rgb-        b = colorBlue rgb-    in (shiftL (fromIntegral r) 16 .|. shiftL (fromIntegral g) 8 .|. b)---- | Set the color according to an rgb integer. (see 'rgbIntFromColor').-colorFromInt :: Int -> Color-colorFromInt rgb-  = let r = (shiftR rgb 16) .&. 0xFF-        g = (shiftR rgb 8) .&. 0xFF-        b = rgb .&. 0xFF-    in colorRGB r g b---- | Return an 'Num' class's numeric representation where the three--- least significant the red, green, and blue component of a color.-fromColor :: (Num a) => Color -> a-fromColor (Color rgb)-  = fromIntegral rgb---- | Set the color according to 'Integral' class's numeric representation.--- (see 'rgbaIntFromColor').-toColor :: (Integral a) => a -> Color-toColor-  = Color . fromIntegral---- marshalling 1--- | Returns a red color component-colorRed   :: (Num a) => Color -> a-colorRed   (Color rgba) = fromIntegral ((shiftR rgba 24) .&. 0xFF)---- | Returns a green color component-colorGreen :: (Num a) => Color -> a-colorGreen (Color rgba) = fromIntegral ((shiftR rgba 16) .&. 0xFF)---- | Returns a blue color component-colorBlue  :: (Num a) => Color -> a-colorBlue  (Color rgba) = fromIntegral ((shiftR rgba 8) .&. 0xFF)---- | Returns a alpha channel component-colorAlpha  :: (Num a) => Color -> a-colorAlpha  (Color rgba) = fromIntegral (rgba .&. 0xFF)----- | This is an illegal color, corresponding to @nullColour@.-colorNull :: Color-colorNull-  = Color (-1)--{-# DEPRECATED colorOk "Use colorIsOk instead" #-}--- | deprecated: use 'colorIsOk' instead.-colorOk :: Color -> Bool-colorOk = colorIsOk---- | Check of a color is valid (@Colour::IsOk@)-colorIsOk :: Color -> Bool-colorIsOk = (/= colorNull)----- marshalling 2-{--type Colour a     = Object (CColour a)-type ColourPtr a  = Ptr (CColour a)-data CColour a    = CColour--}--withRefColour :: (Ptr (TColour a) -> IO ()) -> IO Color-withRefColour f-  = withManagedColourResult $-    assignRefPtr colourCreate f--withManagedColourResult :: IO (Ptr (TColour a)) -> IO Color-withManagedColourResult io-  = do pcolour <- io-       color <- do ok <- colourIsOk pcolour-                   if (ok==0)-                    then return colorNull-                    else do rgba <- colourGetUnsignedInt pcolour-                            return (toColor rgba)-       colourSafeDelete pcolour-       return color---withColourRef :: String -> Color -> (Ptr (TColour a) -> IO b) -> IO b-withColourRef msg c f-  = withColourPtr c $ \p -> withValidPtr msg p f--withColourPtr :: Color -> (Ptr (TColour a) -> IO b) -> IO b-withColourPtr c f-  = do pcolour <- colourCreateFromUnsignedInt (fromColor c)-       x <- f pcolour-       colourSafeDelete pcolour-       return x--colourFromColor :: Color -> IO (Colour ())-colourFromColor c-  = if (colorOk c)-     then do p <- colourCreateFromUnsignedInt (fromColor c)-             if (colourIsStatic p)-              then return (objectFromPtr p)-              else do mp <- wxManagedPtr_CreateFromColour p-                      objectFromManagedPtr mp-     else withObjectResult colourNull-          --colorFromColour :: Colour a -> IO Color-colorFromColour c-  = withObjectRef "colorFromColour" c $ \pcolour ->-    do ok <- colourIsOk pcolour-       if (ok==0)-        then return colorNull-        else do rgba <- colourGetUnsignedInt pcolour-                return (toColor rgba)---foreign import ccall "wxColour_CreateEmpty" colourCreate    :: IO (Ptr (TColour a))-foreign import ccall "wxColour_CreateFromInt" colourCreateFromInt :: CInt -> IO (Ptr (TColour a))-foreign import ccall "wxColour_GetInt" colourGetInt               :: Ptr (TColour a) -> IO CInt-foreign import ccall "wxColour_CreateFromUnsignedInt" colourCreateFromUnsignedInt :: Word -> IO (Ptr (TColour a))-foreign import ccall "wxColour_GetUnsignedInt" colourGetUnsignedInt       :: Ptr (TColour a) -> IO Word-foreign import ccall "wxColour_SafeDelete" colourSafeDelete   :: Ptr (TColour a) -> IO ()-foreign import ccall "wxColour_IsStatic" colourIsStatic   :: Ptr (TColour a) -> Bool-foreign import ccall "wxColour_IsOk"    colourIsOk   :: Ptr (TColour a) -> IO CInt-foreign import ccall "Null_Colour"    colourNull :: IO (Ptr (TColour a))-foreign import ccall wxManagedPtr_CreateFromColour :: Ptr (TColour a) -> IO (ManagedPtr (TColour a))+{-# LANGUAGE CPP, ForeignFunctionInterface, DeriveDataTypeable #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+-----------------------------------------------------------------------------------------
+{-|	Module      :  WxcTypes
+	Copyright   :  (c) Daan Leijen 2003, 2004
+	License     :  wxWindows
+
+	Maintainer  :  wxhaskell-devel@lists.sourceforge.net
+	Stability   :  provisional
+	Portability :  portable
+
+Basic types and marshalling code for the wxWidgets C library.
+-}
+-----------------------------------------------------------------------------------------
+module Graphics.UI.WXCore.WxcTypes(
+            -- * Object types
+              Object, objectNull, objectIsNull, objectCast, objectIsManaged
+            , objectDelete
+            , objectFromPtr, managedObjectFromPtr
+            , withObjectPtr, withObjectRef
+            , withObjectResult, withManagedObjectResult
+            , objectFinalize, objectNoFinalize
+            
+--            , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch
+
+            -- * Type synonyms
+            , Id
+            , Style
+            , EventId
+
+            -- * Basic types
+            , fromBool, toBool
+
+            -- ** Point
+            , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull
+
+            -- ** Size
+            , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull
+
+            -- ** Vector
+            , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull
+
+            -- ** Rectangle
+            , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)
+            , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight
+            , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty
+
+            -- ** Color
+            , Color(..), rgb, colorRGB, rgba, colorRGBA, colorRed, colorGreen, colorBlue, colorAlpha
+            , intFromColor, colorFromInt, fromColor, toColor, colorOk, colorIsOk
+
+            -- * Marshalling
+            -- ** Basic types
+            , withPointResult, withWxPointResult, toCIntPointX, toCIntPointY, fromCPoint, withCPoint
+            , withPointDoubleResult, toCDoublePointX, toCDoublePointY, fromCPointDouble, withCPointDouble
+            , withSizeResult, withWxSizeResult, toCIntSizeW, toCIntSizeH, fromCSize, withCSize
+            , withSizeDoubleResult, toCDoubleSizeW, toCDoubleSizeH, fromCSizeDouble, withCSizeDouble
+            , withVectorResult, withWxVectorResult, toCIntVectorX, toCIntVectorY, fromCVector, withCVector
+            , withVectorDoubleResult, toCDoubleVectorX, toCDoubleVectorY, fromCVectorDouble, withCVectorDouble
+            , withRectResult, withWxRectResult, withWxRectPtr, toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH, fromCRect, withCRect
+            , withRectDoubleResult, toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH, fromCRectDouble, withCRectDouble
+            , withArray, withArrayString, withArrayWString, withArrayInt, withArrayIntPtr, withArrayObject
+            , withArrayIntResult, withArrayIntPtrResult, withArrayStringResult, withArrayWStringResult, withArrayObjectResult
+
+            , colourFromColor, colorFromColour
+            , colourCreate, colourSafeDelete -- , colourCreateRGB, colourRed, colourGreen, colourBlue colourAlpha
+
+  
+            -- ** Managed object types
+
+            -- , managedAddFinalizer
+            , TreeItem, treeItemInvalid, treeItemIsOk, treeItemFromInt
+            , withRefTreeItemId, withTreeItemIdPtr, withTreeItemIdRef, withManagedTreeItemIdResult
+            , withStringRef, withStringPtr, withManagedStringResult
+            , withRefColour, withColourRef, withColourPtr, withManagedColourResult
+            , withRefBitmap, withManagedBitmapResult
+            , withRefCursor, withManagedCursorResult
+            , withRefIcon, withManagedIconResult
+            , withRefPen, withManagedPenResult
+            , withRefBrush, withManagedBrushResult
+            , withRefFont, withManagedFontResult
+            , withRefImage
+            , withRefListItem
+            , withRefFontData
+            , withRefPrintData
+            , withRefPageSetupDialogData
+            , withRefPrintDialogData
+            , withRefDateTime, withManagedDateTimeResult
+            , withRefGridCellCoordsArray, withManagedGridCellCoordsArrayResult
+
+
+            -- ** Primitive types
+            -- *** CString
+            , CString(..), withCString, withStringResult
+            , CWString(..), withCWString, withWStringResult
+            -- *** ByteString
+            , withByteStringResult, withLazyByteStringResult
+            -- *** CInt
+            , CInt(..), toCInt, fromCInt, withIntResult
+            -- *** IntPtr
+            , IntPtr(..)
+            -- *** CIntPtr
+            , CIntPtr(..), toCIntPtr, fromCIntPtr, withIntPtrResult
+            -- *** Word
+            , Word(..)
+            -- *** 8 bit Word
+            , Word8(..)
+            -- *** 64 bit Integer
+            , Int64(..)
+            -- *** CDouble
+            , CDouble(..), toCDouble, fromCDouble, withDoubleResult
+            -- *** CChar
+            , CChar(..), toCChar, fromCChar, withCharResult
+            , CWchar(..), toCWchar
+            -- *** CBool
+            , CBool(..), toCBool, fromCBool, withBoolResult
+            -- ** Pointers
+            , Ptr(..), ptrNull, ptrIsNull, ptrCast, ForeignPtr, FunPtr, toCFunPtr
+            ) where
+
+import Control.Exception 
+import System.IO.Unsafe( unsafePerformIO )
+import Foreign.C
+import Foreign.Ptr
+import Foreign.Storable
+import Foreign.Marshal.Alloc
+import Foreign.Marshal.Array
+import Foreign.Marshal.Utils (fromBool, toBool)
+
+{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"
+   See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}
+import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)
+import Foreign.Concurrent
+
+import Data.Array.MArray (MArray)
+import Data.Array.Unboxed (IArray, UArray)
+import Data.Bits( shiftL, shiftR, (.&.), (.|.) )
+
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as LB
+import qualified Data.ByteString.Char8 as BC (pack)
+import qualified Data.ByteString.Lazy.Char8 as LBC (pack)
+
+{- note: this is just for instances for the WX library and not necessary for WXCore -}
+import Data.Dynamic
+
+import Data.Int
+import Data.Word
+import Debug.Trace (traceIO)
+
+import Graphics.UI.WXCore.WxcObject
+import Graphics.UI.WXCore.WxcClassTypes
+
+{-----------------------------------------------------------------------------------------
+    Objects
+-----------------------------------------------------------------------------------------}
+-- | An @Id@ is used to identify objects during event handling.
+type Id = Int
+
+-- | An @EventId@ is identifies specific events.
+type EventId = Int
+
+-- | A @Style@ is normally used as a flag mask to specify some window style
+type Style = Int
+
+
+-- | Delete a wxObject, works for managed and unmanaged objects.
+objectDelete :: WxObject a -> IO ()
+objectDelete obj
+  = if objectIsManaged obj
+     then objectFinalize obj
+     else withObjectPtr obj $ \p ->
+          wxObject_SafeDelete p
+                                    
+-- | Create a managed object that will be deleted using |wxObject_SafeDelete|.
+managedObjectFromPtr :: Ptr (TWxObject a) -> IO (WxObject a)
+managedObjectFromPtr p 
+  = do mp <- wxManagedPtr_CreateFromObject p
+       objectFromManagedPtr mp
+
+-- | Create a managed object that will be deleted using |wxObject_SafeDelete|.
+withManagedObjectResult :: IO (Ptr (TWxObject a)) -> IO (WxObject a)
+withManagedObjectResult io
+  = do p <- io
+       managedObjectFromPtr p
+
+-- | Return an unmanaged object.
+withObjectResult :: IO (Ptr a) -> IO (Object a)
+withObjectResult io
+  = do p <- io
+       return (objectFromPtr p)
+
+-- | Extract the object pointer and raise an exception if @NULL@.
+-- Otherwise continue with the valid pointer.
+withObjectRef :: String -> Object a -> (Ptr a -> IO b) -> IO b
+withObjectRef msg obj f
+  = withObjectPtr obj $ \p -> 
+    withValidPtr msg p f
+
+-- | Execute the continuation when the pointer is not null and
+-- raise an error otherwise.
+withValidPtr :: String -> Ptr a -> (Ptr a -> IO b) -> IO b
+withValidPtr msg p f
+  = if (p == nullPtr)
+     then ioError (userError ("wxHaskell: NULL object" ++ (if null msg then "" else ": " ++ msg)))
+     else f p
+
+
+foreign import ccall wxManagedPtr_CreateFromObject :: Ptr (TWxObject a) -> IO (ManagedPtr (TWxObject a))
+foreign import ccall wxObject_SafeDelete           :: Ptr (TWxObject a) -> IO ()
+
+
+{-----------------------------------------------------------------------------------------
+  Point
+-----------------------------------------------------------------------------------------}
+--- | Define Point type synonym for backward compatibility.
+type Point = Point2 Int
+
+-- | A point has an x and y coordinate. Coordinates are normally relative to the
+-- upper-left corner of their view frame, where a positive x goes to the right and
+-- a positive y to the bottom of the view.
+data (Num a) => Point2 a = Point
+        { pointX :: !a -- ^ x component of a point.
+        , pointY :: !a -- ^ y component of a point.
+        }
+        deriving (Eq,Show,Read,Typeable)
+
+-- | Construct a point.
+point :: (Num a) => a -> a -> Point2 a
+point x y  = Point x y
+
+-- | Shorter function to construct a point.
+pt :: (Num a) => a -> a -> Point2 a
+pt x y  = Point x y
+
+pointFromVec :: (Num a) => Vector -> Point2 a
+pointFromVec (Vector x y)
+  = Point (fromIntegral x) (fromIntegral y)
+
+pointFromSize :: (Num a) => Size -> Point2 a
+pointFromSize (Size w h)
+  = Point (fromIntegral w) (fromIntegral h)
+
+-- | Point at the origin.
+pointZero :: (Num a) => Point2 a
+pointZero
+  = Point 0 0
+
+-- | A `null' point is not a legal point (x and y are -1) and can be used for some
+-- wxWidgets functions to select a default point.
+pointNull :: (Num a) => Point2 a
+pointNull
+  = Point (-1) (-1)
+
+-- marshalling
+withCPoint :: Point2 Int -> (CInt -> CInt -> IO a) -> IO a
+withCPoint (Point x y) f
+  = f (toCInt x) (toCInt y)
+
+withPointResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO (Point2 Int)
+withPointResult f
+  = alloca $ \px ->
+    alloca $ \py ->
+    do f px py
+       x <- peek px
+       y <- peek py
+       return (fromCPoint x y)
+
+toCIntPointX, toCIntPointY :: Point2 Int -> CInt
+toCIntPointX (Point x y)  = toCInt x
+toCIntPointY (Point x y)  = toCInt y
+
+fromCPoint :: CInt -> CInt -> Point2 Int
+fromCPoint x y
+  = Point (fromCInt x) (fromCInt y)
+
+withCPointDouble :: Point2 Double -> (CDouble -> CDouble -> IO a) -> IO a
+withCPointDouble (Point x y) f
+  = f (toCDouble x) (toCDouble y)
+
+withPointDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Point2 Double)
+withPointDoubleResult f
+  = alloca $ \px ->
+    alloca $ \py ->
+    do f px py
+       x <- peek px
+       y <- peek py
+       return (fromCPointDouble x y)
+
+toCDoublePointX, toCDoublePointY :: Point2 Double -> CDouble
+toCDoublePointX (Point x y)  = toCDouble x
+toCDoublePointY (Point x y)  = toCDouble y
+
+fromCPointDouble :: CDouble -> CDouble -> Point2 Double
+fromCPointDouble x y
+  = Point (fromCDouble x) (fromCDouble y)
+
+{-
+-- | A @wxPoint@ object.
+type WxPointObject a   = Ptr (CWxPointObject a)
+type TWxPointObject a  = CWxPointObject a
+data CWxPointObject a  = CWxPointObject
+-}
+
+withWxPointResult :: IO (Ptr (TWxPoint a)) -> IO (Point2 Int)
+withWxPointResult io
+  = do pt <- io
+       x  <- wxPoint_GetX pt
+       y  <- wxPoint_GetY pt
+       wxPoint_Delete pt
+       return (fromCPoint x y)
+
+foreign import ccall wxPoint_Delete :: Ptr (TWxPoint a) -> IO ()
+foreign import ccall wxPoint_GetX   :: Ptr (TWxPoint a) -> IO CInt
+foreign import ccall wxPoint_GetY   :: Ptr (TWxPoint a) -> IO CInt
+
+
+{-----------------------------------------------------------------------------------------
+  Size
+-----------------------------------------------------------------------------------------}
+--- | Define Point type synonym for backward compatibility.
+type Size = Size2D Int
+
+-- | A @Size@ has a width and height.
+data (Num a) => Size2D a = Size
+        { sizeW :: !a -- ^ the width  of a size
+        , sizeH :: !a -- ^ the height of a size
+        }
+        deriving (Eq,Show,Typeable)
+
+-- | Construct a size from a width and height.
+size :: (Num a) => a -> a -> Size2D a
+size w h
+  = Size w h
+
+-- | Short function to construct a size
+sz :: (Num a) => a -> a -> Size2D a
+sz w h
+  = Size w h
+
+sizeFromPoint :: (Num a) => Point2 a -> Size2D a
+sizeFromPoint (Point x y)
+  = Size x y
+
+sizeFromVec   :: (Num a) => Vector2 a -> Size2D a
+sizeFromVec (Vector x y)
+  = Size x y
+
+sizeZero :: (Num a) => Size2D a
+sizeZero
+  = Size 0 0
+
+-- | A `null' size is not a legal size (width and height are -1) and can be used for some
+-- wxWidgets functions to select a default size.
+sizeNull :: (Num a) => Size2D a
+sizeNull
+  = Size (-1) (-1)
+
+-- marshalling
+withCSize :: Size -> (CInt -> CInt -> IO a) -> IO a
+withCSize (Size w h) f
+  = f (toCInt w) (toCInt h)
+
+withSizeResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Size
+withSizeResult f
+  = alloca $ \cw ->
+    alloca $ \ch ->
+    do f cw ch
+       w <- peek cw
+       h <- peek ch
+       return (fromCSize w h)
+
+fromCSize :: CInt -> CInt -> Size
+fromCSize w h
+  = Size (fromCInt w) (fromCInt h)
+
+toCIntSizeW, toCIntSizeH :: Size -> CInt
+toCIntSizeW (Size w h)  = toCInt w
+toCIntSizeH (Size w h)  = toCInt h
+
+withCSizeDouble :: Size2D Double -> (CDouble -> CDouble -> IO a) -> IO a
+withCSizeDouble (Size w h) f
+  = f (toCDouble w) (toCDouble h)
+
+withSizeDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Size2D Double)
+withSizeDoubleResult f
+  = alloca $ \cw ->
+    alloca $ \ch ->
+    do f cw ch
+       w <- peek cw
+       h <- peek ch
+       return (fromCSizeDouble w h)
+
+fromCSizeDouble :: CDouble -> CDouble -> Size2D Double
+fromCSizeDouble w h
+  = Size (fromCDouble w) (fromCDouble h)
+
+toCDoubleSizeW, toCDoubleSizeH :: Size2D Double -> CDouble
+toCDoubleSizeW (Size w h)  = toCDouble w
+toCDoubleSizeH (Size w h)  = toCDouble h
+
+{-
+-- | A @wxSize@ object.
+type WxSizeObject a   = Ptr (CWxSizeObject a)
+type TWxSizeObject a  = CWxSizeObject a
+data CWxSizeObject a  = CWxSizeObject
+-}
+
+withWxSizeResult :: IO (Ptr (TWxSize a)) -> IO Size
+withWxSizeResult io
+  = do sz <- io
+       w  <- wxSize_GetWidth  sz
+       h  <- wxSize_GetHeight sz
+       wxSize_Delete sz
+       return (fromCSize w h)
+
+foreign import ccall wxSize_Delete    :: Ptr (TWxSize a) -> IO ()
+foreign import ccall wxSize_GetWidth  :: Ptr (TWxSize a) -> IO CInt
+foreign import ccall wxSize_GetHeight :: Ptr (TWxSize a) -> IO CInt
+
+
+{-----------------------------------------------------------------------------------------
+  Vector
+-----------------------------------------------------------------------------------------}
+--- | Define Point type synonym for backward compatibility.
+type Vector = Vector2 Int
+
+-- | A vector with an x and y delta.
+data (Num a) => Vector2 a = Vector
+        { vecX :: !a -- ^ delta-x component of a vector
+        , vecY :: !a -- ^ delta-y component of a vector
+        }
+        deriving (Eq,Show,Read,Typeable)
+
+-- | Construct a vector.
+vector :: (Num a) => a -> a -> Vector2 a
+vector dx dy  = Vector dx dy
+
+-- | Short function to construct a vector.
+vec :: (Num a) => a -> a -> Vector2 a
+vec dx dy  = Vector dx dy
+
+-- | A zero vector
+vecZero :: (Num a) => Vector2 a
+vecZero
+  = Vector 0 0
+
+-- | A `null' vector has a delta x and y of -1 and can be used for some
+-- wxWidgets functions to select a default vector.
+vecNull :: (Num a) => Vector2 a
+vecNull
+  = Vector (-1) (-1)
+
+vecFromPoint :: (Num a) => Point2 a -> Vector2 a
+vecFromPoint (Point x y)
+  = Vector x y
+
+vecFromSize :: Size -> Vector
+vecFromSize (Size w h)
+  = Vector w h
+
+
+-- marshalling
+withCVector :: Vector -> (CInt -> CInt -> IO a) -> IO a
+withCVector (Vector x y) f
+  = f (toCInt x) (toCInt y)
+
+withVectorResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Vector
+withVectorResult f
+  = alloca $ \px ->
+    alloca $ \py ->
+    do f px py
+       x <- peek px
+       y <- peek py
+       return (fromCVector x y)
+
+toCIntVectorX, toCIntVectorY :: Vector -> CInt
+toCIntVectorX (Vector x y)  = toCInt x
+toCIntVectorY (Vector x y)  = toCInt y
+
+fromCVector :: CInt -> CInt -> Vector
+fromCVector x y
+  = Vector (fromCInt x) (fromCInt y)
+
+withCVectorDouble :: Vector2 Double -> (CDouble -> CDouble -> IO a) -> IO a
+withCVectorDouble (Vector x y) f
+  = f (toCDouble x) (toCDouble y)
+
+withVectorDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Vector2 Double)
+withVectorDoubleResult f
+  = alloca $ \px ->
+    alloca $ \py ->
+    do f px py
+       x <- peek px
+       y <- peek py
+       return (fromCVectorDouble x y)
+
+toCDoubleVectorX, toCDoubleVectorY :: Vector2 Double -> CDouble
+toCDoubleVectorX (Vector x y)  = toCDouble x
+toCDoubleVectorY (Vector x y)  = toCDouble y
+
+fromCVectorDouble :: CDouble -> CDouble -> Vector2 Double
+fromCVectorDouble x y
+  = Vector (fromCDouble x) (fromCDouble y)
+
+
+withWxVectorResult :: IO (Ptr (TWxPoint a)) -> IO Vector
+withWxVectorResult io
+  = do pt <- io
+       x  <- wxPoint_GetX pt
+       y  <- wxPoint_GetY pt
+       wxPoint_Delete pt
+       return (fromCVector x y)
+
+
+{-----------------------------------------------------------------------------------------
+  Rectangle
+-----------------------------------------------------------------------------------------}
+--- | Define Point type synonym for backward compatibility.
+type Rect = Rect2D Int
+
+-- | A rectangle is defined by the left x coordinate, the top y coordinate,
+-- the width and the height.
+data (Num a) => Rect2D a = Rect
+        { rectLeft   :: !a
+        , rectTop    :: !a
+        , rectWidth  :: !a
+        , rectHeight :: !a
+        }
+        deriving (Eq,Show,Read,Typeable)
+
+
+rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight :: (Num a) => Rect2D a -> Point2 a
+rectTopLeft     (Rect l t w h)  = Point l t
+rectTopRight    (Rect l t w h)  = Point (l+w) t
+rectBottomLeft  (Rect l t w h)  = Point l (t+h)
+rectBottomRight (Rect l t w h)  = Point (l+w) (t+h)
+
+rectBottom, rectRight :: (Num a) => Rect2D a -> a
+rectBottom (Rect x y w h)  = y + h
+rectRight  (Rect x y w h)  = x + w
+
+-- | Create a rectangle at a certain (upper-left) point with a certain size.
+rect :: (Num a) => Point2 a -> Size2D a -> Rect2D a
+rect (Point x y) (Size w h)
+  = Rect x y w h
+
+-- | Construct a (positive) rectangle between two (arbitrary) points.
+rectBetween :: (Num a, Ord a) => Point2 a -> Point2 a -> Rect2D a
+rectBetween (Point x0 y0) (Point x1 y1)
+  = Rect (min x0 x1) (min y0 y1) (abs (x1-x0)) (abs (y1-y0))
+
+-- | An empty rectangle at (0,0).
+rectZero :: (Num a) => Rect2D a
+rectZero
+  = Rect 0 0 0 0
+
+-- | An `null' rectangle is not a valid rectangle (@Rect -1 -1 -1 -1@) but can
+-- used for some wxWidgets functions to select a default rectangle. (i.e. 'frameCreate').
+rectNull :: (Num a) => Rect2D a
+rectNull
+  = Rect (-1) (-1) (-1) (-1)
+
+-- | Get the size of a rectangle.
+rectSize :: (Num a) => Rect2D a -> Size2D a
+rectSize (Rect l t w h)
+  = Size w h
+
+-- | Create a rectangle of a certain size with the upper-left corner at ('pt' 0 0).
+rectFromSize :: (Num a) => Size2D a -> Rect2D a
+rectFromSize (Size w h)
+  = Rect 0 0 w h
+
+rectIsEmpty :: (Num a, Eq a) => Rect2D a -> Bool
+rectIsEmpty (Rect l t w h)
+  = (w==0 && h==0)
+
+
+
+-- marshalling 1
+withCRect :: Rect -> (CInt -> CInt -> CInt -> CInt -> IO a) -> IO a
+withCRect (Rect x0 y0 x1 y1) f
+  = f (toCInt (x0)) (toCInt (y0)) (toCInt (x1)) (toCInt (y1))
+
+withRectResult :: (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()) -> IO Rect
+withRectResult f
+  = alloca $ \cx ->
+    alloca $ \cy ->
+    alloca $ \cw ->
+    alloca $ \ch ->
+    do f cx cy cw ch
+       x <- peek cx
+       y <- peek cy
+       w <- peek cw
+       h <- peek ch
+       return (fromCRect x y w h)
+
+fromCRect :: CInt -> CInt -> CInt -> CInt -> Rect
+fromCRect x y w h
+  = Rect (fromCInt x) (fromCInt y) (fromCInt w) (fromCInt h)
+
+toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH :: Rect -> CInt
+toCIntRectX (Rect x y w h)  = toCInt x
+toCIntRectY (Rect x y w h)  = toCInt y
+toCIntRectW (Rect x y w h)  = toCInt w
+toCIntRectH (Rect x y w h)  = toCInt h
+
+withCRectDouble :: Rect2D Double -> (CDouble -> CDouble -> CDouble -> CDouble -> IO a) -> IO a
+withCRectDouble (Rect x0 y0 x1 y1) f
+  = f (toCDouble (x0)) (toCDouble (y0)) (toCDouble (x1)) (toCDouble (y1))
+
+withRectDoubleResult :: (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Rect2D Double)
+withRectDoubleResult f
+  = alloca $ \cx ->
+    alloca $ \cy ->
+    alloca $ \cw ->
+    alloca $ \ch ->
+    do f cx cy cw ch
+       x <- peek cx
+       y <- peek cy
+       w <- peek cw
+       h <- peek ch
+       return (fromCRectDouble x y w h)
+
+fromCRectDouble :: CDouble -> CDouble -> CDouble -> CDouble -> Rect2D Double
+fromCRectDouble x y w h
+  = Rect (fromCDouble x) (fromCDouble y) (fromCDouble w) (fromCDouble h)
+
+toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH :: Rect2D Double -> CDouble
+toCDoubleRectX (Rect x y w h)  = toCDouble x
+toCDoubleRectY (Rect x y w h)  = toCDouble y
+toCDoubleRectW (Rect x y w h)  = toCDouble w
+toCDoubleRectH (Rect x y w h)  = toCDouble h
+
+-- marshalling 2
+{-
+-- | A @wxRect@ object.
+type WxRectObject a   = Ptr (CWxRectObject a)
+type TWxRectObject a  = CWxRectObject a
+data CWxRectObject a  = CWxRectObject
+-}
+
+withWxRectRef :: String -> Rect -> (Ptr (TWxRect r) -> IO a) -> IO a
+withWxRectRef msg r f
+  = withWxRectPtr r $ \p -> withValidPtr msg p f
+
+withWxRectPtr :: Rect -> (Ptr (TWxRect r) -> IO a) -> IO a
+withWxRectPtr r f
+  = bracket (withCRect r wxRect_Create)
+            (wxRect_Delete)
+            f
+
+withWxRectResult :: IO (Ptr (TWxRect a)) -> IO Rect
+withWxRectResult io
+  = do rt <- io
+       x  <- wxRect_GetX  rt
+       y  <- wxRect_GetY  rt
+       w  <- wxRect_GetWidth  rt
+       h  <- wxRect_GetHeight rt
+       wxRect_Delete rt
+       return (fromCRect x y w h)
+
+foreign import ccall wxRect_Create    :: CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect a))
+foreign import ccall wxRect_Delete    :: Ptr (TWxRect a) -> IO ()
+foreign import ccall wxRect_GetX      :: Ptr (TWxRect a) -> IO CInt
+foreign import ccall wxRect_GetY      :: Ptr (TWxRect a) -> IO CInt
+foreign import ccall wxRect_GetWidth  :: Ptr (TWxRect a) -> IO CInt
+foreign import ccall wxRect_GetHeight :: Ptr (TWxRect a) -> IO CInt
+
+
+{-----------------------------------------------------------------------------------------
+  CInt
+-----------------------------------------------------------------------------------------}
+withIntResult :: IO CInt -> IO Int
+withIntResult io
+  = do x <- io
+       return (fromCInt x)
+
+toCInt :: Int -> CInt
+toCInt i = fromIntegral i
+
+fromCInt :: CInt -> Int
+fromCInt ci
+  = fromIntegral ci
+
+{-----------------------------------------------------------------------------------------
+  CIntPtr
+-----------------------------------------------------------------------------------------}
+withIntPtrResult :: IO CIntPtr -> IO IntPtr
+withIntPtrResult io
+  = do x <- io
+       return (fromCIntPtr x)
+
+toCIntPtr :: IntPtr -> CIntPtr
+toCIntPtr i = fromIntegral i
+
+fromCIntPtr :: CIntPtr -> IntPtr
+fromCIntPtr ci
+  = fromIntegral ci
+
+{-----------------------------------------------------------------------------------------
+  CDouble
+-----------------------------------------------------------------------------------------}
+withDoubleResult :: IO CDouble -> IO Double
+withDoubleResult io
+  = do x <- io
+       return (fromCDouble x)
+
+toCDouble :: Double -> CDouble
+toCDouble d = realToFrac d
+
+fromCDouble :: CDouble -> Double
+fromCDouble cd
+  = realToFrac cd
+
+{-----------------------------------------------------------------------------------------
+  CBool
+-----------------------------------------------------------------------------------------}
+type CBool  = CInt
+
+toCBool :: Bool -> CBool
+toCBool = intToCBool . fromBool
+
+withBoolResult :: IO CBool -> IO Bool
+withBoolResult io
+  = do x <- io
+       return (fromCBool x)
+
+fromCBool :: CBool -> Bool
+fromCBool  = toBool . cboolToInt
+
+foreign import ccall "intToBool" intToCBool :: Int -> CBool
+foreign import ccall "boolToInt" cboolToInt :: CBool -> Int
+
+{-----------------------------------------------------------------------------------------
+  CString
+-----------------------------------------------------------------------------------------}
+withStringResult :: (Ptr CChar -> IO CInt) -> IO String
+withStringResult f
+  = do len <- f nullPtr
+       if (len<=0)
+        then return ""
+        else withCString (replicate (fromCInt len) ' ') $ \cstr ->
+             do f cstr
+                peekCStringLen (cstr,fromCInt len)
+
+withWStringResult :: (Ptr CWchar -> IO CInt) -> IO String
+withWStringResult f
+  = do len <- f nullPtr
+       if (len<=0)
+        then return ""
+        else withCWString (replicate (fromCInt len) ' ') $ \cstr ->
+             do f cstr
+                peekCWString cstr
+
+{-----------------------------------------------------------------------------------------
+  ByteString
+-----------------------------------------------------------------------------------------}
+-- TODO: replace this by more efficient implementation.
+-- e.g. use mmap when bytestring support mmap interface.
+withByteStringResult :: (Ptr CChar -> IO CInt) -> IO B.ByteString
+withByteStringResult f
+  = do len <- f nullPtr
+       if (len<=0)
+        then return $ BC.pack ""
+        else withCString (replicate (fromCInt len) ' ') $ \cstr ->
+             do f cstr
+                B.packCStringLen (cstr,fromCInt len)
+
+withLazyByteStringResult :: (Ptr CChar -> IO CInt) -> IO LB.ByteString
+withLazyByteStringResult f
+  = do str <- withStringResult f
+       return $ LBC.pack str
+
+{-----------------------------------------------------------------------------------------
+  Arrays
+-----------------------------------------------------------------------------------------}
+withArrayStringResult :: (Ptr (Ptr CChar) -> IO CInt) -> IO [String]
+withArrayStringResult f
+  = do clen <- f nullPtr
+       let len = fromCInt clen
+       if (len <= 0)
+        then return []
+        else allocaArray len $ \carr ->
+             do f carr
+                arr <- peekArray len carr
+                mapM peekCString arr
+
+-- FIXME: factorise with withArrayStringResult
+withArrayWStringResult :: (Ptr (Ptr CWchar) -> IO CInt) -> IO [String]
+withArrayWStringResult f
+  = do clen <- f nullPtr
+       let len = fromCInt clen
+       if (len <= 0)
+        then return []
+        else allocaArray len $ \carr ->
+             do f carr
+                arr <- peekArray len carr
+                mapM peekCWString arr
+
+
+withArrayIntResult :: (Ptr CInt -> IO CInt) -> IO [Int]
+withArrayIntResult f
+  = do clen <- f nullPtr
+       let len = fromCInt clen
+       if (len <= 0)
+        then return []
+        else allocaArray len $ \carr ->
+             do f carr
+                xs <- peekArray len carr
+                return (map fromCInt xs)
+
+withArrayIntPtrResult :: (Ptr CIntPtr -> IO CInt) -> IO [IntPtr]
+withArrayIntPtrResult f
+  = do clen <- f nullPtr
+       let len = fromCInt clen
+       if (len <= 0)
+        then return []
+        else allocaArray len $ \carr ->
+             do f carr
+                xs <- peekArray len carr
+                return (map fromCIntPtr xs)
+
+withArrayObjectResult :: (Ptr (Ptr a) -> IO CInt) -> IO [Object a]
+withArrayObjectResult f
+  = do clen <- f nullPtr
+       let len = fromCInt clen
+       if (len <= 0)
+        then return []
+        else allocaArray len $ \carr ->
+             do f carr
+                ps <- peekArray len carr
+                return (map objectFromPtr ps)
+
+withArrayString :: [String] -> (CInt -> Ptr CString -> IO a) -> IO a
+withArrayString xs f
+  = withCStrings xs [] $ \cxs ->
+    withArray0 ptrNull cxs $ \carr ->
+    f (toCInt len) carr
+  where
+    len = length xs
+
+    withCStrings [] cxs f
+      = f (reverse cxs)
+    withCStrings (x:xs) cxs f
+      = withCString x $ \cx ->
+        withCStrings xs (cx:cxs) f
+
+-- FIXME: factorise with withArrayString
+withArrayWString :: [String] -> (CInt -> Ptr CWString -> IO a) -> IO a
+withArrayWString xs f
+  = withCWStrings xs [] $ \cxs ->
+    withArray0 ptrNull cxs $ \carr ->
+    f (toCInt len) carr
+  where
+    len = length xs
+
+    withCWStrings [] cxs f
+      = f (reverse cxs)
+    withCWStrings (x:xs) cxs f
+      = withCWString x $ \cx ->
+        withCWStrings xs (cx:cxs) f
+
+
+withArrayInt :: [Int] -> (CInt -> Ptr CInt -> IO a) -> IO a
+withArrayInt xs f
+  = withArray0 0 (map toCInt xs) $ \carr ->
+    f (toCInt (length xs)) carr
+
+withArrayIntPtr :: [IntPtr] -> (CInt -> Ptr CIntPtr -> IO a) -> IO a
+withArrayIntPtr xs f
+  = withArray0 0 (map toCIntPtr xs) $ \carr ->
+    f (toCInt (length xs)) carr
+
+withArrayObject :: [Ptr a] -> (CInt -> Ptr (Ptr a) -> IO b) -> IO b
+withArrayObject xs f
+  = withArray0 ptrNull xs $ \carr ->
+    f (toCInt (length xs)) carr
+
+{-----------------------------------------------------------------------------------------
+  CCHar
+-----------------------------------------------------------------------------------------}
+toCChar :: Char -> CChar
+toCChar = castCharToCChar
+
+-- generalised to work with Char and CChar
+withCharResult :: (Num a, Integral a, Show a) => IO a -> IO Char
+withCharResult io
+  = do x <- io
+       if (x < 0)
+          then do traceIO ("Recieved negative unicode: " ++ (show x))
+                  return '\n'
+          else return (fromCWchar x)
+
+{- The (x < 0) if expression in withCharResult is a workaround for
+"processExecAsyncTimed dies with Prelude.chr bad argument"- bug
+reported here
+http://sourceforge.net/mailarchive/message.php?msg_id=54647.129.16.31.149.1111686341.squirrel%40webmail.chalmers.se
+and here
+http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg00267.html
+
+Windows GUI-only programs have no stdin, stdout or stderr. So we use Debug.Trace.traceIO
+for reporting message.
+http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/terminal-interaction.html
+http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Debug-Trace.html#v:traceIO
+-}
+
+
+fromCChar :: CChar -> Char
+fromCChar = castCCharToChar
+
+{-----------------------------------------------------------------------------------------
+  CCHar
+-----------------------------------------------------------------------------------------}
+toCWchar :: (Num a) => Char -> a
+toCWchar = fromIntegral . fromEnum
+
+
+fromCWchar :: (Num a, Integral a) => a -> Char
+fromCWchar = toEnum . fromIntegral
+
+
+{-----------------------------------------------------------------------------------------
+  CFunPtr
+-----------------------------------------------------------------------------------------}
+toCFunPtr :: FunPtr a -> Ptr a
+toCFunPtr fptr
+  = castFunPtrToPtr fptr
+
+-- | Null pointer, use with care.
+ptrNull :: Ptr a
+ptrNull
+  = nullPtr
+
+-- | Test for null.
+ptrIsNull :: Ptr a -> Bool
+ptrIsNull p
+  = (p == ptrNull)
+
+-- | Cast a pointer type, use with care.
+ptrCast :: Ptr a -> Ptr b
+ptrCast p
+  = castPtr p
+
+{-----------------------------------------------------------------------------------------
+  Marshalling of classes that are managed
+-----------------------------------------------------------------------------------------}
+-- | A @Managed a@ is a pointer to an object of type @a@, just like 'Object'. However,
+-- managed objects are automatically deleted when garbage collected. This is used for
+-- certain classes that are not managed by the wxWidgets library, like 'Bitmap's
+type Managed a  = ForeignPtr a
+
+-- | Create a managed object. Takes a finalizer as argument. This is normally a
+-- a delete function like 'windowDelete'.
+createManaged :: IO () -> Ptr a -> IO (Managed a)
+createManaged final obj
+  = newForeignPtr obj final
+
+-- | Add an extra finalizer to a managed object.
+managedAddFinalizer :: IO () -> Managed a -> IO ()
+managedAddFinalizer io managed
+  = addForeignPtrFinalizer managed io
+
+-- | Do something with the object from a managed object.
+withManaged :: Managed a -> (Ptr a -> IO b) -> IO b
+withManaged fptr f
+  = withForeignPtr fptr f
+
+
+-- | Keep a managed object explicitly alive.
+managedTouch :: Managed a -> IO ()
+managedTouch fptr
+  = touchForeignPtr fptr
+
+-- | A null pointer, use with care.
+{-# NOINLINE managedNull #-}
+managedNull :: Managed a
+managedNull
+  = unsafePerformIO (createManaged (return ()) ptrNull)
+
+-- | Test for null.
+managedIsNull :: Managed a -> Bool
+managedIsNull managed
+  = (managed == managedNull)
+
+-- | Cast a managed object, use with care.
+managedCast :: Managed a -> Managed b
+managedCast fptr
+  = castForeignPtr fptr
+
+
+{-----------------------------------------------------------------------------------------
+  Classes assigned by value.
+-----------------------------------------------------------------------------------------}
+assignRef :: IO (Ptr (TWxObject a)) -> (Ptr (TWxObject a) -> IO ()) -> IO (WxObject a)
+assignRef create f
+  = withManagedObjectResult (assignRefPtr create f)
+
+assignRefPtr :: IO (Ptr a) -> (Ptr a -> IO ()) -> IO (Ptr a)
+assignRefPtr create f
+  = do p <- create
+       f p
+       return p
+
+
+withManagedBitmapResult :: IO (Ptr (TBitmap a)) -> IO (Bitmap a)
+withManagedBitmapResult io
+  = do p      <- io
+       static <- wxBitmap_IsStatic p
+       if (static) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromBitmap p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromBitmap :: Ptr (TBitmap a) -> IO (ManagedPtr (TBitmap a))
+foreign import ccall wxBitmap_IsStatic :: Ptr (TBitmap a) -> IO Bool
+
+withManagedIconResult :: IO (Ptr (TIcon a)) -> IO (Icon a)
+withManagedIconResult io
+  = do p      <- io
+       if (wxIcon_IsStatic p) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromIcon p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromIcon :: Ptr (TIcon a) -> IO (ManagedPtr (TIcon a))
+foreign import ccall wxIcon_IsStatic :: Ptr (TIcon a) -> Bool
+
+withManagedBrushResult :: IO (Ptr (TBrush a)) -> IO (Brush a)
+withManagedBrushResult io
+  = do p      <- io
+       if (wxBrush_IsStatic p) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromBrush p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromBrush :: Ptr (TBrush a) -> IO (ManagedPtr (TBrush a))
+foreign import ccall wxBrush_IsStatic :: Ptr (TBrush a) -> Bool
+
+withManagedCursorResult :: IO (Ptr (TCursor a)) -> IO (Cursor a)
+withManagedCursorResult io
+  = do p      <- io
+       if (wxCursor_IsStatic p) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromCursor p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromCursor :: Ptr (TCursor a) -> IO (ManagedPtr (TCursor a))
+foreign import ccall wxCursor_IsStatic :: Ptr (TCursor a) -> Bool
+
+withManagedFontResult :: IO (Ptr (TFont a)) -> IO (Font a)
+withManagedFontResult io
+  = do p      <- io
+       if (wxFont_IsStatic p) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromFont p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromFont :: Ptr (TFont a) -> IO (ManagedPtr (TFont a))
+foreign import ccall wxFont_IsStatic :: Ptr (TFont a) -> Bool
+
+withManagedPenResult :: IO (Ptr (TPen a)) -> IO (Pen a)
+withManagedPenResult io
+  = do p      <- io
+       if (wxPen_IsStatic p) 
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromPen p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromPen :: Ptr (TPen a) -> IO (ManagedPtr (TPen a))
+foreign import ccall wxPen_IsStatic :: Ptr (TPen a) -> Bool
+
+
+
+withRefBitmap :: (Ptr (TBitmap a) -> IO ()) -> IO (Bitmap a)
+withRefBitmap f
+  = withManagedBitmapResult $ assignRefPtr wxBitmap_Create  f
+foreign import ccall "wxBitmap_CreateDefault" wxBitmap_Create :: IO (Ptr (TBitmap a))
+
+withRefCursor :: (Ptr (TCursor a) -> IO ()) -> IO (Cursor a)
+withRefCursor f
+  = withManagedCursorResult $ assignRefPtr (wx_Cursor_CreateFromStock 1)  f
+foreign import ccall "Cursor_CreateFromStock" wx_Cursor_CreateFromStock :: CInt -> IO (Ptr (TCursor a))
+
+withRefIcon :: (Ptr (TIcon a) -> IO ()) -> IO (Icon a)
+withRefIcon f
+  = withManagedIconResult $ assignRefPtr wxIcon_Create  f
+foreign import ccall "wxIcon_CreateDefault" wxIcon_Create :: IO (Ptr (TIcon a))
+
+withRefImage :: (Ptr (TImage a) -> IO ()) -> IO (Image a)
+withRefImage f
+  = assignRef wxImage_Create  f
+foreign import ccall "wxImage_CreateDefault" wxImage_Create :: IO (Ptr (TImage a))
+
+withRefFont :: (Ptr (TFont a) -> IO ()) -> IO (Font a)
+withRefFont f
+  = withManagedFontResult $ assignRefPtr wxFont_Create  f
+foreign import ccall "wxFont_CreateDefault" wxFont_Create :: IO (Ptr (TFont a))
+
+
+withRefPen :: (Ptr (TPen a) -> IO ()) -> IO (Pen a)
+withRefPen f
+  = withManagedPenResult $ assignRefPtr wxPen_Create  f
+foreign import ccall "wxPen_CreateDefault" wxPen_Create :: IO (Ptr (TPen a))
+
+
+withRefBrush :: (Ptr (TBrush a) -> IO ()) -> IO (Brush a)
+withRefBrush f
+  = withManagedBrushResult $ assignRefPtr wxBrush_Create  f
+foreign import ccall "wxBrush_CreateDefault" wxBrush_Create :: IO (Ptr (TBrush a))
+
+withRefFontData :: (Ptr (TFontData a) -> IO ()) -> IO (FontData a)
+withRefFontData f
+  = assignRef wxFontData_Create  f
+foreign import ccall "wxFontData_Create" wxFontData_Create :: IO (Ptr (TFontData a))
+
+withRefListItem :: (Ptr (TListItem a) -> IO ()) -> IO (ListItem a)
+withRefListItem f
+  = assignRef wxListItem_Create  f
+foreign import ccall "wxListItem_Create" wxListItem_Create :: IO (Ptr (TListItem a))
+
+withRefPrintData :: (Ptr (TPrintData a) -> IO ()) -> IO (PrintData a)
+withRefPrintData f
+  = assignRef wxPrintData_Create  f
+foreign import ccall "wxPrintData_Create" wxPrintData_Create :: IO (Ptr (TPrintData a))
+
+withRefPrintDialogData :: (Ptr (TPrintDialogData a) -> IO ()) -> IO (PrintDialogData a)
+withRefPrintDialogData f
+  = assignRef wxPrintDialogData_Create  f
+foreign import ccall "wxPrintDialogData_CreateDefault" wxPrintDialogData_Create :: IO (Ptr (TPrintDialogData a))
+
+withRefPageSetupDialogData :: (Ptr (TPageSetupDialogData a) -> IO ()) -> IO (PageSetupDialogData a)
+withRefPageSetupDialogData f
+  = assignRef wxPageSetupDialogData_Create  f
+foreign import ccall "wxPageSetupDialogData_Create" wxPageSetupDialogData_Create :: IO (Ptr (TPageSetupDialogData a))
+
+
+withManagedDateTimeResult :: IO (Ptr (TDateTime a)) -> IO (DateTime a)
+withManagedDateTimeResult io
+  = do p  <- io
+       if (p==nullPtr)
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromDateTime p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromDateTime :: Ptr (TDateTime a) -> IO (ManagedPtr (TDateTime a))
+
+
+withRefDateTime :: (Ptr (TDateTime a) -> IO ()) -> IO (DateTime a)
+withRefDateTime f
+  = withManagedDateTimeResult $ assignRefPtr wxDateTime_Create  f
+foreign import ccall "wxDateTime_Create" wxDateTime_Create :: IO (Ptr (TDateTime a))
+
+
+withManagedGridCellCoordsArrayResult :: IO (Ptr (TGridCellCoordsArray a)) -> IO (GridCellCoordsArray a)
+withManagedGridCellCoordsArrayResult io
+  = do p  <- io
+       if (p==nullPtr)
+        then return (objectFromPtr p)
+        else do mp <- wxManagedPtr_CreateFromGridCellCoordsArray p
+                objectFromManagedPtr mp
+
+foreign import ccall wxManagedPtr_CreateFromGridCellCoordsArray :: Ptr (TGridCellCoordsArray a) -> IO (ManagedPtr (TGridCellCoordsArray a))
+
+withRefGridCellCoordsArray :: (Ptr (TGridCellCoordsArray a) -> IO ()) -> IO (GridCellCoordsArray a)
+withRefGridCellCoordsArray f
+  = withManagedGridCellCoordsArrayResult $ assignRefPtr wxGridCellCoordsArray_Create  f
+foreign import ccall "wxGridCellCoordsArray_Create" wxGridCellCoordsArray_Create :: IO (Ptr (TGridCellCoordsArray a))
+
+
+
+
+{-----------------------------------------------------------------------------------------
+  Tree items
+-----------------------------------------------------------------------------------------}
+-- | Identifies tree items. Note: Replaces the @TreeItemId@ object and takes automatically
+-- care of allocation issues.
+newtype TreeItem  = TreeItem IntPtr
+                  deriving (Eq,Show,Read)
+
+-- | Invalid tree item.
+treeItemInvalid :: TreeItem
+treeItemInvalid   = TreeItem 0
+
+-- | Is a tree item ok? (i.e. not invalid).
+treeItemIsOk :: TreeItem -> Bool
+treeItemIsOk (TreeItem val)
+  = (val /= 0)
+
+treeItemFromInt :: IntPtr -> TreeItem
+treeItemFromInt i
+  = TreeItem i
+
+withRefTreeItemId :: (Ptr (TTreeItemId ()) -> IO ()) -> IO TreeItem
+withRefTreeItemId f
+  = do item <- assignRefPtr treeItemIdCreate f
+       val  <- treeItemIdGetValue item
+       treeItemIdDelete item
+       return (TreeItem (fromCIntPtr val))
+
+withTreeItemIdRef :: String -> TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b
+withTreeItemIdRef msg t f
+  = withTreeItemIdPtr t $ \p -> withValidPtr msg p f
+
+withTreeItemIdPtr :: TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b
+withTreeItemIdPtr (TreeItem val) f 
+  = do item <- treeItemIdCreateFromValue (toCIntPtr val)
+       x    <- f item
+       treeItemIdDelete item
+       return x
+
+withManagedTreeItemIdResult :: IO (Ptr (TTreeItemId a)) -> IO TreeItem 
+withManagedTreeItemIdResult io
+  = do item <- io
+       val  <- treeItemIdGetValue item
+       treeItemIdDelete item
+       return (TreeItem (fromCIntPtr val))
+
+foreign import ccall "wxTreeItemId_Create" treeItemIdCreate :: IO (Ptr (TTreeItemId a))
+foreign import ccall "wxTreeItemId_GetValue" treeItemIdGetValue :: Ptr (TTreeItemId a) -> IO CIntPtr
+foreign import ccall "wxTreeItemId_CreateFromValue" treeItemIdCreateFromValue :: CIntPtr -> IO (Ptr (TTreeItemId a))
+foreign import ccall "wxTreeItemId_Delete" treeItemIdDelete :: Ptr (TTreeItemId a) -> IO ()
+
+{-----------------------------------------------------------------------------------------
+  String
+-----------------------------------------------------------------------------------------}
+{-
+-- | A @wxString@ object.
+type WxStringObject a   = Ptr (CWxStringObject a)
+type TWxStringObject a  = CWxStringObject a
+data CWxStringObject a  = CWxStringObject
+-}
+
+-- FIXME: I am blithely changing these over to use CWString instead of String
+-- whereas in the rest of the code, I actually make a new version of the fns
+withStringRef :: String -> String -> (Ptr (TWxString s) -> IO a) -> IO a
+withStringRef msg s f
+  = withStringPtr s $ \p -> withValidPtr msg p f
+
+withStringPtr :: String -> (Ptr (TWxString s) -> IO a) -> IO a
+withStringPtr s f
+  = withCWString s $ \cstr ->
+    bracket (wxString_Create cstr)
+            (wxString_Delete)
+            f
+
+withManagedStringResult :: IO (Ptr (TWxString a)) -> IO String
+withManagedStringResult io
+  = do wxs <- io
+       len <- wxString_Length wxs
+       s   <- if (len<=0)
+                then return ""
+                else withCWString (replicate (fromCInt len) ' ') $ \cstr ->
+                     do wxString_GetString wxs cstr
+                        peekCWStringLen (cstr, fromCInt len)
+       wxString_Delete wxs
+       return s
+
+
+foreign import ccall wxString_Create    :: Ptr CWchar -> IO (Ptr (TWxString a))
+foreign import ccall wxString_CreateLen :: Ptr CWchar -> CInt -> IO (Ptr (TWxString a))
+foreign import ccall wxString_Delete    :: Ptr (TWxString a) -> IO ()
+foreign import ccall wxString_GetString :: Ptr (TWxString a) -> Ptr CWchar -> IO CInt
+foreign import ccall wxString_Length    :: Ptr (TWxString a) -> IO CInt
+
+
+{-----------------------------------------------------------------------------------------
+  Color
+-----------------------------------------------------------------------------------------}
+-- | An abstract data type to define colors.
+--
+--   Note: Haddock 0.8 and 0.9 doesn't support GeneralizedNewtypeDeriving. So, This class
+--   doesn't have 'IArray' class's unboxed array instance now. If you want to use this type
+--   with unboxed array, you must write code like this.
+--
+-- > {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, MultiParamTypeClasses #-}
+-- > import Graphics.UI.WXCore.WxcTypes
+-- > ...
+-- > deriving instance IArray UArray Color
+--
+--   We can't derive 'MArray' class's unboxed array instance this way. This is a bad point
+--   of current 'MArray' class definition.
+--
+newtype Color = Color Word 
+              deriving (Eq, Typeable) -- , IArray UArray) 
+
+instance Show Color where
+  showsPrec d c
+    = showParen (d > 0) (showString "rgba(" . shows (colorRed   c) .
+                          showChar   ','    . shows (colorGreen c) .
+                          showChar   ','    . shows (colorBlue  c) .
+                          showChar   ','    . shows (colorAlpha c) .
+                          showChar   ')' )
+
+-- | Create a color from a red\/green\/blue triple.
+colorRGB :: (Integral a) => a -> a -> a -> Color
+colorRGB r g b = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. 255)
+
+-- | Create a color from a red\/green\/blue triple.
+rgb :: (Integral a) => a -> a -> a -> Color
+rgb r g b = colorRGB r g b
+
+-- | Create a color from a red\/green\/blue\/alpha quadruple.
+colorRGBA :: (Integral a) => a -> a -> a -> a -> Color
+colorRGBA r g b a = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. (fromIntegral a))
+
+-- | Create a color from a red\/green\/blue\/alpha quadruple.
+rgba :: (Integral a) => a -> a -> a -> a -> Color
+rgba r g b a = colorRGBA r g b a
+
+
+-- | Return an 'Int' where the three least significant bytes contain
+-- the red, green, and blue component of a color.
+intFromColor :: Color -> Int
+intFromColor rgb
+  = let r = colorRed rgb
+        g = colorGreen rgb
+        b = colorBlue rgb
+    in (shiftL (fromIntegral r) 16 .|. shiftL (fromIntegral g) 8 .|. b)
+
+-- | Set the color according to an rgb integer. (see 'rgbIntFromColor').
+colorFromInt :: Int -> Color
+colorFromInt rgb
+  = let r = (shiftR rgb 16) .&. 0xFF
+        g = (shiftR rgb 8) .&. 0xFF
+        b = rgb .&. 0xFF
+    in colorRGB r g b
+
+-- | Return an 'Num' class's numeric representation where the three
+-- least significant the red, green, and blue component of a color.
+fromColor :: (Num a) => Color -> a
+fromColor (Color rgb)
+  = fromIntegral rgb
+
+-- | Set the color according to 'Integral' class's numeric representation.
+-- (see 'rgbaIntFromColor').
+toColor :: (Integral a) => a -> Color
+toColor
+  = Color . fromIntegral
+
+-- marshalling 1
+-- | Returns a red color component
+colorRed   :: (Num a) => Color -> a
+colorRed   (Color rgba) = fromIntegral ((shiftR rgba 24) .&. 0xFF)
+
+-- | Returns a green color component
+colorGreen :: (Num a) => Color -> a
+colorGreen (Color rgba) = fromIntegral ((shiftR rgba 16) .&. 0xFF)
+
+-- | Returns a blue color component
+colorBlue  :: (Num a) => Color -> a
+colorBlue  (Color rgba) = fromIntegral ((shiftR rgba 8) .&. 0xFF)
+
+-- | Returns a alpha channel component
+colorAlpha  :: (Num a) => Color -> a
+colorAlpha  (Color rgba) = fromIntegral (rgba .&. 0xFF)
+
+
+-- | This is an illegal color, corresponding to @nullColour@.
+colorNull :: Color
+colorNull
+  = Color (-1)
+
+{-# DEPRECATED colorOk "Use colorIsOk instead" #-}
+-- | deprecated: use 'colorIsOk' instead.
+colorOk :: Color -> Bool
+colorOk = colorIsOk
+
+-- | Check of a color is valid (@Colour::IsOk@)
+colorIsOk :: Color -> Bool
+colorIsOk = (/= colorNull)
+
+
+-- marshalling 2
+{-
+type Colour a     = Object (CColour a)
+type ColourPtr a  = Ptr (CColour a)
+data CColour a    = CColour
+-}
+
+withRefColour :: (Ptr (TColour a) -> IO ()) -> IO Color
+withRefColour f
+  = withManagedColourResult $
+    assignRefPtr colourCreate f
+
+withManagedColourResult :: IO (Ptr (TColour a)) -> IO Color
+withManagedColourResult io
+  = do pcolour <- io
+       color <- do ok <- colourIsOk pcolour
+                   if (ok==0)
+                    then return colorNull
+                    else do rgba <- colourGetUnsignedInt pcolour
+                            return (toColor rgba)
+       colourSafeDelete pcolour
+       return color
+
+
+withColourRef :: String -> Color -> (Ptr (TColour a) -> IO b) -> IO b
+withColourRef msg c f
+  = withColourPtr c $ \p -> withValidPtr msg p f
+
+withColourPtr :: Color -> (Ptr (TColour a) -> IO b) -> IO b
+withColourPtr c f
+  = do pcolour <- colourCreateFromUnsignedInt (fromColor c)
+       x <- f pcolour
+       colourSafeDelete pcolour
+       return x
+
+colourFromColor :: Color -> IO (Colour ())
+colourFromColor c
+  = if (colorOk c)
+     then do p <- colourCreateFromUnsignedInt (fromColor c)
+             if (colourIsStatic p)
+              then return (objectFromPtr p)
+              else do mp <- wxManagedPtr_CreateFromColour p
+                      objectFromManagedPtr mp
+     else withObjectResult colourNull
+          
+
+colorFromColour :: Colour a -> IO Color
+colorFromColour c
+  = withObjectRef "colorFromColour" c $ \pcolour ->
+    do ok <- colourIsOk pcolour
+       if (ok==0)
+        then return colorNull
+        else do rgba <- colourGetUnsignedInt pcolour
+                return (toColor rgba)
+
+
+foreign import ccall "wxColour_CreateEmpty" colourCreate    :: IO (Ptr (TColour a))
+foreign import ccall "wxColour_CreateFromInt" colourCreateFromInt :: CInt -> IO (Ptr (TColour a))
+foreign import ccall "wxColour_GetInt" colourGetInt               :: Ptr (TColour a) -> IO CInt
+foreign import ccall "wxColour_CreateFromUnsignedInt" colourCreateFromUnsignedInt :: Word -> IO (Ptr (TColour a))
+foreign import ccall "wxColour_GetUnsignedInt" colourGetUnsignedInt       :: Ptr (TColour a) -> IO Word
+foreign import ccall "wxColour_SafeDelete" colourSafeDelete   :: Ptr (TColour a) -> IO ()
+foreign import ccall "wxColour_IsStatic" colourIsStatic   :: Ptr (TColour a) -> Bool
+foreign import ccall "wxColour_IsOk"    colourIsOk   :: Ptr (TColour a) -> IO CInt
+foreign import ccall "Null_Colour"    colourNull :: IO (Ptr (TColour a))
+foreign import ccall wxManagedPtr_CreateFromColour :: Ptr (TColour a) -> IO (ManagedPtr (TColour a))
wxcore.cabal view
@@ -1,88 +1,88 @@-name:         wxcore-version:      0.90.1.1-license:      OtherLicense-license-file: LICENSE-author:       Daan Leijen-maintainer:   wxhaskell-devel@lists.sourceforge.net-category:     GUI, User interfaces-synopsis:     wxHaskell core-description:-  wxHaskell is a portable and native GUI library for Haskell. It is-  built on top of wxWidgets, a comprehensive C++ library that is-  portable across all major GUI platforms, including GTK, Windows,-  X11, and MacOS X. This version works with wxWidgets 2.9 only.--  Distributed under the WXWINDOWS LIBRARY LICENSE. Please see-  LICENSE file, but note that this is essentially LGPL with an-  exception allowing binary distribution of proprietary software.-  This is the same license as wxWidgets itself uses.-homepage:     http://haskell.org/haskellwiki/WxHaskell--cabal-version: >= 1.2-build-type:    Custom--extra-tmp-files:-  src/haskell/Graphics/UI/WXCore/WxcClassInfo.hs-  src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs-  src/haskell/Graphics/UI/WXCore/WxcClasses.hs-  src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs-  src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs--flag splitBase-  description:  use new split base-  default:      True--library-  hs-source-dirs:-    src/haskell--  exposed-modules:-    Graphics.UI.WXCore-    Graphics.UI.WXCore.Controls-    Graphics.UI.WXCore.Defines-    Graphics.UI.WXCore.Dialogs-    Graphics.UI.WXCore.DragAndDrop-    Graphics.UI.WXCore.Draw-    Graphics.UI.WXCore.Events-    Graphics.UI.WXCore.Frame-    Graphics.UI.WXCore.Image-    Graphics.UI.WXCore.Layout-    Graphics.UI.WXCore.OpenGL-    Graphics.UI.WXCore.Print-    Graphics.UI.WXCore.Process-    Graphics.UI.WXCore.Types-    Graphics.UI.WXCore.WxcClassInfo-    Graphics.UI.WXCore.WxcClassTypes-    Graphics.UI.WXCore.WxcClasses-    Graphics.UI.WXCore.WxcClassesAL-    Graphics.UI.WXCore.WxcClassesMZ-    Graphics.UI.WXCore.WxcDefs-    Graphics.UI.WXCore.WxcObject-    Graphics.UI.WXCore.WxcTypes--  other-modules:-    Graphics.UI.WXCore.GHCiSupport--  frameworks:-    Carbon--  build-depends:-    bytestring,-    filepath,-    parsec,-    stm,-    wxc >= 0.90.1.0,-    wxdirect >= 0.90.1.0,-    directory,-    time--  if flag(splitBase)-    build-depends:-      array >= 0.2 && < 0.5,-      base >= 4 && < 5,-      containers >= 0.2 && < 0.6-  else-    build-depends:-      array >= 0.1 && < 0.3,-      base >= 3 && < 4,-      containers >= 0.1 && < 0.3+name:         wxcore
+version:      0.91.0.0
+license:      OtherLicense
+license-file: LICENSE
+author:       Daan Leijen
+maintainer:   wxhaskell-devel@lists.sourceforge.net
+category:     GUI, User interfaces
+synopsis:     wxHaskell core
+description:
+  wxHaskell is a portable and native GUI library for Haskell. It is
+  built on top of wxWidgets, a comprehensive C++ library that is
+  portable across all major GUI platforms, including GTK, Windows,
+  X11, and MacOS X. This version works with wxWidgets 2.9 and 3.0.
+
+  Distributed under the WXWINDOWS LIBRARY LICENSE. Please see
+  LICENSE file, but note that this is essentially LGPL with an
+  exception allowing binary distribution of proprietary software.
+  This is the same license as wxWidgets itself uses.
+homepage:     http://haskell.org/haskellwiki/WxHaskell
+
+cabal-version: >= 1.2
+build-type:    Custom
+
+extra-tmp-files:
+  src/haskell/Graphics/UI/WXCore/WxcClassInfo.hs
+  src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs
+  src/haskell/Graphics/UI/WXCore/WxcClasses.hs
+  src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs
+  src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs
+
+flag splitBase
+  description:  use new split base
+  default:      True
+
+library
+  hs-source-dirs:
+    src/haskell
+
+  exposed-modules:
+    Graphics.UI.WXCore
+    Graphics.UI.WXCore.Controls
+    Graphics.UI.WXCore.Defines
+    Graphics.UI.WXCore.Dialogs
+    Graphics.UI.WXCore.DragAndDrop
+    Graphics.UI.WXCore.Draw
+    Graphics.UI.WXCore.Events
+    Graphics.UI.WXCore.Frame
+    Graphics.UI.WXCore.Image
+    Graphics.UI.WXCore.Layout
+    Graphics.UI.WXCore.OpenGL
+    Graphics.UI.WXCore.Print
+    Graphics.UI.WXCore.Process
+    Graphics.UI.WXCore.Types
+    Graphics.UI.WXCore.WxcClassInfo
+    Graphics.UI.WXCore.WxcClassTypes
+    Graphics.UI.WXCore.WxcClasses
+    Graphics.UI.WXCore.WxcClassesAL
+    Graphics.UI.WXCore.WxcClassesMZ
+    Graphics.UI.WXCore.WxcDefs
+    Graphics.UI.WXCore.WxcObject
+    Graphics.UI.WXCore.WxcTypes
+
+  other-modules:
+    Graphics.UI.WXCore.GHCiSupport
+
+  frameworks:
+    Carbon
+
+  build-depends:
+    bytestring,
+    filepath,
+    parsec,
+    stm,
+    wxc >= 0.91,
+    wxdirect >= 0.91,
+    directory,
+    time
+
+  if flag(splitBase)
+    build-depends:
+      array >= 0.2 && < 0.6,
+      base >= 4 && < 5,
+      containers >= 0.2 && < 0.6
+  else
+    build-depends:
+      array >= 0.1 && < 0.3,
+      base >= 3 && < 4,
+      containers >= 0.1 && < 0.3