diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -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)
diff --git a/src/haskell/Graphics/UI/WXCore.hs b/src/haskell/Graphics/UI/WXCore.hs
--- a/src/haskell/Graphics/UI/WXCore.hs
+++ b/src/haskell/Graphics/UI/WXCore.hs
@@ -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
+
+
+
+
diff --git a/src/haskell/Graphics/UI/WXCore/Controls.hs b/src/haskell/Graphics/UI/WXCore/Controls.hs
--- a/src/haskell/Graphics/UI/WXCore/Controls.hs
+++ b/src/haskell/Graphics/UI/WXCore/Controls.hs
@@ -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
diff --git a/src/haskell/Graphics/UI/WXCore/Defines.hs b/src/haskell/Graphics/UI/WXCore/Defines.hs
--- a/src/haskell/Graphics/UI/WXCore/Defines.hs
+++ b/src/haskell/Graphics/UI/WXCore/Defines.hs
@@ -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   -> ":"
+
diff --git a/src/haskell/Graphics/UI/WXCore/Dialogs.hs b/src/haskell/Graphics/UI/WXCore/Dialogs.hs
--- a/src/haskell/Graphics/UI/WXCore/Dialogs.hs
+++ b/src/haskell/Graphics/UI/WXCore/Dialogs.hs
@@ -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
diff --git a/src/haskell/Graphics/UI/WXCore/DragAndDrop.hs b/src/haskell/Graphics/UI/WXCore/DragAndDrop.hs
--- a/src/haskell/Graphics/UI/WXCore/DragAndDrop.hs
+++ b/src/haskell/Graphics/UI/WXCore/DragAndDrop.hs
@@ -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
+
diff --git a/src/haskell/Graphics/UI/WXCore/Draw.hs b/src/haskell/Graphics/UI/WXCore/Draw.hs
--- a/src/haskell/Graphics/UI/WXCore/Draw.hs
+++ b/src/haskell/Graphics/UI/WXCore/Draw.hs
@@ -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 ()
diff --git a/src/haskell/Graphics/UI/WXCore/Events.hs b/src/haskell/Graphics/UI/WXCore/Events.hs
--- a/src/haskell/Graphics/UI/WXCore/Events.hs
+++ b/src/haskell/Graphics/UI/WXCore/Events.hs
@@ -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 ()))
diff --git a/src/haskell/Graphics/UI/WXCore/Frame.hs b/src/haskell/Graphics/UI/WXCore/Frame.hs
--- a/src/haskell/Graphics/UI/WXCore/Frame.hs
+++ b/src/haskell/Graphics/UI/WXCore/Frame.hs
@@ -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
diff --git a/src/haskell/Graphics/UI/WXCore/GHCiSupport.hs b/src/haskell/Graphics/UI/WXCore/GHCiSupport.hs
--- a/src/haskell/Graphics/UI/WXCore/GHCiSupport.hs
+++ b/src/haskell/Graphics/UI/WXCore/GHCiSupport.hs
@@ -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
diff --git a/src/haskell/Graphics/UI/WXCore/Image.hs b/src/haskell/Graphics/UI/WXCore/Image.hs
--- a/src/haskell/Graphics/UI/WXCore/Image.hs
+++ b/src/haskell/Graphics/UI/WXCore/Image.hs
@@ -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)
diff --git a/src/haskell/Graphics/UI/WXCore/Layout.hs b/src/haskell/Graphics/UI/WXCore/Layout.hs
--- a/src/haskell/Graphics/UI/WXCore/Layout.hs
+++ b/src/haskell/Graphics/UI/WXCore/Layout.hs
@@ -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
+-}
diff --git a/src/haskell/Graphics/UI/WXCore/Print.hs b/src/haskell/Graphics/UI/WXCore/Print.hs
--- a/src/haskell/Graphics/UI/WXCore/Print.hs
+++ b/src/haskell/Graphics/UI/WXCore/Print.hs
@@ -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
+          })
+      } 
+
diff --git a/src/haskell/Graphics/UI/WXCore/Process.hs b/src/haskell/Graphics/UI/WXCore/Process.hs
--- a/src/haskell/Graphics/UI/WXCore/Process.hs
+++ b/src/haskell/Graphics/UI/WXCore/Process.hs
@@ -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 ()
diff --git a/src/haskell/Graphics/UI/WXCore/Types.hs b/src/haskell/Graphics/UI/WXCore/Types.hs
--- a/src/haskell/Graphics/UI/WXCore/Types.hs
+++ b/src/haskell/Graphics/UI/WXCore/Types.hs
@@ -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)
diff --git a/src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs b/src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs
@@ -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.
 -}
diff --git a/src/haskell/Graphics/UI/WXCore/WxcClasses.hs b/src/haskell/Graphics/UI/WXCore/WxcClasses.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcClasses.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcClasses.hs
@@ -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
diff --git a/src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs b/src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs
@@ -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 ()
diff --git a/src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs b/src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs
@@ -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 ()
diff --git a/src/haskell/Graphics/UI/WXCore/WxcDefs.hs b/src/haskell/Graphics/UI/WXCore/WxcDefs.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcDefs.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcDefs.hs
@@ -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
+
diff --git a/src/haskell/Graphics/UI/WXCore/WxcObject.hs b/src/haskell/Graphics/UI/WXCore/WxcObject.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcObject.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcObject.hs
@@ -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 ()
diff --git a/src/haskell/Graphics/UI/WXCore/WxcTypes.hs b/src/haskell/Graphics/UI/WXCore/WxcTypes.hs
--- a/src/haskell/Graphics/UI/WXCore/WxcTypes.hs
+++ b/src/haskell/Graphics/UI/WXCore/WxcTypes.hs
@@ -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))
diff --git a/wxcore.cabal b/wxcore.cabal
--- a/wxcore.cabal
+++ b/wxcore.cabal
@@ -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
