wxcore 0.90.1.1 → 0.91.0.0
raw patch · 23 files changed
+19756/−18937 lines, 23 filesdep ~arraydep ~wxcdep ~wxdirectsetup-changed
Dependency ranges changed: array, wxc, wxdirect
Files
- Setup.hs +1/−1
- src/haskell/Graphics/UI/WXCore.hs +82/−82
- src/haskell/Graphics/UI/WXCore/Controls.hs +131/−131
- src/haskell/Graphics/UI/WXCore/Defines.hs +119/−119
- src/haskell/Graphics/UI/WXCore/Dialogs.hs +298/−298
- src/haskell/Graphics/UI/WXCore/DragAndDrop.hs +94/−94
- src/haskell/Graphics/UI/WXCore/Draw.hs +850/−847
- src/haskell/Graphics/UI/WXCore/Events.hs +2825/−2825
- src/haskell/Graphics/UI/WXCore/Frame.hs +149/−149
- src/haskell/Graphics/UI/WXCore/GHCiSupport.hs +3/−3
- src/haskell/Graphics/UI/WXCore/Image.hs +355/−355
- src/haskell/Graphics/UI/WXCore/Layout.hs +1018/−1013
- src/haskell/Graphics/UI/WXCore/Print.hs +358/−358
- src/haskell/Graphics/UI/WXCore/Process.hs +313/−313
- src/haskell/Graphics/UI/WXCore/Types.hs +519/−519
- src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs +1/−1
- src/haskell/Graphics/UI/WXCore/WxcClasses.hs +2/−2
- src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs +65/−30
- src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs +100/−164
- src/haskell/Graphics/UI/WXCore/WxcDefs.hs +10752/−9912
- src/haskell/Graphics/UI/WXCore/WxcObject.hs +194/−194
- src/haskell/Graphics/UI/WXCore/WxcTypes.hs +1439/−1439
- wxcore.cabal +88/−88
Setup.hs view
@@ -11,7 +11,7 @@ import Distribution.Simple.Setup (ConfigFlags, BuildFlags) import Distribution.System (OS (..), Arch (..), buildOS, buildArch) import Distribution.Verbosity (normal, verbose) -import System.Cmd (system) +import System.Process (system) import System.Directory (createDirectoryIfMissing, doesFileExist, getCurrentDirectory, getModificationTime) import System.Environment (getEnv) import System.FilePath ((</>), (<.>), replaceExtension, takeFileName, dropFileName, addExtension, takeDirectory)
src/haskell/Graphics/UI/WXCore.hs view
@@ -1,82 +1,82 @@-------------------------------------------------------------------------------------------{-| Module : WXCore- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--The "WXCore" module is the interface to the core wxWidgets functionality.- -The library contains the automatically generated interface to the raw-wxWidgets API in "Graphics.UI.WXCore.WxcClasses", "Graphics.UI.WXCore.WxcClassTypes",-and "Graphics.UI.WXCore.WxcDefs". --The other helper modules contain convenient wrappers but only use functional-abstractions: no type classes or other fancy Haskell features. (The-higher-level "Graphics.UI.WX" module provides such abstractions.)--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore- (- -- * Re-exports- module Graphics.UI.WXCore.WxcDefs- , module Graphics.UI.WXCore.WxcClasses- , module Graphics.UI.WXCore.WxcClassInfo- , module Graphics.UI.WXCore.Defines- , module Graphics.UI.WXCore.Types- , module Graphics.UI.WXCore.Process- , module Graphics.UI.WXCore.Print- , module Graphics.UI.WXCore.Draw- , module Graphics.UI.WXCore.DragAndDrop- , module Graphics.UI.WXCore.Events- , module Graphics.UI.WXCore.Frame- , module Graphics.UI.WXCore.Dialogs- , module Graphics.UI.WXCore.Controls- , module Graphics.UI.WXCore.Layout- , module Graphics.UI.WXCore.Image- , module Graphics.UI.WXCore.OpenGL-- -- * Run- , run- ) where--import System.Mem( performGC )--import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses -import Graphics.UI.WXCore.WxcClassInfo- -import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines-import Graphics.UI.WXCore.Process-import Graphics.UI.WXCore.Print-import Graphics.UI.WXCore.Events hiding ( StreamStatus(..) )-import Graphics.UI.WXCore.Draw-import Graphics.UI.WXCore.DragAndDrop-import Graphics.UI.WXCore.Frame-import Graphics.UI.WXCore.Dialogs-import Graphics.UI.WXCore.Controls-import Graphics.UI.WXCore.Layout-import Graphics.UI.WXCore.Image-import Graphics.UI.WXCore.OpenGL--import Graphics.UI.WXCore.GHCiSupport---- | Start the event loop. Takes an initialisation action as argument.--- Except for 'run', the functions in the WX library can only be called--- from this initialisation action or from event handlers, otherwise bad--- things will happen :-)-run :: IO a -> IO ()-run init- = do enableGUI- appOnInit (do wxcAppInitAllImageHandlers- init- return ())- performGC- performGC----+----------------------------------------------------------------------------------------- +{-| Module : WXCore + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +The "WXCore" module is the interface to the core wxWidgets functionality. + +The library contains the automatically generated interface to the raw +wxWidgets API in "Graphics.UI.WXCore.WxcClasses", "Graphics.UI.WXCore.WxcClassTypes", +and "Graphics.UI.WXCore.WxcDefs". + +The other helper modules contain convenient wrappers but only use functional +abstractions: no type classes or other fancy Haskell features. (The +higher-level "Graphics.UI.WX" module provides such abstractions.) +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore + ( + -- * Re-exports + module Graphics.UI.WXCore.WxcDefs + , module Graphics.UI.WXCore.WxcClasses + , module Graphics.UI.WXCore.WxcClassInfo + , module Graphics.UI.WXCore.Defines + , module Graphics.UI.WXCore.Types + , module Graphics.UI.WXCore.Process + , module Graphics.UI.WXCore.Print + , module Graphics.UI.WXCore.Draw + , module Graphics.UI.WXCore.DragAndDrop + , module Graphics.UI.WXCore.Events + , module Graphics.UI.WXCore.Frame + , module Graphics.UI.WXCore.Dialogs + , module Graphics.UI.WXCore.Controls + , module Graphics.UI.WXCore.Layout + , module Graphics.UI.WXCore.Image + , module Graphics.UI.WXCore.OpenGL + + -- * Run + , run + ) where + +import System.Mem( performGC ) + +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassInfo + +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Defines +import Graphics.UI.WXCore.Process +import Graphics.UI.WXCore.Print +import Graphics.UI.WXCore.Events hiding ( StreamStatus(..) ) +import Graphics.UI.WXCore.Draw +import Graphics.UI.WXCore.DragAndDrop +import Graphics.UI.WXCore.Frame +import Graphics.UI.WXCore.Dialogs +import Graphics.UI.WXCore.Controls +import Graphics.UI.WXCore.Layout +import Graphics.UI.WXCore.Image +import Graphics.UI.WXCore.OpenGL + +import Graphics.UI.WXCore.GHCiSupport + +-- | Start the event loop. Takes an initialisation action as argument. +-- Except for 'run', the functions in the WX library can only be called +-- from this initialisation action or from event handlers, otherwise bad +-- things will happen :-) +run :: IO a -> IO () +run init + = do enableGUI + appOnInit (do wxcAppInitAllImageHandlers + init + return ()) + performGC + performGC + + + +
src/haskell/Graphics/UI/WXCore/Controls.hs view
@@ -1,131 +1,131 @@----------------------------------------------------------------------------------{-| Module : Controls- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Controls- ( - -- * Log- textCtrlMakeLogActiveTarget- , logDeleteAndSetActiveTarget- -- * Tree control- , TreeCookie- , treeCtrlGetChildCookie, treeCtrlGetNextChild2- , treeCtrlWithChildren, treeCtrlGetChildren- , treeCtrlGetSelections2- -- * Wrappers- , listBoxGetSelectionList- , execClipBoardData- -- * Deprecated- , wxcAppUSleep- ) where--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types--import Foreign.Storable-import Foreign.Marshal.Array-import Foreign.Marshal.Utils----- | Get the selections of a tree control.-treeCtrlGetSelections2 :: TreeCtrl a -> IO [TreeItem]-treeCtrlGetSelections2 treeCtrl- = do xs <- treeCtrlGetSelections treeCtrl- return (map treeItemFromInt xs)---- | Represents the children of a tree control.-data TreeCookie = TreeCookie (Var Cookie)-data Cookie = Cookie TreeItem- | CookieFirst TreeItem- | CookieInvalid---- | Get a @TreeCookie@ to iterate through the children of tree node.-treeCtrlGetChildCookie :: TreeCtrl a -> TreeItem -> IO TreeCookie-treeCtrlGetChildCookie treeCtrl parent- = do pcookie <- varCreate (CookieFirst parent)- return (TreeCookie pcookie)---- | Get the next child of a tree node. Returns 'Nothing' when--- the end of the list is reached. This also invalidates the tree cookie.-treeCtrlGetNextChild2 :: TreeCtrl a -> TreeCookie -> IO (Maybe TreeItem)-treeCtrlGetNextChild2 treeCtrl treeCookie@(TreeCookie pcookie)- = do cookie <- varGet pcookie- case cookie of- CookieInvalid -> return Nothing- CookieFirst item -> with 0 $ \pint ->- do first <- treeCtrlGetFirstChild treeCtrl item pint- if (treeItemIsOk first)- then do varSet pcookie (Cookie first)- return (Just first)- else do varSet pcookie (CookieInvalid)- return Nothing- Cookie item ->- do next <- treeCtrlGetNextSibling treeCtrl item- if (treeItemIsOk next)- then do varSet pcookie (Cookie next)- return (Just next)- else do varSet pcookie (CookieInvalid)- return Nothing---- | Iterate on the list of children of a tree node.-treeCtrlWithChildren :: TreeCtrl a -> TreeItem -> (TreeItem -> IO b) -> IO [b]-treeCtrlWithChildren treeCtrl parent f- = do cookie <- treeCtrlGetChildCookie treeCtrl parent- let walk acc = do mbitem <- treeCtrlGetNextChild2 treeCtrl cookie- case mbitem of- Nothing -> return (reverse acc)- Just item -> do x <- f item- walk (x:acc)- walk []---- | Get the children of tree node.-treeCtrlGetChildren :: TreeCtrl a -> TreeItem -> IO [TreeItem]-treeCtrlGetChildren treeCtrl item- = treeCtrlWithChildren treeCtrl item return---- | ---- | Return the current selection in a listbox.-listBoxGetSelectionList :: ListBox a -> IO [Int]-listBoxGetSelectionList listBox- = do n <- listBoxGetSelections listBox ptrNull 0- let count = abs n- allocaArray count $ \carr ->- do listBoxGetSelections listBox carr count- xs <- peekArray count carr- return (map fromCInt xs)---- | Sets the active log target and deletes the old one.-logDeleteAndSetActiveTarget :: Log a -> IO ()-logDeleteAndSetActiveTarget log- = do oldlog <- logSetActiveTarget log- when (not (objectIsNull oldlog)) (logDelete oldlog)- ---- | Set a text control as a log target.-textCtrlMakeLogActiveTarget :: TextCtrl a -> IO ()-textCtrlMakeLogActiveTarget textCtrl- = do log <- logTextCtrlCreate textCtrl- logDeleteAndSetActiveTarget log----- | Use a 'clipboardSetData' or 'clipboardGetData' in this function. But don't--- use long computation in this function. Because this function encloses the--- computation with 'clipboardOpen' and 'clipboardClose', and wxHaskell uses--- Global clipboard on your environment. So, long computation causes problem.-execClipBoardData :: Clipboard a -> (Clipboard a -> IO b) -> IO b-execClipBoardData cl event = bracket_ (clipboardOpen cl) (clipboardClose cl) (event cl)--{-# DEPRECATED wxcAppUSleep "Use wxcAppMilliSleep instead" #-}--- | This function just left for backward-compatiblity.--- Update your code to use 'wxcAppMilliSleep' instead.-wxcAppUSleep :: Int -> IO ()-wxcAppUSleep = wxcAppMilliSleep+-------------------------------------------------------------------------------- +{-| Module : Controls + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable +-} +-------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Controls + ( + -- * Log + textCtrlMakeLogActiveTarget + , logDeleteAndSetActiveTarget + -- * Tree control + , TreeCookie + , treeCtrlGetChildCookie, treeCtrlGetNextChild2 + , treeCtrlWithChildren, treeCtrlGetChildren + , treeCtrlGetSelections2 + -- * Wrappers + , listBoxGetSelectionList + , execClipBoardData + -- * Deprecated + , wxcAppUSleep + ) where + +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.Types + +import Foreign.Storable +import Foreign.Marshal.Array +import Foreign.Marshal.Utils + + +-- | Get the selections of a tree control. +treeCtrlGetSelections2 :: TreeCtrl a -> IO [TreeItem] +treeCtrlGetSelections2 treeCtrl + = do xs <- treeCtrlGetSelections treeCtrl + return (map treeItemFromInt xs) + +-- | Represents the children of a tree control. +data TreeCookie = TreeCookie (Var Cookie) +data Cookie = Cookie TreeItem + | CookieFirst TreeItem + | CookieInvalid + +-- | Get a @TreeCookie@ to iterate through the children of tree node. +treeCtrlGetChildCookie :: TreeCtrl a -> TreeItem -> IO TreeCookie +treeCtrlGetChildCookie treeCtrl parent + = do pcookie <- varCreate (CookieFirst parent) + return (TreeCookie pcookie) + +-- | Get the next child of a tree node. Returns 'Nothing' when +-- the end of the list is reached. This also invalidates the tree cookie. +treeCtrlGetNextChild2 :: TreeCtrl a -> TreeCookie -> IO (Maybe TreeItem) +treeCtrlGetNextChild2 treeCtrl treeCookie@(TreeCookie pcookie) + = do cookie <- varGet pcookie + case cookie of + CookieInvalid -> return Nothing + CookieFirst item -> with 0 $ \pint -> + do first <- treeCtrlGetFirstChild treeCtrl item pint + if (treeItemIsOk first) + then do varSet pcookie (Cookie first) + return (Just first) + else do varSet pcookie (CookieInvalid) + return Nothing + Cookie item -> + do next <- treeCtrlGetNextSibling treeCtrl item + if (treeItemIsOk next) + then do varSet pcookie (Cookie next) + return (Just next) + else do varSet pcookie (CookieInvalid) + return Nothing + +-- | Iterate on the list of children of a tree node. +treeCtrlWithChildren :: TreeCtrl a -> TreeItem -> (TreeItem -> IO b) -> IO [b] +treeCtrlWithChildren treeCtrl parent f + = do cookie <- treeCtrlGetChildCookie treeCtrl parent + let walk acc = do mbitem <- treeCtrlGetNextChild2 treeCtrl cookie + case mbitem of + Nothing -> return (reverse acc) + Just item -> do x <- f item + walk (x:acc) + walk [] + +-- | Get the children of tree node. +treeCtrlGetChildren :: TreeCtrl a -> TreeItem -> IO [TreeItem] +treeCtrlGetChildren treeCtrl item + = treeCtrlWithChildren treeCtrl item return + +-- | + +-- | Return the current selection in a listbox. +listBoxGetSelectionList :: ListBox a -> IO [Int] +listBoxGetSelectionList listBox + = do n <- listBoxGetSelections listBox ptrNull 0 + let count = abs n + allocaArray count $ \carr -> + do listBoxGetSelections listBox carr count + xs <- peekArray count carr + return (map fromCInt xs) + +-- | Sets the active log target and deletes the old one. +logDeleteAndSetActiveTarget :: Log a -> IO () +logDeleteAndSetActiveTarget log + = do oldlog <- logSetActiveTarget log + when (not (objectIsNull oldlog)) (logDelete oldlog) + + +-- | Set a text control as a log target. +textCtrlMakeLogActiveTarget :: TextCtrl a -> IO () +textCtrlMakeLogActiveTarget textCtrl + = do log <- logTextCtrlCreate textCtrl + logDeleteAndSetActiveTarget log + + +-- | Use a 'clipboardSetData' or 'clipboardGetData' in this function. But don't +-- use long computation in this function. Because this function encloses the +-- computation with 'clipboardOpen' and 'clipboardClose', and wxHaskell uses +-- Global clipboard on your environment. So, long computation causes problem. +execClipBoardData :: Clipboard a -> (Clipboard a -> IO b) -> IO b +execClipBoardData cl event = bracket_ (clipboardOpen cl) (clipboardClose cl) (event cl) + +{-# DEPRECATED wxcAppUSleep "Use wxcAppMilliSleep instead" #-} +-- | This function just left for backward-compatiblity. +-- Update your code to use 'wxcAppMilliSleep' instead. +wxcAppUSleep :: Int -> IO () +wxcAppUSleep = wxcAppMilliSleep
src/haskell/Graphics/UI/WXCore/Defines.hs view
@@ -1,119 +1,119 @@-------------------------------------------------------------------------------------------{-| Module : Defines- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Exports standard /defines/ of wxWidgets.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Defines(- -- * GUI toolkit- WxToolkit(..), wxToolkit, wxVersion- -- * Files- , getAbsoluteFilePath- , dirSep, pathSep- ) where--import System.Directory-import System.FilePath-import Graphics.UI.WXCore.WxcClasses-import System.IO.Unsafe( unsafePerformIO )--{--------------------------------------------------------------------------------- ---------------------------------------------------------------------------------}---- | wxWidgets library kinds.-data WxToolkit = WxGTK -- ^ GTK- | WxMac -- ^ MacOS- | WxMSW -- ^ Any windows- | WxMotif - | WxMGL -- ^ SciTech soft MGL- | WxUniversal- | WxOSTwo -- ^ OS\/2- | WxXEleven -- ^ X11- | WxUnknown- deriving (Eq,Show,Enum)--{-# NOINLINE wxToolkit #-}--- | Get the current wxWidgets library kind.-wxToolkit :: WxToolkit-wxToolkit- = unsafePerformIO $ findDefine WxUnknown toolkits- where- toolkits = [("__WXGTK__", WxGTK)- ,("__WXMAC__", WxMac)- ,("__WXMSW__", WxMSW)- ,("__WXMOTIF__", WxMotif)- ,("__WXMGL__", WxMGL)- ,("__WXUNIVERSAL__", WxUniversal)- ,("__WXOS2__", WxOSTwo)- ,("__WXX11__", WxXEleven)- ]---findDefine :: a -> [(String,a)] -> IO a-findDefine def []- = return def-findDefine def ((name,val):xs)- = do defined <- isDefined name- if (defined)- then return val- else findDefine def xs---{-# NOINLINE wxVersion #-}--- | Return the version of the wxWidgets library. It is composed of the major--- version times 1000, plus the minor version times 100, plus the release number.--- For example, version 2.1.15 would be 2115.-wxVersion :: Int-wxVersion- = unsafePerformIO $ versionNumber----{------------------------------------------------------------------------------------------ relative files------------------------------------------------------------------------------------------}---- | Find a file relative to the application or current directory.--- (absolute paths are passed without modification). This allows one--- to access resources relative to the installation directory in a--- portable way.-getAbsoluteFilePath :: FilePath -> IO FilePath-getAbsoluteFilePath fname- = do exist <- doesFileExist fname- if exist- then return fname- else do appdir <- getApplicationDir- let appdirfname = appdir </> fname- exist <- doesFileExist appdirfname- if exist- then return appdirfname- else do cwd <- getCurrentDirectory - let cwdfname = cwd </> fname- exist <- doesFileExist cwdfname- if exist- then return cwdfname- else return fname--{-# DEPRECATED dirSep "Use System.FilePath module and/or its module's pathSeparator instead" #-}--- | deprecated: Use System.FilePath module and/or its module\'s 'pathSeparator' instead.-dirSep :: String-dirSep- = case wxToolkit of- WxMSW -> "\\"- other -> "/"--{-# DEPRECATED pathSep "Use System.FilePath module's searchPathSeparator instead" #-}--- | deprecated: Use System.FilePath module\'s 'searchPathSeparator' instead.-pathSep :: String-pathSep- = case wxToolkit of- WxMSW -> ";"- other -> ":"-+----------------------------------------------------------------------------------------- +{-| Module : Defines + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Exports standard /defines/ of wxWidgets. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Defines( + -- * GUI toolkit + WxToolkit(..), wxToolkit, wxVersion + -- * Files + , getAbsoluteFilePath + , dirSep, pathSep + ) where + +import System.Directory +import System.FilePath +import Graphics.UI.WXCore.WxcClasses +import System.IO.Unsafe( unsafePerformIO ) + +{-------------------------------------------------------------------------------- + +--------------------------------------------------------------------------------} + +-- | wxWidgets library kinds. +data WxToolkit = WxGTK -- ^ GTK + | WxMac -- ^ MacOS + | WxMSW -- ^ Any windows + | WxMotif + | WxMGL -- ^ SciTech soft MGL + | WxUniversal + | WxOSTwo -- ^ OS\/2 + | WxXEleven -- ^ X11 + | WxUnknown + deriving (Eq,Show,Enum) + +{-# NOINLINE wxToolkit #-} +-- | Get the current wxWidgets library kind. +wxToolkit :: WxToolkit +wxToolkit + = unsafePerformIO $ findDefine WxUnknown toolkits + where + toolkits = [("__WXGTK__", WxGTK) + ,("__WXMAC__", WxMac) + ,("__WXMSW__", WxMSW) + ,("__WXMOTIF__", WxMotif) + ,("__WXMGL__", WxMGL) + ,("__WXUNIVERSAL__", WxUniversal) + ,("__WXOS2__", WxOSTwo) + ,("__WXX11__", WxXEleven) + ] + + +findDefine :: a -> [(String,a)] -> IO a +findDefine def [] + = return def +findDefine def ((name,val):xs) + = do defined <- isDefined name + if (defined) + then return val + else findDefine def xs + + +{-# NOINLINE wxVersion #-} +-- | Return the version of the wxWidgets library. It is composed of the major +-- version times 1000, plus the minor version times 100, plus the release number. +-- For example, version 2.1.15 would be 2115. +wxVersion :: Int +wxVersion + = unsafePerformIO $ versionNumber + + + +{----------------------------------------------------------------------------------------- + relative files +-----------------------------------------------------------------------------------------} + +-- | Find a file relative to the application or current directory. +-- (absolute paths are passed without modification). This allows one +-- to access resources relative to the installation directory in a +-- portable way. +getAbsoluteFilePath :: FilePath -> IO FilePath +getAbsoluteFilePath fname + = do exist <- doesFileExist fname + if exist + then return fname + else do appdir <- getApplicationDir + let appdirfname = appdir </> fname + exist <- doesFileExist appdirfname + if exist + then return appdirfname + else do cwd <- getCurrentDirectory + let cwdfname = cwd </> fname + exist <- doesFileExist cwdfname + if exist + then return cwdfname + else return fname + +{-# DEPRECATED dirSep "Use System.FilePath module and/or its module's pathSeparator instead" #-} +-- | deprecated: Use System.FilePath module and/or its module\'s 'pathSeparator' instead. +dirSep :: String +dirSep + = case wxToolkit of + WxMSW -> "\\" + other -> "/" + +{-# DEPRECATED pathSep "Use System.FilePath module's searchPathSeparator instead" #-} +-- | deprecated: Use System.FilePath module\'s 'searchPathSeparator' instead. +pathSep :: String +pathSep + = case wxToolkit of + WxMSW -> ";" + other -> ":" +
src/haskell/Graphics/UI/WXCore/Dialogs.hs view
@@ -1,298 +1,298 @@----------------------------------------------------------------------------------{-| Module : Dialogs- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Standard dialogs and (non modal) tip windows.--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Dialogs- ( - -- * Messages- errorDialog, warningDialog, infoDialog- , confirmDialog, proceedDialog- -- ** Non-modal- , tipWindowMessage, tipWindowMessageBounded-- -- * Files- , fileOpenDialog- , filesOpenDialog- , fileSaveDialog- , dirOpenDialog- -- * Misc- , fontDialog- , colorDialog- , passwordDialog- , textDialog- , numberDialog- -- * Internal- , messageDialog- , fileDialog- ) where--import Data.List( intersperse )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Draw----- | Opens a non-modal tip window with a text. The window is closed automatically--- when the user clicks the window or when it loses the focus.-tipWindowMessage :: Window a -> String -> IO ()-tipWindowMessage parent message- = do tipWindowCreate parent message 100- return ()---- | Opens a non-modal tip window with a text. The window is closed automatically--- when the mouse leaves the specified area, or when the user clicks the window,--- or when the window loses the focus.-tipWindowMessageBounded :: Window a -> String -> Rect -> IO ()-tipWindowMessageBounded parent message boundingBox- = do tipWindow <- tipWindowCreate parent message 100- tipWindowSetBoundingRect tipWindow boundingBox- return ()---- | Opens a dialog that lets the user select multiple files. See 'fileOpenDialog' for a description--- of the arguments. Returns the empty list when the user selected no files or pressed the cancel button.-filesOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO [FilePath]-filesOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename- = fileDialog parent result flags message wildcards directory filename- where- flags- = wxOPEN .+. wxMULTIPLE- .+. (if rememberCurrentDir then wxCHANGE_DIR else 0)- .+. (if allowReadOnly then 0 else wxHIDE_READONLY)-- result fd r- = if (r /= wxID_OK)- then return []- else fileDialogGetPaths fd---- | Show a modal file selection dialog. Usage:------ > fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename------ If @rememberCurrentDir@ is 'True', the library changes the current directory to the one where the--- files were chosen. @allowReadOnly@ determines whether the read-only files can be selected. The @message@--- is displayed on top of the dialog. The @directory@ is the default directory (use the empty string for--- the current directory). The @filename@ is the default file name. The @wildcards@ determine the entries--- in the file selection box. It consists of a list of pairs: the first element is a description (@"Image files"@)--- and the second element a list of wildcard patterns (@["*.bmp","*.gif"]@).------ > fileOpenDialog frame True True "Open image" [("Any file",["*.*"]),("Bitmaps",["*.bmp"])] "" ""------ Returns 'Nothing' when the user presses the cancel button.-fileOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)-fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename- = fileDialog parent result flags message wildcards directory filename- where- flags- = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if allowReadOnly then 0 else wxHIDE_READONLY)-- result fd r- = if (r /= wxID_OK)- then return Nothing- else do fname <- fileDialogGetPath fd- return (Just fname)---- | Show a modal file save dialog. Usage:------ > fileSaveDialog parent rememberCurrentDir overwritePrompt message directory filename------ The @overwritePrompt@ argument determines whether the user gets a prompt for confirmation when--- overwriting a file. The other arguments are as in 'fileOpenDialog'.-fileSaveDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath)-fileSaveDialog parent rememberCurrentDir overwritePrompt message wildcards directory filename- = fileDialog parent result flags message wildcards directory filename- where- flags- = wxSAVE .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if overwritePrompt then wxOVERWRITE_PROMPT else 0)-- result fd r- = if (r /= wxID_OK)- then return Nothing- else do fname <- fileDialogGetPath fd- return (Just fname)----- | Generic file dialog function. Takes a function that is called when the dialog is--- terminated, style flags, a message, a list of wildcards, a directory, and a file name.--- For example:--- --- > fileOpenDialog --- > = fileDialog parent result flags message wildcards directory filename--- > where--- > flags--- > = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) --- > .+. (if allowReadOnly then 0 else wxHIDE_READONLY)--- >--- > result fd r--- > = if (r /= wxID_OK)--- > then return Nothing--- > else do fname <- fileDialogGetPath fd--- > return (Just fname)--fileDialog :: Window a -> (FileDialog () -> Int -> IO b) -> Int -> String -> [(String,[String])] -> FilePath -> FilePath -> IO b-fileDialog parent processResult flags message wildcards directory filename- = bracket- (fileDialogCreate parent message directory filename (formatWildCards wildcards) pointNull flags)- (windowDestroy)- (\fd -> do r <- dialogShowModal fd- processResult fd r)-- where- formatWildCards wildcards- = concat (intersperse "|"- [desc ++ "|" ++ concat (intersperse ";" patterns) | (desc,patterns) <- wildcards])----- | Show a font selection dialog with a given initial font. Returns 'Nothing' when cancel was pressed.-fontDialog :: Window a -> FontStyle -> IO (Maybe FontStyle)-fontDialog parent fontStyle- = withFontStyle fontStyle $ \font ->- bracket (getFontFromUser parent font)- (fontDelete)- (\f -> do ok <- fontIsOk f- if ok- then do info <- fontGetFontStyle f- return (Just info)- else return Nothing)--{-- bracket (fontDataCreate) (fontDataDelete) $- \fdata -> bracket (fontDialogCreate parent fdata) (windowDestroy) $- \fd -> do r <- dialogShowModal fd- if (r /= wxID_OK)- then return Nothing- else bracket (fontDataGetChosenFont fdata) (fontDelete) $- \font -> do info <- fontGetFontInfo font- return (Just info)--}---- | Show a color selection dialog given an initial color. Returns 'Nothing' when cancel was pressed.-colorDialog :: Window a -> Color -> IO (Maybe Color)-colorDialog parent color- = do c <- getColourFromUser parent color- if (colorIsOk c)- then return (Just c)- else return Nothing---- | Retrieve a password from a user. Returns the empty string on cancel. Usage:------ > passwordDialog window message caption defaultText----passwordDialog :: Window a -> String -> String -> String -> IO String-passwordDialog parent message caption defaultText- = getPasswordFromUser message caption defaultText parent---- | Retrieve a text string from a user. Returns the empty string on cancel. Usage:------ > textDialog window message caption defaultText----textDialog :: Window a -> String -> String -> String -> IO String-textDialog parent message caption defaultText- = getTextFromUser message caption defaultText parent pointNull False---- | Retrieve a /positive/ number from a user. Returns 'Nothing' on cancel. Usage:------ > numberDialog window message prompt caption initialValue minimum maximum----numberDialog :: Window a -> String -> String -> String -> Int -> Int -> Int -> IO (Maybe Int)-numberDialog parent message prompt caption value minval maxval- = let minval' = if minval < 0 then 0 else minval- maxval' = if maxval < minval' then minval' else maxval- value' | value < minval' = minval'- | value > maxval' = maxval'- | otherwise = value- in do i <- getNumberFromUser message prompt caption value' minval' maxval' parent pointNull- if (i == -1)- then return Nothing- else return (Just i)------ | Show a modal directory dialog. Usage:------ > dirOpenDialog parent allowNewDir message directory------ The @allowNewDir@ argument determines whether the user can create new directories and edit--- directory names. The @message@ is displayed on top of the dialog and @directory@ is the--- default directory (or empty for the current directory). Return 'Nothing' when the users--- presses the cancel button.-dirOpenDialog :: Window a -> Bool -> FilePath -> FilePath -> IO (Maybe FilePath)-dirOpenDialog parent allowNewDir message directory- = bracket- (dirDialogCreate parent message directory pointNull flags)- (windowDestroy)- (\dd -> do r <- dialogShowModal dd- if (r /= wxID_OK)- then return Nothing- else do path <- dirDialogGetPath dd- return (Just path))- where- flags- = if allowNewDir then 0x80 {- wxDD_NEW_DIR_BUTTON -} else 0----- | An dialog with an /Ok/ and /Cancel/ button. Returns 'True' when /Ok/ is pressed.------ > proceedDialog parent "Error" "Do you want to debug this application?"----proceedDialog :: Window a -> String -> String -> IO Bool-proceedDialog parent caption msg- = do r <- messageDialog parent caption msg (wxOK .+. wxCANCEL .+. wxICON_EXCLAMATION)- return (r==wxID_OK)---- | The expression (@confirmDialog caption msg yesDefault parent@) shows a confirm dialog--- with a /Yes/ and /No/ button. If @yesDefault@ is 'True', the /Yes/ button is default,--- otherwise the /No/ button. Returns 'True' when the /Yes/ button was pressed.------ > yes <- confirmDialog parent "confirm" "are you sure that you want to reformat the hardisk?"----confirmDialog :: Window a -> String -> String -> Bool -> IO Bool-confirmDialog parent caption msg yesDefault- = do r <- messageDialog parent caption msg- (wxYES_NO .+. (if yesDefault then wxYES_DEFAULT else wxNO_DEFAULT) .+. wxICON_QUESTION)- return (r==wxID_YES)---- | An warning dialog with a single /Ok/ button.------ > warningDialog parent "warning" "you need a break"----warningDialog :: Window a -> String -> String -> IO ()-warningDialog parent caption msg- = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_EXCLAMATION))---- | An error dialog with a single /Ok/ button.------ > errorDialog parent "error" "fatal error, please re-install windows"----errorDialog :: Window a -> String -> String -> IO ()-errorDialog parent caption msg- = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_HAND))---- | An information dialog with a single /Ok/ button.------ > infoDialog parent "info" "you've got mail"----infoDialog :: Window a -> String -> String -> IO ()-infoDialog parent caption msg- = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_INFORMATION))---- | A primitive message dialog, specify icons and buttons.------ > r <- messageDialog w "Confirm" "Do you really want that?"--- > (wxYES_NO .+. wxNO_DEFAULT .+. wxICON_QUESTION)----messageDialog :: Window a -> String -> String -> BitFlag -> IO BitFlag-messageDialog parent caption msg flags- = do m <- messageDialogCreate parent msg caption flags- r <- messageDialogShowModal m- messageDialogDelete m- return r+-------------------------------------------------------------------------------- +{-| Module : Dialogs + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Standard dialogs and (non modal) tip windows. +-} +-------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Dialogs + ( + -- * Messages + errorDialog, warningDialog, infoDialog + , confirmDialog, proceedDialog + -- ** Non-modal + , tipWindowMessage, tipWindowMessageBounded + + -- * Files + , fileOpenDialog + , filesOpenDialog + , fileSaveDialog + , dirOpenDialog + -- * Misc + , fontDialog + , colorDialog + , passwordDialog + , textDialog + , numberDialog + -- * Internal + , messageDialog + , fileDialog + ) where + +import Data.List( intersperse ) +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Draw + + +-- | Opens a non-modal tip window with a text. The window is closed automatically +-- when the user clicks the window or when it loses the focus. +tipWindowMessage :: Window a -> String -> IO () +tipWindowMessage parent message + = do tipWindowCreate parent message 100 + return () + +-- | Opens a non-modal tip window with a text. The window is closed automatically +-- when the mouse leaves the specified area, or when the user clicks the window, +-- or when the window loses the focus. +tipWindowMessageBounded :: Window a -> String -> Rect -> IO () +tipWindowMessageBounded parent message boundingBox + = do tipWindow <- tipWindowCreate parent message 100 + tipWindowSetBoundingRect tipWindow boundingBox + return () + +-- | Opens a dialog that lets the user select multiple files. See 'fileOpenDialog' for a description +-- of the arguments. Returns the empty list when the user selected no files or pressed the cancel button. +filesOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO [FilePath] +filesOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename + = fileDialog parent result flags message wildcards directory filename + where + flags + = wxOPEN .+. wxMULTIPLE + .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) + .+. (if allowReadOnly then 0 else wxHIDE_READONLY) + + result fd r + = if (r /= wxID_OK) + then return [] + else fileDialogGetPaths fd + +-- | Show a modal file selection dialog. Usage: +-- +-- > fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename +-- +-- If @rememberCurrentDir@ is 'True', the library changes the current directory to the one where the +-- files were chosen. @allowReadOnly@ determines whether the read-only files can be selected. The @message@ +-- is displayed on top of the dialog. The @directory@ is the default directory (use the empty string for +-- the current directory). The @filename@ is the default file name. The @wildcards@ determine the entries +-- in the file selection box. It consists of a list of pairs: the first element is a description (@"Image files"@) +-- and the second element a list of wildcard patterns (@["*.bmp","*.gif"]@). +-- +-- > fileOpenDialog frame True True "Open image" [("Any file",["*.*"]),("Bitmaps",["*.bmp"])] "" "" +-- +-- Returns 'Nothing' when the user presses the cancel button. +fileOpenDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath) +fileOpenDialog parent rememberCurrentDir allowReadOnly message wildcards directory filename + = fileDialog parent result flags message wildcards directory filename + where + flags + = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if allowReadOnly then 0 else wxHIDE_READONLY) + + result fd r + = if (r /= wxID_OK) + then return Nothing + else do fname <- fileDialogGetPath fd + return (Just fname) + +-- | Show a modal file save dialog. Usage: +-- +-- > fileSaveDialog parent rememberCurrentDir overwritePrompt message directory filename +-- +-- The @overwritePrompt@ argument determines whether the user gets a prompt for confirmation when +-- overwriting a file. The other arguments are as in 'fileOpenDialog'. +fileSaveDialog :: Window a -> Bool -> Bool -> String -> [(String,[String])] -> FilePath -> FilePath -> IO (Maybe FilePath) +fileSaveDialog parent rememberCurrentDir overwritePrompt message wildcards directory filename + = fileDialog parent result flags message wildcards directory filename + where + flags + = wxSAVE .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) .+. (if overwritePrompt then wxOVERWRITE_PROMPT else 0) + + result fd r + = if (r /= wxID_OK) + then return Nothing + else do fname <- fileDialogGetPath fd + return (Just fname) + + +-- | Generic file dialog function. Takes a function that is called when the dialog is +-- terminated, style flags, a message, a list of wildcards, a directory, and a file name. +-- For example: +-- +-- > fileOpenDialog +-- > = fileDialog parent result flags message wildcards directory filename +-- > where +-- > flags +-- > = wxOPEN .+. (if rememberCurrentDir then wxCHANGE_DIR else 0) +-- > .+. (if allowReadOnly then 0 else wxHIDE_READONLY) +-- > +-- > result fd r +-- > = if (r /= wxID_OK) +-- > then return Nothing +-- > else do fname <- fileDialogGetPath fd +-- > return (Just fname) + +fileDialog :: Window a -> (FileDialog () -> Int -> IO b) -> Int -> String -> [(String,[String])] -> FilePath -> FilePath -> IO b +fileDialog parent processResult flags message wildcards directory filename + = bracket + (fileDialogCreate parent message directory filename (formatWildCards wildcards) pointNull flags) + (windowDestroy) + (\fd -> do r <- dialogShowModal fd + processResult fd r) + + where + formatWildCards wildcards + = concat (intersperse "|" + [desc ++ "|" ++ concat (intersperse ";" patterns) | (desc,patterns) <- wildcards]) + + +-- | Show a font selection dialog with a given initial font. Returns 'Nothing' when cancel was pressed. +fontDialog :: Window a -> FontStyle -> IO (Maybe FontStyle) +fontDialog parent fontStyle + = withFontStyle fontStyle $ \font -> + bracket (getFontFromUser parent font) + (fontDelete) + (\f -> do ok <- fontIsOk f + if ok + then do info <- fontGetFontStyle f + return (Just info) + else return Nothing) + +{- + bracket (fontDataCreate) (fontDataDelete) $ + \fdata -> bracket (fontDialogCreate parent fdata) (windowDestroy) $ + \fd -> do r <- dialogShowModal fd + if (r /= wxID_OK) + then return Nothing + else bracket (fontDataGetChosenFont fdata) (fontDelete) $ + \font -> do info <- fontGetFontInfo font + return (Just info) +-} + +-- | Show a color selection dialog given an initial color. Returns 'Nothing' when cancel was pressed. +colorDialog :: Window a -> Color -> IO (Maybe Color) +colorDialog parent color + = do c <- getColourFromUser parent color + if (colorIsOk c) + then return (Just c) + else return Nothing + +-- | Retrieve a password from a user. Returns the empty string on cancel. Usage: +-- +-- > passwordDialog window message caption defaultText +-- +passwordDialog :: Window a -> String -> String -> String -> IO String +passwordDialog parent message caption defaultText + = getPasswordFromUser message caption defaultText parent + +-- | Retrieve a text string from a user. Returns the empty string on cancel. Usage: +-- +-- > textDialog window message caption defaultText +-- +textDialog :: Window a -> String -> String -> String -> IO String +textDialog parent message caption defaultText + = getTextFromUser message caption defaultText parent pointNull False + +-- | Retrieve a /positive/ number from a user. Returns 'Nothing' on cancel. Usage: +-- +-- > numberDialog window message prompt caption initialValue minimum maximum +-- +numberDialog :: Window a -> String -> String -> String -> Int -> Int -> Int -> IO (Maybe Int) +numberDialog parent message prompt caption value minval maxval + = let minval' = if minval < 0 then 0 else minval + maxval' = if maxval < minval' then minval' else maxval + value' | value < minval' = minval' + | value > maxval' = maxval' + | otherwise = value + in do i <- getNumberFromUser message prompt caption value' minval' maxval' parent pointNull + if (i == -1) + then return Nothing + else return (Just i) + + + +-- | Show a modal directory dialog. Usage: +-- +-- > dirOpenDialog parent allowNewDir message directory +-- +-- The @allowNewDir@ argument determines whether the user can create new directories and edit +-- directory names. The @message@ is displayed on top of the dialog and @directory@ is the +-- default directory (or empty for the current directory). Return 'Nothing' when the users +-- presses the cancel button. +dirOpenDialog :: Window a -> Bool -> FilePath -> FilePath -> IO (Maybe FilePath) +dirOpenDialog parent allowNewDir message directory + = bracket + (dirDialogCreate parent message directory pointNull flags) + (windowDestroy) + (\dd -> do r <- dialogShowModal dd + if (r /= wxID_OK) + then return Nothing + else do path <- dirDialogGetPath dd + return (Just path)) + where + flags + = if allowNewDir then 0x80 {- wxDD_NEW_DIR_BUTTON -} else 0 + + +-- | An dialog with an /Ok/ and /Cancel/ button. Returns 'True' when /Ok/ is pressed. +-- +-- > proceedDialog parent "Error" "Do you want to debug this application?" +-- +proceedDialog :: Window a -> String -> String -> IO Bool +proceedDialog parent caption msg + = do r <- messageDialog parent caption msg (wxOK .+. wxCANCEL .+. wxICON_EXCLAMATION) + return (r==wxID_OK) + +-- | The expression (@confirmDialog caption msg yesDefault parent@) shows a confirm dialog +-- with a /Yes/ and /No/ button. If @yesDefault@ is 'True', the /Yes/ button is default, +-- otherwise the /No/ button. Returns 'True' when the /Yes/ button was pressed. +-- +-- > yes <- confirmDialog parent "confirm" "are you sure that you want to reformat the hardisk?" +-- +confirmDialog :: Window a -> String -> String -> Bool -> IO Bool +confirmDialog parent caption msg yesDefault + = do r <- messageDialog parent caption msg + (wxYES_NO .+. (if yesDefault then wxYES_DEFAULT else wxNO_DEFAULT) .+. wxICON_QUESTION) + return (r==wxID_YES) + +-- | An warning dialog with a single /Ok/ button. +-- +-- > warningDialog parent "warning" "you need a break" +-- +warningDialog :: Window a -> String -> String -> IO () +warningDialog parent caption msg + = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_EXCLAMATION)) + +-- | An error dialog with a single /Ok/ button. +-- +-- > errorDialog parent "error" "fatal error, please re-install windows" +-- +errorDialog :: Window a -> String -> String -> IO () +errorDialog parent caption msg + = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_HAND)) + +-- | An information dialog with a single /Ok/ button. +-- +-- > infoDialog parent "info" "you've got mail" +-- +infoDialog :: Window a -> String -> String -> IO () +infoDialog parent caption msg + = unitIO (messageDialog parent caption msg (wxOK .+. wxICON_INFORMATION)) + +-- | A primitive message dialog, specify icons and buttons. +-- +-- > r <- messageDialog w "Confirm" "Do you really want that?" +-- > (wxYES_NO .+. wxNO_DEFAULT .+. wxICON_QUESTION) +-- +messageDialog :: Window a -> String -> String -> BitFlag -> IO BitFlag +messageDialog parent caption msg flags + = do m <- messageDialogCreate parent msg caption flags + r <- messageDialogShowModal m + messageDialogDelete m + return r
src/haskell/Graphics/UI/WXCore/DragAndDrop.hs view
@@ -1,94 +1,94 @@-------------------------------------------------------------------------------------------{-| Module : DragAndDrop- Copyright : (c) shelarcy 2007- License : wxWidgets-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Drag & Drop events.--}--------------------------------------------------------------------------------------------module Graphics.UI.WXCore.DragAndDrop (- -- * Drop Targets- dropTarget-- -- * Create Drop Soruces- , dropSource- , dropSourceWithCursor- , dropSourceWithCursorByString- , dropSourceWithIcon- ) where--import Graphics.UI.WXCore.Defines-import Graphics.UI.WXCore.Events-import Graphics.UI.WXCore.Image-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcObject-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcClassTypes-import Graphics.UI.WXCore.WxcClassesAL-import Graphics.UI.WXCore.WxcClassesMZ--import Foreign.Ptr-import Foreign.C.String-import Foreign.Marshal.Array---{--------------------------------------------------------------------------------- Drop Target---------------------------------------------------------------------------------}--- | Set a drop target window and 'DataObject' that is associated with drop event.-dropTarget :: Window a -> DataObject b -> IO (WXCDropTarget ())-dropTarget window wxdata = do- drop <- wxcDropTargetCreate nullPtr- dropTargetSetDataObject drop wxdata- windowSetDropTarget window drop- return drop---- | Create 'DropSource'. Then 'dragAndDrop' replace target\'s 'DataObject' by this 'DataObject'.-dropSource :: DataObject a -> Window b -> IO (DropSource ())-dropSource wxdata win =- withObjectPtr nullIcon $ \icon ->- withObjectPtr nullIcon $ \icon ->- withObjectPtr nullIcon $ \icon ->- dropSourceCreate wxdata win icon icon icon---- | On Windows or Mac OS X platform, you must choose this function or 'dropSourceWithCursorByString',--- if you want to use Custom Cursor for Drag & Drop event. 'dropSourceWithIcon' doesn't work these--- platform, and this function doesn't work other platforms.-dropSourceWithCursor :: DataObject a -> Window b -> Cursor c -> Cursor c -> Cursor c -> IO (DropSource ())-dropSourceWithCursor wxdata win copy move none =- withObjectPtr copy $ \dndCopy ->- withObjectPtr move $ \dndMove ->- withObjectPtr none $ \dndNone ->- dropSourceCreate wxdata win dndCopy dndMove dndNone--dropSourceWithIcon :: DataObject a -> Window b -> Icon c -> Icon c -> Icon c -> IO (DropSource ())-dropSourceWithIcon wxdata win copy move none =- withObjectPtr copy $ \dndCopy ->- withObjectPtr move $ \dndMove ->- withObjectPtr none $ \dndNone ->- dropSourceCreate wxdata win dndCopy dndMove dndNone--dropSourceWithCursorByString :: DataObject a -> Window b -> String -> String -> String -> IO (DropSource ())-dropSourceWithCursorByString wxdata win copy move none =- case wxToolkit of- WxMSW -> do- dndCopy <- cursorCreateFromFile copy- dndMove <- cursorCreateFromFile move- dndNone <- cursorCreateFromFile none- dropSourceWithCursor wxdata win dndCopy dndMove dndNone- WxMac -> do- dndCopy <- cursorCreateFromFile copy- dndMove <- cursorCreateFromFile move- dndNone <- cursorCreateFromFile none- dropSourceWithCursor wxdata win dndCopy dndMove dndNone- _ -> do- dndCopy <- iconCreateFromFile copy sizeNull- dndMove <- iconCreateFromFile move sizeNull- dndNone <- iconCreateFromFile none sizeNull- dropSourceWithIcon wxdata win dndCopy dndMove dndNone-+----------------------------------------------------------------------------------------- +{-| Module : DragAndDrop + Copyright : (c) shelarcy 2007 + License : wxWidgets + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Drag & Drop events. +-} +----------------------------------------------------------------------------------------- + +module Graphics.UI.WXCore.DragAndDrop ( + -- * Drop Targets + dropTarget + + -- * Create Drop Soruces + , dropSource + , dropSourceWithCursor + , dropSourceWithCursorByString + , dropSourceWithIcon + ) where + +import Graphics.UI.WXCore.Defines +import Graphics.UI.WXCore.Events +import Graphics.UI.WXCore.Image +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcObject +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcClassTypes +import Graphics.UI.WXCore.WxcClassesAL +import Graphics.UI.WXCore.WxcClassesMZ + +import Foreign.Ptr +import Foreign.C.String +import Foreign.Marshal.Array + + +{-------------------------------------------------------------------------------- + Drop Target +--------------------------------------------------------------------------------} +-- | Set a drop target window and 'DataObject' that is associated with drop event. +dropTarget :: Window a -> DataObject b -> IO (WXCDropTarget ()) +dropTarget window wxdata = do + drop <- wxcDropTargetCreate nullPtr + dropTargetSetDataObject drop wxdata + windowSetDropTarget window drop + return drop + +-- | Create 'DropSource'. Then 'dragAndDrop' replace target\'s 'DataObject' by this 'DataObject'. +dropSource :: DataObject a -> Window b -> IO (DropSource ()) +dropSource wxdata win = + withObjectPtr nullIcon $ \icon -> + withObjectPtr nullIcon $ \icon -> + withObjectPtr nullIcon $ \icon -> + dropSourceCreate wxdata win icon icon icon + +-- | On Windows or Mac OS X platform, you must choose this function or 'dropSourceWithCursorByString', +-- if you want to use Custom Cursor for Drag & Drop event. 'dropSourceWithIcon' doesn't work these +-- platform, and this function doesn't work other platforms. +dropSourceWithCursor :: DataObject a -> Window b -> Cursor c -> Cursor c -> Cursor c -> IO (DropSource ()) +dropSourceWithCursor wxdata win copy move none = + withObjectPtr copy $ \dndCopy -> + withObjectPtr move $ \dndMove -> + withObjectPtr none $ \dndNone -> + dropSourceCreate wxdata win dndCopy dndMove dndNone + +dropSourceWithIcon :: DataObject a -> Window b -> Icon c -> Icon c -> Icon c -> IO (DropSource ()) +dropSourceWithIcon wxdata win copy move none = + withObjectPtr copy $ \dndCopy -> + withObjectPtr move $ \dndMove -> + withObjectPtr none $ \dndNone -> + dropSourceCreate wxdata win dndCopy dndMove dndNone + +dropSourceWithCursorByString :: DataObject a -> Window b -> String -> String -> String -> IO (DropSource ()) +dropSourceWithCursorByString wxdata win copy move none = + case wxToolkit of + WxMSW -> do + dndCopy <- cursorCreateFromFile copy + dndMove <- cursorCreateFromFile move + dndNone <- cursorCreateFromFile none + dropSourceWithCursor wxdata win dndCopy dndMove dndNone + WxMac -> do + dndCopy <- cursorCreateFromFile copy + dndMove <- cursorCreateFromFile move + dndNone <- cursorCreateFromFile none + dropSourceWithCursor wxdata win dndCopy dndMove dndNone + _ -> do + dndCopy <- iconCreateFromFile copy sizeNull + dndMove <- iconCreateFromFile move sizeNull + dndNone <- iconCreateFromFile none sizeNull + dropSourceWithIcon wxdata win dndCopy dndMove dndNone +
src/haskell/Graphics/UI/WXCore/Draw.hs view
@@ -1,847 +1,850 @@-------------------------------------------------------------------------------------------{-| Module : Draw- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Drawing.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Draw- (- -- * DC- drawLines, drawPolygon, getTextExtent, getFullTextExtent, dcClearRect- -- ** Creation- , withPaintDC, withClientDC, dcDraw- , withSVGFileDC, withSVGFileDCWithSize, withSVGFileDCWithSizeAndResolution- -- ** Draw state- , DrawState, dcEncapsulate, dcGetDrawState, dcSetDrawState, drawStateDelete- -- ** Double buffering- , dcBuffer, dcBufferWithRef, dcBufferWithRefEx- -- * Scrolled windows- , windowGetViewStart, windowGetViewRect, windowCalcUnscrolledPosition- -- * Font- , FontStyle(..), FontFamily(..), FontShape(..), FontWeight(..)- , fontDefault, fontSwiss, fontSmall, fontItalic, fontFixed- , withFontStyle, dcWithFontStyle- , dcSetFontStyle, dcGetFontStyle- , fontCreateFromStyle, fontGetFontStyle- -- * Brush- , BrushStyle(..), BrushKind(..)- , HatchStyle(..)- , brushDefault, brushSolid, brushTransparent- , dcSetBrushStyle, dcGetBrushStyle- , withBrushStyle, dcWithBrushStyle, dcWithBrush- , brushCreateFromStyle, brushGetBrushStyle- -- * Pen- , PenStyle(..), PenKind(..), CapStyle(..), JoinStyle(..), DashStyle(..)- , penDefault, penColored, penTransparent- , dcSetPenStyle, dcGetPenStyle- , withPenStyle, dcWithPenStyle, dcWithPen- , penCreateFromStyle, penGetPenStyle- ) where--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines--import Foreign.Marshal.Array-import Foreign.Storable-import Foreign.Marshal.Alloc---{--------------------------------------------------------------------------------- DC creation---------------------------------------------------------------------------------}--- | Safely perform a drawing operation on a DC.-dcDraw :: DC a -> IO b -> IO b-dcDraw dc io- = bracket_ (do dcSetPenStyle dc penDefault- dcSetBrushStyle dc brushDefault) - (do dcSetPen dc nullPen- dcSetBrush dc nullBrush) - io---- | Use a 'PaintDC'.-withPaintDC :: Window a -> (PaintDC () -> IO b) -> IO b-withPaintDC window draw- = bracket (paintDCCreate window) (paintDCDelete) (\dc -> dcDraw dc (draw dc))---- | Use a 'ClientDC'.-withClientDC :: Window a -> (ClientDC () -> IO b) -> IO b-withClientDC window draw- = bracket (clientDCCreate window) (clientDCDelete) (\dc -> dcDraw dc (draw dc))---- | Use a 'SVGFileDC'.-withSVGFileDC :: FilePath -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDC fname draw- = bracket (svgFileDCCreate fname) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))--withSVGFileDCWithSize :: FilePath -> Size -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDCWithSize fname size draw- = bracket (svgFileDCCreateWithSize fname size) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))--withSVGFileDCWithSizeAndResolution :: FilePath -> Size -> Float -> (SVGFileDC () -> IO b) -> IO b-withSVGFileDCWithSizeAndResolution fname size dpi draw- = bracket (svgFileDCCreateWithSizeAndResolution fname size dpi) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc))----- | Clear a specific rectangle with the current background brush.--- This is preferred to 'dcClear' for scrolled windows as 'dcClear' sometimes--- only clears the original view area, instead of the currently visible scrolled area.--- Unfortunately, the background brush is not set correctly on wxMAC 2.4, and --- this will always clear to a white color on mac systems.-dcClearRect :: DC a -> Rect -> IO ()-dcClearRect dc r- = bracket (dcGetBackground dc)- (brushDelete)- (\brush -> dcWithBrush dc brush $- dcWithPenStyle dc penTransparent $ - dcDrawRectangle dc r)---- | Fill a rectangle with a certain color.-dcFillRect :: DC a -> Rect -> Color -> IO ()-dcFillRect dc r color- = dcWithBrushStyle dc (brushSolid color) $- dcWithPenStyle dc penTransparent $- dcDrawRectangle dc r--{--------------------------------------------------------------------------------- Windows---------------------------------------------------------------------------------}--- | Get logical view rectangle, adjusted for scrolling.-windowGetViewRect :: Window a -> IO Rect-windowGetViewRect window- = do size <- windowGetClientSize window- org <- windowGetViewStart window- return (rect org size)---- | Get logical view start, adjusted for scrolling.-windowGetViewStart :: Window a -> IO Point-windowGetViewStart window- = do isScrolled <- objectIsScrolledWindow window- -- adjust coordinates for a scrolled window- if (isScrolled)- then do let scrolledWindow = objectCast window- (Point sx sy) <- scrolledWindowGetViewStart scrolledWindow- (Point w h) <- scrolledWindowGetScrollPixelsPerUnit scrolledWindow- return (Point (w*sx) (h*sy))- else return pointZero---- | Get logical coordinates adjusted for scrolling.-windowCalcUnscrolledPosition :: Window a -> Point -> IO Point-windowCalcUnscrolledPosition window p- = do isScrolled <- objectIsScrolledWindow window- -- adjust coordinates for a scrolled window- if (isScrolled)- then do let scrolledWindow = objectCast window- scrolledWindowCalcUnscrolledPosition scrolledWindow p- else return p--{--------------------------------------------------------------------------------- Font---------------------------------------------------------------------------------}----- | Font descriptor. The font is normally specified thru the 'FontFamily', giving--- some degree of portability. The '_fontFace' can be used to specify the exact (platform--- dependent) font. ------ Note that the original wxWidgets @FontStyle@ is renamed to @FontShape@.-data FontStyle- = FontStyle{ _fontSize :: !Int- , _fontFamily :: !FontFamily- , _fontShape :: !FontShape- , _fontWeight :: !FontWeight- , _fontUnderline :: !Bool- , _fontFace :: !String -- ^ normally @\"\"@- , _fontEncoding :: !Int -- ^ normally @wxFONTENCODING_DEFAULT@- }- deriving (Eq,Show)---- | Default 10pt font.-fontDefault :: FontStyle-fontDefault- = FontStyle 10 FontDefault ShapeNormal WeightNormal False "" wxFONTENCODING_DEFAULT---- | Default 10pt sans-serif font.-fontSwiss :: FontStyle-fontSwiss- = fontDefault{ _fontFamily = FontSwiss }---- | Default 8pt font.-fontSmall :: FontStyle-fontSmall- = fontDefault{ _fontSize = 8 }---- | Default 10pt italic.-fontItalic :: FontStyle-fontItalic- = fontDefault{ _fontShape = ShapeItalic }---- | Monospaced font, 10pt.-fontFixed :: FontStyle-fontFixed - = fontDefault{ _fontFamily = FontModern }---- | Standard font families.-data FontFamily- = FontDefault -- ^ A system default font.- | FontDecorative -- ^ Decorative font.- | FontRoman -- ^ Formal serif font.- | FontScript -- ^ Hand writing font.- | FontSwiss -- ^ Sans-serif font.- | FontModern -- ^ Fixed pitch font.- deriving (Eq,Show)---- | The font style.-data FontShape- = ShapeNormal- | ShapeItalic- | ShapeSlant- deriving (Eq,Show)---- | The font weight.-data FontWeight- = WeightNormal- | WeightBold- | WeightLight- deriving (Eq,Show)---- | Use a font that is automatically deleted at the end of the computation.-withFontStyle :: FontStyle -> (Font () -> IO a) -> IO a-withFontStyle fontStyle f- = do (font,delete) <- fontCreateFromStyle fontStyle- finally (f font) delete----- | Set a font that is automatically deleted at the end of the computation.-dcWithFontStyle :: DC a -> FontStyle -> IO b -> IO b-dcWithFontStyle dc fontStyle io- = withFontStyle fontStyle $ \font ->- bracket (do oldFont <- dcGetFont dc- dcSetFont dc font- return oldFont)- (\oldFont ->- do dcSetFont dc oldFont -- restore previous font- fontDelete oldFont)- (const io)---- | Set the font info of a DC.-dcSetFontStyle :: DC a -> FontStyle -> IO ()-dcSetFontStyle dc info- = do (font,del) <- fontCreateFromStyle info- finalize del $- do dcSetFont dc font---- | Get the current font info.-dcGetFontStyle :: DC a -> IO FontStyle-dcGetFontStyle dc- = do font <- dcGetFont dc- finalize (fontDelete font) $- do fontGetFontStyle font----- | Create a 'Font' from 'FontStyle'. Returns both the font and a deletion procedure.-fontCreateFromStyle :: FontStyle -> IO (Font (),IO ())-fontCreateFromStyle (FontStyle size family style weight underline face encoding)- = do font <- fontCreate size cfamily cstyle cweight underline face encoding- return (font,when (font /= objectNull) (fontDelete font))- where- cfamily- = case family of- FontDefault -> wxDEFAULT- FontDecorative -> wxDECORATIVE- FontRoman -> wxROMAN- FontScript -> wxSCRIPT- FontSwiss -> wxSWISS- FontModern -> wxMODERN-- cstyle- = case style of- ShapeNormal -> wxNORMAL- ShapeItalic -> wxITALIC- ShapeSlant -> wxSLANT-- cweight- = case weight of- WeightNormal -> wxNORMAL- WeightBold -> wxBOLD- WeightLight -> wxLIGHT----- | Get the 'FontStyle' from a 'Font' object.-fontGetFontStyle :: Font () -> IO FontStyle-fontGetFontStyle font- = if (objectIsNull font)- then return fontDefault- else do ok <- fontIsOk font- if not ok- then return fontDefault- else do size <- fontGetPointSize font- cfamily <- fontGetFamily font- cstyle <- fontGetStyle font- cweight <- fontGetWeight font- cunderl <- fontGetUnderlined font- face <- fontGetFaceName font- enc <- fontGetEncoding font- return (FontStyle size (toFamily cfamily) (toStyle cstyle) - (toWeight cweight) - (cunderl /= 0) face enc)- where- toFamily f- | f == wxDECORATIVE = FontDecorative- | f == wxROMAN = FontRoman- | f == wxSCRIPT = FontScript- | f == wxSWISS = FontSwiss- | f == wxMODERN = FontModern- | otherwise = FontDefault-- toStyle s- | s == wxITALIC = ShapeItalic- | s == wxSLANT = ShapeSlant- | otherwise = ShapeNormal-- toWeight w- | w == wxBOLD = WeightBold- | w == wxLIGHT = WeightLight- | otherwise = WeightNormal---{--------------------------------------------------------------------------------- Pen---------------------------------------------------------------------------------}---- | Pen style.-data PenStyle- = PenStyle { _penKind :: !PenKind- , _penColor :: !Color- , _penWidth :: !Int- , _penCap :: !CapStyle- , _penJoin :: !JoinStyle - }- deriving (Eq,Show)---- | Pen kinds.-data PenKind- = PenTransparent -- ^ No edge.- | PenSolid- | PenDash { _penDash :: !DashStyle }- | PenHatch { _penHatch :: !HatchStyle }- | PenStipple{ _penBitmap :: !(Bitmap ())} -- ^ @_penColor@ is ignored- deriving (Eq,Show)---- | Default pen (@PenStyle PenSolid black 1 CapRound JoinRound@)-penDefault :: PenStyle-penDefault- = PenStyle PenSolid black 1 CapRound JoinRound---- | A solid pen with a certain color and width.-penColored :: Color -> Int -> PenStyle-penColored color width- = penDefault{ _penColor = color, _penWidth = width }---- | A transparent pen.-penTransparent :: PenStyle-penTransparent- = penDefault{ _penKind = PenTransparent }---- | Dash style-data DashStyle- = DashDot- | DashLong- | DashShort- | DashDotShort- -- DashUser [Int]- deriving (Eq,Show)---- | Cap style-data CapStyle- = CapRound -- ^ End points are rounded- | CapProjecting- | CapButt- deriving (Eq,Show)---- | Join style.-data JoinStyle- = JoinRound -- ^ Corners are rounded- | JoinBevel -- ^ Corners are bevelled- | JoinMiter -- ^ Corners are blocked- deriving (Eq,Show)---- | Hatch style.-data HatchStyle- = HatchBDiagonal -- ^ Backward diagonal- | HatchCrossDiag -- ^ Crossed diagonal- | HatchFDiagonal -- ^ Forward diagonal- | HatchCross -- ^ Crossed orthogonal- | HatchHorizontal -- ^ Horizontal- | HatchVertical -- ^ Vertical- deriving (Eq,Show)---- | Brush style.-data BrushStyle- = BrushStyle { _brushKind :: !BrushKind, _brushColor :: !Color }- deriving (Eq,Show)---- | Brush kind.-data BrushKind- = BrushTransparent -- ^ No filling- | BrushSolid -- ^ Solid color- | BrushHatch { _brushHatch :: !HatchStyle } -- ^ Hatch pattern- | BrushStipple{ _brushBitmap :: !(Bitmap ())} -- ^ Bitmap pattern (on win95 only 8x8 bitmaps are supported)- deriving (Eq,Show)----- | Set a pen that is automatically deleted at the end of the computation.-dcWithPenStyle :: DC a -> PenStyle -> IO b -> IO b-dcWithPenStyle dc penStyle io- = withPenStyle penStyle $ \pen ->- dcWithPen dc pen io---- | Set a pen that is used during a certain computation.-dcWithPen :: DC a -> Pen p -> IO b -> IO b-dcWithPen dc pen io- = bracket (do oldPen <- dcGetPen dc- dcSetPen dc pen- return oldPen)- (\oldPen ->- do dcSetPen dc oldPen -- restore previous pen- penDelete oldPen)- (const io)----- | Set the current pen style. The text color is also adapted.-dcSetPenStyle :: DC a -> PenStyle -> IO ()-dcSetPenStyle dc penStyle- = withPenStyle penStyle (dcSetPen dc)---- | Get the current pen style.-dcGetPenStyle :: DC a -> IO PenStyle-dcGetPenStyle dc- = do pen <- dcGetPen dc- finalize (penDelete pen) $ - do penGetPenStyle pen---- | Use a pen that is automatically deleted at the end of the computation.-withPenStyle :: PenStyle -> (Pen () -> IO a) -> IO a-withPenStyle penStyle f- = do (pen,delete) <- penCreateFromStyle penStyle- finally (f pen) delete---- | Create a new pen from a 'PenStyle'. Returns both the pen and its deletion procedure.-penCreateFromStyle :: PenStyle -> IO (Pen (),IO ())-penCreateFromStyle penStyle- = case penStyle of- PenStyle PenTransparent color width cap join- -> do pen <- penCreateFromStock 5 {- transparent -}- return (pen,return ())- PenStyle (PenDash DashShort) color 1 CapRound JoinRound | color == black- -> do pen <- penCreateFromStock 6 {- black dashed -}- return (pen,return ())- PenStyle PenSolid color 1 CapRound JoinRound- -> case lookup color stockPens of- Just idx -> do pen <- penCreateFromStock idx- return (pen,return ())- Nothing -> colorPen color 1 wxSOLID- PenStyle PenSolid color width cap join- -> colorPen color width wxSOLID- PenStyle (PenDash dash) color width cap join- -> case dash of- DashDot -> colorPen color width wxDOT- DashLong -> colorPen color width wxLONG_DASH- DashShort-> colorPen color width wxSHORT_DASH- DashDotShort -> colorPen color width wxDOT_DASH- PenStyle (PenStipple bitmap) color width cap join- -> do pen <- penCreateFromBitmap bitmap width- setCap pen- setJoin pen- return (pen,penDelete pen)- where- colorPen color width style- = do pen <- penCreateFromColour color width style- setCap pen- setJoin pen- return (pen,penDelete pen)-- setCap pen- = case _penCap penStyle of- CapRound -> return ()- CapProjecting -> penSetCap pen wxCAP_PROJECTING- CapButt -> penSetCap pen wxCAP_BUTT-- setJoin pen- = case _penJoin penStyle of- JoinRound -> return ()- JoinBevel -> penSetJoin pen wxJOIN_BEVEL- JoinMiter -> penSetJoin pen wxJOIN_MITER-- stockPens- = [(red,0),(cyan,1),(green,2)- ,(black,3),(white,4)- ,(grey,7),(lightgrey,9)- ,(mediumgrey,8)- ]---- | Create a 'PenStyle' from a 'Pen'.-penGetPenStyle :: Pen a -> IO PenStyle-penGetPenStyle pen- = if (objectIsNull pen)- then return penDefault- else do ok <- penIsOk pen- if not ok - then return penDefault- else do stl <- penGetStyle pen- toPenStyle stl- where- toPenStyle stl- | stl == wxTRANSPARENT = return penTransparent- | stl == wxSOLID = toPenStyleWithKind PenSolid- | stl == wxDOT = toPenStyleWithKind (PenDash DashDot)- | stl == wxLONG_DASH = toPenStyleWithKind (PenDash DashLong)- | stl == wxSHORT_DASH = toPenStyleWithKind (PenDash DashShort)- | stl == wxDOT_DASH = toPenStyleWithKind (PenDash DashDotShort)- | stl == wxSTIPPLE = do stipple <- penGetStipple pen- toPenStyleWithKind (PenStipple stipple)- | stl == wxBDIAGONAL_HATCH = toPenStyleWithKind (PenHatch HatchBDiagonal)- | stl == wxCROSSDIAG_HATCH = toPenStyleWithKind (PenHatch HatchCrossDiag)- | stl == wxFDIAGONAL_HATCH = toPenStyleWithKind (PenHatch HatchFDiagonal)- | stl == wxCROSS_HATCH = toPenStyleWithKind (PenHatch HatchCross)- | stl == wxHORIZONTAL_HATCH = toPenStyleWithKind (PenHatch HatchHorizontal)- | stl == wxVERTICAL_HATCH = toPenStyleWithKind (PenHatch HatchVertical)- | otherwise = toPenStyleWithKind PenSolid- - toPenStyleWithKind kind- = do width <- penGetWidth pen- color <- penGetColour pen- cap <- penGetCap pen- join <- penGetJoin pen- return (PenStyle kind color width (toCap cap) (toJoin join))-- toCap cap- | cap == wxCAP_PROJECTING = CapProjecting- | cap == wxCAP_BUTT = CapButt- | otherwise = CapRound-- toJoin join- | join == wxJOIN_MITER = JoinMiter- | join == wxJOIN_BEVEL = JoinBevel- | otherwise = JoinRound--- -{--------------------------------------------------------------------------------- Brush---------------------------------------------------------------------------------}--- | Default brush (transparent, black).-brushDefault :: BrushStyle-brushDefault- = BrushStyle BrushTransparent black----- | A solid brush of a specific color.-brushSolid :: Color -> BrushStyle-brushSolid color- = BrushStyle BrushSolid color---- | A transparent brush.-brushTransparent :: BrushStyle-brushTransparent- = BrushStyle BrushTransparent white--- | Use a brush that is automatically deleted at the end of the computation.-dcWithBrushStyle :: DC a -> BrushStyle -> IO b -> IO b-dcWithBrushStyle dc brushStyle io- = withBrushStyle brushStyle $ \brush ->- dcWithBrush dc brush io--dcWithBrush :: DC b -> Brush a -> IO c -> IO c-dcWithBrush dc brush io- = bracket (do oldBrush <- dcGetBrush dc- dcSetBrush dc brush- return oldBrush)- (\oldBrush ->- do dcSetBrush dc oldBrush -- restore previous brush- brushDelete oldBrush)- (const io)---- | Set the brush style (and text background color) of a device context.-dcSetBrushStyle :: DC a -> BrushStyle -> IO ()-dcSetBrushStyle dc brushStyle- = withBrushStyle brushStyle (dcSetBrush dc)- --- | Get the current brush of a device context.-dcGetBrushStyle :: DC a -> IO BrushStyle-dcGetBrushStyle dc- = do brush <- dcGetBrush dc- finalize (brushDelete brush) $- do brushGetBrushStyle brush----- | Use a brush that is automatically deleted at the end of the computation.-withBrushStyle :: BrushStyle -> (Brush () -> IO a) -> IO a-withBrushStyle brushStyle f- = do (brush,delete) <- brushCreateFromStyle brushStyle- finalize delete $ - do f brush ---- | Create a new brush from a 'BrushStyle'. Returns both the brush and its deletion procedure.-brushCreateFromStyle :: BrushStyle -> IO (Brush (), IO ())-brushCreateFromStyle brushStyle- = case brushStyle of- BrushStyle BrushTransparent color- -> do brush <- if (wxToolkit == WxMac)- then brushCreateFromColour color wxTRANSPARENT- else brushCreateFromStock 7 {- transparent brush -}- return (brush,return ())- BrushStyle BrushSolid color- -> case lookup color stockBrushes of- Just idx -> do brush <- brushCreateFromStock idx- return (brush,return ())- Nothing -> colorBrush color wxSOLID-- BrushStyle (BrushHatch HatchBDiagonal) color -> colorBrush color wxBDIAGONAL_HATCH- BrushStyle (BrushHatch HatchCrossDiag) color -> colorBrush color wxCROSSDIAG_HATCH- BrushStyle (BrushHatch HatchFDiagonal) color -> colorBrush color wxFDIAGONAL_HATCH- BrushStyle (BrushHatch HatchCross) color -> colorBrush color wxCROSS_HATCH- BrushStyle (BrushHatch HatchHorizontal) color -> colorBrush color wxHORIZONTAL_HATCH- BrushStyle (BrushHatch HatchVertical) color -> colorBrush color wxVERTICAL_HATCH- BrushStyle (BrushStipple bitmap) color -> do brush <- brushCreateFromBitmap bitmap- return (brush, brushDelete brush)- where- colorBrush color style- = do brush <- brushCreateFromColour color style- return (brush, brushDelete brush )-- stockBrushes- = [(blue,0),(green,1),(white,2)- ,(black,3),(grey,4),(lightgrey,6)- ,(cyan,8),(red,9)- ,(mediumgrey,5)- ]---- | Get the 'BrushStyle' of 'Brush'.-brushGetBrushStyle :: Brush a -> IO BrushStyle-brushGetBrushStyle brush- = if (objectIsNull brush)- then return brushDefault- else do ok <- brushIsOk brush- if not ok- then return brushDefault- else do stl <- brushGetStyle brush- kind <- toBrushKind stl- color <- brushGetColour brush- return (BrushStyle kind color)- where- toBrushKind stl- | stl == wxTRANSPARENT = return BrushTransparent- | stl == wxSOLID = return BrushSolid- | stl == wxSTIPPLE = do stipple <- brushGetStipple brush- return (BrushStipple stipple)- | stl == wxBDIAGONAL_HATCH = return (BrushHatch HatchBDiagonal)- | stl == wxCROSSDIAG_HATCH = return (BrushHatch HatchCrossDiag)- | stl == wxFDIAGONAL_HATCH = return (BrushHatch HatchFDiagonal)- | stl == wxCROSS_HATCH = return (BrushHatch HatchCross)- | stl == wxHORIZONTAL_HATCH = return (BrushHatch HatchHorizontal)- | stl == wxVERTICAL_HATCH = return (BrushHatch HatchVertical)- | otherwise = return BrushTransparent----{--------------------------------------------------------------------------------- DC drawing state---------------------------------------------------------------------------------}--- | The drawing state (pen,brush,font,text color,text background color) of a device context.-data DrawState = DrawState (Pen ()) (Brush ()) (Font ()) Color Color---- | Run a computation after which the original drawing state of the 'DC' is restored.-dcEncapsulate :: DC a -> IO b -> IO b-dcEncapsulate dc io- = bracket (dcGetDrawState dc)- (\drawState ->- do dcSetDrawState dc drawState- drawStateDelete drawState)- (const io)---- | Get the drawing state. (Should be deleted with 'drawStateDelete').-dcGetDrawState :: DC a -> IO DrawState-dcGetDrawState dc- = do pen <- dcGetPen dc- brush <- dcGetBrush dc- font <- dcGetFont dc- textc <- dcGetTextForeground dc- backc <- dcGetTextBackground dc- return (DrawState pen brush font textc backc)---- | Set the drawing state.-dcSetDrawState :: DC a -> DrawState -> IO ()-dcSetDrawState dc (DrawState pen brush font textc backc)- = do dcSetPen dc pen- dcSetBrush dc brush- dcSetFont dc font- dcSetTextBackground dc backc- dcSetTextForeground dc textc---- | Release the resources associated with a drawing state.-drawStateDelete :: DrawState -> IO ()-drawStateDelete (DrawState pen brush font _ _)- = do penDelete pen- brushDelete brush- fontDelete font--{--------------------------------------------------------------------------------- DC utils---------------------------------------------------------------------------------}---- | Draw connected lines.-drawLines :: DC a -> [Point] -> IO ()-drawLines dc [] = return ()-drawLines dc ps- = withArray xs $ \pxs ->- withArray ys $ \pys ->- dcDrawLines dc n pxs pys (pt 0 0)- where- n = length ps- xs = map pointX ps- ys = map pointY ps----- | Draw a polygon. The polygon is filled with the odd-even rule.-drawPolygon :: DC a -> [Point] -> IO ()-drawPolygon dc [] = return ()-drawPolygon dc ps- = withArray xs $ \pxs ->- withArray ys $ \pys ->- dcDrawPolygon dc n pxs pys (pt 0 0) wxODDEVEN_RULE- where- n = length ps- xs = map pointX ps- ys = map pointY ps---- | Gets the dimensions of the string using the currently selected font.-getTextExtent :: DC a -> String -> IO Size-getTextExtent dc txt- = do (sz,_,_) <- getFullTextExtent dc txt- return sz---- | Gets the dimensions of the string using the currently selected font.--- Takes text string to measure, and returns the size, /descent/ and /external leading/.--- Descent is the dimension from the baseline of the font to the bottom of the descender--- , and external leading is any extra vertical space added to the font by the font designer (is usually zero).-getFullTextExtent :: DC a -> String -> IO (Size,Int,Int)-getFullTextExtent dc txt- = alloca $ \px ->- alloca $ \py ->- alloca $ \pd ->- alloca $ \pe ->- do dcGetTextExtent dc txt px py pd pe objectNull- x <- peek px- y <- peek py- d <- peek pd- e <- peek pe- return (sz (fromCInt x) (fromCInt y), fromCInt d, fromCInt e)---{--------------------------------------------------------------------------------- Double buffering---------------------------------------------------------------------------------}---- | Use double buffering to draw to a 'DC' -- reduces flicker. Note that--- the 'windowOnPaint' handler can already take care of buffering automatically.--- The rectangle argument is normally the view rectangle ('windowGetViewRect').--- Uses a 'MemoryDC' to draw into memory first and than blit the result to--- the device context. The memory area allocated is the minimal size necessary--- to accomodate the rectangle, but is re-allocated on each invokation.-dcBuffer :: DC a -> Rect -> (DC () -> IO ()) -> IO ()-dcBuffer dc r draw- = dcBufferWithRef dc Nothing r draw---- | Optimized double buffering. Takes a possible reference to a bitmap. If it is--- 'Nothing', a new bitmap is allocated everytime. Otherwise, the reference is used--- to re-use an allocated bitmap if possible. The 'Rect' argument specifies the--- the current logical view rectangle. The last argument is called to draw on the--- memory 'DC'. -dcBufferWithRef :: DC a -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()-dcBufferWithRef dc mbVar viewArea draw- = dcBufferWithRefEx dc (\dc -> dcClearRect dc viewArea) mbVar viewArea draw----- | Optimized double buffering. Takes a /clear/ routine as its first argument.--- Normally this is something like '\dc -> dcClearRect dc viewArea' but on certain platforms, like--- MacOS X, special handling is necessary.-dcBufferWithRefEx :: DC a -> (DC () -> IO ()) -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO ()-dcBufferWithRefEx dc clear mbVar view draw- | rectSize view == sizeZero = return ()-dcBufferWithRefEx dc clear mbVar view draw- = bracket (initBitmap)- (doneBitmap)- (\bitmap ->- if (bitmap==objectNull)- then drawUnbuffered- else bracket (do p <- memoryDCCreateCompatible dc; return (objectCast p))- (\memdc -> when (memdc/=objectNull) (memoryDCDelete memdc))- (\memdc -> if (memdc==objectNull)- then drawUnbuffered- else do memoryDCSelectObject memdc bitmap- drawBuffered memdc- memoryDCSelectObject memdc nullBitmap- )- )- where- initBitmap- = case mbVar of- Nothing -> bitmapCreateEmpty (rectSize view) (-1)- Just v -> do bitmap <- varGet v- size <- if (bitmap==objectNull)- then return sizeZero- else do bw <- bitmapGetWidth bitmap- bh <- bitmapGetHeight bitmap- return (Size bw bh)- -- re-use the bitmap if possible- if (sizeEncloses size (rectSize view) && bitmap /= objectNull)- then return bitmap- else do when (bitmap/=objectNull) (bitmapDelete bitmap)- varSet v objectNull- -- new size a bit larger to avoid multiple reallocs- let (Size w h) = rectSize view- neww = div (w*105) 100- newh = div (h*105) 100- bm <- bitmapCreateEmpty (sz neww newh) (-1)- varSet v bm- return bm-- doneBitmap bitmap- = case mbVar of- Nothing -> when (bitmap/=objectNull) (bitmapDelete bitmap)- Just v -> return ()--- drawUnbuffered- = do clear (downcastDC dc)- draw (downcastDC dc) -- down cast-- drawBuffered memdc- = do -- set the device origin for scrolled windows- dcSetDeviceOrigin memdc (pointFromVec (vecNegate (vecFromPoint (rectTopLeft view))))- dcSetClippingRegion memdc view- -- dcBlit memdc view dc (rectTopLeft view) wxCOPY False- bracket (dcGetBackground dc)- (\brush -> do dcSetBrush memdc nullBrush- brushDelete brush)- (\brush -> do -- set the background to the owner brush- dcSetBackground memdc brush- if (wxToolkit == WxMac)- then withBrushStyle brushTransparent (dcSetBrush memdc)- else dcSetBrush memdc brush- clear (downcastDC memdc)- -- and finally do the drawing!- draw (downcastDC memdc) -- down cast- )- -- blit the memdc into the owner dc.- dcBlit dc view memdc (rectTopLeft view) wxCOPY False- return ()+----------------------------------------------------------------------------------------- +{-| Module : Draw + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Drawing. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Draw + ( + -- * DC + drawLines, drawPolygon, getTextExtent, getFullTextExtent, dcClearRect + -- ** Creation + , withPaintDC, withClientDC, dcDraw + , withSVGFileDC, withSVGFileDCWithSize, withSVGFileDCWithSizeAndResolution + -- ** Draw state + , DrawState, dcEncapsulate, dcGetDrawState, dcSetDrawState, drawStateDelete + -- ** Double buffering + , dcBuffer, dcBufferWithRef, dcBufferWithRefEx + -- * Scrolled windows + , windowGetViewStart, windowGetViewRect, windowCalcUnscrolledPosition + -- * Font + , FontStyle(..), FontFamily(..), FontShape(..), FontWeight(..) + , fontDefault, fontSwiss, fontSmall, fontItalic, fontFixed + , withFontStyle, dcWithFontStyle + , dcSetFontStyle, dcGetFontStyle + , fontCreateFromStyle, fontGetFontStyle + -- * Brush + , BrushStyle(..), BrushKind(..) + , HatchStyle(..) + , brushDefault, brushSolid, brushTransparent + , dcSetBrushStyle, dcGetBrushStyle + , withBrushStyle, dcWithBrushStyle, dcWithBrush + , brushCreateFromStyle, brushGetBrushStyle + -- * Pen + , PenStyle(..), PenKind(..), CapStyle(..), JoinStyle(..), DashStyle(..) + , penDefault, penColored, penTransparent + , dcSetPenStyle, dcGetPenStyle + , withPenStyle, dcWithPenStyle, dcWithPen + , penCreateFromStyle, penGetPenStyle + ) where + +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassInfo +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Defines + +import Foreign.Marshal.Array +import Foreign.Storable +import Foreign.Marshal.Alloc + + +{-------------------------------------------------------------------------------- + DC creation +--------------------------------------------------------------------------------} +-- | Safely perform a drawing operation on a DC. +dcDraw :: DC a -> IO b -> IO b +dcDraw dc io + = bracket_ (do dcSetPenStyle dc penDefault + dcSetBrushStyle dc brushDefault) + (do dcSetPen dc nullPen + dcSetBrush dc nullBrush) + io + +-- | Use a 'PaintDC'. +withPaintDC :: Window a -> (PaintDC () -> IO b) -> IO b +withPaintDC window draw + = bracket (paintDCCreate window) (paintDCDelete) (\dc -> dcDraw dc (draw dc)) + +-- | Use a 'ClientDC'. +withClientDC :: Window a -> (ClientDC () -> IO b) -> IO b +withClientDC window draw + = bracket (clientDCCreate window) (clientDCDelete) (\dc -> dcDraw dc (draw dc)) + +-- | Use a 'SVGFileDC'. +withSVGFileDC :: FilePath -> (SVGFileDC () -> IO b) -> IO b +withSVGFileDC fname draw + = bracket (svgFileDCCreate fname) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc)) + +withSVGFileDCWithSize :: FilePath -> Size -> (SVGFileDC () -> IO b) -> IO b +withSVGFileDCWithSize fname size draw + = bracket (svgFileDCCreateWithSize fname size) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc)) + +withSVGFileDCWithSizeAndResolution :: FilePath -> Size -> Float -> (SVGFileDC () -> IO b) -> IO b +withSVGFileDCWithSizeAndResolution fname size dpi draw + = bracket (svgFileDCCreateWithSizeAndResolution fname size dpi) (svgFileDCDelete) (\dc -> dcDraw dc (draw dc)) + + +-- | Clear a specific rectangle with the current background brush. +-- This is preferred to 'dcClear' for scrolled windows as 'dcClear' sometimes +-- only clears the original view area, instead of the currently visible scrolled area. +-- Unfortunately, the background brush is not set correctly on wxMAC 2.4, and +-- this will always clear to a white color on mac systems. +dcClearRect :: DC a -> Rect -> IO () +dcClearRect dc r + = bracket (dcGetBackground dc) + (brushDelete) + (\brush -> dcWithBrush dc brush $ + dcWithPenStyle dc penTransparent $ + dcDrawRectangle dc r) + +-- | Fill a rectangle with a certain color. +dcFillRect :: DC a -> Rect -> Color -> IO () +dcFillRect dc r color + = dcWithBrushStyle dc (brushSolid color) $ + dcWithPenStyle dc penTransparent $ + dcDrawRectangle dc r + +{-------------------------------------------------------------------------------- + Windows +--------------------------------------------------------------------------------} +-- | Get logical view rectangle, adjusted for scrolling. +windowGetViewRect :: Window a -> IO Rect +windowGetViewRect window + = do size <- windowGetClientSize window + org <- windowGetViewStart window + return (rect org size) + +-- | Get logical view start, adjusted for scrolling. +windowGetViewStart :: Window a -> IO Point +windowGetViewStart window + = do isScrolled <- objectIsScrolledWindow window + -- adjust coordinates for a scrolled window + if (isScrolled) + then do let scrolledWindow = objectCast window + (Point sx sy) <- scrolledWindowGetViewStart scrolledWindow + (Point w h) <- scrolledWindowGetScrollPixelsPerUnit scrolledWindow + return (Point (w*sx) (h*sy)) + else return pointZero + +-- | Get logical coordinates adjusted for scrolling. +windowCalcUnscrolledPosition :: Window a -> Point -> IO Point +windowCalcUnscrolledPosition window p + = do isScrolled <- objectIsScrolledWindow window + -- adjust coordinates for a scrolled window + if (isScrolled) + then do let scrolledWindow = objectCast window + scrolledWindowCalcUnscrolledPosition scrolledWindow p + else return p + +{-------------------------------------------------------------------------------- + Font +--------------------------------------------------------------------------------} + + +-- | Font descriptor. The font is normally specified thru the 'FontFamily', giving +-- some degree of portability. The '_fontFace' can be used to specify the exact (platform +-- dependent) font. +-- +-- Note that the original wxWidgets @FontStyle@ is renamed to @FontShape@. +data FontStyle + = FontStyle{ _fontSize :: !Int + , _fontFamily :: !FontFamily + , _fontShape :: !FontShape + , _fontWeight :: !FontWeight + , _fontUnderline :: !Bool + , _fontFace :: !String -- ^ normally @\"\"@ + , _fontEncoding :: !Int -- ^ normally @wxFONTENCODING_DEFAULT@ + } + deriving (Eq,Show) + +-- | Default 10pt font. +fontDefault :: FontStyle +fontDefault + = FontStyle 10 FontDefault ShapeNormal WeightNormal False "" wxFONTENCODING_DEFAULT + +-- | Default 10pt sans-serif font. +fontSwiss :: FontStyle +fontSwiss + = fontDefault{ _fontFamily = FontSwiss } + +-- | Default 8pt font. +fontSmall :: FontStyle +fontSmall + = fontDefault{ _fontSize = 8 } + +-- | Default 10pt italic. +fontItalic :: FontStyle +fontItalic + = fontDefault{ _fontShape = ShapeItalic } + +-- | Monospaced font, 10pt. +fontFixed :: FontStyle +fontFixed + = fontDefault{ _fontFamily = FontModern } + +-- | Standard font families. +data FontFamily + = FontDefault -- ^ A system default font. + | FontDecorative -- ^ Decorative font. + | FontRoman -- ^ Formal serif font. + | FontScript -- ^ Hand writing font. + | FontSwiss -- ^ Sans-serif font. + | FontModern -- ^ Fixed pitch font. + | FontTeletype -- ^ A teletype (i.e. monospaced) font + deriving (Eq,Show) + +-- | The font style. +data FontShape + = ShapeNormal + | ShapeItalic + | ShapeSlant + deriving (Eq,Show) + +-- | The font weight. +data FontWeight + = WeightNormal + | WeightBold + | WeightLight + deriving (Eq,Show) + +-- | Use a font that is automatically deleted at the end of the computation. +withFontStyle :: FontStyle -> (Font () -> IO a) -> IO a +withFontStyle fontStyle f + = do (font,delete) <- fontCreateFromStyle fontStyle + finally (f font) delete + + +-- | Set a font that is automatically deleted at the end of the computation. +dcWithFontStyle :: DC a -> FontStyle -> IO b -> IO b +dcWithFontStyle dc fontStyle io + = withFontStyle fontStyle $ \font -> + bracket (do oldFont <- dcGetFont dc + dcSetFont dc font + return oldFont) + (\oldFont -> + do dcSetFont dc oldFont -- restore previous font + fontDelete oldFont) + (const io) + +-- | Set the font info of a DC. +dcSetFontStyle :: DC a -> FontStyle -> IO () +dcSetFontStyle dc info + = do (font,del) <- fontCreateFromStyle info + finalize del $ + do dcSetFont dc font + +-- | Get the current font info. +dcGetFontStyle :: DC a -> IO FontStyle +dcGetFontStyle dc + = do font <- dcGetFont dc + finalize (fontDelete font) $ + do fontGetFontStyle font + + +-- | Create a 'Font' from 'FontStyle'. Returns both the font and a deletion procedure. +fontCreateFromStyle :: FontStyle -> IO (Font (),IO ()) +fontCreateFromStyle (FontStyle size family style weight underline face encoding) + = do font <- fontCreate size cfamily cstyle cweight underline face encoding + return (font,when (font /= objectNull) (fontDelete font)) + where + cfamily + = case family of + FontDefault -> wxFONTFAMILY_DEFAULT + FontDecorative -> wxFONTFAMILY_DECORATIVE + FontRoman -> wxFONTFAMILY_ROMAN + FontScript -> wxFONTFAMILY_SCRIPT + FontSwiss -> wxFONTFAMILY_SWISS + FontModern -> wxFONTFAMILY_MODERN + FontTeletype -> wxFONTFAMILY_TELETYPE + + cstyle + = case style of + ShapeNormal -> wxFONTSTYLE_NORMAL + ShapeItalic -> wxFONTSTYLE_ITALIC + ShapeSlant -> wxFONTSTYLE_SLANT + + cweight + = case weight of + WeightNormal -> wxFONTWEIGHT_NORMAL + WeightBold -> wxFONTWEIGHT_BOLD + WeightLight -> wxFONTWEIGHT_LIGHT + + +-- | Get the 'FontStyle' from a 'Font' object. +fontGetFontStyle :: Font () -> IO FontStyle +fontGetFontStyle font + = if (objectIsNull font) + then return fontDefault + else do ok <- fontIsOk font + if not ok + then return fontDefault + else do size <- fontGetPointSize font + cfamily <- fontGetFamily font + cstyle <- fontGetStyle font + cweight <- fontGetWeight font + cunderl <- fontGetUnderlined font + face <- fontGetFaceName font + enc <- fontGetEncoding font + return (FontStyle size (toFamily cfamily) (toStyle cstyle) + (toWeight cweight) + (cunderl /= 0) face enc) + where + toFamily f + | f == wxFONTFAMILY_DECORATIVE = FontDecorative + | f == wxFONTFAMILY_ROMAN = FontRoman + | f == wxFONTFAMILY_SCRIPT = FontScript + | f == wxFONTFAMILY_SWISS = FontSwiss + | f == wxFONTFAMILY_MODERN = FontModern + | f == wxFONTFAMILY_TELETYPE = FontTeletype + | otherwise = FontDefault + + toStyle s + | s == wxFONTSTYLE_ITALIC = ShapeItalic + | s == wxFONTSTYLE_SLANT = ShapeSlant + | otherwise = ShapeNormal + + toWeight w + | w == wxFONTWEIGHT_BOLD = WeightBold + | w == wxFONTWEIGHT_LIGHT = WeightLight + | otherwise = WeightNormal + + +{-------------------------------------------------------------------------------- + Pen +--------------------------------------------------------------------------------} + +-- | Pen style. +data PenStyle + = PenStyle { _penKind :: !PenKind + , _penColor :: !Color + , _penWidth :: !Int + , _penCap :: !CapStyle + , _penJoin :: !JoinStyle + } + deriving (Eq,Show) + +-- | Pen kinds. +data PenKind + = PenTransparent -- ^ No edge. + | PenSolid + | PenDash { _penDash :: !DashStyle } + | PenHatch { _penHatch :: !HatchStyle } + | PenStipple{ _penBitmap :: !(Bitmap ())} -- ^ @_penColor@ is ignored + deriving (Eq,Show) + +-- | Default pen (@PenStyle PenSolid black 1 CapRound JoinRound@) +penDefault :: PenStyle +penDefault + = PenStyle PenSolid black 1 CapRound JoinRound + +-- | A solid pen with a certain color and width. +penColored :: Color -> Int -> PenStyle +penColored color width + = penDefault{ _penColor = color, _penWidth = width } + +-- | A transparent pen. +penTransparent :: PenStyle +penTransparent + = penDefault{ _penKind = PenTransparent } + +-- | Dash style +data DashStyle + = DashDot + | DashLong + | DashShort + | DashDotShort + -- DashUser [Int] + deriving (Eq,Show) + +-- | Cap style +data CapStyle + = CapRound -- ^ End points are rounded + | CapProjecting + | CapButt + deriving (Eq,Show) + +-- | Join style. +data JoinStyle + = JoinRound -- ^ Corners are rounded + | JoinBevel -- ^ Corners are bevelled + | JoinMiter -- ^ Corners are blocked + deriving (Eq,Show) + +-- | Hatch style. +data HatchStyle + = HatchBDiagonal -- ^ Backward diagonal + | HatchCrossDiag -- ^ Crossed diagonal + | HatchFDiagonal -- ^ Forward diagonal + | HatchCross -- ^ Crossed orthogonal + | HatchHorizontal -- ^ Horizontal + | HatchVertical -- ^ Vertical + deriving (Eq,Show) + +-- | Brush style. +data BrushStyle + = BrushStyle { _brushKind :: !BrushKind, _brushColor :: !Color } + deriving (Eq,Show) + +-- | Brush kind. +data BrushKind + = BrushTransparent -- ^ No filling + | BrushSolid -- ^ Solid color + | BrushHatch { _brushHatch :: !HatchStyle } -- ^ Hatch pattern + | BrushStipple{ _brushBitmap :: !(Bitmap ())} -- ^ Bitmap pattern (on win95 only 8x8 bitmaps are supported) + deriving (Eq,Show) + + +-- | Set a pen that is automatically deleted at the end of the computation. +dcWithPenStyle :: DC a -> PenStyle -> IO b -> IO b +dcWithPenStyle dc penStyle io + = withPenStyle penStyle $ \pen -> + dcWithPen dc pen io + +-- | Set a pen that is used during a certain computation. +dcWithPen :: DC a -> Pen p -> IO b -> IO b +dcWithPen dc pen io + = bracket (do oldPen <- dcGetPen dc + dcSetPen dc pen + return oldPen) + (\oldPen -> + do dcSetPen dc oldPen -- restore previous pen + penDelete oldPen) + (const io) + + +-- | Set the current pen style. The text color is also adapted. +dcSetPenStyle :: DC a -> PenStyle -> IO () +dcSetPenStyle dc penStyle + = withPenStyle penStyle (dcSetPen dc) + +-- | Get the current pen style. +dcGetPenStyle :: DC a -> IO PenStyle +dcGetPenStyle dc + = do pen <- dcGetPen dc + finalize (penDelete pen) $ + do penGetPenStyle pen + +-- | Use a pen that is automatically deleted at the end of the computation. +withPenStyle :: PenStyle -> (Pen () -> IO a) -> IO a +withPenStyle penStyle f + = do (pen,delete) <- penCreateFromStyle penStyle + finally (f pen) delete + +-- | Create a new pen from a 'PenStyle'. Returns both the pen and its deletion procedure. +penCreateFromStyle :: PenStyle -> IO (Pen (),IO ()) +penCreateFromStyle penStyle + = case penStyle of + PenStyle PenTransparent color width cap join + -> do pen <- penCreateFromStock 5 {- transparent -} + return (pen,return ()) + PenStyle (PenDash DashShort) color 1 CapRound JoinRound | color == black + -> do pen <- penCreateFromStock 6 {- black dashed -} + return (pen,return ()) + PenStyle PenSolid color 1 CapRound JoinRound + -> case lookup color stockPens of + Just idx -> do pen <- penCreateFromStock idx + return (pen,return ()) + Nothing -> colorPen color 1 wxPENSTYLE_SOLID + PenStyle PenSolid color width cap join + -> colorPen color width wxPENSTYLE_SOLID + PenStyle (PenDash dash) color width cap join + -> case dash of + DashDot -> colorPen color width wxPENSTYLE_DOT + DashLong -> colorPen color width wxPENSTYLE_LONG_DASH + DashShort-> colorPen color width wxPENSTYLE_SHORT_DASH + DashDotShort -> colorPen color width wxPENSTYLE_DOT_DASH + PenStyle (PenStipple bitmap) color width cap join + -> do pen <- penCreateFromBitmap bitmap width + setCap pen + setJoin pen + return (pen,penDelete pen) + where + colorPen color width style + = do pen <- penCreateFromColour color width style + setCap pen + setJoin pen + return (pen,penDelete pen) + + setCap pen + = case _penCap penStyle of + CapRound -> return () + CapProjecting -> penSetCap pen wxCAP_PROJECTING + CapButt -> penSetCap pen wxCAP_BUTT + + setJoin pen + = case _penJoin penStyle of + JoinRound -> return () + JoinBevel -> penSetJoin pen wxJOIN_BEVEL + JoinMiter -> penSetJoin pen wxJOIN_MITER + + stockPens + = [(red,0),(cyan,1),(green,2) + ,(black,3),(white,4) + ,(grey,7),(lightgrey,9) + ,(mediumgrey,8) + ] + +-- | Create a 'PenStyle' from a 'Pen'. +penGetPenStyle :: Pen a -> IO PenStyle +penGetPenStyle pen + = if (objectIsNull pen) + then return penDefault + else do ok <- penIsOk pen + if not ok + then return penDefault + else do stl <- penGetStyle pen + toPenStyle stl + where + toPenStyle stl + | stl == wxPENSTYLE_TRANSPARENT = return penTransparent + | stl == wxPENSTYLE_SOLID = toPenStyleWithKind PenSolid + | stl == wxPENSTYLE_DOT = toPenStyleWithKind (PenDash DashDot) + | stl == wxPENSTYLE_LONG_DASH = toPenStyleWithKind (PenDash DashLong) + | stl == wxPENSTYLE_SHORT_DASH = toPenStyleWithKind (PenDash DashShort) + | stl == wxPENSTYLE_DOT_DASH = toPenStyleWithKind (PenDash DashDotShort) + | stl == wxPENSTYLE_STIPPLE = do stipple <- penGetStipple pen + toPenStyleWithKind (PenStipple stipple) + | stl == wxPENSTYLE_BDIAGONAL_HATCH = toPenStyleWithKind (PenHatch HatchBDiagonal) + | stl == wxPENSTYLE_CROSSDIAG_HATCH = toPenStyleWithKind (PenHatch HatchCrossDiag) + | stl == wxPENSTYLE_FDIAGONAL_HATCH = toPenStyleWithKind (PenHatch HatchFDiagonal) + | stl == wxPENSTYLE_CROSS_HATCH = toPenStyleWithKind (PenHatch HatchCross) + | stl == wxPENSTYLE_HORIZONTAL_HATCH = toPenStyleWithKind (PenHatch HatchHorizontal) + | stl == wxPENSTYLE_VERTICAL_HATCH = toPenStyleWithKind (PenHatch HatchVertical) + | otherwise = toPenStyleWithKind PenSolid + + toPenStyleWithKind kind + = do width <- penGetWidth pen + color <- penGetColour pen + cap <- penGetCap pen + join <- penGetJoin pen + return (PenStyle kind color width (toCap cap) (toJoin join)) + + toCap cap + | cap == wxCAP_PROJECTING = CapProjecting + | cap == wxCAP_BUTT = CapButt + | otherwise = CapRound + + toJoin join + | join == wxJOIN_MITER = JoinMiter + | join == wxJOIN_BEVEL = JoinBevel + | otherwise = JoinRound + + + +{-------------------------------------------------------------------------------- + Brush +--------------------------------------------------------------------------------} +-- | Default brush (transparent, black). +brushDefault :: BrushStyle +brushDefault + = BrushStyle BrushTransparent black + + +-- | A solid brush of a specific color. +brushSolid :: Color -> BrushStyle +brushSolid color + = BrushStyle BrushSolid color + +-- | A transparent brush. +brushTransparent :: BrushStyle +brushTransparent + = BrushStyle BrushTransparent white +-- | Use a brush that is automatically deleted at the end of the computation. +dcWithBrushStyle :: DC a -> BrushStyle -> IO b -> IO b +dcWithBrushStyle dc brushStyle io + = withBrushStyle brushStyle $ \brush -> + dcWithBrush dc brush io + +dcWithBrush :: DC b -> Brush a -> IO c -> IO c +dcWithBrush dc brush io + = bracket (do oldBrush <- dcGetBrush dc + dcSetBrush dc brush + return oldBrush) + (\oldBrush -> + do dcSetBrush dc oldBrush -- restore previous brush + brushDelete oldBrush) + (const io) + +-- | Set the brush style (and text background color) of a device context. +dcSetBrushStyle :: DC a -> BrushStyle -> IO () +dcSetBrushStyle dc brushStyle + = withBrushStyle brushStyle (dcSetBrush dc) + +-- | Get the current brush of a device context. +dcGetBrushStyle :: DC a -> IO BrushStyle +dcGetBrushStyle dc + = do brush <- dcGetBrush dc + finalize (brushDelete brush) $ + do brushGetBrushStyle brush + + +-- | Use a brush that is automatically deleted at the end of the computation. +withBrushStyle :: BrushStyle -> (Brush () -> IO a) -> IO a +withBrushStyle brushStyle f + = do (brush,delete) <- brushCreateFromStyle brushStyle + finalize delete $ + do f brush + +-- | Create a new brush from a 'BrushStyle'. Returns both the brush and its deletion procedure. +brushCreateFromStyle :: BrushStyle -> IO (Brush (), IO ()) +brushCreateFromStyle brushStyle + = case brushStyle of + BrushStyle BrushTransparent color + -> do brush <- if (wxToolkit == WxMac) + then brushCreateFromColour color wxBRUSHSTYLE_TRANSPARENT + else brushCreateFromStock 7 {- transparent brush -} + return (brush,return ()) + BrushStyle BrushSolid color + -> case lookup color stockBrushes of + Just idx -> do brush <- brushCreateFromStock idx + return (brush,return ()) + Nothing -> colorBrush color wxBRUSHSTYLE_SOLID + + BrushStyle (BrushHatch HatchBDiagonal) color -> colorBrush color wxBRUSHSTYLE_BDIAGONAL_HATCH + BrushStyle (BrushHatch HatchCrossDiag) color -> colorBrush color wxBRUSHSTYLE_CROSSDIAG_HATCH + BrushStyle (BrushHatch HatchFDiagonal) color -> colorBrush color wxBRUSHSTYLE_FDIAGONAL_HATCH + BrushStyle (BrushHatch HatchCross) color -> colorBrush color wxBRUSHSTYLE_CROSS_HATCH + BrushStyle (BrushHatch HatchHorizontal) color -> colorBrush color wxBRUSHSTYLE_HORIZONTAL_HATCH + BrushStyle (BrushHatch HatchVertical) color -> colorBrush color wxBRUSHSTYLE_VERTICAL_HATCH + BrushStyle (BrushStipple bitmap) color -> do brush <- brushCreateFromBitmap bitmap + return (brush, brushDelete brush) + where + colorBrush color style + = do brush <- brushCreateFromColour color style + return (brush, brushDelete brush ) + + stockBrushes + = [(blue,0),(green,1),(white,2) + ,(black,3),(grey,4),(lightgrey,6) + ,(cyan,8),(red,9) + ,(mediumgrey,5) + ] + +-- | Get the 'BrushStyle' of 'Brush'. +brushGetBrushStyle :: Brush a -> IO BrushStyle +brushGetBrushStyle brush + = if (objectIsNull brush) + then return brushDefault + else do ok <- brushIsOk brush + if not ok + then return brushDefault + else do stl <- brushGetStyle brush + kind <- toBrushKind stl + color <- brushGetColour brush + return (BrushStyle kind color) + where + toBrushKind stl + | stl == wxBRUSHSTYLE_TRANSPARENT = return BrushTransparent + | stl == wxBRUSHSTYLE_SOLID = return BrushSolid + | stl == wxBRUSHSTYLE_STIPPLE = do stipple <- brushGetStipple brush + return (BrushStipple stipple) + | stl == wxBRUSHSTYLE_BDIAGONAL_HATCH = return (BrushHatch HatchBDiagonal) + | stl == wxBRUSHSTYLE_CROSSDIAG_HATCH = return (BrushHatch HatchCrossDiag) + | stl == wxBRUSHSTYLE_FDIAGONAL_HATCH = return (BrushHatch HatchFDiagonal) + | stl == wxBRUSHSTYLE_CROSS_HATCH = return (BrushHatch HatchCross) + | stl == wxBRUSHSTYLE_HORIZONTAL_HATCH = return (BrushHatch HatchHorizontal) + | stl == wxBRUSHSTYLE_VERTICAL_HATCH = return (BrushHatch HatchVertical) + | otherwise = return BrushTransparent + + + +{-------------------------------------------------------------------------------- + DC drawing state +--------------------------------------------------------------------------------} +-- | The drawing state (pen,brush,font,text color,text background color) of a device context. +data DrawState = DrawState (Pen ()) (Brush ()) (Font ()) Color Color + +-- | Run a computation after which the original drawing state of the 'DC' is restored. +dcEncapsulate :: DC a -> IO b -> IO b +dcEncapsulate dc io + = bracket (dcGetDrawState dc) + (\drawState -> + do dcSetDrawState dc drawState + drawStateDelete drawState) + (const io) + +-- | Get the drawing state. (Should be deleted with 'drawStateDelete'). +dcGetDrawState :: DC a -> IO DrawState +dcGetDrawState dc + = do pen <- dcGetPen dc + brush <- dcGetBrush dc + font <- dcGetFont dc + textc <- dcGetTextForeground dc + backc <- dcGetTextBackground dc + return (DrawState pen brush font textc backc) + +-- | Set the drawing state. +dcSetDrawState :: DC a -> DrawState -> IO () +dcSetDrawState dc (DrawState pen brush font textc backc) + = do dcSetPen dc pen + dcSetBrush dc brush + dcSetFont dc font + dcSetTextBackground dc backc + dcSetTextForeground dc textc + +-- | Release the resources associated with a drawing state. +drawStateDelete :: DrawState -> IO () +drawStateDelete (DrawState pen brush font _ _) + = do penDelete pen + brushDelete brush + fontDelete font + +{-------------------------------------------------------------------------------- + DC utils +--------------------------------------------------------------------------------} + +-- | Draw connected lines. +drawLines :: DC a -> [Point] -> IO () +drawLines dc [] = return () +drawLines dc ps + = withArray xs $ \pxs -> + withArray ys $ \pys -> + dcDrawLines dc n pxs pys (pt 0 0) + where + n = length ps + xs = map pointX ps + ys = map pointY ps + + +-- | Draw a polygon. The polygon is filled with the odd-even rule. +drawPolygon :: DC a -> [Point] -> IO () +drawPolygon dc [] = return () +drawPolygon dc ps + = withArray xs $ \pxs -> + withArray ys $ \pys -> + dcDrawPolygon dc n pxs pys (pt 0 0) wxODDEVEN_RULE + where + n = length ps + xs = map pointX ps + ys = map pointY ps + +-- | Gets the dimensions of the string using the currently selected font. +getTextExtent :: DC a -> String -> IO Size +getTextExtent dc txt + = do (sz,_,_) <- getFullTextExtent dc txt + return sz + +-- | Gets the dimensions of the string using the currently selected font. +-- Takes text string to measure, and returns the size, /descent/ and /external leading/. +-- Descent is the dimension from the baseline of the font to the bottom of the descender +-- , and external leading is any extra vertical space added to the font by the font designer (is usually zero). +getFullTextExtent :: DC a -> String -> IO (Size,Int,Int) +getFullTextExtent dc txt + = alloca $ \px -> + alloca $ \py -> + alloca $ \pd -> + alloca $ \pe -> + do dcGetTextExtent dc txt px py pd pe objectNull + x <- peek px + y <- peek py + d <- peek pd + e <- peek pe + return (sz (fromCInt x) (fromCInt y), fromCInt d, fromCInt e) + + +{-------------------------------------------------------------------------------- + Double buffering +--------------------------------------------------------------------------------} + +-- | Use double buffering to draw to a 'DC' -- reduces flicker. Note that +-- the 'windowOnPaint' handler can already take care of buffering automatically. +-- The rectangle argument is normally the view rectangle ('windowGetViewRect'). +-- Uses a 'MemoryDC' to draw into memory first and than blit the result to +-- the device context. The memory area allocated is the minimal size necessary +-- to accomodate the rectangle, but is re-allocated on each invokation. +dcBuffer :: DC a -> Rect -> (DC () -> IO ()) -> IO () +dcBuffer dc r draw + = dcBufferWithRef dc Nothing r draw + +-- | Optimized double buffering. Takes a possible reference to a bitmap. If it is +-- 'Nothing', a new bitmap is allocated everytime. Otherwise, the reference is used +-- to re-use an allocated bitmap if possible. The 'Rect' argument specifies the +-- the current logical view rectangle. The last argument is called to draw on the +-- memory 'DC'. +dcBufferWithRef :: DC a -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO () +dcBufferWithRef dc mbVar viewArea draw + = dcBufferWithRefEx dc (\dc -> dcClearRect dc viewArea) mbVar viewArea draw + + +-- | Optimized double buffering. Takes a /clear/ routine as its first argument. +-- Normally this is something like '\dc -> dcClearRect dc viewArea' but on certain platforms, like +-- MacOS X, special handling is necessary. +dcBufferWithRefEx :: DC a -> (DC () -> IO ()) -> Maybe (Var (Bitmap ())) -> Rect -> (DC () -> IO ()) -> IO () +dcBufferWithRefEx dc clear mbVar view draw + | rectSize view == sizeZero = return () +dcBufferWithRefEx dc clear mbVar view draw + = bracket (initBitmap) + (doneBitmap) + (\bitmap -> + if (bitmap==objectNull) + then drawUnbuffered + else bracket (do p <- memoryDCCreateCompatible dc; return (objectCast p)) + (\memdc -> when (memdc/=objectNull) (memoryDCDelete memdc)) + (\memdc -> if (memdc==objectNull) + then drawUnbuffered + else do memoryDCSelectObject memdc bitmap + drawBuffered memdc + memoryDCSelectObject memdc nullBitmap + ) + ) + where + initBitmap + = case mbVar of + Nothing -> bitmapCreateEmpty (rectSize view) (-1) + Just v -> do bitmap <- varGet v + size <- if (bitmap==objectNull) + then return sizeZero + else do bw <- bitmapGetWidth bitmap + bh <- bitmapGetHeight bitmap + return (Size bw bh) + -- re-use the bitmap if possible + if (sizeEncloses size (rectSize view) && bitmap /= objectNull) + then return bitmap + else do when (bitmap/=objectNull) (bitmapDelete bitmap) + varSet v objectNull + -- new size a bit larger to avoid multiple reallocs + let (Size w h) = rectSize view + neww = div (w*105) 100 + newh = div (h*105) 100 + bm <- bitmapCreateEmpty (sz neww newh) (-1) + varSet v bm + return bm + + doneBitmap bitmap + = case mbVar of + Nothing -> when (bitmap/=objectNull) (bitmapDelete bitmap) + Just v -> return () + + + drawUnbuffered + = do clear (downcastDC dc) + draw (downcastDC dc) -- down cast + + drawBuffered memdc + = do -- set the device origin for scrolled windows + dcSetDeviceOrigin memdc (pointFromVec (vecNegate (vecFromPoint (rectTopLeft view)))) + dcSetClippingRegion memdc view + -- dcBlit memdc view dc (rectTopLeft view) wxCOPY False + bracket (dcGetBackground dc) + (\brush -> do dcSetBrush memdc nullBrush + brushDelete brush) + (\brush -> do -- set the background to the owner brush + dcSetBackground memdc brush + if (wxToolkit == WxMac) + then withBrushStyle brushTransparent (dcSetBrush memdc) + else dcSetBrush memdc brush + clear (downcastDC memdc) + -- and finally do the drawing! + draw (downcastDC memdc) -- down cast + ) + -- blit the memdc into the owner dc. + dcBlit dc view memdc (rectTopLeft view) wxCOPY False + return ()
src/haskell/Graphics/UI/WXCore/Events.hs view
@@ -1,2825 +1,2825 @@-{-# LANGUAGE ForeignFunctionInterface #-}-------------------------------------------------------------------------------------------{-| Module : Events- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Dynamically set (and get) Haskell event handlers for basic wxWidgets events.-Note that one should always call 'skipCurrentEvent' when an event is not-processed in the event handler so that other eventhandlers can process the-event.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Events- (- -- * Set event handlers- -- ** Controls- buttonOnCommand- , checkBoxOnCommand- , choiceOnCommand- , comboBoxOnCommand- , comboBoxOnTextEnter- , controlOnText- , listBoxOnCommand- , spinCtrlOnCommand- -- , listBoxOnDClick- , radioBoxOnCommand- , sliderOnCommand- , textCtrlOnTextEnter- , listCtrlOnListEvent- , toggleButtonOnCommand- , treeCtrlOnTreeEvent- , gridOnGridEvent- , propertyGridOnPropertyGridEvent-- -- ** Windows- , windowOnMouse- , windowOnKeyChar- , windowOnKeyDown- , windowOnKeyUp- , windowAddOnClose- , windowOnClose- , windowOnDestroy- , windowAddOnDelete- , windowOnDelete- , windowOnCreate- , windowOnIdle- , windowOnTimer- , windowOnSize- , windowOnFocus- , windowOnActivate- , windowOnPaint- , windowOnPaintRaw- , windowOnContextMenu- , windowOnScroll- , htmlWindowOnHtmlEvent-- -- ** Event handlers- , evtHandlerOnMenuCommand- , evtHandlerOnEndProcess- , evtHandlerOnInput- , evtHandlerOnInputSink- , evtHandlerOnTaskBarIconEvent-- -- ** Raw STC export- , EventSTC(..)- , stcOnSTCEvent- , stcGetOnSTCEvent-- -- ** Print events- , EventPrint(..)- , printOutOnPrint-- -- * Get event handlers- -- ** Controls- , buttonGetOnCommand- , checkBoxGetOnCommand- , choiceGetOnCommand- , comboBoxGetOnCommand- , comboBoxGetOnTextEnter- , controlGetOnText- , listBoxGetOnCommand- , spinCtrlGetOnCommand- -- , listBoxGetOnDClick- , radioBoxGetOnCommand- , sliderGetOnCommand- , textCtrlGetOnTextEnter- , listCtrlGetOnListEvent- , toggleButtonGetOnCommand- , treeCtrlGetOnTreeEvent- , gridGetOnGridEvent- , propertyGridGetOnPropertyGridEvent-- -- ** Windows- , windowGetOnMouse- , windowGetOnKeyChar- , windowGetOnKeyDown- , windowGetOnKeyUp- , windowGetOnClose- , windowGetOnDestroy- , windowGetOnDelete- , windowGetOnCreate- , windowGetOnIdle- , windowGetOnTimer- , windowGetOnSize- , windowGetOnFocus- , windowGetOnActivate- , windowGetOnPaint- , windowGetOnPaintRaw- , windowGetOnContextMenu- , windowGetOnScroll- , htmlWindowGetOnHtmlEvent-- -- ** Event handlers- , evtHandlerGetOnMenuCommand- , evtHandlerGetOnEndProcess- , evtHandlerGetOnInputSink- , evtHandlerGetOnTaskBarIconEvent-- -- ** Printing- , printOutGetOnPrint-- -- * Timers- , windowTimerAttach- , windowTimerCreate- , timerOnCommand- , timerGetOnCommand-- -- Idle events- , appRegisterIdle-- -- * Calenders- , EventCalendar(..)- , calendarCtrlOnCalEvent - , calendarCtrlGetOnCalEvent-- -- * Types- -- ** Streams- , StreamStatus(..), streamStatusFromInt-- -- ** Modifiers- , Modifiers(..)- , showModifiers- , noneDown, justShift, justAlt, justControl, justMeta, isNoneDown- , isNoShiftAltControlDown-- -- ** Mouse events- , EventMouse (..)- , showMouse- , mousePos, mouseModifiers-- -- ** Keyboard events- , EventKey (..), Key(..)- , keyKey, keyModifiers, keyPos- , showKey, showKeyModifiers-- -- * Set event handlers- -- ** Drop Target events- , DragResult (..)- , dropTargetOnData- , dropTargetOnDrop- , dropTargetOnEnter- , dropTargetOnDragOver- , dropTargetOnLeave- - -- ** On DragAndDropEvent- , DragMode (..)- , dragAndDrop- - -- *** Special handler for Drop File event- , fileDropTarget- -- *** Special handler for Drop Text event - , textDropTarget-- -- ** Scroll events- , EventScroll(..), Orientation(..)- , scrollOrientation, scrollPos-- -- ** Tree control events- , EventTree(..)- - -- ** List control events- , EventList(..), ListIndex-- -- ** Grid control events- , EventGrid(..), Row, Column-- -- ** Html window events- , EventHtml(..)- - -- * TaskBar icon events- , EventTaskBarIcon(..)-- -- ** PropertyGrid events- , EventPropertyGrid(..)--- -- * Current event- , propagateEvent- , skipCurrentEvent- , withCurrentEvent-- -- * Primitive- , appOnInit-- -- ** Client data- , treeCtrlSetItemClientData-- , evtHandlerWithClientData- , evtHandlerSetClientData-- , objectWithClientData- , objectSetClientData -- -- ** Input sink- , inputSinkEventLastString-- -- ** Keys- , KeyCode- , modifiersToAccelFlags- , keyCodeToKey, keyToKeyCode-- -- ** Events- , windowOnEvent, windowOnEventEx-- -- ** Generic- , OnEvent- , evtHandlerOnEvent- , evtHandlerOnEventConnect-- -- ** Unsafe- , unsafeTreeCtrlGetItemClientData- , unsafeEvtHandlerGetClientData- , unsafeObjectGetClientData- , unsafeGetHandlerState- , unsafeWindowGetHandlerState- ) where--import Data.List( intersperse, findIndex )-import System.Environment( getProgName, getArgs )-import Foreign.StablePtr-import Foreign.Ptr-import Foreign.C.Types-import Foreign.C.String-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array-import Foreign.Marshal.Utils--import Data.Char ( chr ) -- used in stc-import Data.Maybe ( fromMaybe, fromJust )-import Control.Concurrent.MVar-import System.IO.Unsafe( unsafePerformIO )--import qualified Data.IntMap as IntMap-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Draw-import Graphics.UI.WXCore.Defines----------------------------------------------------------------------------------------------- Controls (COMMAND events)---------------------------------------------------------------------------------------------- | Set an event handler for a push button.-buttonOnCommand :: Button a -> IO () -> IO ()-buttonOnCommand button eventHandler- = windowOnEvent button [wxEVT_COMMAND_BUTTON_CLICKED] eventHandler (\evt -> eventHandler)----- | Get the current button event handler on a window.-buttonGetOnCommand :: Window a -> IO (IO ())-buttonGetOnCommand button- = unsafeWindowGetHandlerState button wxEVT_COMMAND_BUTTON_CLICKED skipCurrentEvent----- | Set an event handler for "updated text", works for example on a 'TextCtrl' and 'ComboBox'.-controlOnText :: Control a -> IO () -> IO ()-controlOnText control eventHandler- = windowOnEvent control [wxEVT_COMMAND_TEXT_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current event handler for updated text.-controlGetOnText :: Control a -> IO (IO ())-controlGetOnText control- = unsafeWindowGetHandlerState control wxEVT_COMMAND_TEXT_UPDATED skipCurrentEvent----- | Set an event handler for an enter command in a text control.-textCtrlOnTextEnter :: TextCtrl a -> IO () -> IO ()-textCtrlOnTextEnter textCtrl eventHandler- = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)---- | Get the current text enter event handler.-textCtrlGetOnTextEnter :: TextCtrl a -> IO (IO ())-textCtrlGetOnTextEnter textCtrl- = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent--{---- | Set an event handler for when a user tries to type more than than the maximally--- allowed text in a text control.-textCtrlOnTextMaxLen :: IO () -> TextCtrl a -> IO ()-textCtrlOnTextMaxLen eventHandler textCtrl- = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_MAXLEN] eventHandler (\evt -> eventHandler)---- | Get the current maximal text event handler.-textCtrlGetOnTextMaxLen :: TextCtrl a -> IO (IO ())-textCtrlGetOnTextMaxLen textCtrl- = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_MAXLEN skipCurrentEvent--}---- | Set an event handler for an enter command in a combo box.-comboBoxOnTextEnter :: ComboBox a -> IO () -> IO ()-comboBoxOnTextEnter comboBox eventHandler- = windowOnEvent comboBox [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler)---- | Get the current text enter event handler.-comboBoxGetOnTextEnter :: ComboBox a -> IO (IO ())-comboBoxGetOnTextEnter comboBox- = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent----- | Set an event handler for when a combo box item is selected.-comboBoxOnCommand :: ComboBox a -> IO () -> IO ()-comboBoxOnCommand comboBox eventHandler- = windowOnEvent comboBox [wxEVT_COMMAND_COMBOBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current combo box event handler for selections-comboBoxGetOnCommand :: ComboBox a -> IO (IO ())-comboBoxGetOnCommand comboBox- = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_COMBOBOX_SELECTED skipCurrentEvent---- | Set an event handler for when a listbox item is (de)selected.-listBoxOnCommand :: ListBox a -> IO () -> IO ()-listBoxOnCommand listBox eventHandler- = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current listbox event handler for selections.-listBoxGetOnCommand :: ListBox a -> IO (IO ())-listBoxGetOnCommand listBox- = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_SELECTED skipCurrentEvent--{---- | Set an event handler for when a listbox item is double clicked. Takes the selected--- item index as an argument.-listBoxOnDClick :: (Int -> IO ()) -> ListBox a -> IO ()-listBoxOnDClick eventHandler listBox- = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_DCLICK] eventHandler dclickHandler- where- dclickHandler event- = do index <- commandEventGetInt (objectCast event)- eventHandler index---- | Get the current double click listbox event handler.-listBoxGetOnDClick :: ListBox a -> IO (IO ())-listBoxGetOnDClick listBox- = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_DCLICK (\index -> skipCurrentEvent)--}---- | Set an event handler for when a choice item is (de)selected.-choiceOnCommand :: Choice a -> IO () -> IO ()-choiceOnCommand choice eventHandler- = windowOnEvent choice [wxEVT_COMMAND_CHOICE_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current choice command event handler.-choiceGetOnCommand :: Choice a -> IO (IO ())-choiceGetOnCommand choice- = unsafeWindowGetHandlerState choice wxEVT_COMMAND_CHOICE_SELECTED skipCurrentEvent----- | Set an event handler for when a radiobox item is selected.-radioBoxOnCommand :: RadioBox a -> IO () -> IO ()-radioBoxOnCommand radioBox eventHandler- = windowOnEvent radioBox [wxEVT_COMMAND_RADIOBOX_SELECTED] eventHandler (\evt -> eventHandler)---- | Get the current radio box command handler.-radioBoxGetOnCommand :: RadioBox a -> IO (IO ())-radioBoxGetOnCommand radioBox- = unsafeWindowGetHandlerState radioBox wxEVT_COMMAND_RADIOBOX_SELECTED skipCurrentEvent----- | Set an event handler for when a slider item changes.-sliderOnCommand :: Slider a -> IO () -> IO ()-sliderOnCommand slider eventHandler- = windowOnEvent slider [wxEVT_COMMAND_SLIDER_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current slider command event handler.-sliderGetOnCommand :: Slider a -> IO (IO ())-sliderGetOnCommand slider- = unsafeWindowGetHandlerState slider wxEVT_COMMAND_SLIDER_UPDATED skipCurrentEvent------ | Set an event handler for when a checkbox clicked.-checkBoxOnCommand :: CheckBox a -> (IO ()) -> IO ()-checkBoxOnCommand checkBox eventHandler- = windowOnEvent checkBox [wxEVT_COMMAND_CHECKBOX_CLICKED] eventHandler (\evt -> eventHandler)---- | Get the current check box event handler.-checkBoxGetOnCommand :: CheckBox a -> IO (IO ())-checkBoxGetOnCommand checkBox- = unsafeWindowGetHandlerState checkBox wxEVT_COMMAND_CHECKBOX_CLICKED (skipCurrentEvent)---- | Set an event handler for when a spinCtrl clicked.-spinCtrlOnCommand :: SpinCtrl a -> (IO ()) -> IO ()-spinCtrlOnCommand spinCtrl eventHandler- = windowOnEvent spinCtrl [wxEVT_COMMAND_SPINCTRL_UPDATED] eventHandler (\evt -> eventHandler)---- | Get the current check box event handler.-spinCtrlGetOnCommand :: SpinCtrl a -> IO (IO ())-spinCtrlGetOnCommand spinCtrl- = unsafeWindowGetHandlerState spinCtrl wxEVT_COMMAND_SPINCTRL_UPDATED (skipCurrentEvent)---- | Set an event handler for a push button.-toggleButtonOnCommand :: ToggleButton a -> IO () -> IO ()-toggleButtonOnCommand button eventHandler- = windowOnEvent button [wxEVT_COMMAND_TOGGLEBUTTON_CLICKED] eventHandler (\evt -> eventHandler)---- | Get the current button event handler on a window.-toggleButtonGetOnCommand :: Window a -> IO (IO ())-toggleButtonGetOnCommand button- = unsafeWindowGetHandlerState button wxEVT_COMMAND_TOGGLEBUTTON_CLICKED skipCurrentEvent--{------------------------------------------------------------------------------------------ wxStyledTextCtrl's event------------------------------------------------------------------------------------------}--- | Scintilla events. * Means extra information is available (excluding position,--- key and modifiers) but not yet implemented. ! means it's done-data EventSTC- = STCChange -- ^ ! wxEVT_STC_CHANGE.- | STCStyleNeeded -- ^ ! wxEVT_STC_STYLENEEDED.- | STCCharAdded Char Int -- ^ ? wxEVT_STC_CHARADDED. The position seems to be broken- | STCSavePointReached -- ^ ! wxEVT_STC_SAVEPOINTREACHED.- | STCSavePointLeft -- ^ ! wxEVT_STC_SAVEPOINTLEFT.- | STCROModifyAttempt -- ^ ! wxEVT_STC_ROMODIFYATTEMPT.- | STCKey -- ^ * wxEVT_STC_KEY.- -- kolmodin 20050304:- -- is this event ever raised? not under linux.- -- according to davve, not under windows either- | STCDoubleClick -- ^ ! wxEVT_STC_DOUBLECLICK.- | STCUpdateUI -- ^ ! wxEVT_STC_UPDATEUI.- | STCModified Int Int (Maybe String) Int Int Int Int Int -- ^ ? wxEVT_STC_MODIFIED.- | STCMacroRecord Int Int Int -- ^ ! wxEVT_STC_MACRORECORD iMessage wParam lParam- | STCMarginClick Bool Bool Bool Int Int -- ^ ? wxEVT_STC_MARGINCLICK.- -- kolmodin 20050304:- -- Add something nicer for alt, shift and ctrl?- -- Perhaps a new datatype or a tuple.- | STCNeedShown Int Int -- ^ ! wxEVT_STC_NEEDSHOWN length position.- | STCPainted -- ^ ! wxEVT_STC_PAINTED. - | STCUserListSelection Int String -- ^ ! wxEVT_STC_USERLISTSELECTION listType text- | STCUriDropped String -- ^ ! wxEVT_STC_URIDROPPED- | STCDwellStart Point -- ^ ! wxEVT_STC_DWELLSTART- | STCDwellEnd Point -- ^ ! wxEVT_STC_DWELLEND- | STCStartDrag Int Int String -- ^ ! wxEVT_STC_START_DRAG.- | STCDragOver Point DragResult -- ^ ! wxEVT_STC_DRAG_OVER- | STCDoDrop String DragResult -- ^ ! wxEVT_STC_DO_DROP- | STCZoom -- ^ ! wxEVT_STC_ZOOM- | STCHotspotClick -- ^ ! wxEVT_STC_HOTSPOT_CLICK- | STCHotspotDClick -- ^ ! wxEVT_STC_HOTSPOT_DCLICK- | STCCalltipClick -- ^ ! wxEVT_STC_CALLTIP_CLICK- | STCAutocompSelection -- ^ ! wxEVT_STC_AUTOCOMP_SELECTION- | STCUnknown -- ^ Unknown event. Should never occur.--instance Show EventSTC where- show STCChange = "(stc event: change)"- show STCStyleNeeded = "(stc event: style needed)"- show (STCCharAdded c p) = "(stc event: char added: " ++ show c ++ " at position " ++ show p ++ ")"- show STCSavePointReached = "(stc event: save point reached)"- show STCSavePointLeft = "(stc event: save point left)"- show STCROModifyAttempt = "(stc event: read only modify attempt)"- show STCKey = "(stc event: key)"- show STCDoubleClick = "(stc event: double click)"- show STCUpdateUI = "(stc event: update ui)"- show (STCModified p mt t len ladd line fln flp) = "(stc event: modified: position " ++ show p ++ ", modtype " ++ show mt ++ ", text " ++ show t ++ ", length " ++ show len ++ ", lines added " ++ show ladd ++ ", line " ++ show line ++ ", fln " ++ show fln ++ ", flp " ++ show flp ++ ")"- show (STCMacroRecord m wp lp) = "(stc event: macro record, message " ++ show m ++ ", wParam " ++ show wp ++ ", lParam " ++ show lp ++ ")"- show (STCMarginClick alt shift ctrl p m) = "(stc event: margin " ++ show m ++ " clicked, pos " ++ show p ++ ", modifiers = [" ++ (if alt then "alt, " else "") ++ (if shift then "shift, " else "") ++ (if ctrl then "control" else "") ++ "])"- show (STCNeedShown p len) = "(stc event: need to show lines from " ++ show p ++ ", length " ++ show len ++ ")"- show STCPainted = "(stc event: painted)"- show (STCUserListSelection lt t) = "(stc event: user list selection, type " ++ show lt ++ ", text " ++ show t ++ ")"- show (STCUriDropped t) = "(stc event: uri dropped: " ++ t ++ ")"- show (STCDwellStart p) = "(stc event: dwell start, (x,y) " ++ show p ++ ")"- show (STCDwellEnd p) = "(stc event: dwell end, (x,y) " ++ show p ++ ")"- show (STCStartDrag lin car str) = "(stc event: start drag, line " ++ show lin ++ ", caret " ++ show car ++ ", text " ++ show str ++ ")"- show (STCDragOver p res) = "(stc event: drag over, (x,y) " ++ show p ++ ", dragResult " ++ show res ++ ")"- show (STCDoDrop str res) = "(stc event: do drop, text " ++ show str ++ ", dragResult " ++ show res ++ ")"- show STCZoom = "(stc event: zoom)"- show STCHotspotClick = "(stc event: hotspot click)"- show STCHotspotDClick = "(stc event: hotspot double click)"- show STCCalltipClick = "(stc event: calltip clicked)"- show STCAutocompSelection = "(stc event: autocomp selectioned)"- show STCUnknown = "(stc event: unknown)"--fromSTCEvent :: StyledTextEvent a -> IO EventSTC-fromSTCEvent event- = do et <- eventGetEventType event- case lookup et stcEvents of- Just action -> action event- Nothing -> return STCUnknown--stcEvents :: [(EventId, StyledTextEvent a -> IO EventSTC)]-stcEvents = [ (wxEVT_STC_CHANGE, \_ -> return STCChange)- , (wxEVT_STC_STYLENEEDED, \_ -> return STCStyleNeeded)- , (wxEVT_STC_CHARADDED, charAdded)- , (wxEVT_STC_SAVEPOINTREACHED, \_ -> return STCSavePointReached)- , (wxEVT_STC_SAVEPOINTLEFT, \_ -> return STCSavePointLeft)- , (wxEVT_STC_ROMODIFYATTEMPT, \_ -> return STCROModifyAttempt)- , (wxEVT_STC_KEY, \_ -> return STCKey)- , (wxEVT_STC_DOUBLECLICK, \_ -> return STCDoubleClick)- , (wxEVT_STC_UPDATEUI, \_ -> return STCUpdateUI)- , (wxEVT_STC_MODIFIED, modified)- , (wxEVT_STC_MACRORECORD, macroRecord)- , (wxEVT_STC_MARGINCLICK, marginClick)- , (wxEVT_STC_NEEDSHOWN, needShown)- , (wxEVT_STC_PAINTED, \_ -> return STCPainted)- , (wxEVT_STC_USERLISTSELECTION, userListSelection)- , (wxEVT_STC_URIDROPPED, uriDropped)- , (wxEVT_STC_DWELLSTART, dwellStart)- , (wxEVT_STC_DWELLEND, dwellEnd)- , (wxEVT_STC_START_DRAG, startDrag)- , (wxEVT_STC_DRAG_OVER, dragOver)- , (wxEVT_STC_DO_DROP, doDrop)- , (wxEVT_STC_ZOOM, \_ -> return STCZoom)- , (wxEVT_STC_HOTSPOT_CLICK, \_ -> return STCHotspotClick)- , (wxEVT_STC_CALLTIP_CLICK, \_ -> return STCCalltipClick)- -- TODO: STCAutocompSelection event is not tested yet.- , (wxEVT_STC_AUTOCOMP_SELECTION, \_ -> return STCAutocompSelection)- ]- where- charAdded evt = do- c <- styledTextEventGetKey evt- let c' | c < 0 = chr $ c + 256- | otherwise = chr c- p <- styledTextEventGetPosition evt- return $ STCCharAdded c' p- modified evt = do- p <- styledTextEventGetPosition evt- mt <- styledTextEventGetModificationType evt- t <- styledTextEventGetText evt- len <- styledTextEventGetLength evt- ladd <- styledTextEventGetLinesAdded evt- line <- styledTextEventGetLine evt- fln <- styledTextEventGetFoldLevelNow evt- flp <- styledTextEventGetFoldLevelPrev evt - -- TODO: t should only be returned under some modificationtype conditions- -- or should we always return it?- return $ STCModified p mt (Just t) len ladd line fln flp- macroRecord evt = do- m <- styledTextEventGetMessage evt- wp <- styledTextEventGetWParam evt- lp <- styledTextEventGetLParam evt- return $ STCMacroRecord m wp lp- marginClick evt = do- alt <- styledTextEventGetAlt evt- shift <- styledTextEventGetShift evt- ctrl <- styledTextEventGetControl evt- p <- styledTextEventGetPosition evt- m <- styledTextEventGetMargin evt- return $ STCMarginClick alt shift ctrl p m- needShown evt = do- p <- styledTextEventGetPosition evt- len <- styledTextEventGetLength evt- return $ STCNeedShown p len- {-- -- expEVT_STC_POSCHANGED is removed in wxWidgets-2.6.x.- posChanged evt = do- p <- styledTextEventGetPosition evt- return $ STCPosChanged p- -}- userListSelection evt = do- lt <- styledTextEventGetListType evt- text <- styledTextEventGetText evt- return $ STCUserListSelection lt text- uriDropped evt = do- t <- styledTextEventGetText evt- return $ STCUriDropped t- dwellStart evt = do- x <- styledTextEventGetX evt- y <- styledTextEventGetY evt- return $ STCDwellStart (point x y)- dwellEnd evt = do- x <- styledTextEventGetX evt- y <- styledTextEventGetY evt- return $ STCDwellEnd (point x y)- startDrag evt = do- lin <- styledTextEventGetLine evt- car <- styledTextEventGetPosition evt- str <- styledTextEventGetDragText evt- return $ STCStartDrag lin car str- dragOver evt = do- x <- styledTextEventGetX evt- y <- styledTextEventGetY evt- res <- styledTextEventGetDragResult evt- return $ STCDragOver (point x y) $ toDragResult res- doDrop evt = do- str <- styledTextEventGetDragText evt- res <- styledTextEventGetDragResult evt- return $ STCDoDrop str $ toDragResult res--stcOnSTCEvent :: StyledTextCtrl a -> (EventSTC -> IO ()) -> IO ()-stcOnSTCEvent stc handler- = do windowOnEvent stc stcEventsAll handler eventHandler- where- eventHandler event- = do eventSTC <- fromSTCEvent (objectCast event)- if isSTCUnknown eventSTC- then return () -- what else?- else handler eventSTC- isSTCUnknown :: EventSTC -> Bool- isSTCUnknown STCUnknown = True- isSTCUnknown _ = False- -- most of the events can probably be ignored- stcEventsAll = map fst stcEvents--stcGetOnSTCEvent :: StyledTextCtrl a -> IO (EventSTC -> IO ())-stcGetOnSTCEvent window- = unsafeWindowGetHandlerState window (head $ map fst stcEvents) (\ev -> skipCurrentEvent)--{------------------------------------------------------------------------------------------ Printing------------------------------------------------------------------------------------------}--- | Printer events.-data EventPrint = PrintBeginDoc (IO ()) Int Int -- ^ Print a copy: cancel, start page, end page- | PrintEndDoc- | PrintBegin -- ^ Begin a print job.- | PrintEnd- | PrintPrepare -- ^ Prepare: chance to call 'printOutSetPageLimits' for example.- | PrintPage (IO ()) (DC ()) Int -- ^ Print a page: cancel, printer device context, page number.- | PrintUnknown Int -- ^ Unknown print event with event code---- | Convert a 'PrintEvent' object to an 'EventPrint' value.-fromPrintEvent :: WXCPrintEvent a -> IO EventPrint-fromPrintEvent event- = do tp <- eventGetEventType event- case lookup tp printEvents of- Just f -> f event- Nothing -> return (PrintUnknown tp)---- | Print event list.-printEvents :: [(Int,WXCPrintEvent a -> IO EventPrint)]-printEvents- = [(wxEVT_PRINT_PAGE, \ev -> do page <- wxcPrintEventGetPage ev- pout <- wxcPrintEventGetPrintout ev- dc <- printoutGetDC pout- let cancel = wxcPrintEventSetContinue ev False- return (PrintPage cancel dc page))- ,(wxEVT_PRINT_BEGIN_DOC,\ev -> do page <- wxcPrintEventGetPage ev- epage<- wxcPrintEventGetEndPage ev- let cancel = wxcPrintEventSetContinue ev False- return (PrintBeginDoc cancel page epage))- ,(wxEVT_PRINT_PREPARE, \ev -> return PrintPrepare)- ,(wxEVT_PRINT_END_DOC, \ev -> return PrintEndDoc)- ,(wxEVT_PRINT_BEGIN, \ev -> return PrintBegin)- ,(wxEVT_PRINT_END, \ev -> return PrintEnd)- ]---- | Set an event handler for printing.-printOutOnPrint :: WXCPrintout a -> (EventPrint -> IO ()) -> IO ()-printOutOnPrint printOut eventHandler- = do evtHandler <- wxcPrintoutGetEvtHandler printOut- evtHandlerOnEvent evtHandler idAny idAny (map fst printEvents)- eventHandler (\_ -> return ()) printHandler- where- printHandler event- = do eventPrint <- fromPrintEvent (objectCast event)- eventHandler eventPrint---- | Get the current print handler-printOutGetOnPrint :: WXCPrintout a -> IO (EventPrint -> IO ())-printOutGetOnPrint printOut - = do evtHandler <- wxcPrintoutGetEvtHandler printOut- unsafeGetHandlerState evtHandler idAny wxEVT_PRINT_PAGE (\ev -> skipCurrentEvent)---{------------------------------------------------------------------------------------------ Scrolling------------------------------------------------------------------------------------------}--- | Scroll events.-data EventScroll = ScrollTop !Orientation !Int -- ^ scroll to top- | ScrollBottom !Orientation !Int -- ^ scroll to bottom- | ScrollLineUp !Orientation !Int -- ^ scroll line up- | ScrollLineDown !Orientation !Int -- ^ scroll line down- | ScrollPageUp !Orientation !Int -- ^ scroll page up- | ScrollPageDown !Orientation !Int -- ^ scroll page down- | ScrollTrack !Orientation !Int -- ^ frequent event when user drags the thumbtrack- | ScrollRelease !Orientation !Int -- ^ thumbtrack is released- deriving Show---- | The orientation of a widget.-data Orientation = Horizontal | Vertical- deriving (Eq, Show)----- | Get the orientation of a scroll event.-scrollOrientation :: EventScroll -> Orientation-scrollOrientation scroll- = case scroll of- ScrollTop orient pos -> orient- ScrollBottom orient pos -> orient- ScrollLineUp orient pos -> orient- ScrollLineDown orient pos -> orient- ScrollPageUp orient pos -> orient- ScrollPageDown orient pos -> orient- ScrollTrack orient pos -> orient- ScrollRelease orient pos -> orient---- | Get the position of the scroll bar.-scrollPos :: EventScroll -> Int-scrollPos scroll- = case scroll of- ScrollTop orient pos -> pos- ScrollBottom orient pos -> pos- ScrollLineUp orient pos -> pos- ScrollLineDown orient pos -> pos- ScrollPageUp orient pos -> pos- ScrollPageDown orient pos -> pos- ScrollTrack orient pos -> pos- ScrollRelease orient pos -> pos----fromScrollEvent :: ScrollWinEvent a -> IO EventScroll-fromScrollEvent event- = do orient <- scrollWinEventGetOrientation event- pos <- scrollWinEventGetPosition event- tp <- eventGetEventType event- let orientation | orient == wxHORIZONTAL = Horizontal- | otherwise = Vertical- case lookup tp scrollEvents of- Just evt -> return (evt orientation pos)- Nothing -> return (ScrollRelease orientation pos)--scrollEvents :: [(Int,Orientation -> Int -> EventScroll)]-scrollEvents- = [(wxEVT_SCROLLWIN_TOP, ScrollTop)- ,(wxEVT_SCROLLWIN_BOTTOM, ScrollBottom)- ,(wxEVT_SCROLLWIN_LINEUP, ScrollLineUp)- ,(wxEVT_SCROLLWIN_LINEDOWN, ScrollLineDown)- ,(wxEVT_SCROLLWIN_PAGEUP, ScrollPageUp)- ,(wxEVT_SCROLLWIN_PAGEDOWN, ScrollPageDown)- ,(wxEVT_SCROLLWIN_THUMBTRACK, ScrollTrack)- ,(wxEVT_SCROLLWIN_THUMBRELEASE, ScrollRelease)- ]---- | Set a scroll event handler.-windowOnScroll :: Window a -> (EventScroll -> IO ()) -> IO ()-windowOnScroll window eventHandler- = windowOnEvent window (map fst scrollEvents) eventHandler scrollHandler- where- scrollHandler event- = do eventScroll <- fromScrollEvent (objectCast event)- eventHandler eventScroll---- | Get the current scroll event handler of a window.-windowGetOnScroll :: Window a -> IO (EventScroll -> IO ())-windowGetOnScroll window- = unsafeWindowGetHandlerState window wxEVT_SCROLLWIN_TOP (\scroll -> skipCurrentEvent)--{--------------------------------------------------------------------------- Html event---------------------------------------------------------------------------}--- | Html window events-data EventHtml - = HtmlCellClicked String EventMouse Point - -- ^ A /cell/ is clicked. Contains the cell /id/ attribute value, the mouse event and the logical coordinates.- | HtmlCellHover String - -- ^ The mouse hovers over a cell. Contains the cell /id/ attribute value.- | HtmlLinkClicked String String String EventMouse Point - -- ^ A link is clicked. Contains the hyperlink, the frame target, the cell /id/ attribute value, the mouse event, and the logical coordinates.- | HtmlSetTitle String- -- ^ Called when a @<title>@ tag is parsed.- | HtmlUnknown - -- ^ Unrecognised html event--instance Show EventHtml where- show ev- = case ev of- HtmlCellClicked id mouse pnt -> "Html Cell " ++ show id ++ " clicked: " ++ show mouse- HtmlLinkClicked href target id mouse p -> "Html Link " ++ show id ++ " clicked: " ++ href- HtmlCellHover id -> "Html Cell " ++ show id ++ " hover"- HtmlSetTitle title -> "Html event title: " ++ title- HtmlUnknown -> "Html event unknown"--fromHtmlEvent :: WXCHtmlEvent a -> IO EventHtml-fromHtmlEvent event- = do tp <- eventGetEventType event- case lookup tp htmlEvents of- Nothing -> return HtmlUnknown - Just action -> action event- where- htmlEvents = [(wxEVT_HTML_CELL_MOUSE_HOVER, htmlHover)- ,(wxEVT_HTML_CELL_CLICKED, htmlClicked)- ,(wxEVT_HTML_LINK_CLICKED, htmlLink)- ,(wxEVT_HTML_SET_TITLE, htmlTitle)]-- htmlTitle event- = do title <- commandEventGetString event- return (HtmlSetTitle title)-- htmlHover event- = do id <- wxcHtmlEventGetHtmlCellId event- return (HtmlCellHover id)-- htmlClicked event- = do id <- wxcHtmlEventGetHtmlCellId event- mouseEv <- wxcHtmlEventGetMouseEvent event- mouse <- fromMouseEvent mouseEv- pnt <- wxcHtmlEventGetLogicalPosition event- return (HtmlCellClicked id mouse pnt)-- htmlLink event- = do id <- wxcHtmlEventGetHtmlCellId event- mouseEv <- wxcHtmlEventGetMouseEvent event- mouse <- fromMouseEvent mouseEv- href <- wxcHtmlEventGetHref event- target <- wxcHtmlEventGetTarget event- pnt <- wxcHtmlEventGetLogicalPosition event- return (HtmlLinkClicked href target id mouse pnt)- --- | Set a html event handler for a html window. The first argument determines whether--- hover events ('HtmlCellHover') are handled or not.-htmlWindowOnHtmlEvent :: WXCHtmlWindow a -> Bool -> (EventHtml -> IO ()) -> IO ()-htmlWindowOnHtmlEvent window allowHover handler- = windowOnEvent window htmlEvents handler eventHandler- where- htmlEvents- = [wxEVT_HTML_CELL_CLICKED,wxEVT_HTML_LINK_CLICKED,wxEVT_HTML_SET_TITLE]- ++ (if allowHover then [wxEVT_HTML_CELL_MOUSE_HOVER] else [])-- eventHandler event- = do eventHtml <- fromHtmlEvent (objectCast event)- handler eventHtml---- | Get the current html event handler of a html window.-htmlWindowGetOnHtmlEvent :: WXCHtmlWindow a -> IO (EventHtml -> IO ())-htmlWindowGetOnHtmlEvent window- = unsafeWindowGetHandlerState window wxEVT_HTML_CELL_CLICKED (\ev -> skipCurrentEvent)-- - --{------------------------------------------------------------------------------------------ Close, Destroy, Create------------------------------------------------------------------------------------------}--- | Adds a close handler to the currently installed close handlers.-windowAddOnClose :: Window a -> IO () -> IO ()-windowAddOnClose window new- = do prev <- windowGetOnClose window- windowOnClose window (do{ new; prev })---- | Set an event handler that is called when the user tries to close a frame or dialog.--- Don't forget to call the previous handler or 'frameDestroy' explicitly or otherwise the--- frame won't be closed.-windowOnClose :: Window a -> IO () -> IO ()-windowOnClose window eventHandler- = windowOnEvent window [wxEVT_CLOSE_WINDOW] eventHandler (\ev -> eventHandler)---- | Get the current close event handler.-windowGetOnClose :: Window a -> IO (IO ())-windowGetOnClose window- = unsafeWindowGetHandlerState window wxEVT_CLOSE_WINDOW (do windowDestroy window; return ())---- | Set an event handler that is called when the window is destroyed.--- /Note: does not seem to work on windows/.-windowOnDestroy :: Window a -> IO () -> IO ()-windowOnDestroy window eventHandler- = windowOnEvent window [wxEVT_DESTROY] eventHandler (\ev -> eventHandler)---- | Get the current destroy event handler.-windowGetOnDestroy :: Window a -> IO (IO ())-windowGetOnDestroy window- = unsafeWindowGetHandlerState window wxEVT_DESTROY (return ())---- | Add a delete-event handler to the current installed delete-event handlers.------ > windowAddOnDelete window new--- > = do prev <- windowGetOnDelete window--- > windowOnDelete window (do{ new; prev })--windowAddOnDelete :: Window a -> IO () -> IO ()-windowAddOnDelete window new- = do prev <- windowGetOnDelete window- windowOnDelete window (do{ new; prev })---- | Set an event handler that is called when the window is deleted.--- Use with care as the window itself is in a deletion state.-windowOnDelete :: Window a -> IO () -> IO ()-windowOnDelete window eventHandler- = windowOnEventEx window [wxEVT_DELETE] eventHandler onDelete (\ev -> return ())- where- onDelete ownerDeleted- | ownerDeleted = eventHandler- | otherwise = return () -- don't run on disconnect!---- | Get the current delete event handler.-windowGetOnDelete :: Window a -> IO (IO ())-windowGetOnDelete window- = unsafeWindowGetHandlerState window wxEVT_DELETE (return ())----- | Set an event handler that is called when the window is created.-windowOnCreate :: Window a -> IO () -> IO ()-windowOnCreate window eventHandler- = windowOnEvent window [wxEVT_CREATE] eventHandler (\ev -> eventHandler)---- | Get the current create event handler.-windowGetOnCreate :: Window a -> IO (IO ())-windowGetOnCreate window- = unsafeWindowGetHandlerState window wxEVT_CREATE (return ())---- | Set an event handler that is called when the window is resized.-windowOnSize :: Window a -> IO () -> IO ()-windowOnSize window eventHandler- = windowOnEvent window [wxEVT_SIZE] eventHandler (\ev -> eventHandler)---- | Get the current resize event handler.-windowGetOnSize :: Window a -> IO (IO ())-windowGetOnSize window- = unsafeWindowGetHandlerState window wxEVT_SIZE (return ())---- | Set an event handler that is called when the window is activated or deactivated.--- The event parameter is 'True' when the window is activated.-windowOnActivate :: Window a -> (Bool -> IO ()) -> IO ()-windowOnActivate window eventHandler- = windowOnEvent window [wxEVT_ACTIVATE] eventHandler activateHandler- where- activateHandler event- = do active <- activateEventGetActive (objectCast event)- eventHandler active---- | Get the current activate event handler.-windowGetOnActivate :: Window a -> IO (Bool -> IO ())-windowGetOnActivate window- = unsafeWindowGetHandlerState window wxEVT_ACTIVATE (\active -> return ())---- | Set an event handler that is called when the window gets or loses the focus.--- The event parameter is 'True' when the window gets the focus.-windowOnFocus :: Window a -> (Bool -> IO ()) -> IO ()-windowOnFocus window eventHandler- = do windowOnEvent window [wxEVT_SET_FOCUS] eventHandler getFocusHandler- windowOnEvent window [wxEVT_KILL_FOCUS] eventHandler killFocusHandler- where- getFocusHandler event- = eventHandler True- killFocusHandler event- = eventHandler False---- | Get the current focus event handler.-windowGetOnFocus :: Window a -> IO (Bool -> IO ())-windowGetOnFocus window- = unsafeWindowGetHandlerState window wxEVT_SET_FOCUS (\getfocus -> return ())----- | A context menu event is generated when the user righ-clicks in a window--- or presses shift-F10.-windowOnContextMenu :: Window a -> IO () -> IO ()-windowOnContextMenu window eventHandler- = windowOnEvent window [wxEVT_CONTEXT_MENU] eventHandler (\ev -> eventHandler)---- | Get the current context menu event handler.-windowGetOnContextMenu :: Window a -> IO (IO ())-windowGetOnContextMenu window- = unsafeWindowGetHandlerState window wxEVT_CONTEXT_MENU skipCurrentEvent---- | A menu event is generated when the user selects a menu item.--- You should install this handler on the window that owns the menubar or a popup menu.-evtHandlerOnMenuCommand :: EvtHandler a -> Id -> IO () -> IO ()-evtHandlerOnMenuCommand window id eventHandler- = evtHandlerOnEvent window id id [wxEVT_COMMAND_MENU_SELECTED] eventHandler (\_ -> return ()) (\ev -> eventHandler)---- | Get the current event handler for a certain menu.-evtHandlerGetOnMenuCommand :: EvtHandler a -> Id -> IO (IO ())-evtHandlerGetOnMenuCommand window id- = unsafeGetHandlerState window id wxEVT_COMMAND_MENU_SELECTED skipCurrentEvent----- | An idle event is generated in idle time. The handler should return whether more--- idle processing is needed ('True') or otherwise the event loop goes into a passive--- waiting state.-windowOnIdle :: Window a -> IO Bool -> IO ()-windowOnIdle window eventHandler- = windowOnEvent window [wxEVT_IDLE] eventHandler idleHandler- where- idleHandler event- = do requestMore <- eventHandler- idleEventRequestMore (objectCast event) requestMore- return ()---- | Get the current context menu event handler.-windowGetOnIdle :: Window a -> IO (IO Bool)-windowGetOnIdle window- = unsafeWindowGetHandlerState window wxEVT_IDLE (return False)----- | A timer event is generated by an attached timer, see 'windowTimerAttach'.--- /Broken!/ (use 'timerOnCommand' instead).-windowOnTimer :: Window a -> IO () -> IO ()-windowOnTimer window eventHandler- = windowOnEvent window [wxEVT_TIMER] eventHandler (\ev -> eventHandler)---- | Get the current timer handler.-windowGetOnTimer :: Window a -> IO (IO ())-windowGetOnTimer window- = unsafeWindowGetHandlerState window wxEVT_TIMER (return ())--{------------------------------------------------------------------------------------------ Paint------------------------------------------------------------------------------------------}--- | Set an event handler for /raw/ paint events. Draws directly to the--- paint device context ('PaintDC') and the 'DC' is not cleared when the handler--- is called. The handler takes two other arguments: the view rectangle and a--- list of /dirty/ rectangles. The rectangles contain logical coordinates and--- are already adjusted for scrolled windows.--- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!-windowOnPaintRaw :: Window a -> (DC () -> Rect -> [Rect] -> IO ()) -> IO ()-windowOnPaintRaw window paintHandler- = windowOnEvent window [wxEVT_PAINT] paintHandler onPaint - where- onPaint event- = do obj <- eventGetEventObject event- if (obj==objectNull)- then return ()- else do let window = objectCast obj- region <- windowGetUpdateRects window- view <- windowGetViewRect window- withPaintDC window (\paintDC ->- do isScrolled <- objectIsScrolledWindow window- when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)- paintHandler (downcastDC paintDC) view region)-- --- | Get the current /raw/ paint event handler. -windowGetOnPaintRaw :: Window a -> IO (DC () -> Rect -> [Rect] -> IO ())-windowGetOnPaintRaw window- = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc rect region -> return ())----- | Set an event handler for paint events. The implementation uses an --- intermediate buffer for non-flickering redraws. --- The device context ('DC')--- is always cleared before the paint handler is called. The paint handler--- also gets the currently visible view area as an argument (adjusted for scrolling).--- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler!-windowOnPaint :: Window a -> (DC () -> Rect -> IO ()) -> IO ()-windowOnPaint window paintHandler- | wxToolkit == WxMac = windowOnPaintRaw window (\dc view _ -> paintHandler dc view)- | otherwise- = do v <- varCreate objectNull- windowOnEventEx window [wxEVT_PAINT] paintHandler (destroy v) (onPaint v)- where- destroy v ownerDeleted- = do bitmap <- varSwap v objectNull- when (not (objectIsNull bitmap)) (bitmapDelete bitmap)-- onPaint v event- = do obj <- eventGetEventObject event- if (obj==objectNull)- then return ()- else do let window = objectCast obj- view <- windowGetViewRect window- withPaintDC window (\paintDC ->- do isScrolled <- objectIsScrolledWindow window- when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC)- -- Note: wxMSW 2.4 does not clear the properly scrolled view rectangle.- let clear dc | wxToolkit == WxMSW = dcClearRect dc view- | otherwise = dcClear dc- -- and repaint with buffer- dcBufferWithRefEx paintDC clear (Just v) view (\dc -> paintHandler dc view))----- | Get the current paint event handler.-windowGetOnPaint :: Window a -> IO (DC () -> Rect -> IO ())-windowGetOnPaint window- = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc view -> return ())----- Get the logical /dirty/ rectangles as a list of 'Rect'.-windowGetUpdateRects :: Window a -> IO [Rect]-windowGetUpdateRects window- = do region <- windowGetUpdateRegion window- iter <- regionIteratorCreateFromRegion region- rects <- getRects iter- regionIteratorDelete iter- p <- windowGetViewStart window- return (map (\r -> rectMove r (vecFromPoint p)) rects)- where- getRects iter- = do more <- regionIteratorHaveRects iter- if more- then do x <- regionIteratorGetX iter- y <- regionIteratorGetY iter- w <- regionIteratorGetWidth iter- h <- regionIteratorGetHeight iter- regionIteratorNext iter- rs <- getRects iter- return (rect (pt x y) (sz w h) : rs)- else return []---{------------------------------------------------------------------------------------------ Modifiers------------------------------------------------------------------------------------------}--- | Called when a process is ended with the process @pid@ and exitcode.-evtHandlerOnEndProcess :: EvtHandler a -> (Int -> Int -> IO ()) -> IO ()-evtHandlerOnEndProcess evtHandler handler- = evtHandlerOnEvent evtHandler (-1) (-1) [wxEVT_END_PROCESS] handler onDelete onEndProcess- where- onDelete ownerDeleted- = return ()-- onEndProcess event- = let processEvent = objectCast event- in do pid <- processEventGetPid processEvent- code <- processEventGetExitCode processEvent- handler pid code----- | Retrieve the current end process handler.-evtHandlerGetOnEndProcess :: EvtHandler a -> IO (Int -> Int -> IO ())-evtHandlerGetOnEndProcess evtHandler- = unsafeGetHandlerState evtHandler (-1) wxEVT_END_PROCESS (\pid code -> return ())----- | The status of a stream (see 'StreamBase')-data StreamStatus = StreamOk -- ^ No error.- | StreamEof -- ^ No more input.- | StreamReadError -- ^ Read error.- | StreamWriteError -- ^ Write error.- deriving (Eq,Show)---- | Convert a stream status code into 'StreamStatus'.-streamStatusFromInt :: Int -> StreamStatus-streamStatusFromInt code- | code == wxSTREAM_NO_ERROR = StreamOk- | code == wxSTREAM_EOF = StreamEof- | code == wxSTREAM_READ_ERROR = StreamReadError- | code == wxSTREAM_WRITE_ERROR = StreamWriteError- | otherwise = StreamReadError----- | Install an event handler on an input stream. The handler is called--- whenever input is read (or when an error occurred). The third parameter--- gives the size of the input batches. The orignal input stream should no longer be referenced after this call!-evtHandlerOnInput :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputStream a -> Int -> IO ()-evtHandlerOnInput evtHandler handler stream bufferLen- = do sink <- inputSinkCreate stream evtHandler bufferLen- evtHandlerOnInputSink evtHandler handler sink- inputSinkStart sink---- | Install an event handler on a specific input sink. It is advised to--- use the 'evtHandlerOnInput' whenever retrieval of the handler is not necessary.-evtHandlerOnInputSink :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputSink a -> IO ()-evtHandlerOnInputSink evtHandler handler sink- = do id <- inputSinkGetId sink- evtHandlerOnEvent evtHandler id id [wxEVT_INPUT_SINK] handler onDelete onInput- where- onDelete ownerDeleted- = return ()-- onInput event- = let inputSinkEvent = objectCast event- in do input <- inputSinkEventLastString inputSinkEvent- code <- inputSinkEventLastError inputSinkEvent- handler input (streamStatusFromInt code)----- | Retrieve the current input stream handler.-evtHandlerGetOnInputSink :: EvtHandler b -> IO (String -> StreamStatus -> IO ())-evtHandlerGetOnInputSink evtHandler- = unsafeGetHandlerState evtHandler (-1) wxEVT_INPUT_SINK (\input status -> return ())---- | Read the input from an 'InputSinkEvent'.-inputSinkEventLastString :: InputSinkEvent a -> IO String-inputSinkEventLastString inputSinkEvent- = do n <- inputSinkEventLastRead inputSinkEvent- if (n <= 0)- then return ""- else do buffer <- inputSinkEventLastInput inputSinkEvent- peekCWStringLen (buffer,n)---{------------------------------------------------------------------------------------------ Modifiers------------------------------------------------------------------------------------------}--- | The @Modifiers@ indicate the meta keys that have been pressed ('True') or not ('False').-data Modifiers = Modifiers- { altDown :: !Bool -- ^ alt key down- , shiftDown :: !Bool -- ^ shift key down- , controlDown :: !Bool -- ^ control key down- , metaDown :: !Bool -- ^ meta key down- }- deriving (Eq)--instance Show Modifiers where- show mods = showModifiers mods---- | Show modifiers, for example for use in menus.-showModifiers :: Modifiers -> String-showModifiers mods- = concat $ intersperse "+" $ filter (not.null)- [if controlDown mods then "Ctrl" else ""- ,if altDown mods then "Alt" else ""- ,if shiftDown mods then "Shift" else ""- ,if metaDown mods then "Meta" else ""- ]----- | Construct a 'Modifiers' structure with no meta keys pressed.-noneDown :: Modifiers-noneDown = Modifiers False False False False---- | Construct a 'Modifiers' structure with just Shift meta key pressed.-justShift :: Modifiers-justShift = noneDown{ shiftDown = True }---- | Construct a 'Modifiers' structure with just Alt meta key pressed.-justAlt :: Modifiers-justAlt = noneDown{ altDown = True }---- | Construct a 'Modifiers' structure with just Ctrl meta key pressed.-justControl :: Modifiers-justControl = noneDown{ controlDown = True }---- | Construct a 'Modifiers' structure with just Meta meta key pressed.-justMeta :: Modifiers-justMeta = noneDown{ metaDown = True }---- | Test if no meta key was pressed.-isNoneDown :: Modifiers -> Bool-isNoneDown (Modifiers shift control alt meta) = not (shift || control || alt || meta)---- | Test if no shift, alt, or control key was pressed.-isNoShiftAltControlDown :: Modifiers -> Bool-isNoShiftAltControlDown (Modifiers shift control alt meta) = not (shift || control || alt)---- | Tranform modifiers into an accelerator modifiers code.-modifiersToAccelFlags :: Modifiers -> Int-modifiersToAccelFlags mod- = mask (altDown mod) 0x01 + mask (controlDown mod) 0x02 + mask (shiftDown mod) 0x04- where- mask test flag = if test then flag else 0--{------------------------------------------------------------------------------------------ MouseEvent------------------------------------------------------------------------------------------}--- | Mouse events. The 'Point' gives the logical (unscrolled) position.-data EventMouse- = MouseMotion !Point !Modifiers -- ^ Mouse was moved over the client area of the window- | MouseEnter !Point !Modifiers -- ^ Mouse enters in the client area of the window- | MouseLeave !Point !Modifiers -- ^ Mouse leaves the client area of the window- | MouseLeftDown !Point !Modifiers -- ^ Mouse left button goes down- | MouseLeftUp !Point !Modifiers -- ^ Mouse left button goes up- | MouseLeftDClick !Point !Modifiers -- ^ Mouse left button double click- | MouseLeftDrag !Point !Modifiers -- ^ Mouse left button drag- | MouseRightDown !Point !Modifiers -- ^ Mouse right button goes down- | MouseRightUp !Point !Modifiers -- ^ Mouse right button goes up- | MouseRightDClick !Point !Modifiers -- ^ Mouse right button double click- | MouseRightDrag !Point !Modifiers -- ^ Mouse right button drag (unsupported on most platforms)- | MouseMiddleDown !Point !Modifiers -- ^ Mouse middle button goes down- | MouseMiddleUp !Point !Modifiers -- ^ Mouse middle button goes up- | MouseMiddleDClick !Point !Modifiers -- ^ Mouse middle button double click- | MouseMiddleDrag !Point !Modifiers -- ^ Mouse middle button drag (unsupported on most platforms)- | MouseWheel !Bool !Point !Modifiers -- ^ Mouse wheel rotation. (Bool is True for a downward rotation)- deriving (Eq) -- ,Show)---instance Show EventMouse where- show mouse = showMouse mouse---- | Show an 'EventMouse' in a user friendly way.-showMouse :: EventMouse -> String-showMouse mouse- = (if (null modsText) then "" else modsText ++ "+") ++ action ++ " at " ++ show (x,y)- where- modsText = show (mouseModifiers mouse)- (Point x y) = mousePos mouse- action- = case mouse of- MouseMotion p m -> "Motion"- MouseEnter p m -> "Enter"- MouseLeave p m -> "Leave"- MouseLeftDown p m -> "Left down"- MouseLeftUp p m -> "Left up"- MouseLeftDClick p m -> "Left double click"- MouseLeftDrag p m -> "Left drag"- MouseRightDown p m -> "Right down"- MouseRightUp p m -> "Right up"- MouseRightDClick p m -> "Right double click"- MouseRightDrag p m -> "Right drag"- MouseMiddleDown p m -> "Middle down"- MouseMiddleUp p m -> "Middle up"- MouseMiddleDClick p m -> "Middle double click"- MouseMiddleDrag p m -> "Middle drag"- MouseWheel down p m -> "Wheel " ++ (if down then "down" else "up")----- | Extract the position from a 'MouseEvent'.-mousePos :: EventMouse -> Point-mousePos mouseEvent- = case mouseEvent of- MouseMotion p m -> p- MouseEnter p m -> p- MouseLeave p m -> p- MouseLeftDown p m -> p- MouseLeftUp p m -> p- MouseLeftDClick p m -> p- MouseLeftDrag p m -> p- MouseRightDown p m -> p- MouseRightUp p m -> p- MouseRightDClick p m -> p- MouseRightDrag p m -> p- MouseMiddleDown p m -> p- MouseMiddleUp p m -> p- MouseMiddleDClick p m -> p- MouseMiddleDrag p m -> p- MouseWheel _ p m -> p---- | Extract the modifiers from a 'MouseEvent'.-mouseModifiers :: EventMouse -> Modifiers-mouseModifiers mouseEvent- = case mouseEvent of- MouseMotion p m -> m- MouseEnter p m -> m- MouseLeave p m -> m- MouseLeftDown p m -> m- MouseLeftUp p m -> m- MouseLeftDClick p m -> m- MouseLeftDrag p m -> m- MouseRightDown p m -> m- MouseRightUp p m -> m- MouseRightDClick p m -> m- MouseRightDrag p m -> m- MouseMiddleDown p m -> m- MouseMiddleUp p m -> m- MouseMiddleDClick p m -> m- MouseMiddleDrag p m -> m- MouseWheel _ p m -> m--fromMouseEvent :: MouseEvent a -> IO EventMouse-fromMouseEvent event- = do x <- mouseEventGetX event- y <- mouseEventGetY event- obj <- eventGetEventObject event- point <- windowCalcUnscrolledPosition (objectCast obj) (Point x y)-- altDown <- mouseEventAltDown event- controlDown <- mouseEventControlDown event- shiftDown <- mouseEventShiftDown event- metaDown <- mouseEventMetaDown event- let modifiers = Modifiers altDown shiftDown controlDown metaDown-- dragging <- mouseEventDragging event- if (dragging)- then do leftDown <- mouseEventLeftIsDown event- if (leftDown)- then return (MouseLeftDrag point modifiers)- else do middleDown <- mouseEventMiddleIsDown event- if (middleDown)- then return (MouseMiddleDrag point modifiers)- else do rightDown <- mouseEventRightIsDown event- if (rightDown)- then return (MouseRightDrag point modifiers)- else return (MouseMotion point modifiers)- else do tp <- eventGetEventType event- case lookup tp mouseEventTypes of- Just mouse -> return (mouse point modifiers)- Nothing -> if (tp==wxEVT_MOUSEWHEEL)- then do rot <- mouseEventGetWheelRotation event- delta <- mouseEventGetWheelDelta event- if (abs rot >= delta)- then return (MouseWheel (rot<0) point modifiers)- else return (MouseMotion point modifiers)- else return (MouseMotion point modifiers)--mouseEventTypes :: [(Int,Point -> Modifiers -> EventMouse)]-mouseEventTypes- = [(wxEVT_MOTION , MouseMotion) -- must be the first element, see "windowOnMouse"- ,(wxEVT_ENTER_WINDOW , MouseEnter)- ,(wxEVT_LEAVE_WINDOW , MouseLeave)- ,(wxEVT_LEFT_DOWN , MouseLeftDown)- ,(wxEVT_LEFT_UP , MouseLeftUp)- ,(wxEVT_LEFT_DCLICK , MouseLeftDClick)- ,(wxEVT_MIDDLE_DOWN , MouseMiddleDown)- ,(wxEVT_MIDDLE_UP , MouseMiddleUp)- ,(wxEVT_MIDDLE_DCLICK, MouseMiddleDClick)- ,(wxEVT_RIGHT_DOWN , MouseRightDown)- ,(wxEVT_RIGHT_UP , MouseRightUp)- ,(wxEVT_RIGHT_DCLICK , MouseRightDClick)- ]---- | Set a mouse event handler for a window. The first argument determines whether--- mouse motion events ('MouseMotion') are handled or not.-windowOnMouse :: Window a -> Bool -> (EventMouse -> IO ()) -> IO ()-windowOnMouse window allowMotion handler- = windowOnEvent window mouseEvents handler eventHandler- where- mouseEvents- = (map fst (if allowMotion then mouseEventTypes else tail (mouseEventTypes))) ++ [wxEVT_MOUSEWHEEL]-- eventHandler event- = do eventMouse <- fromMouseEvent (objectCast event)- handler eventMouse---- | Get the current mouse event handler of a window.-windowGetOnMouse :: Window a -> IO (EventMouse -> IO ())-windowGetOnMouse window- = unsafeWindowGetHandlerState window wxEVT_ENTER_WINDOW (\ev -> skipCurrentEvent)---{------------------------------------------------------------------------------------------ KeyboardEvent------------------------------------------------------------------------------------------}--- | Set an event handler for untranslated key presses. If 'skipCurrentEvent' is not--- called, the corresponding 'windowOnKeyChar' eventhandler won't be called.-windowOnKeyDown :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyDown window handler- = windowOnEvent window [wxEVT_KEY_DOWN] handler eventHandler- where- eventHandler event- = do eventKey <- eventKeyFromEvent (objectCast event)- handler eventKey---- | Get the current key down handler of a window.-windowGetOnKeyDown :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyDown window- = unsafeWindowGetHandlerState window wxEVT_KEY_DOWN (\eventKey -> skipCurrentEvent)----- | Set an event handler for translated key presses.-windowOnKeyChar :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyChar window handler- = windowOnEvent window [wxEVT_CHAR] handler eventHandler- where- eventHandler event- = do eventKey <- eventKeyFromEvent (objectCast event)- handler eventKey---- | Get the current translated key handler of a window.-windowGetOnKeyChar :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyChar window- = unsafeWindowGetHandlerState window wxEVT_CHAR (\eventKey -> skipCurrentEvent)----- | Set an event handler for (untranslated) key releases.-windowOnKeyUp :: Window a -> (EventKey -> IO ()) -> IO ()-windowOnKeyUp window handler- = windowOnEvent window [wxEVT_KEY_UP] handler eventHandler- where- eventHandler event- = do eventKey <- eventKeyFromEvent (objectCast event)- handler eventKey---- | Get the current key release handler of a window.-windowGetOnKeyUp :: Window a -> IO (EventKey -> IO ())-windowGetOnKeyUp window- = unsafeWindowGetHandlerState window wxEVT_KEY_UP (\keyInfo -> skipCurrentEvent)---eventKeyFromEvent :: KeyEvent a -> IO EventKey-eventKeyFromEvent event- = do x <- keyEventGetX event- y <- keyEventGetY event- obj <- eventGetEventObject event- point <- if objectIsNull obj- then return (Point x y)- else windowCalcUnscrolledPosition (objectCast obj) (Point x y)-- altDown <- keyEventAltDown event- controlDown <- keyEventControlDown event- shiftDown <- keyEventShiftDown event- metaDown <- keyEventMetaDown event- let modifiers = Modifiers altDown shiftDown controlDown metaDown-- keyCode <- keyEventGetKeyCode event- let key = keyCodeToKey keyCode-- return (EventKey key modifiers point)------ | A keyboard event contains the key, the modifiers and the focus point.-data EventKey = EventKey !Key !Modifiers !Point- deriving (Eq,Show)---- | Extract the key from a keyboard event.-keyKey :: EventKey -> Key-keyKey (EventKey key mods pos) = key---- | Extract the modifiers from a keyboard event.-keyModifiers :: EventKey -> Modifiers-keyModifiers (EventKey key mods pos) = mods---- | Extract the position from a keyboard event.-keyPos :: EventKey -> Point-keyPos (EventKey key mods pos) = pos----- | A low-level virtual key code.-type KeyCode = Int---- | A 'Key' represents a single key on a keyboard.-data Key- = KeyChar !Char -- ^ An ascii code.- | KeyOther !KeyCode -- ^ An unknown virtual key.- | KeyBack- | KeyTab- | KeyReturn- | KeyEscape- | KeySpace- | KeyDelete- | KeyInsert- | KeyEnd- | KeyHome- | KeyLeft- | KeyUp- | KeyRight- | KeyDown- | KeyPageUp- | KeyPageDown- | KeyStart- | KeyClear- | KeyShift- | KeyAlt- | KeyControl- | KeyMenu- | KeyPause- | KeyCapital- | KeyHelp- | KeySelect- | KeyPrint- | KeyExecute- | KeySnapshot- | KeyCancel- | KeyLeftButton- | KeyRightButton- | KeyMiddleButton- | KeyNum0- | KeyNum1- | KeyNum2- | KeyNum3- | KeyNum4- | KeyNum5- | KeyNum6- | KeyNum7- | KeyNum8- | KeyNum9- | KeyMultiply- | KeyAdd- | KeySeparator- | KeySubtract- | KeyDecimal- | KeyDivide- | KeyF1- | KeyF2- | KeyF3- | KeyF4- | KeyF5- | KeyF6- | KeyF7- | KeyF8- | KeyF9- | KeyF10- | KeyF11- | KeyF12- | KeyF13- | KeyF14- | KeyF15- | KeyF16- | KeyF17- | KeyF18- | KeyF19- | KeyF20- | KeyF21- | KeyF22- | KeyF23- | KeyF24- | KeyNumLock- | KeyScroll-{- Note: If we add "deriving (Show)" we get a strange link error in ghci:- Loading package wxh ... linking ... Overflown relocs: 122--}- deriving (Eq)--{-- | KeyNumSpace- | KeyNumTab- | KeyNumEnter- | KeyNumF1- | KeyNumF2- | KeyNumF3- | KeyNumF4- | KeyNumHome- | KeyNumLeft- | KeyNumUp- | KeyNumRight- | KeyNumDown- | KeyNumPageUp- | KeyNumPageDown- | KeyNumEnd- | KeyNumBegin- | KeyNumInsert- | KeyNumDelete- | KeyNumEqual- | KeyNumMultiply- | KeyNumAdd- | KeyNumSeparator- | KeyNumSubstract- | KeyNumDecimal- | KeyNumSubstract--}---- | From a key to a virtual key code.-keyToKeyCode :: Key -> KeyCode-keyToKeyCode key- = case key of- KeyChar c -> fromEnum c- KeyOther code -> code- KeyBack -> wxK_BACK- KeyTab -> wxK_TAB- KeyReturn -> wxK_RETURN- KeyEscape -> wxK_ESCAPE- KeySpace -> wxK_SPACE- KeyDelete -> wxK_DELETE- KeyInsert -> wxK_INSERT- KeyEnd -> wxK_END- KeyHome -> wxK_HOME- KeyLeft -> wxK_LEFT- KeyUp -> wxK_UP- KeyRight -> wxK_RIGHT- KeyDown -> wxK_DOWN- KeyPageUp -> wxK_PAGEUP- KeyPageDown -> wxK_PAGEDOWN- KeyStart -> wxK_START- KeyClear -> wxK_CLEAR- KeyShift -> wxK_SHIFT- KeyAlt -> wxK_ALT- KeyControl -> wxK_CONTROL- KeyMenu -> wxK_MENU- KeyPause -> wxK_PAUSE- KeyCapital -> wxK_CAPITAL- KeyHelp -> wxK_HELP- KeySelect -> wxK_SELECT- KeyPrint -> wxK_PRINT- KeyExecute -> wxK_EXECUTE- KeySnapshot -> wxK_SNAPSHOT- KeyCancel -> wxK_CANCEL- KeyLeftButton -> wxK_LBUTTON- KeyRightButton -> wxK_RBUTTON- KeyMiddleButton -> wxK_MBUTTON- KeyNum0 -> wxK_NUMPAD0- KeyNum1 -> wxK_NUMPAD1- KeyNum2 -> wxK_NUMPAD2- KeyNum3 -> wxK_NUMPAD3- KeyNum4 -> wxK_NUMPAD4- KeyNum5 -> wxK_NUMPAD5- KeyNum6 -> wxK_NUMPAD6- KeyNum7 -> wxK_NUMPAD7- KeyNum8 -> wxK_NUMPAD8- KeyNum9 -> wxK_NUMPAD9- KeyMultiply -> wxK_MULTIPLY- KeyAdd -> wxK_ADD- KeySeparator -> wxK_SEPARATOR- KeySubtract -> wxK_SUBTRACT- KeyDecimal -> wxK_DECIMAL- KeyDivide -> wxK_DIVIDE- KeyF1 -> wxK_F1- KeyF2 -> wxK_F2- KeyF3 -> wxK_F3- KeyF4 -> wxK_F4- KeyF5 -> wxK_F5- KeyF6 -> wxK_F6- KeyF7 -> wxK_F7- KeyF8 -> wxK_F8- KeyF9 -> wxK_F9- KeyF10 -> wxK_F10- KeyF11 -> wxK_F11- KeyF12 -> wxK_F12- KeyF13 -> wxK_F13- KeyF14 -> wxK_F14- KeyF15 -> wxK_F15- KeyF16 -> wxK_F16- KeyF17 -> wxK_F17- KeyF18 -> wxK_F18- KeyF19 -> wxK_F19- KeyF20 -> wxK_F20- KeyF21 -> wxK_F21- KeyF22 -> wxK_F22- KeyF23 -> wxK_F23- KeyF24 -> wxK_F24- KeyNumLock -> wxK_NUMLOCK- KeyScroll -> wxK_SCROLL---- | A virtual key code to a key.-keyCodeToKey :: KeyCode -> Key-keyCodeToKey keyCode- = if (keyCode < wxK_DELETE && keyCode > wxK_SPACE) -- optimize for the common case- then KeyChar (toEnum keyCode)- else case IntMap.lookup keyCode keyCodeMap of- Just key -> key- Nothing | keyCode <= 255 -> KeyChar (toEnum keyCode)- | otherwise -> KeyOther keyCode---- Use a big-endian patricia tree to efficiently map key codes to Haskell keys.--- Since it is a static map, we could maybe use one of Knuth's optimally balanced--- trees....--- keyCodeMap :: IntMap.IntMap Key-keyCodeMap- = IntMap.fromList- [(wxK_BACK , KeyBack)- ,(wxK_TAB , KeyTab)- ,(wxK_RETURN , KeyReturn)- ,(wxK_ESCAPE , KeyEscape)- ,(wxK_SPACE , KeySpace)- ,(wxK_DELETE , KeyDelete)- ,(wxK_INSERT , KeyInsert)- ,(wxK_END , KeyEnd)- ,(wxK_HOME , KeyHome)- ,(wxK_LEFT , KeyLeft)- ,(wxK_UP , KeyUp)- ,(wxK_RIGHT , KeyRight)- ,(wxK_DOWN , KeyDown)- ,(wxK_PAGEUP , KeyPageUp)- ,(wxK_PAGEDOWN , KeyPageDown)- ,(wxK_START , KeyStart)- ,(wxK_CLEAR , KeyClear)- ,(wxK_SHIFT , KeyShift)- ,(wxK_ALT , KeyAlt)- ,(wxK_CONTROL , KeyControl)- ,(wxK_MENU , KeyMenu)- ,(wxK_PAUSE , KeyPause)- ,(wxK_CAPITAL , KeyCapital)- ,(wxK_HELP , KeyHelp)- ,(wxK_SELECT , KeySelect)- ,(wxK_PRINT , KeyPrint)- ,(wxK_EXECUTE , KeyExecute)- ,(wxK_SNAPSHOT , KeySnapshot)- ,(wxK_CANCEL , KeyCancel)- ,(wxK_LBUTTON , KeyLeftButton)- ,(wxK_RBUTTON , KeyRightButton)- ,(wxK_MBUTTON , KeyMiddleButton)- ,(wxK_NUMPAD0 , KeyNum0)- ,(wxK_NUMPAD1 , KeyNum1)- ,(wxK_NUMPAD2 , KeyNum2)- ,(wxK_NUMPAD3 , KeyNum3)- ,(wxK_NUMPAD4 , KeyNum4)- ,(wxK_NUMPAD5 , KeyNum5)- ,(wxK_NUMPAD6 , KeyNum6)- ,(wxK_NUMPAD7 , KeyNum7)- ,(wxK_NUMPAD8 , KeyNum8)- ,(wxK_NUMPAD9 , KeyNum9)- ,(wxK_MULTIPLY , KeyMultiply)- ,(wxK_ADD , KeyAdd)- ,(wxK_SEPARATOR , KeySeparator)- ,(wxK_SUBTRACT , KeySubtract)- ,(wxK_DECIMAL , KeyDecimal)- ,(wxK_DIVIDE , KeyDivide)- ,(wxK_F1 , KeyF1)- ,(wxK_F2 , KeyF2)- ,(wxK_F3 , KeyF3)- ,(wxK_F4 , KeyF4)- ,(wxK_F5 , KeyF5)- ,(wxK_F6 , KeyF6)- ,(wxK_F7 , KeyF7)- ,(wxK_F8 , KeyF8)- ,(wxK_F9 , KeyF9)- ,(wxK_F10 , KeyF10)- ,(wxK_F11 , KeyF11)- ,(wxK_F12 , KeyF12)- ,(wxK_F13 , KeyF13)- ,(wxK_F14 , KeyF14)- ,(wxK_F15 , KeyF15)- ,(wxK_F16 , KeyF16)- ,(wxK_F17 , KeyF17)- ,(wxK_F18 , KeyF18)- ,(wxK_F19 , KeyF19)- ,(wxK_F20 , KeyF20)- ,(wxK_F21 , KeyF21)- ,(wxK_F22 , KeyF22)- ,(wxK_F23 , KeyF23)- ,(wxK_F24 , KeyF24)- ,(wxK_NUMLOCK , KeyNumLock)- ,(wxK_SCROLL , KeyScroll)- -- translate with loss of information- ,(wxK_NUMPAD_SPACE , KeySpace)- ,(wxK_NUMPAD_TAB , KeyTab)- ,(wxK_NUMPAD_ENTER , KeyReturn)- ,(wxK_NUMPAD_F1 , KeyF1)- ,(wxK_NUMPAD_F2 , KeyF2)- ,(wxK_NUMPAD_F3 , KeyF3)- ,(wxK_NUMPAD_F4 , KeyF4)- ,(wxK_NUMPAD_HOME , KeyHome)- ,(wxK_NUMPAD_LEFT , KeyLeft)- ,(wxK_NUMPAD_UP , KeyUp)- ,(wxK_NUMPAD_RIGHT , KeyRight)- ,(wxK_NUMPAD_DOWN , KeyDown)- ,(wxK_NUMPAD_PAGEUP , KeyPageUp)- ,(wxK_NUMPAD_PAGEDOWN , KeyPageDown)- ,(wxK_NUMPAD_END , KeyEnd)--- ,(wxK_NUMPAD_BEGIN , KeyBegin)- ,(wxK_NUMPAD_INSERT , KeyInsert)- ,(wxK_NUMPAD_DELETE , KeyDelete)--- ,(wxK_NUMPAD_EQUAL , KeyEqual)- ,(wxK_NUMPAD_MULTIPLY , KeyMultiply)- ,(wxK_NUMPAD_ADD , KeyAdd)- ,(wxK_NUMPAD_SEPARATOR , KeySeparator)- ,(wxK_NUMPAD_SUBTRACT , KeySubtract)- ,(wxK_NUMPAD_DECIMAL , KeyDecimal)- ,(wxK_NUMPAD_DIVIDE , KeyDivide)- ]---instance Show Key where- show k = showKey k---- | Show a key\/modifiers combination, for example for use in menus.-showKeyModifiers :: Key -> Modifiers -> String-showKeyModifiers key mods- | null modsText = show key- | otherwise = modsText ++ "+" ++ show key- where- modsText = show mods---- | Show a key for use in menus for example.-showKey :: Key -> String-showKey key- = case key of- KeyChar c -> [c]- KeyOther code -> "[" ++ show code ++ "]"- KeyBack -> "Backspace"- KeyTab -> "Tab"- KeyReturn -> "Enter"- KeyEscape -> "Esc"- KeySpace -> "Space"- KeyDelete -> "Delete"- KeyInsert -> "Insert"- KeyEnd -> "End"- KeyHome -> "Home"- KeyLeft -> "Left"- KeyUp -> "Up"- KeyRight -> "Right"- KeyDown -> "Down"- KeyPageUp -> "PgUp"- KeyPageDown -> "PgDn"- KeyStart -> "Start"- KeyClear -> "Clear"- KeyShift -> "Shift"- KeyAlt -> "Alt"- KeyControl -> "Ctrl"- KeyMenu -> "Menu"- KeyPause -> "Pause"- KeyCapital -> "Capital"- KeyHelp -> "Help"- KeySelect -> "Select"- KeyPrint -> "Print"- KeyExecute -> "Execute"- KeySnapshot -> "Snapshot"- KeyCancel -> "Cancel"- KeyLeftButton -> "Left Button"- KeyRightButton -> "Right Button"- KeyMiddleButton -> "Middle Button"- KeyNum0 -> "Num 0"- KeyNum1 -> "Num 1"- KeyNum2 -> "Num 2"- KeyNum3 -> "Num 3"- KeyNum4 -> "Num 4"- KeyNum5 -> "Num 5"- KeyNum6 -> "Num 6"- KeyNum7 -> "Num 7"- KeyNum8 -> "Num 8"- KeyNum9 -> "Num 9"- KeyMultiply -> "Num *"- KeyAdd -> "Num +"- KeySeparator -> "Num Separator"- KeySubtract -> "Num -"- KeyDecimal -> "Num ."- KeyDivide -> "Num /"- KeyF1 -> "F1"- KeyF2 -> "F2"- KeyF3 -> "F3"- KeyF4 -> "F4"- KeyF5 -> "F5"- KeyF6 -> "F6"- KeyF7 -> "F7"- KeyF8 -> "F8"- KeyF9 -> "F9"- KeyF10 -> "F10"- KeyF11 -> "F11"- KeyF12 -> "F12"- KeyF13 -> "F13"- KeyF14 -> "F14"- KeyF15 -> "F15"- KeyF16 -> "F16"- KeyF17 -> "F17"- KeyF18 -> "F18"- KeyF19 -> "F19"- KeyF20 -> "F20"- KeyF21 -> "F21"- KeyF22 -> "F22"- KeyF23 -> "F23"- KeyF24 -> "F24"- KeyNumLock -> "Numlock"- KeyScroll -> "Scroll"--{------------------------------------------------------------------------------------------ Drag and Drop events------------------------------------------------------------------------------------------}--- | Drag results-data DragResult- = DragError- | DragNone- | DragCopy- | DragMove- | DragLink- | DragCancel- | DragUnknown- deriving (Eq,Show)--dragResults :: [(Int, DragResult)]-dragResults- = [(wxDRAG_ERROR ,DragError)- ,(wxDRAG_NONE ,DragNone)- ,(wxDRAG_COPY ,DragCopy)- ,(wxDRAG_MOVE ,DragMove)- ,(wxDRAG_LINK ,DragLink)- ,(wxDRAG_CANCEL ,DragCancel)]--fromDragResult :: DragResult -> Int-fromDragResult drag- = case drag of- DragError -> wxDRAG_ERROR- DragNone -> wxDRAG_NONE- DragCopy -> wxDRAG_COPY- DragMove -> wxDRAG_MOVE- DragLink -> wxDRAG_LINK- DragCancel -> wxDRAG_CANCEL- DragUnknown -> wxDRAG_ERROR--toDragResult :: Int -> DragResult-toDragResult drag- = case lookup drag dragResults of- Just x -> x- Nothing -> DragError---- | Set an event handler that is called when the drop target can be filled with data.--- This function require to use 'dropTargetGetData' in your event handler to fill data.-dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnData drop event = do- funPtr <- dragThreeFuncHandler event- wxcDropTargetSetOnData (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for an drop command in a drop target.-dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO ()-dropTargetOnDrop drop event = do- funPtr <- dragTwoFuncHandler event- wxcDropTargetSetOnDrop (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for an enter command in a drop target.-dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnEnter drop event = do- funPtr <- dragThreeFuncHandler event- wxcDropTargetSetOnEnter (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for a drag over command in a drop target.-dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()-dropTargetOnDragOver drop event = do- funPtr <- dragThreeFuncHandler event- wxcDropTargetSetOnDragOver (objectCast drop) (toCFunPtr funPtr)---- | Set an event handler for a leave command in a drop target.-dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO ()-dropTargetOnLeave drop event = do- funPtr <- dragZeroFuncHandler event- wxcDropTargetSetOnLeave (objectCast drop) (toCFunPtr funPtr)--dragZeroFuncHandler event =- dragZeroFunc $ \obj -> do- event--dragTwoFuncHandler event =- dragTwoFunc $ \obj x y -> do- result <- event (point (fromIntegral x) (fromIntegral y))- return $ fromBool result--dragThreeFuncHandler event =- dragThreeFunc $ \obj x y pre -> do- result <- event (point (fromIntegral x) (fromIntegral y)) (toDragResult $ fromIntegral pre)- return $ fromIntegral $ fromDragResult result---- | Set an event handler for a drag & drop command between drag source window and drop--- target. You must set 'dropTarget' before use this action.--- And If you use 'fileDropTarget' or 'textDropTarget', you need not use this.-dragAndDrop :: DropSource a -> DragMode -> (DragResult -> IO ()) -> IO ()-dragAndDrop drSrc flag event = do- result <- dropSourceDoDragDrop drSrc (fromDragMode flag)- case lookup result dragResults of- Just x -> event x- Nothing -> return ()---- | Set an event handler that is called when text is dropped in target window.-textDropTarget :: Window a -> TextDataObject b -> (Point -> String -> IO ()) -> IO ()-textDropTarget window textData event = do- funPtr <- dropTextHandler event- textDrop <- wxcTextDropTargetCreate nullPtr (toCFunPtr funPtr)- dropTargetSetDataObject textDrop textData- windowSetDropTarget window textDrop--dropTextHandler event =- wrapTextDropHandler $ \obj x y cstr -> do- str <- peekCWString cstr- event (point (fromIntegral x) (fromIntegral y)) str---- | Set an event handler that is called when files are dropped in target window.-fileDropTarget :: Window a -> (Point -> [String] -> IO ()) -> IO ()-fileDropTarget window event = do- funPtr <- dropFileHandler event- fileDrop <- wxcFileDropTargetCreate nullPtr (toCFunPtr funPtr)- windowSetDropTarget window fileDrop--dropFileHandler event =- wrapFileDropHandler $ \obj x y carr size -> do- arr <- peekArray (fromIntegral size) carr- files <- mapM peekCWString arr- event (point (fromIntegral x) (fromIntegral y)) files--data DragMode = CopyOnly | AllowMove | Default- deriving (Eq,Show)- -- deriving (Eq,Show,Read,Typeable)--fromDragMode :: DragMode -> Int-fromDragMode mode- = case mode of- CopyOnly -> wxDRAG_COPYONLY- AllowMove -> wxDRAG_ALLOWMOVE- Default -> wxDRAG_DEFALUTMOVE--foreign import ccall "wrapper" dragZeroFunc :: (Ptr obj -> IO ()) -> IO (FunPtr (Ptr obj -> IO ()))-foreign import ccall "wrapper" dragTwoFunc :: (Ptr obj -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> IO CInt))-foreign import ccall "wrapper" dragThreeFunc :: (Ptr obj -> CInt -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> CInt -> IO CInt))-foreign import ccall "wrapper" wrapTextDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()))-foreign import ccall "wrapper" wrapFileDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()))--{------------------------------------------------------------------------------------------ Grid events------------------------------------------------------------------------------------------}-type Column = Int-type Row = Int---- | Grid events. -data EventGrid = GridCellMouse !Row !Column !EventMouse- | GridLabelMouse !Row !Column !EventMouse- | GridCellChange !Row !Column !(IO ())- | GridCellSelect !Row !Column !(IO ())- | GridCellDeSelect !Row !Column !(IO ())- | GridEditorHidden !Row !Column !(IO ())- | GridEditorShown !Row !Column !(IO ())- | GridEditorCreated !Row !Column (IO (Control ())) - | GridColSize !Column !Point !Modifiers (IO ())- | GridRowSize !Row !Point !Modifiers (IO ())- | GridRangeSelect !Row !Column !Row !Column !Rect !Modifiers !(IO ())- | GridRangeDeSelect !Row !Column !Row !Column !Rect !Modifiers !(IO ())- | GridUnknown !Row !Column !Int--fromGridEvent :: GridEvent a -> IO EventGrid-fromGridEvent gridEvent- = do tp <- eventGetEventType gridEvent- row <- gridEventGetRow gridEvent- col <- gridEventGetCol gridEvent- case lookup tp gridEvents of- Just make -> make gridEvent row col - Nothing -> return (GridUnknown row col tp)--gridEvents :: [(Int, GridEvent a -> Int -> Int -> IO EventGrid)]-gridEvents- = [(wxEVT_GRID_CELL_LEFT_CLICK, gridMouse GridCellMouse MouseLeftDown)- ,(wxEVT_GRID_CELL_LEFT_DCLICK, gridMouse GridCellMouse MouseLeftDClick)- ,(wxEVT_GRID_CELL_RIGHT_CLICK, gridMouse GridCellMouse MouseRightDown)- ,(wxEVT_GRID_CELL_RIGHT_DCLICK, gridMouse GridCellMouse MouseRightDClick)- ,(wxEVT_GRID_LABEL_LEFT_CLICK, gridMouse GridLabelMouse MouseLeftDown)- ,(wxEVT_GRID_LABEL_LEFT_DCLICK, gridMouse GridLabelMouse MouseLeftDClick)- ,(wxEVT_GRID_LABEL_RIGHT_CLICK, gridMouse GridLabelMouse MouseRightDown)- ,(wxEVT_GRID_LABEL_RIGHT_DCLICK, gridMouse GridLabelMouse MouseRightDClick)- ,(wxEVT_GRID_SELECT_CELL, gridSelect)- ,(wxEVT_GRID_EDITOR_SHOWN, gridVeto GridEditorShown)- ,(wxEVT_GRID_EDITOR_HIDDEN, gridVeto GridEditorHidden)- ]- where- gridMouse make makeMouse gridEvent row col- = do pt <- gridEventGetPosition gridEvent- altDown <- gridEventAltDown gridEvent- controlDown <- gridEventControlDown gridEvent- shiftDown <- gridEventShiftDown gridEvent- metaDown <- gridEventMetaDown gridEvent- let modifiers = Modifiers altDown shiftDown controlDown metaDown- return (make row col (makeMouse pt modifiers))-- gridVeto make gridEvent row col- = return (make row col (notifyEventVeto gridEvent))-- gridSelect gridEvent row col- = do selecting <- gridEventSelecting gridEvent- if selecting- then return (GridCellSelect row col (notifyEventVeto gridEvent))- else return (GridCellDeSelect row col (notifyEventVeto gridEvent))------- | Set a grid event handler.-gridOnGridEvent :: Grid a -> (EventGrid -> IO ()) -> IO ()-gridOnGridEvent grid eventHandler- = windowOnEvent grid (map fst gridEvents) eventHandler gridHandler- where- gridHandler event- = do eventGrid <- fromGridEvent (objectCast event)- eventHandler eventGrid---- | Get the current grid event handler of a window.-gridGetOnGridEvent :: Grid a -> IO (EventGrid -> IO ())-gridGetOnGridEvent grid- = unsafeWindowGetHandlerState grid wxEVT_GRID_CELL_CHANGED (\event -> skipCurrentEvent)---{------------------------------------------------------------------------------------------ TreeCtrl events------------------------------------------------------------------------------------------}--- | Tree control events-data EventTree = TreeBeginRDrag TreeItem !Point (IO ()) -- ^ Drag with right button. Call @IO@ action to continue dragging.- | TreeBeginDrag TreeItem !Point (IO ())- | TreeEndDrag TreeItem !Point- | TreeBeginLabelEdit TreeItem String (IO ()) -- ^ Edit a label. Call @IO@ argument to disallow the edit.- | TreeEndLabelEdit TreeItem String Bool (IO ()) -- ^ End edit. @Bool@ is 'True' when the edit was cancelled. Call the @IO@ argument to veto the action.- | TreeDeleteItem TreeItem - | TreeItemActivated TreeItem - | TreeItemCollapsed TreeItem - | TreeItemCollapsing TreeItem (IO ()) -- ^ Call the @IO@ argument to veto. - | TreeItemExpanding TreeItem (IO ()) -- ^ Call the @IO@ argument to veto.- | TreeItemExpanded TreeItem - | TreeItemRightClick TreeItem - | TreeItemMiddleClick TreeItem - | TreeSelChanged TreeItem TreeItem - | TreeSelChanging TreeItem TreeItem (IO ()) -- ^ Call the @IO@ argument to veto.- | TreeKeyDown TreeItem EventKey- | TreeUnknown--fromTreeEvent :: TreeEvent a -> IO EventTree-fromTreeEvent treeEvent- = do tp <- eventGetEventType treeEvent- item <- treeEventGetItem treeEvent- case lookup tp treeEvents of- Just make -> make treeEvent item- Nothing -> return TreeUnknown- -treeEvents :: [(Int,TreeEvent a -> TreeItem -> IO EventTree)]-treeEvents - = [(wxEVT_COMMAND_TREE_DELETE_ITEM, fromItemEvent TreeDeleteItem)- ,(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, fromItemEvent TreeItemActivated)- ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSED, fromItemEvent TreeItemCollapsed)- ,(wxEVT_COMMAND_TREE_ITEM_EXPANDED, fromItemEvent TreeItemExpanded)- ,(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, fromItemEvent TreeItemRightClick)- ,(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, fromItemEvent TreeItemMiddleClick)- ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSING, withVeto (fromItemEvent TreeItemCollapsing))- ,(wxEVT_COMMAND_TREE_ITEM_EXPANDING, withVeto (fromItemEvent TreeItemExpanding))- ,(wxEVT_COMMAND_TREE_KEY_DOWN, fromKeyDownEvent )- ,(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, fromBeginLabelEditEvent )- ,(wxEVT_COMMAND_TREE_END_LABEL_EDIT, fromEndLabelEditEvent )- ,(wxEVT_COMMAND_TREE_BEGIN_DRAG, withAllow (fromDragEvent TreeBeginDrag))- ,(wxEVT_COMMAND_TREE_BEGIN_RDRAG, withAllow (fromDragEvent TreeBeginRDrag))- ,(wxEVT_COMMAND_TREE_END_DRAG, fromDragEvent TreeEndDrag)- ,(wxEVT_COMMAND_TREE_SEL_CHANGED, fromChangeEvent TreeSelChanged)- ,(wxEVT_COMMAND_TREE_SEL_CHANGING, withVeto (fromChangeEvent TreeSelChanging))- ]- where- fromKeyDownEvent treeEvent item- = do keyEvent <- treeEventGetKeyEvent treeEvent- eventKey <- eventKeyFromEvent keyEvent- return (TreeKeyDown item eventKey)-- fromBeginLabelEditEvent treeEvent item- = do lab <- treeEventGetLabel treeEvent- return (TreeBeginLabelEdit item lab (notifyEventVeto treeEvent))- - fromEndLabelEditEvent treeEvent item- = do lab <- treeEventGetLabel treeEvent- can <- treeEventIsEditCancelled treeEvent- return (TreeEndLabelEdit item lab can (notifyEventVeto treeEvent))-- fromDragEvent make treeEvent item- = do pt <- treeEventGetPoint treeEvent- return (make item pt)-- fromChangeEvent make treeEvent item- = do olditem <- treeEventGetOldItem treeEvent- return (make item olditem)- - withAllow make treeEvent item- = do f <- make treeEvent item- return (f (treeEventAllow treeEvent))-- withVeto make treeEvent item- = do f <- make treeEvent item- return (f (notifyEventVeto treeEvent))-- fromItemEvent make treeEvent item- = return (make item)------ | Set a tree event handler.-treeCtrlOnTreeEvent :: TreeCtrl a -> (EventTree -> IO ()) -> IO ()-treeCtrlOnTreeEvent treeCtrl eventHandler- = windowOnEvent treeCtrl (map fst treeEvents) eventHandler treeHandler- where- treeHandler event- = do eventTree <- fromTreeEvent (objectCast event)- eventHandler eventTree---- | Get the current tree event handler of a window.-treeCtrlGetOnTreeEvent :: TreeCtrl a -> IO (EventTree -> IO ())-treeCtrlGetOnTreeEvent treeCtrl- = unsafeWindowGetHandlerState treeCtrl wxEVT_COMMAND_TREE_ITEM_ACTIVATED (\event -> skipCurrentEvent)---{------------------------------------------------------------------------------------------ ListCtrl events------------------------------------------------------------------------------------------}--- | Type synonym for documentation purposes.-type ListIndex = Int---- | List control events.-data EventList = ListBeginDrag !ListIndex !Point (IO ()) -- ^ Drag with left mouse button. Call @IO@ argument to veto this action.- | ListBeginRDrag !ListIndex !Point (IO ()) -- ^ Drag with right mouse button. @IO@ argument to veto this action.- | ListBeginLabelEdit !ListIndex (IO ()) -- ^ Edit label. Call @IO@ argument to veto this action.- | ListEndLabelEdit !ListIndex !Bool (IO ()) -- ^ End editing label. @Bool@ argument is 'True' when cancelled. Call @IO@ argument to veto this action.- | ListDeleteItem !ListIndex- | ListDeleteAllItems- | ListItemSelected !ListIndex - | ListItemDeselected !ListIndex - | ListItemActivated !ListIndex -- ^ Activate (ENTER or double click) - | ListItemFocused !ListIndex - | ListItemMiddleClick !ListIndex - | ListItemRightClick !ListIndex - | ListInsertItem !ListIndex - | ListColClick !Int -- ^ Column has been clicked. (-1 when clicked in control header outside any column)- | ListColRightClick !Int - | ListColBeginDrag !Int (IO ()) -- ^ Column is dragged. Index is of the column left of the divider that is being dragged. Call @IO@ argument to veto this action.- | ListColDragging !Int- | ListColEndDrag !Int (IO ()) -- ^ Column has been dragged. Call @IO@ argument to veto this action.- | ListKeyDown !Key - | ListCacheHint !Int !Int -- ^ (Inclusive) range of list items that are advised to be cached.- | ListUnknown---fromListEvent :: ListEvent a -> IO EventList-fromListEvent listEvent- = do tp <- eventGetEventType listEvent- case lookup tp listEvents of- Just f -> f listEvent - Nothing -> return ListUnknown--listEvents :: [(Int, ListEvent a -> IO EventList)]-listEvents- = [(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, withVeto $ withItem ListBeginLabelEdit)- ,(wxEVT_COMMAND_LIST_DELETE_ITEM, withItem ListDeleteItem)- ,(wxEVT_COMMAND_LIST_INSERT_ITEM, withItem ListInsertItem)- ,(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, withItem ListItemActivated)- ,(wxEVT_COMMAND_LIST_ITEM_DESELECTED, withItem ListItemDeselected)- ,(wxEVT_COMMAND_LIST_ITEM_FOCUSED, withItem ListItemFocused)- ,(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ,withItem ListItemMiddleClick)- ,(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, withItem ListItemRightClick)- ,(wxEVT_COMMAND_LIST_ITEM_SELECTED, withItem ListItemSelected)- ,(wxEVT_COMMAND_LIST_END_LABEL_EDIT, withVeto $ withCancel $ withItem ListEndLabelEdit )- ,(wxEVT_COMMAND_LIST_BEGIN_RDRAG, withVeto $ withPoint $ withItem ListBeginRDrag)- ,(wxEVT_COMMAND_LIST_BEGIN_DRAG, withVeto $ withPoint $ withItem ListBeginDrag)- ,(wxEVT_COMMAND_LIST_COL_CLICK, withColumn ListColClick)- ,(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, withVeto $ withColumn ListColBeginDrag)- ,(wxEVT_COMMAND_LIST_COL_DRAGGING, withColumn ListColDragging)- ,(wxEVT_COMMAND_LIST_COL_END_DRAG, withVeto $ withColumn ListColEndDrag)- ,(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, withColumn ListColRightClick)- ,(wxEVT_COMMAND_LIST_CACHE_HINT, withCache ListCacheHint )- ,(wxEVT_COMMAND_LIST_KEY_DOWN, withKeyCode ListKeyDown )- ,(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, \event -> return ListDeleteAllItems )- ]- where- withPoint make listEvent- = do f <- make listEvent- pt <- listEventGetPoint listEvent- return (f pt)-- withCancel make listEvent- = do f <- make listEvent- can <- listEventCancelled listEvent- return (f can)-- withVeto :: (ListEvent a -> IO (IO () -> EventList)) -> ListEvent a -> IO EventList- withVeto make listEvent- = do f <- make listEvent- return (f (notifyEventVeto listEvent))-- withKeyCode make listEvent- = do code <- listEventGetCode listEvent- return (make (keyCodeToKey code))-- withCache make listEvent- = do lo <- listEventGetCacheFrom listEvent- hi <- listEventGetCacheTo listEvent- return (make lo hi)- - withColumn make listEvent- = do col <- listEventGetColumn listEvent- return (make col)-- withItem :: (ListIndex -> b) -> ListEvent a -> IO b- withItem make listEvent- = do item <- listEventGetIndex listEvent- return (make item)-- ---- | Set a list event handler.-listCtrlOnListEvent :: ListCtrl a -> (EventList -> IO ()) -> IO ()-listCtrlOnListEvent listCtrl eventHandler- = windowOnEvent listCtrl (map fst listEvents) eventHandler listHandler- where- listHandler event- = do eventList <- fromListEvent (objectCast event)- eventHandler eventList---- | Get the current list event handler of a window.-listCtrlGetOnListEvent :: ListCtrl a -> IO (EventList -> IO ())-listCtrlGetOnListEvent listCtrl- = unsafeWindowGetHandlerState listCtrl wxEVT_COMMAND_LIST_ITEM_ACTIVATED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------ TaskBarIcon Events--------------------------------------------------------------------------------------------data EventTaskBarIcon = TaskBarIconMove- | TaskBarIconLeftDown- | TaskBarIconLeftUp- | TaskBarIconRightDown- | TaskBarIconRightUp- | TaskBarIconLeftDClick- | TaskBarIconRightDClick- | TaskBarIconUnknown- deriving (Show, Eq)--fromTaskBarIconEvent :: Event a -> IO EventTaskBarIcon-fromTaskBarIconEvent event- = do tp <- eventGetEventType event- case lookup tp taskBarIconEvents of- Just evt -> return evt- Nothing -> return TaskBarIconUnknown--taskBarIconEvents :: [(Int,EventTaskBarIcon)]-taskBarIconEvents- = [(wxEVT_TASKBAR_MOVE, TaskBarIconMove)- ,(wxEVT_TASKBAR_LEFT_DOWN, TaskBarIconLeftDown)- ,(wxEVT_TASKBAR_LEFT_UP, TaskBarIconLeftUp)- ,(wxEVT_TASKBAR_RIGHT_DOWN, TaskBarIconRightDown)- ,(wxEVT_TASKBAR_RIGHT_UP, TaskBarIconRightUp)- ,(wxEVT_TASKBAR_LEFT_DCLICK, TaskBarIconLeftDClick)- ,(wxEVT_TASKBAR_RIGHT_DCLICK, TaskBarIconRightDClick)- ]---- | Set a taskbar icon event handler.-evtHandlerOnTaskBarIconEvent :: TaskBarIcon a -> (EventTaskBarIcon -> IO ()) -> IO ()-evtHandlerOnTaskBarIconEvent taskbar eventHandler- = evtHandlerOnEvent taskbar idAny idAny (map fst taskBarIconEvents) eventHandler- -- finalize taskBarIcon's resource on Windows.- (\_ -> if wxToolkit == WxMSW- then (taskBarIconRemoveIcon taskbar- -- But taskBarIconDelete doesn't work well in this part. I don't know why.- -- >> taskBarIconDelete taskbar- >> return ())- else (return ()))- scrollHandler- where- scrollHandler event- = do eventTaskBar <- fromTaskBarIconEvent event- eventHandler eventTaskBar---- | Get the current event handler for a taskbar icon.-evtHandlerGetOnTaskBarIconEvent :: EvtHandler a -> Id -> EventTaskBarIcon -> IO (IO ())-evtHandlerGetOnTaskBarIconEvent window id evt- = unsafeGetHandlerState window id- (fromMaybe wxEVT_TASKBAR_MOVE- $ lookup evt $ uncurry (flip zip) . unzip $ taskBarIconEvents)- skipCurrentEvent---{------------------------------------------------------------------------------------------ PropertyGrid events------------------------------------------------------------------------------------------}--- | PropertyGrid control events.-data EventPropertyGrid - = PropertyGridHighlighted (Maybe (PGProperty ()))- | PropertyGridChanged (PGProperty ())- | PropertyGridUnknown--fromPropertyGridEvent :: PropertyGridEvent a -> IO EventPropertyGrid-fromPropertyGridEvent propertyGridEvent- = do tp <- eventGetEventType propertyGridEvent- case lookup tp propertyGridEvents of- Just f -> f propertyGridEvent - Nothing -> return PropertyGridUnknown--propertyGridEvents :: [(Int, PropertyGridEvent a -> IO EventPropertyGrid)]-propertyGridEvents- = [(wxEVT_PG_HIGHLIGHTED, withPGProperty PropertyGridHighlighted),- (wxEVT_PG_CHANGED, withPGProperty (PropertyGridChanged . fromJust))- ]- where- withPGProperty :: (Maybe((PGProperty ())) -> b) -> PropertyGridEvent a -> IO b- withPGProperty make propertyGridEvent = do- hasProp <- propertyGridEventHasProperty propertyGridEvent- if not hasProp then return (make Nothing) else do- prop <- propertyGridEventGetProperty propertyGridEvent- return (make (Just prop))---- | Set a PropertyGrid event handler.-propertyGridOnPropertyGridEvent :: PropertyGrid a -> (EventPropertyGrid -> IO ()) -> IO ()-propertyGridOnPropertyGridEvent propertyGrid eventHandler- = windowOnEvent propertyGrid (map fst propertyGridEvents) eventHandler listHandler- where- listHandler event- = do eventPropertyGrid <- fromPropertyGridEvent (objectCast event)- eventHandler eventPropertyGrid---- | Get the current PropertyGrid event handler of a window.-propertyGridGetOnPropertyGridEvent :: PropertyGrid a -> IO (EventPropertyGrid -> IO ())-propertyGridGetOnPropertyGridEvent propertyGrid- -- I'm not sure what expEVT_PG_HIGHLIGHTED needs to be here for, just followed pattern with `listCtrlGetOnListEvent'- = unsafeWindowGetHandlerState propertyGrid wxEVT_PG_HIGHLIGHTED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------- TimerEx is handled specially.---------------------------------------------------------------------------------------------- | Create a new 'Timer' that is attached to a window. It is automatically deleted when--- its owner is deleted (using 'windowAddOnDelete'). The owning window will receive--- timer events ('windowOnTimer'). /Broken!/ (use 'windowTimerCreate'\/'timerOnCommand' instead.)-windowTimerAttach :: Window a -> IO (Timer ())-windowTimerAttach w- = do t <- timerCreate w idAny- windowAddOnDelete w (timerDelete t)- return t----- | Create a new 'TimerEx' timer. It is automatically deleted when its owner is deleted--- (using 'windowAddOnDelete'). React to timer events using 'timerOnCommand'.-windowTimerCreate :: Window a -> IO (TimerEx ())-windowTimerCreate w- = do t <- timerExCreate- windowAddOnDelete w (timerDelete t)- return t---- | Set an event handler that is called on a timer tick. This works for 'TimerEx'--- objects.-timerOnCommand :: TimerEx a -> IO () -> IO ()-timerOnCommand timer io- = do closure <- createClosure io (\ownerDeleted -> return ()) (\ev -> io)- timerExConnect timer closure---- | Get the current timer event handler.-timerGetOnCommand :: TimerEx a -> IO (IO ())-timerGetOnCommand timer- = do closure <- timerExGetClosure timer- unsafeClosureGetState closure (return ())--{--------------------------------------------------------------------------- The global idle timer- Currently only used by the process code but can potentially be used to- enable haskell threads to run in idle time---------------------------------------------------------------------------}-{-# NOINLINE appIdleIntervals #-}-appIdleIntervals :: Var [Int]-appIdleIntervals - = unsafePerformIO (varCreate [])---- | @appRegisterIdle interval handler@ registers a global idle event --- handler that is at least called every @interval@ milliseconds (and--- possible more). Returns a method that can be used to unregister this--- handler (so that it doesn't take any resources anymore). Multiple--- calls to this method chains the different idle event handlers.-appRegisterIdle :: Int -> IO (IO ())-appRegisterIdle interval - = do varUpdate appIdleIntervals (interval:)- appUpdateIdleInterval - return (appUnregisterIdle interval)---- Update the idle interval to the minimal one.-appUpdateIdleInterval- = do ivals <- varGet appIdleIntervals- let ival = if null ivals then 0 else minimum ivals -- zero is off.- appival <- wxcAppGetIdleInterval - if (ival < appival)- then wxcAppSetIdleInterval ival- else return ()---- Unregister an idle handler -appUnregisterIdle :: Int -> IO () -appUnregisterIdle ival- = do varUpdate appIdleIntervals (remove ival)- appUpdateIdleInterval- where- remove ival [] = [] -- very wrong!- remove ival (i:is) | ival == i = is- | otherwise = i : remove ival is---{------------------------------------------------------------------------------------------ Calender events------------------------------------------------------------------------------------------}-data EventCalendar- = CalendarDayChanged (DateTime ())- | CalendarDoubleClicked (DateTime ())- | CalendarMonthChanged (DateTime ())- | CalendarSelectionChanged (DateTime ())- | CalendarWeekdayClicked Int- | CalendarYearChanged (DateTime ())- | CalendarUnknown- -fromCalendarEvent :: CalendarEvent a -> IO EventCalendar-fromCalendarEvent calEvent- = do tp <- eventGetEventType calEvent- case lookup tp calEvents of- Just f -> f calEvent- Nothing -> return CalendarUnknown- -calEvents :: [(Int, CalendarEvent a -> IO EventCalendar)]-calEvents- = [(wxEVT_CALENDAR_DAY_CHANGED ,withDate CalendarDayChanged)- ,(wxEVT_CALENDAR_DOUBLECLICKED ,withDate CalendarDoubleClicked)- ,(wxEVT_CALENDAR_MONTH_CHANGED ,withDate CalendarMonthChanged)- ,(wxEVT_CALENDAR_SEL_CHANGED ,withDate CalendarSelectionChanged)- ,(wxEVT_CALENDAR_WEEKDAY_CLICKED,withWeekday CalendarWeekdayClicked)- ,(wxEVT_CALENDAR_YEAR_CHANGED ,withDate CalendarYearChanged)]- where withDate event calEvent- = do date <- dateTimeCreate- withObjectPtr date $ calendarEventGetDate calEvent- return (event date)- withWeekday event calEvent- = fmap event $ calendarEventGetWeekDay calEvent- --- | Set a calendar event handler.-calendarCtrlOnCalEvent :: CalendarCtrl a -> (EventCalendar -> IO ()) -> IO ()-calendarCtrlOnCalEvent calCtrl eventHandler- = windowOnEvent calCtrl (map fst calEvents) eventHandler calHandler- where- calHandler event- = do eventCalendar <- fromCalendarEvent (objectCast event)- eventHandler eventCalendar- --- | Get the current calendar event handler of a window.-calendarCtrlGetOnCalEvent :: CalendarCtrl a -> IO (EventCalendar -> IO ())-calendarCtrlGetOnCalEvent calCtrl- = unsafeWindowGetHandlerState calCtrl wxEVT_CALENDAR_SEL_CHANGED (\event -> skipCurrentEvent)------------------------------------------------------------------------------------------------ Application startup---------------------------------------------------------------------------------------------- | Installs an init handler and starts the event loop.--- Note: the closure is deleted when initialization is complete, and than the Haskell init function--- is started.-appOnInit :: IO () -> IO ()-appOnInit init- = do closure <- createClosure (return () :: IO ()) onDelete (\ev -> return ()) -- run init on destroy !- progName <- getProgName- args <- getArgs- argv <- mapM newCWString (progName:args)- let argc = length argv- withArray (argv ++ [nullPtr]) $ \cargv -> wxcAppInitializeC closure argc cargv- mapM_ free argv- where- onDelete ownerDeleted- = init- ------------------------------------------------------------------------------------------------ Attaching Haskell data to arbitrary objects.---------------------------------------------------------------------------------------------- | Use attached Haskell data locally. This makes it type-safe.-objectWithClientData :: WxObject a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c-objectWithClientData object initx fun- = do let setter x = objectSetClientData object (return ()) x- getter = do mb <- unsafeObjectGetClientData object- case mb of- Nothing -> return initx- Just x -> return x- setter initx- fun setter getter---- | Attach Haskell value to an arbitrary object. The 'IO' action is executed--- when the object is deleted. Note: 'evtHandlerSetClientData' is preferred when possible.-objectSetClientData :: WxObject a -> IO () -> b -> IO ()-objectSetClientData object onDelete x- = do closure <- createClosure x (const onDelete) (const (return ()))- objectSetClientClosure object closure- return ()---- | Retrieve an attached Haskell value.-unsafeObjectGetClientData :: WxObject a -> IO (Maybe b)-unsafeObjectGetClientData object- = do closure <- objectGetClientClosure object - unsafeClosureGetData closure- --- | Use attached Haskell data locally in a type-safe way.-evtHandlerWithClientData :: EvtHandler a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c-evtHandlerWithClientData evtHandler initx fun- = do let setter x = evtHandlerSetClientData evtHandler (return ()) x- getter = do mb <- unsafeEvtHandlerGetClientData evtHandler- case mb of- Nothing -> return initx- Just x -> return x- setter initx- fun setter getter---- | Attach a Haskell value to an object derived from 'EvtHandler'. The 'IO' action--- executed when the object is deleted.-evtHandlerSetClientData :: EvtHandler a -> IO () -> b -> IO ()-evtHandlerSetClientData evtHandler onDelete x- = do closure <- createClosure x (const onDelete) (const (return ()))- evtHandlerSetClientClosure evtHandler closure- return ()---- | Retrieve an attached Haskell value, previously attached with 'evtHandlerSetClientData'.-unsafeEvtHandlerGetClientData :: EvtHandler a -> IO (Maybe b)-unsafeEvtHandlerGetClientData evtHandler- = do closure <- evtHandlerGetClientClosure evtHandler- unsafeClosureGetData closure------ | Attach a Haskell value to tree item data. The 'IO' action--- executed when the object is deleted.-treeCtrlSetItemClientData :: TreeCtrl a -> TreeItem -> IO () -> b -> IO ()-treeCtrlSetItemClientData treeCtrl item onDelete x- = do closure <- createClosure x (const onDelete) (const (return ()))- treeCtrlSetItemClientClosure treeCtrl item closure- return ()---- | Retrieve an attached Haskell value to a tree item, previously attached with 'treeCtrlSetItemClientData'.-unsafeTreeCtrlGetItemClientData :: TreeCtrl a -> TreeItem -> IO (Maybe b)-unsafeTreeCtrlGetItemClientData treeCtrl item- = do closure <- treeCtrlGetItemClientClosure treeCtrl item- unsafeClosureGetData closure------------------------------------------------------------------------------------------------ Generic window connection---------------------------------------------------------------------------------------------- | Set a generic event handler on a certain window.-windowOnEvent :: Window a -> [EventId] -> handler -> (Event () -> IO ()) -> IO ()-windowOnEvent window eventIds state eventHandler- = windowOnEventEx window eventIds state (\ownerDelete -> return ()) eventHandler---- | Set a generic event handler on a certain window. Takes also a computation--- that is run when the event handler is destroyed -- the argument is 'True' if the--- owner is deleted, and 'False' if the event handler is disconnected for example.-windowOnEventEx :: Window a -> [EventId] -> handler -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()-windowOnEventEx window eventIds state destroy eventHandler- = do let id = idAny -- id <- windowGetId window- evtHandlerOnEvent window id id eventIds state destroy eventHandler---- | Retrieve the event handler state for a certain event on a window.-unsafeWindowGetHandlerState :: Window a -> EventId -> b -> IO b-unsafeWindowGetHandlerState window eventId def- = do id <- windowGetId window- unsafeGetHandlerState window id eventId def----------------------------------------------------------------------------------------------- The current event--------------------------------------------------------------------------------------------{-# NOINLINE currentEvent #-}-currentEvent :: MVar (Event ())-currentEvent- = unsafePerformIO (newMVar objectNull)---- | Get the current event handler (can be 'objectNull').-getCurrentEvent :: IO (Event ())-getCurrentEvent- = readMVar currentEvent---- | Do something with the current event /if/ we are calling from an event handler.-withCurrentEvent :: (Event () -> IO ()) -> IO ()-withCurrentEvent f- = do ev <- getCurrentEvent- if (ev /= objectNull)- then f ev- else return ()---- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.--- Always call this method when you do not process the event. /Note:/ The use of--- 'propagateEvent' is encouraged as it is a much better name than 'skipCurrentEvent'. This--- function name is just for better compatibility with wxWidgets :-)-skipCurrentEvent :: IO ()-skipCurrentEvent- = withCurrentEvent (\event -> eventSkip event)---- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent.--- Always call this method when you do not process the event. (This function just call 'skipCurrentEvent').-propagateEvent :: IO ()-propagateEvent- = skipCurrentEvent------------------------------------------------------------------------------------------------ Generic event connection---------------------------------------------------------------------------------------------- | Retrievs the state associated with a certain event handler. If--- no event handler is defined for this kind of event or 'Id', the--- default value is returned.-unsafeGetHandlerState :: EvtHandler a -> Id -> EventId -> b -> IO b-unsafeGetHandlerState object id eventId def- = do closure <- evtHandlerGetClosure object id eventId- unsafeClosureGetState closure def---- | Type synonym to make the type signatures shorter for the documentation :-)-type OnEvent = (Bool -> IO ()) -> (Event () -> IO ()) -> IO ()---- | Sets a generic event handler, just as 'evtHandlerOnEventConnect' but first--- disconnects any event handlers for the same kind of events.-evtHandlerOnEvent :: EvtHandler a -> Id -> Id -> [EventId] -> handler -> OnEvent-evtHandlerOnEvent object firstId lastId eventIds state destroy eventHandler- = do evtHandlerOnEventDisconnect object firstId lastId eventIds- evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler----- Hack: using a global variable to determine whether we are disconnecting an event--- or not. This is used as a parameter to the 'destroy' procedure of an event. This--- enables us to re-install a 'windowOnDelete' handler for example without executing--- the deletion code.-{-# NOINLINE disconnecting #-}-disconnecting :: Var Bool-disconnecting- = unsafePerformIO (varCreate False)---- | Disconnect a certain event handler.-evtHandlerOnEventDisconnect :: EvtHandler a -> Id -> Id -> [EventId] -> IO ()-evtHandlerOnEventDisconnect object firstId lastId eventIds- = do prev <- varSwap disconnecting True- mapM_ disconnectEventId eventIds- varSet disconnecting prev- where- disconnectEventId eventId- = evtHandlerDisconnect object firstId lastId eventId 0 {- actually: void* -}---- | Sets a generic event handler on an 'EvtHandler' object. The call--- (@evtHandlerOnEventConnect firstId lastId eventIds state destroy handler object@) sets an event--- handler @handler@ on @object@. The eventhandler gets called whenever an event--- happens that is in the list @eventIds@ on an object with an 'Id' between @firstId@--- and @lastId@ (use -1 for any object). The @state@ is any kind of Haskell data--- that is attached to this handler. It can be retrieved via 'unsafeGetHandlerState'.--- Normally, the @state@ is the event handler itself. This allows the current event--- handler to be retrieved via calls to 'buttonGetOnCommand' for example. The @destroy@--- action is called when the event handler is destroyed. Its argument is 'True' when the--- owner is deleted, and 'False' if the event handler is just disconnected.-evtHandlerOnEventConnect :: EvtHandler a -> Id -> Id -> [EventId] -> state -> OnEvent-evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler- = do closure <- createClosure state destroy eventHandler- withObjectPtr closure $ \pclosure ->- mapM_ (connectEventId pclosure) eventIds- where- connectEventId pclosure eventId- = evtHandlerConnect object firstId lastId eventId pclosure------ Use a data wrapper for the closure state: seem to circumvent bugs when wrapping--- things like Int or overloaded stuff.-data Wrap a = Wrap a---unsafeClosureGetState :: Closure () -> a -> IO a-unsafeClosureGetState closure def- = do mb <- unsafeClosureGetData closure- case mb of- Nothing -> return def- Just x -> return x--unsafeClosureGetData :: Closure () -> IO (Maybe a)-unsafeClosureGetData closure- = if (objectIsNull closure)- then return Nothing- else do ptr <- closureGetData closure- if (ptrIsNull ptr)- then return Nothing- else do (Wrap x) <- deRefStablePtr (castPtrToStablePtr ptr)- return (Just x)----- | Create a closure with a certain Haskell state, a function that is called--- when the closure is destroyed, and a function that is called when an event--- happens. The destroy function takes a boolean that is 'True' when the parent--- is deleted (and 'False' when the closure is just disconnected). The event--- handlers gets the 'Event' as its argument.-createClosure :: state -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO (Closure ())-createClosure st destroy handler- = do funptr <- wrapEventHandler eventHandlerWrapper- stptr <- newStablePtr (Wrap st)- closureCreate funptr (castStablePtrToPtr stptr)- where- eventHandlerWrapper :: Ptr fun -> Ptr () -> Ptr (TEvent ()) -> IO ()- eventHandlerWrapper funptr stptr eventptr- = do let event = objectFromPtr eventptr- prev <- swapMVar currentEvent event- if (objectIsNull event)- then do isDisconnecting <- varGet disconnecting- destroy (not isDisconnecting)- when (stptr/=ptrNull)- (freeStablePtr (castPtrToStablePtr stptr))- when (funptr/=ptrNull)- (freeHaskellFunPtr (castPtrToFunPtr funptr))- else handler event- swapMVar currentEvent prev- return ()----foreign import ccall "wrapper" wrapEventHandler :: (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()) -> IO (FunPtr (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()))+{-# LANGUAGE ForeignFunctionInterface #-} +----------------------------------------------------------------------------------------- +{-| Module : Events + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Dynamically set (and get) Haskell event handlers for basic wxWidgets events. +Note that one should always call 'skipCurrentEvent' when an event is not +processed in the event handler so that other eventhandlers can process the +event. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Events + ( + -- * Set event handlers + -- ** Controls + buttonOnCommand + , checkBoxOnCommand + , choiceOnCommand + , comboBoxOnCommand + , comboBoxOnTextEnter + , controlOnText + , listBoxOnCommand + , spinCtrlOnCommand + -- , listBoxOnDClick + , radioBoxOnCommand + , sliderOnCommand + , textCtrlOnTextEnter + , listCtrlOnListEvent + , toggleButtonOnCommand + , treeCtrlOnTreeEvent + , gridOnGridEvent + , propertyGridOnPropertyGridEvent + + -- ** Windows + , windowOnMouse + , windowOnKeyChar + , windowOnKeyDown + , windowOnKeyUp + , windowAddOnClose + , windowOnClose + , windowOnDestroy + , windowAddOnDelete + , windowOnDelete + , windowOnCreate + , windowOnIdle + , windowOnTimer + , windowOnSize + , windowOnFocus + , windowOnActivate + , windowOnPaint + , windowOnPaintRaw + , windowOnContextMenu + , windowOnScroll + , htmlWindowOnHtmlEvent + + -- ** Event handlers + , evtHandlerOnMenuCommand + , evtHandlerOnEndProcess + , evtHandlerOnInput + , evtHandlerOnInputSink + , evtHandlerOnTaskBarIconEvent + + -- ** Raw STC export + , EventSTC(..) + , stcOnSTCEvent + , stcGetOnSTCEvent + + -- ** Print events + , EventPrint(..) + , printOutOnPrint + + -- * Get event handlers + -- ** Controls + , buttonGetOnCommand + , checkBoxGetOnCommand + , choiceGetOnCommand + , comboBoxGetOnCommand + , comboBoxGetOnTextEnter + , controlGetOnText + , listBoxGetOnCommand + , spinCtrlGetOnCommand + -- , listBoxGetOnDClick + , radioBoxGetOnCommand + , sliderGetOnCommand + , textCtrlGetOnTextEnter + , listCtrlGetOnListEvent + , toggleButtonGetOnCommand + , treeCtrlGetOnTreeEvent + , gridGetOnGridEvent + , propertyGridGetOnPropertyGridEvent + + -- ** Windows + , windowGetOnMouse + , windowGetOnKeyChar + , windowGetOnKeyDown + , windowGetOnKeyUp + , windowGetOnClose + , windowGetOnDestroy + , windowGetOnDelete + , windowGetOnCreate + , windowGetOnIdle + , windowGetOnTimer + , windowGetOnSize + , windowGetOnFocus + , windowGetOnActivate + , windowGetOnPaint + , windowGetOnPaintRaw + , windowGetOnContextMenu + , windowGetOnScroll + , htmlWindowGetOnHtmlEvent + + -- ** Event handlers + , evtHandlerGetOnMenuCommand + , evtHandlerGetOnEndProcess + , evtHandlerGetOnInputSink + , evtHandlerGetOnTaskBarIconEvent + + -- ** Printing + , printOutGetOnPrint + + -- * Timers + , windowTimerAttach + , windowTimerCreate + , timerOnCommand + , timerGetOnCommand + + -- Idle events + , appRegisterIdle + + -- * Calenders + , EventCalendar(..) + , calendarCtrlOnCalEvent + , calendarCtrlGetOnCalEvent + + -- * Types + -- ** Streams + , StreamStatus(..), streamStatusFromInt + + -- ** Modifiers + , Modifiers(..) + , showModifiers + , noneDown, justShift, justAlt, justControl, justMeta, isNoneDown + , isNoShiftAltControlDown + + -- ** Mouse events + , EventMouse (..) + , showMouse + , mousePos, mouseModifiers + + -- ** Keyboard events + , EventKey (..), Key(..) + , keyKey, keyModifiers, keyPos + , showKey, showKeyModifiers + + -- * Set event handlers + -- ** Drop Target events + , DragResult (..) + , dropTargetOnData + , dropTargetOnDrop + , dropTargetOnEnter + , dropTargetOnDragOver + , dropTargetOnLeave + + -- ** On DragAndDropEvent + , DragMode (..) + , dragAndDrop + + -- *** Special handler for Drop File event + , fileDropTarget + -- *** Special handler for Drop Text event + , textDropTarget + + -- ** Scroll events + , EventScroll(..), Orientation(..) + , scrollOrientation, scrollPos + + -- ** Tree control events + , EventTree(..) + + -- ** List control events + , EventList(..), ListIndex + + -- ** Grid control events + , EventGrid(..), Row, Column + + -- ** Html window events + , EventHtml(..) + + -- * TaskBar icon events + , EventTaskBarIcon(..) + + -- ** PropertyGrid events + , EventPropertyGrid(..) + + + -- * Current event + , propagateEvent + , skipCurrentEvent + , withCurrentEvent + + -- * Primitive + , appOnInit + + -- ** Client data + , treeCtrlSetItemClientData + + , evtHandlerWithClientData + , evtHandlerSetClientData + + , objectWithClientData + , objectSetClientData + + -- ** Input sink + , inputSinkEventLastString + + -- ** Keys + , KeyCode + , modifiersToAccelFlags + , keyCodeToKey, keyToKeyCode + + -- ** Events + , windowOnEvent, windowOnEventEx + + -- ** Generic + , OnEvent + , evtHandlerOnEvent + , evtHandlerOnEventConnect + + -- ** Unsafe + , unsafeTreeCtrlGetItemClientData + , unsafeEvtHandlerGetClientData + , unsafeObjectGetClientData + , unsafeGetHandlerState + , unsafeWindowGetHandlerState + ) where + +import Data.List( intersperse, findIndex ) +import System.Environment( getProgName, getArgs ) +import Foreign.StablePtr +import Foreign.Ptr +import Foreign.C.Types +import Foreign.C.String +import Foreign.Marshal.Alloc +import Foreign.Marshal.Array +import Foreign.Marshal.Utils + +import Data.Char ( chr ) -- used in stc +import Data.Maybe ( fromMaybe, fromJust ) +import Control.Concurrent.MVar +import System.IO.Unsafe( unsafePerformIO ) + +import qualified Data.IntMap as IntMap +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassInfo +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Draw +import Graphics.UI.WXCore.Defines + +------------------------------------------------------------------------------------------ +-- Controls (COMMAND events) +------------------------------------------------------------------------------------------ +-- | Set an event handler for a push button. +buttonOnCommand :: Button a -> IO () -> IO () +buttonOnCommand button eventHandler + = windowOnEvent button [wxEVT_COMMAND_BUTTON_CLICKED] eventHandler (\evt -> eventHandler) + + +-- | Get the current button event handler on a window. +buttonGetOnCommand :: Window a -> IO (IO ()) +buttonGetOnCommand button + = unsafeWindowGetHandlerState button wxEVT_COMMAND_BUTTON_CLICKED skipCurrentEvent + + +-- | Set an event handler for "updated text", works for example on a 'TextCtrl' and 'ComboBox'. +controlOnText :: Control a -> IO () -> IO () +controlOnText control eventHandler + = windowOnEvent control [wxEVT_COMMAND_TEXT_UPDATED] eventHandler (\evt -> eventHandler) + +-- | Get the current event handler for updated text. +controlGetOnText :: Control a -> IO (IO ()) +controlGetOnText control + = unsafeWindowGetHandlerState control wxEVT_COMMAND_TEXT_UPDATED skipCurrentEvent + + +-- | Set an event handler for an enter command in a text control. +textCtrlOnTextEnter :: TextCtrl a -> IO () -> IO () +textCtrlOnTextEnter textCtrl eventHandler + = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler) + +-- | Get the current text enter event handler. +textCtrlGetOnTextEnter :: TextCtrl a -> IO (IO ()) +textCtrlGetOnTextEnter textCtrl + = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent + +{- +-- | Set an event handler for when a user tries to type more than than the maximally +-- allowed text in a text control. +textCtrlOnTextMaxLen :: IO () -> TextCtrl a -> IO () +textCtrlOnTextMaxLen eventHandler textCtrl + = windowOnEvent textCtrl [wxEVT_COMMAND_TEXT_MAXLEN] eventHandler (\evt -> eventHandler) + +-- | Get the current maximal text event handler. +textCtrlGetOnTextMaxLen :: TextCtrl a -> IO (IO ()) +textCtrlGetOnTextMaxLen textCtrl + = unsafeWindowGetHandlerState textCtrl wxEVT_COMMAND_TEXT_MAXLEN skipCurrentEvent +-} + +-- | Set an event handler for an enter command in a combo box. +comboBoxOnTextEnter :: ComboBox a -> IO () -> IO () +comboBoxOnTextEnter comboBox eventHandler + = windowOnEvent comboBox [wxEVT_COMMAND_TEXT_ENTER] eventHandler (\evt -> eventHandler) + +-- | Get the current text enter event handler. +comboBoxGetOnTextEnter :: ComboBox a -> IO (IO ()) +comboBoxGetOnTextEnter comboBox + = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_TEXT_ENTER skipCurrentEvent + + +-- | Set an event handler for when a combo box item is selected. +comboBoxOnCommand :: ComboBox a -> IO () -> IO () +comboBoxOnCommand comboBox eventHandler + = windowOnEvent comboBox [wxEVT_COMMAND_COMBOBOX_SELECTED] eventHandler (\evt -> eventHandler) + +-- | Get the current combo box event handler for selections +comboBoxGetOnCommand :: ComboBox a -> IO (IO ()) +comboBoxGetOnCommand comboBox + = unsafeWindowGetHandlerState comboBox wxEVT_COMMAND_COMBOBOX_SELECTED skipCurrentEvent + +-- | Set an event handler for when a listbox item is (de)selected. +listBoxOnCommand :: ListBox a -> IO () -> IO () +listBoxOnCommand listBox eventHandler + = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_SELECTED] eventHandler (\evt -> eventHandler) + +-- | Get the current listbox event handler for selections. +listBoxGetOnCommand :: ListBox a -> IO (IO ()) +listBoxGetOnCommand listBox + = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_SELECTED skipCurrentEvent + +{- +-- | Set an event handler for when a listbox item is double clicked. Takes the selected +-- item index as an argument. +listBoxOnDClick :: (Int -> IO ()) -> ListBox a -> IO () +listBoxOnDClick eventHandler listBox + = windowOnEvent listBox [wxEVT_COMMAND_LISTBOX_DCLICK] eventHandler dclickHandler + where + dclickHandler event + = do index <- commandEventGetInt (objectCast event) + eventHandler index + +-- | Get the current double click listbox event handler. +listBoxGetOnDClick :: ListBox a -> IO (IO ()) +listBoxGetOnDClick listBox + = unsafeWindowGetHandlerState listBox wxEVT_COMMAND_LISTBOX_DCLICK (\index -> skipCurrentEvent) +-} + +-- | Set an event handler for when a choice item is (de)selected. +choiceOnCommand :: Choice a -> IO () -> IO () +choiceOnCommand choice eventHandler + = windowOnEvent choice [wxEVT_COMMAND_CHOICE_SELECTED] eventHandler (\evt -> eventHandler) + +-- | Get the current choice command event handler. +choiceGetOnCommand :: Choice a -> IO (IO ()) +choiceGetOnCommand choice + = unsafeWindowGetHandlerState choice wxEVT_COMMAND_CHOICE_SELECTED skipCurrentEvent + + +-- | Set an event handler for when a radiobox item is selected. +radioBoxOnCommand :: RadioBox a -> IO () -> IO () +radioBoxOnCommand radioBox eventHandler + = windowOnEvent radioBox [wxEVT_COMMAND_RADIOBOX_SELECTED] eventHandler (\evt -> eventHandler) + +-- | Get the current radio box command handler. +radioBoxGetOnCommand :: RadioBox a -> IO (IO ()) +radioBoxGetOnCommand radioBox + = unsafeWindowGetHandlerState radioBox wxEVT_COMMAND_RADIOBOX_SELECTED skipCurrentEvent + + +-- | Set an event handler for when a slider item changes. +sliderOnCommand :: Slider a -> IO () -> IO () +sliderOnCommand slider eventHandler + = windowOnEvent slider [wxEVT_COMMAND_SLIDER_UPDATED] eventHandler (\evt -> eventHandler) + +-- | Get the current slider command event handler. +sliderGetOnCommand :: Slider a -> IO (IO ()) +sliderGetOnCommand slider + = unsafeWindowGetHandlerState slider wxEVT_COMMAND_SLIDER_UPDATED skipCurrentEvent + + + +-- | Set an event handler for when a checkbox clicked. +checkBoxOnCommand :: CheckBox a -> (IO ()) -> IO () +checkBoxOnCommand checkBox eventHandler + = windowOnEvent checkBox [wxEVT_COMMAND_CHECKBOX_CLICKED] eventHandler (\evt -> eventHandler) + +-- | Get the current check box event handler. +checkBoxGetOnCommand :: CheckBox a -> IO (IO ()) +checkBoxGetOnCommand checkBox + = unsafeWindowGetHandlerState checkBox wxEVT_COMMAND_CHECKBOX_CLICKED (skipCurrentEvent) + +-- | Set an event handler for when a spinCtrl clicked. +spinCtrlOnCommand :: SpinCtrl a -> (IO ()) -> IO () +spinCtrlOnCommand spinCtrl eventHandler + = windowOnEvent spinCtrl [wxEVT_COMMAND_SPINCTRL_UPDATED] eventHandler (\evt -> eventHandler) + +-- | Get the current check box event handler. +spinCtrlGetOnCommand :: SpinCtrl a -> IO (IO ()) +spinCtrlGetOnCommand spinCtrl + = unsafeWindowGetHandlerState spinCtrl wxEVT_COMMAND_SPINCTRL_UPDATED (skipCurrentEvent) + +-- | Set an event handler for a push button. +toggleButtonOnCommand :: ToggleButton a -> IO () -> IO () +toggleButtonOnCommand button eventHandler + = windowOnEvent button [wxEVT_COMMAND_TOGGLEBUTTON_CLICKED] eventHandler (\evt -> eventHandler) + +-- | Get the current button event handler on a window. +toggleButtonGetOnCommand :: Window a -> IO (IO ()) +toggleButtonGetOnCommand button + = unsafeWindowGetHandlerState button wxEVT_COMMAND_TOGGLEBUTTON_CLICKED skipCurrentEvent + +{----------------------------------------------------------------------------------------- + wxStyledTextCtrl's event +-----------------------------------------------------------------------------------------} +-- | Scintilla events. * Means extra information is available (excluding position, +-- key and modifiers) but not yet implemented. ! means it's done +data EventSTC + = STCChange -- ^ ! wxEVT_STC_CHANGE. + | STCStyleNeeded -- ^ ! wxEVT_STC_STYLENEEDED. + | STCCharAdded Char Int -- ^ ? wxEVT_STC_CHARADDED. The position seems to be broken + | STCSavePointReached -- ^ ! wxEVT_STC_SAVEPOINTREACHED. + | STCSavePointLeft -- ^ ! wxEVT_STC_SAVEPOINTLEFT. + | STCROModifyAttempt -- ^ ! wxEVT_STC_ROMODIFYATTEMPT. + | STCKey -- ^ * wxEVT_STC_KEY. + -- kolmodin 20050304: + -- is this event ever raised? not under linux. + -- according to davve, not under windows either + | STCDoubleClick -- ^ ! wxEVT_STC_DOUBLECLICK. + | STCUpdateUI -- ^ ! wxEVT_STC_UPDATEUI. + | STCModified Int Int (Maybe String) Int Int Int Int Int -- ^ ? wxEVT_STC_MODIFIED. + | STCMacroRecord Int Int Int -- ^ ! wxEVT_STC_MACRORECORD iMessage wParam lParam + | STCMarginClick Bool Bool Bool Int Int -- ^ ? wxEVT_STC_MARGINCLICK. + -- kolmodin 20050304: + -- Add something nicer for alt, shift and ctrl? + -- Perhaps a new datatype or a tuple. + | STCNeedShown Int Int -- ^ ! wxEVT_STC_NEEDSHOWN length position. + | STCPainted -- ^ ! wxEVT_STC_PAINTED. + | STCUserListSelection Int String -- ^ ! wxEVT_STC_USERLISTSELECTION listType text + | STCUriDropped String -- ^ ! wxEVT_STC_URIDROPPED + | STCDwellStart Point -- ^ ! wxEVT_STC_DWELLSTART + | STCDwellEnd Point -- ^ ! wxEVT_STC_DWELLEND + | STCStartDrag Int Int String -- ^ ! wxEVT_STC_START_DRAG. + | STCDragOver Point DragResult -- ^ ! wxEVT_STC_DRAG_OVER + | STCDoDrop String DragResult -- ^ ! wxEVT_STC_DO_DROP + | STCZoom -- ^ ! wxEVT_STC_ZOOM + | STCHotspotClick -- ^ ! wxEVT_STC_HOTSPOT_CLICK + | STCHotspotDClick -- ^ ! wxEVT_STC_HOTSPOT_DCLICK + | STCCalltipClick -- ^ ! wxEVT_STC_CALLTIP_CLICK + | STCAutocompSelection -- ^ ! wxEVT_STC_AUTOCOMP_SELECTION + | STCUnknown -- ^ Unknown event. Should never occur. + +instance Show EventSTC where + show STCChange = "(stc event: change)" + show STCStyleNeeded = "(stc event: style needed)" + show (STCCharAdded c p) = "(stc event: char added: " ++ show c ++ " at position " ++ show p ++ ")" + show STCSavePointReached = "(stc event: save point reached)" + show STCSavePointLeft = "(stc event: save point left)" + show STCROModifyAttempt = "(stc event: read only modify attempt)" + show STCKey = "(stc event: key)" + show STCDoubleClick = "(stc event: double click)" + show STCUpdateUI = "(stc event: update ui)" + show (STCModified p mt t len ladd line fln flp) = "(stc event: modified: position " ++ show p ++ ", modtype " ++ show mt ++ ", text " ++ show t ++ ", length " ++ show len ++ ", lines added " ++ show ladd ++ ", line " ++ show line ++ ", fln " ++ show fln ++ ", flp " ++ show flp ++ ")" + show (STCMacroRecord m wp lp) = "(stc event: macro record, message " ++ show m ++ ", wParam " ++ show wp ++ ", lParam " ++ show lp ++ ")" + show (STCMarginClick alt shift ctrl p m) = "(stc event: margin " ++ show m ++ " clicked, pos " ++ show p ++ ", modifiers = [" ++ (if alt then "alt, " else "") ++ (if shift then "shift, " else "") ++ (if ctrl then "control" else "") ++ "])" + show (STCNeedShown p len) = "(stc event: need to show lines from " ++ show p ++ ", length " ++ show len ++ ")" + show STCPainted = "(stc event: painted)" + show (STCUserListSelection lt t) = "(stc event: user list selection, type " ++ show lt ++ ", text " ++ show t ++ ")" + show (STCUriDropped t) = "(stc event: uri dropped: " ++ t ++ ")" + show (STCDwellStart p) = "(stc event: dwell start, (x,y) " ++ show p ++ ")" + show (STCDwellEnd p) = "(stc event: dwell end, (x,y) " ++ show p ++ ")" + show (STCStartDrag lin car str) = "(stc event: start drag, line " ++ show lin ++ ", caret " ++ show car ++ ", text " ++ show str ++ ")" + show (STCDragOver p res) = "(stc event: drag over, (x,y) " ++ show p ++ ", dragResult " ++ show res ++ ")" + show (STCDoDrop str res) = "(stc event: do drop, text " ++ show str ++ ", dragResult " ++ show res ++ ")" + show STCZoom = "(stc event: zoom)" + show STCHotspotClick = "(stc event: hotspot click)" + show STCHotspotDClick = "(stc event: hotspot double click)" + show STCCalltipClick = "(stc event: calltip clicked)" + show STCAutocompSelection = "(stc event: autocomp selectioned)" + show STCUnknown = "(stc event: unknown)" + +fromSTCEvent :: StyledTextEvent a -> IO EventSTC +fromSTCEvent event + = do et <- eventGetEventType event + case lookup et stcEvents of + Just action -> action event + Nothing -> return STCUnknown + +stcEvents :: [(EventId, StyledTextEvent a -> IO EventSTC)] +stcEvents = [ (wxEVT_STC_CHANGE, \_ -> return STCChange) + , (wxEVT_STC_STYLENEEDED, \_ -> return STCStyleNeeded) + , (wxEVT_STC_CHARADDED, charAdded) + , (wxEVT_STC_SAVEPOINTREACHED, \_ -> return STCSavePointReached) + , (wxEVT_STC_SAVEPOINTLEFT, \_ -> return STCSavePointLeft) + , (wxEVT_STC_ROMODIFYATTEMPT, \_ -> return STCROModifyAttempt) + , (wxEVT_STC_KEY, \_ -> return STCKey) + , (wxEVT_STC_DOUBLECLICK, \_ -> return STCDoubleClick) + , (wxEVT_STC_UPDATEUI, \_ -> return STCUpdateUI) + , (wxEVT_STC_MODIFIED, modified) + , (wxEVT_STC_MACRORECORD, macroRecord) + , (wxEVT_STC_MARGINCLICK, marginClick) + , (wxEVT_STC_NEEDSHOWN, needShown) + , (wxEVT_STC_PAINTED, \_ -> return STCPainted) + , (wxEVT_STC_USERLISTSELECTION, userListSelection) + , (wxEVT_STC_URIDROPPED, uriDropped) + , (wxEVT_STC_DWELLSTART, dwellStart) + , (wxEVT_STC_DWELLEND, dwellEnd) + , (wxEVT_STC_START_DRAG, startDrag) + , (wxEVT_STC_DRAG_OVER, dragOver) + , (wxEVT_STC_DO_DROP, doDrop) + , (wxEVT_STC_ZOOM, \_ -> return STCZoom) + , (wxEVT_STC_HOTSPOT_CLICK, \_ -> return STCHotspotClick) + , (wxEVT_STC_CALLTIP_CLICK, \_ -> return STCCalltipClick) + -- TODO: STCAutocompSelection event is not tested yet. + , (wxEVT_STC_AUTOCOMP_SELECTION, \_ -> return STCAutocompSelection) + ] + where + charAdded evt = do + c <- styledTextEventGetKey evt + let c' | c < 0 = chr $ c + 256 + | otherwise = chr c + p <- styledTextEventGetPosition evt + return $ STCCharAdded c' p + modified evt = do + p <- styledTextEventGetPosition evt + mt <- styledTextEventGetModificationType evt + t <- styledTextEventGetText evt + len <- styledTextEventGetLength evt + ladd <- styledTextEventGetLinesAdded evt + line <- styledTextEventGetLine evt + fln <- styledTextEventGetFoldLevelNow evt + flp <- styledTextEventGetFoldLevelPrev evt + -- TODO: t should only be returned under some modificationtype conditions + -- or should we always return it? + return $ STCModified p mt (Just t) len ladd line fln flp + macroRecord evt = do + m <- styledTextEventGetMessage evt + wp <- styledTextEventGetWParam evt + lp <- styledTextEventGetLParam evt + return $ STCMacroRecord m wp lp + marginClick evt = do + alt <- styledTextEventGetAlt evt + shift <- styledTextEventGetShift evt + ctrl <- styledTextEventGetControl evt + p <- styledTextEventGetPosition evt + m <- styledTextEventGetMargin evt + return $ STCMarginClick alt shift ctrl p m + needShown evt = do + p <- styledTextEventGetPosition evt + len <- styledTextEventGetLength evt + return $ STCNeedShown p len + {- + -- expEVT_STC_POSCHANGED is removed in wxWidgets-2.6.x. + posChanged evt = do + p <- styledTextEventGetPosition evt + return $ STCPosChanged p + -} + userListSelection evt = do + lt <- styledTextEventGetListType evt + text <- styledTextEventGetText evt + return $ STCUserListSelection lt text + uriDropped evt = do + t <- styledTextEventGetText evt + return $ STCUriDropped t + dwellStart evt = do + x <- styledTextEventGetX evt + y <- styledTextEventGetY evt + return $ STCDwellStart (point x y) + dwellEnd evt = do + x <- styledTextEventGetX evt + y <- styledTextEventGetY evt + return $ STCDwellEnd (point x y) + startDrag evt = do + lin <- styledTextEventGetLine evt + car <- styledTextEventGetPosition evt + str <- styledTextEventGetDragText evt + return $ STCStartDrag lin car str + dragOver evt = do + x <- styledTextEventGetX evt + y <- styledTextEventGetY evt + res <- styledTextEventGetDragResult evt + return $ STCDragOver (point x y) $ toDragResult res + doDrop evt = do + str <- styledTextEventGetDragText evt + res <- styledTextEventGetDragResult evt + return $ STCDoDrop str $ toDragResult res + +stcOnSTCEvent :: StyledTextCtrl a -> (EventSTC -> IO ()) -> IO () +stcOnSTCEvent stc handler + = do windowOnEvent stc stcEventsAll handler eventHandler + where + eventHandler event + = do eventSTC <- fromSTCEvent (objectCast event) + if isSTCUnknown eventSTC + then return () -- what else? + else handler eventSTC + isSTCUnknown :: EventSTC -> Bool + isSTCUnknown STCUnknown = True + isSTCUnknown _ = False + -- most of the events can probably be ignored + stcEventsAll = map fst stcEvents + +stcGetOnSTCEvent :: StyledTextCtrl a -> IO (EventSTC -> IO ()) +stcGetOnSTCEvent window + = unsafeWindowGetHandlerState window (head $ map fst stcEvents) (\ev -> skipCurrentEvent) + +{----------------------------------------------------------------------------------------- + Printing +-----------------------------------------------------------------------------------------} +-- | Printer events. +data EventPrint = PrintBeginDoc (IO ()) Int Int -- ^ Print a copy: cancel, start page, end page + | PrintEndDoc + | PrintBegin -- ^ Begin a print job. + | PrintEnd + | PrintPrepare -- ^ Prepare: chance to call 'printOutSetPageLimits' for example. + | PrintPage (IO ()) (DC ()) Int -- ^ Print a page: cancel, printer device context, page number. + | PrintUnknown Int -- ^ Unknown print event with event code + +-- | Convert a 'PrintEvent' object to an 'EventPrint' value. +fromPrintEvent :: WXCPrintEvent a -> IO EventPrint +fromPrintEvent event + = do tp <- eventGetEventType event + case lookup tp printEvents of + Just f -> f event + Nothing -> return (PrintUnknown tp) + +-- | Print event list. +printEvents :: [(Int,WXCPrintEvent a -> IO EventPrint)] +printEvents + = [(wxEVT_PRINT_PAGE, \ev -> do page <- wxcPrintEventGetPage ev + pout <- wxcPrintEventGetPrintout ev + dc <- printoutGetDC pout + let cancel = wxcPrintEventSetContinue ev False + return (PrintPage cancel dc page)) + ,(wxEVT_PRINT_BEGIN_DOC,\ev -> do page <- wxcPrintEventGetPage ev + epage<- wxcPrintEventGetEndPage ev + let cancel = wxcPrintEventSetContinue ev False + return (PrintBeginDoc cancel page epage)) + ,(wxEVT_PRINT_PREPARE, \ev -> return PrintPrepare) + ,(wxEVT_PRINT_END_DOC, \ev -> return PrintEndDoc) + ,(wxEVT_PRINT_BEGIN, \ev -> return PrintBegin) + ,(wxEVT_PRINT_END, \ev -> return PrintEnd) + ] + +-- | Set an event handler for printing. +printOutOnPrint :: WXCPrintout a -> (EventPrint -> IO ()) -> IO () +printOutOnPrint printOut eventHandler + = do evtHandler <- wxcPrintoutGetEvtHandler printOut + evtHandlerOnEvent evtHandler idAny idAny (map fst printEvents) + eventHandler (\_ -> return ()) printHandler + where + printHandler event + = do eventPrint <- fromPrintEvent (objectCast event) + eventHandler eventPrint + +-- | Get the current print handler +printOutGetOnPrint :: WXCPrintout a -> IO (EventPrint -> IO ()) +printOutGetOnPrint printOut + = do evtHandler <- wxcPrintoutGetEvtHandler printOut + unsafeGetHandlerState evtHandler idAny wxEVT_PRINT_PAGE (\ev -> skipCurrentEvent) + + +{----------------------------------------------------------------------------------------- + Scrolling +-----------------------------------------------------------------------------------------} +-- | Scroll events. +data EventScroll = ScrollTop !Orientation !Int -- ^ scroll to top + | ScrollBottom !Orientation !Int -- ^ scroll to bottom + | ScrollLineUp !Orientation !Int -- ^ scroll line up + | ScrollLineDown !Orientation !Int -- ^ scroll line down + | ScrollPageUp !Orientation !Int -- ^ scroll page up + | ScrollPageDown !Orientation !Int -- ^ scroll page down + | ScrollTrack !Orientation !Int -- ^ frequent event when user drags the thumbtrack + | ScrollRelease !Orientation !Int -- ^ thumbtrack is released + deriving Show + +-- | The orientation of a widget. +data Orientation = Horizontal | Vertical + deriving (Eq, Show) + + +-- | Get the orientation of a scroll event. +scrollOrientation :: EventScroll -> Orientation +scrollOrientation scroll + = case scroll of + ScrollTop orient pos -> orient + ScrollBottom orient pos -> orient + ScrollLineUp orient pos -> orient + ScrollLineDown orient pos -> orient + ScrollPageUp orient pos -> orient + ScrollPageDown orient pos -> orient + ScrollTrack orient pos -> orient + ScrollRelease orient pos -> orient + +-- | Get the position of the scroll bar. +scrollPos :: EventScroll -> Int +scrollPos scroll + = case scroll of + ScrollTop orient pos -> pos + ScrollBottom orient pos -> pos + ScrollLineUp orient pos -> pos + ScrollLineDown orient pos -> pos + ScrollPageUp orient pos -> pos + ScrollPageDown orient pos -> pos + ScrollTrack orient pos -> pos + ScrollRelease orient pos -> pos + + + +fromScrollEvent :: ScrollWinEvent a -> IO EventScroll +fromScrollEvent event + = do orient <- scrollWinEventGetOrientation event + pos <- scrollWinEventGetPosition event + tp <- eventGetEventType event + let orientation | orient == wxHORIZONTAL = Horizontal + | otherwise = Vertical + case lookup tp scrollEvents of + Just evt -> return (evt orientation pos) + Nothing -> return (ScrollRelease orientation pos) + +scrollEvents :: [(Int,Orientation -> Int -> EventScroll)] +scrollEvents + = [(wxEVT_SCROLLWIN_TOP, ScrollTop) + ,(wxEVT_SCROLLWIN_BOTTOM, ScrollBottom) + ,(wxEVT_SCROLLWIN_LINEUP, ScrollLineUp) + ,(wxEVT_SCROLLWIN_LINEDOWN, ScrollLineDown) + ,(wxEVT_SCROLLWIN_PAGEUP, ScrollPageUp) + ,(wxEVT_SCROLLWIN_PAGEDOWN, ScrollPageDown) + ,(wxEVT_SCROLLWIN_THUMBTRACK, ScrollTrack) + ,(wxEVT_SCROLLWIN_THUMBRELEASE, ScrollRelease) + ] + +-- | Set a scroll event handler. +windowOnScroll :: Window a -> (EventScroll -> IO ()) -> IO () +windowOnScroll window eventHandler + = windowOnEvent window (map fst scrollEvents) eventHandler scrollHandler + where + scrollHandler event + = do eventScroll <- fromScrollEvent (objectCast event) + eventHandler eventScroll + +-- | Get the current scroll event handler of a window. +windowGetOnScroll :: Window a -> IO (EventScroll -> IO ()) +windowGetOnScroll window + = unsafeWindowGetHandlerState window wxEVT_SCROLLWIN_TOP (\scroll -> skipCurrentEvent) + +{-------------------------------------------------------------------------- + Html event +--------------------------------------------------------------------------} +-- | Html window events +data EventHtml + = HtmlCellClicked String EventMouse Point + -- ^ A /cell/ is clicked. Contains the cell /id/ attribute value, the mouse event and the logical coordinates. + | HtmlCellHover String + -- ^ The mouse hovers over a cell. Contains the cell /id/ attribute value. + | HtmlLinkClicked String String String EventMouse Point + -- ^ A link is clicked. Contains the hyperlink, the frame target, the cell /id/ attribute value, the mouse event, and the logical coordinates. + | HtmlSetTitle String + -- ^ Called when a @<title>@ tag is parsed. + | HtmlUnknown + -- ^ Unrecognised html event + +instance Show EventHtml where + show ev + = case ev of + HtmlCellClicked id mouse pnt -> "Html Cell " ++ show id ++ " clicked: " ++ show mouse + HtmlLinkClicked href target id mouse p -> "Html Link " ++ show id ++ " clicked: " ++ href + HtmlCellHover id -> "Html Cell " ++ show id ++ " hover" + HtmlSetTitle title -> "Html event title: " ++ title + HtmlUnknown -> "Html event unknown" + +fromHtmlEvent :: WXCHtmlEvent a -> IO EventHtml +fromHtmlEvent event + = do tp <- eventGetEventType event + case lookup tp htmlEvents of + Nothing -> return HtmlUnknown + Just action -> action event + where + htmlEvents = [(wxEVT_HTML_CELL_MOUSE_HOVER, htmlHover) + ,(wxEVT_HTML_CELL_CLICKED, htmlClicked) + ,(wxEVT_HTML_LINK_CLICKED, htmlLink) + ,(wxEVT_HTML_SET_TITLE, htmlTitle)] + + htmlTitle event + = do title <- commandEventGetString event + return (HtmlSetTitle title) + + htmlHover event + = do id <- wxcHtmlEventGetHtmlCellId event + return (HtmlCellHover id) + + htmlClicked event + = do id <- wxcHtmlEventGetHtmlCellId event + mouseEv <- wxcHtmlEventGetMouseEvent event + mouse <- fromMouseEvent mouseEv + pnt <- wxcHtmlEventGetLogicalPosition event + return (HtmlCellClicked id mouse pnt) + + htmlLink event + = do id <- wxcHtmlEventGetHtmlCellId event + mouseEv <- wxcHtmlEventGetMouseEvent event + mouse <- fromMouseEvent mouseEv + href <- wxcHtmlEventGetHref event + target <- wxcHtmlEventGetTarget event + pnt <- wxcHtmlEventGetLogicalPosition event + return (HtmlLinkClicked href target id mouse pnt) + +-- | Set a html event handler for a html window. The first argument determines whether +-- hover events ('HtmlCellHover') are handled or not. +htmlWindowOnHtmlEvent :: WXCHtmlWindow a -> Bool -> (EventHtml -> IO ()) -> IO () +htmlWindowOnHtmlEvent window allowHover handler + = windowOnEvent window htmlEvents handler eventHandler + where + htmlEvents + = [wxEVT_HTML_CELL_CLICKED,wxEVT_HTML_LINK_CLICKED,wxEVT_HTML_SET_TITLE] + ++ (if allowHover then [wxEVT_HTML_CELL_MOUSE_HOVER] else []) + + eventHandler event + = do eventHtml <- fromHtmlEvent (objectCast event) + handler eventHtml + +-- | Get the current html event handler of a html window. +htmlWindowGetOnHtmlEvent :: WXCHtmlWindow a -> IO (EventHtml -> IO ()) +htmlWindowGetOnHtmlEvent window + = unsafeWindowGetHandlerState window wxEVT_HTML_CELL_CLICKED (\ev -> skipCurrentEvent) + + + + +{----------------------------------------------------------------------------------------- + Close, Destroy, Create +-----------------------------------------------------------------------------------------} +-- | Adds a close handler to the currently installed close handlers. +windowAddOnClose :: Window a -> IO () -> IO () +windowAddOnClose window new + = do prev <- windowGetOnClose window + windowOnClose window (do{ new; prev }) + +-- | Set an event handler that is called when the user tries to close a frame or dialog. +-- Don't forget to call the previous handler or 'frameDestroy' explicitly or otherwise the +-- frame won't be closed. +windowOnClose :: Window a -> IO () -> IO () +windowOnClose window eventHandler + = windowOnEvent window [wxEVT_CLOSE_WINDOW] eventHandler (\ev -> eventHandler) + +-- | Get the current close event handler. +windowGetOnClose :: Window a -> IO (IO ()) +windowGetOnClose window + = unsafeWindowGetHandlerState window wxEVT_CLOSE_WINDOW (do windowDestroy window; return ()) + +-- | Set an event handler that is called when the window is destroyed. +-- /Note: does not seem to work on windows/. +windowOnDestroy :: Window a -> IO () -> IO () +windowOnDestroy window eventHandler + = windowOnEvent window [wxEVT_DESTROY] eventHandler (\ev -> eventHandler) + +-- | Get the current destroy event handler. +windowGetOnDestroy :: Window a -> IO (IO ()) +windowGetOnDestroy window + = unsafeWindowGetHandlerState window wxEVT_DESTROY (return ()) + +-- | Add a delete-event handler to the current installed delete-event handlers. +-- +-- > windowAddOnDelete window new +-- > = do prev <- windowGetOnDelete window +-- > windowOnDelete window (do{ new; prev }) + +windowAddOnDelete :: Window a -> IO () -> IO () +windowAddOnDelete window new + = do prev <- windowGetOnDelete window + windowOnDelete window (do{ new; prev }) + +-- | Set an event handler that is called when the window is deleted. +-- Use with care as the window itself is in a deletion state. +windowOnDelete :: Window a -> IO () -> IO () +windowOnDelete window eventHandler + = windowOnEventEx window [wxEVT_DELETE] eventHandler onDelete (\ev -> return ()) + where + onDelete ownerDeleted + | ownerDeleted = eventHandler + | otherwise = return () -- don't run on disconnect! + +-- | Get the current delete event handler. +windowGetOnDelete :: Window a -> IO (IO ()) +windowGetOnDelete window + = unsafeWindowGetHandlerState window wxEVT_DELETE (return ()) + + +-- | Set an event handler that is called when the window is created. +windowOnCreate :: Window a -> IO () -> IO () +windowOnCreate window eventHandler + = windowOnEvent window [wxEVT_CREATE] eventHandler (\ev -> eventHandler) + +-- | Get the current create event handler. +windowGetOnCreate :: Window a -> IO (IO ()) +windowGetOnCreate window + = unsafeWindowGetHandlerState window wxEVT_CREATE (return ()) + +-- | Set an event handler that is called when the window is resized. +windowOnSize :: Window a -> IO () -> IO () +windowOnSize window eventHandler + = windowOnEvent window [wxEVT_SIZE] eventHandler (\ev -> eventHandler) + +-- | Get the current resize event handler. +windowGetOnSize :: Window a -> IO (IO ()) +windowGetOnSize window + = unsafeWindowGetHandlerState window wxEVT_SIZE (return ()) + +-- | Set an event handler that is called when the window is activated or deactivated. +-- The event parameter is 'True' when the window is activated. +windowOnActivate :: Window a -> (Bool -> IO ()) -> IO () +windowOnActivate window eventHandler + = windowOnEvent window [wxEVT_ACTIVATE] eventHandler activateHandler + where + activateHandler event + = do active <- activateEventGetActive (objectCast event) + eventHandler active + +-- | Get the current activate event handler. +windowGetOnActivate :: Window a -> IO (Bool -> IO ()) +windowGetOnActivate window + = unsafeWindowGetHandlerState window wxEVT_ACTIVATE (\active -> return ()) + +-- | Set an event handler that is called when the window gets or loses the focus. +-- The event parameter is 'True' when the window gets the focus. +windowOnFocus :: Window a -> (Bool -> IO ()) -> IO () +windowOnFocus window eventHandler + = do windowOnEvent window [wxEVT_SET_FOCUS] eventHandler getFocusHandler + windowOnEvent window [wxEVT_KILL_FOCUS] eventHandler killFocusHandler + where + getFocusHandler event + = eventHandler True + killFocusHandler event + = eventHandler False + +-- | Get the current focus event handler. +windowGetOnFocus :: Window a -> IO (Bool -> IO ()) +windowGetOnFocus window + = unsafeWindowGetHandlerState window wxEVT_SET_FOCUS (\getfocus -> return ()) + + +-- | A context menu event is generated when the user righ-clicks in a window +-- or presses shift-F10. +windowOnContextMenu :: Window a -> IO () -> IO () +windowOnContextMenu window eventHandler + = windowOnEvent window [wxEVT_CONTEXT_MENU] eventHandler (\ev -> eventHandler) + +-- | Get the current context menu event handler. +windowGetOnContextMenu :: Window a -> IO (IO ()) +windowGetOnContextMenu window + = unsafeWindowGetHandlerState window wxEVT_CONTEXT_MENU skipCurrentEvent + +-- | A menu event is generated when the user selects a menu item. +-- You should install this handler on the window that owns the menubar or a popup menu. +evtHandlerOnMenuCommand :: EvtHandler a -> Id -> IO () -> IO () +evtHandlerOnMenuCommand window id eventHandler + = evtHandlerOnEvent window id id [wxEVT_COMMAND_MENU_SELECTED] eventHandler (\_ -> return ()) (\ev -> eventHandler) + +-- | Get the current event handler for a certain menu. +evtHandlerGetOnMenuCommand :: EvtHandler a -> Id -> IO (IO ()) +evtHandlerGetOnMenuCommand window id + = unsafeGetHandlerState window id wxEVT_COMMAND_MENU_SELECTED skipCurrentEvent + + +-- | An idle event is generated in idle time. The handler should return whether more +-- idle processing is needed ('True') or otherwise the event loop goes into a passive +-- waiting state. +windowOnIdle :: Window a -> IO Bool -> IO () +windowOnIdle window eventHandler + = windowOnEvent window [wxEVT_IDLE] eventHandler idleHandler + where + idleHandler event + = do requestMore <- eventHandler + idleEventRequestMore (objectCast event) requestMore + return () + +-- | Get the current context menu event handler. +windowGetOnIdle :: Window a -> IO (IO Bool) +windowGetOnIdle window + = unsafeWindowGetHandlerState window wxEVT_IDLE (return False) + + +-- | A timer event is generated by an attached timer, see 'windowTimerAttach'. +-- /Broken!/ (use 'timerOnCommand' instead). +windowOnTimer :: Window a -> IO () -> IO () +windowOnTimer window eventHandler + = windowOnEvent window [wxEVT_TIMER] eventHandler (\ev -> eventHandler) + +-- | Get the current timer handler. +windowGetOnTimer :: Window a -> IO (IO ()) +windowGetOnTimer window + = unsafeWindowGetHandlerState window wxEVT_TIMER (return ()) + +{----------------------------------------------------------------------------------------- + Paint +-----------------------------------------------------------------------------------------} +-- | Set an event handler for /raw/ paint events. Draws directly to the +-- paint device context ('PaintDC') and the 'DC' is not cleared when the handler +-- is called. The handler takes two other arguments: the view rectangle and a +-- list of /dirty/ rectangles. The rectangles contain logical coordinates and +-- are already adjusted for scrolled windows. +-- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler! +windowOnPaintRaw :: Window a -> (DC () -> Rect -> [Rect] -> IO ()) -> IO () +windowOnPaintRaw window paintHandler + = windowOnEvent window [wxEVT_PAINT] paintHandler onPaint + where + onPaint event + = do obj <- eventGetEventObject event + if (obj==objectNull) + then return () + else do let window = objectCast obj + region <- windowGetUpdateRects window + view <- windowGetViewRect window + withPaintDC window (\paintDC -> + do isScrolled <- objectIsScrolledWindow window + when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC) + paintHandler (downcastDC paintDC) view region) + + +-- | Get the current /raw/ paint event handler. +windowGetOnPaintRaw :: Window a -> IO (DC () -> Rect -> [Rect] -> IO ()) +windowGetOnPaintRaw window + = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc rect region -> return ()) + + +-- | Set an event handler for paint events. The implementation uses an +-- intermediate buffer for non-flickering redraws. +-- The device context ('DC') +-- is always cleared before the paint handler is called. The paint handler +-- also gets the currently visible view area as an argument (adjusted for scrolling). +-- Note: you can not set both a 'windowOnPaintRaw' and 'windowOnPaint' handler! +windowOnPaint :: Window a -> (DC () -> Rect -> IO ()) -> IO () +windowOnPaint window paintHandler + | wxToolkit == WxMac = windowOnPaintRaw window (\dc view _ -> paintHandler dc view) + | otherwise + = do v <- varCreate objectNull + windowOnEventEx window [wxEVT_PAINT] paintHandler (destroy v) (onPaint v) + where + destroy v ownerDeleted + = do bitmap <- varSwap v objectNull + when (not (objectIsNull bitmap)) (bitmapDelete bitmap) + + onPaint v event + = do obj <- eventGetEventObject event + if (obj==objectNull) + then return () + else do let window = objectCast obj + view <- windowGetViewRect window + withPaintDC window (\paintDC -> + do isScrolled <- objectIsScrolledWindow window + when (isScrolled) (scrolledWindowPrepareDC (objectCast window) paintDC) + -- Note: wxMSW 2.4 does not clear the properly scrolled view rectangle. + let clear dc | wxToolkit == WxMSW = dcClearRect dc view + | otherwise = dcClear dc + -- and repaint with buffer + dcBufferWithRefEx paintDC clear (Just v) view (\dc -> paintHandler dc view)) + + +-- | Get the current paint event handler. +windowGetOnPaint :: Window a -> IO (DC () -> Rect -> IO ()) +windowGetOnPaint window + = unsafeWindowGetHandlerState window wxEVT_PAINT (\dc view -> return ()) + + +-- Get the logical /dirty/ rectangles as a list of 'Rect'. +windowGetUpdateRects :: Window a -> IO [Rect] +windowGetUpdateRects window + = do region <- windowGetUpdateRegion window + iter <- regionIteratorCreateFromRegion region + rects <- getRects iter + regionIteratorDelete iter + p <- windowGetViewStart window + return (map (\r -> rectMove r (vecFromPoint p)) rects) + where + getRects iter + = do more <- regionIteratorHaveRects iter + if more + then do x <- regionIteratorGetX iter + y <- regionIteratorGetY iter + w <- regionIteratorGetWidth iter + h <- regionIteratorGetHeight iter + regionIteratorNext iter + rs <- getRects iter + return (rect (pt x y) (sz w h) : rs) + else return [] + + +{----------------------------------------------------------------------------------------- + Modifiers +-----------------------------------------------------------------------------------------} +-- | Called when a process is ended with the process @pid@ and exitcode. +evtHandlerOnEndProcess :: EvtHandler a -> (Int -> Int -> IO ()) -> IO () +evtHandlerOnEndProcess evtHandler handler + = evtHandlerOnEvent evtHandler (-1) (-1) [wxEVT_END_PROCESS] handler onDelete onEndProcess + where + onDelete ownerDeleted + = return () + + onEndProcess event + = let processEvent = objectCast event + in do pid <- processEventGetPid processEvent + code <- processEventGetExitCode processEvent + handler pid code + + +-- | Retrieve the current end process handler. +evtHandlerGetOnEndProcess :: EvtHandler a -> IO (Int -> Int -> IO ()) +evtHandlerGetOnEndProcess evtHandler + = unsafeGetHandlerState evtHandler (-1) wxEVT_END_PROCESS (\pid code -> return ()) + + +-- | The status of a stream (see 'StreamBase') +data StreamStatus = StreamOk -- ^ No error. + | StreamEof -- ^ No more input. + | StreamReadError -- ^ Read error. + | StreamWriteError -- ^ Write error. + deriving (Eq,Show) + +-- | Convert a stream status code into 'StreamStatus'. +streamStatusFromInt :: Int -> StreamStatus +streamStatusFromInt code + | code == wxSTREAM_NO_ERROR = StreamOk + | code == wxSTREAM_EOF = StreamEof + | code == wxSTREAM_READ_ERROR = StreamReadError + | code == wxSTREAM_WRITE_ERROR = StreamWriteError + | otherwise = StreamReadError + + +-- | Install an event handler on an input stream. The handler is called +-- whenever input is read (or when an error occurred). The third parameter +-- gives the size of the input batches. The orignal input stream should no longer be referenced after this call! +evtHandlerOnInput :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputStream a -> Int -> IO () +evtHandlerOnInput evtHandler handler stream bufferLen + = do sink <- inputSinkCreate stream evtHandler bufferLen + evtHandlerOnInputSink evtHandler handler sink + inputSinkStart sink + +-- | Install an event handler on a specific input sink. It is advised to +-- use the 'evtHandlerOnInput' whenever retrieval of the handler is not necessary. +evtHandlerOnInputSink :: EvtHandler b -> (String -> StreamStatus -> IO ()) -> InputSink a -> IO () +evtHandlerOnInputSink evtHandler handler sink + = do id <- inputSinkGetId sink + evtHandlerOnEvent evtHandler id id [wxEVT_INPUT_SINK] handler onDelete onInput + where + onDelete ownerDeleted + = return () + + onInput event + = let inputSinkEvent = objectCast event + in do input <- inputSinkEventLastString inputSinkEvent + code <- inputSinkEventLastError inputSinkEvent + handler input (streamStatusFromInt code) + + +-- | Retrieve the current input stream handler. +evtHandlerGetOnInputSink :: EvtHandler b -> IO (String -> StreamStatus -> IO ()) +evtHandlerGetOnInputSink evtHandler + = unsafeGetHandlerState evtHandler (-1) wxEVT_INPUT_SINK (\input status -> return ()) + +-- | Read the input from an 'InputSinkEvent'. +inputSinkEventLastString :: InputSinkEvent a -> IO String +inputSinkEventLastString inputSinkEvent + = do n <- inputSinkEventLastRead inputSinkEvent + if (n <= 0) + then return "" + else do buffer <- inputSinkEventLastInput inputSinkEvent + peekCWStringLen (buffer,n) + + +{----------------------------------------------------------------------------------------- + Modifiers +-----------------------------------------------------------------------------------------} +-- | The @Modifiers@ indicate the meta keys that have been pressed ('True') or not ('False'). +data Modifiers = Modifiers + { altDown :: !Bool -- ^ alt key down + , shiftDown :: !Bool -- ^ shift key down + , controlDown :: !Bool -- ^ control key down + , metaDown :: !Bool -- ^ meta key down + } + deriving (Eq) + +instance Show Modifiers where + show mods = showModifiers mods + +-- | Show modifiers, for example for use in menus. +showModifiers :: Modifiers -> String +showModifiers mods + = concat $ intersperse "+" $ filter (not.null) + [if controlDown mods then "Ctrl" else "" + ,if altDown mods then "Alt" else "" + ,if shiftDown mods then "Shift" else "" + ,if metaDown mods then "Meta" else "" + ] + + +-- | Construct a 'Modifiers' structure with no meta keys pressed. +noneDown :: Modifiers +noneDown = Modifiers False False False False + +-- | Construct a 'Modifiers' structure with just Shift meta key pressed. +justShift :: Modifiers +justShift = noneDown{ shiftDown = True } + +-- | Construct a 'Modifiers' structure with just Alt meta key pressed. +justAlt :: Modifiers +justAlt = noneDown{ altDown = True } + +-- | Construct a 'Modifiers' structure with just Ctrl meta key pressed. +justControl :: Modifiers +justControl = noneDown{ controlDown = True } + +-- | Construct a 'Modifiers' structure with just Meta meta key pressed. +justMeta :: Modifiers +justMeta = noneDown{ metaDown = True } + +-- | Test if no meta key was pressed. +isNoneDown :: Modifiers -> Bool +isNoneDown (Modifiers shift control alt meta) = not (shift || control || alt || meta) + +-- | Test if no shift, alt, or control key was pressed. +isNoShiftAltControlDown :: Modifiers -> Bool +isNoShiftAltControlDown (Modifiers shift control alt meta) = not (shift || control || alt) + +-- | Tranform modifiers into an accelerator modifiers code. +modifiersToAccelFlags :: Modifiers -> Int +modifiersToAccelFlags mod + = mask (altDown mod) 0x01 + mask (controlDown mod) 0x02 + mask (shiftDown mod) 0x04 + where + mask test flag = if test then flag else 0 + +{----------------------------------------------------------------------------------------- + MouseEvent +-----------------------------------------------------------------------------------------} +-- | Mouse events. The 'Point' gives the logical (unscrolled) position. +data EventMouse + = MouseMotion !Point !Modifiers -- ^ Mouse was moved over the client area of the window + | MouseEnter !Point !Modifiers -- ^ Mouse enters in the client area of the window + | MouseLeave !Point !Modifiers -- ^ Mouse leaves the client area of the window + | MouseLeftDown !Point !Modifiers -- ^ Mouse left button goes down + | MouseLeftUp !Point !Modifiers -- ^ Mouse left button goes up + | MouseLeftDClick !Point !Modifiers -- ^ Mouse left button double click + | MouseLeftDrag !Point !Modifiers -- ^ Mouse left button drag + | MouseRightDown !Point !Modifiers -- ^ Mouse right button goes down + | MouseRightUp !Point !Modifiers -- ^ Mouse right button goes up + | MouseRightDClick !Point !Modifiers -- ^ Mouse right button double click + | MouseRightDrag !Point !Modifiers -- ^ Mouse right button drag (unsupported on most platforms) + | MouseMiddleDown !Point !Modifiers -- ^ Mouse middle button goes down + | MouseMiddleUp !Point !Modifiers -- ^ Mouse middle button goes up + | MouseMiddleDClick !Point !Modifiers -- ^ Mouse middle button double click + | MouseMiddleDrag !Point !Modifiers -- ^ Mouse middle button drag (unsupported on most platforms) + | MouseWheel !Bool !Point !Modifiers -- ^ Mouse wheel rotation. (Bool is True for a downward rotation) + deriving (Eq) -- ,Show) + + +instance Show EventMouse where + show mouse = showMouse mouse + +-- | Show an 'EventMouse' in a user friendly way. +showMouse :: EventMouse -> String +showMouse mouse + = (if (null modsText) then "" else modsText ++ "+") ++ action ++ " at " ++ show (x,y) + where + modsText = show (mouseModifiers mouse) + (Point x y) = mousePos mouse + action + = case mouse of + MouseMotion p m -> "Motion" + MouseEnter p m -> "Enter" + MouseLeave p m -> "Leave" + MouseLeftDown p m -> "Left down" + MouseLeftUp p m -> "Left up" + MouseLeftDClick p m -> "Left double click" + MouseLeftDrag p m -> "Left drag" + MouseRightDown p m -> "Right down" + MouseRightUp p m -> "Right up" + MouseRightDClick p m -> "Right double click" + MouseRightDrag p m -> "Right drag" + MouseMiddleDown p m -> "Middle down" + MouseMiddleUp p m -> "Middle up" + MouseMiddleDClick p m -> "Middle double click" + MouseMiddleDrag p m -> "Middle drag" + MouseWheel down p m -> "Wheel " ++ (if down then "down" else "up") + + +-- | Extract the position from a 'MouseEvent'. +mousePos :: EventMouse -> Point +mousePos mouseEvent + = case mouseEvent of + MouseMotion p m -> p + MouseEnter p m -> p + MouseLeave p m -> p + MouseLeftDown p m -> p + MouseLeftUp p m -> p + MouseLeftDClick p m -> p + MouseLeftDrag p m -> p + MouseRightDown p m -> p + MouseRightUp p m -> p + MouseRightDClick p m -> p + MouseRightDrag p m -> p + MouseMiddleDown p m -> p + MouseMiddleUp p m -> p + MouseMiddleDClick p m -> p + MouseMiddleDrag p m -> p + MouseWheel _ p m -> p + +-- | Extract the modifiers from a 'MouseEvent'. +mouseModifiers :: EventMouse -> Modifiers +mouseModifiers mouseEvent + = case mouseEvent of + MouseMotion p m -> m + MouseEnter p m -> m + MouseLeave p m -> m + MouseLeftDown p m -> m + MouseLeftUp p m -> m + MouseLeftDClick p m -> m + MouseLeftDrag p m -> m + MouseRightDown p m -> m + MouseRightUp p m -> m + MouseRightDClick p m -> m + MouseRightDrag p m -> m + MouseMiddleDown p m -> m + MouseMiddleUp p m -> m + MouseMiddleDClick p m -> m + MouseMiddleDrag p m -> m + MouseWheel _ p m -> m + +fromMouseEvent :: MouseEvent a -> IO EventMouse +fromMouseEvent event + = do x <- mouseEventGetX event + y <- mouseEventGetY event + obj <- eventGetEventObject event + point <- windowCalcUnscrolledPosition (objectCast obj) (Point x y) + + altDown <- mouseEventAltDown event + controlDown <- mouseEventControlDown event + shiftDown <- mouseEventShiftDown event + metaDown <- mouseEventMetaDown event + let modifiers = Modifiers altDown shiftDown controlDown metaDown + + dragging <- mouseEventDragging event + if (dragging) + then do leftDown <- mouseEventLeftIsDown event + if (leftDown) + then return (MouseLeftDrag point modifiers) + else do middleDown <- mouseEventMiddleIsDown event + if (middleDown) + then return (MouseMiddleDrag point modifiers) + else do rightDown <- mouseEventRightIsDown event + if (rightDown) + then return (MouseRightDrag point modifiers) + else return (MouseMotion point modifiers) + else do tp <- eventGetEventType event + case lookup tp mouseEventTypes of + Just mouse -> return (mouse point modifiers) + Nothing -> if (tp==wxEVT_MOUSEWHEEL) + then do rot <- mouseEventGetWheelRotation event + delta <- mouseEventGetWheelDelta event + if (abs rot >= delta) + then return (MouseWheel (rot<0) point modifiers) + else return (MouseMotion point modifiers) + else return (MouseMotion point modifiers) + +mouseEventTypes :: [(Int,Point -> Modifiers -> EventMouse)] +mouseEventTypes + = [(wxEVT_MOTION , MouseMotion) -- must be the first element, see "windowOnMouse" + ,(wxEVT_ENTER_WINDOW , MouseEnter) + ,(wxEVT_LEAVE_WINDOW , MouseLeave) + ,(wxEVT_LEFT_DOWN , MouseLeftDown) + ,(wxEVT_LEFT_UP , MouseLeftUp) + ,(wxEVT_LEFT_DCLICK , MouseLeftDClick) + ,(wxEVT_MIDDLE_DOWN , MouseMiddleDown) + ,(wxEVT_MIDDLE_UP , MouseMiddleUp) + ,(wxEVT_MIDDLE_DCLICK, MouseMiddleDClick) + ,(wxEVT_RIGHT_DOWN , MouseRightDown) + ,(wxEVT_RIGHT_UP , MouseRightUp) + ,(wxEVT_RIGHT_DCLICK , MouseRightDClick) + ] + +-- | Set a mouse event handler for a window. The first argument determines whether +-- mouse motion events ('MouseMotion') are handled or not. +windowOnMouse :: Window a -> Bool -> (EventMouse -> IO ()) -> IO () +windowOnMouse window allowMotion handler + = windowOnEvent window mouseEvents handler eventHandler + where + mouseEvents + = (map fst (if allowMotion then mouseEventTypes else tail (mouseEventTypes))) ++ [wxEVT_MOUSEWHEEL] + + eventHandler event + = do eventMouse <- fromMouseEvent (objectCast event) + handler eventMouse + +-- | Get the current mouse event handler of a window. +windowGetOnMouse :: Window a -> IO (EventMouse -> IO ()) +windowGetOnMouse window + = unsafeWindowGetHandlerState window wxEVT_ENTER_WINDOW (\ev -> skipCurrentEvent) + + +{----------------------------------------------------------------------------------------- + KeyboardEvent +-----------------------------------------------------------------------------------------} +-- | Set an event handler for untranslated key presses. If 'skipCurrentEvent' is not +-- called, the corresponding 'windowOnKeyChar' eventhandler won't be called. +windowOnKeyDown :: Window a -> (EventKey -> IO ()) -> IO () +windowOnKeyDown window handler + = windowOnEvent window [wxEVT_KEY_DOWN] handler eventHandler + where + eventHandler event + = do eventKey <- eventKeyFromEvent (objectCast event) + handler eventKey + +-- | Get the current key down handler of a window. +windowGetOnKeyDown :: Window a -> IO (EventKey -> IO ()) +windowGetOnKeyDown window + = unsafeWindowGetHandlerState window wxEVT_KEY_DOWN (\eventKey -> skipCurrentEvent) + + +-- | Set an event handler for translated key presses. +windowOnKeyChar :: Window a -> (EventKey -> IO ()) -> IO () +windowOnKeyChar window handler + = windowOnEvent window [wxEVT_CHAR] handler eventHandler + where + eventHandler event + = do eventKey <- eventKeyFromEvent (objectCast event) + handler eventKey + +-- | Get the current translated key handler of a window. +windowGetOnKeyChar :: Window a -> IO (EventKey -> IO ()) +windowGetOnKeyChar window + = unsafeWindowGetHandlerState window wxEVT_CHAR (\eventKey -> skipCurrentEvent) + + +-- | Set an event handler for (untranslated) key releases. +windowOnKeyUp :: Window a -> (EventKey -> IO ()) -> IO () +windowOnKeyUp window handler + = windowOnEvent window [wxEVT_KEY_UP] handler eventHandler + where + eventHandler event + = do eventKey <- eventKeyFromEvent (objectCast event) + handler eventKey + +-- | Get the current key release handler of a window. +windowGetOnKeyUp :: Window a -> IO (EventKey -> IO ()) +windowGetOnKeyUp window + = unsafeWindowGetHandlerState window wxEVT_KEY_UP (\keyInfo -> skipCurrentEvent) + + +eventKeyFromEvent :: KeyEvent a -> IO EventKey +eventKeyFromEvent event + = do x <- keyEventGetX event + y <- keyEventGetY event + obj <- eventGetEventObject event + point <- if objectIsNull obj + then return (Point x y) + else windowCalcUnscrolledPosition (objectCast obj) (Point x y) + + altDown <- keyEventAltDown event + controlDown <- keyEventControlDown event + shiftDown <- keyEventShiftDown event + metaDown <- keyEventMetaDown event + let modifiers = Modifiers altDown shiftDown controlDown metaDown + + keyCode <- keyEventGetKeyCode event + let key = keyCodeToKey keyCode + + return (EventKey key modifiers point) + + + +-- | A keyboard event contains the key, the modifiers and the focus point. +data EventKey = EventKey !Key !Modifiers !Point + deriving (Eq,Show) + +-- | Extract the key from a keyboard event. +keyKey :: EventKey -> Key +keyKey (EventKey key mods pos) = key + +-- | Extract the modifiers from a keyboard event. +keyModifiers :: EventKey -> Modifiers +keyModifiers (EventKey key mods pos) = mods + +-- | Extract the position from a keyboard event. +keyPos :: EventKey -> Point +keyPos (EventKey key mods pos) = pos + + +-- | A low-level virtual key code. +type KeyCode = Int + +-- | A 'Key' represents a single key on a keyboard. +data Key + = KeyChar !Char -- ^ An ascii code. + | KeyOther !KeyCode -- ^ An unknown virtual key. + | KeyBack + | KeyTab + | KeyReturn + | KeyEscape + | KeySpace + | KeyDelete + | KeyInsert + | KeyEnd + | KeyHome + | KeyLeft + | KeyUp + | KeyRight + | KeyDown + | KeyPageUp + | KeyPageDown + | KeyStart + | KeyClear + | KeyShift + | KeyAlt + | KeyControl + | KeyMenu + | KeyPause + | KeyCapital + | KeyHelp + | KeySelect + | KeyPrint + | KeyExecute + | KeySnapshot + | KeyCancel + | KeyLeftButton + | KeyRightButton + | KeyMiddleButton + | KeyNum0 + | KeyNum1 + | KeyNum2 + | KeyNum3 + | KeyNum4 + | KeyNum5 + | KeyNum6 + | KeyNum7 + | KeyNum8 + | KeyNum9 + | KeyMultiply + | KeyAdd + | KeySeparator + | KeySubtract + | KeyDecimal + | KeyDivide + | KeyF1 + | KeyF2 + | KeyF3 + | KeyF4 + | KeyF5 + | KeyF6 + | KeyF7 + | KeyF8 + | KeyF9 + | KeyF10 + | KeyF11 + | KeyF12 + | KeyF13 + | KeyF14 + | KeyF15 + | KeyF16 + | KeyF17 + | KeyF18 + | KeyF19 + | KeyF20 + | KeyF21 + | KeyF22 + | KeyF23 + | KeyF24 + | KeyNumLock + | KeyScroll +{- Note: If we add "deriving (Show)" we get a strange link error in ghci: + Loading package wxh ... linking ... Overflown relocs: 122 +-} + deriving (Eq) + +{- + | KeyNumSpace + | KeyNumTab + | KeyNumEnter + | KeyNumF1 + | KeyNumF2 + | KeyNumF3 + | KeyNumF4 + | KeyNumHome + | KeyNumLeft + | KeyNumUp + | KeyNumRight + | KeyNumDown + | KeyNumPageUp + | KeyNumPageDown + | KeyNumEnd + | KeyNumBegin + | KeyNumInsert + | KeyNumDelete + | KeyNumEqual + | KeyNumMultiply + | KeyNumAdd + | KeyNumSeparator + | KeyNumSubstract + | KeyNumDecimal + | KeyNumSubstract +-} + +-- | From a key to a virtual key code. +keyToKeyCode :: Key -> KeyCode +keyToKeyCode key + = case key of + KeyChar c -> fromEnum c + KeyOther code -> code + KeyBack -> wxK_BACK + KeyTab -> wxK_TAB + KeyReturn -> wxK_RETURN + KeyEscape -> wxK_ESCAPE + KeySpace -> wxK_SPACE + KeyDelete -> wxK_DELETE + KeyInsert -> wxK_INSERT + KeyEnd -> wxK_END + KeyHome -> wxK_HOME + KeyLeft -> wxK_LEFT + KeyUp -> wxK_UP + KeyRight -> wxK_RIGHT + KeyDown -> wxK_DOWN + KeyPageUp -> wxK_PAGEUP + KeyPageDown -> wxK_PAGEDOWN + KeyStart -> wxK_START + KeyClear -> wxK_CLEAR + KeyShift -> wxK_SHIFT + KeyAlt -> wxK_ALT + KeyControl -> wxK_CONTROL + KeyMenu -> wxK_MENU + KeyPause -> wxK_PAUSE + KeyCapital -> wxK_CAPITAL + KeyHelp -> wxK_HELP + KeySelect -> wxK_SELECT + KeyPrint -> wxK_PRINT + KeyExecute -> wxK_EXECUTE + KeySnapshot -> wxK_SNAPSHOT + KeyCancel -> wxK_CANCEL + KeyLeftButton -> wxK_LBUTTON + KeyRightButton -> wxK_RBUTTON + KeyMiddleButton -> wxK_MBUTTON + KeyNum0 -> wxK_NUMPAD0 + KeyNum1 -> wxK_NUMPAD1 + KeyNum2 -> wxK_NUMPAD2 + KeyNum3 -> wxK_NUMPAD3 + KeyNum4 -> wxK_NUMPAD4 + KeyNum5 -> wxK_NUMPAD5 + KeyNum6 -> wxK_NUMPAD6 + KeyNum7 -> wxK_NUMPAD7 + KeyNum8 -> wxK_NUMPAD8 + KeyNum9 -> wxK_NUMPAD9 + KeyMultiply -> wxK_MULTIPLY + KeyAdd -> wxK_ADD + KeySeparator -> wxK_SEPARATOR + KeySubtract -> wxK_SUBTRACT + KeyDecimal -> wxK_DECIMAL + KeyDivide -> wxK_DIVIDE + KeyF1 -> wxK_F1 + KeyF2 -> wxK_F2 + KeyF3 -> wxK_F3 + KeyF4 -> wxK_F4 + KeyF5 -> wxK_F5 + KeyF6 -> wxK_F6 + KeyF7 -> wxK_F7 + KeyF8 -> wxK_F8 + KeyF9 -> wxK_F9 + KeyF10 -> wxK_F10 + KeyF11 -> wxK_F11 + KeyF12 -> wxK_F12 + KeyF13 -> wxK_F13 + KeyF14 -> wxK_F14 + KeyF15 -> wxK_F15 + KeyF16 -> wxK_F16 + KeyF17 -> wxK_F17 + KeyF18 -> wxK_F18 + KeyF19 -> wxK_F19 + KeyF20 -> wxK_F20 + KeyF21 -> wxK_F21 + KeyF22 -> wxK_F22 + KeyF23 -> wxK_F23 + KeyF24 -> wxK_F24 + KeyNumLock -> wxK_NUMLOCK + KeyScroll -> wxK_SCROLL + +-- | A virtual key code to a key. +keyCodeToKey :: KeyCode -> Key +keyCodeToKey keyCode + = if (keyCode < wxK_DELETE && keyCode > wxK_SPACE) -- optimize for the common case + then KeyChar (toEnum keyCode) + else case IntMap.lookup keyCode keyCodeMap of + Just key -> key + Nothing | keyCode <= 255 -> KeyChar (toEnum keyCode) + | otherwise -> KeyOther keyCode + +-- Use a big-endian patricia tree to efficiently map key codes to Haskell keys. +-- Since it is a static map, we could maybe use one of Knuth's optimally balanced +-- trees.... +-- keyCodeMap :: IntMap.IntMap Key +keyCodeMap + = IntMap.fromList + [(wxK_BACK , KeyBack) + ,(wxK_TAB , KeyTab) + ,(wxK_RETURN , KeyReturn) + ,(wxK_ESCAPE , KeyEscape) + ,(wxK_SPACE , KeySpace) + ,(wxK_DELETE , KeyDelete) + ,(wxK_INSERT , KeyInsert) + ,(wxK_END , KeyEnd) + ,(wxK_HOME , KeyHome) + ,(wxK_LEFT , KeyLeft) + ,(wxK_UP , KeyUp) + ,(wxK_RIGHT , KeyRight) + ,(wxK_DOWN , KeyDown) + ,(wxK_PAGEUP , KeyPageUp) + ,(wxK_PAGEDOWN , KeyPageDown) + ,(wxK_START , KeyStart) + ,(wxK_CLEAR , KeyClear) + ,(wxK_SHIFT , KeyShift) + ,(wxK_ALT , KeyAlt) + ,(wxK_CONTROL , KeyControl) + ,(wxK_MENU , KeyMenu) + ,(wxK_PAUSE , KeyPause) + ,(wxK_CAPITAL , KeyCapital) + ,(wxK_HELP , KeyHelp) + ,(wxK_SELECT , KeySelect) + ,(wxK_PRINT , KeyPrint) + ,(wxK_EXECUTE , KeyExecute) + ,(wxK_SNAPSHOT , KeySnapshot) + ,(wxK_CANCEL , KeyCancel) + ,(wxK_LBUTTON , KeyLeftButton) + ,(wxK_RBUTTON , KeyRightButton) + ,(wxK_MBUTTON , KeyMiddleButton) + ,(wxK_NUMPAD0 , KeyNum0) + ,(wxK_NUMPAD1 , KeyNum1) + ,(wxK_NUMPAD2 , KeyNum2) + ,(wxK_NUMPAD3 , KeyNum3) + ,(wxK_NUMPAD4 , KeyNum4) + ,(wxK_NUMPAD5 , KeyNum5) + ,(wxK_NUMPAD6 , KeyNum6) + ,(wxK_NUMPAD7 , KeyNum7) + ,(wxK_NUMPAD8 , KeyNum8) + ,(wxK_NUMPAD9 , KeyNum9) + ,(wxK_MULTIPLY , KeyMultiply) + ,(wxK_ADD , KeyAdd) + ,(wxK_SEPARATOR , KeySeparator) + ,(wxK_SUBTRACT , KeySubtract) + ,(wxK_DECIMAL , KeyDecimal) + ,(wxK_DIVIDE , KeyDivide) + ,(wxK_F1 , KeyF1) + ,(wxK_F2 , KeyF2) + ,(wxK_F3 , KeyF3) + ,(wxK_F4 , KeyF4) + ,(wxK_F5 , KeyF5) + ,(wxK_F6 , KeyF6) + ,(wxK_F7 , KeyF7) + ,(wxK_F8 , KeyF8) + ,(wxK_F9 , KeyF9) + ,(wxK_F10 , KeyF10) + ,(wxK_F11 , KeyF11) + ,(wxK_F12 , KeyF12) + ,(wxK_F13 , KeyF13) + ,(wxK_F14 , KeyF14) + ,(wxK_F15 , KeyF15) + ,(wxK_F16 , KeyF16) + ,(wxK_F17 , KeyF17) + ,(wxK_F18 , KeyF18) + ,(wxK_F19 , KeyF19) + ,(wxK_F20 , KeyF20) + ,(wxK_F21 , KeyF21) + ,(wxK_F22 , KeyF22) + ,(wxK_F23 , KeyF23) + ,(wxK_F24 , KeyF24) + ,(wxK_NUMLOCK , KeyNumLock) + ,(wxK_SCROLL , KeyScroll) + -- translate with loss of information + ,(wxK_NUMPAD_SPACE , KeySpace) + ,(wxK_NUMPAD_TAB , KeyTab) + ,(wxK_NUMPAD_ENTER , KeyReturn) + ,(wxK_NUMPAD_F1 , KeyF1) + ,(wxK_NUMPAD_F2 , KeyF2) + ,(wxK_NUMPAD_F3 , KeyF3) + ,(wxK_NUMPAD_F4 , KeyF4) + ,(wxK_NUMPAD_HOME , KeyHome) + ,(wxK_NUMPAD_LEFT , KeyLeft) + ,(wxK_NUMPAD_UP , KeyUp) + ,(wxK_NUMPAD_RIGHT , KeyRight) + ,(wxK_NUMPAD_DOWN , KeyDown) + ,(wxK_NUMPAD_PAGEUP , KeyPageUp) + ,(wxK_NUMPAD_PAGEDOWN , KeyPageDown) + ,(wxK_NUMPAD_END , KeyEnd) +-- ,(wxK_NUMPAD_BEGIN , KeyBegin) + ,(wxK_NUMPAD_INSERT , KeyInsert) + ,(wxK_NUMPAD_DELETE , KeyDelete) +-- ,(wxK_NUMPAD_EQUAL , KeyEqual) + ,(wxK_NUMPAD_MULTIPLY , KeyMultiply) + ,(wxK_NUMPAD_ADD , KeyAdd) + ,(wxK_NUMPAD_SEPARATOR , KeySeparator) + ,(wxK_NUMPAD_SUBTRACT , KeySubtract) + ,(wxK_NUMPAD_DECIMAL , KeyDecimal) + ,(wxK_NUMPAD_DIVIDE , KeyDivide) + ] + + +instance Show Key where + show k = showKey k + +-- | Show a key\/modifiers combination, for example for use in menus. +showKeyModifiers :: Key -> Modifiers -> String +showKeyModifiers key mods + | null modsText = show key + | otherwise = modsText ++ "+" ++ show key + where + modsText = show mods + +-- | Show a key for use in menus for example. +showKey :: Key -> String +showKey key + = case key of + KeyChar c -> [c] + KeyOther code -> "[" ++ show code ++ "]" + KeyBack -> "Backspace" + KeyTab -> "Tab" + KeyReturn -> "Enter" + KeyEscape -> "Esc" + KeySpace -> "Space" + KeyDelete -> "Delete" + KeyInsert -> "Insert" + KeyEnd -> "End" + KeyHome -> "Home" + KeyLeft -> "Left" + KeyUp -> "Up" + KeyRight -> "Right" + KeyDown -> "Down" + KeyPageUp -> "PgUp" + KeyPageDown -> "PgDn" + KeyStart -> "Start" + KeyClear -> "Clear" + KeyShift -> "Shift" + KeyAlt -> "Alt" + KeyControl -> "Ctrl" + KeyMenu -> "Menu" + KeyPause -> "Pause" + KeyCapital -> "Capital" + KeyHelp -> "Help" + KeySelect -> "Select" + KeyPrint -> "Print" + KeyExecute -> "Execute" + KeySnapshot -> "Snapshot" + KeyCancel -> "Cancel" + KeyLeftButton -> "Left Button" + KeyRightButton -> "Right Button" + KeyMiddleButton -> "Middle Button" + KeyNum0 -> "Num 0" + KeyNum1 -> "Num 1" + KeyNum2 -> "Num 2" + KeyNum3 -> "Num 3" + KeyNum4 -> "Num 4" + KeyNum5 -> "Num 5" + KeyNum6 -> "Num 6" + KeyNum7 -> "Num 7" + KeyNum8 -> "Num 8" + KeyNum9 -> "Num 9" + KeyMultiply -> "Num *" + KeyAdd -> "Num +" + KeySeparator -> "Num Separator" + KeySubtract -> "Num -" + KeyDecimal -> "Num ." + KeyDivide -> "Num /" + KeyF1 -> "F1" + KeyF2 -> "F2" + KeyF3 -> "F3" + KeyF4 -> "F4" + KeyF5 -> "F5" + KeyF6 -> "F6" + KeyF7 -> "F7" + KeyF8 -> "F8" + KeyF9 -> "F9" + KeyF10 -> "F10" + KeyF11 -> "F11" + KeyF12 -> "F12" + KeyF13 -> "F13" + KeyF14 -> "F14" + KeyF15 -> "F15" + KeyF16 -> "F16" + KeyF17 -> "F17" + KeyF18 -> "F18" + KeyF19 -> "F19" + KeyF20 -> "F20" + KeyF21 -> "F21" + KeyF22 -> "F22" + KeyF23 -> "F23" + KeyF24 -> "F24" + KeyNumLock -> "Numlock" + KeyScroll -> "Scroll" + +{----------------------------------------------------------------------------------------- + Drag and Drop events +-----------------------------------------------------------------------------------------} +-- | Drag results +data DragResult + = DragError + | DragNone + | DragCopy + | DragMove + | DragLink + | DragCancel + | DragUnknown + deriving (Eq,Show) + +dragResults :: [(Int, DragResult)] +dragResults + = [(wxDRAG_ERROR ,DragError) + ,(wxDRAG_NONE ,DragNone) + ,(wxDRAG_COPY ,DragCopy) + ,(wxDRAG_MOVE ,DragMove) + ,(wxDRAG_LINK ,DragLink) + ,(wxDRAG_CANCEL ,DragCancel)] + +fromDragResult :: DragResult -> Int +fromDragResult drag + = case drag of + DragError -> wxDRAG_ERROR + DragNone -> wxDRAG_NONE + DragCopy -> wxDRAG_COPY + DragMove -> wxDRAG_MOVE + DragLink -> wxDRAG_LINK + DragCancel -> wxDRAG_CANCEL + DragUnknown -> wxDRAG_ERROR + +toDragResult :: Int -> DragResult +toDragResult drag + = case lookup drag dragResults of + Just x -> x + Nothing -> DragError + +-- | Set an event handler that is called when the drop target can be filled with data. +-- This function require to use 'dropTargetGetData' in your event handler to fill data. +dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO () +dropTargetOnData drop event = do + funPtr <- dragThreeFuncHandler event + wxcDropTargetSetOnData (objectCast drop) (toCFunPtr funPtr) + +-- | Set an event handler for an drop command in a drop target. +dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO () +dropTargetOnDrop drop event = do + funPtr <- dragTwoFuncHandler event + wxcDropTargetSetOnDrop (objectCast drop) (toCFunPtr funPtr) + +-- | Set an event handler for an enter command in a drop target. +dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO () +dropTargetOnEnter drop event = do + funPtr <- dragThreeFuncHandler event + wxcDropTargetSetOnEnter (objectCast drop) (toCFunPtr funPtr) + +-- | Set an event handler for a drag over command in a drop target. +dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO () +dropTargetOnDragOver drop event = do + funPtr <- dragThreeFuncHandler event + wxcDropTargetSetOnDragOver (objectCast drop) (toCFunPtr funPtr) + +-- | Set an event handler for a leave command in a drop target. +dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO () +dropTargetOnLeave drop event = do + funPtr <- dragZeroFuncHandler event + wxcDropTargetSetOnLeave (objectCast drop) (toCFunPtr funPtr) + +dragZeroFuncHandler event = + dragZeroFunc $ \obj -> do + event + +dragTwoFuncHandler event = + dragTwoFunc $ \obj x y -> do + result <- event (point (fromIntegral x) (fromIntegral y)) + return $ fromBool result + +dragThreeFuncHandler event = + dragThreeFunc $ \obj x y pre -> do + result <- event (point (fromIntegral x) (fromIntegral y)) (toDragResult $ fromIntegral pre) + return $ fromIntegral $ fromDragResult result + +-- | Set an event handler for a drag & drop command between drag source window and drop +-- target. You must set 'dropTarget' before use this action. +-- And If you use 'fileDropTarget' or 'textDropTarget', you need not use this. +dragAndDrop :: DropSource a -> DragMode -> (DragResult -> IO ()) -> IO () +dragAndDrop drSrc flag event = do + result <- dropSourceDoDragDrop drSrc (fromDragMode flag) + case lookup result dragResults of + Just x -> event x + Nothing -> return () + +-- | Set an event handler that is called when text is dropped in target window. +textDropTarget :: Window a -> TextDataObject b -> (Point -> String -> IO ()) -> IO () +textDropTarget window textData event = do + funPtr <- dropTextHandler event + textDrop <- wxcTextDropTargetCreate nullPtr (toCFunPtr funPtr) + dropTargetSetDataObject textDrop textData + windowSetDropTarget window textDrop + +dropTextHandler event = + wrapTextDropHandler $ \obj x y cstr -> do + str <- peekCWString cstr + event (point (fromIntegral x) (fromIntegral y)) str + +-- | Set an event handler that is called when files are dropped in target window. +fileDropTarget :: Window a -> (Point -> [String] -> IO ()) -> IO () +fileDropTarget window event = do + funPtr <- dropFileHandler event + fileDrop <- wxcFileDropTargetCreate nullPtr (toCFunPtr funPtr) + windowSetDropTarget window fileDrop + +dropFileHandler event = + wrapFileDropHandler $ \obj x y carr size -> do + arr <- peekArray (fromIntegral size) carr + files <- mapM peekCWString arr + event (point (fromIntegral x) (fromIntegral y)) files + +data DragMode = CopyOnly | AllowMove | Default + deriving (Eq,Show) + -- deriving (Eq,Show,Read,Typeable) + +fromDragMode :: DragMode -> Int +fromDragMode mode + = case mode of + CopyOnly -> wxDRAG_COPYONLY + AllowMove -> wxDRAG_ALLOWMOVE + Default -> wxDRAG_DEFALUTMOVE + +foreign import ccall "wrapper" dragZeroFunc :: (Ptr obj -> IO ()) -> IO (FunPtr (Ptr obj -> IO ())) +foreign import ccall "wrapper" dragTwoFunc :: (Ptr obj -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> IO CInt)) +foreign import ccall "wrapper" dragThreeFunc :: (Ptr obj -> CInt -> CInt -> CInt -> IO CInt) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> CInt -> IO CInt)) +foreign import ccall "wrapper" wrapTextDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr CWchar -> IO ())) +foreign import ccall "wrapper" wrapFileDropHandler :: (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ()) -> IO (FunPtr (Ptr obj -> CInt -> CInt -> Ptr (Ptr CWchar) -> CInt -> IO ())) + +{----------------------------------------------------------------------------------------- + Grid events +-----------------------------------------------------------------------------------------} +type Column = Int +type Row = Int + +-- | Grid events. +data EventGrid = GridCellMouse !Row !Column !EventMouse + | GridLabelMouse !Row !Column !EventMouse + | GridCellChange !Row !Column !(IO ()) + | GridCellSelect !Row !Column !(IO ()) + | GridCellDeSelect !Row !Column !(IO ()) + | GridEditorHidden !Row !Column !(IO ()) + | GridEditorShown !Row !Column !(IO ()) + | GridEditorCreated !Row !Column (IO (Control ())) + | GridColSize !Column !Point !Modifiers (IO ()) + | GridRowSize !Row !Point !Modifiers (IO ()) + | GridRangeSelect !Row !Column !Row !Column !Rect !Modifiers !(IO ()) + | GridRangeDeSelect !Row !Column !Row !Column !Rect !Modifiers !(IO ()) + | GridUnknown !Row !Column !Int + +fromGridEvent :: GridEvent a -> IO EventGrid +fromGridEvent gridEvent + = do tp <- eventGetEventType gridEvent + row <- gridEventGetRow gridEvent + col <- gridEventGetCol gridEvent + case lookup tp gridEvents of + Just make -> make gridEvent row col + Nothing -> return (GridUnknown row col tp) + +gridEvents :: [(Int, GridEvent a -> Int -> Int -> IO EventGrid)] +gridEvents + = [(wxEVT_GRID_CELL_LEFT_CLICK, gridMouse GridCellMouse MouseLeftDown) + ,(wxEVT_GRID_CELL_LEFT_DCLICK, gridMouse GridCellMouse MouseLeftDClick) + ,(wxEVT_GRID_CELL_RIGHT_CLICK, gridMouse GridCellMouse MouseRightDown) + ,(wxEVT_GRID_CELL_RIGHT_DCLICK, gridMouse GridCellMouse MouseRightDClick) + ,(wxEVT_GRID_LABEL_LEFT_CLICK, gridMouse GridLabelMouse MouseLeftDown) + ,(wxEVT_GRID_LABEL_LEFT_DCLICK, gridMouse GridLabelMouse MouseLeftDClick) + ,(wxEVT_GRID_LABEL_RIGHT_CLICK, gridMouse GridLabelMouse MouseRightDown) + ,(wxEVT_GRID_LABEL_RIGHT_DCLICK, gridMouse GridLabelMouse MouseRightDClick) + ,(wxEVT_GRID_SELECT_CELL, gridSelect) + ,(wxEVT_GRID_EDITOR_SHOWN, gridVeto GridEditorShown) + ,(wxEVT_GRID_EDITOR_HIDDEN, gridVeto GridEditorHidden) + ] + where + gridMouse make makeMouse gridEvent row col + = do pt <- gridEventGetPosition gridEvent + altDown <- gridEventAltDown gridEvent + controlDown <- gridEventControlDown gridEvent + shiftDown <- gridEventShiftDown gridEvent + metaDown <- gridEventMetaDown gridEvent + let modifiers = Modifiers altDown shiftDown controlDown metaDown + return (make row col (makeMouse pt modifiers)) + + gridVeto make gridEvent row col + = return (make row col (notifyEventVeto gridEvent)) + + gridSelect gridEvent row col + = do selecting <- gridEventSelecting gridEvent + if selecting + then return (GridCellSelect row col (notifyEventVeto gridEvent)) + else return (GridCellDeSelect row col (notifyEventVeto gridEvent)) + + + + +-- | Set a grid event handler. +gridOnGridEvent :: Grid a -> (EventGrid -> IO ()) -> IO () +gridOnGridEvent grid eventHandler + = windowOnEvent grid (map fst gridEvents) eventHandler gridHandler + where + gridHandler event + = do eventGrid <- fromGridEvent (objectCast event) + eventHandler eventGrid + +-- | Get the current grid event handler of a window. +gridGetOnGridEvent :: Grid a -> IO (EventGrid -> IO ()) +gridGetOnGridEvent grid + = unsafeWindowGetHandlerState grid wxEVT_GRID_CELL_CHANGED (\event -> skipCurrentEvent) + + +{----------------------------------------------------------------------------------------- + TreeCtrl events +-----------------------------------------------------------------------------------------} +-- | Tree control events +data EventTree = TreeBeginRDrag TreeItem !Point (IO ()) -- ^ Drag with right button. Call @IO@ action to continue dragging. + | TreeBeginDrag TreeItem !Point (IO ()) + | TreeEndDrag TreeItem !Point + | TreeBeginLabelEdit TreeItem String (IO ()) -- ^ Edit a label. Call @IO@ argument to disallow the edit. + | TreeEndLabelEdit TreeItem String Bool (IO ()) -- ^ End edit. @Bool@ is 'True' when the edit was cancelled. Call the @IO@ argument to veto the action. + | TreeDeleteItem TreeItem + | TreeItemActivated TreeItem + | TreeItemCollapsed TreeItem + | TreeItemCollapsing TreeItem (IO ()) -- ^ Call the @IO@ argument to veto. + | TreeItemExpanding TreeItem (IO ()) -- ^ Call the @IO@ argument to veto. + | TreeItemExpanded TreeItem + | TreeItemRightClick TreeItem + | TreeItemMiddleClick TreeItem + | TreeSelChanged TreeItem TreeItem + | TreeSelChanging TreeItem TreeItem (IO ()) -- ^ Call the @IO@ argument to veto. + | TreeKeyDown TreeItem EventKey + | TreeUnknown + +fromTreeEvent :: TreeEvent a -> IO EventTree +fromTreeEvent treeEvent + = do tp <- eventGetEventType treeEvent + item <- treeEventGetItem treeEvent + case lookup tp treeEvents of + Just make -> make treeEvent item + Nothing -> return TreeUnknown + +treeEvents :: [(Int,TreeEvent a -> TreeItem -> IO EventTree)] +treeEvents + = [(wxEVT_COMMAND_TREE_DELETE_ITEM, fromItemEvent TreeDeleteItem) + ,(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, fromItemEvent TreeItemActivated) + ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSED, fromItemEvent TreeItemCollapsed) + ,(wxEVT_COMMAND_TREE_ITEM_EXPANDED, fromItemEvent TreeItemExpanded) + ,(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, fromItemEvent TreeItemRightClick) + ,(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, fromItemEvent TreeItemMiddleClick) + ,(wxEVT_COMMAND_TREE_ITEM_COLLAPSING, withVeto (fromItemEvent TreeItemCollapsing)) + ,(wxEVT_COMMAND_TREE_ITEM_EXPANDING, withVeto (fromItemEvent TreeItemExpanding)) + ,(wxEVT_COMMAND_TREE_KEY_DOWN, fromKeyDownEvent ) + ,(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, fromBeginLabelEditEvent ) + ,(wxEVT_COMMAND_TREE_END_LABEL_EDIT, fromEndLabelEditEvent ) + ,(wxEVT_COMMAND_TREE_BEGIN_DRAG, withAllow (fromDragEvent TreeBeginDrag)) + ,(wxEVT_COMMAND_TREE_BEGIN_RDRAG, withAllow (fromDragEvent TreeBeginRDrag)) + ,(wxEVT_COMMAND_TREE_END_DRAG, fromDragEvent TreeEndDrag) + ,(wxEVT_COMMAND_TREE_SEL_CHANGED, fromChangeEvent TreeSelChanged) + ,(wxEVT_COMMAND_TREE_SEL_CHANGING, withVeto (fromChangeEvent TreeSelChanging)) + ] + where + fromKeyDownEvent treeEvent item + = do keyEvent <- treeEventGetKeyEvent treeEvent + eventKey <- eventKeyFromEvent keyEvent + return (TreeKeyDown item eventKey) + + fromBeginLabelEditEvent treeEvent item + = do lab <- treeEventGetLabel treeEvent + return (TreeBeginLabelEdit item lab (notifyEventVeto treeEvent)) + + fromEndLabelEditEvent treeEvent item + = do lab <- treeEventGetLabel treeEvent + can <- treeEventIsEditCancelled treeEvent + return (TreeEndLabelEdit item lab can (notifyEventVeto treeEvent)) + + fromDragEvent make treeEvent item + = do pt <- treeEventGetPoint treeEvent + return (make item pt) + + fromChangeEvent make treeEvent item + = do olditem <- treeEventGetOldItem treeEvent + return (make item olditem) + + withAllow make treeEvent item + = do f <- make treeEvent item + return (f (treeEventAllow treeEvent)) + + withVeto make treeEvent item + = do f <- make treeEvent item + return (f (notifyEventVeto treeEvent)) + + fromItemEvent make treeEvent item + = return (make item) + + + +-- | Set a tree event handler. +treeCtrlOnTreeEvent :: TreeCtrl a -> (EventTree -> IO ()) -> IO () +treeCtrlOnTreeEvent treeCtrl eventHandler + = windowOnEvent treeCtrl (map fst treeEvents) eventHandler treeHandler + where + treeHandler event + = do eventTree <- fromTreeEvent (objectCast event) + eventHandler eventTree + +-- | Get the current tree event handler of a window. +treeCtrlGetOnTreeEvent :: TreeCtrl a -> IO (EventTree -> IO ()) +treeCtrlGetOnTreeEvent treeCtrl + = unsafeWindowGetHandlerState treeCtrl wxEVT_COMMAND_TREE_ITEM_ACTIVATED (\event -> skipCurrentEvent) + + +{----------------------------------------------------------------------------------------- + ListCtrl events +-----------------------------------------------------------------------------------------} +-- | Type synonym for documentation purposes. +type ListIndex = Int + +-- | List control events. +data EventList = ListBeginDrag !ListIndex !Point (IO ()) -- ^ Drag with left mouse button. Call @IO@ argument to veto this action. + | ListBeginRDrag !ListIndex !Point (IO ()) -- ^ Drag with right mouse button. @IO@ argument to veto this action. + | ListBeginLabelEdit !ListIndex (IO ()) -- ^ Edit label. Call @IO@ argument to veto this action. + | ListEndLabelEdit !ListIndex !Bool (IO ()) -- ^ End editing label. @Bool@ argument is 'True' when cancelled. Call @IO@ argument to veto this action. + | ListDeleteItem !ListIndex + | ListDeleteAllItems + | ListItemSelected !ListIndex + | ListItemDeselected !ListIndex + | ListItemActivated !ListIndex -- ^ Activate (ENTER or double click) + | ListItemFocused !ListIndex + | ListItemMiddleClick !ListIndex + | ListItemRightClick !ListIndex + | ListInsertItem !ListIndex + | ListColClick !Int -- ^ Column has been clicked. (-1 when clicked in control header outside any column) + | ListColRightClick !Int + | ListColBeginDrag !Int (IO ()) -- ^ Column is dragged. Index is of the column left of the divider that is being dragged. Call @IO@ argument to veto this action. + | ListColDragging !Int + | ListColEndDrag !Int (IO ()) -- ^ Column has been dragged. Call @IO@ argument to veto this action. + | ListKeyDown !Key + | ListCacheHint !Int !Int -- ^ (Inclusive) range of list items that are advised to be cached. + | ListUnknown + + +fromListEvent :: ListEvent a -> IO EventList +fromListEvent listEvent + = do tp <- eventGetEventType listEvent + case lookup tp listEvents of + Just f -> f listEvent + Nothing -> return ListUnknown + +listEvents :: [(Int, ListEvent a -> IO EventList)] +listEvents + = [(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, withVeto $ withItem ListBeginLabelEdit) + ,(wxEVT_COMMAND_LIST_DELETE_ITEM, withItem ListDeleteItem) + ,(wxEVT_COMMAND_LIST_INSERT_ITEM, withItem ListInsertItem) + ,(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, withItem ListItemActivated) + ,(wxEVT_COMMAND_LIST_ITEM_DESELECTED, withItem ListItemDeselected) + ,(wxEVT_COMMAND_LIST_ITEM_FOCUSED, withItem ListItemFocused) + ,(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ,withItem ListItemMiddleClick) + ,(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, withItem ListItemRightClick) + ,(wxEVT_COMMAND_LIST_ITEM_SELECTED, withItem ListItemSelected) + ,(wxEVT_COMMAND_LIST_END_LABEL_EDIT, withVeto $ withCancel $ withItem ListEndLabelEdit ) + ,(wxEVT_COMMAND_LIST_BEGIN_RDRAG, withVeto $ withPoint $ withItem ListBeginRDrag) + ,(wxEVT_COMMAND_LIST_BEGIN_DRAG, withVeto $ withPoint $ withItem ListBeginDrag) + ,(wxEVT_COMMAND_LIST_COL_CLICK, withColumn ListColClick) + ,(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, withVeto $ withColumn ListColBeginDrag) + ,(wxEVT_COMMAND_LIST_COL_DRAGGING, withColumn ListColDragging) + ,(wxEVT_COMMAND_LIST_COL_END_DRAG, withVeto $ withColumn ListColEndDrag) + ,(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, withColumn ListColRightClick) + ,(wxEVT_COMMAND_LIST_CACHE_HINT, withCache ListCacheHint ) + ,(wxEVT_COMMAND_LIST_KEY_DOWN, withKeyCode ListKeyDown ) + ,(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, \event -> return ListDeleteAllItems ) + ] + where + withPoint make listEvent + = do f <- make listEvent + pt <- listEventGetPoint listEvent + return (f pt) + + withCancel make listEvent + = do f <- make listEvent + can <- listEventCancelled listEvent + return (f can) + + withVeto :: (ListEvent a -> IO (IO () -> EventList)) -> ListEvent a -> IO EventList + withVeto make listEvent + = do f <- make listEvent + return (f (notifyEventVeto listEvent)) + + withKeyCode make listEvent + = do code <- listEventGetCode listEvent + return (make (keyCodeToKey code)) + + withCache make listEvent + = do lo <- listEventGetCacheFrom listEvent + hi <- listEventGetCacheTo listEvent + return (make lo hi) + + withColumn make listEvent + = do col <- listEventGetColumn listEvent + return (make col) + + withItem :: (ListIndex -> b) -> ListEvent a -> IO b + withItem make listEvent + = do item <- listEventGetIndex listEvent + return (make item) + + + +-- | Set a list event handler. +listCtrlOnListEvent :: ListCtrl a -> (EventList -> IO ()) -> IO () +listCtrlOnListEvent listCtrl eventHandler + = windowOnEvent listCtrl (map fst listEvents) eventHandler listHandler + where + listHandler event + = do eventList <- fromListEvent (objectCast event) + eventHandler eventList + +-- | Get the current list event handler of a window. +listCtrlGetOnListEvent :: ListCtrl a -> IO (EventList -> IO ()) +listCtrlGetOnListEvent listCtrl + = unsafeWindowGetHandlerState listCtrl wxEVT_COMMAND_LIST_ITEM_ACTIVATED (\event -> skipCurrentEvent) + + +------------------------------------------------------------------------------------------ +-- TaskBarIcon Events +------------------------------------------------------------------------------------------ +data EventTaskBarIcon = TaskBarIconMove + | TaskBarIconLeftDown + | TaskBarIconLeftUp + | TaskBarIconRightDown + | TaskBarIconRightUp + | TaskBarIconLeftDClick + | TaskBarIconRightDClick + | TaskBarIconUnknown + deriving (Show, Eq) + +fromTaskBarIconEvent :: Event a -> IO EventTaskBarIcon +fromTaskBarIconEvent event + = do tp <- eventGetEventType event + case lookup tp taskBarIconEvents of + Just evt -> return evt + Nothing -> return TaskBarIconUnknown + +taskBarIconEvents :: [(Int,EventTaskBarIcon)] +taskBarIconEvents + = [(wxEVT_TASKBAR_MOVE, TaskBarIconMove) + ,(wxEVT_TASKBAR_LEFT_DOWN, TaskBarIconLeftDown) + ,(wxEVT_TASKBAR_LEFT_UP, TaskBarIconLeftUp) + ,(wxEVT_TASKBAR_RIGHT_DOWN, TaskBarIconRightDown) + ,(wxEVT_TASKBAR_RIGHT_UP, TaskBarIconRightUp) + ,(wxEVT_TASKBAR_LEFT_DCLICK, TaskBarIconLeftDClick) + ,(wxEVT_TASKBAR_RIGHT_DCLICK, TaskBarIconRightDClick) + ] + +-- | Set a taskbar icon event handler. +evtHandlerOnTaskBarIconEvent :: TaskBarIcon a -> (EventTaskBarIcon -> IO ()) -> IO () +evtHandlerOnTaskBarIconEvent taskbar eventHandler + = evtHandlerOnEvent taskbar idAny idAny (map fst taskBarIconEvents) eventHandler + -- finalize taskBarIcon's resource on Windows. + (\_ -> if wxToolkit == WxMSW + then (taskBarIconRemoveIcon taskbar + -- But taskBarIconDelete doesn't work well in this part. I don't know why. + -- >> taskBarIconDelete taskbar + >> return ()) + else (return ())) + scrollHandler + where + scrollHandler event + = do eventTaskBar <- fromTaskBarIconEvent event + eventHandler eventTaskBar + +-- | Get the current event handler for a taskbar icon. +evtHandlerGetOnTaskBarIconEvent :: EvtHandler a -> Id -> EventTaskBarIcon -> IO (IO ()) +evtHandlerGetOnTaskBarIconEvent window id evt + = unsafeGetHandlerState window id + (fromMaybe wxEVT_TASKBAR_MOVE + $ lookup evt $ uncurry (flip zip) . unzip $ taskBarIconEvents) + skipCurrentEvent + + +{----------------------------------------------------------------------------------------- + PropertyGrid events +-----------------------------------------------------------------------------------------} +-- | PropertyGrid control events. +data EventPropertyGrid + = PropertyGridHighlighted (Maybe (PGProperty ())) + | PropertyGridChanged (PGProperty ()) + | PropertyGridUnknown + +fromPropertyGridEvent :: PropertyGridEvent a -> IO EventPropertyGrid +fromPropertyGridEvent propertyGridEvent + = do tp <- eventGetEventType propertyGridEvent + case lookup tp propertyGridEvents of + Just f -> f propertyGridEvent + Nothing -> return PropertyGridUnknown + +propertyGridEvents :: [(Int, PropertyGridEvent a -> IO EventPropertyGrid)] +propertyGridEvents + = [(wxEVT_PG_HIGHLIGHTED, withPGProperty PropertyGridHighlighted), + (wxEVT_PG_CHANGED, withPGProperty (PropertyGridChanged . fromJust)) + ] + where + withPGProperty :: (Maybe((PGProperty ())) -> b) -> PropertyGridEvent a -> IO b + withPGProperty make propertyGridEvent = do + hasProp <- propertyGridEventHasProperty propertyGridEvent + if not hasProp then return (make Nothing) else do + prop <- propertyGridEventGetProperty propertyGridEvent + return (make (Just prop)) + +-- | Set a PropertyGrid event handler. +propertyGridOnPropertyGridEvent :: PropertyGrid a -> (EventPropertyGrid -> IO ()) -> IO () +propertyGridOnPropertyGridEvent propertyGrid eventHandler + = windowOnEvent propertyGrid (map fst propertyGridEvents) eventHandler listHandler + where + listHandler event + = do eventPropertyGrid <- fromPropertyGridEvent (objectCast event) + eventHandler eventPropertyGrid + +-- | Get the current PropertyGrid event handler of a window. +propertyGridGetOnPropertyGridEvent :: PropertyGrid a -> IO (EventPropertyGrid -> IO ()) +propertyGridGetOnPropertyGridEvent propertyGrid + -- I'm not sure what expEVT_PG_HIGHLIGHTED needs to be here for, just followed pattern with `listCtrlGetOnListEvent' + = unsafeWindowGetHandlerState propertyGrid wxEVT_PG_HIGHLIGHTED (\event -> skipCurrentEvent) + + + +------------------------------------------------------------------------------------------ +-- TimerEx is handled specially. +------------------------------------------------------------------------------------------ +-- | Create a new 'Timer' that is attached to a window. It is automatically deleted when +-- its owner is deleted (using 'windowAddOnDelete'). The owning window will receive +-- timer events ('windowOnTimer'). /Broken!/ (use 'windowTimerCreate'\/'timerOnCommand' instead.) +windowTimerAttach :: Window a -> IO (Timer ()) +windowTimerAttach w + = do t <- timerCreate w idAny + windowAddOnDelete w (timerDelete t) + return t + + +-- | Create a new 'TimerEx' timer. It is automatically deleted when its owner is deleted +-- (using 'windowAddOnDelete'). React to timer events using 'timerOnCommand'. +windowTimerCreate :: Window a -> IO (TimerEx ()) +windowTimerCreate w + = do t <- timerExCreate + windowAddOnDelete w (timerDelete t) + return t + +-- | Set an event handler that is called on a timer tick. This works for 'TimerEx' +-- objects. +timerOnCommand :: TimerEx a -> IO () -> IO () +timerOnCommand timer io + = do closure <- createClosure io (\ownerDeleted -> return ()) (\ev -> io) + timerExConnect timer closure + +-- | Get the current timer event handler. +timerGetOnCommand :: TimerEx a -> IO (IO ()) +timerGetOnCommand timer + = do closure <- timerExGetClosure timer + unsafeClosureGetState closure (return ()) + +{-------------------------------------------------------------------------- + The global idle timer + Currently only used by the process code but can potentially be used to + enable haskell threads to run in idle time +--------------------------------------------------------------------------} +{-# NOINLINE appIdleIntervals #-} +appIdleIntervals :: Var [Int] +appIdleIntervals + = unsafePerformIO (varCreate []) + +-- | @appRegisterIdle interval handler@ registers a global idle event +-- handler that is at least called every @interval@ milliseconds (and +-- possible more). Returns a method that can be used to unregister this +-- handler (so that it doesn't take any resources anymore). Multiple +-- calls to this method chains the different idle event handlers. +appRegisterIdle :: Int -> IO (IO ()) +appRegisterIdle interval + = do varUpdate appIdleIntervals (interval:) + appUpdateIdleInterval + return (appUnregisterIdle interval) + +-- Update the idle interval to the minimal one. +appUpdateIdleInterval + = do ivals <- varGet appIdleIntervals + let ival = if null ivals then 0 else minimum ivals -- zero is off. + appival <- wxcAppGetIdleInterval + if (ival < appival) + then wxcAppSetIdleInterval ival + else return () + +-- Unregister an idle handler +appUnregisterIdle :: Int -> IO () +appUnregisterIdle ival + = do varUpdate appIdleIntervals (remove ival) + appUpdateIdleInterval + where + remove ival [] = [] -- very wrong! + remove ival (i:is) | ival == i = is + | otherwise = i : remove ival is + + +{----------------------------------------------------------------------------------------- + Calender events +-----------------------------------------------------------------------------------------} +data EventCalendar + = CalendarDayChanged (DateTime ()) + | CalendarDoubleClicked (DateTime ()) + | CalendarMonthChanged (DateTime ()) + | CalendarSelectionChanged (DateTime ()) + | CalendarWeekdayClicked Int + | CalendarYearChanged (DateTime ()) + | CalendarUnknown + +fromCalendarEvent :: CalendarEvent a -> IO EventCalendar +fromCalendarEvent calEvent + = do tp <- eventGetEventType calEvent + case lookup tp calEvents of + Just f -> f calEvent + Nothing -> return CalendarUnknown + +calEvents :: [(Int, CalendarEvent a -> IO EventCalendar)] +calEvents + = [(wxEVT_CALENDAR_DAY_CHANGED ,withDate CalendarDayChanged) + ,(wxEVT_CALENDAR_DOUBLECLICKED ,withDate CalendarDoubleClicked) + ,(wxEVT_CALENDAR_MONTH_CHANGED ,withDate CalendarMonthChanged) + ,(wxEVT_CALENDAR_SEL_CHANGED ,withDate CalendarSelectionChanged) + ,(wxEVT_CALENDAR_WEEKDAY_CLICKED,withWeekday CalendarWeekdayClicked) + ,(wxEVT_CALENDAR_YEAR_CHANGED ,withDate CalendarYearChanged)] + where withDate event calEvent + = do date <- dateTimeCreate + withObjectPtr date $ calendarEventGetDate calEvent + return (event date) + withWeekday event calEvent + = fmap event $ calendarEventGetWeekDay calEvent + +-- | Set a calendar event handler. +calendarCtrlOnCalEvent :: CalendarCtrl a -> (EventCalendar -> IO ()) -> IO () +calendarCtrlOnCalEvent calCtrl eventHandler + = windowOnEvent calCtrl (map fst calEvents) eventHandler calHandler + where + calHandler event + = do eventCalendar <- fromCalendarEvent (objectCast event) + eventHandler eventCalendar + +-- | Get the current calendar event handler of a window. +calendarCtrlGetOnCalEvent :: CalendarCtrl a -> IO (EventCalendar -> IO ()) +calendarCtrlGetOnCalEvent calCtrl + = unsafeWindowGetHandlerState calCtrl wxEVT_CALENDAR_SEL_CHANGED (\event -> skipCurrentEvent) + + +------------------------------------------------------------------------------------------ +-- Application startup +------------------------------------------------------------------------------------------ +-- | Installs an init handler and starts the event loop. +-- Note: the closure is deleted when initialization is complete, and than the Haskell init function +-- is started. +appOnInit :: IO () -> IO () +appOnInit init + = do closure <- createClosure (return () :: IO ()) onDelete (\ev -> return ()) -- run init on destroy ! + progName <- getProgName + args <- getArgs + argv <- mapM newCWString (progName:args) + let argc = length argv + withArray (argv ++ [nullPtr]) $ \cargv -> wxcAppInitializeC closure argc cargv + mapM_ free argv + where + onDelete ownerDeleted + = init + + + +------------------------------------------------------------------------------------------ +-- Attaching Haskell data to arbitrary objects. +------------------------------------------------------------------------------------------ +-- | Use attached Haskell data locally. This makes it type-safe. +objectWithClientData :: WxObject a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c +objectWithClientData object initx fun + = do let setter x = objectSetClientData object (return ()) x + getter = do mb <- unsafeObjectGetClientData object + case mb of + Nothing -> return initx + Just x -> return x + setter initx + fun setter getter + +-- | Attach Haskell value to an arbitrary object. The 'IO' action is executed +-- when the object is deleted. Note: 'evtHandlerSetClientData' is preferred when possible. +objectSetClientData :: WxObject a -> IO () -> b -> IO () +objectSetClientData object onDelete x + = do closure <- createClosure x (const onDelete) (const (return ())) + objectSetClientClosure object closure + return () + +-- | Retrieve an attached Haskell value. +unsafeObjectGetClientData :: WxObject a -> IO (Maybe b) +unsafeObjectGetClientData object + = do closure <- objectGetClientClosure object + unsafeClosureGetData closure + +-- | Use attached Haskell data locally in a type-safe way. +evtHandlerWithClientData :: EvtHandler a -> b -> ((b -> IO ()) -> IO b -> IO c) -> IO c +evtHandlerWithClientData evtHandler initx fun + = do let setter x = evtHandlerSetClientData evtHandler (return ()) x + getter = do mb <- unsafeEvtHandlerGetClientData evtHandler + case mb of + Nothing -> return initx + Just x -> return x + setter initx + fun setter getter + +-- | Attach a Haskell value to an object derived from 'EvtHandler'. The 'IO' action +-- executed when the object is deleted. +evtHandlerSetClientData :: EvtHandler a -> IO () -> b -> IO () +evtHandlerSetClientData evtHandler onDelete x + = do closure <- createClosure x (const onDelete) (const (return ())) + evtHandlerSetClientClosure evtHandler closure + return () + +-- | Retrieve an attached Haskell value, previously attached with 'evtHandlerSetClientData'. +unsafeEvtHandlerGetClientData :: EvtHandler a -> IO (Maybe b) +unsafeEvtHandlerGetClientData evtHandler + = do closure <- evtHandlerGetClientClosure evtHandler + unsafeClosureGetData closure + + + +-- | Attach a Haskell value to tree item data. The 'IO' action +-- executed when the object is deleted. +treeCtrlSetItemClientData :: TreeCtrl a -> TreeItem -> IO () -> b -> IO () +treeCtrlSetItemClientData treeCtrl item onDelete x + = do closure <- createClosure x (const onDelete) (const (return ())) + treeCtrlSetItemClientClosure treeCtrl item closure + return () + +-- | Retrieve an attached Haskell value to a tree item, previously attached with 'treeCtrlSetItemClientData'. +unsafeTreeCtrlGetItemClientData :: TreeCtrl a -> TreeItem -> IO (Maybe b) +unsafeTreeCtrlGetItemClientData treeCtrl item + = do closure <- treeCtrlGetItemClientClosure treeCtrl item + unsafeClosureGetData closure + + +------------------------------------------------------------------------------------------ +-- Generic window connection +------------------------------------------------------------------------------------------ +-- | Set a generic event handler on a certain window. +windowOnEvent :: Window a -> [EventId] -> handler -> (Event () -> IO ()) -> IO () +windowOnEvent window eventIds state eventHandler + = windowOnEventEx window eventIds state (\ownerDelete -> return ()) eventHandler + +-- | Set a generic event handler on a certain window. Takes also a computation +-- that is run when the event handler is destroyed -- the argument is 'True' if the +-- owner is deleted, and 'False' if the event handler is disconnected for example. +windowOnEventEx :: Window a -> [EventId] -> handler -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO () +windowOnEventEx window eventIds state destroy eventHandler + = do let id = idAny -- id <- windowGetId window + evtHandlerOnEvent window id id eventIds state destroy eventHandler + +-- | Retrieve the event handler state for a certain event on a window. +unsafeWindowGetHandlerState :: Window a -> EventId -> b -> IO b +unsafeWindowGetHandlerState window eventId def + = do id <- windowGetId window + unsafeGetHandlerState window id eventId def + +------------------------------------------------------------------------------------------ +-- The current event +------------------------------------------------------------------------------------------ +{-# NOINLINE currentEvent #-} +currentEvent :: MVar (Event ()) +currentEvent + = unsafePerformIO (newMVar objectNull) + +-- | Get the current event handler (can be 'objectNull'). +getCurrentEvent :: IO (Event ()) +getCurrentEvent + = readMVar currentEvent + +-- | Do something with the current event /if/ we are calling from an event handler. +withCurrentEvent :: (Event () -> IO ()) -> IO () +withCurrentEvent f + = do ev <- getCurrentEvent + if (ev /= objectNull) + then f ev + else return () + +-- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent. +-- Always call this method when you do not process the event. /Note:/ The use of +-- 'propagateEvent' is encouraged as it is a much better name than 'skipCurrentEvent'. This +-- function name is just for better compatibility with wxWidgets :-) +skipCurrentEvent :: IO () +skipCurrentEvent + = withCurrentEvent (\event -> eventSkip event) + +-- | Pass the event on the next /wxWidgets/ event handler, either on this window or its parent. +-- Always call this method when you do not process the event. (This function just call 'skipCurrentEvent'). +propagateEvent :: IO () +propagateEvent + = skipCurrentEvent + + +------------------------------------------------------------------------------------------ +-- Generic event connection +------------------------------------------------------------------------------------------ +-- | Retrievs the state associated with a certain event handler. If +-- no event handler is defined for this kind of event or 'Id', the +-- default value is returned. +unsafeGetHandlerState :: EvtHandler a -> Id -> EventId -> b -> IO b +unsafeGetHandlerState object id eventId def + = do closure <- evtHandlerGetClosure object id eventId + unsafeClosureGetState closure def + +-- | Type synonym to make the type signatures shorter for the documentation :-) +type OnEvent = (Bool -> IO ()) -> (Event () -> IO ()) -> IO () + +-- | Sets a generic event handler, just as 'evtHandlerOnEventConnect' but first +-- disconnects any event handlers for the same kind of events. +evtHandlerOnEvent :: EvtHandler a -> Id -> Id -> [EventId] -> handler -> OnEvent +evtHandlerOnEvent object firstId lastId eventIds state destroy eventHandler + = do evtHandlerOnEventDisconnect object firstId lastId eventIds + evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler + + +-- Hack: using a global variable to determine whether we are disconnecting an event +-- or not. This is used as a parameter to the 'destroy' procedure of an event. This +-- enables us to re-install a 'windowOnDelete' handler for example without executing +-- the deletion code. +{-# NOINLINE disconnecting #-} +disconnecting :: Var Bool +disconnecting + = unsafePerformIO (varCreate False) + +-- | Disconnect a certain event handler. +evtHandlerOnEventDisconnect :: EvtHandler a -> Id -> Id -> [EventId] -> IO () +evtHandlerOnEventDisconnect object firstId lastId eventIds + = do prev <- varSwap disconnecting True + mapM_ disconnectEventId eventIds + varSet disconnecting prev + where + disconnectEventId eventId + = evtHandlerDisconnect object firstId lastId eventId 0 {- actually: void* -} + +-- | Sets a generic event handler on an 'EvtHandler' object. The call +-- (@evtHandlerOnEventConnect firstId lastId eventIds state destroy handler object@) sets an event +-- handler @handler@ on @object@. The eventhandler gets called whenever an event +-- happens that is in the list @eventIds@ on an object with an 'Id' between @firstId@ +-- and @lastId@ (use -1 for any object). The @state@ is any kind of Haskell data +-- that is attached to this handler. It can be retrieved via 'unsafeGetHandlerState'. +-- Normally, the @state@ is the event handler itself. This allows the current event +-- handler to be retrieved via calls to 'buttonGetOnCommand' for example. The @destroy@ +-- action is called when the event handler is destroyed. Its argument is 'True' when the +-- owner is deleted, and 'False' if the event handler is just disconnected. +evtHandlerOnEventConnect :: EvtHandler a -> Id -> Id -> [EventId] -> state -> OnEvent +evtHandlerOnEventConnect object firstId lastId eventIds state destroy eventHandler + = do closure <- createClosure state destroy eventHandler + withObjectPtr closure $ \pclosure -> + mapM_ (connectEventId pclosure) eventIds + where + connectEventId pclosure eventId + = evtHandlerConnect object firstId lastId eventId pclosure + + + +-- Use a data wrapper for the closure state: seem to circumvent bugs when wrapping +-- things like Int or overloaded stuff. +data Wrap a = Wrap a + + +unsafeClosureGetState :: Closure () -> a -> IO a +unsafeClosureGetState closure def + = do mb <- unsafeClosureGetData closure + case mb of + Nothing -> return def + Just x -> return x + +unsafeClosureGetData :: Closure () -> IO (Maybe a) +unsafeClosureGetData closure + = if (objectIsNull closure) + then return Nothing + else do ptr <- closureGetData closure + if (ptrIsNull ptr) + then return Nothing + else do (Wrap x) <- deRefStablePtr (castPtrToStablePtr ptr) + return (Just x) + + +-- | Create a closure with a certain Haskell state, a function that is called +-- when the closure is destroyed, and a function that is called when an event +-- happens. The destroy function takes a boolean that is 'True' when the parent +-- is deleted (and 'False' when the closure is just disconnected). The event +-- handlers gets the 'Event' as its argument. +createClosure :: state -> (Bool -> IO ()) -> (Event () -> IO ()) -> IO (Closure ()) +createClosure st destroy handler + = do funptr <- wrapEventHandler eventHandlerWrapper + stptr <- newStablePtr (Wrap st) + closureCreate funptr (castStablePtrToPtr stptr) + where + eventHandlerWrapper :: Ptr fun -> Ptr () -> Ptr (TEvent ()) -> IO () + eventHandlerWrapper funptr stptr eventptr + = do let event = objectFromPtr eventptr + prev <- swapMVar currentEvent event + if (objectIsNull event) + then do isDisconnecting <- varGet disconnecting + destroy (not isDisconnecting) + when (stptr/=ptrNull) + (freeStablePtr (castPtrToStablePtr stptr)) + when (funptr/=ptrNull) + (freeHaskellFunPtr (castPtrToFunPtr funptr)) + else handler event + swapMVar currentEvent prev + return () + + + +foreign import ccall "wrapper" wrapEventHandler :: (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()) -> IO (FunPtr (Ptr fun -> Ptr st -> Ptr (TEvent ()) -> IO ()))
src/haskell/Graphics/UI/WXCore/Frame.hs view
@@ -1,150 +1,150 @@-------------------------------------------------------------------------------------------{-| Module : Frame- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Frame utility functions.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Frame- ( -- * Frame- frameCreateTopFrame- , frameCreateDefault- , frameSetTopFrame- , frameDefaultStyle- , frameCenter- , frameCenterHorizontal- , frameCenterVertical- -- * Window- , windowGetRootParent- , windowGetFrameParent- , windowGetMousePosition- , windowGetScreenPosition- , windowChildren- -- * Dialog- , dialogDefaultStyle- -- * Status bar- , statusBarCreateFields- ) where--import Data.Bits-import Foreign.Marshal.Array-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassTypes-import Graphics.UI.WXCore.Types----- | The default frame style for a normal top-level 'Frame'.-frameDefaultStyle :: Int-frameDefaultStyle- = wxDEFAULT_FRAME_STYLE .|. wxCLIP_CHILDREN -- .|. wxNO_FULL_REPAINT_ON_RESIZE ---- | The default frame style for a normal 'Dialog'.-dialogDefaultStyle :: Int-dialogDefaultStyle- = wxCAPTION .|. wxSYSTEM_MENU .|. wxTAB_TRAVERSAL .|. wxCLOSE_BOX .|. wxCLIP_CHILDREN - -- .|. wxNO_FULL_REPAINT_ON_RESIZE --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Create a default frame and make it the top-level window.-frameCreateTopFrame :: String -> IO (Frame ())-frameCreateTopFrame title- = do frame <- frameCreateDefault title- frameSetTopFrame frame- return frame---- | Set the top-level frame (calls 'cAppSetTopWindow').-frameSetTopFrame :: Frame a -> IO ()-frameSetTopFrame frame- = wxcAppSetTopWindow frame---- | Create a frame with default settings.-frameCreateDefault :: String -> IO (Frame ())-frameCreateDefault title- = frameCreate objectNull idAny title rectNull frameDefaultStyle----- | Center the frame on the screen.-frameCenter :: Frame a -> IO ()-frameCenter f - = frameCentre f wxBOTH---- | Center the frame horizontally on the screen.-frameCenterHorizontal :: Frame a -> IO ()-frameCenterHorizontal f- = frameCentre f wxHORIZONTAL---- | Center the frame vertically on the screen.-frameCenterVertical :: Frame a -> IO ()-frameCenterVertical f- = frameCentre f wxVERTICAL----------------------------------------------------------------------------------------------- Window---------------------------------------------------------------------------------------------- | The parent frame or dialog of a widget.-windowGetFrameParent :: Window a -> IO (Window ())-windowGetFrameParent w- = if (instanceOf w classFrame || instanceOf w classDialog)- then return (downcastWindow w)- else do p <- windowGetParent w- if (objectIsNull p)- then return (downcastWindow w)- else windowGetFrameParent p----- | The ultimate root parent of the widget.-windowGetRootParent :: Window a -> IO (Window ())-windowGetRootParent w- = do p <- windowGetParent w- if (objectIsNull p)- then return (downcastWindow w)- else windowGetRootParent p- ----- | Retrieve the current mouse position relative to the window position.-windowGetMousePosition :: Window a -> IO Point-windowGetMousePosition w- = do p <- wxcGetMousePosition- windowScreenToClient2 w p- --- | Get the window position relative to the origin of the display.-windowGetScreenPosition :: Window a -> IO Point-windowGetScreenPosition w- = windowClientToScreen w pointZero----- | Get the children of a window-windowChildren :: Window a -> IO [Window ()]-windowChildren w- = do count <- windowGetChildren w ptrNull 0- if count <= 0- then return []- else withArray (replicate count ptrNull) $ \ptrs ->- do windowGetChildren w ptrs count- ps <- peekArray count ptrs- return (map objectFromPtr ps)----------------------------------------------------------------------------------------------- Statusbar--------------------------------------------------------------------------------------------statusBarCreateFields :: Frame a -> [Int] -> IO (StatusBar ())-statusBarCreateFields parent widths- = do pst <- windowGetWindowStyleFlag parent- let st = if (bitsSet wxRESIZE_BORDER pst) then wxST_SIZEGRIP else 0- sb <- frameCreateStatusBar parent (length widths) st- let len = length widths- if (len <= 1)- then return sb- else do withArray (map toCInt widths) (\pwidths -> statusBarSetStatusWidths sb (length widths) pwidths)+----------------------------------------------------------------------------------------- +{-| Module : Frame + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Frame utility functions. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Frame + ( -- * Frame + frameCreateTopFrame + , frameCreateDefault + , frameSetTopFrame + , frameDefaultStyle + , frameCenter + , frameCenterHorizontal + , frameCenterVertical + -- * Window + , windowGetRootParent + , windowGetFrameParent + , windowGetMousePosition + , windowGetScreenPosition + , windowChildren + -- * Dialog + , dialogDefaultStyle + -- * Status bar + , statusBarCreateFields + ) where + +import Data.Bits +import Foreign.Marshal.Array +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClassInfo +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassTypes +import Graphics.UI.WXCore.Types + + +-- | The default frame style for a normal top-level 'Frame'. +frameDefaultStyle :: Int +frameDefaultStyle + = wxDEFAULT_FRAME_STYLE .|. wxCLIP_CHILDREN -- .|. wxNO_FULL_REPAINT_ON_RESIZE + +-- | The default frame style for a normal 'Dialog'. +dialogDefaultStyle :: Int +dialogDefaultStyle + = wxCAPTION .|. wxSYSTEM_MENU .|. wxTAB_TRAVERSAL .|. wxCLOSE_BOX .|. wxCLIP_CHILDREN + -- .|. wxNO_FULL_REPAINT_ON_RESIZE + +------------------------------------------------------------------------------------------ +-- +------------------------------------------------------------------------------------------ +-- | Create a default frame and make it the top-level window. +frameCreateTopFrame :: String -> IO (Frame ()) +frameCreateTopFrame title + = do frame <- frameCreateDefault title + frameSetTopFrame frame + return frame + +-- | Set the top-level frame (calls 'cAppSetTopWindow'). +frameSetTopFrame :: Frame a -> IO () +frameSetTopFrame frame + = wxcAppSetTopWindow frame + +-- | Create a frame with default settings. +frameCreateDefault :: String -> IO (Frame ()) +frameCreateDefault title + = frameCreate objectNull idAny title rectNull frameDefaultStyle + + +-- | Center the frame on the screen. +frameCenter :: Frame a -> IO () +frameCenter f + = frameCentre f wxBOTH + +-- | Center the frame horizontally on the screen. +frameCenterHorizontal :: Frame a -> IO () +frameCenterHorizontal f + = frameCentre f wxHORIZONTAL + +-- | Center the frame vertically on the screen. +frameCenterVertical :: Frame a -> IO () +frameCenterVertical f + = frameCentre f wxVERTICAL + +------------------------------------------------------------------------------------------ +-- Window +------------------------------------------------------------------------------------------ +-- | The parent frame or dialog of a widget. +windowGetFrameParent :: Window a -> IO (Window ()) +windowGetFrameParent w + = if (instanceOf w classFrame || instanceOf w classDialog) + then return (downcastWindow w) + else do p <- windowGetParent w + if (objectIsNull p) + then return (downcastWindow w) + else windowGetFrameParent p + + +-- | The ultimate root parent of the widget. +windowGetRootParent :: Window a -> IO (Window ()) +windowGetRootParent w + = do p <- windowGetParent w + if (objectIsNull p) + then return (downcastWindow w) + else windowGetRootParent p + + + +-- | Retrieve the current mouse position relative to the window position. +windowGetMousePosition :: Window a -> IO Point +windowGetMousePosition w + = do p <- wxcGetMousePosition + windowScreenToClient2 w p + +-- | Get the window position relative to the origin of the display. +windowGetScreenPosition :: Window a -> IO Point +windowGetScreenPosition w + = windowClientToScreen w pointZero + + +-- | Get the children of a window +windowChildren :: Window a -> IO [Window ()] +windowChildren w + = do count <- windowGetChildren w ptrNull 0 + if count <= 0 + then return [] + else withArray (replicate count ptrNull) $ \ptrs -> + do windowGetChildren w ptrs count + ps <- peekArray count ptrs + return (map objectFromPtr ps) + +------------------------------------------------------------------------------------------ +-- Statusbar +------------------------------------------------------------------------------------------ +statusBarCreateFields :: Frame a -> [Int] -> IO (StatusBar ()) +statusBarCreateFields parent widths + = do pst <- windowGetWindowStyleFlag parent + let st = if (bitsSet wxRESIZE_BORDER pst) then wxST_SIZEGRIP else 0 + sb <- frameCreateStatusBar parent (length widths) st + let len = length widths + if (len <= 1) + then return sb + else do withArray (map toCInt widths) (\pwidths -> statusBarSetStatusWidths sb (length widths) pwidths) return sb
src/haskell/Graphics/UI/WXCore/GHCiSupport.hs view
@@ -13,7 +13,7 @@ foreign import ccall "GetCurrentProcess" getCurrentProcess :: Ptr ProcessSerialNumber -> IO Int16 foreign import ccall "_CGSDefaultConnection" cgsDefaultConnection :: IO () foreign import ccall "CPSEnableForegroundOperation" cpsEnableForegroundOperation :: Ptr ProcessSerialNumber -> IO () -foreign import ccall "CPSSignalAppReady" cpsSignalAppReady :: Ptr ProcessSerialNumber -> IO () +-- foreign import ccall "CPSSignalAppReady" cpsSignalAppReady :: Ptr ProcessSerialNumber -> IO () foreign import ccall "CPSSetFrontProcess" cpsSetFrontProcess :: Ptr ProcessSerialNumber -> IO () enableGUI :: IO () @@ -21,7 +21,7 @@ getCurrentProcess psn cgsDefaultConnection cpsEnableForegroundOperation psn - cpsSignalAppReady psn + -- cpsSignalAppReady psn cpsSetFrontProcess psn #else @@ -29,4 +29,4 @@ enableGUI :: IO () enableGUI = return () -#endif+#endif
src/haskell/Graphics/UI/WXCore/Image.hs view
@@ -1,355 +1,355 @@-{-# LANGUAGE FlexibleContexts #-}----------------------------------------------------------------------------------{-| Module : Image- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--}----------------------------------------------------------------------------------module Graphics.UI.WXCore.Image- ( -- * Images- topLevelWindowSetIconFromFile- -- ** Imagelist- , imageListAddIconsFromFiles- , imageListAddIconFromFile- -- ** Icons- , withIconFromFile- , iconCreateFromFile- , iconGetSize- -- ** Cursors- , withCursorFromFile- , cursorCreateFromFile- -- ** Bitmaps- , withBitmapFromFile- , bitmapCreateFromFile- , bitmapGetSize- , bitmapSetSize- -- ** Helpers- , imageTypeFromExtension- , imageTypeFromFileName-- -- * Direct image manipulation- , imageGetPixels- , imageCreateFromPixels- , imageGetPixelArray- , imageCreateFromPixelArray- , imageGetSize- , withImageData-- -- ** Pixel buffer- , imageCreateFromPixelBuffer- , imageGetPixelBuffer- , withPixelBuffer- , PixelBuffer- , pixelBufferCreate- , pixelBufferDelete- , pixelBufferInit- , pixelBufferSetPixel- , pixelBufferGetPixel - , pixelBufferSetPixels- , pixelBufferGetPixels - , pixelBufferGetSize- ) where--import Data.Char( toLower )-import Data.Array.IArray ( IArray, listArray, bounds, elems )-import Foreign.Marshal.Array-import Foreign.C.String-import Foreign.Storable--import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Defines---{------------------------------------------------------------------------------------------ ImageList------------------------------------------------------------------------------------------}--- | Initialize an image list with icons from files. Use a 'sizeNull' to--- use the native size of the loaded icons.-imageListAddIconsFromFiles :: ImageList a -> Size -> [FilePath] -> IO ()-imageListAddIconsFromFiles images desiredSize fnames- = mapM_ (imageListAddIconFromFile images desiredSize) fnames---- | Add an icon from a file to an imagelist.-imageListAddIconFromFile :: ImageList a -> Size -> FilePath -> IO ()-imageListAddIconFromFile images desiredSize fname- = do image <- imageCreateFromFile fname- imageRescale image desiredSize- bitmap <- imageConvertToBitmap image- imageListAddBitmap images bitmap nullBitmap- bitmapDelete bitmap- imageDelete image- return ()--{------------------------------------------------------------------------------------------ Icons------------------------------------------------------------------------------------------}---- | Set the icon of a frame.-topLevelWindowSetIconFromFile :: TopLevelWindow a -> FilePath -> IO ()-topLevelWindowSetIconFromFile f fname- = withIconFromFile fname sizeNull (topLevelWindowSetIcon f)----- | Load an icon (see 'iconCreateFromFile') and automatically delete it--- after use.-withIconFromFile :: FilePath -> Size -> (Icon () -> IO a) -> IO a-withIconFromFile fname size f- = bracket (iconCreateFromFile fname size)- (iconDelete)- f---- | Load an icon from an icon file (ico,xbm,xpm,gif). The 'Size' argument--- gives the desired size but can be 'sizeNull' to retrieve the image--- in its natural size. -iconCreateFromFile :: FilePath -> Size -> IO (Icon ())-iconCreateFromFile fname size- = iconCreateLoad fname (imageTypeFromFileName fname) size- {-- do icon <- iconCreateLoad fname (imageTypeFromFileName fname) size- ok <- iconOk icon- if (ok)- then return icon- else do iconDelete icon- ioError (userError ("unable to load icon: " ++ show fname))- -}---- | Get the size of an icon.-iconGetSize :: Icon a -> IO Size-iconGetSize icon- = do w <- iconGetWidth icon- h <- iconGetHeight icon- return (sz w h)--{------------------------------------------------------------------------------------------ Cursors------------------------------------------------------------------------------------------}--- | Load an cursor (see 'cursorCreateFromFile') and automatically delete it--- after use.-withCursorFromFile :: FilePath -> (Cursor () -> IO a) -> IO a-withCursorFromFile fname f- = bracket (cursorCreateFromFile fname)- (cursorDelete)- f---- | Load an cursor from an icon file (ico,xbm,xpm,gif).--- For a reason, this function is incomatible with 'iconCreateFromFile'.-cursorCreateFromFile :: String -> IO (Cursor ())-cursorCreateFromFile fname = imageCreateFromFile fname >>= cursorCreateFromImage--{------------------------------------------------------------------------------------------ Bitmaps------------------------------------------------------------------------------------------}---- | Load a bitmap (see 'bitmapCreateFromFile') and automatically delete it--- after use.-withBitmapFromFile :: FilePath -> (Bitmap () -> IO a) -> IO a-withBitmapFromFile fname f- = bracket (bitmapCreateFromFile fname)- (bitmapDelete)- f---- | Load a bitmap from an image file (gif, jpg, png, etc.) -bitmapCreateFromFile :: FilePath -> IO (Bitmap ())-bitmapCreateFromFile fname- = bitmapCreateLoad fname (imageTypeFromFileName fname)- {-- do bm <- bitmapCreateLoad fname (imageTypeFromFileName fname)- ok <- bitmapOk bm- if (ok)- then return bm- else do bitmapDelete bm- ioError (userError ("unable to load image: " ++ show fname))- -}---- | The size of a bitmap.-bitmapGetSize :: Bitmap a -> IO Size-bitmapGetSize bitmap- = do w <- bitmapGetWidth bitmap- h <- bitmapGetHeight bitmap- return (sz w h)---- | Set the size of a bitmap.-bitmapSetSize :: Bitmap a -> Size -> IO ()-bitmapSetSize bitmap (Size w h)- = do bitmapSetWidth bitmap w- bitmapSetHeight bitmap h---{------------------------------------------------------------------------------------------ Images------------------------------------------------------------------------------------------}---- | Get an image type from a file name.-imageTypeFromFileName :: String -> BitFlag-imageTypeFromFileName fname- = imageTypeFromExtension (map toLower (reverse (takeWhile (/= '.') (reverse fname))))---- | Get an image type from a file extension.-imageTypeFromExtension :: String -> BitFlag-imageTypeFromExtension ext- = case ext of- "jpg" -> wxBITMAP_TYPE_JPEG- "jpeg" -> wxBITMAP_TYPE_JPEG- "gif" -> wxBITMAP_TYPE_GIF- "bmp" -> wxBITMAP_TYPE_BMP- "png" -> wxBITMAP_TYPE_PNG- "xpm" -> wxBITMAP_TYPE_XPM- "xbm" -> wxBITMAP_TYPE_XBM- "pcx" -> wxBITMAP_TYPE_PCX- "ico" -> wxBITMAP_TYPE_ICO- "tif" -> wxBITMAP_TYPE_TIF- "tiff" -> wxBITMAP_TYPE_TIF- "pnm" -> wxBITMAP_TYPE_PNM- "pict" -> wxBITMAP_TYPE_PICT- "icon" -> wxBITMAP_TYPE_ICON- other -> wxBITMAP_TYPE_ANY--{------------------------------------------------------------------------------------------ Direct image manipulation------------------------------------------------------------------------------------------}--- | An abstract pixel buffer (= array of RGB values)-data PixelBuffer = PixelBuffer Bool Size (Ptr Word8)---- | Create a pixel buffer. (To be deleted with 'pixelBufferDelete').-pixelBufferCreate :: Size -> IO PixelBuffer-pixelBufferCreate size- = do buffer <- wxcMalloc (sizeW size * sizeH size * 3)- return (PixelBuffer True size (ptrCast buffer))---- | Delete a pixel buffer. -pixelBufferDelete :: PixelBuffer -> IO ()-pixelBufferDelete (PixelBuffer owned size buffer)- = when (owned && not (ptrIsNull buffer)) (wxcFree buffer)---- | The size of a pixel buffer-pixelBufferGetSize :: PixelBuffer -> Size-pixelBufferGetSize (PixelBuffer owned size buffer)- = size---- | Get all the pixels of a pixel buffer as a single list.-pixelBufferGetPixels :: PixelBuffer -> IO [Color]-pixelBufferGetPixels (PixelBuffer owned (Size w h) buffer)- = do let count = w*h- rgbs <- peekArray (3*count) buffer- return (convert rgbs)- where- convert :: [Word8] -> [Color]- convert (r:g:b:xs) = colorRGB r g b : convert xs- convert [] = []---- | Set all the pixels of a pixel buffer.-pixelBufferSetPixels :: PixelBuffer -> [Color] -> IO ()-pixelBufferSetPixels (PixelBuffer owned (Size w h) buffer) colors- = do let count = w*h- pokeArray buffer (convert (take count colors))- where- convert :: [Color] -> [Word8]- convert (c:cs) = colorRed c : colorGreen c : colorBlue c : convert cs- convert [] = []---- | Initialize the pixel buffer with a grey color. The second argument--- specifies the /greyness/ as a number between 0.0 (black) and 1.0 (white).-pixelBufferInit :: PixelBuffer -> Color -> IO ()-pixelBufferInit (PixelBuffer owned size buffer) color- = wxcInitPixelsRGB buffer size (intFromColor color)---- | Set the color of a pixel.-pixelBufferSetPixel :: PixelBuffer -> Point -> Color -> IO ()-pixelBufferSetPixel (PixelBuffer owned size buffer) point color- = {-- do let idx = 3*(y*w + x)- r = colorRed color- g = colorGreen color- b = colorBlue color- pokeByteOff buffer idx r- pokeByteOff buffer (idx+1) g- pokeByteOff buffer (idx+2) b- -}- wxcSetPixelRGB buffer (sizeW size) point (intFromColor color)- ---- | Get the color of a pixel-pixelBufferGetPixel :: PixelBuffer -> Point -> IO Color-pixelBufferGetPixel (PixelBuffer owned size buffer) point- = {-- do let idx = 3*(y*w + x)- r <- peekByteOff buffer idx- g <- peekByteOff buffer (idx+1)- b <- peekByteOff buffer (idx+2)- return (colorRGB r g b)- -}- do rgb <- wxcGetPixelRGB buffer (sizeW size) point- return (colorFromInt rgb)- - --- | Create an image from a pixel buffer. Note: the image will--- delete the pixelbuffer.-imageCreateFromPixelBuffer :: PixelBuffer -> IO (Image ())-imageCreateFromPixelBuffer (PixelBuffer owned size buffer) - = imageCreateFromDataEx size buffer False---- | Do something with the pixels of an image-withImageData :: Image a -> (Ptr () -> IO b) -> IO b-withImageData image f = do- pixels <- imageGetData image- x <- f pixels- image `seq` return x -- about this seq:- -- it's not that we're trying to force evaluation order;- -- we merely want to prevent image from being garbage- -- collected before we've managed to use the array that- -- is being pointed to--withPixelBuffer :: Image a -> (PixelBuffer -> IO b) -> IO b-withPixelBuffer image f =- withImageData image $ \ptr -> do- w <- imageGetWidth image- h <- imageGetHeight image- f $ PixelBuffer False (sz w h) (ptrCast ptr)--{-# DEPRECATED imageGetPixelBuffer "Use withPixelBuffer instead" #-}--- | Get the pixel buffer of an image.--- Note: use 'withPixelBuffer' instead-imageGetPixelBuffer :: Image a -> IO PixelBuffer-imageGetPixelBuffer image- = withPixelBuffer image return---- | Get the pixels of an image.-imageGetPixels :: Image a -> IO [Color]-imageGetPixels image- = withPixelBuffer image pixelBufferGetPixels---- | Create an image from a list of pixels.-imageCreateFromPixels :: Size -> [Color] -> IO (Image ())-imageCreateFromPixels size colors- = do pb <- pixelBufferCreate size- pixelBufferSetPixels pb colors- imageCreateFromPixelBuffer pb -- image deletes pixel buffer---- | Get the pixels of an image as an array-imageGetPixelArray :: (IArray a Color) => Image b -> IO (a Point Color)-imageGetPixelArray image- = do h <- imageGetHeight image- w <- imageGetWidth image- ps <- imageGetPixels image- let bounds = (pointZero, point (w-1) (h-1))- return (listArray bounds ps) ---- | Create an image from a pixel array-imageCreateFromPixelArray :: (IArray a Color) => a Point Color -> IO (Image ())-imageCreateFromPixelArray pixels- = let (Point x y) = snd (bounds pixels)- in imageCreateFromPixels (sz (x+1) (y+1)) (elems pixels)---- | Get the size of an image-imageGetSize :: Image a -> IO Size-imageGetSize image- = do h <- imageGetHeight image- w <- imageGetWidth image- return (Size w h)+{-# LANGUAGE FlexibleContexts #-} +-------------------------------------------------------------------------------- +{-| Module : Image + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable +-} +-------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Image + ( -- * Images + topLevelWindowSetIconFromFile + -- ** Imagelist + , imageListAddIconsFromFiles + , imageListAddIconFromFile + -- ** Icons + , withIconFromFile + , iconCreateFromFile + , iconGetSize + -- ** Cursors + , withCursorFromFile + , cursorCreateFromFile + -- ** Bitmaps + , withBitmapFromFile + , bitmapCreateFromFile + , bitmapGetSize + , bitmapSetSize + -- ** Helpers + , imageTypeFromExtension + , imageTypeFromFileName + + -- * Direct image manipulation + , imageGetPixels + , imageCreateFromPixels + , imageGetPixelArray + , imageCreateFromPixelArray + , imageGetSize + , withImageData + + -- ** Pixel buffer + , imageCreateFromPixelBuffer + , imageGetPixelBuffer + , withPixelBuffer + , PixelBuffer + , pixelBufferCreate + , pixelBufferDelete + , pixelBufferInit + , pixelBufferSetPixel + , pixelBufferGetPixel + , pixelBufferSetPixels + , pixelBufferGetPixels + , pixelBufferGetSize + ) where + +import Data.Char( toLower ) +import Data.Array.IArray ( IArray, listArray, bounds, elems ) +import Foreign.Marshal.Array +import Foreign.C.String +import Foreign.Storable + +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Defines + + +{----------------------------------------------------------------------------------------- + ImageList +-----------------------------------------------------------------------------------------} +-- | Initialize an image list with icons from files. Use a 'sizeNull' to +-- use the native size of the loaded icons. +imageListAddIconsFromFiles :: ImageList a -> Size -> [FilePath] -> IO () +imageListAddIconsFromFiles images desiredSize fnames + = mapM_ (imageListAddIconFromFile images desiredSize) fnames + +-- | Add an icon from a file to an imagelist. +imageListAddIconFromFile :: ImageList a -> Size -> FilePath -> IO () +imageListAddIconFromFile images desiredSize fname + = do image <- imageCreateFromFile fname + imageRescale image desiredSize + bitmap <- imageConvertToBitmap image + imageListAddBitmap images bitmap nullBitmap + bitmapDelete bitmap + imageDelete image + return () + +{----------------------------------------------------------------------------------------- + Icons +-----------------------------------------------------------------------------------------} + +-- | Set the icon of a frame. +topLevelWindowSetIconFromFile :: TopLevelWindow a -> FilePath -> IO () +topLevelWindowSetIconFromFile f fname + = withIconFromFile fname sizeNull (topLevelWindowSetIcon f) + + +-- | Load an icon (see 'iconCreateFromFile') and automatically delete it +-- after use. +withIconFromFile :: FilePath -> Size -> (Icon () -> IO a) -> IO a +withIconFromFile fname size f + = bracket (iconCreateFromFile fname size) + (iconDelete) + f + +-- | Load an icon from an icon file (ico,xbm,xpm,gif). The 'Size' argument +-- gives the desired size but can be 'sizeNull' to retrieve the image +-- in its natural size. +iconCreateFromFile :: FilePath -> Size -> IO (Icon ()) +iconCreateFromFile fname size + = iconCreateLoad fname (imageTypeFromFileName fname) size + {- + do icon <- iconCreateLoad fname (imageTypeFromFileName fname) size + ok <- iconOk icon + if (ok) + then return icon + else do iconDelete icon + ioError (userError ("unable to load icon: " ++ show fname)) + -} + +-- | Get the size of an icon. +iconGetSize :: Icon a -> IO Size +iconGetSize icon + = do w <- iconGetWidth icon + h <- iconGetHeight icon + return (sz w h) + +{----------------------------------------------------------------------------------------- + Cursors +-----------------------------------------------------------------------------------------} +-- | Load a cursor (see 'cursorCreateFromFile') and automatically delete it +-- after use. +withCursorFromFile :: FilePath -> (Cursor () -> IO a) -> IO a +withCursorFromFile fname f + = bracket (cursorCreateFromFile fname) + (cursorDelete) + f + +-- | Load a cursor from an icon file (ico,xbm,xpm,gif). +-- For a reason, this function is incompatible with 'iconCreateFromFile'. +cursorCreateFromFile :: String -> IO (Cursor ()) +cursorCreateFromFile fname = imageCreateFromFile fname >>= cursorCreateFromImage + +{----------------------------------------------------------------------------------------- + Bitmaps +-----------------------------------------------------------------------------------------} + +-- | Load a bitmap (see 'bitmapCreateFromFile') and automatically delete it +-- after use. +withBitmapFromFile :: FilePath -> (Bitmap () -> IO a) -> IO a +withBitmapFromFile fname f + = bracket (bitmapCreateFromFile fname) + (bitmapDelete) + f + +-- | Load a bitmap from an image file (gif, jpg, png, etc.) +bitmapCreateFromFile :: FilePath -> IO (Bitmap ()) +bitmapCreateFromFile fname + = bitmapCreateLoad fname (imageTypeFromFileName fname) + {- + do bm <- bitmapCreateLoad fname (imageTypeFromFileName fname) + ok <- bitmapOk bm + if (ok) + then return bm + else do bitmapDelete bm + ioError (userError ("unable to load image: " ++ show fname)) + -} + +-- | The size of a bitmap. +bitmapGetSize :: Bitmap a -> IO Size +bitmapGetSize bitmap + = do w <- bitmapGetWidth bitmap + h <- bitmapGetHeight bitmap + return (sz w h) + +-- | Set the size of a bitmap. +bitmapSetSize :: Bitmap a -> Size -> IO () +bitmapSetSize bitmap (Size w h) + = do bitmapSetWidth bitmap w + bitmapSetHeight bitmap h + + +{----------------------------------------------------------------------------------------- + Images +-----------------------------------------------------------------------------------------} + +-- | Get an image type from a file name. +imageTypeFromFileName :: String -> BitFlag +imageTypeFromFileName fname + = imageTypeFromExtension (map toLower (reverse (takeWhile (/= '.') (reverse fname)))) + +-- | Get an image type from a file extension. +imageTypeFromExtension :: String -> BitFlag +imageTypeFromExtension ext + = case ext of + "jpg" -> wxBITMAP_TYPE_JPEG + "jpeg" -> wxBITMAP_TYPE_JPEG + "gif" -> wxBITMAP_TYPE_GIF + "bmp" -> wxBITMAP_TYPE_BMP + "png" -> wxBITMAP_TYPE_PNG + "xpm" -> wxBITMAP_TYPE_XPM + "xbm" -> wxBITMAP_TYPE_XBM + "pcx" -> wxBITMAP_TYPE_PCX + "ico" -> wxBITMAP_TYPE_ICO + "tif" -> wxBITMAP_TYPE_TIF + "tiff" -> wxBITMAP_TYPE_TIF + "pnm" -> wxBITMAP_TYPE_PNM + "pict" -> wxBITMAP_TYPE_PICT + "icon" -> wxBITMAP_TYPE_ICON + other -> wxBITMAP_TYPE_ANY + +{----------------------------------------------------------------------------------------- + Direct image manipulation +-----------------------------------------------------------------------------------------} +-- | An abstract pixel buffer (= array of RGB values) +data PixelBuffer = PixelBuffer Bool Size (Ptr Word8) + +-- | Create a pixel buffer. (To be deleted with 'pixelBufferDelete'). +pixelBufferCreate :: Size -> IO PixelBuffer +pixelBufferCreate size + = do buffer <- wxcMalloc (sizeW size * sizeH size * 3) + return (PixelBuffer True size (ptrCast buffer)) + +-- | Delete a pixel buffer. +pixelBufferDelete :: PixelBuffer -> IO () +pixelBufferDelete (PixelBuffer owned size buffer) + = when (owned && not (ptrIsNull buffer)) (wxcFree buffer) + +-- | The size of a pixel buffer +pixelBufferGetSize :: PixelBuffer -> Size +pixelBufferGetSize (PixelBuffer owned size buffer) + = size + +-- | Get all the pixels of a pixel buffer as a single list. +pixelBufferGetPixels :: PixelBuffer -> IO [Color] +pixelBufferGetPixels (PixelBuffer owned (Size w h) buffer) + = do let count = w*h + rgbs <- peekArray (3*count) buffer + return (convert rgbs) + where + convert :: [Word8] -> [Color] + convert (r:g:b:xs) = colorRGB r g b : convert xs + convert [] = [] + +-- | Set all the pixels of a pixel buffer. +pixelBufferSetPixels :: PixelBuffer -> [Color] -> IO () +pixelBufferSetPixels (PixelBuffer owned (Size w h) buffer) colors + = do let count = w*h + pokeArray buffer (convert (take count colors)) + where + convert :: [Color] -> [Word8] + convert (c:cs) = colorRed c : colorGreen c : colorBlue c : convert cs + convert [] = [] + +-- | Initialize the pixel buffer with a grey color. The second argument +-- specifies the /greyness/ as a number between 0.0 (black) and 1.0 (white). +pixelBufferInit :: PixelBuffer -> Color -> IO () +pixelBufferInit (PixelBuffer owned size buffer) color + = wxcInitPixelsRGB buffer size (intFromColor color) + +-- | Set the color of a pixel. +pixelBufferSetPixel :: PixelBuffer -> Point -> Color -> IO () +pixelBufferSetPixel (PixelBuffer owned size buffer) point color + = {- + do let idx = 3*(y*w + x) + r = colorRed color + g = colorGreen color + b = colorBlue color + pokeByteOff buffer idx r + pokeByteOff buffer (idx+1) g + pokeByteOff buffer (idx+2) b + -} + wxcSetPixelRGB buffer (sizeW size) point (intFromColor color) + + +-- | Get the color of a pixel +pixelBufferGetPixel :: PixelBuffer -> Point -> IO Color +pixelBufferGetPixel (PixelBuffer owned size buffer) point + = {- + do let idx = 3*(y*w + x) + r <- peekByteOff buffer idx + g <- peekByteOff buffer (idx+1) + b <- peekByteOff buffer (idx+2) + return (colorRGB r g b) + -} + do rgb <- wxcGetPixelRGB buffer (sizeW size) point + return (colorFromInt rgb) + + +-- | Create an image from a pixel buffer. Note: the image will +-- delete the pixelbuffer. +imageCreateFromPixelBuffer :: PixelBuffer -> IO (Image ()) +imageCreateFromPixelBuffer (PixelBuffer owned size buffer) + = imageCreateFromDataEx size buffer False + +-- | Do something with the pixels of an image +withImageData :: Image a -> (Ptr () -> IO b) -> IO b +withImageData image f = do + pixels <- imageGetData image + x <- f pixels + image `seq` return x -- about this seq: + -- it's not that we're trying to force evaluation order; + -- we merely want to prevent image from being garbage + -- collected before we've managed to use the array that + -- is being pointed to + +withPixelBuffer :: Image a -> (PixelBuffer -> IO b) -> IO b +withPixelBuffer image f = + withImageData image $ \ptr -> do + w <- imageGetWidth image + h <- imageGetHeight image + f $ PixelBuffer False (sz w h) (ptrCast ptr) + +{-# DEPRECATED imageGetPixelBuffer "Use withPixelBuffer instead" #-} +-- | Get the pixel buffer of an image. +-- Note: use 'withPixelBuffer' instead +imageGetPixelBuffer :: Image a -> IO PixelBuffer +imageGetPixelBuffer image + = withPixelBuffer image return + +-- | Get the pixels of an image. +imageGetPixels :: Image a -> IO [Color] +imageGetPixels image + = withPixelBuffer image pixelBufferGetPixels + +-- | Create an image from a list of pixels. +imageCreateFromPixels :: Size -> [Color] -> IO (Image ()) +imageCreateFromPixels size colors + = do pb <- pixelBufferCreate size + pixelBufferSetPixels pb colors + imageCreateFromPixelBuffer pb -- image deletes pixel buffer + +-- | Get the pixels of an image as an array +imageGetPixelArray :: (IArray a Color) => Image b -> IO (a Point Color) +imageGetPixelArray image + = do h <- imageGetHeight image + w <- imageGetWidth image + ps <- imageGetPixels image + let bounds = (pointZero, point (w-1) (h-1)) + return (listArray bounds ps) + +-- | Create an image from a pixel array +imageCreateFromPixelArray :: (IArray a Color) => a Point Color -> IO (Image ()) +imageCreateFromPixelArray pixels + = let (Point x y) = snd (bounds pixels) + in imageCreateFromPixels (sz (x+1) (y+1)) (elems pixels) + +-- | Get the size of an image +imageGetSize :: Image a -> IO Size +imageGetSize image + = do h <- imageGetHeight image + w <- imageGetWidth image + return (Size w h)
src/haskell/Graphics/UI/WXCore/Layout.hs view
@@ -1,1013 +1,1018 @@-{-# LANGUAGE TypeSynonymInstances #-}-{-# LANGUAGE FlexibleInstances #-}-------------------------------------------------------------------------------------------{-| Module : Layout- Copyright : (c) Daan Leijen & Wijnand van Suijlen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Combinators to specify layout. (These combinators use wxWidgets 'Sizer' objects).--Layout can be specified using 'windowSetLayout'. For example:--> do f <- frameCreateTopFrame "Test"-> ok <- buttonCreate f idAny "Bye" rectNull 0-> windowSetLayout f (widget ok)-> ...--The 'windowSetLayout' function takes 'Layout' as its argument.-The 'widget' combinator creates a layout from a window. The 'space' combinator creates-an empty layout with a specific width and height. Furthermore, we have the 'label' combinator-to create a static label label and 'boxed' to create a labeled border around a layout.-The 'grid' combinator lays out elements in a table with a given space between the elements.-Here is for example a layout for retrieving an /x/ and /y/ coordinate from the user, with 5 pixels space-between the controls:--> boxed "coordinates" (grid 5 5 [[label "x", widget xinput]-> ,[label "y", widget yinput]])--Combinators like 'row' and 'column' are specific instances of grids. We can use-these combinator to good effect to add an /ok/ and /cancel/ button at the bottom of our dialog:--> column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]-> ,[label "y", widget yinput]])-> , row 5 [widget ok, widget cancel]]--Layout /tranformers/ influence attributes of a layout. The 'margin' combinator adds a-margin around a layout. The /align/ combinators specify how a combinator is aligned when-the assigned area is larger than the layout itself. We can use these transformers to-add a margin around our dialog and to align the buttons to the bottom right (instead of the-default top-left):--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput]-> ,[label "y", widget yinput]])-> , alignBottomRight $ row 5 [widget ok, widget cancel]]--Besides aligning a layout in its assigned area, we can also specify that a layout should-expand to fill the assigned area. The 'shaped' combinator fills an area while maintaining the-original proportions (or aspect ratio) of a layout. The 'expand' combinator always tries to fill-the entire area (and alignment is ignored).--The final attribute is the /stretch/ of a layout. A stretchable layout may get a larger-area assigned than the minimally required area. This can be used to fill out the entire parent-area -- this happens for example when a user enlarges a dialog.--The default stretch and expansion mode of layout containers, like 'grid' and 'boxed', depends on the-stretch of the child layouts. A column of a /grid/ is only stretchable when all-elements of that column have horizontal stretch. The same holds for rows with vertical stretch.-When any column or row is stretchable, the grid itself will also be stretchable in that direction-and the grid will 'expand' to fill the assigned area by default (instead of being 'static'). Just like-a grid, other containers, like 'container', 'boxed', 'tabs', 'row', and 'column', will also propagate the stretch-and expansion mode of their child layouts.--Armed with the 'stretch' combinators we can make our dialog resizeable.-We let the input widgets resize horizontally. Furthermore, the button row will resize-vertically and horizontally with the buttons aligned to the bottom right. Due to the-stretch propagation rules, the 'grid' and 'boxed' stretch horizontally and 'expand' to fill the-assigned area. The horizontal 'row' does /not/ stretch by default (and we need to use-an explicit 'stretch') and it does /not/ expand into the assigned area by default (and therefore-alignment works properly).--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hstretch $ expand $ widget xinput]-> ,[label "y", hstretch $ expand $ widget yinput]])-> , stretch $ alignBottomRight $ row 5 [widget ok, widget cancel]]--There are some common uses of stretchable combinators. The 'fill' combinators combine-stretch and expansion. For example, 'hfill' is defined as (@hstretch . expand@). The /float/-combinators combine alignment and 'stretch'. For example, 'floatBottomRight' is defined-as (@stretch . alignBottomRight@). There are also horizontal and vertical float combinators,-like 'hfloatCentre' and 'vfloatBottom'. Here is the above example using 'fill' and float:--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]-> ,[label "y", hfill $ widget yinput]])-> , floatBottomRight $ row 5 [widget ok, widget cancel]]--The 'glue' combinators are stretchable empty space. For example, 'hglue'-is defined as (@hstretch (space 0 0)@). We can use glue to mimic alignment. Here is the above-layout specified with glue. Note that we use 'hspace' to manually insert-space between the elements or otherwise there would be space between the glue and-the /ok/ button.--> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput]-> ,[label "y", hfill $ widget yinput]])-> , glue-> , row 0 [hglue, widget ok, hspace 5, widget cancel]]--Splitter windows can also be specified with layout; you get somewhat less functionality-but it is quite convenient for most applications. A horizontal split is done using-'hsplit' while a vertical split is specified with a 'vsplit'.--The layout for notebooks is specified with the 'tabs' combinator. The following-example shows this (and note also how we use 'container' to set the layout of panels):--> nbook <- notebookCreate ...-> panel1 <- panelCreate nbook ...-> ...-> panel2 <- panelCreate nbook ...-> ...-> windowSetLayout frame-> (tabs nbook [tab "page one" $ container panel1 $ margin 10 $ floatCentre $ widget ok-> ,tab "page two" $ container panel2 $ margin 10 $ hfill $ widget quit])--The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). The-title of the pages is determined from the label of the container widget.--Note: /At the moment, extra space is divided evenly among stretchable layouts. We plan to add-a (/@proportion :: Int -> Layout -> Layout@/) combinator in the future to stretch layouts-according to a relative weight, but unfortunately, that entails implementing a better-/'FlexGrid'/ sizer for wxWidgets./--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Layout( -- * Types- Layout, sizerFromLayout- , TabPage- -- * Window- , windowSetLayout, layoutFromWindow- , windowReFit, windowReFitMinimal- , windowReLayout, windowReLayoutMinimal- -- * Layouts - -- ** Widgets- , Widget, widget, label, rule, hrule, vrule, sizer- -- ** Containers- , row, column- , grid, boxed, container, tab, imageTab, tabs- , hsplit, vsplit- -- ** Glue- , glue, hglue, vglue- -- ** Whitespace- , space, hspace, vspace, empty- -- * Transformers- , dynamic- -- ** Stretch- , static, stretch, hstretch, vstretch, minsize- -- ** Expansion- , rigid, shaped, expand- -- ** Fill- , fill, hfill, vfill- -- ** Margin- , margin, marginWidth, marginNone- , marginLeft, marginTop, marginRight, marginBottom- -- ** Floating alignment- , floatTopLeft, floatTop, floatTopRight- , floatLeft, floatCentre, floatCenter, floatRight- , floatBottomLeft, floatBottom, floatBottomRight- -- ** Horizontal floating alignment- , hfloatLeft, hfloatCentre, hfloatCenter, hfloatRight- -- ** Vertical floating alignment- , vfloatTop, vfloatCentre, vfloatCenter, vfloatBottom- -- ** Alignment- , centre- , alignTopLeft, alignTop, alignTopRight- , alignLeft, alignCentre, alignCenter, alignRight- , alignBottomLeft, alignBottom, alignBottomRight- -- ** Horizontal alignment- , halignLeft, halignCentre, halignCenter, halignRight- -- ** Vertical alignment- , valignTop, valignCentre, valignCenter, valignBottom- ) where--import Data.List( transpose )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Frame-import Graphics.UI.WXCore.Defines--{------------------------------------------------------------------------------------------ Classes------------------------------------------------------------------------------------------}--- | Anything in the widget class can be layed out.-class Widget w where- -- | Create a layout from a widget.- widget :: w -> Layout--instance Widget Layout where- widget layout- = layout--instance Widget (Window a) where- widget w- = layoutFromWindow w---{------------------------------------------------------------------------------------------ Abstractions------------------------------------------------------------------------------------------}-{---- | Layout elements horizontally with no space between the elements.-row :: [Layout] -> Layout-row- = horizontal 0---- | Layout elements vertically with no space between the elements.-column :: [Layout] -> Layout-column- = vertical 0---- | Layout elements in a 'grid' with no space between the elements.-matrix :: [[Layout]] -> Layout-matrix- = grid 0 0---- | Create a border. (= @'boxed' \"\"@).-border :: Layout -> Layout-border- = boxed ""---}---- | The layout is stretchable and expands into the assigned area. (see also 'stretch' and 'expand').-fill :: Layout -> Layout-fill- = stretch . expand---- | The layout is horizontally stretchable and expands into the assigned area. (see also 'hstretch' and 'expand').-hfill :: Layout -> Layout-hfill- = hstretch . expand---- | The layout is vertically stretchable and expands into the assigned area. (see also 'vstretch' and 'expand').-vfill :: Layout -> Layout-vfill- = vstretch . expand---- | Layout elements in a horizontal direction with a certain amount of space between the elements.-row :: Int -> [Layout] -> Layout-row w row- = grid w 0 [row]---- | Layout elements in a vertical direction with a certain amount of space between the elements.-column :: Int -> [Layout] -> Layout-column h col- = grid 0 h (map (\x -> [x]) col)----{------------------------------------------------------------------------------------------ Float------------------------------------------------------------------------------------------}--- | Make the layout stretchable and align it in the center of the assigned area.-floatCenter :: Layout -> Layout-floatCenter- = floatCentre---- | Make the layout stretchable and align it in the center of the assigned area.-floatCentre :: Layout -> Layout-floatCentre- = stretch . alignCentre---- | Make the layout stretchable and align it in the top-left corner of the assigned area (default).-floatTopLeft :: Layout -> Layout-floatTopLeft- = stretch . alignTopLeft---- | Make the layout stretchable and align it centered on the top of the assigned area.-floatTop :: Layout -> Layout-floatTop- = stretch . alignTop---- | Make the layout stretchable and align it to the top-right of the assigned area.-floatTopRight :: Layout -> Layout-floatTopRight- = stretch . alignTopRight---- | Make the layout stretchable and align it centered to the left of the assigned area.-floatLeft :: Layout -> Layout-floatLeft- = stretch . alignLeft---- | Make the layout stretchable and align it centered to the right of the assigned area.-floatRight :: Layout -> Layout-floatRight- = stretch . alignRight---- | Make the layout stretchable and align it to the bottom-left of the assigned area.-floatBottomLeft :: Layout -> Layout-floatBottomLeft- = stretch . alignBottomLeft---- | Make the layout stretchable and align it centered on the bottom of the assigned area.-floatBottom :: Layout -> Layout-floatBottom- = stretch . alignBottom---- | Make the layout stretchable and align it to the bottom-right of the assigned area.-floatBottomRight :: Layout -> Layout-floatBottomRight- = stretch . alignBottomRight---- | Make the layout horizontally stretchable and align to the center.-hfloatCenter :: Layout -> Layout-hfloatCenter - = hfloatCentre---- | Make the layout horizontally stretchable and align to the center.-hfloatCentre :: Layout -> Layout-hfloatCentre- = hstretch . alignCentre---- | Make the layout horizontally stretchable and align to the left.-hfloatLeft :: Layout -> Layout-hfloatLeft- = hstretch . alignLeft---- | Make the layout horizontally stretchable and align to the right.-hfloatRight :: Layout -> Layout-hfloatRight- = hstretch . alignRight---- | Make the layout vertically stretchable and align to the center.-vfloatCenter :: Layout -> Layout-vfloatCenter- = vfloatCentre---- | Make the layout vertically stretchable and align to the center.-vfloatCentre :: Layout -> Layout-vfloatCentre- = vstretch . alignCentre---- | Make the layout vertically stretchable and align to the top.-vfloatTop :: Layout -> Layout-vfloatTop- = vstretch . alignTop---- | Make the layout vertically stretchable and align to the bottom.-vfloatBottom :: Layout -> Layout-vfloatBottom- = vstretch . alignBottom--{------------------------------------------------------------------------------------------ Alignment------------------------------------------------------------------------------------------}--- | Align the layout in the center of the assigned area.-center :: Layout -> Layout-center- = centre---- | Align the layout in the center of the assigned area.-centre :: Layout -> Layout-centre- = alignCentre---- | Align the layout in the center of the assigned area.-alignCenter :: Layout -> Layout-alignCenter- = alignCentre---- | Align the layout in the center of the assigned area.-alignCentre :: Layout -> Layout-alignCentre- = halignCentre . valignCentre---- | Align the layout in the top-left corner of the assigned area (default).-alignTopLeft :: Layout -> Layout-alignTopLeft- = valignTop . halignLeft---- | Align the layout centered on the top of the assigned area.-alignTop :: Layout -> Layout-alignTop- = valignTop . halignCentre---- | Align the layout to the top-right of the assigned area.-alignTopRight :: Layout -> Layout-alignTopRight- = valignTop . halignRight---- | Align the layout centered to the left of the assigned area.-alignLeft :: Layout -> Layout-alignLeft- = valignCentre . halignLeft---- | Align the layout centered to the right of the assigned area.-alignRight :: Layout -> Layout-alignRight- = valignCentre . halignRight---- | Align the layout to the bottom-left of the assigned area.-alignBottomLeft :: Layout -> Layout-alignBottomLeft- = valignBottom . halignLeft---- | Align the layout centered on the bottom of the assigned area.-alignBottom :: Layout -> Layout-alignBottom- = valignBottom . halignCentre---- | Align the layout to the bottom-right of the assigned area.-alignBottomRight :: Layout -> Layout-alignBottomRight- = valignBottom . halignRight--{------------------------------------------------------------------------------------------ Whitespace------------------------------------------------------------------------------------------}---- | An empty layout that stretchable in all directions.-glue :: Layout-glue- = stretch empty---- | An empty layout that is vertically stretchable.-vglue :: Layout-vglue- = vstretch empty---- | An empty layout that is horizontally stretchable.-hglue :: Layout-hglue- = hstretch empty---- | An empty layout. (see also 'space').-empty :: Layout-empty- = space 0 0---- | Horizontal 'space' of a certain width.-hspace :: Int -> Layout-hspace w- = space w 0---- | Vertical 'space' of a certain height.-vspace :: Int -> Layout-vspace h- = space 0 h---{------------------------------------------------------------------------------------------ Primitive layout tranformers------------------------------------------------------------------------------------------}---- | (primitive) Set the minimal size of a widget.-minsize :: Size -> Layout -> Layout-minsize sz layout- = updateOptions layout (\options -> options{ minSize = Just sz })---- | (primitive) Never resize the layout, but align it in the assigned area--- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).-rigid :: Layout -> Layout-rigid layout- = updateOptions layout (\options -> options{ fillMode = FillNone })---- | (primitive) Expand the layout to fill the assigned area but maintain the original proportions--- of the layout. Note that the layout can still be aligned in a horizontal or vertical direction.-shaped :: Layout -> Layout-shaped layout- = updateOptions layout (\options -> options{ fillMode = FillShaped })---- | (primitive) Expand the layout to fill the assigned area entirely, even when the original proportions can not--- be maintained. Note that alignment will have no effect on such layout. See also 'fill'.-expand :: Layout -> Layout-expand layout- = updateOptions layout (\options -> options{ fillMode = Fill })----- | (primitive) The layout is not stretchable. In a 'grid', the row and column that contain this layout will--- not be resizeable. Note that a 'static' layout can still be assigned an area that is larger--- than its preferred size due to grid alignment constraints.--- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts).-static :: Layout -> Layout-static layout- = updateOptions layout (\options -> options{ stretchV = False, stretchH = False })---- | (primitive) The layout is stretchable and can be assigned a larger area in both the horizontal and vertical--- direction. See also combinators like 'fill' and 'floatCentre'.-stretch :: Layout -> Layout-stretch layout- = updateOptions layout (\options -> options{ stretchV = True, stretchH = True })---- | (primitive) The layout is stretchable in the vertical direction. See also combinators like 'vfill' and 'vfloatCentre'.-vstretch :: Layout -> Layout-vstretch layout- = updateOptions layout (\options -> options{ stretchV = True, stretchH = False })---- | (primitive) The layout is stretchable in the horizontal direction. See also combinators like 'hfill' and 'hfloatCentre'.-hstretch :: Layout -> Layout-hstretch layout- = updateOptions layout (\options -> options{ stretchH = True, stretchV = False })----- | Add a margin of a certain width around the entire layout.-margin :: Int -> Layout -> Layout-margin i layout- = updateOptions layout (\options -> options{ margins = [MarginLeft,MarginRight,MarginTop,MarginBottom], marginW = i })---- | (primitive) Set the width of the margin (default is 10 pixels).-marginWidth :: Int -> Layout -> Layout-marginWidth w layout- = updateOptions layout (\options -> options{ marginW = w })---- | (primitive) Remove the margin of a layout (default).-marginNone :: Layout -> Layout-marginNone layout- = updateOptions layout (\options -> options{ margins = [] })---- | (primitive) Add a margin to the left.-marginLeft :: Layout -> Layout-marginLeft layout- = updateOptions layout (\options -> options{ margins = MarginLeft:margins options })---- | (primitive) Add a right margin.-marginRight :: Layout -> Layout-marginRight layout- = updateOptions layout (\options -> options{ margins = MarginRight:margins options })---- | (primitive) Add a margin to the top.-marginTop :: Layout -> Layout-marginTop layout- = updateOptions layout (\options -> options{ margins = MarginTop:margins options })---- | (primitive) Add a margin to the bottom.-marginBottom :: Layout -> Layout-marginBottom layout- = updateOptions layout (\options -> options{ margins = MarginBottom:margins options })----- | (primitive) Align horizontally to the left when the layout is assigned to a larger area (default).-halignLeft :: Layout -> Layout-halignLeft layout- = updateOptions layout (\options -> options{ alignH = AlignLeft })---- | (primitive) Align horizontally to the right when the layout is assigned to a larger area.-halignRight :: Layout -> Layout-halignRight layout- = updateOptions layout (\options -> options{ alignH = AlignRight })---- | (primitive) Center horizontally when assigned to a larger area.-halignCenter :: Layout -> Layout-halignCenter - = halignCentre---- | (primitive) Center horizontally when assigned to a larger area.-halignCentre :: Layout -> Layout-halignCentre layout- = updateOptions layout (\options -> options{ alignH = AlignHCentre })---- | (primitive) Align vertically to the top when the layout is assigned to a larger area (default).-valignTop :: Layout -> Layout-valignTop layout- = updateOptions layout (\options -> options{ alignV = AlignTop })---- | (primitive) Align vertically to the bottom when the layout is assigned to a larger area.-valignBottom :: Layout -> Layout-valignBottom layout- = updateOptions layout (\options -> options{ alignV = AlignBottom })---- | (primitive) Center vertically when the layout is assigned to a larger area.-valignCenter :: Layout -> Layout-valignCenter layout- = valignCentre layout---- | (primitive) Center vertically when the layout is assigned to a larger area.-valignCentre :: Layout -> Layout-valignCentre layout- = updateOptions layout (\options -> options{ alignV = AlignVCentre })----- | Adjust the minimal size of a control dynamically when the content changes.--- This is used for example to correctly layout static text or buttons when the--- text or label changes at runtime. This property is automatically set for--- 'StaticText', 'label's, and 'button's.-dynamic :: Layout -> Layout-dynamic layout- = updateOptions layout (\options -> options{ adjustMinSize = True })--updateOptions :: Layout -> (LayoutOptions -> LayoutOptions) -> Layout-updateOptions layout f- = layout{ options = f (options layout) }--{------------------------------------------------------------------------------------------ primitive layouts------------------------------------------------------------------------------------------}--- | (primitive) Create a labeled border around a layout (= 'StaticBox').--- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the box.-boxed :: String -> Layout -> Layout-boxed txt content- = TextBox optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch- , fillMode = hasfill, adjustMinSize = True }- txt (extramargin content)- where- hasvstretch = stretchV (options content)- hashstretch = stretchH (options content)- hasfill = if (hasvstretch || hashstretch) then Fill else FillNone-- extramargin | null (margins (options content)) = marginWidth 5 . marginTop- | otherwise = id---- | (primitive) Create a static label label (= 'StaticText').-label :: String -> Layout-label txt- = Label optionsDefault txt---- | (primitive) The expression (@grid w h rows@) creates a grid of @rows@. The @w@ argument--- is the extra horizontal space between elements and @h@ the extra vertical space between elements.--- (implemented using the 'FlexGrid' sizer).------ Only when /all/ elements of a column have horizontal stretch (see 'stretch' and 'hstretch'), the entire--- column will stretch horizontally, and the same holds for rows with vertical stretch.--- When any column or row in a grid can stretch, the grid itself will also stretch in that direction--- and the grid will 'expand' to fill the assigned area by default (instead of being 'static').-grid :: Int -> Int -> [[Layout]] -> Layout-grid w h rows- = Grid optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } (sz w h) rows- where- hasvstretch = any (all (stretchV.options)) rows- hashstretch = any (all (stretchH.options)) (transpose rows)- hasfill = if (hasvstretch || hashstretch) then Fill else FillNone---- | (primitive) Add a container widget (for example, a 'Panel').--- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the container.-container :: Window a -> Layout -> Layout-container window layout- = WidgetContainer optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }- (downcastWindow window) layout- where- hasvstretch = stretchV (options layout)- hashstretch = stretchH (options layout)- hasfill = if (hasvstretch || hashstretch) then Fill else FillNone----- | (primitive) Lift a basic control to a 'Layout'.-layoutFromWindow :: Window a -> Layout-layoutFromWindow window- = Widget optionsDefault{ adjustMinSize = adjust } (downcastWindow window)- where- adjust = instanceOf window classButton - || instanceOf window classStaticText----- | (primitive) Empty layout with a given width and height.-space :: Int -> Int -> Layout-space w h- = Spacer optionsDefault (Size w h)---- | (primitive) A line with a given width and height-rule :: Int -> Int -> Layout-rule w h- = Line optionsDefault (Size w h)----- | A vertical line with a given height.-vrule :: Int -> Layout-vrule h- = rule 1 h---- | A horizontal line with a given width.-hrule :: Int -> Layout-hrule w- = rule w 1---- | (primitive) Create a 'Layout' from a 'Sizer' object.-sizer :: Sizer a -> Layout-sizer s- = XSizer optionsDefault (downcastSizer s)----- | A tab page in a notebook: a title, a possible bitmap and a layout.-type TabPage = (String,Bitmap (),Layout)---- | Create a simple tab page with a certain title and layout.-tab :: String -> Layout -> TabPage-tab title layout- = (title,objectNull,layout)---- | Create a tab page with a certain title, icon, and layout.-imageTab :: String -> Bitmap () -> Layout -> TabPage-imageTab title bitmap layout- = (title,bitmap,layout)---- | Create a notebook layout.--- The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). --- Just like a 'grid', the horizontal or vertical stretch of the child layout determines--- the stretch and expansion mode of the notebook.-tabs :: Notebook a -> [TabPage] -> Layout-tabs notebook pages- = XNotebook optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill }- (downcastNotebook notebook) pages- where- hasvstretch = all stretchV [options layout | (_,_,layout) <- pages]- hashstretch = all stretchH [options layout | (_,_,layout) <- pages]- hasfill = if (hasvstretch || hashstretch) then Fill else FillNone---- | Add a horizontal sash bar between two windows. The two integer--- arguments specify the width of the sash bar (5) and the initial--- height of the top pane respectively.-hsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-hsplit- = split True---- | Add a vertical sash bar between two windows. The two integer--- arguments specify the width of the sash bar (5) and the initial--- width of the left pane respectively. -vsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-vsplit- = split False---split :: Bool -> SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout-split splitHorizontal splitter sashWidth paneWidth pane1 pane2- = Splitter optionsDefault (downcastSplitterWindow splitter) pane1 pane2 splitHorizontal sashWidth paneWidth---optionsDefault :: LayoutOptions-optionsDefault- = LayoutOptions False False [] 10 AlignLeft AlignTop FillNone Nothing False------{------------------------------------------------------------------------------------------ Layout algorithm------------------------------------------------------------------------------------------}--- | Abstract data type that represents the layout of controls in a window.-data Layout = Grid { options :: LayoutOptions, gap :: Size, rows :: [[Layout]] }- | Widget { options :: LayoutOptions, win :: Window () }- | Spacer { options :: LayoutOptions, spacesize :: Size }- | Label { options :: LayoutOptions, txt :: String }- | TextBox { options :: LayoutOptions, txt :: String, content :: Layout }- | Line { options :: LayoutOptions, linesize :: Size }- | XSizer { options :: LayoutOptions, xsizer :: Sizer () }- | WidgetContainer{ options :: LayoutOptions, win :: Window (), content :: Layout }- | XNotebook { options :: LayoutOptions, nbook :: Notebook (), pages :: [(String,Bitmap (),Layout)] }- | Splitter { options :: LayoutOptions, splitter :: SplitterWindow ()- , pane1 :: Layout, pane2 :: Layout- , splitHorizontal :: Bool, sashWidth :: Int, paneWidth :: Int }--data LayoutOptions- = LayoutOptions{ stretchH :: Bool, stretchV :: Bool- , margins :: [Margin], marginW :: Int- , alignH :: HAlign, alignV :: VAlign- , fillMode :: FillMode- , minSize :: Maybe Size- , adjustMinSize :: Bool- }--data FillMode = FillNone | FillShaped | Fill-data HAlign = AlignLeft | AlignRight | AlignHCentre-data VAlign = AlignTop | AlignBottom | AlignVCentre-data Margin = MarginTop | MarginLeft | MarginRight | MarginBottom---- | Fits a widget properly by calling 'windowReLayout' on--- the parent frame or dialog ('windowGetFrameParent').-windowReFit :: Window a -> IO ()-windowReFit w- = do p <- windowGetFrameParent w- windowReLayout p---- | Fits a widget properly by calling 'windowReLayout' on--- the parent frame or dialog ('windowGetFrameParent').-windowReFitMinimal :: Window a -> IO ()-windowReFitMinimal w- = do p <- windowGetFrameParent w- windowReLayoutMinimal p---- | Re-invoke layout algorithm to fit a window around its--- children. It will enlarge when the current--- client size is too small, but not shrink when the window--- is already large enough. (in contrast, 'windowReLayoutMinimal' will--- also shrink a window so that it always minimally sized).-windowReLayout :: Window a -> IO ()-windowReLayout w- = do windowLayout w- old <- windowGetClientSize w- szr <- windowGetSizer w- when (not (objectIsNull szr)) (sizerSetSizeHints szr w)- windowFit w- new <- windowGetClientSize w- windowSetClientSize w (sizeMax old new)---- | Re-invoke layout algorithm to fit a window around its--- children. It will resize the window to its minimal --- acceptable size ('windowFit').-windowReLayoutMinimal :: Window a -> IO () -windowReLayoutMinimal w- = do windowLayout w- szr <- windowGetSizer w- when (not (objectIsNull szr)) (sizerSetSizeHints szr w)- windowFit w---- | Set the layout of a window (automatically calls 'sizerFromLayout').-windowSetLayout :: Window a -> Layout -> IO ()-windowSetLayout window layout- = do sizer <- sizerFromLayout window layout- windowSetAutoLayout window True- windowSetSizer window sizer- sizerSetSizeHints sizer window- return ()---- | Create a 'Sizer' from a 'Layout' and a parent window.-sizerFromLayout :: Window a -> Layout -> IO (Sizer ())-sizerFromLayout parent layout- = insert objectNull (grid 0 0 [[stretch layout]])- where- insert :: Sizer () -> Layout -> IO (Sizer ())- insert container (Spacer options sz)- = do sizerAddWithOptions 0 (sizerAdd container sz) (\sz -> return ()) options- return container-- insert container (Widget options win)- = do sizerAddWindowWithOptions container win options- return container-- insert container (Grid goptions gap rows)- = do g <- flexGridSizerCreate (length rows) (maximum (map length rows)) (sizeH gap) (sizeW gap)- mapM_ (stretchRow g) (zip [0..] (map (all (stretchV.options)) rows))- mapM_ (stretchCol g) (zip [0..] (map (all (stretchH.options)) (transpose rows)))- mapM_ (insert (downcastSizer g)) (concat rows)- when (container /= objectNull) - (sizerAddSizerWithOptions container g goptions)- return (downcastSizer g)-- insert container (Label options txt)- = do t <- staticTextCreate parent idAny txt rectNull 0- sizerAddWindowWithOptions container t options- return container-- insert container (TextBox options txt layout)- = do box <- staticBoxCreate parent idAny txt rectNull (wxCLIP_CHILDREN .+. wxNO_FULL_REPAINT_ON_RESIZE)- sizer <- staticBoxSizerCreate box wxVERTICAL- insert (downcastSizer sizer) layout- when (container /= objectNull) - (sizerAddSizerWithOptions container sizer options)- windowLower box- return (downcastSizer sizer)-- insert container (Line options (Size w h))- = do l <- staticLineCreate parent idAny (rectNull{ rectWidth = w, rectHeight = h }) - (if (w >= h) then wxHORIZONTAL else wxVERTICAL)- sizerAddWindowWithOptions container l options- return container-- insert container (XSizer options sizer)- = do sizerAddSizerWithOptions container sizer options- return container-- insert container (WidgetContainer options win layout)- = do windowSetLayout win layout -- recursively set the layout in the window itself- sizerAddWindowWithOptions container win options- return container-- insert container (Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth)- = do splitterWindowSetMinimumPaneSize splitter 20- splitterWindowSetSashSize splitter sashWidth- sizerAddWindowWithOptions container splitter options- if splitHorizontal- then splitterWindowSplitHorizontally splitter win1 win2 paneWidth- else splitterWindowSplitVertically splitter win1 win2 paneWidth- paneSetLayout pane1- paneSetLayout pane2- - return container- where- win1 = getWinFromLayout pane1- win2 = getWinFromLayout pane2-- getWinFromLayout layout- = case layout of- Widget _ win -> downcastWindow win- WidgetContainer _ win _ -> downcastWindow win- Splitter _ splitter _ _ _ _ _ -> downcastWindow splitter- other -> error "Layout: hsplit/vsplit need widgets or containers as arguments"-- paneSetLayout layout- = case layout of- Widget _ win -> return ()- WidgetContainer options win layout -> windowSetLayout win layout- Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth - -> do splitterWindowSetMinimumPaneSize splitter 20- splitterWindowSetSashSize splitter sashWidth- -- sizerAddWindowWithOptions container splitter options- let win1 = getWinFromLayout pane1- win2 = getWinFromLayout pane2- if splitHorizontal- then splitterWindowSplitHorizontally splitter win1 win2 paneWidth- else splitterWindowSplitVertically splitter win1 win2 paneWidth- paneSetLayout pane1- paneSetLayout pane2- return ()- other -> error "Layout: hsplit/vsplit need widgets or containers as arguments"--- insert container (XNotebook options nbook pages)- = do pages' <- addImages objectNull pages- mapM_ addPage pages'- sizerAddWindowWithOptions container nbook options- return container- where- addPage (title,idx,WidgetContainer options win layout)- = do pagetitle <- if (null title)- then windowGetLabel win- else return title- notebookAddPage nbook win pagetitle False idx- windowSetLayout win layout -- recursively set layout-- addPage (title,idx,other)- = error "Graphics.UI.WXCore.sizerFromLayout: notebook page needs to be a 'container' layout!"-- addImages il []- = if (objectIsNull il)- then return []- else do notebookAssignImageList nbook il- return []-- addImages il ((title,bm,layout):xs) | objectIsNull bm - = do xs' <- addImages il xs- return ((title,-1,layout):xs')-- addImages il ((title,bm,layout):xs)- = do il' <- addImage il bm- i <- imageListGetImageCount il'- xs' <- addImages il' xs- return ((title,i,layout):xs')-- addImage il bm- = if (objectIsNull il)- then do w <- bitmapGetWidth bm- h <- bitmapGetHeight bm- il <- imageListCreate (sz w h) False 1- imageListAddBitmap il bm objectNull- return il- else do imageListAddBitmap il bm objectNull- return il--- stretchRow g (i,stretch)- = when stretch (flexGridSizerAddGrowableRow g i)-- stretchCol g (i,stretch)- = when stretch (flexGridSizerAddGrowableCol g i)-- -- sizerAddWindowWithOptions :: Sizer a -> Window b -> LayoutOptions -> IO ()- sizerAddWindowWithOptions container window options- = sizerAddWithOptions (flagsAdjustMinSize window options) - (sizerAddWindow container window) (sizerSetItemMinSizeWindow container window) options-- sizerAddSizerWithOptions :: Sizer a -> Sizer b -> LayoutOptions -> IO ()- sizerAddSizerWithOptions container sizer options- = sizerAddWithOptions 0 (sizerAddSizer container sizer) (sizerSetItemMinSizeSizer container sizer) options- -- sizerAddWithOptions :: Int -> (Int -> Int -> Int -> Ptr p -> IO ()) -> (Size -> IO ()) -> LayoutOptions -> IO ()- sizerAddWithOptions miscflags addSizer setMinSize options- = do addSizer 1 (flags options .+. miscflags) (marginW options) ptrNull- case minSize options of- Nothing -> return ()- Just sz -> setMinSize sz-- flags options- = flagsFillMode (fillMode options) .+. flagsMargins (margins options)- .+. flagsHAlign (alignH options) .+. flagsVAlign (alignV options)-- flagsFillMode fillMode- = case fillMode of- FillNone -> 0- FillShaped -> wxSHAPED- Fill -> wxEXPAND-- flagsHAlign halign- = case halign of- AlignLeft -> wxALIGN_LEFT- AlignRight -> wxALIGN_RIGHT- AlignHCentre -> wxALIGN_CENTRE_HORIZONTAL-- flagsVAlign valign- = case valign of- AlignTop -> wxALIGN_TOP- AlignBottom -> wxALIGN_BOTTOM- AlignVCentre -> wxALIGN_CENTRE_VERTICAL-- flagsMargins margins- = bits (map flagsMargin margins)-- flagsMargin margin- = case margin of- MarginTop -> wxTOP- MarginLeft -> wxLEFT- MarginBottom -> wxBOTTOM- MarginRight -> wxRIGHT- - flagsAdjustMinSize window options- = if (adjustMinSize options) - then wxADJUST_MINSIZE- else 0-{- - case minSize options of- Nothing | -- dleijen: unfortunately, wxADJUST_MINSIZE has bugs for certain controls:- not ( instanceOf window classGauge || instanceOf window classGauge95 - || instanceOf window classGaugeMSW - || instanceOf window classSlider || instanceOf window classSlider95 - || instanceOf window classSliderMSW - )- -> wxADJUST_MINSIZE- other -> 0--}+{-# LANGUAGE TypeSynonymInstances #-} +{-# LANGUAGE FlexibleInstances #-} +----------------------------------------------------------------------------------------- +{-| Module : Layout + Copyright : (c) Daan Leijen & Wijnand van Suijlen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Combinators to specify layout. (These combinators use wxWidgets 'Sizer' objects). + +Layout can be specified using 'windowSetLayout'. For example: + +> do f <- frameCreateTopFrame "Test" +> ok <- buttonCreate f idAny "Bye" rectNull 0 +> windowSetLayout f (widget ok) +> ... + +The 'windowSetLayout' function takes 'Layout' as its argument. +The 'widget' combinator creates a layout from a window. The 'space' combinator creates +an empty layout with a specific width and height. Furthermore, we have the 'label' combinator +to create a static label label and 'boxed' to create a labeled border around a layout. +The 'grid' combinator lays out elements in a table with a given space between the elements. +Here is for example a layout for retrieving an /x/ and /y/ coordinate from the user, with 5 pixels space +between the controls: + +> boxed "coordinates" (grid 5 5 [[label "x", widget xinput] +> ,[label "y", widget yinput]]) + +Combinators like 'row' and 'column' are specific instances of grids. We can use +these combinator to good effect to add an /ok/ and /cancel/ button at the bottom of our dialog: + +> column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput] +> ,[label "y", widget yinput]]) +> , row 5 [widget ok, widget cancel]] + +Layout /tranformers/ influence attributes of a layout. The 'margin' combinator adds a +margin around a layout. The /align/ combinators specify how a combinator is aligned when +the assigned area is larger than the layout itself. We can use these transformers to +add a margin around our dialog and to align the buttons to the bottom right (instead of the +default top-left): + +> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", widget xinput] +> ,[label "y", widget yinput]]) +> , alignBottomRight $ row 5 [widget ok, widget cancel]] + +Besides aligning a layout in its assigned area, we can also specify that a layout should +expand to fill the assigned area. The 'shaped' combinator fills an area while maintaining the +original proportions (or aspect ratio) of a layout. The 'expand' combinator always tries to fill +the entire area (and alignment is ignored). + +The final attribute is the /stretch/ of a layout. A stretchable layout may get a larger +area assigned than the minimally required area. This can be used to fill out the entire parent +area -- this happens for example when a user enlarges a dialog. + +The default stretch and expansion mode of layout containers, like 'grid' and 'boxed', depends on the +stretch of the child layouts. A column of a /grid/ is only stretchable when all +elements of that column have horizontal stretch. The same holds for rows with vertical stretch. +When any column or row is stretchable, the grid itself will also be stretchable in that direction +and the grid will 'expand' to fill the assigned area by default (instead of being 'static'). Just like +a grid, other containers, like 'container', 'boxed', 'tabs', 'row', and 'column', will also propagate the stretch +and expansion mode of their child layouts. + +Armed with the 'stretch' combinators we can make our dialog resizeable. +We let the input widgets resize horizontally. Furthermore, the button row will resize +vertically and horizontally with the buttons aligned to the bottom right. Due to the +stretch propagation rules, the 'grid' and 'boxed' stretch horizontally and 'expand' to fill the +assigned area. The horizontal 'row' does /not/ stretch by default (and we need to use +an explicit 'stretch') and it does /not/ expand into the assigned area by default (and therefore +alignment works properly). + +> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hstretch $ expand $ widget xinput] +> ,[label "y", hstretch $ expand $ widget yinput]]) +> , stretch $ alignBottomRight $ row 5 [widget ok, widget cancel]] + +There are some common uses of stretchable combinators. The 'fill' combinators combine +stretch and expansion. For example, 'hfill' is defined as (@hstretch . expand@). The /float/ +combinators combine alignment and 'stretch'. For example, 'floatBottomRight' is defined +as (@stretch . alignBottomRight@). There are also horizontal and vertical float combinators, +like 'hfloatCentre' and 'vfloatBottom'. Here is the above example using 'fill' and float: + +> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput] +> ,[label "y", hfill $ widget yinput]]) +> , floatBottomRight $ row 5 [widget ok, widget cancel]] + +The 'glue' combinators are stretchable empty space. For example, 'hglue' +is defined as (@hstretch (space 0 0)@). We can use glue to mimic alignment. Here is the above +layout specified with glue. Note that we use 'hspace' to manually insert +space between the elements or otherwise there would be space between the glue and +the /ok/ button. + +> margin 10 $ column 5 [ boxed "coordinates" (grid 5 5 [[label "x", hfill $ widget xinput] +> ,[label "y", hfill $ widget yinput]]) +> , glue +> , row 0 [hglue, widget ok, hspace 5, widget cancel]] + +Splitter windows can also be specified with layout; you get somewhat less functionality +but it is quite convenient for most applications. A horizontal split is done using +'hsplit' while a vertical split is specified with a 'vsplit'. + +The layout for notebooks is specified with the 'tabs' combinator. The following +example shows this (and note also how we use 'container' to set the layout of panels): + +> nbook <- notebookCreate ... +> panel1 <- panelCreate nbook ... +> ... +> panel2 <- panelCreate nbook ... +> ... +> windowSetLayout frame +> (tabs nbook [tab "page one" $ container panel1 $ margin 10 $ floatCentre $ widget ok +> ,tab "page two" $ container panel2 $ margin 10 $ hfill $ widget quit]) + +The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). The +title of the pages is determined from the label of the container widget. + +Note: /At the moment, extra space is divided evenly among stretchable layouts. We plan to add +a (/@proportion :: Int -> Layout -> Layout@/) combinator in the future to stretch layouts +according to a relative weight, but unfortunately, that entails implementing a better +/'FlexGrid'/ sizer for wxWidgets./ +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Layout( -- * Types + Layout, sizerFromLayout + , TabPage + -- * Window + , windowSetLayout, layoutFromWindow + , windowReFit, windowReFitMinimal + , windowReLayout, windowReLayoutMinimal + -- * Layouts + -- ** Widgets + , Widget, widget, label, rule, hrule, vrule, sizer + -- ** Containers + , row, column + , grid, boxed, container, tab, imageTab, tabs + , hsplit, vsplit + -- ** Glue + , glue, hglue, vglue + -- ** Whitespace + , space, hspace, vspace, empty + -- * Transformers + , dynamic + -- ** Stretch + , static, stretch, hstretch, vstretch, minsize + -- ** Expansion + , rigid, shaped, expand + -- ** Fill + , fill, hfill, vfill + -- ** Margin + , margin, marginWidth, marginNone + , marginLeft, marginTop, marginRight, marginBottom + -- ** Floating alignment + , floatTopLeft, floatTop, floatTopRight + , floatLeft, floatCentre, floatCenter, floatRight + , floatBottomLeft, floatBottom, floatBottomRight + -- ** Horizontal floating alignment + , hfloatLeft, hfloatCentre, hfloatCenter, hfloatRight + -- ** Vertical floating alignment + , vfloatTop, vfloatCentre, vfloatCenter, vfloatBottom + -- ** Alignment + , centre + , alignTopLeft, alignTop, alignTopRight + , alignLeft, alignCentre, alignCenter, alignRight + , alignBottomLeft, alignBottom, alignBottomRight + -- ** Horizontal alignment + , halignLeft, halignCentre, halignCenter, halignRight + -- ** Vertical alignment + , valignTop, valignCentre, valignCenter, valignBottom + ) where + +import Data.List( transpose ) +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassInfo +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Frame +import Graphics.UI.WXCore.Defines + +{----------------------------------------------------------------------------------------- + Classes +-----------------------------------------------------------------------------------------} +-- | Anything in the widget class can be layed out. +class Widget w where + -- | Create a layout from a widget. + widget :: w -> Layout + +instance Widget Layout where + widget layout + = layout + +instance Widget (Window a) where + widget w + = layoutFromWindow w + + +{----------------------------------------------------------------------------------------- + Abstractions +-----------------------------------------------------------------------------------------} +{- +-- | Layout elements horizontally with no space between the elements. +row :: [Layout] -> Layout +row + = horizontal 0 + +-- | Layout elements vertically with no space between the elements. +column :: [Layout] -> Layout +column + = vertical 0 + +-- | Layout elements in a 'grid' with no space between the elements. +matrix :: [[Layout]] -> Layout +matrix + = grid 0 0 + +-- | Create a border. (= @'boxed' \"\"@). +border :: Layout -> Layout +border + = boxed "" + +-} + +-- | The layout is stretchable and expands into the assigned area. (see also 'stretch' and 'expand'). +fill :: Layout -> Layout +fill + = stretch . expand + +-- | The layout is horizontally stretchable and expands into the assigned area. (see also 'hstretch' and 'expand'). +hfill :: Layout -> Layout +hfill + = hstretch . expand + +-- | The layout is vertically stretchable and expands into the assigned area. (see also 'vstretch' and 'expand'). +vfill :: Layout -> Layout +vfill + = vstretch . expand + +-- | Layout elements in a horizontal direction with a certain amount of space between the elements. +row :: Int -> [Layout] -> Layout +row w row + = grid w 0 [row] + +-- | Layout elements in a vertical direction with a certain amount of space between the elements. +column :: Int -> [Layout] -> Layout +column h col + = grid 0 h (map (\x -> [x]) col) + + + +{----------------------------------------------------------------------------------------- + Float +-----------------------------------------------------------------------------------------} +-- | Make the layout stretchable and align it in the center of the assigned area. +floatCenter :: Layout -> Layout +floatCenter + = floatCentre + +-- | Make the layout stretchable and align it in the center of the assigned area. +floatCentre :: Layout -> Layout +floatCentre + = stretch . alignCentre + +-- | Make the layout stretchable and align it in the top-left corner of the assigned area (default). +floatTopLeft :: Layout -> Layout +floatTopLeft + = stretch . alignTopLeft + +-- | Make the layout stretchable and align it centered on the top of the assigned area. +floatTop :: Layout -> Layout +floatTop + = stretch . alignTop + +-- | Make the layout stretchable and align it to the top-right of the assigned area. +floatTopRight :: Layout -> Layout +floatTopRight + = stretch . alignTopRight + +-- | Make the layout stretchable and align it centered to the left of the assigned area. +floatLeft :: Layout -> Layout +floatLeft + = stretch . alignLeft + +-- | Make the layout stretchable and align it centered to the right of the assigned area. +floatRight :: Layout -> Layout +floatRight + = stretch . alignRight + +-- | Make the layout stretchable and align it to the bottom-left of the assigned area. +floatBottomLeft :: Layout -> Layout +floatBottomLeft + = stretch . alignBottomLeft + +-- | Make the layout stretchable and align it centered on the bottom of the assigned area. +floatBottom :: Layout -> Layout +floatBottom + = stretch . alignBottom + +-- | Make the layout stretchable and align it to the bottom-right of the assigned area. +floatBottomRight :: Layout -> Layout +floatBottomRight + = stretch . alignBottomRight + +-- | Make the layout horizontally stretchable and align to the center. +hfloatCenter :: Layout -> Layout +hfloatCenter + = hfloatCentre + +-- | Make the layout horizontally stretchable and align to the center. +hfloatCentre :: Layout -> Layout +hfloatCentre + = hstretch . alignCentre + +-- | Make the layout horizontally stretchable and align to the left. +hfloatLeft :: Layout -> Layout +hfloatLeft + = hstretch . alignLeft + +-- | Make the layout horizontally stretchable and align to the right. +hfloatRight :: Layout -> Layout +hfloatRight + = hstretch . alignRight + +-- | Make the layout vertically stretchable and align to the center. +vfloatCenter :: Layout -> Layout +vfloatCenter + = vfloatCentre + +-- | Make the layout vertically stretchable and align to the center. +vfloatCentre :: Layout -> Layout +vfloatCentre + = vstretch . alignCentre + +-- | Make the layout vertically stretchable and align to the top. +vfloatTop :: Layout -> Layout +vfloatTop + = vstretch . alignTop + +-- | Make the layout vertically stretchable and align to the bottom. +vfloatBottom :: Layout -> Layout +vfloatBottom + = vstretch . alignBottom + +{----------------------------------------------------------------------------------------- + Alignment +-----------------------------------------------------------------------------------------} +-- | Align the layout in the center of the assigned area. +center :: Layout -> Layout +center + = centre + +-- | Align the layout in the center of the assigned area. +centre :: Layout -> Layout +centre + = alignCentre + +-- | Align the layout in the center of the assigned area. +alignCenter :: Layout -> Layout +alignCenter + = alignCentre + +-- | Align the layout in the center of the assigned area. +alignCentre :: Layout -> Layout +alignCentre + = halignCentre . valignCentre + +-- | Align the layout in the top-left corner of the assigned area (default). +alignTopLeft :: Layout -> Layout +alignTopLeft + = valignTop . halignLeft + +-- | Align the layout centered on the top of the assigned area. +alignTop :: Layout -> Layout +alignTop + = valignTop . halignCentre + +-- | Align the layout to the top-right of the assigned area. +alignTopRight :: Layout -> Layout +alignTopRight + = valignTop . halignRight + +-- | Align the layout centered to the left of the assigned area. +alignLeft :: Layout -> Layout +alignLeft + = valignCentre . halignLeft + +-- | Align the layout centered to the right of the assigned area. +alignRight :: Layout -> Layout +alignRight + = valignCentre . halignRight + +-- | Align the layout to the bottom-left of the assigned area. +alignBottomLeft :: Layout -> Layout +alignBottomLeft + = valignBottom . halignLeft + +-- | Align the layout centered on the bottom of the assigned area. +alignBottom :: Layout -> Layout +alignBottom + = valignBottom . halignCentre + +-- | Align the layout to the bottom-right of the assigned area. +alignBottomRight :: Layout -> Layout +alignBottomRight + = valignBottom . halignRight + +{----------------------------------------------------------------------------------------- + Whitespace +-----------------------------------------------------------------------------------------} + +-- | An empty layout that stretchable in all directions. +glue :: Layout +glue + = stretch empty + +-- | An empty layout that is vertically stretchable. +vglue :: Layout +vglue + = vstretch empty + +-- | An empty layout that is horizontally stretchable. +hglue :: Layout +hglue + = hstretch empty + +-- | An empty layout. (see also 'space'). +empty :: Layout +empty + = space 0 0 + +-- | Horizontal 'space' of a certain width. +hspace :: Int -> Layout +hspace w + = space w 0 + +-- | Vertical 'space' of a certain height. +vspace :: Int -> Layout +vspace h + = space 0 h + + +{----------------------------------------------------------------------------------------- + Primitive layout tranformers +-----------------------------------------------------------------------------------------} + +-- | (primitive) Set the minimal size of a widget. +minsize :: Size -> Layout -> Layout +minsize sz layout + = updateOptions layout (\options -> options{ minSize = Just sz }) + +-- | (primitive) Never resize the layout, but align it in the assigned area +-- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts). +rigid :: Layout -> Layout +rigid layout + = updateOptions layout (\options -> options{ fillMode = FillNone }) + +-- | (primitive) Expand the layout to fill the assigned area but maintain the original proportions +-- of the layout. Note that the layout can still be aligned in a horizontal or vertical direction. +shaped :: Layout -> Layout +shaped layout + = updateOptions layout (\options -> options{ fillMode = FillShaped }) + +-- | (primitive) Expand the layout to fill the assigned area entirely, even when the original proportions can not +-- be maintained. Note that alignment will have no effect on such layout. See also 'fill'. +expand :: Layout -> Layout +expand layout + = updateOptions layout (\options -> options{ fillMode = Fill }) + + +-- | (primitive) The layout is not stretchable. In a 'grid', the row and column that contain this layout will +-- not be resizeable. Note that a 'static' layout can still be assigned an area that is larger +-- than its preferred size due to grid alignment constraints. +-- (default, except for containers like 'grid' and 'boxed' where it depends on the child layouts). +static :: Layout -> Layout +static layout + = updateOptions layout (\options -> options{ stretchV = False, stretchH = False }) + +-- | (primitive) The layout is stretchable and can be assigned a larger area in both the horizontal and vertical +-- direction. See also combinators like 'fill' and 'floatCentre'. +stretch :: Layout -> Layout +stretch layout + = updateOptions layout (\options -> options{ stretchV = True, stretchH = True }) + +-- | (primitive) The layout is stretchable in the vertical direction. See also combinators like 'vfill' and 'vfloatCentre'. +vstretch :: Layout -> Layout +vstretch layout + = updateOptions layout (\options -> options{ stretchV = True, stretchH = False }) + +-- | (primitive) The layout is stretchable in the horizontal direction. See also combinators like 'hfill' and 'hfloatCentre'. +hstretch :: Layout -> Layout +hstretch layout + = updateOptions layout (\options -> options{ stretchH = True, stretchV = False }) + + +-- | Add a margin of a certain width around the entire layout. +margin :: Int -> Layout -> Layout +margin i layout + = updateOptions layout (\options -> options{ margins = [MarginLeft,MarginRight,MarginTop,MarginBottom], marginW = i }) + +-- | (primitive) Set the width of the margin (default is 10 pixels). +marginWidth :: Int -> Layout -> Layout +marginWidth w layout + = updateOptions layout (\options -> options{ marginW = w }) + +-- | (primitive) Remove the margin of a layout (default). +marginNone :: Layout -> Layout +marginNone layout + = updateOptions layout (\options -> options{ margins = [] }) + +-- | (primitive) Add a margin to the left. +marginLeft :: Layout -> Layout +marginLeft layout + = updateOptions layout (\options -> options{ margins = MarginLeft:margins options }) + +-- | (primitive) Add a right margin. +marginRight :: Layout -> Layout +marginRight layout + = updateOptions layout (\options -> options{ margins = MarginRight:margins options }) + +-- | (primitive) Add a margin to the top. +marginTop :: Layout -> Layout +marginTop layout + = updateOptions layout (\options -> options{ margins = MarginTop:margins options }) + +-- | (primitive) Add a margin to the bottom. +marginBottom :: Layout -> Layout +marginBottom layout + = updateOptions layout (\options -> options{ margins = MarginBottom:margins options }) + + +-- | (primitive) Align horizontally to the left when the layout is assigned to a larger area (default). +halignLeft :: Layout -> Layout +halignLeft layout + = updateOptions layout (\options -> options{ alignH = AlignLeft }) + +-- | (primitive) Align horizontally to the right when the layout is assigned to a larger area. +halignRight :: Layout -> Layout +halignRight layout + = updateOptions layout (\options -> options{ alignH = AlignRight }) + +-- | (primitive) Center horizontally when assigned to a larger area. +halignCenter :: Layout -> Layout +halignCenter + = halignCentre + +-- | (primitive) Center horizontally when assigned to a larger area. +halignCentre :: Layout -> Layout +halignCentre layout + = updateOptions layout (\options -> options{ alignH = AlignHCentre }) + +-- | (primitive) Align vertically to the top when the layout is assigned to a larger area (default). +valignTop :: Layout -> Layout +valignTop layout + = updateOptions layout (\options -> options{ alignV = AlignTop }) + +-- | (primitive) Align vertically to the bottom when the layout is assigned to a larger area. +valignBottom :: Layout -> Layout +valignBottom layout + = updateOptions layout (\options -> options{ alignV = AlignBottom }) + +-- | (primitive) Center vertically when the layout is assigned to a larger area. +valignCenter :: Layout -> Layout +valignCenter layout + = valignCentre layout + +-- | (primitive) Center vertically when the layout is assigned to a larger area. +valignCentre :: Layout -> Layout +valignCentre layout + = updateOptions layout (\options -> options{ alignV = AlignVCentre }) + + +-- | Adjust the minimal size of a control dynamically when the content changes. +-- This is used for example to correctly layout static text or buttons when the +-- text or label changes at runtime. This property is automatically set for +-- 'StaticText', 'label's, and 'button's. +dynamic :: Layout -> Layout +dynamic layout + = updateOptions layout (\options -> options{ adjustMinSize = True }) + +updateOptions :: Layout -> (LayoutOptions -> LayoutOptions) -> Layout +updateOptions layout f + = layout{ options = f (options layout) } + +{----------------------------------------------------------------------------------------- + primitive layouts +-----------------------------------------------------------------------------------------} +-- | (primitive) Create a labeled border around a layout (= 'StaticBox'). +-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines +-- the stretch and expansion mode of the box. +boxed :: String -> Layout -> Layout +boxed txt content + = TextBox optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch + , fillMode = hasfill, adjustMinSize = True } + txt (extramargin content) + where + hasvstretch = stretchV (options content) + hashstretch = stretchH (options content) + hasfill = if (hasvstretch || hashstretch) then Fill else FillNone + + extramargin | null (margins (options content)) = marginWidth 5 . marginTop + | otherwise = id + +-- | (primitive) Create a static label label (= 'StaticText'). +label :: String -> Layout +label txt + = Label optionsDefault txt + +-- | (primitive) The expression (@grid w h rows@) creates a grid of @rows@. The @w@ argument +-- is the extra horizontal space between elements and @h@ the extra vertical space between elements. +-- (implemented using the 'FlexGrid' sizer). +-- +-- Only when /all/ elements of a column have horizontal stretch (see 'stretch' and 'hstretch'), the entire +-- column will stretch horizontally, and the same holds for rows with vertical stretch. +-- When any column or row in a grid can stretch, the grid itself will also stretch in that direction +-- and the grid will 'expand' to fill the assigned area by default (instead of being 'static'). +grid :: Int -> Int -> [[Layout]] -> Layout +grid w h rows + = Grid optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } (sz w h) rows + where + hasvstretch = any (all (stretchV.options)) rows + hashstretch = any (all (stretchH.options)) (transpose rows) + hasfill = if (hasvstretch || hashstretch) then Fill else FillNone + +-- | (primitive) Add a container widget (for example, a 'Panel'). +-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines +-- the stretch and expansion mode of the container. +container :: Window a -> Layout -> Layout +container window layout + = WidgetContainer optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } + (downcastWindow window) layout + where + hasvstretch = stretchV (options layout) + hashstretch = stretchH (options layout) + hasfill = if (hasvstretch || hashstretch) then Fill else FillNone + + +-- | (primitive) Lift a basic control to a 'Layout'. +layoutFromWindow :: Window a -> Layout +layoutFromWindow window + = Widget optionsDefault{ adjustMinSize = adjust } (downcastWindow window) + where + adjust = instanceOf window classButton + || instanceOf window classStaticText + + +-- | (primitive) Empty layout with a given width and height. +space :: Int -> Int -> Layout +space w h + = Spacer optionsDefault (Size w h) + +-- | (primitive) A line with a given width and height +rule :: Int -> Int -> Layout +rule w h + = Line optionsDefault (Size w h) + + +-- | A vertical line with a given height. +vrule :: Int -> Layout +vrule h + = rule 1 h + +-- | A horizontal line with a given width. +hrule :: Int -> Layout +hrule w + = rule w 1 + +-- | (primitive) Create a 'Layout' from a 'Sizer' object. +sizer :: Sizer a -> Layout +sizer s + = XSizer optionsDefault (downcastSizer s) + + +-- | A tab page in a notebook: a title, a possible bitmap and a layout. +type TabPage = (String,Bitmap (),Layout) + +-- | Create a simple tab page with a certain title and layout. +tab :: String -> Layout -> TabPage +tab title layout + = (title,objectNull,layout) + +-- | Create a tab page with a certain title, icon, and layout. +imageTab :: String -> Bitmap () -> Layout -> TabPage +imageTab title bitmap layout + = (title,bitmap,layout) + +-- | Create a notebook layout. +-- The pages /always/ need to be embedded inside a 'container' (normally a 'Panel'). +-- Just like a 'grid', the horizontal or vertical stretch of the child layout determines +-- the stretch and expansion mode of the notebook. +tabs :: Notebook a -> [TabPage] -> Layout +tabs notebook pages + = XNotebook optionsDefault{ stretchV = hasvstretch, stretchH = hashstretch, fillMode = hasfill } + (downcastNotebook notebook) pages + where + hasvstretch = all stretchV [options layout | (_,_,layout) <- pages] + hashstretch = all stretchH [options layout | (_,_,layout) <- pages] + hasfill = if (hasvstretch || hashstretch) then Fill else FillNone + +-- | Add a horizontal sash bar between two windows. The two integer +-- arguments specify the width of the sash bar (5) and the initial +-- height of the top pane respectively. +hsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout +hsplit + = split True + +-- | Add a vertical sash bar between two windows. The two integer +-- arguments specify the width of the sash bar (5) and the initial +-- width of the left pane respectively. +vsplit :: SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout +vsplit + = split False + +split :: Bool -> SplitterWindow a -> Int -> Int -> Layout -> Layout -> Layout +split splitHorizontal splitter sashWidth paneWidth pane1 pane2 + = Splitter optionsDefault (downcastSplitterWindow splitter) pane1 pane2 splitHorizontal sashWidth paneWidth + + +optionsDefault :: LayoutOptions +optionsDefault + = LayoutOptions False False [] 10 AlignLeft AlignTop FillNone Nothing False + + + + + +{----------------------------------------------------------------------------------------- + Layout algorithm +-----------------------------------------------------------------------------------------} +-- | Abstract data type that represents the layout of controls in a window. +data Layout = Grid { options :: LayoutOptions, gap :: Size, rows :: [[Layout]] } + | Widget { options :: LayoutOptions, win :: Window () } + | Spacer { options :: LayoutOptions, spacesize :: Size } + | Label { options :: LayoutOptions, txt :: String } + | TextBox { options :: LayoutOptions, txt :: String, content :: Layout } + | Line { options :: LayoutOptions, linesize :: Size } + | XSizer { options :: LayoutOptions, xsizer :: Sizer () } + | WidgetContainer{ options :: LayoutOptions, win :: Window (), content :: Layout } + | XNotebook { options :: LayoutOptions, nbook :: Notebook (), pages :: [(String,Bitmap (),Layout)] } + | Splitter { options :: LayoutOptions, splitter :: SplitterWindow () + , pane1 :: Layout, pane2 :: Layout + , splitHorizontal :: Bool, sashWidth :: Int, paneWidth :: Int } + +data LayoutOptions + = LayoutOptions{ stretchH :: Bool, stretchV :: Bool + , margins :: [Margin], marginW :: Int + , alignH :: HAlign, alignV :: VAlign + , fillMode :: FillMode + , minSize :: Maybe Size + , adjustMinSize :: Bool + } + +data FillMode = FillNone | FillShaped | Fill +data HAlign = AlignLeft | AlignRight | AlignHCentre +data VAlign = AlignTop | AlignBottom | AlignVCentre +data Margin = MarginTop | MarginLeft | MarginRight | MarginBottom + +-- | Fits a widget properly by calling 'windowReLayout' on +-- the parent frame or dialog ('windowGetFrameParent'). +windowReFit :: Window a -> IO () +windowReFit w + = do p <- windowGetFrameParent w + windowReLayout p + +-- | Fits a widget properly by calling 'windowReLayout' on +-- the parent frame or dialog ('windowGetFrameParent'). +windowReFitMinimal :: Window a -> IO () +windowReFitMinimal w + = do p <- windowGetFrameParent w + windowReLayoutMinimal p + +-- | Re-invoke layout algorithm to fit a window around its +-- children. It will enlarge when the current +-- client size is too small, but not shrink when the window +-- is already large enough. (in contrast, 'windowReLayoutMinimal' will +-- also shrink a window so that it always minimally sized). +windowReLayout :: Window a -> IO () +windowReLayout w + = do windowLayout w + old <- windowGetClientSize w + szr <- windowGetSizer w + when (not (objectIsNull szr)) (sizerSetSizeHints szr w) + windowFit w + new <- windowGetClientSize w + windowSetClientSize w (sizeMax old new) + +-- | Re-invoke layout algorithm to fit a window around its +-- children. It will resize the window to its minimal +-- acceptable size ('windowFit'). +windowReLayoutMinimal :: Window a -> IO () +windowReLayoutMinimal w + = do windowLayout w + szr <- windowGetSizer w + when (not (objectIsNull szr)) (sizerSetSizeHints szr w) + windowFit w + +-- | Set the layout of a window (automatically calls 'sizerFromLayout'). +windowSetLayout :: Window a -> Layout -> IO () +windowSetLayout window layout + = do sizer <- sizerFromLayout window layout + windowSetAutoLayout window True + windowSetSizer window sizer + sizerSetSizeHints sizer window + return () + +-- | Create a 'Sizer' from a 'Layout' and a parent window. +sizerFromLayout :: Window a -> Layout -> IO (Sizer ()) +sizerFromLayout parent layout + = insert objectNull (grid 0 0 [[stretch layout]]) + where + insert :: Sizer () -> Layout -> IO (Sizer ()) + insert container (Spacer options sz) + = do sizerAddWithOptions 0 (sizerAdd container sz) (\sz -> return ()) options + return container + + insert container (Widget options win) + = do sizerAddWindowWithOptions container win options + return container + + insert container (Grid goptions gap rows) + = do g <- flexGridSizerCreate (length rows) (maximum (map length rows)) (sizeH gap) (sizeW gap) + mapM_ (stretchRow g) (zip [0..] (map (all (stretchV.options)) rows)) + mapM_ (stretchCol g) (zip [0..] (map (all (stretchH.options)) (transpose rows))) + mapM_ (insert (downcastSizer g)) (concat rows) + when (container /= objectNull) + (sizerAddSizerWithOptions container g goptions) + return (downcastSizer g) + + insert container (Label options txt) + = do t <- staticTextCreate parent idAny txt rectNull 0 + sizerAddWindowWithOptions container t options + return container + + insert container (TextBox options txt layout) + = do box <- staticBoxCreate parent idAny txt rectNull (wxCLIP_CHILDREN .+. wxNO_FULL_REPAINT_ON_RESIZE) + sizer <- staticBoxSizerCreate box wxVERTICAL + insert (downcastSizer sizer) layout + when (container /= objectNull) + (sizerAddSizerWithOptions container sizer options) + windowLower box + return (downcastSizer sizer) + + insert container (Line options (Size w h)) + = do l <- staticLineCreate parent idAny (rectNull{ rectWidth = w, rectHeight = h }) + (if (w >= h) then wxHORIZONTAL else wxVERTICAL) + sizerAddWindowWithOptions container l options + return container + + insert container (XSizer options sizer) + = do sizerAddSizerWithOptions container sizer options + return container + + insert container (WidgetContainer options win layout) + = do windowSetLayout win layout -- recursively set the layout in the window itself + sizerAddWindowWithOptions container win options + return container + + insert container (Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth) + = do splitterWindowSetMinimumPaneSize splitter 20 + -- splitterWindowSetSashSize is obsolete + -- splitterWindowSetSashSize splitter sashWidth + sizerAddWindowWithOptions container splitter options + if splitHorizontal + then splitterWindowSplitHorizontally splitter win1 win2 paneWidth + else splitterWindowSplitVertically splitter win1 win2 paneWidth + paneSetLayout pane1 + paneSetLayout pane2 + + return container + where + win1 = getWinFromLayout pane1 + win2 = getWinFromLayout pane2 + + getWinFromLayout layout + = case layout of + Widget _ win -> downcastWindow win + WidgetContainer _ win _ -> downcastWindow win + Splitter _ splitter _ _ _ _ _ -> downcastWindow splitter + other -> error "Layout: hsplit/vsplit need widgets or containers as arguments" + + paneSetLayout layout + = case layout of + Widget _ win -> return () + WidgetContainer options win layout -> windowSetLayout win layout + Splitter options splitter pane1 pane2 splitHorizontal sashWidth paneWidth + -> do splitterWindowSetMinimumPaneSize splitter 20 + -- splitterWindowSetSashSize is obsolete + -- splitterWindowSetSashSize splitter sashWidth + -- sizerAddWindowWithOptions container splitter options + let win1 = getWinFromLayout pane1 + win2 = getWinFromLayout pane2 + if splitHorizontal + then splitterWindowSplitHorizontally splitter win1 win2 paneWidth + else splitterWindowSplitVertically splitter win1 win2 paneWidth + paneSetLayout pane1 + paneSetLayout pane2 + return () + other -> error "Layout: hsplit/vsplit need widgets or containers as arguments" + + + insert container (XNotebook options nbook pages) + = do pages' <- addImages objectNull pages + mapM_ addPage pages' + sizerAddWindowWithOptions container nbook options + return container + where + addPage (title,idx,WidgetContainer options win layout) + = do pagetitle <- if (null title) + then windowGetLabel win + else return title + notebookAddPage nbook win pagetitle False idx + windowSetLayout win layout -- recursively set layout + + addPage (title,idx,other) + = error "Graphics.UI.WXCore.sizerFromLayout: notebook page needs to be a 'container' layout!" + + addImages il [] + = if (objectIsNull il) + then return [] + else do notebookAssignImageList nbook il + return [] + + addImages il ((title,bm,layout):xs) | objectIsNull bm + = do xs' <- addImages il xs + return ((title,-1,layout):xs') + + addImages il ((title,bm,layout):xs) + = do il' <- addImage il bm + i <- imageListGetImageCount il' + xs' <- addImages il' xs + return ((title,i,layout):xs') + + addImage il bm + = if (objectIsNull il) + then do w <- bitmapGetWidth bm + h <- bitmapGetHeight bm + il <- imageListCreate (sz w h) False 1 + imageListAddBitmap il bm objectNull + return il + else do imageListAddBitmap il bm objectNull + return il + + + stretchRow g (i,stretch) + = when stretch (flexGridSizerAddGrowableRow g i) + + stretchCol g (i,stretch) + = when stretch (flexGridSizerAddGrowableCol g i) + + + + sizerAddWindowWithOptions :: Sizer a -> Window b -> LayoutOptions -> IO () + sizerAddWindowWithOptions container window options + = sizerAddWithOptions (flagsAdjustMinSize window options) + (sizerAddWindow container window) (sizerSetItemMinSizeWindow container window) options + + sizerAddSizerWithOptions :: Sizer a -> Sizer b -> LayoutOptions -> IO () + sizerAddSizerWithOptions container sizer options + = sizerAddWithOptions 0 (sizerAddSizer container sizer) (sizerSetItemMinSizeSizer container sizer) options + + + sizerAddWithOptions :: Int -> (Int -> Int -> Int -> Ptr p -> IO ()) -> (Size -> IO ()) -> LayoutOptions -> IO () + sizerAddWithOptions miscflags addSizer setMinSize options + = do addSizer 1 (flags options .+. miscflags) (marginW options) ptrNull + case minSize options of + Nothing -> return () + Just sz -> setMinSize sz + + flags options + = flagsFillMode (fillMode options) .+. flagsMargins (margins options) + .+. flagsHAlign (alignH options) .+. flagsVAlign (alignV options) + + flagsFillMode fillMode + = case fillMode of + FillNone -> 0 + FillShaped -> wxSHAPED + Fill -> wxEXPAND + + flagsHAlign halign + = case halign of + AlignLeft -> wxALIGN_LEFT + AlignRight -> wxALIGN_RIGHT + AlignHCentre -> wxALIGN_CENTRE_HORIZONTAL + + flagsVAlign valign + = case valign of + AlignTop -> wxALIGN_TOP + AlignBottom -> wxALIGN_BOTTOM + AlignVCentre -> wxALIGN_CENTRE_VERTICAL + + flagsMargins margins + = bits (map flagsMargin margins) + + flagsMargin margin + = case margin of + MarginTop -> wxTOP + MarginLeft -> wxLEFT + MarginBottom -> wxBOTTOM + MarginRight -> wxRIGHT + +-- wxADJUST_MINSIZE is deprecated + flagsAdjustMinSize window options = 0 +{- + = if (adjustMinSize options) + then wxADJUST_MINSIZE + else 0 +-} + +{- + case minSize options of + Nothing | -- dleijen: unfortunately, wxADJUST_MINSIZE has bugs for certain controls: + not ( instanceOf window classGauge || instanceOf window classGauge95 + || instanceOf window classGaugeMSW + || instanceOf window classSlider || instanceOf window classSlider95 + || instanceOf window classSliderMSW + ) + -> wxADJUST_MINSIZE + other -> 0 +-}
src/haskell/Graphics/UI/WXCore/Print.hs view
@@ -1,358 +1,358 @@-------------------------------------------------------------------------------------------{-| Module : Print- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Printer abstraction layer. See @samples/wx/Print.hs@ for a demo.--The application should create a 'pageSetupDialog' to hold the printer-settings of the user.--> f <- frame [text := "Print demo"] -> -> -- Create a pageSetup dialog with an initial margin of 25 mm.-> pageSetup <- pageSetupDialog f 25--The dialog can be shown using 'pageSetupShowModal'. Furthermore, the -function 'printDialog' and 'printPreview' can be used to show a print dialog-and preview window.--> mprint <- menuItem file -> [ text := "&Print..."-> , help := "Print a test"-> , on command := printDialog pageSetup "Test" pageFun printFun-> ]-> mpreview <- menuItem file -> [ text := "&Print preview"-> , help := "Print preview"-> , on command := printPreview pageSetup "Test" pageFun printFun --Those functions take a 'PageFunction' and 'PrintFunction' respectively that get called-to determine the number of needed pages and to draw on the printer DC respectively.-The framework takes automatic care of printer margins, preview scaling etc.---}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Print( -- * Printing- pageSetupDialog- , pageSetupShowModal- , printDialog- , printPreview- -- * Callbacks- , PageFunction- , PrintFunction- -- * Page and printer info- , PageInfo(..)- , PrintInfo(..)- -- * Internal- , pageSetupDataGetPageInfo, pageSetupDataSetPageInfo- , printOutGetPrintInfo- , pageSetupDialogGetFrame- ) where--import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.WxcClassInfo-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Events-import Graphics.UI.WXCore.Frame---- | Return a page range given page info, print info, and the printable size.--- The printable size is the number of pixels available for printing --- without the page margins.-type PageFunction = PageInfo -> PrintInfo -> Size -> (Int,Int)---- | Print a page given page info, print info, the printable size, the--- printer device context and the current page.--- The printable size is the number of pixels available for printing --- without the page margins-type PrintFunction = PageInfo -> PrintInfo -> Size -> DC () -> Int -> IO ()---{--------------------------------------------------------------------------- Handle print events---------------------------------------------------------------------------} --- | The standard print event handler-onPrint :: Bool {- preview? -} - -> PageInfo -> Printout (CWXCPrintout a)- -> PageFunction- -> PrintFunction - -> EventPrint -> IO ()-onPrint isPreview pageInfo printOut pageRangeFunction printFunction ev - = case ev of- PrintPrepare ->- do{ printOutInitPageRange printOut pageInfo pageRangeFunction- ; return ()- }- PrintPage cancel dc n ->- do{ printInfo <- printOutGetPrintInfo printOut- ; let io info size = printFunction pageInfo info size dc n - ; if isPreview - then do let previewInfo = toScreenInfo printInfo- (scaleX,scaleY) <- getPreviewZoom pageInfo previewInfo dc - dcScale dc scaleX scaleY (respectMargin pageInfo previewInfo dc (io previewInfo))- else respectMargin pageInfo printInfo dc (io printInfo)- } - _ -> return ()----- | Set a clipping region and device origin according to the margin-respectMargin :: PageInfo -> PrintInfo -> DC a -> (Size -> IO b) -> IO b-respectMargin pageInfo printInfo dc io- = do let ((left,top),printSize) = printableArea pageInfo printInfo-- -- the device origin is in unscaled coordinates- scaleX <- dcGetUserScaleX dc- scaleY <- dcGetUserScaleY dc- dcSetDeviceOrigin dc (pt (round (scaleX*left)) (round (scaleY*top)))-- -- the clipping respects the scaling- dcSetClippingRegion dc (rect (pt 0 0) printSize)- io printSize---- | Calculate the printable area-printableArea :: PageInfo -> PrintInfo -> ((Double,Double),Size)-printableArea pageInfo printInfo- = let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo)- (ppmmW,ppmmH) = ppiToPPMM (printerPPI printInfo)-- -- calculate minimal printer margin- minX = (toDouble (sizeW (pageSize pageInfo)) - printW)/2 - minY = (toDouble (sizeH (pageSize pageInfo)) - printH)/2-- -- top-left margin- top = ppmmH * (max minY (toDouble $ rectTop $ pageArea pageInfo))- left = ppmmW * (max minX (toDouble $ rectLeft $ pageArea pageInfo))-- -- bottom-right margin- (Point mright mbottom) - = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo)) - bottom= ppmmH * (max minY (toDouble mbottom))- right = ppmmW * (max minX (toDouble mright))-- dw = round (right + left)- dh = round (bottom + top)- (dw', dh') = if sizeW (printPageSize printInfo) < sizeH (printPageSize printInfo)- then (dw, dh)- else (dh, dw)-- -- the actual printable page size- printSize = sz (sizeW (printPageSize printInfo) - dw') - (sizeH (printPageSize printInfo) - dh')- in ((left,top),printSize) ---- | Get the zoom factor from the preview -getPreviewZoom :: PageInfo -> PrintInfo -> DC a -> IO (Double,Double)-getPreviewZoom pageInfo printInfo dc- = do size <- dcGetSize dc- let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo)- (screenW,screenH) = pixelToMM (screenPPI printInfo) size- scaleX = screenW / printW- scaleY = screenH / printH- return (scaleX,scaleY)----- | Transform printer info to screen printer info (for the preview).-toScreenInfo :: PrintInfo -> PrintInfo-toScreenInfo printInfo- = let scaleX = (toDouble (sizeW (screenPPI printInfo))) / (toDouble (sizeW (printerPPI printInfo)))- scaleY = (toDouble (sizeH (screenPPI printInfo))) / (toDouble (sizeH (printerPPI printInfo)))- pxX = round (scaleX * (toDouble (sizeW (printPageSize printInfo))))- pxY = round (scaleY * (toDouble (sizeH (printPageSize printInfo))))- in printInfo{ printerPPI = screenPPI printInfo- , printPageSize = sz pxX pxY- }---- | Pixels to millimeters given a PPI-pixelToMM :: Size -> Size -> (Double,Double)-pixelToMM ppi size- = let convert f = toDouble (f size) / (toDouble (f ppi) / 25.4)- in (convert sizeW, convert sizeH)---- | pixels per inch to pixels per millimeter-ppiToPPMM :: Size -> (Double,Double)-ppiToPPMM ppi- = let convert f = toDouble (f ppi) / 25.4- in (convert sizeW, convert sizeH)---- | Convert an 'Int' to a 'Double'.-toDouble :: Int -> Double-toDouble i = fromIntegral i---- | Scale the 'DC'.-dcScale :: DC a -> Double -> Double -> IO b -> IO b-dcScale dc scaleX scaleY io- = do oldX <- dcGetUserScaleX dc- oldY <- dcGetUserScaleY dc- dcSetUserScale dc (oldX*scaleX) (oldY*scaleY)- x <- io- dcSetUserScale dc oldX oldY- return x--{--------------------------------------------------------------------------- preview and printIt---------------------------------------------------------------------------}--- | Show a print dialog.-printDialog :: PageSetupDialog a - -> String- -> PageFunction- -> PrintFunction - -> IO ()-printDialog pageSetupDialog title pageRangeFunction printFunction =- do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog- ; printData <- pageSetupDialogDataGetPrintData pageSetupData- ; printDialogData <- printDialogDataCreateFromData printData- ; printDialogDataSetAllPages printDialogData True - ; printer <- printerCreate printDialogData- ; printout <- wxcPrintoutCreate title- ; pageInfo <- pageSetupDataGetPageInfo pageSetupData- ; printOutInitPageRange printout pageInfo pageRangeFunction- ; printOutOnPrint printout (onPrint False pageInfo printout pageRangeFunction printFunction)- ; frame <- pageSetupDialogGetFrame pageSetupDialog- ; printerPrint printer frame printout True {- show printer setup? -}- ; objectDelete printDialogData- ; objectDelete printout- ; objectDelete printer- }---- | Show a preview window-printPreview :: PageSetupDialog a - -> String- -> PageFunction- -> PrintFunction- -> IO ()-printPreview pageSetupDialog title pageRangeFunction printFunction =- do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog- ; pageInfo <- pageSetupDataGetPageInfo pageSetupData- ; printout1 <- wxcPrintoutCreate "Print to preview"- ; printout2 <- wxcPrintoutCreate "Print to printer"- ; startPage <- printOutInitPageRange printout1 pageInfo pageRangeFunction- ; printOutInitPageRange printout2 pageInfo pageRangeFunction- ; printOutOnPrint printout1 (onPrint True pageInfo printout1 pageRangeFunction printFunction)- ; printOutOnPrint printout2 (onPrint False pageInfo printout2 pageRangeFunction printFunction)- ; printData <- pageSetupDialogDataGetPrintData pageSetupData- ; printDialogData <- printDialogDataCreateFromData printData- ; printDialogDataSetAllPages printDialogData True - ; preview <- printPreviewCreateFromDialogData printout1 printout2 printDialogData- ; printPreviewSetCurrentPage preview startPage- ; frame <- pageSetupDialogGetFrame pageSetupDialog- ; previewFrame <- previewFrameCreate preview frame title rectNull frameDefaultStyle title- ; previewFrameInitialize previewFrame- ; windowShow previewFrame - ; windowRaise previewFrame- }---{--------------------------------------------------------------------------- Class helpers---------------------------------------------------------------------------}---- | Set the correct page range for a printout.-printOutInitPageRange :: WXCPrintout a -> PageInfo -> PageFunction -> IO Int-printOutInitPageRange printOut pageInfo pageRangeFunction- = do{ printInfo <- printOutGetPrintInfo printOut- ; let (_,size) = printableArea pageInfo printInfo- (start,end) = pageRangeFunction pageInfo printInfo size- ; wxcPrintoutSetPageLimits printOut start end start end- ; return start- }----- | Get the parent frame of a 'PageSetupDialog'.-pageSetupDialogGetFrame :: PageSetupDialog a -> IO (Frame ())-pageSetupDialogGetFrame pageSetupDialog- = do p <- windowGetParent pageSetupDialog - case (safeCast p classFrame) of- Just frame -> return frame- Nothing -> do w <- wxcAppGetTopWindow- case (safeCast w classFrame) of- Just frame -> return frame- Nothing -> error "pageSetupDialogGetFrame: no parent frame found!"---{--------------------------------------------------------------------------- PageSetupDialog ---------------------------------------------------------------------------} --- | Create a (hidden) page setup dialog that remembers printer settings.--- It is a parameter to the functions 'printDialog' and 'printPreview'.--- The creation function takes a parent frame and the initial page margins--- (in millimeters) as an argument.-pageSetupDialog :: Frame a -> Int -> IO (PageSetupDialog ())-pageSetupDialog f margin- = do pageSetupData <- pageSetupDialogDataCreate- if (margin > 0)- then do pageInfo <- pageSetupDataGetPageInfo pageSetupData- let p0 = pt margin margin- p1 = pointSub (pointFromSize (pageSize pageInfo)) p0- newInfo = pageInfo{ pageArea = rectBetween p0 p1 }- pageSetupDataSetPageInfo pageSetupData newInfo- else return () - pageSetupDialog <- pageSetupDialogCreate f pageSetupData- prev <- windowGetOnClose f- windowOnClose f (do{ objectDelete pageSetupDialog; prev })- objectDelete pageSetupData- return pageSetupDialog---- | Show the page setup dialog-pageSetupShowModal :: PageSetupDialog a -> IO ()-pageSetupShowModal p- = do dialogShowModal p- return ()--{--------------------------------------------------------------------------- PageInfo and PrintInfo---------------------------------------------------------------------------}---- | Information from the page setup dialog.--- All measurements are in millimeters.-data PageInfo = PageInfo{ pageSize :: Size -- ^ The page size (in millimeters)- , pageArea :: Rect -- ^ The available page area (=margins) (in millimeters)- } - deriving Show---- | Get page info-pageSetupDataGetPageInfo :: PageSetupDialogData a -> IO PageInfo-pageSetupDataGetPageInfo pageSetupData - = do{ topLeft <- pageSetupDialogDataGetMarginTopLeft pageSetupData- ; bottomRight <- pageSetupDialogDataGetMarginBottomRight pageSetupData- ; paperSize <- pageSetupDialogDataGetPaperSize pageSetupData- ; return (PageInfo- { pageSize = paperSize- , pageArea = rectBetween topLeft (pointSub (pointFromSize paperSize) bottomRight)- })- }---- | Set page info-pageSetupDataSetPageInfo :: PageSetupDialogData a -> PageInfo -> IO ()-pageSetupDataSetPageInfo pageSetupData pageInfo- = do{ let topLeft = rectTopLeft (pageArea pageInfo)- bottomRight = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo))- ; pageSetupDialogDataSetMarginTopLeft pageSetupData topLeft- ; pageSetupDialogDataSetMarginBottomRight pageSetupData bottomRight- ; pageSetupDialogDataSetPaperSize pageSetupData (pageSize pageInfo)- }----- | Printer information.-data PrintInfo = PrintInfo { screenPPI :: Size -- ^ screen pixels per inch- , printerPPI :: Size -- ^ printer pixels per inch- , printPageSize :: Size -- ^ printable area (in pixels) = PageInfo pageSize minus printer margins- } deriving Show---- | Extract print info -printOutGetPrintInfo :: Printout a -> IO PrintInfo-printOutGetPrintInfo printOut - = do{ thePrinterPPI <- printoutGetPPIPrinter printOut- ; theScreenPPI <- printoutGetPPIScreen printOut- ; thePageSizePixels <- printoutGetPageSizePixels printOut- ; return (PrintInfo - { printerPPI = sizeFromPoint thePrinterPPI- , screenPPI = sizeFromPoint theScreenPPI- , printPageSize = thePageSizePixels- })- } -+----------------------------------------------------------------------------------------- +{-| Module : Print + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Printer abstraction layer. See @samples/wx/Print.hs@ for a demo. + +The application should create a 'pageSetupDialog' to hold the printer +settings of the user. + +> f <- frame [text := "Print demo"] +> +> -- Create a pageSetup dialog with an initial margin of 25 mm. +> pageSetup <- pageSetupDialog f 25 + +The dialog can be shown using 'pageSetupShowModal'. Furthermore, the +function 'printDialog' and 'printPreview' can be used to show a print dialog +and preview window. + +> mprint <- menuItem file +> [ text := "&Print..." +> , help := "Print a test" +> , on command := printDialog pageSetup "Test" pageFun printFun +> ] +> mpreview <- menuItem file +> [ text := "&Print preview" +> , help := "Print preview" +> , on command := printPreview pageSetup "Test" pageFun printFun + +Those functions take a 'PageFunction' and 'PrintFunction' respectively that get called +to determine the number of needed pages and to draw on the printer DC respectively. +The framework takes automatic care of printer margins, preview scaling etc. + +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Print( -- * Printing + pageSetupDialog + , pageSetupShowModal + , printDialog + , printPreview + -- * Callbacks + , PageFunction + , PrintFunction + -- * Page and printer info + , PageInfo(..) + , PrintInfo(..) + -- * Internal + , pageSetupDataGetPageInfo, pageSetupDataSetPageInfo + , printOutGetPrintInfo + , pageSetupDialogGetFrame + ) where + +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.WxcClassInfo +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Events +import Graphics.UI.WXCore.Frame + +-- | Return a page range given page info, print info, and the printable size. +-- The printable size is the number of pixels available for printing +-- without the page margins. +type PageFunction = PageInfo -> PrintInfo -> Size -> (Int,Int) + +-- | Print a page given page info, print info, the printable size, the +-- printer device context and the current page. +-- The printable size is the number of pixels available for printing +-- without the page margins +type PrintFunction = PageInfo -> PrintInfo -> Size -> DC () -> Int -> IO () + + +{-------------------------------------------------------------------------- + Handle print events +--------------------------------------------------------------------------} +-- | The standard print event handler +onPrint :: Bool {- preview? -} + -> PageInfo -> Printout (CWXCPrintout a) + -> PageFunction + -> PrintFunction + -> EventPrint -> IO () +onPrint isPreview pageInfo printOut pageRangeFunction printFunction ev + = case ev of + PrintPrepare -> + do{ printOutInitPageRange printOut pageInfo pageRangeFunction + ; return () + } + PrintPage cancel dc n -> + do{ printInfo <- printOutGetPrintInfo printOut + ; let io info size = printFunction pageInfo info size dc n + ; if isPreview + then do let previewInfo = toScreenInfo printInfo + (scaleX,scaleY) <- getPreviewZoom pageInfo previewInfo dc + dcScale dc scaleX scaleY (respectMargin pageInfo previewInfo dc (io previewInfo)) + else respectMargin pageInfo printInfo dc (io printInfo) + } + _ -> return () + + +-- | Set a clipping region and device origin according to the margin +respectMargin :: PageInfo -> PrintInfo -> DC a -> (Size -> IO b) -> IO b +respectMargin pageInfo printInfo dc io + = do let ((left,top),printSize) = printableArea pageInfo printInfo + + -- the device origin is in unscaled coordinates + scaleX <- dcGetUserScaleX dc + scaleY <- dcGetUserScaleY dc + dcSetDeviceOrigin dc (pt (round (scaleX*left)) (round (scaleY*top))) + + -- the clipping respects the scaling + dcSetClippingRegion dc (rect (pt 0 0) printSize) + io printSize + +-- | Calculate the printable area +printableArea :: PageInfo -> PrintInfo -> ((Double,Double),Size) +printableArea pageInfo printInfo + = let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo) + (ppmmW,ppmmH) = ppiToPPMM (printerPPI printInfo) + + -- calculate minimal printer margin + minX = (toDouble (sizeW (pageSize pageInfo)) - printW)/2 + minY = (toDouble (sizeH (pageSize pageInfo)) - printH)/2 + + -- top-left margin + top = ppmmH * (max minY (toDouble $ rectTop $ pageArea pageInfo)) + left = ppmmW * (max minX (toDouble $ rectLeft $ pageArea pageInfo)) + + -- bottom-right margin + (Point mright mbottom) + = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo)) + bottom= ppmmH * (max minY (toDouble mbottom)) + right = ppmmW * (max minX (toDouble mright)) + + dw = round (right + left) + dh = round (bottom + top) + (dw', dh') = if sizeW (printPageSize printInfo) < sizeH (printPageSize printInfo) + then (dw, dh) + else (dh, dw) + + -- the actual printable page size + printSize = sz (sizeW (printPageSize printInfo) - dw') + (sizeH (printPageSize printInfo) - dh') + in ((left,top),printSize) + +-- | Get the zoom factor from the preview +getPreviewZoom :: PageInfo -> PrintInfo -> DC a -> IO (Double,Double) +getPreviewZoom pageInfo printInfo dc + = do size <- dcGetSize dc + let (printW,printH) = pixelToMM (printerPPI printInfo) (printPageSize printInfo) + (screenW,screenH) = pixelToMM (screenPPI printInfo) size + scaleX = screenW / printW + scaleY = screenH / printH + return (scaleX,scaleY) + + +-- | Transform printer info to screen printer info (for the preview). +toScreenInfo :: PrintInfo -> PrintInfo +toScreenInfo printInfo + = let scaleX = (toDouble (sizeW (screenPPI printInfo))) / (toDouble (sizeW (printerPPI printInfo))) + scaleY = (toDouble (sizeH (screenPPI printInfo))) / (toDouble (sizeH (printerPPI printInfo))) + pxX = round (scaleX * (toDouble (sizeW (printPageSize printInfo)))) + pxY = round (scaleY * (toDouble (sizeH (printPageSize printInfo)))) + in printInfo{ printerPPI = screenPPI printInfo + , printPageSize = sz pxX pxY + } + +-- | Pixels to millimeters given a PPI +pixelToMM :: Size -> Size -> (Double,Double) +pixelToMM ppi size + = let convert f = toDouble (f size) / (toDouble (f ppi) / 25.4) + in (convert sizeW, convert sizeH) + +-- | pixels per inch to pixels per millimeter +ppiToPPMM :: Size -> (Double,Double) +ppiToPPMM ppi + = let convert f = toDouble (f ppi) / 25.4 + in (convert sizeW, convert sizeH) + +-- | Convert an 'Int' to a 'Double'. +toDouble :: Int -> Double +toDouble i = fromIntegral i + +-- | Scale the 'DC'. +dcScale :: DC a -> Double -> Double -> IO b -> IO b +dcScale dc scaleX scaleY io + = do oldX <- dcGetUserScaleX dc + oldY <- dcGetUserScaleY dc + dcSetUserScale dc (oldX*scaleX) (oldY*scaleY) + x <- io + dcSetUserScale dc oldX oldY + return x + +{-------------------------------------------------------------------------- + preview and printIt +--------------------------------------------------------------------------} +-- | Show a print dialog. +printDialog :: PageSetupDialog a + -> String + -> PageFunction + -> PrintFunction + -> IO () +printDialog pageSetupDialog title pageRangeFunction printFunction = + do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog + ; printData <- pageSetupDialogDataGetPrintData pageSetupData + ; printDialogData <- printDialogDataCreateFromData printData + ; printDialogDataSetAllPages printDialogData True + ; printer <- printerCreate printDialogData + ; printout <- wxcPrintoutCreate title + ; pageInfo <- pageSetupDataGetPageInfo pageSetupData + ; printOutInitPageRange printout pageInfo pageRangeFunction + ; printOutOnPrint printout (onPrint False pageInfo printout pageRangeFunction printFunction) + ; frame <- pageSetupDialogGetFrame pageSetupDialog + ; printerPrint printer frame printout True {- show printer setup? -} + ; objectDelete printDialogData + ; objectDelete printout + ; objectDelete printer + } + +-- | Show a preview window +printPreview :: PageSetupDialog a + -> String + -> PageFunction + -> PrintFunction + -> IO () +printPreview pageSetupDialog title pageRangeFunction printFunction = + do{ pageSetupData <- pageSetupDialogGetPageSetupData pageSetupDialog + ; pageInfo <- pageSetupDataGetPageInfo pageSetupData + ; printout1 <- wxcPrintoutCreate "Print to preview" + ; printout2 <- wxcPrintoutCreate "Print to printer" + ; startPage <- printOutInitPageRange printout1 pageInfo pageRangeFunction + ; printOutInitPageRange printout2 pageInfo pageRangeFunction + ; printOutOnPrint printout1 (onPrint True pageInfo printout1 pageRangeFunction printFunction) + ; printOutOnPrint printout2 (onPrint False pageInfo printout2 pageRangeFunction printFunction) + ; printData <- pageSetupDialogDataGetPrintData pageSetupData + ; printDialogData <- printDialogDataCreateFromData printData + ; printDialogDataSetAllPages printDialogData True + ; preview <- printPreviewCreateFromDialogData printout1 printout2 printDialogData + ; printPreviewSetCurrentPage preview startPage + ; frame <- pageSetupDialogGetFrame pageSetupDialog + ; previewFrame <- previewFrameCreate preview frame title rectNull frameDefaultStyle title + ; previewFrameInitialize previewFrame + ; windowShow previewFrame + ; windowRaise previewFrame + } + + +{-------------------------------------------------------------------------- + Class helpers +--------------------------------------------------------------------------} + +-- | Set the correct page range for a printout. +printOutInitPageRange :: WXCPrintout a -> PageInfo -> PageFunction -> IO Int +printOutInitPageRange printOut pageInfo pageRangeFunction + = do{ printInfo <- printOutGetPrintInfo printOut + ; let (_,size) = printableArea pageInfo printInfo + (start,end) = pageRangeFunction pageInfo printInfo size + ; wxcPrintoutSetPageLimits printOut start end start end + ; return start + } + + +-- | Get the parent frame of a 'PageSetupDialog'. +pageSetupDialogGetFrame :: PageSetupDialog a -> IO (Frame ()) +pageSetupDialogGetFrame pageSetupDialog + = do p <- windowGetParent pageSetupDialog + case (safeCast p classFrame) of + Just frame -> return frame + Nothing -> do w <- wxcAppGetTopWindow + case (safeCast w classFrame) of + Just frame -> return frame + Nothing -> error "pageSetupDialogGetFrame: no parent frame found!" + + +{-------------------------------------------------------------------------- + PageSetupDialog +--------------------------------------------------------------------------} +-- | Create a (hidden) page setup dialog that remembers printer settings. +-- It is a parameter to the functions 'printDialog' and 'printPreview'. +-- The creation function takes a parent frame and the initial page margins +-- (in millimeters) as an argument. +pageSetupDialog :: Frame a -> Int -> IO (PageSetupDialog ()) +pageSetupDialog f margin + = do pageSetupData <- pageSetupDialogDataCreate + if (margin > 0) + then do pageInfo <- pageSetupDataGetPageInfo pageSetupData + let p0 = pt margin margin + p1 = pointSub (pointFromSize (pageSize pageInfo)) p0 + newInfo = pageInfo{ pageArea = rectBetween p0 p1 } + pageSetupDataSetPageInfo pageSetupData newInfo + else return () + pageSetupDialog <- pageSetupDialogCreate f pageSetupData + prev <- windowGetOnClose f + windowOnClose f (do{ objectDelete pageSetupDialog; prev }) + objectDelete pageSetupData + return pageSetupDialog + +-- | Show the page setup dialog +pageSetupShowModal :: PageSetupDialog a -> IO () +pageSetupShowModal p + = do dialogShowModal p + return () + +{-------------------------------------------------------------------------- + PageInfo and PrintInfo +--------------------------------------------------------------------------} + +-- | Information from the page setup dialog. +-- All measurements are in millimeters. +data PageInfo = PageInfo{ pageSize :: Size -- ^ The page size (in millimeters) + , pageArea :: Rect -- ^ The available page area (=margins) (in millimeters) + } + deriving Show + +-- | Get page info +pageSetupDataGetPageInfo :: PageSetupDialogData a -> IO PageInfo +pageSetupDataGetPageInfo pageSetupData + = do{ topLeft <- pageSetupDialogDataGetMarginTopLeft pageSetupData + ; bottomRight <- pageSetupDialogDataGetMarginBottomRight pageSetupData + ; paperSize <- pageSetupDialogDataGetPaperSize pageSetupData + ; return (PageInfo + { pageSize = paperSize + , pageArea = rectBetween topLeft (pointSub (pointFromSize paperSize) bottomRight) + }) + } + +-- | Set page info +pageSetupDataSetPageInfo :: PageSetupDialogData a -> PageInfo -> IO () +pageSetupDataSetPageInfo pageSetupData pageInfo + = do{ let topLeft = rectTopLeft (pageArea pageInfo) + bottomRight = pointSub (pointFromSize (pageSize pageInfo)) (rectBottomRight (pageArea pageInfo)) + ; pageSetupDialogDataSetMarginTopLeft pageSetupData topLeft + ; pageSetupDialogDataSetMarginBottomRight pageSetupData bottomRight + ; pageSetupDialogDataSetPaperSize pageSetupData (pageSize pageInfo) + } + + +-- | Printer information. +data PrintInfo = PrintInfo { screenPPI :: Size -- ^ screen pixels per inch + , printerPPI :: Size -- ^ printer pixels per inch + , printPageSize :: Size -- ^ printable area (in pixels) = PageInfo pageSize minus printer margins + } deriving Show + +-- | Extract print info +printOutGetPrintInfo :: Printout a -> IO PrintInfo +printOutGetPrintInfo printOut + = do{ thePrinterPPI <- printoutGetPPIPrinter printOut + ; theScreenPPI <- printoutGetPPIScreen printOut + ; thePageSizePixels <- printoutGetPageSizePixels printOut + ; return (PrintInfo + { printerPPI = sizeFromPoint thePrinterPPI + , screenPPI = sizeFromPoint theScreenPPI + , printPageSize = thePageSizePixels + }) + } +
src/haskell/Graphics/UI/WXCore/Process.hs view
@@ -1,314 +1,314 @@-------------------------------------------------------------------------------------------{-| Module : Process- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Process and stream wrappers.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Process- (- -- * Process- OnReceive, OnEndProcess- , processExecAsyncTimed, processExecAsync- -- * Streams- , StreamStatus(..)- , streamBaseStatus- -- * Blocking IO- , inputStreamGetContents- , inputStreamGetContentsN- , inputStreamGetLine- , inputStreamGetString- , inputStreamGetChar- , outputStreamPutString- -- * Non-blocking IO- , inputStreamGetLineNoWait- , inputStreamGetStringNoWait- , inputStreamGetCharNoWait- , outputStreamPutStringNoWait- ) where--import System.IO.Unsafe( unsafeInterleaveIO )-import Graphics.UI.WXCore.WxcTypes( ptrCast )-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses-import Graphics.UI.WXCore.Types-import Graphics.UI.WXCore.Events--import Foreign-import Foreign.Ptr-import Foreign.Storable-import Foreign.C.String-import Foreign.C.Types-- ---- | Write a string to an output stream, potentially blocking--- until all output has been written.-outputStreamPutString :: OutputStream a -> String -> IO ()-outputStreamPutString outputStream s- = withCString s $ \cstr -> write cstr (length s)- where- write cstr n- = do outputStreamWrite outputStream cstr n- m <- outputStreamLastWrite outputStream- if (m < n && m > 0 {- prevent infinite loop -} )- then write (advancePtr cstr m) (n - m)- else return ()- ---- | Write a string to an output stream, returning the--- number of bytes actually written.-outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int-outputStreamPutStringNoWait outputStream s- = withCString s $ \cstr ->- do outputStreamWrite outputStream cstr (length s)- outputStreamLastWrite outputStream---- | @inputStreamGetLineNoWait stream n@ reads a line of at most @n@ characters from the--- input stream in a non-blocking way. The function does automatic end-of-line--- conversion. If the line ends with @\\n@, an entire line--- has been read, otherwise, either the maximum has been reached, or no more--- input was available.-inputStreamGetLineNoWait :: InputStream a -> Int -> IO String-inputStreamGetLineNoWait inputStream max- = read "" 0- where- read acc n- = if n >= max- then return (reverse acc)- else do mbc <- inputStreamGetCharNoWait inputStream- case mbc of- Nothing -> return (reverse acc)- Just '\n' -> return (reverse ('\n':acc))- Just '\r' -> do mbc2 <- inputStreamGetCharNoWait inputStream- case mbc2 of- Just c2 | c2 /= '\n' -> do inputStreamUngetch inputStream c2- return ()- _ -> return ()- return (reverse ('\n':acc))- Just c -> read (c:acc) (n+1)---- | @inputStreamGetStringNoWait stream n@ reads a line of at most @n@ characters from the--- input stream in a non-blocking way. -inputStreamGetStringNoWait :: InputStream a -> Int -> IO String-inputStreamGetStringNoWait input max- = read "" 0- where- read acc n- = if ( n >= max )- then return (reverse acc)- else do mbc <- inputStreamGetCharNoWait input- case mbc of- Nothing -> return (reverse acc)- Just c -> read (c:acc) (n+1)----- | Read a single character from the input, returning @Nothing@ if no input--- was available (using 'inputStreamCanRead').-inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char)-inputStreamGetCharNoWait input- = do canRead <- inputStreamCanRead input- if canRead- then do c <- inputStreamGetC input- return (Just c)- else return Nothing----- | @inputStreamGetLine s n@ reads a line of at most @n@ characters from the--- input stream (potentially waiting for input). The function does automatic end-of-line--- conversion. If the line ends with @\\n@, an entire line--- has been read, otherwise, either the maximum has been reached, or no more--- input was available.-inputStreamGetLine :: InputStream a -> Int -> IO String-inputStreamGetLine inputStream max- = read "" 0- where- read acc n- = if n >= max- then return (reverse acc)- else do c <- inputStreamGetChar inputStream- case c of- '\n' -> return (reverse ('\n':acc))- '\r' -> do mbc2 <- inputStreamGetCharNoWait inputStream- case mbc2 of- Just c2 | c2 /= '\n' -> do inputStreamUngetch inputStream c2- return ()- _ -> return ()- return (reverse ('\n':acc))- _ -> read (c:acc) (n+1)---- | Read a single character from the input. (equals 'inputStreamGetC')-inputStreamGetChar :: InputStream a -> IO Char-inputStreamGetChar input- = inputStreamGetC input----- | The expression (@inputStreamGetString n input@) reads a string of maximally--- @n@ characters from @input@.-inputStreamGetString :: InputStream a -> Int -> IO String-inputStreamGetString inputStream n- = allocaBytes (n+1) $ \buffer ->- do inputStreamRead inputStream buffer n- nread <- inputStreamLastRead inputStream- mapM (peekChar buffer) [0..nread-1]- where - peekChar :: Ptr CChar -> Int -> IO Char- peekChar p ofs- = do cchar <- peekElemOff p ofs- return (castCCharToChar cchar)------ | Get the entire contents of an input stream. The content--- is returned as a lazy stream (like 'hGetContents').-inputStreamGetContents :: InputStream a -> IO String-inputStreamGetContents inputStream- = inputStreamGetContentsN inputStream 1---- | Get the entire contents of an input stream. The content--- is returned as a lazy stream (like 'hGetContents'). The--- contents are returned in lazy /batches/, whose size is--- determined by the first parameter.-inputStreamGetContentsN :: InputStream a -> Int -> IO String-inputStreamGetContentsN inputStream n- = do status <- streamBaseGetLastError inputStream- if (status == wxSTREAM_NO_ERROR)- then do x <- inputStreamGetString inputStream n- xs <- unsafeInterleaveIO (inputStreamGetContentsN inputStream n)- return (x ++ xs)- else return ""---- | Return the status of the stream-streamBaseStatus :: StreamBase a -> IO StreamStatus-streamBaseStatus stream- = do code <- streamBaseGetLastError stream- return (streamStatusFromInt code)---- | Type of input receiver function.-type OnReceive = String -> StreamStatus -> IO ()---- | Type of end-of-process event handler. Gets the exitcode as its argument.-type OnEndProcess = Int -> IO ()------ | (@processExecAsyncTimer command processOutputOnEnd onEndProcess onOutput onErrorOutput parent@) starts--- the @command@ asynchronously. The handler @onEndProcess@ is called when the process--- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives--- output from @stderr@. If @processOutputOnEnd@ is 'True', the remaining output of a terminated--- process is processed (calling @onOutput@). The call returns a triple (@send,process,pid@):--- The @send@ function is used to send input to the @stdin@ pipe of the process. The--- process object is returned in @process@ and the process identifier in @pid@.------ Note: The method uses idle event timers to process the output channels. On--- many platforms this is uch more thrustworthy and robust than the 'processExecAsync' that--- uses threads (which can cause all kinds of portability problems).-processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive- -> IO (String -> IO StreamStatus, Process (), Int)-processExecAsyncTimed parent cmd readInputOnEnd onEndProcess onOutput onErrOutput- = do process <- processCreateDefault parent idAny- processRedirect process- pid <- wxcAppExecuteProcess cmd wxEXEC_ASYNC process- if (pid == 0)- then return (\s -> return StreamEof, objectNull, pid)- else do v <- varCreate (Just process)- windowOnIdle parent (handleAnyInput v)- unregister <- appRegisterIdle 100 -- 10 times a second- evtHandlerOnEndProcess parent (handleTerminate v unregister)- let send txt = handleSend v txt- return (send, process, pid)- where- maxLine :: Int- maxLine = 160-- handleSend :: Var (Maybe (Process a)) -> String -> IO StreamStatus- handleSend v txt- = withProcess v StreamEof $ \process ->- do outputPipe <- processGetOutputStream process- outputStreamPutString outputPipe txt -- TODO: use idle events to do output non-blocking?- streamBaseStatus outputPipe- - handleAnyInput :: Var (Maybe (Process a)) -> IO Bool- handleAnyInput v- = withProcess v False $ \process ->- do inputPipe <- processGetInputStream process - available <- handleInput inputPipe onOutput -- process some input on stdout- errorPipe <- processGetErrorStream process - handleAllInput errorPipe onErrOutput -- process all input on stderr- return available-- handleAllInput :: InputStream a -> OnReceive -> IO ()- handleAllInput input onOutput - = do available <- handleInput input onOutput- if (available)- then handleAllInput input onOutput- else return ()- - handleInput :: InputStream a -> OnReceive -> IO Bool- handleInput input onOutput - = do txt <- inputStreamGetLineNoWait input maxLine- status <- streamBaseStatus input- if null txt - then case status of- StreamOk -> return False- _ -> do onOutput "" status- return False- else do onOutput txt status- return True-- handleTerminate :: Var (Maybe (Process a)) -> IO () -> Int -> Int -> IO ()- handleTerminate v unregister pid exitCode- = do unregister- withProcess v () $ \process -> - do varSet v Nothing- if (readInputOnEnd)- then do inputPipe <- processGetInputStream process- handleAllInput inputPipe onOutput -- handle remaining input- else return ()- onEndProcess exitCode- processDelete process - return ()-- withProcess v x f- = do mb <- varGet v - case mb of- Nothing -> return x- Just p -> f p----{-# DEPRECATED processExecAsync "Use processExecAsyncTimed instead (if possible)" #-}--- | deprecated: use 'processExecAsyncTimed' instead (if possible).--- (@processExecAsync command bufferSize onEndProcess onOutput onErrorOutput parent@) starts--- the @command@ asynchronously. The handler @onEndProcess@ is called when the process--- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives--- output from @stderr@. The @bufferSize@ determines the intermediate buffer used to--- cache the output from those channels. The calls returns a triple (@send,process,pid@):--- The @send@ function is used to send input to the @stdin@ pipe of the process. The--- process object is returned in @process@ and the process identifier in @pid@.-processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive- -> IO (String -> IO (), Process (), Int)-processExecAsync parent command bufferSize onEndProcess onOutput onErrOutput- = do process <- processCreateDefault parent idAny- processRedirect process- pid <- wxcAppExecuteProcess command wxEXEC_ASYNC process- if (pid == 0)- then return (\s -> return (), objectNull, pid)- else do inputPipe <- processGetInputStream process- outputPipe <- processGetOutputStream process- errorPipe <- processGetErrorStream process- evtHandlerOnEndProcess parent (handleOnEndProcess pid process inputPipe outputPipe errorPipe)- evtHandlerOnInput parent onOutput inputPipe bufferSize- evtHandlerOnInput parent onErrOutput errorPipe bufferSize- let send txt = outputStreamPutString outputPipe txt- return (send, process, pid)- where- handleOnEndProcess ourPid process inputPipe outputPipe errorPipe pid exitcode- | ourPid == pid = do onEndProcess exitcode- processDelete process+----------------------------------------------------------------------------------------- +{-| Module : Process + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Process and stream wrappers. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Process + ( + -- * Process + OnReceive, OnEndProcess + , processExecAsyncTimed, processExecAsync + -- * Streams + , StreamStatus(..) + , streamBaseStatus + -- * Blocking IO + , inputStreamGetContents + , inputStreamGetContentsN + , inputStreamGetLine + , inputStreamGetString + , inputStreamGetChar + , outputStreamPutString + -- * Non-blocking IO + , inputStreamGetLineNoWait + , inputStreamGetStringNoWait + , inputStreamGetCharNoWait + , outputStreamPutStringNoWait + ) where + +import System.IO.Unsafe( unsafeInterleaveIO ) +import Graphics.UI.WXCore.WxcTypes( ptrCast ) +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses +import Graphics.UI.WXCore.Types +import Graphics.UI.WXCore.Events + +import Foreign +import Foreign.Ptr +import Foreign.Storable +import Foreign.C.String +import Foreign.C.Types + + + +-- | Write a string to an output stream, potentially blocking +-- until all output has been written. +outputStreamPutString :: OutputStream a -> String -> IO () +outputStreamPutString outputStream s + = withCString s $ \cstr -> write cstr (length s) + where + write cstr n + = do outputStreamWrite outputStream cstr n + m <- outputStreamLastWrite outputStream + if (m < n && m > 0 {- prevent infinite loop -} ) + then write (advancePtr cstr m) (n - m) + else return () + + +-- | Write a string to an output stream, returning the +-- number of bytes actually written. +outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int +outputStreamPutStringNoWait outputStream s + = withCString s $ \cstr -> + do outputStreamWrite outputStream cstr (length s) + outputStreamLastWrite outputStream + +-- | @inputStreamGetLineNoWait stream n@ reads a line of at most @n@ characters from the +-- input stream in a non-blocking way. The function does automatic end-of-line +-- conversion. If the line ends with @\\n@, an entire line +-- has been read, otherwise, either the maximum has been reached, or no more +-- input was available. +inputStreamGetLineNoWait :: InputStream a -> Int -> IO String +inputStreamGetLineNoWait inputStream max + = read "" 0 + where + read acc n + = if n >= max + then return (reverse acc) + else do mbc <- inputStreamGetCharNoWait inputStream + case mbc of + Nothing -> return (reverse acc) + Just '\n' -> return (reverse ('\n':acc)) + Just '\r' -> do mbc2 <- inputStreamGetCharNoWait inputStream + case mbc2 of + Just c2 | c2 /= '\n' -> do inputStreamUngetch inputStream c2 + return () + _ -> return () + return (reverse ('\n':acc)) + Just c -> read (c:acc) (n+1) + +-- | @inputStreamGetStringNoWait stream n@ reads a line of at most @n@ characters from the +-- input stream in a non-blocking way. +inputStreamGetStringNoWait :: InputStream a -> Int -> IO String +inputStreamGetStringNoWait input max + = read "" 0 + where + read acc n + = if ( n >= max ) + then return (reverse acc) + else do mbc <- inputStreamGetCharNoWait input + case mbc of + Nothing -> return (reverse acc) + Just c -> read (c:acc) (n+1) + + +-- | Read a single character from the input, returning @Nothing@ if no input +-- was available (using 'inputStreamCanRead'). +inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char) +inputStreamGetCharNoWait input + = do canRead <- inputStreamCanRead input + if canRead + then do c <- inputStreamGetC input + return (Just c) + else return Nothing + + +-- | @inputStreamGetLine s n@ reads a line of at most @n@ characters from the +-- input stream (potentially waiting for input). The function does automatic end-of-line +-- conversion. If the line ends with @\\n@, an entire line +-- has been read, otherwise, either the maximum has been reached, or no more +-- input was available. +inputStreamGetLine :: InputStream a -> Int -> IO String +inputStreamGetLine inputStream max + = read "" 0 + where + read acc n + = if n >= max + then return (reverse acc) + else do c <- inputStreamGetChar inputStream + case c of + '\n' -> return (reverse ('\n':acc)) + '\r' -> do mbc2 <- inputStreamGetCharNoWait inputStream + case mbc2 of + Just c2 | c2 /= '\n' -> do inputStreamUngetch inputStream c2 + return () + _ -> return () + return (reverse ('\n':acc)) + _ -> read (c:acc) (n+1) + +-- | Read a single character from the input. (equals 'inputStreamGetC') +inputStreamGetChar :: InputStream a -> IO Char +inputStreamGetChar input + = inputStreamGetC input + + +-- | The expression (@inputStreamGetString n input@) reads a string of maximally +-- @n@ characters from @input@. +inputStreamGetString :: InputStream a -> Int -> IO String +inputStreamGetString inputStream n + = allocaBytes (n+1) $ \buffer -> + do inputStreamRead inputStream buffer n + nread <- inputStreamLastRead inputStream + mapM (peekChar buffer) [0..nread-1] + where + peekChar :: Ptr CChar -> Int -> IO Char + peekChar p ofs + = do cchar <- peekElemOff p ofs + return (castCCharToChar cchar) + + + +-- | Get the entire contents of an input stream. The content +-- is returned as a lazy stream (like 'hGetContents'). +inputStreamGetContents :: InputStream a -> IO String +inputStreamGetContents inputStream + = inputStreamGetContentsN inputStream 1 + +-- | Get the entire contents of an input stream. The content +-- is returned as a lazy stream (like 'hGetContents'). The +-- contents are returned in lazy /batches/, whose size is +-- determined by the first parameter. +inputStreamGetContentsN :: InputStream a -> Int -> IO String +inputStreamGetContentsN inputStream n + = do status <- streamBaseGetLastError inputStream + if (status == wxSTREAM_NO_ERROR) + then do x <- inputStreamGetString inputStream n + xs <- unsafeInterleaveIO (inputStreamGetContentsN inputStream n) + return (x ++ xs) + else return "" + +-- | Return the status of the stream +streamBaseStatus :: StreamBase a -> IO StreamStatus +streamBaseStatus stream + = do code <- streamBaseGetLastError stream + return (streamStatusFromInt code) + +-- | Type of input receiver function. +type OnReceive = String -> StreamStatus -> IO () + +-- | Type of end-of-process event handler. Gets the exitcode as its argument. +type OnEndProcess = Int -> IO () + + + +-- | (@processExecAsyncTimer command processOutputOnEnd onEndProcess onOutput onErrorOutput parent@) starts +-- the @command@ asynchronously. The handler @onEndProcess@ is called when the process +-- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives +-- output from @stderr@. If @processOutputOnEnd@ is 'True', the remaining output of a terminated +-- process is processed (calling @onOutput@). The call returns a triple (@send,process,pid@): +-- The @send@ function is used to send input to the @stdin@ pipe of the process. The +-- process object is returned in @process@ and the process identifier in @pid@. +-- +-- Note: The method uses idle event timers to process the output channels. On +-- many platforms this is uch more thrustworthy and robust than the 'processExecAsync' that +-- uses threads (which can cause all kinds of portability problems). +processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive + -> IO (String -> IO StreamStatus, Process (), Int) +processExecAsyncTimed parent cmd readInputOnEnd onEndProcess onOutput onErrOutput + = do process <- processCreateDefault parent idAny + processRedirect process + pid <- wxcAppExecuteProcess cmd wxEXEC_ASYNC process + if (pid == 0) + then return (\s -> return StreamEof, objectNull, pid) + else do v <- varCreate (Just process) + windowOnIdle parent (handleAnyInput v) + unregister <- appRegisterIdle 100 -- 10 times a second + evtHandlerOnEndProcess parent (handleTerminate v unregister) + let send txt = handleSend v txt + return (send, process, pid) + where + maxLine :: Int + maxLine = 160 + + handleSend :: Var (Maybe (Process a)) -> String -> IO StreamStatus + handleSend v txt + = withProcess v StreamEof $ \process -> + do outputPipe <- processGetOutputStream process + outputStreamPutString outputPipe txt -- TODO: use idle events to do output non-blocking? + streamBaseStatus outputPipe + + handleAnyInput :: Var (Maybe (Process a)) -> IO Bool + handleAnyInput v + = withProcess v False $ \process -> + do inputPipe <- processGetInputStream process + available <- handleInput inputPipe onOutput -- process some input on stdout + errorPipe <- processGetErrorStream process + handleAllInput errorPipe onErrOutput -- process all input on stderr + return available + + handleAllInput :: InputStream a -> OnReceive -> IO () + handleAllInput input onOutput + = do available <- handleInput input onOutput + if (available) + then handleAllInput input onOutput + else return () + + handleInput :: InputStream a -> OnReceive -> IO Bool + handleInput input onOutput + = do txt <- inputStreamGetLineNoWait input maxLine + status <- streamBaseStatus input + if null txt + then case status of + StreamOk -> return False + _ -> do onOutput "" status + return False + else do onOutput txt status + return True + + handleTerminate :: Var (Maybe (Process a)) -> IO () -> Int -> Int -> IO () + handleTerminate v unregister pid exitCode + = do unregister + withProcess v () $ \process -> + do varSet v Nothing + if (readInputOnEnd) + then do inputPipe <- processGetInputStream process + handleAllInput inputPipe onOutput -- handle remaining input + else return () + onEndProcess exitCode + processDelete process + return () + + withProcess v x f + = do mb <- varGet v + case mb of + Nothing -> return x + Just p -> f p + + + +{-# DEPRECATED processExecAsync "Use processExecAsyncTimed instead (if possible)" #-} +-- | deprecated: use 'processExecAsyncTimed' instead (if possible). +-- (@processExecAsync command bufferSize onEndProcess onOutput onErrorOutput parent@) starts +-- the @command@ asynchronously. The handler @onEndProcess@ is called when the process +-- terminates. @onOutput@ receives the output from @stdout@, while @onErrorOutput@ receives +-- output from @stderr@. The @bufferSize@ determines the intermediate buffer used to +-- cache the output from those channels. The calls returns a triple (@send,process,pid@): +-- The @send@ function is used to send input to the @stdin@ pipe of the process. The +-- process object is returned in @process@ and the process identifier in @pid@. +processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive + -> IO (String -> IO (), Process (), Int) +processExecAsync parent command bufferSize onEndProcess onOutput onErrOutput + = do process <- processCreateDefault parent idAny + processRedirect process + pid <- wxcAppExecuteProcess command wxEXEC_ASYNC process + if (pid == 0) + then return (\s -> return (), objectNull, pid) + else do inputPipe <- processGetInputStream process + outputPipe <- processGetOutputStream process + errorPipe <- processGetErrorStream process + evtHandlerOnEndProcess parent (handleOnEndProcess pid process inputPipe outputPipe errorPipe) + evtHandlerOnInput parent onOutput inputPipe bufferSize + evtHandlerOnInput parent onErrOutput errorPipe bufferSize + let send txt = outputStreamPutString outputPipe txt + return (send, process, pid) + where + handleOnEndProcess ourPid process inputPipe outputPipe errorPipe pid exitcode + | ourPid == pid = do onEndProcess exitcode + processDelete process | otherwise = return ()
src/haskell/Graphics/UI/WXCore/Types.hs view
@@ -1,519 +1,519 @@-{-# LANGUAGE ForeignFunctionInterface, FlexibleInstances #-}-------------------------------------------------------------------------------------------{-| Module : Types- Copyright : (c) Daan Leijen 2003- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Basic types and operations.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.Types(- -- * Objects- ( # )- , Object, objectNull, objectIsNull, objectCast, objectIsManaged- , objectDelete- , withObjectPtr, withObjectRef- , withObjectResult, withManagedObjectResult- , objectFinalize, objectNoFinalize- , objectFromPtr, managedObjectFromPtr- ---- , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch-- -- * Identifiers- , Id, idAny, idCreate-- -- * Bits- , (.+.), (.-.)- , bits- , bitsSet-- -- * Control- , unitIO, bracket, bracket_, finally, finalize, when-- -- * Variables- , Var, varCreate, varGet, varSet, varUpdate, varSwap-- -- * Misc.- , Style- , EventId- , TreeItem, treeItemInvalid, treeItemIsOk-- -- * Basic types-- -- ** Booleans- , toCBool, fromCBool-- -- ** Colors- , Color, rgb, colorRGB, colorRed, colorGreen, colorBlue, intFromColor, colorFromInt, colorIsOk, colorOk- , black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white- , red, green, blue- , cyan, magenta, yellow- -- *** System colors- , SystemColor(..), colorSystem-- -- ** Points- , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull- , pointMove, pointMoveBySize, pointAdd, pointSub, pointScale-- -- ** Sizes- , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull, sizeEncloses- , sizeMin, sizeMax-- -- ** Vectors- , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull- , vecNegate, vecOrtogonal, vecAdd, vecSub, vecScale, vecBetween, vecLength- , vecLengthDouble-- -- ** Rectangles- , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)- , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight- , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty- , rectContains, rectMoveTo, rectFromPoint, rectCentralPoint, rectCentralRect, rectStretchTo- , rectCentralPointDouble, rectCentralRectDouble- , rectMove, rectOverlaps, rectsDiff, rectUnion, rectOverlap, rectUnions-- ) where--import Data.List( (\\) )-import Graphics.UI.WXCore.WxcTypes-import Graphics.UI.WXCore.WxcDefs-import Graphics.UI.WXCore.WxcClasses( wxcSystemSettingsGetColour )-import System.IO.Unsafe( unsafePerformIO )---- utility-import Data.Array-import Data.Bits-import Control.Concurrent.STM-import qualified Control.Exception as CE-import qualified Control.Monad as M---infixl 5 .+.-infixl 5 .-.-infix 5 #---- | Reverse application, i.e. @x # f@ = @f x@.--- Useful for an object oriented style of programming.------ > (frame # frameSetTitle) "hi"----( # ) :: obj -> (obj -> a) -> a-object # method = method object---{--------------------------------------------------------------------------------- Bitmasks---------------------------------------------------------------------------------}--- | Bitwise /or/ of two bit masks.-(.+.) :: Int -> Int -> Int-(.+.) i j- = i .|. j---- | Unset certain bits in a bitmask.-(.-.) :: Int -> BitFlag -> Int-(.-.) i j- = i .&. complement j---- | Bitwise /or/ of a list of bit masks.-bits :: [Int] -> Int-bits xs- = foldr (.+.) 0 xs---- | (@bitsSet mask i@) tests if all bits in @mask@ are also set in @i@.-bitsSet :: Int -> Int -> Bool-bitsSet mask i- = (i .&. mask == mask)---{--------------------------------------------------------------------------------- Id---------------------------------------------------------------------------------}-{-# NOINLINE varTopId #-}-varTopId :: Var Id-varTopId- = unsafePerformIO (varCreate (wxID_HIGHEST+1))---- | When creating a new window you may specify 'idAny' to let wxWidgets--- assign an unused identifier to it automatically. Furthermore, it can be--- used in an event connection to handle events for any identifier.-idAny :: Id-idAny- = -1---- | Create a new unique identifier.-idCreate :: IO Id-idCreate- = varUpdate varTopId (+1)----{--------------------------------------------------------------------------------- Control---------------------------------------------------------------------------------}--- | Ignore the result of an 'IO' action.-unitIO :: IO a -> IO ()-unitIO io- = do io; return ()---- | Perform an action when a test succeeds.-when :: Bool -> IO () -> IO ()-when = M.when---- | Properly release resources, even in the event of an exception.-bracket :: IO a -- ^ computation to run first (acquire resource)- -> (a -> IO b) -- ^ computation to run last (release resource)- -> (a -> IO c) -- ^ computation to run in-between (use resource)- -> IO c-bracket = CE.bracket---- | Specialized variant of 'bracket' where the return value is not required.-bracket_ :: IO a -- ^ computation to run first (acquire resource)- -> IO b -- ^ computation to run last (release resource)- -> IO c -- ^ computation to run in-between (use resource)- -> IO c-bracket_ = CE.bracket_---- | Run some computation afterwards, even if an exception occurs.-finally :: IO a -- ^ computation to run first- -> IO b -- ^ computation to run last (release resource)- -> IO a-finally = CE.finally---- | Run some computation afterwards, even if an exception occurs. Equals 'finally' but--- with the arguments swapped.-finalize :: IO b -- ^ computation to run last (release resource)- -> IO a -- ^ computation to run first- -> IO a-finalize last first- = finally first last--{--------------------------------------------------------------------------------- Variables---------------------------------------------------------------------------------}---- | A mutable variable. Use this instead of 'MVar's or 'IORef's to accomodate for--- future expansions with possible concurrency.-type Var a = TVar a---- | Create a fresh mutable variable.-varCreate :: a -> IO (Var a)-varCreate x = newTVarIO x---- | Get the value of a mutable variable.-varGet :: Var a -> IO a-varGet v = atomically $ readTVar v---- | Set the value of a mutable variable.-varSet :: Var a -> a -> IO ()-varSet v x = atomically $ writeTVar v x---- | Swap the value of a mutable variable.-varSwap :: Var a -> a -> IO a-varSwap v x = atomically $ do- prev <- readTVar v- writeTVar v x- return prev---- | Update the value of a mutable variable and return the old value.-varUpdate :: Var a -> (a -> a) -> IO a-varUpdate v f = atomically $ do- x <- readTVar v- writeTVar v (f x)- return x----{------------------------------------------------------------------------------------------ Point------------------------------------------------------------------------------------------}-pointMove :: (Num a) => Vector2 a -> Point2 a -> Point2 a-pointMove (Vector dx dy) (Point x y)- = Point (x+dx) (y+dy)--pointMoveBySize :: (Num a) => Point2 a -> Size2D a -> Point2 a-pointMoveBySize (Point x y) (Size w h) = Point (x + w) (y + h)--pointAdd :: (Num a) => Point2 a -> Point2 a -> Point2 a-pointAdd (Point x1 y1) (Point x2 y2) = Point (x1+x2) (y1+y2)--pointSub :: (Num a) => Point2 a -> Point2 a -> Point2 a-pointSub (Point x1 y1) (Point x2 y2) = Point (x1-x2) (y1-y2)--pointScale :: (Num a) => Point2 a -> a -> Point2 a-pointScale (Point x y) v = Point (v*x) (v*y)---instance (Num a, Ord a) => Ord (Point2 a) where- compare (Point x1 y1) (Point x2 y2) - = case compare y1 y2 of- EQ -> compare x1 x2- neq -> neq---instance Ix (Point2 Int) where- range (Point x1 y1,Point x2 y2) - = [Point x y | y <- [y1..y2], x <- [x1..x2]]-- inRange (Point x1 y1, Point x2 y2) (Point x y)- = (x >= x1 && x <= x2 && y >= y1 && y <= y2)-- rangeSize (Point x1 y1, Point x2 y2) - = let w = abs (x2 - x1) + 1- h = abs (y2 - y1) + 1- in w*h-- index bnd@(Point x1 y1, Point x2 y2) p@(Point x y)- = if inRange bnd p- then let w = abs (x2 - x1) + 1- in (y-y1)*w + x- else error ("Point index out of bounds: " ++ show p ++ " not in " ++ show bnd)--{------------------------------------------------------------------------------------------ Size------------------------------------------------------------------------------------------}--- | Return the width. (see also 'sizeW').-sizeWidth :: (Num a) => Size2D a -> a-sizeWidth (Size w h)- = w---- | Return the height. (see also 'sizeH').-sizeHeight :: (Num a) => Size2D a -> a-sizeHeight (Size w h)- = h---- | Returns 'True' if the first size totally encloses the second argument.-sizeEncloses :: (Num a, Ord a) => Size2D a -> Size2D a -> Bool-sizeEncloses (Size w0 h0) (Size w1 h1)- = (w0 >= w1) && (h0 >= h1)---- | The minimum of two sizes.-sizeMin :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a-sizeMin (Size w0 h0) (Size w1 h1)- = Size (min w0 w1) (min h0 h1)---- | The maximum of two sizes.-sizeMax :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a-sizeMax (Size w0 h0) (Size w1 h1)- = Size (max w0 w1) (max h0 h1)--{------------------------------------------------------------------------------------------ Vector------------------------------------------------------------------------------------------}-vecNegate :: (Num a) => Vector2 a -> Vector2 a-vecNegate (Vector x y)- = Vector (-x) (-y)--vecOrtogonal :: (Num a) => Vector2 a -> Vector2 a-vecOrtogonal (Vector x y) = (Vector y (-x))--vecAdd :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a-vecAdd (Vector x1 y1) (Vector x2 y2) = Vector (x1+x2) (y1+y2)--vecSub :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a-vecSub (Vector x1 y1) (Vector x2 y2) = Vector (x1-x2) (y1-y2)--vecScale :: (Num a) => Vector2 a -> a -> Vector2 a-vecScale (Vector x y) v = Vector (v*x) (v*y)--vecBetween :: (Num a) => Point2 a -> Point2 a -> Vector2 a-vecBetween (Point x1 y1) (Point x2 y2) = Vector (x2-x1) (y2-y1)--vecLength :: Vector -> Double-vecLength (Vector x y)- = sqrt (fromIntegral (x*x + y*y))--vecLengthDouble :: Vector2 Double -> Double-vecLengthDouble (Vector x y)- = sqrt (x*x + y*y)--{------------------------------------------------------------------------------------------ Rectangle------------------------------------------------------------------------------------------}-rectContains :: (Num a, Ord a) => Rect2D a -> Point2 a -> Bool-rectContains (Rect l t w h) (Point x y) - = (x >= l && x <= (l+w) && y >= t && y <= (t+h))--rectMoveTo :: (Num a) => Rect2D a -> Point2 a -> Rect2D a-rectMoveTo r p- = rect p (rectSize r)--rectFromPoint :: (Num a) => Point2 a -> Rect2D a-rectFromPoint (Point x y)- = Rect x y x y--rectCentralPoint :: Rect2D Int -> Point2 Int-rectCentralPoint (Rect l t w h)- = Point (l + div w 2) (t + div h 2)--rectCentralRect :: Rect2D Int -> Size -> Rect2D Int-rectCentralRect r@(Rect l t rw rh) (Size w h)- = let c = rectCentralPoint r- in Rect (pointX c - (w - div w 2)) (pointY c - (h - div h 2)) w h--rectCentralPointDouble :: (Fractional a) => Rect2D a -> Point2 a-rectCentralPointDouble (Rect l t w h)- = Point (l + w/2) (t + h/2)--rectCentralRectDouble :: (Fractional a) => Rect2D a -> Size2D a -> Rect2D a-rectCentralRectDouble r@(Rect l t rw rh) (Size w h)- = let c = rectCentralPointDouble r- in Rect (pointX c - (w - w/2)) (pointY c - (h - h/2)) w h---rectStretchTo :: (Num a) => Rect2D a -> Size2D a -> Rect2D a-rectStretchTo (Rect l t _ _) (Size w h)- = Rect l t w h--rectMove :: (Num a) => Rect2D a -> Vector2 a -> Rect2D a-rectMove (Rect x y w h) (Vector dx dy)- = Rect (x+dx) (y+dy) w h--rectOverlaps :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Bool-rectOverlaps (Rect x1 y1 w1 h1) (Rect x2 y2 w2 h2)- = (x1+w1 >= x2 && x1 <= x2+w2) && (y1+h1 >= y2 && y1 <= y2+h2)----- | A list with rectangles that constitute the difference between two rectangles.-rectsDiff :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]-rectsDiff rect1 rect2- = subtractFittingRect rect1 (rectOverlap rect1 rect2)- where- -- subtractFittingRect r1 r2 subtracts r2 from r1 assuming that r2 fits inside r1- subtractFittingRect :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a]- subtractFittingRect r1 r2 =- filter (not . rectIsEmpty)- [ rectBetween (rectTopLeft r1) (rectTopRight r2)- , rectBetween (pt (rectLeft r1) (rectTop r2)) (rectBottomLeft r2)- , rectBetween (pt (rectLeft r1) (rectBottom r2)) (pt (rectRight r2) (rectBottom r1))- , rectBetween (rectTopRight r2) (rectBottomRight r1)- ]--rectUnion :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a-rectUnion r1 r2- = rectBetween (pt (min (rectLeft r1) (rectLeft r2)) (min (rectTop r1) (rectTop r2)))- (pt (max (rectRight r1) (rectRight r2)) (max (rectBottom r1) (rectBottom r2)))--rectUnions :: (Num a, Ord a) => [Rect2D a] -> Rect2D a-rectUnions []- = rectZero-rectUnions (r:rs)- = foldr rectUnion r rs---- | The intersection between two rectangles.-rectOverlap :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a-rectOverlap r1 r2- | rectOverlaps r1 r2 = rectBetween (pt (max (rectLeft r1) (rectLeft r2)) (max (rectTop r1) (rectTop r2)))- (pt (min (rectRight r1) (rectRight r2)) (min (rectBottom r1) (rectBottom r2)))- | otherwise = rectZero---{------------------------------------------------------------------------------------------ Default colors.------------------------------------------------------------------------------------------}-black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white :: Color-red, green, blue :: Color-cyan, magenta, yellow :: Color--black = colorRGB 0x00 0x00 0x00-darkgrey = colorRGB 0x2F 0x2F 0x2F-dimgrey = colorRGB 0x54 0x54 0x54-mediumgrey= colorRGB 0x64 0x64 0x64-grey = colorRGB 0x80 0x80 0x80-lightgrey = colorRGB 0xC0 0xC0 0xC0-white = colorRGB 0xFF 0xFF 0xFF--red = colorRGB 0xFF 0x00 0x00-green = colorRGB 0x00 0xFF 0x00-blue = colorRGB 0x00 0x00 0xFF--yellow = colorRGB 0xFF 0xFF 0x00-magenta = colorRGB 0xFF 0x00 0xFF-cyan = colorRGB 0x00 0xFF 0xFF---{--------------------------------------------------------------------------- System colors---------------------------------------------------------------------------}--- | System Colors.-data SystemColor- = ColorScrollBar -- ^ The scrollbar grey area. - | ColorBackground -- ^ The desktop colour. - | ColorActiveCaption -- ^ Active window caption. - | ColorInactiveCaption -- ^ Inactive window caption. - | ColorMenu -- ^ Menu background. - | ColorWindow -- ^ Window background. - | ColorWindowFrame -- ^ Window frame. - | ColorMenuText -- ^ Menu text. - | ColorWindowText -- ^ Text in windows. - | ColorCaptionText -- ^ Text in caption, size box and scrollbar arrow box. - | ColorActiveBorder -- ^ Active window border. - | ColorInactiveBorder -- ^ Inactive window border. - | ColorAppWorkspace -- ^ Background colour MDI -- ^applications. - | ColorHighlight -- ^ Item(s) selected in a control. - | ColorHighlightText -- ^ Text of item(s) selected in a control. - | ColorBtnFace -- ^ Face shading on push buttons. - | ColorBtnShadow -- ^ Edge shading on push buttons. - | ColorGrayText -- ^ Greyed (disabled) text. - | ColorBtnText -- ^ Text on push buttons. - | ColorInactiveCaptionText -- ^ Colour of text in active captions. - | ColorBtnHighlight -- ^ Highlight colour for buttons (same as 3DHILIGHT). - | Color3DDkShadow -- ^ Dark shadow for three-dimensional display elements. - | Color3DLight -- ^ Light colour for three-dimensional display elements. - | ColorInfoText -- ^ Text colour for tooltip controls. - | ColorInfoBk -- ^ Background colour for tooltip controls. - | ColorDesktop -- ^ Same as BACKGROUND. - | Color3DFace -- ^ Same as BTNFACE. - | Color3DShadow -- ^ Same as BTNSHADOW. - | Color3DHighlight -- ^ Same as BTNHIGHLIGHT. - | Color3DHilight -- ^ Same as BTNHIGHLIGHT. - | ColorBtnHilight -- ^ Same as BTNHIGHLIGHT. --instance Enum SystemColor where- toEnum i- = error "Graphics.UI.WXCore.Types.SytemColor.toEnum: can not convert integers to system colors."-- fromEnum systemColor- = case systemColor of- ColorScrollBar -> wxSYS_COLOUR_SCROLLBAR- ColorBackground -> wxSYS_COLOUR_BACKGROUND- ColorActiveCaption -> wxSYS_COLOUR_ACTIVECAPTION- ColorInactiveCaption -> wxSYS_COLOUR_INACTIVECAPTION- ColorMenu -> wxSYS_COLOUR_MENU- ColorWindow -> wxSYS_COLOUR_WINDOW- ColorWindowFrame -> wxSYS_COLOUR_WINDOWFRAME- ColorMenuText -> wxSYS_COLOUR_MENUTEXT- ColorWindowText -> wxSYS_COLOUR_WINDOWTEXT- ColorCaptionText -> wxSYS_COLOUR_CAPTIONTEXT- ColorActiveBorder -> wxSYS_COLOUR_ACTIVEBORDER- ColorInactiveBorder -> wxSYS_COLOUR_INACTIVEBORDER- ColorAppWorkspace -> wxSYS_COLOUR_APPWORKSPACE - ColorHighlight -> wxSYS_COLOUR_HIGHLIGHT- ColorHighlightText -> wxSYS_COLOUR_HIGHLIGHTTEXT- ColorBtnFace -> wxSYS_COLOUR_BTNFACE- ColorBtnShadow -> wxSYS_COLOUR_BTNSHADOW- ColorGrayText -> wxSYS_COLOUR_GRAYTEXT- ColorBtnText -> wxSYS_COLOUR_BTNTEXT- ColorInactiveCaptionText -> wxSYS_COLOUR_INACTIVECAPTIONTEXT- ColorBtnHighlight -> wxSYS_COLOUR_BTNHIGHLIGHT- Color3DDkShadow -> wxSYS_COLOUR_3DDKSHADOW- Color3DLight -> wxSYS_COLOUR_3DLIGHT- ColorInfoText -> wxSYS_COLOUR_INFOTEXT- ColorInfoBk -> wxSYS_COLOUR_INFOBK- ColorDesktop -> wxSYS_COLOUR_DESKTOP- Color3DFace -> wxSYS_COLOUR_3DFACE- Color3DShadow -> wxSYS_COLOUR_3DSHADOW- Color3DHighlight -> wxSYS_COLOUR_3DHIGHLIGHT- Color3DHilight -> wxSYS_COLOUR_3DHILIGHT- ColorBtnHilight -> wxSYS_COLOUR_BTNHILIGHT-- --- | Convert a system color to a color. -colorSystem :: SystemColor -> Color-colorSystem systemColor- = unsafePerformIO $ - wxcSystemSettingsGetColour (fromEnum systemColor)+{-# LANGUAGE ForeignFunctionInterface, FlexibleInstances #-} +----------------------------------------------------------------------------------------- +{-| Module : Types + Copyright : (c) Daan Leijen 2003 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Basic types and operations. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.Types( + -- * Objects + ( # ) + , Object, objectNull, objectIsNull, objectCast, objectIsManaged + , objectDelete + , withObjectPtr, withObjectRef + , withObjectResult, withManagedObjectResult + , objectFinalize, objectNoFinalize + , objectFromPtr, managedObjectFromPtr + + +-- , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch + + -- * Identifiers + , Id, idAny, idCreate + + -- * Bits + , (.+.), (.-.) + , bits + , bitsSet + + -- * Control + , unitIO, bracket, bracket_, finally, finalize, when + + -- * Variables + , Var, varCreate, varGet, varSet, varUpdate, varSwap + + -- * Misc. + , Style + , EventId + , TreeItem, treeItemInvalid, treeItemIsOk + + -- * Basic types + + -- ** Booleans + , toCBool, fromCBool + + -- ** Colors + , Color, rgb, colorRGB, colorRed, colorGreen, colorBlue, intFromColor, colorFromInt, colorIsOk, colorOk + , black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white + , red, green, blue + , cyan, magenta, yellow + -- *** System colors + , SystemColor(..), colorSystem + + -- ** Points + , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull + , pointMove, pointMoveBySize, pointAdd, pointSub, pointScale + + -- ** Sizes + , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull, sizeEncloses + , sizeMin, sizeMax + + -- ** Vectors + , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull + , vecNegate, vecOrtogonal, vecAdd, vecSub, vecScale, vecBetween, vecLength + , vecLengthDouble + + -- ** Rectangles + , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight) + , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight + , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty + , rectContains, rectMoveTo, rectFromPoint, rectCentralPoint, rectCentralRect, rectStretchTo + , rectCentralPointDouble, rectCentralRectDouble + , rectMove, rectOverlaps, rectsDiff, rectUnion, rectOverlap, rectUnions + + ) where + +import Data.List( (\\) ) +import Graphics.UI.WXCore.WxcTypes +import Graphics.UI.WXCore.WxcDefs +import Graphics.UI.WXCore.WxcClasses( wxcSystemSettingsGetColour ) +import System.IO.Unsafe( unsafePerformIO ) + +-- utility +import Data.Array +import Data.Bits +import Control.Concurrent.STM +import qualified Control.Exception as CE +import qualified Control.Monad as M + + +infixl 5 .+. +infixl 5 .-. +infix 5 # + +-- | Reverse application, i.e. @x # f@ = @f x@. +-- Useful for an object oriented style of programming. +-- +-- > (frame # frameSetTitle) "hi" +-- +( # ) :: obj -> (obj -> a) -> a +object # method = method object + + +{-------------------------------------------------------------------------------- + Bitmasks +--------------------------------------------------------------------------------} +-- | Bitwise /or/ of two bit masks. +(.+.) :: Int -> Int -> Int +(.+.) i j + = i .|. j + +-- | Unset certain bits in a bitmask. +(.-.) :: Int -> BitFlag -> Int +(.-.) i j + = i .&. complement j + +-- | Bitwise /or/ of a list of bit masks. +bits :: [Int] -> Int +bits xs + = foldr (.+.) 0 xs + +-- | (@bitsSet mask i@) tests if all bits in @mask@ are also set in @i@. +bitsSet :: Int -> Int -> Bool +bitsSet mask i + = (i .&. mask == mask) + + +{-------------------------------------------------------------------------------- + Id +--------------------------------------------------------------------------------} +{-# NOINLINE varTopId #-} +varTopId :: Var Id +varTopId + = unsafePerformIO (varCreate (wxID_HIGHEST+1)) + +-- | When creating a new window you may specify 'idAny' to let wxWidgets +-- assign an unused identifier to it automatically. Furthermore, it can be +-- used in an event connection to handle events for any identifier. +idAny :: Id +idAny + = -1 + +-- | Create a new unique identifier. +idCreate :: IO Id +idCreate + = varUpdate varTopId (+1) + + + +{-------------------------------------------------------------------------------- + Control +--------------------------------------------------------------------------------} +-- | Ignore the result of an 'IO' action. +unitIO :: IO a -> IO () +unitIO io + = do io; return () + +-- | Perform an action when a test succeeds. +when :: Bool -> IO () -> IO () +when = M.when + +-- | Properly release resources, even in the event of an exception. +bracket :: IO a -- ^ computation to run first (acquire resource) + -> (a -> IO b) -- ^ computation to run last (release resource) + -> (a -> IO c) -- ^ computation to run in-between (use resource) + -> IO c +bracket = CE.bracket + +-- | Specialized variant of 'bracket' where the return value is not required. +bracket_ :: IO a -- ^ computation to run first (acquire resource) + -> IO b -- ^ computation to run last (release resource) + -> IO c -- ^ computation to run in-between (use resource) + -> IO c +bracket_ = CE.bracket_ + +-- | Run some computation afterwards, even if an exception occurs. +finally :: IO a -- ^ computation to run first + -> IO b -- ^ computation to run last (release resource) + -> IO a +finally = CE.finally + +-- | Run some computation afterwards, even if an exception occurs. Equals 'finally' but +-- with the arguments swapped. +finalize :: IO b -- ^ computation to run last (release resource) + -> IO a -- ^ computation to run first + -> IO a +finalize last first + = finally first last + +{-------------------------------------------------------------------------------- + Variables +--------------------------------------------------------------------------------} + +-- | A mutable variable. Use this instead of 'MVar's or 'IORef's to accomodate for +-- future expansions with possible concurrency. +type Var a = TVar a + +-- | Create a fresh mutable variable. +varCreate :: a -> IO (Var a) +varCreate x = newTVarIO x + +-- | Get the value of a mutable variable. +varGet :: Var a -> IO a +varGet v = atomically $ readTVar v + +-- | Set the value of a mutable variable. +varSet :: Var a -> a -> IO () +varSet v x = atomically $ writeTVar v x + +-- | Swap the value of a mutable variable. +varSwap :: Var a -> a -> IO a +varSwap v x = atomically $ do + prev <- readTVar v + writeTVar v x + return prev + +-- | Update the value of a mutable variable and return the old value. +varUpdate :: Var a -> (a -> a) -> IO a +varUpdate v f = atomically $ do + x <- readTVar v + writeTVar v (f x) + return x + + + +{----------------------------------------------------------------------------------------- + Point +-----------------------------------------------------------------------------------------} +pointMove :: (Num a) => Vector2 a -> Point2 a -> Point2 a +pointMove (Vector dx dy) (Point x y) + = Point (x+dx) (y+dy) + +pointMoveBySize :: (Num a) => Point2 a -> Size2D a -> Point2 a +pointMoveBySize (Point x y) (Size w h) = Point (x + w) (y + h) + +pointAdd :: (Num a) => Point2 a -> Point2 a -> Point2 a +pointAdd (Point x1 y1) (Point x2 y2) = Point (x1+x2) (y1+y2) + +pointSub :: (Num a) => Point2 a -> Point2 a -> Point2 a +pointSub (Point x1 y1) (Point x2 y2) = Point (x1-x2) (y1-y2) + +pointScale :: (Num a) => Point2 a -> a -> Point2 a +pointScale (Point x y) v = Point (v*x) (v*y) + + +instance (Num a, Ord a) => Ord (Point2 a) where + compare (Point x1 y1) (Point x2 y2) + = case compare y1 y2 of + EQ -> compare x1 x2 + neq -> neq + + +instance Ix (Point2 Int) where + range (Point x1 y1,Point x2 y2) + = [Point x y | y <- [y1..y2], x <- [x1..x2]] + + inRange (Point x1 y1, Point x2 y2) (Point x y) + = (x >= x1 && x <= x2 && y >= y1 && y <= y2) + + rangeSize (Point x1 y1, Point x2 y2) + = let w = abs (x2 - x1) + 1 + h = abs (y2 - y1) + 1 + in w*h + + index bnd@(Point x1 y1, Point x2 y2) p@(Point x y) + = if inRange bnd p + then let w = abs (x2 - x1) + 1 + in (y-y1)*w + x + else error ("Point index out of bounds: " ++ show p ++ " not in " ++ show bnd) + +{----------------------------------------------------------------------------------------- + Size +-----------------------------------------------------------------------------------------} +-- | Return the width. (see also 'sizeW'). +sizeWidth :: (Num a) => Size2D a -> a +sizeWidth (Size w h) + = w + +-- | Return the height. (see also 'sizeH'). +sizeHeight :: (Num a) => Size2D a -> a +sizeHeight (Size w h) + = h + +-- | Returns 'True' if the first size totally encloses the second argument. +sizeEncloses :: (Num a, Ord a) => Size2D a -> Size2D a -> Bool +sizeEncloses (Size w0 h0) (Size w1 h1) + = (w0 >= w1) && (h0 >= h1) + +-- | The minimum of two sizes. +sizeMin :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a +sizeMin (Size w0 h0) (Size w1 h1) + = Size (min w0 w1) (min h0 h1) + +-- | The maximum of two sizes. +sizeMax :: (Num a, Ord a) => Size2D a -> Size2D a -> Size2D a +sizeMax (Size w0 h0) (Size w1 h1) + = Size (max w0 w1) (max h0 h1) + +{----------------------------------------------------------------------------------------- + Vector +-----------------------------------------------------------------------------------------} +vecNegate :: (Num a) => Vector2 a -> Vector2 a +vecNegate (Vector x y) + = Vector (-x) (-y) + +vecOrtogonal :: (Num a) => Vector2 a -> Vector2 a +vecOrtogonal (Vector x y) = (Vector y (-x)) + +vecAdd :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a +vecAdd (Vector x1 y1) (Vector x2 y2) = Vector (x1+x2) (y1+y2) + +vecSub :: (Num a) => Vector2 a -> Vector2 a -> Vector2 a +vecSub (Vector x1 y1) (Vector x2 y2) = Vector (x1-x2) (y1-y2) + +vecScale :: (Num a) => Vector2 a -> a -> Vector2 a +vecScale (Vector x y) v = Vector (v*x) (v*y) + +vecBetween :: (Num a) => Point2 a -> Point2 a -> Vector2 a +vecBetween (Point x1 y1) (Point x2 y2) = Vector (x2-x1) (y2-y1) + +vecLength :: Vector -> Double +vecLength (Vector x y) + = sqrt (fromIntegral (x*x + y*y)) + +vecLengthDouble :: Vector2 Double -> Double +vecLengthDouble (Vector x y) + = sqrt (x*x + y*y) + +{----------------------------------------------------------------------------------------- + Rectangle +-----------------------------------------------------------------------------------------} +rectContains :: (Num a, Ord a) => Rect2D a -> Point2 a -> Bool +rectContains (Rect l t w h) (Point x y) + = (x >= l && x <= (l+w) && y >= t && y <= (t+h)) + +rectMoveTo :: (Num a) => Rect2D a -> Point2 a -> Rect2D a +rectMoveTo r p + = rect p (rectSize r) + +rectFromPoint :: (Num a) => Point2 a -> Rect2D a +rectFromPoint (Point x y) + = Rect x y x y + +rectCentralPoint :: Rect2D Int -> Point2 Int +rectCentralPoint (Rect l t w h) + = Point (l + div w 2) (t + div h 2) + +rectCentralRect :: Rect2D Int -> Size -> Rect2D Int +rectCentralRect r@(Rect l t rw rh) (Size w h) + = let c = rectCentralPoint r + in Rect (pointX c - (w - div w 2)) (pointY c - (h - div h 2)) w h + +rectCentralPointDouble :: (Fractional a) => Rect2D a -> Point2 a +rectCentralPointDouble (Rect l t w h) + = Point (l + w/2) (t + h/2) + +rectCentralRectDouble :: (Fractional a) => Rect2D a -> Size2D a -> Rect2D a +rectCentralRectDouble r@(Rect l t rw rh) (Size w h) + = let c = rectCentralPointDouble r + in Rect (pointX c - (w - w/2)) (pointY c - (h - h/2)) w h + + +rectStretchTo :: (Num a) => Rect2D a -> Size2D a -> Rect2D a +rectStretchTo (Rect l t _ _) (Size w h) + = Rect l t w h + +rectMove :: (Num a) => Rect2D a -> Vector2 a -> Rect2D a +rectMove (Rect x y w h) (Vector dx dy) + = Rect (x+dx) (y+dy) w h + +rectOverlaps :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Bool +rectOverlaps (Rect x1 y1 w1 h1) (Rect x2 y2 w2 h2) + = (x1+w1 >= x2 && x1 <= x2+w2) && (y1+h1 >= y2 && y1 <= y2+h2) + + +-- | A list with rectangles that constitute the difference between two rectangles. +rectsDiff :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a] +rectsDiff rect1 rect2 + = subtractFittingRect rect1 (rectOverlap rect1 rect2) + where + -- subtractFittingRect r1 r2 subtracts r2 from r1 assuming that r2 fits inside r1 + subtractFittingRect :: (Num a, Ord a) => Rect2D a -> Rect2D a -> [Rect2D a] + subtractFittingRect r1 r2 = + filter (not . rectIsEmpty) + [ rectBetween (rectTopLeft r1) (rectTopRight r2) + , rectBetween (pt (rectLeft r1) (rectTop r2)) (rectBottomLeft r2) + , rectBetween (pt (rectLeft r1) (rectBottom r2)) (pt (rectRight r2) (rectBottom r1)) + , rectBetween (rectTopRight r2) (rectBottomRight r1) + ] + +rectUnion :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a +rectUnion r1 r2 + = rectBetween (pt (min (rectLeft r1) (rectLeft r2)) (min (rectTop r1) (rectTop r2))) + (pt (max (rectRight r1) (rectRight r2)) (max (rectBottom r1) (rectBottom r2))) + +rectUnions :: (Num a, Ord a) => [Rect2D a] -> Rect2D a +rectUnions [] + = rectZero +rectUnions (r:rs) + = foldr rectUnion r rs + +-- | The intersection between two rectangles. +rectOverlap :: (Num a, Ord a) => Rect2D a -> Rect2D a -> Rect2D a +rectOverlap r1 r2 + | rectOverlaps r1 r2 = rectBetween (pt (max (rectLeft r1) (rectLeft r2)) (max (rectTop r1) (rectTop r2))) + (pt (min (rectRight r1) (rectRight r2)) (min (rectBottom r1) (rectBottom r2))) + | otherwise = rectZero + + +{----------------------------------------------------------------------------------------- + Default colors. +-----------------------------------------------------------------------------------------} +black, darkgrey, dimgrey, mediumgrey, grey, lightgrey, white :: Color +red, green, blue :: Color +cyan, magenta, yellow :: Color + +black = colorRGB 0x00 0x00 0x00 +darkgrey = colorRGB 0x2F 0x2F 0x2F +dimgrey = colorRGB 0x54 0x54 0x54 +mediumgrey= colorRGB 0x64 0x64 0x64 +grey = colorRGB 0x80 0x80 0x80 +lightgrey = colorRGB 0xC0 0xC0 0xC0 +white = colorRGB 0xFF 0xFF 0xFF + +red = colorRGB 0xFF 0x00 0x00 +green = colorRGB 0x00 0xFF 0x00 +blue = colorRGB 0x00 0x00 0xFF + +yellow = colorRGB 0xFF 0xFF 0x00 +magenta = colorRGB 0xFF 0x00 0xFF +cyan = colorRGB 0x00 0xFF 0xFF + + +{-------------------------------------------------------------------------- + System colors +--------------------------------------------------------------------------} +-- | System Colors. +data SystemColor + = ColorScrollBar -- ^ The scrollbar grey area. + | ColorBackground -- ^ The desktop colour. + | ColorActiveCaption -- ^ Active window caption. + | ColorInactiveCaption -- ^ Inactive window caption. + | ColorMenu -- ^ Menu background. + | ColorWindow -- ^ Window background. + | ColorWindowFrame -- ^ Window frame. + | ColorMenuText -- ^ Menu text. + | ColorWindowText -- ^ Text in windows. + | ColorCaptionText -- ^ Text in caption, size box and scrollbar arrow box. + | ColorActiveBorder -- ^ Active window border. + | ColorInactiveBorder -- ^ Inactive window border. + | ColorAppWorkspace -- ^ Background colour MDI -- ^applications. + | ColorHighlight -- ^ Item(s) selected in a control. + | ColorHighlightText -- ^ Text of item(s) selected in a control. + | ColorBtnFace -- ^ Face shading on push buttons. + | ColorBtnShadow -- ^ Edge shading on push buttons. + | ColorGrayText -- ^ Greyed (disabled) text. + | ColorBtnText -- ^ Text on push buttons. + | ColorInactiveCaptionText -- ^ Colour of text in active captions. + | ColorBtnHighlight -- ^ Highlight colour for buttons (same as 3DHILIGHT). + | Color3DDkShadow -- ^ Dark shadow for three-dimensional display elements. + | Color3DLight -- ^ Light colour for three-dimensional display elements. + | ColorInfoText -- ^ Text colour for tooltip controls. + | ColorInfoBk -- ^ Background colour for tooltip controls. + | ColorDesktop -- ^ Same as BACKGROUND. + | Color3DFace -- ^ Same as BTNFACE. + | Color3DShadow -- ^ Same as BTNSHADOW. + | Color3DHighlight -- ^ Same as BTNHIGHLIGHT. + | Color3DHilight -- ^ Same as BTNHIGHLIGHT. + | ColorBtnHilight -- ^ Same as BTNHIGHLIGHT. + +instance Enum SystemColor where + toEnum i + = error "Graphics.UI.WXCore.Types.SytemColor.toEnum: can not convert integers to system colors." + + fromEnum systemColor + = case systemColor of + ColorScrollBar -> wxSYS_COLOUR_SCROLLBAR + ColorBackground -> wxSYS_COLOUR_BACKGROUND + ColorActiveCaption -> wxSYS_COLOUR_ACTIVECAPTION + ColorInactiveCaption -> wxSYS_COLOUR_INACTIVECAPTION + ColorMenu -> wxSYS_COLOUR_MENU + ColorWindow -> wxSYS_COLOUR_WINDOW + ColorWindowFrame -> wxSYS_COLOUR_WINDOWFRAME + ColorMenuText -> wxSYS_COLOUR_MENUTEXT + ColorWindowText -> wxSYS_COLOUR_WINDOWTEXT + ColorCaptionText -> wxSYS_COLOUR_CAPTIONTEXT + ColorActiveBorder -> wxSYS_COLOUR_ACTIVEBORDER + ColorInactiveBorder -> wxSYS_COLOUR_INACTIVEBORDER + ColorAppWorkspace -> wxSYS_COLOUR_APPWORKSPACE + ColorHighlight -> wxSYS_COLOUR_HIGHLIGHT + ColorHighlightText -> wxSYS_COLOUR_HIGHLIGHTTEXT + ColorBtnFace -> wxSYS_COLOUR_BTNFACE + ColorBtnShadow -> wxSYS_COLOUR_BTNSHADOW + ColorGrayText -> wxSYS_COLOUR_GRAYTEXT + ColorBtnText -> wxSYS_COLOUR_BTNTEXT + ColorInactiveCaptionText -> wxSYS_COLOUR_INACTIVECAPTIONTEXT + ColorBtnHighlight -> wxSYS_COLOUR_BTNHIGHLIGHT + Color3DDkShadow -> wxSYS_COLOUR_3DDKSHADOW + Color3DLight -> wxSYS_COLOUR_3DLIGHT + ColorInfoText -> wxSYS_COLOUR_INFOTEXT + ColorInfoBk -> wxSYS_COLOUR_INFOBK + ColorDesktop -> wxSYS_COLOUR_DESKTOP + Color3DFace -> wxSYS_COLOUR_3DFACE + Color3DShadow -> wxSYS_COLOUR_3DSHADOW + Color3DHighlight -> wxSYS_COLOUR_3DHIGHLIGHT + Color3DHilight -> wxSYS_COLOUR_3DHILIGHT + ColorBtnHilight -> wxSYS_COLOUR_BTNHILIGHT + + +-- | Convert a system color to a color. +colorSystem :: SystemColor -> Color +colorSystem systemColor + = unsafePerformIO $ + wxcSystemSettingsGetColour (fromEnum systemColor)
src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs view
@@ -14,7 +14,7 @@ From the files: - * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@ + * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@ And contains 547 class definitions. -}
src/haskell/Graphics/UI/WXCore/WxcClasses.hs view
@@ -14,9 +14,9 @@ From the files: - * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@ + * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@ -And contains 3828 methods for 253 classes. +And contains 3825 methods for 253 classes. -} -------------------------------------------------------------------------------- module Graphics.UI.WXCore.WxcClasses
src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs view
@@ -15,9 +15,9 @@ From the files: - * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@ + * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@ -And contains 1488 methods for 124 classes. +And contains 1492 methods for 124 classes. -} -------------------------------------------------------------------------------- module Graphics.UI.WXCore.WxcClassesAL @@ -858,9 +858,12 @@ ,graphicsContextClipByRectangle ,graphicsContextConcatTransform ,graphicsContextCreate + ,graphicsContextCreateDefaultMatrix ,graphicsContextCreateFromNative ,graphicsContextCreateFromNativeWindow ,graphicsContextCreateFromWindow + ,graphicsContextCreateMatrix + ,graphicsContextCreatePath ,graphicsContextDelete ,graphicsContextDrawBitmap ,graphicsContextDrawEllipse @@ -874,6 +877,8 @@ ,graphicsContextFillPath ,graphicsContextGetNativeContext ,graphicsContextGetTextExtent + ,graphicsContextPopState + ,graphicsContextPushState ,graphicsContextResetClip ,graphicsContextRotate ,graphicsContextScale @@ -1616,7 +1621,6 @@ ,logResume ,logSetActiveTarget ,logSetTimestamp - ,logSetTraceMask ,logSetVerbose ,logSuspend -- ** LogChain @@ -7429,6 +7433,14 @@ wxGraphicsContext_Create cobj_dc foreign import ccall "wxGraphicsContext_Create" wxGraphicsContext_Create :: Ptr (TWindowDC a) -> IO (Ptr (TGraphicsContext ())) +-- | usage: (@graphicsContextCreateDefaultMatrix self@). +graphicsContextCreateDefaultMatrix :: GraphicsContext a -> IO (GraphicsMatrix ()) +graphicsContextCreateDefaultMatrix self + = withObjectResult $ + withObjectRef "graphicsContextCreateDefaultMatrix" self $ \cobj_self -> + wxGraphicsContext_CreateDefaultMatrix cobj_self +foreign import ccall "wxGraphicsContext_CreateDefaultMatrix" wxGraphicsContext_CreateDefaultMatrix :: Ptr (TGraphicsContext a) -> IO (Ptr (TGraphicsMatrix ())) + -- | usage: (@graphicsContextCreateFromNative context@). graphicsContextCreateFromNative :: GraphicsContext a -> IO (GraphicsContext ()) graphicsContextCreateFromNative context @@ -7453,6 +7465,22 @@ wxGraphicsContext_CreateFromWindow cobj_window foreign import ccall "wxGraphicsContext_CreateFromWindow" wxGraphicsContext_CreateFromWindow :: Ptr (TWindow a) -> IO (Ptr (TGraphicsContext ())) +-- | usage: (@graphicsContextCreateMatrix self a b c d tx ty@). +graphicsContextCreateMatrix :: GraphicsContext a -> Double -> Double -> Double -> Double -> Double -> Double -> IO (GraphicsMatrix ()) +graphicsContextCreateMatrix self a b c d tx ty + = withObjectResult $ + withObjectRef "graphicsContextCreateMatrix" self $ \cobj_self -> + wxGraphicsContext_CreateMatrix cobj_self a b c d tx ty +foreign import ccall "wxGraphicsContext_CreateMatrix" wxGraphicsContext_CreateMatrix :: Ptr (TGraphicsContext a) -> Double -> Double -> Double -> Double -> Double -> Double -> IO (Ptr (TGraphicsMatrix ())) + +-- | usage: (@graphicsContextCreatePath self@). +graphicsContextCreatePath :: GraphicsContext a -> IO (GraphicsPath ()) +graphicsContextCreatePath self + = withObjectResult $ + withObjectRef "graphicsContextCreatePath" self $ \cobj_self -> + wxGraphicsContext_CreatePath cobj_self +foreign import ccall "wxGraphicsContext_CreatePath" wxGraphicsContext_CreatePath :: Ptr (TGraphicsContext a) -> IO (Ptr (TGraphicsPath ())) + -- | usage: (@graphicsContextDelete self@). graphicsContextDelete :: GraphicsContext a -> IO () graphicsContextDelete @@ -7550,6 +7578,20 @@ wxGraphicsContext_GetTextExtent cobj_self cobj_text width height descent externalLeading foreign import ccall "wxGraphicsContext_GetTextExtent" wxGraphicsContext_GetTextExtent :: Ptr (TGraphicsContext a) -> Ptr (TWxString b) -> Ptr Double -> Ptr Double -> Ptr Double -> Ptr Double -> IO () +-- | usage: (@graphicsContextPopState self@). +graphicsContextPopState :: GraphicsContext a -> IO () +graphicsContextPopState self + = withObjectRef "graphicsContextPopState" self $ \cobj_self -> + wxGraphicsContext_PopState cobj_self +foreign import ccall "wxGraphicsContext_PopState" wxGraphicsContext_PopState :: Ptr (TGraphicsContext a) -> IO () + +-- | usage: (@graphicsContextPushState self@). +graphicsContextPushState :: GraphicsContext a -> IO () +graphicsContextPushState self + = withObjectRef "graphicsContextPushState" self $ \cobj_self -> + wxGraphicsContext_PushState cobj_self +foreign import ccall "wxGraphicsContext_PushState" wxGraphicsContext_PushState :: Ptr (TGraphicsContext a) -> IO () + -- | usage: (@graphicsContextResetClip self@). graphicsContextResetClip :: GraphicsContext a -> IO () graphicsContextResetClip self @@ -8055,13 +8097,13 @@ wxGrid_BlockToDeviceRect cobj__obj (toCInt top) (toCInt left) (toCInt bottom) (toCInt right) foreign import ccall "wxGrid_BlockToDeviceRect" wxGrid_BlockToDeviceRect :: Ptr (TGrid a) -> CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect ())) --- | usage: (@gridCanDragColSize obj@). -gridCanDragColSize :: Grid a -> IO Bool -gridCanDragColSize _obj +-- | usage: (@gridCanDragColSize obj col@). +gridCanDragColSize :: Grid a -> Int -> IO Bool +gridCanDragColSize _obj col = withBoolResult $ withObjectRef "gridCanDragColSize" _obj $ \cobj__obj -> - wxGrid_CanDragColSize cobj__obj -foreign import ccall "wxGrid_CanDragColSize" wxGrid_CanDragColSize :: Ptr (TGrid a) -> IO CBool + wxGrid_CanDragColSize cobj__obj (toCInt col) +foreign import ccall "wxGrid_CanDragColSize" wxGrid_CanDragColSize :: Ptr (TGrid a) -> CInt -> IO CBool -- | usage: (@gridCanDragGridSize obj@). gridCanDragGridSize :: Grid a -> IO Bool @@ -8071,13 +8113,13 @@ wxGrid_CanDragGridSize cobj__obj foreign import ccall "wxGrid_CanDragGridSize" wxGrid_CanDragGridSize :: Ptr (TGrid a) -> IO CBool --- | usage: (@gridCanDragRowSize obj@). -gridCanDragRowSize :: Grid a -> IO Bool -gridCanDragRowSize _obj +-- | usage: (@gridCanDragRowSize obj row@). +gridCanDragRowSize :: Grid a -> Int -> IO Bool +gridCanDragRowSize _obj row = withBoolResult $ withObjectRef "gridCanDragRowSize" _obj $ \cobj__obj -> - wxGrid_CanDragRowSize cobj__obj -foreign import ccall "wxGrid_CanDragRowSize" wxGrid_CanDragRowSize :: Ptr (TGrid a) -> IO CBool + wxGrid_CanDragRowSize cobj__obj (toCInt row) +foreign import ccall "wxGrid_CanDragRowSize" wxGrid_CanDragRowSize :: Ptr (TGrid a) -> CInt -> IO CBool -- | usage: (@gridCanEnableCellControl obj@). gridCanEnableCellControl :: Grid a -> IO Bool @@ -10809,13 +10851,13 @@ wxImage_CreateFromBitmap cobj_bitmap foreign import ccall "wxImage_CreateFromBitmap" wxImage_CreateFromBitmap :: Ptr (TBitmap a) -> IO (Ptr (TImage ())) --- | usage: (@imageCreateFromByteString datalength wxtype@). -imageCreateFromByteString :: B.ByteString -> Int -> IO (Image ()) -imageCreateFromByteString datalength wxtype +-- | usage: (@imageCreateFromByteString widthheight datalength@). +imageCreateFromByteString :: Size -> B.ByteString -> IO (Image ()) +imageCreateFromByteString widthheight datalength = withManagedObjectResult $ B.useAsCStringLen datalength $ \(bs_datalength, bslen_datalength) -> - wxImage_CreateFromByteString bs_datalength bslen_datalength (toCInt wxtype) -foreign import ccall "wxImage_CreateFromByteString" wxImage_CreateFromByteString :: Ptr CChar -> Int -> CInt -> IO (Ptr (TImage ())) + wxImage_CreateFromByteString (toCIntSizeW widthheight) (toCIntSizeH widthheight) bs_datalength bslen_datalength +foreign import ccall "wxImage_CreateFromByteString" wxImage_CreateFromByteString :: CInt -> CInt -> Ptr CChar -> Int -> IO (Ptr (TImage ())) -- | usage: (@imageCreateFromData widthheight wxdata@). imageCreateFromData :: Size -> Ptr b -> IO (Image ()) @@ -10839,13 +10881,13 @@ wxImage_CreateFromFile cobj_name foreign import ccall "wxImage_CreateFromFile" wxImage_CreateFromFile :: Ptr (TWxString a) -> IO (Ptr (TImage ())) --- | usage: (@imageCreateFromLazyByteString datalength wxtype@). -imageCreateFromLazyByteString :: LB.ByteString -> Int -> IO (Image ()) -imageCreateFromLazyByteString datalength wxtype +-- | usage: (@imageCreateFromLazyByteString widthheight datalength@). +imageCreateFromLazyByteString :: Size -> LB.ByteString -> IO (Image ()) +imageCreateFromLazyByteString widthheight datalength = withManagedObjectResult $ withArray (LB.unpack datalength) $ \bs_datalength -> - wxImage_CreateFromLazyByteString bs_datalength (fromIntegral $ LB.length datalength) (toCInt wxtype) -foreign import ccall "wxImage_CreateFromLazyByteString" wxImage_CreateFromLazyByteString :: Ptr Word8 -> Int -> CInt -> IO (Ptr (TImage ())) + wxImage_CreateFromLazyByteString (toCIntSizeW widthheight) (toCIntSizeH widthheight) bs_datalength (fromIntegral $ LB.length datalength) +foreign import ccall "wxImage_CreateFromLazyByteString" wxImage_CreateFromLazyByteString :: CInt -> CInt -> Ptr Word8 -> Int -> IO (Ptr (TImage ())) -- | usage: (@imageCreateSized widthheight@). imageCreateSized :: Size -> IO (Image ()) @@ -13080,13 +13122,6 @@ withCWString ts $ \cstr_ts -> wxLog_SetTimestamp cobj__obj cstr_ts foreign import ccall "wxLog_SetTimestamp" wxLog_SetTimestamp :: Ptr (TLog a) -> CWString -> IO () - --- | usage: (@logSetTraceMask obj ulMask@). -logSetTraceMask :: Log a -> Int -> IO () -logSetTraceMask _obj ulMask - = withObjectRef "logSetTraceMask" _obj $ \cobj__obj -> - wxLog_SetTraceMask cobj__obj (toCInt ulMask) -foreign import ccall "wxLog_SetTraceMask" wxLog_SetTraceMask :: Ptr (TLog a) -> CInt -> IO () -- | usage: (@logSetVerbose obj bVerbose@). logSetVerbose :: Log a -> Bool -> IO ()
src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs view
@@ -15,9 +15,9 @@ From the files: - * @C:\Documents and Settings\Henk-Jan\Application Data\cabal\i386-windows-ghc-7.6.3\wxc-0.90.1.0\include\wxc.h@ + * @C:\Users\-\AppData\Roaming\cabal\i386-windows-ghc-7.8.3\wxc-0.91.0.0\include\wxc.h@ -And contains 2340 methods for 129 classes. +And contains 2333 methods for 129 classes. -} -------------------------------------------------------------------------------- module Graphics.UI.WXCore.WxcClassesMZ @@ -625,7 +625,7 @@ ,menuGetClientData ,menuGetHelpString ,menuGetInvokingWindow - ,menuGetLabel + ,menuGetLabelText ,menuGetMenuBar ,menuGetMenuItemCount ,menuGetMenuItems @@ -665,9 +665,9 @@ ,menuBarGetFrame ,menuBarGetHelpString ,menuBarGetLabel - ,menuBarGetLabelTop ,menuBarGetMenu ,menuBarGetMenuCount + ,menuBarGetMenuLabel ,menuBarInsert ,menuBarIsChecked ,menuBarIsEnabled @@ -676,7 +676,7 @@ ,menuBarSetHelpString ,menuBarSetItemLabel ,menuBarSetLabel - ,menuBarSetLabelTop + ,menuBarSetMenuLabel -- ** MenuEvent ,menuEventCopyObject ,menuEventGetMenuId @@ -689,11 +689,11 @@ ,menuItemEnable ,menuItemGetHelp ,menuItemGetId - ,menuItemGetLabel - ,menuItemGetLabelFromText + ,menuItemGetItemLabel + ,menuItemGetItemLabelText + ,menuItemGetLabelText ,menuItemGetMenu ,menuItemGetSubMenu - ,menuItemGetText ,menuItemIsCheckable ,menuItemIsChecked ,menuItemIsEnabled @@ -702,8 +702,8 @@ ,menuItemSetCheckable ,menuItemSetHelp ,menuItemSetId + ,menuItemSetItemLabel ,menuItemSetSubMenu - ,menuItemSetText -- ** MessageDialog ,messageDialogCreate ,messageDialogDelete @@ -1303,11 +1303,13 @@ ,sizerSetItemMinSizeWindow ,sizerSetMinSize ,sizerSetSizeHints - ,sizerSetVirtualSizeHints ,sizerShow ,sizerShowSizer ,sizerShowWindow -- ** SizerItem + ,sizerItemAssignSizer + ,sizerItemAssignSpacer + ,sizerItemAssignWindow ,sizerItemCalcMin ,sizerItemCreate ,sizerItemCreateInSizer @@ -1338,9 +1340,6 @@ ,sizerItemSetInitSize ,sizerItemSetProportion ,sizerItemSetRatio - ,sizerItemSetSizer - ,sizerItemSetSpacer - ,sizerItemSetWindow ,sizerItemShow -- ** Slider ,sliderClearSel @@ -1361,7 +1360,6 @@ ,sliderSetSelection ,sliderSetThumbLength ,sliderSetTick - ,sliderSetTickFreq ,sliderSetValue -- ** Sound ,soundCreate @@ -1403,7 +1401,6 @@ ,splitterWindowSetMinimumPaneSize ,splitterWindowSetSashGravity ,splitterWindowSetSashPosition - ,splitterWindowSetSashSize ,splitterWindowSetSplitMode ,splitterWindowSplitHorizontally ,splitterWindowSplitVertically @@ -1955,7 +1952,6 @@ ,toolBarAddSeparator ,toolBarAddTool ,toolBarAddTool2 - ,toolBarAddToolEx ,toolBarCreate ,toolBarDelete ,toolBarDeleteTool @@ -1972,7 +1968,6 @@ ,toolBarGetToolState ,toolBarInsertControl ,toolBarInsertSeparator - ,toolBarInsertTool ,toolBarRealize ,toolBarRemoveTool ,toolBarSetMargins @@ -2098,8 +2093,8 @@ ,validatorCreate ,validatorDelete ,validatorGetWindow - ,validatorSetBellOnError ,validatorSetWindow + ,validatorSuppressBellOnError ,validatorTransferFromWindow ,validatorTransferToWindow ,validatorValidate @@ -2205,7 +2200,6 @@ ,wxcLogResume ,wxcLogSetActiveTarget ,wxcLogSetTimestamp - ,wxcLogSetTraceMask ,wxcLogSetVerbose ,wxcLogSuspend -- ** WXCPreviewControlBar @@ -2325,7 +2319,6 @@ ,windowLayoutPhase1 ,windowLayoutPhase2 ,windowLower - ,windowMakeModal ,windowMove ,windowMoveConstraint ,windowPopEventHandler @@ -3062,14 +3055,6 @@ wxMenuBar_GetLabel cobj__obj (toCInt id) foreign import ccall "wxMenuBar_GetLabel" wxMenuBar_GetLabel :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ())) --- | usage: (@menuBarGetLabelTop obj pos@). -menuBarGetLabelTop :: MenuBar a -> Int -> IO (String) -menuBarGetLabelTop _obj pos - = withManagedStringResult $ - withObjectRef "menuBarGetLabelTop" _obj $ \cobj__obj -> - wxMenuBar_GetLabelTop cobj__obj (toCInt pos) -foreign import ccall "wxMenuBar_GetLabelTop" wxMenuBar_GetLabelTop :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ())) - -- | usage: (@menuBarGetMenu obj pos@). menuBarGetMenu :: MenuBar a -> Int -> IO (Menu ()) menuBarGetMenu _obj pos @@ -3086,6 +3071,14 @@ wxMenuBar_GetMenuCount cobj__obj foreign import ccall "wxMenuBar_GetMenuCount" wxMenuBar_GetMenuCount :: Ptr (TMenuBar a) -> IO CInt +-- | usage: (@menuBarGetMenuLabel obj pos@). +menuBarGetMenuLabel :: MenuBar a -> Int -> IO (String) +menuBarGetMenuLabel _obj pos + = withManagedStringResult $ + withObjectRef "menuBarGetMenuLabel" _obj $ \cobj__obj -> + wxMenuBar_GetMenuLabel cobj__obj (toCInt pos) +foreign import ccall "wxMenuBar_GetMenuLabel" wxMenuBar_GetMenuLabel :: Ptr (TMenuBar a) -> CInt -> IO (Ptr (TWxString ())) + -- | usage: (@menuBarInsert obj pos menu title@). menuBarInsert :: MenuBar a -> Int -> Menu c -> String -> IO Int menuBarInsert _obj pos menu title @@ -3154,13 +3147,13 @@ wxMenuBar_SetLabel cobj__obj cobj_s foreign import ccall "wxMenuBar_SetLabel" wxMenuBar_SetLabel :: Ptr (TMenuBar a) -> Ptr (TWxString b) -> IO () --- | usage: (@menuBarSetLabelTop obj pos label@). -menuBarSetLabelTop :: MenuBar a -> Int -> String -> IO () -menuBarSetLabelTop _obj pos label - = withObjectRef "menuBarSetLabelTop" _obj $ \cobj__obj -> +-- | usage: (@menuBarSetMenuLabel obj pos label@). +menuBarSetMenuLabel :: MenuBar a -> Int -> String -> IO () +menuBarSetMenuLabel _obj pos label + = withObjectRef "menuBarSetMenuLabel" _obj $ \cobj__obj -> withStringPtr label $ \cobj_label -> - wxMenuBar_SetLabelTop cobj__obj (toCInt pos) cobj_label -foreign import ccall "wxMenuBar_SetLabelTop" wxMenuBar_SetLabelTop :: Ptr (TMenuBar a) -> CInt -> Ptr (TWxString c) -> IO () + wxMenuBar_SetMenuLabel cobj__obj (toCInt pos) cobj_label +foreign import ccall "wxMenuBar_SetMenuLabel" wxMenuBar_SetMenuLabel :: Ptr (TMenuBar a) -> CInt -> Ptr (TWxString c) -> IO () -- | usage: (@menuBreak obj@). menuBreak :: Menu a -> IO () @@ -3284,13 +3277,13 @@ wxMenu_GetInvokingWindow cobj__obj foreign import ccall "wxMenu_GetInvokingWindow" wxMenu_GetInvokingWindow :: Ptr (TMenu a) -> IO (Ptr (TWindow ())) --- | usage: (@menuGetLabel obj id@). -menuGetLabel :: Menu a -> Id -> IO (String) -menuGetLabel _obj id +-- | usage: (@menuGetLabelText obj id@). +menuGetLabelText :: Menu a -> Id -> IO (String) +menuGetLabelText _obj id = withManagedStringResult $ - withObjectRef "menuGetLabel" _obj $ \cobj__obj -> - wxMenu_GetLabel cobj__obj (toCInt id) -foreign import ccall "wxMenu_GetLabel" wxMenu_GetLabel :: Ptr (TMenu a) -> CInt -> IO (Ptr (TWxString ())) + withObjectRef "menuGetLabelText" _obj $ \cobj__obj -> + wxMenu_GetLabelText cobj__obj (toCInt id) +foreign import ccall "wxMenu_GetLabelText" wxMenu_GetLabelText :: Ptr (TMenu a) -> CInt -> IO (Ptr (TWxString ())) -- | usage: (@menuGetMenuBar obj@). menuGetMenuBar :: Menu a -> IO (MenuBar ()) @@ -3452,21 +3445,29 @@ wxMenuItem_GetId cobj__obj foreign import ccall "wxMenuItem_GetId" wxMenuItem_GetId :: Ptr (TMenuItem a) -> IO CInt --- | usage: (@menuItemGetLabel obj@). -menuItemGetLabel :: MenuItem a -> IO (String) -menuItemGetLabel _obj +-- | usage: (@menuItemGetItemLabel obj@). +menuItemGetItemLabel :: MenuItem a -> IO (String) +menuItemGetItemLabel _obj = withManagedStringResult $ - withObjectRef "menuItemGetLabel" _obj $ \cobj__obj -> - wxMenuItem_GetLabel cobj__obj -foreign import ccall "wxMenuItem_GetLabel" wxMenuItem_GetLabel :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ())) + withObjectRef "menuItemGetItemLabel" _obj $ \cobj__obj -> + wxMenuItem_GetItemLabel cobj__obj +foreign import ccall "wxMenuItem_GetItemLabel" wxMenuItem_GetItemLabel :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ())) --- | usage: (@menuItemGetLabelFromText text@). -menuItemGetLabelFromText :: String -> IO (String) -menuItemGetLabelFromText text +-- | usage: (@menuItemGetItemLabelText obj@). +menuItemGetItemLabelText :: MenuItem a -> IO (String) +menuItemGetItemLabelText _obj = withManagedStringResult $ + withObjectRef "menuItemGetItemLabelText" _obj $ \cobj__obj -> + wxMenuItem_GetItemLabelText cobj__obj +foreign import ccall "wxMenuItem_GetItemLabelText" wxMenuItem_GetItemLabelText :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ())) + +-- | usage: (@menuItemGetLabelText text@). +menuItemGetLabelText :: String -> IO (String) +menuItemGetLabelText text + = withManagedStringResult $ withCWString text $ \cstr_text -> - wxMenuItem_GetLabelFromText cstr_text -foreign import ccall "wxMenuItem_GetLabelFromText" wxMenuItem_GetLabelFromText :: CWString -> IO (Ptr (TWxString ())) + wxMenuItem_GetLabelText cstr_text +foreign import ccall "wxMenuItem_GetLabelText" wxMenuItem_GetLabelText :: CWString -> IO (Ptr (TWxString ())) -- | usage: (@menuItemGetMenu obj@). menuItemGetMenu :: MenuItem a -> IO (Menu ()) @@ -3484,14 +3485,6 @@ wxMenuItem_GetSubMenu cobj__obj foreign import ccall "wxMenuItem_GetSubMenu" wxMenuItem_GetSubMenu :: Ptr (TMenuItem a) -> IO (Ptr (TMenu ())) --- | usage: (@menuItemGetText obj@). -menuItemGetText :: MenuItem a -> IO (String) -menuItemGetText _obj - = withManagedStringResult $ - withObjectRef "menuItemGetText" _obj $ \cobj__obj -> - wxMenuItem_GetText cobj__obj -foreign import ccall "wxMenuItem_GetText" wxMenuItem_GetText :: Ptr (TMenuItem a) -> IO (Ptr (TWxString ())) - -- | usage: (@menuItemIsCheckable obj@). menuItemIsCheckable :: MenuItem a -> IO Bool menuItemIsCheckable _obj @@ -3554,6 +3547,14 @@ wxMenuItem_SetId cobj__obj (toCInt id) foreign import ccall "wxMenuItem_SetId" wxMenuItem_SetId :: Ptr (TMenuItem a) -> CInt -> IO () +-- | usage: (@menuItemSetItemLabel obj str@). +menuItemSetItemLabel :: MenuItem a -> String -> IO () +menuItemSetItemLabel _obj str + = withObjectRef "menuItemSetItemLabel" _obj $ \cobj__obj -> + withStringPtr str $ \cobj_str -> + wxMenuItem_SetItemLabel cobj__obj cobj_str +foreign import ccall "wxMenuItem_SetItemLabel" wxMenuItem_SetItemLabel :: Ptr (TMenuItem a) -> Ptr (TWxString b) -> IO () + -- | usage: (@menuItemSetSubMenu obj menu@). menuItemSetSubMenu :: MenuItem a -> Menu b -> IO () menuItemSetSubMenu _obj menu @@ -3562,14 +3563,6 @@ wxMenuItem_SetSubMenu cobj__obj cobj_menu foreign import ccall "wxMenuItem_SetSubMenu" wxMenuItem_SetSubMenu :: Ptr (TMenuItem a) -> Ptr (TMenu b) -> IO () --- | usage: (@menuItemSetText obj str@). -menuItemSetText :: MenuItem a -> String -> IO () -menuItemSetText _obj str - = withObjectRef "menuItemSetText" _obj $ \cobj__obj -> - withStringPtr str $ \cobj_str -> - wxMenuItem_SetText cobj__obj cobj_str -foreign import ccall "wxMenuItem_SetText" wxMenuItem_SetText :: Ptr (TMenuItem a) -> Ptr (TWxString b) -> IO () - -- | usage: (@menuPrepend obj id text help isCheckable@). menuPrepend :: Menu a -> Id -> String -> String -> Bool -> IO () menuPrepend _obj id text help isCheckable @@ -7870,6 +7863,29 @@ wxSizer_IsShownWindow cobj__obj window foreign import ccall "wxSizer_IsShownWindow" wxSizer_IsShownWindow :: Ptr (TSizer a) -> Ptr (Ptr (TWindow b)) -> IO CBool +-- | usage: (@sizerItemAssignSizer obj sizer@). +sizerItemAssignSizer :: SizerItem a -> Sizer b -> IO () +sizerItemAssignSizer _obj sizer + = withObjectRef "sizerItemAssignSizer" _obj $ \cobj__obj -> + withObjectPtr sizer $ \cobj_sizer -> + wxSizerItem_AssignSizer cobj__obj cobj_sizer +foreign import ccall "wxSizerItem_AssignSizer" wxSizerItem_AssignSizer :: Ptr (TSizerItem a) -> Ptr (TSizer b) -> IO () + +-- | usage: (@sizerItemAssignSpacer obj widthheight@). +sizerItemAssignSpacer :: SizerItem a -> Size -> IO () +sizerItemAssignSpacer _obj widthheight + = withObjectRef "sizerItemAssignSpacer" _obj $ \cobj__obj -> + wxSizerItem_AssignSpacer cobj__obj (toCIntSizeW widthheight) (toCIntSizeH widthheight) +foreign import ccall "wxSizerItem_AssignSpacer" wxSizerItem_AssignSpacer :: Ptr (TSizerItem a) -> CInt -> CInt -> IO () + +-- | usage: (@sizerItemAssignWindow obj window@). +sizerItemAssignWindow :: SizerItem a -> Window b -> IO () +sizerItemAssignWindow _obj window + = withObjectRef "sizerItemAssignWindow" _obj $ \cobj__obj -> + withObjectPtr window $ \cobj_window -> + wxSizerItem_AssignWindow cobj__obj cobj_window +foreign import ccall "wxSizerItem_AssignWindow" wxSizerItem_AssignWindow :: Ptr (TSizerItem a) -> Ptr (TWindow b) -> IO () + -- | usage: (@sizerItemCalcMin obj@). sizerItemCalcMin :: SizerItem a -> IO (Size) sizerItemCalcMin _obj @@ -8094,29 +8110,6 @@ wxSizerItem_SetRatio cobj__obj (toCIntSizeW widthheight) (toCIntSizeH widthheight) foreign import ccall "wxSizerItem_SetRatio" wxSizerItem_SetRatio :: Ptr (TSizerItem a) -> CInt -> CInt -> IO () --- | usage: (@sizerItemSetSizer obj sizer@). -sizerItemSetSizer :: SizerItem a -> Sizer b -> IO () -sizerItemSetSizer _obj sizer - = withObjectRef "sizerItemSetSizer" _obj $ \cobj__obj -> - withObjectPtr sizer $ \cobj_sizer -> - wxSizerItem_SetSizer cobj__obj cobj_sizer -foreign import ccall "wxSizerItem_SetSizer" wxSizerItem_SetSizer :: Ptr (TSizerItem a) -> Ptr (TSizer b) -> IO () - --- | usage: (@sizerItemSetSpacer obj widthheight@). -sizerItemSetSpacer :: SizerItem a -> Size -> IO () -sizerItemSetSpacer _obj widthheight - = withObjectRef "sizerItemSetSpacer" _obj $ \cobj__obj -> - wxSizerItem_SetSpacer cobj__obj (toCIntSizeW widthheight) (toCIntSizeH widthheight) -foreign import ccall "wxSizerItem_SetSpacer" wxSizerItem_SetSpacer :: Ptr (TSizerItem a) -> CInt -> CInt -> IO () - --- | usage: (@sizerItemSetWindow obj window@). -sizerItemSetWindow :: SizerItem a -> Window b -> IO () -sizerItemSetWindow _obj window - = withObjectRef "sizerItemSetWindow" _obj $ \cobj__obj -> - withObjectPtr window $ \cobj_window -> - wxSizerItem_SetWindow cobj__obj cobj_window -foreign import ccall "wxSizerItem_SetWindow" wxSizerItem_SetWindow :: Ptr (TSizerItem a) -> Ptr (TWindow b) -> IO () - -- | usage: (@sizerItemShow obj show@). sizerItemShow :: SizerItem a -> Int -> IO () sizerItemShow _obj show @@ -8251,14 +8244,6 @@ wxSizer_SetSizeHints cobj__obj cobj_window foreign import ccall "wxSizer_SetSizeHints" wxSizer_SetSizeHints :: Ptr (TSizer a) -> Ptr (TWindow b) -> IO () --- | usage: (@sizerSetVirtualSizeHints obj window@). -sizerSetVirtualSizeHints :: Sizer a -> Window b -> IO () -sizerSetVirtualSizeHints _obj window - = withObjectRef "sizerSetVirtualSizeHints" _obj $ \cobj__obj -> - withObjectPtr window $ \cobj_window -> - wxSizer_SetVirtualSizeHints cobj__obj cobj_window -foreign import ccall "wxSizer_SetVirtualSizeHints" wxSizer_SetVirtualSizeHints :: Ptr (TSizer a) -> Ptr (TWindow b) -> IO () - -- | usage: (@sizerShow obj sizer index show@). sizerShow :: Sizer a -> Sizer b -> Int -> Bool -> IO Bool sizerShow _obj sizer index show @@ -8422,13 +8407,6 @@ wxSlider_SetTick cobj__obj (toCInt tickPos) foreign import ccall "wxSlider_SetTick" wxSlider_SetTick :: Ptr (TSlider a) -> CInt -> IO () --- | usage: (@sliderSetTickFreq obj n pos@). -sliderSetTickFreq :: Slider a -> Int -> Int -> IO () -sliderSetTickFreq _obj n pos - = withObjectRef "sliderSetTickFreq" _obj $ \cobj__obj -> - wxSlider_SetTickFreq cobj__obj (toCInt n) (toCInt pos) -foreign import ccall "wxSlider_SetTickFreq" wxSlider_SetTickFreq :: Ptr (TSlider a) -> CInt -> CInt -> IO () - -- | usage: (@sliderSetValue obj value@). sliderSetValue :: Slider a -> Int -> IO () sliderSetValue _obj value @@ -8706,13 +8684,6 @@ wxSplitterWindow_SetSashPosition cobj__obj (toCInt position) (toCBool redraw) foreign import ccall "wxSplitterWindow_SetSashPosition" wxSplitterWindow_SetSashPosition :: Ptr (TSplitterWindow a) -> CInt -> CBool -> IO () --- | usage: (@splitterWindowSetSashSize obj width@). -splitterWindowSetSashSize :: SplitterWindow a -> Int -> IO () -splitterWindowSetSashSize _obj width - = withObjectRef "splitterWindowSetSashSize" _obj $ \cobj__obj -> - wxSplitterWindow_SetSashSize cobj__obj (toCInt width) -foreign import ccall "wxSplitterWindow_SetSashSize" wxSplitterWindow_SetSashSize :: Ptr (TSplitterWindow a) -> CInt -> IO () - -- | usage: (@splitterWindowSetSplitMode obj mode@). splitterWindowSetSplitMode :: SplitterWindow a -> Int -> IO () splitterWindowSetSplitMode _obj mode @@ -12782,15 +12753,18 @@ wxToolBar_AddSeparator cobj__obj foreign import ccall "wxToolBar_AddSeparator" wxToolBar_AddSeparator :: Ptr (TToolBar a) -> IO () --- | usage: (@toolBarAddTool obj id bmp shelp lhelp@). -toolBarAddTool :: ToolBar a -> Id -> Bitmap c -> String -> String -> IO () -toolBarAddTool _obj id bmp shelp lhelp +-- | usage: (@toolBarAddTool obj toolid label bitmap bmpDisabled kind shortHelp longHelp wxdata@). +toolBarAddTool :: ToolBar a -> Int -> String -> Bitmap d -> Bitmap e -> Int -> String -> String -> WxObject i -> IO () +toolBarAddTool _obj toolid label bitmap bmpDisabled kind shortHelp longHelp wxdata = withObjectRef "toolBarAddTool" _obj $ \cobj__obj -> - withObjectPtr bmp $ \cobj_bmp -> - withStringPtr shelp $ \cobj_shelp -> - withStringPtr lhelp $ \cobj_lhelp -> - wxToolBar_AddTool cobj__obj (toCInt id) cobj_bmp cobj_shelp cobj_lhelp -foreign import ccall "wxToolBar_AddTool" wxToolBar_AddTool :: Ptr (TToolBar a) -> CInt -> Ptr (TBitmap c) -> Ptr (TWxString d) -> Ptr (TWxString e) -> IO () + withStringPtr label $ \cobj_label -> + withObjectPtr bitmap $ \cobj_bitmap -> + withObjectPtr bmpDisabled $ \cobj_bmpDisabled -> + withStringPtr shortHelp $ \cobj_shortHelp -> + withStringPtr longHelp $ \cobj_longHelp -> + withObjectPtr wxdata $ \cobj_wxdata -> + wxToolBar_AddTool cobj__obj (toCInt toolid) cobj_label cobj_bitmap cobj_bmpDisabled (toCInt kind) cobj_shortHelp cobj_longHelp cobj_wxdata +foreign import ccall "wxToolBar_AddTool" wxToolBar_AddTool :: Ptr (TToolBar a) -> CInt -> Ptr (TWxString c) -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CInt -> Ptr (TWxString g) -> Ptr (TWxString h) -> Ptr (TWxObject i) -> IO () -- | usage: (@toolBarAddTool2 obj toolId label bmp bmpDisabled itemKind shortHelp longHelp@). toolBarAddTool2 :: ToolBar a -> Int -> String -> Bitmap d -> Bitmap e -> Int -> String -> String -> IO () @@ -12804,18 +12778,6 @@ wxToolBar_AddTool2 cobj__obj (toCInt toolId) cobj_label cobj_bmp cobj_bmpDisabled (toCInt itemKind) cobj_shortHelp cobj_longHelp foreign import ccall "wxToolBar_AddTool2" wxToolBar_AddTool2 :: Ptr (TToolBar a) -> CInt -> Ptr (TWxString c) -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CInt -> Ptr (TWxString g) -> Ptr (TWxString h) -> IO () --- | usage: (@toolBarAddToolEx obj id bmp1 bmp2 isToggle xy wxdata shelp lhelp@). -toolBarAddToolEx :: ToolBar a -> Id -> Bitmap c -> Bitmap d -> Bool -> Point -> WxObject g -> String -> String -> IO () -toolBarAddToolEx _obj id bmp1 bmp2 isToggle xy wxdata shelp lhelp - = withObjectRef "toolBarAddToolEx" _obj $ \cobj__obj -> - withObjectPtr bmp1 $ \cobj_bmp1 -> - withObjectPtr bmp2 $ \cobj_bmp2 -> - withObjectPtr wxdata $ \cobj_wxdata -> - withStringPtr shelp $ \cobj_shelp -> - withStringPtr lhelp $ \cobj_lhelp -> - wxToolBar_AddToolEx cobj__obj (toCInt id) cobj_bmp1 cobj_bmp2 (toCBool isToggle) (toCIntPointX xy) (toCIntPointY xy) cobj_wxdata cobj_shelp cobj_lhelp -foreign import ccall "wxToolBar_AddToolEx" wxToolBar_AddToolEx :: Ptr (TToolBar a) -> CInt -> Ptr (TBitmap c) -> Ptr (TBitmap d) -> CBool -> CInt -> CInt -> Ptr (TWxObject g) -> Ptr (TWxString h) -> Ptr (TWxString i) -> IO () - -- | usage: (@toolBarCreate prt id lfttopwdthgt stl@). toolBarCreate :: Window a -> Id -> Rect -> Style -> IO (ToolBar ()) toolBarCreate _prt _id _lfttopwdthgt _stl @@ -12940,18 +12902,6 @@ wxToolBar_InsertSeparator cobj__obj (toCInt pos) foreign import ccall "wxToolBar_InsertSeparator" wxToolBar_InsertSeparator :: Ptr (TToolBar a) -> CInt -> IO () --- | usage: (@toolBarInsertTool obj pos id bmp1 bmp2 isToggle wxdata shelp lhelp@). -toolBarInsertTool :: ToolBar a -> Int -> Id -> Bitmap d -> Bitmap e -> Bool -> WxObject g -> String -> String -> IO () -toolBarInsertTool _obj pos id bmp1 bmp2 isToggle wxdata shelp lhelp - = withObjectRef "toolBarInsertTool" _obj $ \cobj__obj -> - withObjectPtr bmp1 $ \cobj_bmp1 -> - withObjectPtr bmp2 $ \cobj_bmp2 -> - withObjectPtr wxdata $ \cobj_wxdata -> - withStringPtr shelp $ \cobj_shelp -> - withStringPtr lhelp $ \cobj_lhelp -> - wxToolBar_InsertTool cobj__obj (toCInt pos) (toCInt id) cobj_bmp1 cobj_bmp2 (toCBool isToggle) cobj_wxdata cobj_shelp cobj_lhelp -foreign import ccall "wxToolBar_InsertTool" wxToolBar_InsertTool :: Ptr (TToolBar a) -> CInt -> CInt -> Ptr (TBitmap d) -> Ptr (TBitmap e) -> CBool -> Ptr (TWxObject g) -> Ptr (TWxString h) -> Ptr (TWxString i) -> IO () - -- | usage: (@toolBarRealize obj@). toolBarRealize :: ToolBar a -> IO Bool toolBarRealize _obj @@ -13935,12 +13885,6 @@ wxValidator_GetWindow cobj__obj foreign import ccall "wxValidator_GetWindow" wxValidator_GetWindow :: Ptr (TValidator a) -> IO (Ptr (TWindow ())) --- | usage: (@validatorSetBellOnError doIt@). -validatorSetBellOnError :: Bool -> IO () -validatorSetBellOnError doIt - = wxValidator_SetBellOnError (toCBool doIt) -foreign import ccall "wxValidator_SetBellOnError" wxValidator_SetBellOnError :: CBool -> IO () - -- | usage: (@validatorSetWindow obj win@). validatorSetWindow :: Validator a -> Window b -> IO () validatorSetWindow _obj win @@ -13949,6 +13893,12 @@ wxValidator_SetWindow cobj__obj cobj_win foreign import ccall "wxValidator_SetWindow" wxValidator_SetWindow :: Ptr (TValidator a) -> Ptr (TWindow b) -> IO () +-- | usage: (@validatorSuppressBellOnError doIt@). +validatorSuppressBellOnError :: Bool -> IO () +validatorSuppressBellOnError doIt + = wxValidator_SuppressBellOnError (toCBool doIt) +foreign import ccall "wxValidator_SuppressBellOnError" wxValidator_SuppressBellOnError :: CBool -> IO () + -- | usage: (@validatorTransferFromWindow obj@). validatorTransferFromWindow :: Validator a -> IO Bool validatorTransferFromWindow _obj @@ -14633,13 +14583,6 @@ wxWindow_Lower cobj__obj foreign import ccall "wxWindow_Lower" wxWindow_Lower :: Ptr (TWindow a) -> IO () --- | usage: (@windowMakeModal obj modal@). -windowMakeModal :: Window a -> Bool -> IO () -windowMakeModal _obj modal - = withObjectRef "windowMakeModal" _obj $ \cobj__obj -> - wxWindow_MakeModal cobj__obj (toCBool modal) -foreign import ccall "wxWindow_MakeModal" wxWindow_MakeModal :: Ptr (TWindow a) -> CBool -> IO () - -- | usage: (@windowMove obj xy@). windowMove :: Window a -> Point -> IO () windowMove _obj xy @@ -20352,13 +20295,6 @@ = withObjectRef "wxcLogSetTimestamp" _obj $ \cobj__obj -> wx_ELJLog_SetTimestamp cobj__obj ts foreign import ccall "ELJLog_SetTimestamp" wx_ELJLog_SetTimestamp :: Ptr (TWXCLog a) -> Ptr b -> IO () - --- | usage: (@wxcLogSetTraceMask obj ulMask@). -wxcLogSetTraceMask :: WXCLog a -> Int -> IO () -wxcLogSetTraceMask _obj ulMask - = withObjectRef "wxcLogSetTraceMask" _obj $ \cobj__obj -> - wx_ELJLog_SetTraceMask cobj__obj (toCInt ulMask) -foreign import ccall "ELJLog_SetTraceMask" wx_ELJLog_SetTraceMask :: Ptr (TWXCLog a) -> CInt -> IO () -- | usage: (@wxcLogSetVerbose obj bVerbose@). wxcLogSetVerbose :: WXCLog a -> Int -> IO ()
src/haskell/Graphics/UI/WXCore/WxcDefs.hs view
@@ -1,9912 +1,10752 @@----------------------------------------------------------------------------------{-| Module : WxcDefs- Copyright : Copyright (c) Daan Leijen 2003, 2004- License : wxWidgets-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Haskell constant definitions for the wxWidgets C library (@wxc.dll@).--This file was originally generated automatically by wxDirect; it-is now manually maintained.---}----------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcDefs- ( -- * Types- BitFlag- -- * Constants- ,wxBU_EXACTFIT- ,wxTE_PROCESS_ENTER- ,wxTE_PASSWORD- ,wxTE_RICH2- ,wxTE_AUTO_URL- ,wxTE_NOHIDESEL- ,wxTE_LEFT- ,wxTE_RIGHT- ,wxTE_CENTRE- ,wxTE_LINEWRAP- ,wxTE_WORDWRAP- ,wxEXEC_ASYNC- ,wxEXEC_SYNC- ,wxEXEC_NOHIDE- ,wxEXEC_MAKE_GROUP_LEADER- ,wxITEM_SEPARATOR- ,wxITEM_NORMAL- ,wxITEM_CHECK- ,wxITEM_RADIO- ,wxITEM_MAX- ,wxCLOSE_BOX- ,wxFRAME_EX_CONTEXTHELP- ,wxDIALOG_EX_CONTEXTHELP- ,wxFRAME_SHAPED- ,wxFULLSCREEN_ALL- ,wxTreeItemIcon_Normal- ,wxTreeItemIcon_Selected- ,wxTreeItemIcon_Expanded- ,wxTreeItemIcon_SelectedExpanded- ,wxCONFIG_USE_LOCAL_FILE- ,wxCONFIG_USE_GLOBAL_FILE- ,wxCONFIG_USE_RELATIVE_PATH- ,wxCONFIG_USE_NO_ESCAPE_CHARACTERS- ,wxCONFIG_TYPE_UNKNOWN- ,wxCONFIG_TYPE_STRING- ,wxCONFIG_TYPE_BOOLEAN- ,wxCONFIG_TYPE_INTEGER- ,wxCONFIG_TYPE_FLOAT- ,wxSIGNONE- ,wxSIGHUP- ,wxSIGINT- ,wxSIGQUIT- ,wxSIGILL- ,wxSIGTRAP- ,wxSIGABRT- ,wxSIGEMT- ,wxSIGFPE- ,wxSIGKILL- ,wxSIGBUS- ,wxSIGSEGV- ,wxSIGSYS- ,wxSIGPIPE- ,wxSIGALRM- ,wxSIGTERM- ,wxKILL_OK- ,wxKILL_BAD_SIGNAL- ,wxKILL_ACCESS_DENIED- ,wxKILL_NO_PROCESS- ,wxKILL_ERROR- ,wxSTREAM_NO_ERROR- ,wxSTREAM_EOF- ,wxSTREAM_WRITE_ERROR- ,wxSTREAM_READ_ERROR- ,wxNB_MULTILINE- ,wxIMAGE_LIST_NORMAL- ,wxIMAGE_LIST_SMALL- ,wxIMAGE_LIST_STATE- ,wxTB_HORIZONTAL- ,wxTB_NOALIGN- ,wxTB_NODIVIDER- ,wxTB_NOICONS- ,wxTB_TEXT- ,wxTB_VERTICAL- ,wxADJUST_MINSIZE- ,wxDB_TYPE_NAME_LEN- ,wxDB_MAX_STATEMENT_LEN- ,wxDB_MAX_WHERE_CLAUSE_LEN- ,wxDB_MAX_ERROR_MSG_LEN- ,wxDB_MAX_ERROR_HISTORY- ,wxDB_MAX_TABLE_NAME_LEN- ,wxDB_MAX_COLUMN_NAME_LEN- ,wxDB_DATA_TYPE_VARCHAR- ,wxDB_DATA_TYPE_INTEGER- ,wxDB_DATA_TYPE_FLOAT- ,wxDB_DATA_TYPE_DATE- ,wxDB_DATA_TYPE_BLOB- ,wxDB_SELECT_KEYFIELDS- ,wxDB_SELECT_WHERE- ,wxDB_SELECT_MATCHING- ,wxDB_SELECT_STATEMENT- ,wxDB_UPD_KEYFIELDS- ,wxDB_UPD_WHERE- ,wxDB_DEL_KEYFIELDS- ,wxDB_DEL_WHERE- ,wxDB_DEL_MATCHING- ,wxDB_WHERE_KEYFIELDS- ,wxDB_WHERE_MATCHING- ,wxDB_GRANT_SELECT- ,wxDB_GRANT_INSERT- ,wxDB_GRANT_UPDATE- ,wxDB_GRANT_DELETE- ,wxDB_GRANT_ALL- ,wxSQL_INVALID_HANDLE- ,wxSQL_ERROR- ,wxSQL_SUCCESS- ,wxSQL_SUCCESS_WITH_INFO- ,wxSQL_NO_DATA_FOUND- ,wxSQL_CHAR- ,wxSQL_NUMERIC- ,wxSQL_DECIMAL- ,wxSQL_INTEGER- ,wxSQL_SMALLINT- ,wxSQL_FLOAT- ,wxSQL_REAL- ,wxSQL_DOUBLE- ,wxSQL_VARCHAR- ,wxSQL_C_CHAR- ,wxSQL_C_LONG- ,wxSQL_C_SHORT- ,wxSQL_C_FLOAT- ,wxSQL_C_DOUBLE- ,wxSQL_C_DEFAULT- ,wxSQL_NO_NULLS- ,wxSQL_NULLABLE- ,wxSQL_NULLABLE_UNKNOWN- ,wxSQL_NULL_DATA- ,wxSQL_DATA_AT_EXEC- ,wxSQL_NTS- ,wxSQL_DATE- ,wxSQL_TIME- ,wxSQL_TIMESTAMP- ,wxSQL_C_DATE- ,wxSQL_C_TIME- ,wxSQL_C_TIMESTAMP- ,wxSQL_FETCH_NEXT- ,wxSQL_FETCH_FIRST- ,wxSQL_FETCH_LAST- ,wxSQL_FETCH_PRIOR- ,wxSQL_FETCH_ABSOLUTE- ,wxSQL_FETCH_RELATIVE- ,wxSQL_FETCH_BOOKMARK- ,wxSOUND_SYNC- ,wxSOUND_ASYNC- ,wxSOUND_LOOP- ,wxDRAG_COPYONLY- ,wxDRAG_ALLOWMOVE- ,wxDRAG_DEFALUTMOVE- ,wxMEDIACTRLPLAYERCONTROLS_NONE- ,wxMEDIACTRLPLAYERCONTROLS_STEP- ,wxMEDIACTRLPLAYERCONTROLS_VOLUME- ,wxMEDIACTRLPLAYERCONTROLS_DEFAULT- ,wxACCEL_ALT- ,wxACCEL_CTRL- ,wxACCEL_SHIFT- ,wxACCEL_NORMAL- ,wxNULL_FLAG- ,wxEVT_NULL- ,wxEVT_FIRST- ,wxJOYSTICK1- ,wxJOYSTICK2- ,wxJOY_BUTTON1- ,wxJOY_BUTTON2- ,wxJOY_BUTTON3- ,wxJOY_BUTTON4- ,wxUNKNOWN_PLATFORM- ,wxCURSES- ,wxXVIEW_X- ,wxMOTIF_X- ,wxCOSE_X- ,wxNEXTSTEP- ,wxMACINTOSH- ,wxBEOS- ,wxGTK- ,wxGTK_WIN32- ,wxGTK_OS2- ,wxGTK_BEOS- ,wxQT- ,wxGEOS- ,wxOS2_PM- ,wxWINDOWS- ,wxPENWINDOWS- ,wxWINDOWS_NT- ,wxWIN32S- ,wxWIN95- ,wxWIN386- ,wxMGL_UNIX- ,wxMGL_X- ,wxMGL_WIN32- ,wxMGL_OS2- ,wxWINDOWS_OS2- ,wxUNIX- ,wxBIG_ENDIAN- ,wxLITTLE_ENDIAN- ,wxPDP_ENDIAN- ,wxCENTRE- ,wxCENTER- ,wxCENTER_FRAME- ,wxCENTRE_ON_SCREEN- ,wxHORIZONTAL- ,wxVERTICAL- ,wxBOTH- ,wxLEFT- ,wxRIGHT- ,wxUP- ,wxDOWN- ,wxTOP- ,wxBOTTOM- ,wxNORTH- ,wxSOUTH- ,wxWEST- ,wxEAST- ,wxALL- ,wxALIGN_NOT- ,wxALIGN_CENTER_HORIZONTAL- ,wxALIGN_CENTRE_HORIZONTAL- ,wxALIGN_LEFT- ,wxALIGN_TOP- ,wxALIGN_RIGHT- ,wxALIGN_BOTTOM- ,wxALIGN_CENTER_VERTICAL- ,wxALIGN_CENTRE_VERTICAL- ,wxALIGN_CENTER- ,wxALIGN_CENTRE- ,wxSTRETCH_NOT- ,wxSHRINK- ,wxGROW- ,wxEXPAND- ,wxSHAPED- ,wxVSCROLL- ,wxHSCROLL- ,wxCAPTION- ,wxDOUBLE_BORDER -- Deprecated- ,wxSUNKEN_BORDER -- Deprecated- ,wxRAISED_BORDER -- Deprecated- ,wxSTATIC_BORDER -- Deprecated- ,wxBORDER-- ,wxBORDER_DEFAULT- ,wxBORDER_NONE- ,wxBORDER_STATIC- ,wxBORDER_SIMPLE- ,wxBORDER_RAISED- ,wxBORDER_SUNKEN- ,wxBORDER_THEME- ,wxBORDER_MASK-- ,wxTRANSPARENT_WINDOW- ,wxNO_BORDER- ,wxUSER_COLOURS- ,wxNO_3D- ,wxCLIP_CHILDREN- ,wxTAB_TRAVERSAL- ,wxWANTS_CHARS- ,wxRETAINED- ,wxNO_FULL_REPAINT_ON_RESIZE- ,wxWS_EX_VALIDATE_RECURSIVELY- ,wxSTAY_ON_TOP- ,wxICONIZE- ,wxMAXIMIZE- ,wxSYSTEM_MENU- ,wxMINIMIZE_BOX- ,wxMAXIMIZE_BOX- ,wxDEFAULT_FRAME_STYLE- ,wxTINY_CAPTION_HORIZ- ,wxTINY_CAPTION_VERT- ,wxRESIZE_BORDER- ,wxDIALOG_MODAL- ,wxDIALOG_MODELESS- ,wxFRAME_FLOAT_ON_PARENT- ,wxFRAME_NO_WINDOW_MENU- ,wxED_CLIENT_MARGIN- ,wxED_BUTTONS_BOTTOM- ,wxED_BUTTONS_RIGHT- ,wxED_STATIC_LINE- ,wxTB_3DBUTTONS- ,wxTB_FLAT- ,wxTB_DOCKABLE- ,wxMB_DOCKABLE- ,wxMENU_TEAROFF- ,wxCOLOURED- ,wxFIXED_LENGTH- ,wxLB_SORT- ,wxLB_SINGLE- ,wxLB_MULTIPLE- ,wxLB_EXTENDED- ,wxLB_OWNERDRAW- ,wxLB_NEEDED_SB- ,wxLB_ALWAYS_SB- ,wxTE_READONLY- ,wxTE_MULTILINE- ,wxTE_PROCESS_TAB- ,wxTE_RICH- ,wxTE_NO_VSCROLL- ,wxTE_AUTO_SCROLL- ,wxPROCESS_ENTER- ,wxPASSWORD- ,wxCB_SIMPLE- ,wxCB_SORT- ,wxCB_READONLY- ,wxCB_DROPDOWN- ,wxRB_GROUP- ,wxGA_PROGRESSBAR- ,wxGA_SMOOTH- ,wxSL_NOTIFY_DRAG- ,wxSL_AUTOTICKS- ,wxSL_LABELS- ,wxSL_LEFT- ,wxSL_TOP- ,wxSL_RIGHT- ,wxSL_BOTTOM- ,wxSL_BOTH- ,wxSL_SELRANGE- ,wxBU_AUTODRAW- ,wxBU_NOAUTODRAW- ,wxBU_LEFT- ,wxBU_TOP- ,wxBU_RIGHT- ,wxBU_BOTTOM- ,wxLC_VRULES- ,wxLC_HRULES- ,wxLC_ICON- ,wxLC_SMALL_ICON- ,wxLC_LIST- ,wxLC_REPORT- ,wxLC_ALIGN_TOP- ,wxLC_ALIGN_LEFT- ,wxLC_AUTOARRANGE- ,wxLC_VIRTUAL- ,wxLC_EDIT_LABELS- ,wxLC_NO_HEADER- ,wxLC_NO_SORT_HEADER- ,wxLC_SINGLE_SEL- ,wxLC_SORT_ASCENDING- ,wxLC_SORT_DESCENDING- ,wxLC_MASK_TYPE- ,wxLC_MASK_ALIGN- ,wxLC_MASK_SORT- ,wxSP_ARROW_KEYS- ,wxSP_WRAP- ,wxSP_NOBORDER- ,wxSP_NOSASH- ,wxSP_BORDER- ,wxSP_PERMIT_UNSPLIT- ,wxSP_LIVE_UPDATE- ,wxSP_3DSASH- ,wxSP_3DBORDER- ,wxSP_3D- ,wxSP_FULLSASH- ,wxFRAME_TOOL_WINDOW- ,wxTC_MULTILINE- ,wxTC_RIGHTJUSTIFY- ,wxTC_FIXEDWIDTH- ,wxTC_OWNERDRAW- ,wxNB_FIXEDWIDTH- ,wxST_SIZEGRIP- ,wxST_NO_AUTORESIZE- ,wxPD_CAN_ABORT- ,wxPD_APP_MODAL- ,wxPD_AUTO_HIDE- ,wxPD_ELAPSED_TIME- ,wxPD_ESTIMATED_TIME- ,wxPD_REMAINING_TIME- ,wxHW_SCROLLBAR_NEVER- ,wxHW_SCROLLBAR_AUTO- ,wxCAL_SUNDAY_FIRST- ,wxCAL_MONDAY_FIRST- ,wxCAL_SHOW_HOLIDAYS- ,wxCAL_NO_YEAR_CHANGE- ,wxCAL_NO_MONTH_CHANGE- ,wxICON_EXCLAMATION- ,wxICON_HAND- ,wxICON_QUESTION- ,wxICON_INFORMATION- ,wxFORWARD- ,wxBACKWARD- ,wxRESET- ,wxHELP- ,wxMORE- ,wxSETUP- ,wxID_LOWEST- ,wxID_OPEN- ,wxID_CLOSE- ,wxID_NEW- ,wxID_SAVE- ,wxID_SAVEAS- ,wxID_REVERT- ,wxID_EXIT- ,wxID_UNDO- ,wxID_REDO- ,wxID_HELP- ,wxID_PRINT- ,wxID_PRINT_SETUP- ,wxID_PREVIEW- ,wxID_ABOUT- ,wxID_HELP_CONTENTS- ,wxID_HELP_COMMANDS- ,wxID_HELP_PROCEDURES- ,wxID_HELP_CONTEXT- ,wxPG_DEFAULT_STYLE- ,wxID_CLOSE_ALL- ,wxID_PREFERENCES- ,wxID_EDIT- ,wxID_CUT- ,wxID_COPY- ,wxID_PASTE- ,wxID_CLEAR- ,wxID_FIND- ,wxID_DUPLICATE- ,wxID_SELECTALL- ,wxID_DELETE- ,wxID_REPLACE- ,wxID_REPLACE_ALL- ,wxID_PROPERTIES- ,wxID_VIEW_DETAILS- ,wxID_VIEW_LARGEICONS- ,wxID_VIEW_SMALLICONS- ,wxID_VIEW_LIST- ,wxID_VIEW_SORTDATE- ,wxID_VIEW_SORTNAME- ,wxID_VIEW_SORTSIZE- ,wxID_VIEW_SORTTYPE- ,wxID_FILE1- ,wxID_FILE2- ,wxID_FILE3- ,wxID_FILE4- ,wxID_FILE5- ,wxID_FILE6- ,wxID_FILE7- ,wxID_FILE8- ,wxID_FILE9- ,wxID_OK- ,wxID_CANCEL- ,wxID_APPLY- ,wxID_YES- ,wxID_NO- ,wxID_STATIC- ,wxID_FORWARD- ,wxID_BACKWARD- ,wxID_DEFAULT- ,wxID_MORE- ,wxID_SETUP- ,wxID_RESET- ,wxID_FILEDLGG- ,wxID_HIGHEST- ,wxSIZE_AUTO_WIDTH- ,wxSIZE_AUTO_HEIGHT- ,wxSIZE_USE_EXISTING- ,wxSIZE_ALLOW_MINUS_ONE- ,wxSIZE_NO_ADJUSTMENTS- ,wxSOLID- ,wxDOT- ,wxLONG_DASH- ,wxSHORT_DASH- ,wxDOT_DASH- ,wxUSER_DASH- ,wxTRANSPARENT- ,wxSTIPPLE_MASK_OPAQUE- ,wxSTIPPLE_MASK- ,wxSTIPPLE- ,wxBDIAGONAL_HATCH- ,wxCROSSDIAG_HATCH- ,wxFDIAGONAL_HATCH- ,wxCROSS_HATCH- ,wxHORIZONTAL_HATCH- ,wxVERTICAL_HATCH- ,wxJOIN_BEVEL- ,wxJOIN_MITER- ,wxJOIN_ROUND- ,wxCAP_ROUND- ,wxCAP_PROJECTING- ,wxCAP_BUTT- ,wxCLEAR- ,wxXOR- ,wxINVERT- ,wxOR_REVERSE- ,wxAND_REVERSE- ,wxCOPY- ,wxAND- ,wxAND_INVERT- ,wxNO_OP- ,wxNOR- ,wxEQUIV- ,wxSRC_INVERT- ,wxOR_INVERT- ,wxNAND- ,wxOR- ,wxSET- ,wxFLOOD_SURFACE- ,wxFLOOD_BORDER- ,wxODDEVEN_RULE- ,wxWINDING_RULE- ,wxTOOL_TOP- ,wxTOOL_BOTTOM- ,wxTOOL_LEFT- ,wxTOOL_RIGHT- ,wxDF_INVALID- ,wxDF_TEXT- ,wxDF_BITMAP- ,wxDF_METAFILE- ,wxDF_SYLK- ,wxDF_DIF- ,wxDF_TIFF- ,wxDF_OEMTEXT- ,wxDF_DIB- ,wxDF_PALETTE- ,wxDF_PENDATA- ,wxDF_RIFF- ,wxDF_WAVE- ,wxDF_UNICODETEXT- ,wxDF_ENHMETAFILE- ,wxDF_FILENAME- ,wxDF_LOCALE- ,wxDF_PRIVATE- ,wxDF_MAX- ,wxMM_TEXT- ,wxMM_LOMETRIC- ,wxMM_HIMETRIC- ,wxMM_LOENGLISH- ,wxMM_HIENGLISH- ,wxMM_TWIPS- ,wxMM_ISOTROPIC- ,wxMM_ANISOTROPIC- ,wxMM_POINTS- ,wxMM_METRIC- ,wxPAPER_NONE- ,wxPAPER_LETTER- ,wxPAPER_LEGAL- ,wxPAPER_A4- ,wxPAPER_CSHEET- ,wxPAPER_DSHEET- ,wxPAPER_ESHEET- ,wxPAPER_LETTERSMALL- ,wxPAPER_TABLOID- ,wxPAPER_LEDGER- ,wxPAPER_STATEMENT- ,wxPAPER_EXECUTIVE- ,wxPAPER_A3- ,wxPAPER_A4SMALL- ,wxPAPER_A5- ,wxPAPER_B4- ,wxPAPER_B5- ,wxPAPER_FOLIO- ,wxPAPER_QUARTO- ,wxPAPER_10X14- ,wxPAPER_11X17- ,wxPAPER_NOTE- ,wxPAPER_ENV_9- ,wxPAPER_ENV_10- ,wxPAPER_ENV_11- ,wxPAPER_ENV_12- ,wxPAPER_ENV_14- ,wxPAPER_ENV_DL- ,wxPAPER_ENV_C5- ,wxPAPER_ENV_C3- ,wxPAPER_ENV_C4- ,wxPAPER_ENV_C6- ,wxPAPER_ENV_C65- ,wxPAPER_ENV_B4- ,wxPAPER_ENV_B5- ,wxPAPER_ENV_B6- ,wxPAPER_ENV_ITALY- ,wxPAPER_ENV_MONARCH- ,wxPAPER_ENV_PERSONAL- ,wxPAPER_FANFOLD_US- ,wxPAPER_FANFOLD_STD_GERMAN- ,wxPAPER_FANFOLD_LGL_GERMAN- ,wxPAPER_ISO_B4- ,wxPAPER_JAPANESE_POSTCARD- ,wxPAPER_9X11- ,wxPAPER_10X11- ,wxPAPER_15X11- ,wxPAPER_ENV_INVITE- ,wxPAPER_LETTER_EXTRA- ,wxPAPER_LEGAL_EXTRA- ,wxPAPER_TABLOID_EXTRA- ,wxPAPER_A4_EXTRA- ,wxPAPER_LETTER_TRANSVERSE- ,wxPAPER_A4_TRANSVERSE- ,wxPAPER_LETTER_EXTRA_TRANSVERSE- ,wxPAPER_A_PLUS- ,wxPAPER_B_PLUS- ,wxPAPER_LETTER_PLUS- ,wxPAPER_A4_PLUS- ,wxPAPER_A5_TRANSVERSE- ,wxPAPER_B5_TRANSVERSE- ,wxPAPER_A3_EXTRA- ,wxPAPER_A5_EXTRA- ,wxPAPER_B5_EXTRA- ,wxPAPER_A2- ,wxPAPER_A3_TRANSVERSE- ,wxPAPER_A3_EXTRA_TRANSVERSE- ,wxPORTRAIT- ,wxLANDSCAPE- ,wxDUPLEX_SIMPLEX- ,wxDUPLEX_HORIZONTAL- ,wxDUPLEX_VERTICAL- ,wxPRINT_MODE_NONE- ,wxPRINT_MODE_PREVIEW- ,wxPRINT_MODE_FILE- ,wxPRINT_MODE_PRINTER- ,wxFULLSCREEN_NOMENUBAR- ,wxFULLSCREEN_NOTOOLBAR- ,wxFULLSCREEN_NOSTATUSBAR- ,wxFULLSCREEN_NOBORDER- ,wxFULLSCREEN_NOCAPTION- ,wxLAYOUT_DEFAULT_MARGIN- ,wxEDGE_LEFT- ,wxEDGE_TOP- ,wxEDGE_RIGHT- ,wxEDGE_BOTTOM- ,wxEDGE_WIDTH- ,wxEDGE_HEIGHT- ,wxEDGE_CENTER- ,wxEDGE_CENTREX- ,wxEDGE_CENTREY- ,wxRELATIONSHIP_UNCONSTRAINED- ,wxRELATIONSHIP_ASIS- ,wxRELATIONSHIP_PERCENTOF- ,wxRELATIONSHIP_ABOVE- ,wxRELATIONSHIP_BELOW- ,wxRELATIONSHIP_LEFTOF- ,wxRELATIONSHIP_RIGHTOF- ,wxRELATIONSHIP_SAMEAS- ,wxRELATIONSHIP_ABSOLUTE- ,wxFONTENCODING_SYSTEM- ,wxFONTENCODING_DEFAULT- ,wxFONTENCODING_ISO8859_1- ,wxFONTENCODING_ISO8859_2- ,wxFONTENCODING_ISO8859_3- ,wxFONTENCODING_ISO8859_4- ,wxFONTENCODING_ISO8859_5- ,wxFONTENCODING_ISO8859_6- ,wxFONTENCODING_ISO8859_7- ,wxFONTENCODING_ISO8859_8- ,wxFONTENCODING_ISO8859_9- ,wxFONTENCODING_ISO8859_10- ,wxFONTENCODING_ISO8859_11- ,wxFONTENCODING_ISO8859_12- ,wxFONTENCODING_ISO8859_13- ,wxFONTENCODING_ISO8859_14- ,wxFONTENCODING_ISO8859_15- ,wxFONTENCODING_ISO8859_MAX- ,wxFONTENCODING_KOI8- ,wxFONTENCODING_ALTERNATIVE- ,wxFONTENCODING_BULGARIAN- ,wxFONTENCODING_CP437- ,wxFONTENCODING_CP850- ,wxFONTENCODING_CP852- ,wxFONTENCODING_CP855- ,wxFONTENCODING_CP866- ,wxFONTENCODING_CP874- ,wxFONTENCODING_CP1250- ,wxFONTENCODING_CP1251- ,wxFONTENCODING_CP1252- ,wxFONTENCODING_CP1253- ,wxFONTENCODING_CP1254- ,wxFONTENCODING_CP1255- ,wxFONTENCODING_CP1256- ,wxFONTENCODING_CP1257- ,wxFONTENCODING_CP12_MAX- ,wxFONTENCODING_UNICODE- ,wxFONTENCODING_MAX- ,wxGRIDTABLE_REQUEST_VIEW_GET_VALUES- ,wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES- ,wxGRIDTABLE_NOTIFY_ROWS_INSERTED- ,wxGRIDTABLE_NOTIFY_ROWS_APPENDED- ,wxGRIDTABLE_NOTIFY_ROWS_DELETED- ,wxGRIDTABLE_NOTIFY_COLS_INSERTED- ,wxGRIDTABLE_NOTIFY_COLS_APPENDED- ,wxGRIDTABLE_NOTIFY_COLS_DELETED- ,wxGridSelectCells- ,wxGridSelectRows- ,wxGridSelectColumns- ,wxFILTER_NONE- ,wxFILTER_ASCII- ,wxFILTER_ALPHA- ,wxFILTER_ALPHANUMERIC- ,wxFILTER_NUMERIC- ,wxFILTER_INCLUDE_LIST- ,wxFILTER_EXCLUDE_LIST- ,wxFILTER_UPPER_CASE- ,wxFILTER_LOWER_CASE- ,wxBITMAP_TYPE_INVALID- ,wxBITMAP_TYPE_BMP- ,wxBITMAP_TYPE_BMP_RESOURCE- ,wxBITMAP_TYPE_RESOURCE- ,wxBITMAP_TYPE_ICO- ,wxBITMAP_TYPE_ICO_RESOURCE- ,wxBITMAP_TYPE_CUR- ,wxBITMAP_TYPE_CUR_RESOURCE- ,wxBITMAP_TYPE_XBM- ,wxBITMAP_TYPE_XBM_DATA- ,wxBITMAP_TYPE_XPM- ,wxBITMAP_TYPE_XPM_DATA- ,wxBITMAP_TYPE_TIF- ,wxBITMAP_TYPE_TIF_RESOURCE- ,wxBITMAP_TYPE_GIF- ,wxBITMAP_TYPE_GIF_RESOURCE- ,wxBITMAP_TYPE_PNG- ,wxBITMAP_TYPE_PNG_RESOURCE- ,wxBITMAP_TYPE_JPEG- ,wxBITMAP_TYPE_JPEG_RESOURCE- ,wxBITMAP_TYPE_PNM- ,wxBITMAP_TYPE_PNM_RESOURCE- ,wxBITMAP_TYPE_PCX- ,wxBITMAP_TYPE_PCX_RESOURCE- ,wxBITMAP_TYPE_PICT- ,wxBITMAP_TYPE_PICT_RESOURCE- ,wxBITMAP_TYPE_ICON- ,wxBITMAP_TYPE_ICON_RESOURCE- ,wxBITMAP_TYPE_MACCURSOR- ,wxBITMAP_TYPE_MACCURSOR_RESOURCE- ,wxBITMAP_TYPE_ANY- ,wxCURSOR_NONE- ,wxCURSOR_ARROW- ,wxCURSOR_RIGHT_ARROW- ,wxCURSOR_BULLSEYE- ,wxCURSOR_CHAR- ,wxCURSOR_CROSS- ,wxCURSOR_HAND- ,wxCURSOR_IBEAM- ,wxCURSOR_LEFT_BUTTON- ,wxCURSOR_MAGNIFIER- ,wxCURSOR_MIDDLE_BUTTON- ,wxCURSOR_NO_ENTRY- ,wxCURSOR_PAINT_BRUSH- ,wxCURSOR_PENCIL- ,wxCURSOR_POINT_LEFT- ,wxCURSOR_POINT_RIGHT- ,wxCURSOR_QUESTION_ARROW- ,wxCURSOR_RIGHT_BUTTON- ,wxCURSOR_SIZENESW- ,wxCURSOR_SIZENS- ,wxCURSOR_SIZENWSE- ,wxCURSOR_SIZEWE- ,wxCURSOR_SIZING- ,wxCURSOR_SPRAYCAN- ,wxCURSOR_WAIT- ,wxCURSOR_WATCH- ,wxCURSOR_BLANK- ,wxOPEN- ,wxSAVE- ,wxOVERWRITE_PROMPT- ,wxHIDE_READONLY- ,wxFILE_MUST_EXIST- ,wxMULTIPLE- ,wxCHANGE_DIR- ,wxDRAG_ERROR- ,wxDRAG_NONE- ,wxDRAG_COPY- ,wxDRAG_MOVE- ,wxDRAG_LINK- ,wxDRAG_CANCEL- ,wxSPLIT_HORIZONTAL- ,wxSPLIT_VERTICAL- ,wxLIST_FORMAT_LEFT- ,wxLIST_FORMAT_RIGHT- ,wxLIST_FORMAT_CENTRE- ,wxLIST_FORMAT_CENTER- ,wxLIST_STATE_DONTCARE- ,wxLIST_STATE_DROPHILITED- ,wxLIST_STATE_FOCUSED- ,wxLIST_STATE_SELECTED- ,wxLIST_STATE_CUT- ,wxLIST_MASK_STATE- ,wxLIST_MASK_TEXT- ,wxLIST_MASK_IMAGE- ,wxLIST_MASK_DATA- ,wxLIST_MASK_WIDTH- ,wxLIST_MASK_FORMAT- ,wxLIST_NEXT_ABOVE- ,wxLIST_NEXT_ALL- ,wxLIST_NEXT_BELOW- ,wxLIST_NEXT_LEFT- ,wxLIST_NEXT_RIGHT- ,wxRA_SPECIFY_COLS- ,wxRA_SPECIFY_ROWS- ,wxTREE_HITTEST_ABOVE- ,wxTREE_HITTEST_BELOW- ,wxTREE_HITTEST_NOWHERE- ,wxTREE_HITTEST_ONITEMBUTTON- ,wxTREE_HITTEST_ONITEMICON- ,wxTREE_HITTEST_ONITEMINDENT- ,wxTREE_HITTEST_ONITEMLABEL- ,wxTREE_HITTEST_ONITEMRIGHT- ,wxTREE_HITTEST_ONITEMSTATEICON- ,wxTREE_HITTEST_TOLEFT- ,wxTREE_HITTEST_TORIGHT- ,wxTREE_HITTEST_ONITEMUPPERPART- ,wxTREE_HITTEST_ONITEMLOWERPART- ,wxTREE_HITTEST_ONITEM- ,wxDEFAULT- ,wxDECORATIVE- ,wxROMAN- ,wxSCRIPT- ,wxSWISS- ,wxMODERN- ,wxTELETYPE- ,wxVARIABLE- ,wxFIXED- ,wxNORMAL- ,wxLIGHT- ,wxBOLD- ,wxITALIC- ,wxSLANT- ,wxBLUE_BRUSH- ,wxGREEN_BRUSH- ,wxWHITE_BRUSH- ,wxBLACK_BRUSH- ,wxGREY_BRUSH- ,wxMEDIUM_GREY_BRUSH- ,wxLIGHT_GREY_BRUSH- ,wxTRANSPARENT_BRUSH- ,wxCYAN_BRUSH- ,wxRED_BRUSH- ,wxBLACK- ,wxWHITE- ,wxRED- ,wxBLUE- ,wxGREEN- ,wxCYAN- ,wxLIGHT_GREY- ,wxRED_PEN- ,wxCYAN_PEN- ,wxGREEN_PEN- ,wxBLACK_PEN- ,wxWHITE_PEN- ,wxTRANSPARENT_PEN- ,wxBLACK_DASHED_PEN- ,wxGREY_PEN- ,wxMEDIUM_GREY_PEN- ,wxLIGHT_GREY_PEN- ,wxNOT_FOUND- ,wxPRINTER_NO_ERROR- ,wxPRINTER_CANCELLED- ,wxPRINTER_ERROR- ,wxPREVIEW_PRINT- ,wxPREVIEW_PREVIOUS- ,wxPREVIEW_NEXT- ,wxPREVIEW_ZOOM- ,wxPREVIEW_FIRST- ,wxPREVIEW_LAST- ,wxPREVIEW_GOTO- ,wxPREVIEW_DEFAULT- ,wxID_PREVIEW_CLOSE- ,wxID_PREVIEW_NEXT- ,wxID_PREVIEW_PREVIOUS- ,wxID_PREVIEW_PRINT- ,wxID_PREVIEW_ZOOM- ,wxID_PREVIEW_FIRST- ,wxID_PREVIEW_LAST- ,wxID_PREVIEW_GOTO- ,wxPRINTID_STATIC- ,wxPRINTID_RANGE- ,wxPRINTID_FROM- ,wxPRINTID_TO- ,wxPRINTID_COPIES- ,wxPRINTID_PRINTTOFILE- ,wxPRINTID_SETUP- ,wxPRINTID_LEFTMARGIN- ,wxPRINTID_RIGHTMARGIN- ,wxPRINTID_TOPMARGIN- ,wxPRINTID_BOTTOMMARGIN- ,wxPRINTID_PRINTCOLOUR- ,wxPRINTID_ORIENTATION- ,wxPRINTID_COMMAND- ,wxPRINTID_OPTIONS- ,wxPRINTID_PAPERSIZE- ,wxHF_TOOLBAR- ,wxHF_CONTENTS- ,wxHF_INDEX- ,wxHF_SEARCH- ,wxHF_BOOKMARKS- ,wxHF_OPENFILES- ,wxHF_PRINT- ,wxHF_FLATTOOLBAR- ,wxHF_DEFAULTSTYLE- ,wxLAYOUT_HORIZONTAL- ,wxLAYOUT_VERTICAL- ,wxLAYOUT_NONE- ,wxLAYOUT_TOP- ,wxLAYOUT_LEFT- ,wxLAYOUT_RIGHT- ,wxLAYOUT_BOTTOM- ,wxSASH_DRAG_NONE- ,wxSASH_DRAG_DRAGGING- ,wxSASH_DRAG_LEFT_DOWN- ,wxSASH_TOP- ,wxSASH_RIGHT- ,wxSASH_BOTTOM- ,wxSASH_LEFT- ,wxSASH_NONE- ,wxSW_NOBORDER- ,wxSW_BORDER- ,wxSW_3DSASH- ,wxSW_3DBORDER- ,wxSW_3D- ,wxSASH_STATUS_OK- ,wxSASH_STATUS_OUT_OF_RANGE- ,wxXRC_NONE- ,wxXRC_USE_LOCALE- ,wxXRC_NO_SUBCLASSING- ,wxXRC_NO_RELOADING- ,wxSYS_WHITE_BRUSH- ,wxSYS_LTGRAY_BRUSH- ,wxSYS_GRAY_BRUSH- ,wxSYS_DKGRAY_BRUSH- ,wxSYS_BLACK_BRUSH- ,wxSYS_NULL_BRUSH- ,wxSYS_HOLLOW_BRUSH- ,wxSYS_WHITE_PEN- ,wxSYS_BLACK_PEN- ,wxSYS_NULL_PEN- ,wxSYS_OEM_FIXED_FONT- ,wxSYS_ANSI_FIXED_FONT- ,wxSYS_ANSI_VAR_FONT- ,wxSYS_SYSTEM_FONT- ,wxSYS_DEVICE_DEFAULT_FONT- ,wxSYS_DEFAULT_PALETTE- ,wxSYS_SYSTEM_FIXED_FONT- ,wxSYS_DEFAULT_GUI_FONT- ,wxSYS_COLOUR_SCROLLBAR- ,wxSYS_COLOUR_BACKGROUND- ,wxSYS_COLOUR_ACTIVECAPTION- ,wxSYS_COLOUR_INACTIVECAPTION- ,wxSYS_COLOUR_MENU- ,wxSYS_COLOUR_WINDOW- ,wxSYS_COLOUR_WINDOWFRAME- ,wxSYS_COLOUR_MENUTEXT- ,wxSYS_COLOUR_WINDOWTEXT- ,wxSYS_COLOUR_CAPTIONTEXT- ,wxSYS_COLOUR_ACTIVEBORDER- ,wxSYS_COLOUR_INACTIVEBORDER- ,wxSYS_COLOUR_APPWORKSPACE- ,wxSYS_COLOUR_HIGHLIGHT- ,wxSYS_COLOUR_HIGHLIGHTTEXT- ,wxSYS_COLOUR_BTNFACE- ,wxSYS_COLOUR_BTNSHADOW- ,wxSYS_COLOUR_GRAYTEXT- ,wxSYS_COLOUR_BTNTEXT- ,wxSYS_COLOUR_INACTIVECAPTIONTEXT- ,wxSYS_COLOUR_BTNHIGHLIGHT- ,wxSYS_COLOUR_3DDKSHADOW- ,wxSYS_COLOUR_3DLIGHT- ,wxSYS_COLOUR_INFOTEXT- ,wxSYS_COLOUR_INFOBK- ,wxSYS_COLOUR_LISTBOX- ,wxSYS_COLOUR_DESKTOP- ,wxSYS_COLOUR_3DFACE- ,wxSYS_COLOUR_3DSHADOW- ,wxSYS_COLOUR_3DHIGHLIGHT- ,wxSYS_COLOUR_3DHILIGHT- ,wxSYS_COLOUR_BTNHILIGHT- ,wxSYS_MOUSE_BUTTONS- ,wxSYS_BORDER_X- ,wxSYS_BORDER_Y- ,wxSYS_CURSOR_X- ,wxSYS_CURSOR_Y- ,wxSYS_DCLICK_X- ,wxSYS_DCLICK_Y- ,wxSYS_DRAG_X- ,wxSYS_DRAG_Y- ,wxSYS_EDGE_X- ,wxSYS_EDGE_Y- ,wxSYS_HSCROLL_ARROW_X- ,wxSYS_HSCROLL_ARROW_Y- ,wxSYS_HTHUMB_X- ,wxSYS_ICON_X- ,wxSYS_ICON_Y- ,wxSYS_ICONSPACING_X- ,wxSYS_ICONSPACING_Y- ,wxSYS_WINDOWMIN_X- ,wxSYS_WINDOWMIN_Y- ,wxSYS_SCREEN_X- ,wxSYS_SCREEN_Y- ,wxSYS_FRAMESIZE_X- ,wxSYS_FRAMESIZE_Y- ,wxSYS_SMALLICON_X- ,wxSYS_SMALLICON_Y- ,wxSYS_HSCROLL_Y- ,wxSYS_VSCROLL_X- ,wxSYS_VSCROLL_ARROW_X- ,wxSYS_VSCROLL_ARROW_Y- ,wxSYS_VTHUMB_Y- ,wxSYS_CAPTION_Y- ,wxSYS_MENU_Y- ,wxSYS_NETWORK_PRESENT- ,wxSYS_PENWINDOWS_PRESENT- ,wxSYS_SHOW_SOUNDS- ,wxSYS_SWAP_BUTTONS- ,wxSYS_SCREEN_NONE- ,wxSYS_SCREEN_TINY- ,wxSYS_SCREEN_PDA- ,wxSYS_SCREEN_SMALL- ,wxSYS_SCREEN_DESKTOP- ,wxCAL_BORDER_NONE- ,wxCAL_BORDER_SQUARE- ,wxCAL_BORDER_ROUND- ,wxCAL_HITTEST_NOWHERE- ,wxCAL_HITTEST_HEADER- ,wxCAL_HITTEST_DAY- ,wxUNKNOWN- ,wxSTRING- ,wxBOOLEAN- ,wxINTEGER- ,wxFLOAT- ,wxMUTEX_NO_ERROR- ,wxMUTEX_DEAD_LOCK- ,wxMUTEX_BUSY- ,wxMUTEX_UNLOCKED- ,wxMUTEX_MISC_ERROR- ,wxPLATFORM_CURRENT- ,wxPLATFORM_UNIX- ,wxPLATFORM_WINDOWS- ,wxPLATFORM_OS2- ,wxPLATFORM_MAC- ,wxLED_ALIGN_LEFT- ,wxLED_ALIGN_RIGHT- ,wxLED_ALIGN_CENTER- ,wxLED_ALIGN_MASK- ,wxLED_DRAW_FADED- ,wxDS_MANAGE_SCROLLBARS- ,wxDS_DRAG_CORNER- ,wxEL_ALLOW_NEW- ,wxEL_ALLOW_EDIT- ,wxEL_ALLOW_DELETE- ,wxTR_NO_BUTTONS- ,wxTR_HAS_BUTTONS- ,wxTR_TWIST_BUTTONS- ,wxTR_NO_LINES- ,wxTR_LINES_AT_ROOT- ,wxTR_AQUA_BUTTONS- ,wxTR_SINGLE- ,wxTR_MULTIPLE- ,wxTR_EXTENDED- ,wxTR_FULL_ROW_HIGHLIGHT- ,wxTR_EDIT_LABELS- ,wxTR_ROW_LINES- ,wxTR_HIDE_ROOT- ,wxTR_HAS_VARIABLE_ROW_HEIGHT- ,wxCBAR_DOCKED_HORIZONTALLY- ,wxCBAR_DOCKED_VERTICALLY- ,wxCBAR_FLOATING- ,wxCBAR_HIDDEN- ,fL_ALIGN_TOP- ,fL_ALIGN_BOTTOM- ,fL_ALIGN_LEFT- ,fL_ALIGN_RIGHT- ,fL_ALIGN_TOP_PANE- ,fL_ALIGN_BOTTOM_PANE- ,fL_ALIGN_LEFT_PANE- ,fL_ALIGN_RIGHT_PANE- ,wxALL_PANES- ,cB_NO_ITEMS_HITTED- ,cB_UPPER_ROW_HANDLE_HITTED- ,cB_LOWER_ROW_HANDLE_HITTED- ,cB_LEFT_BAR_HANDLE_HITTED- ,cB_RIGHT_BAR_HANDLE_HITTED- ,cB_BAR_CONTENT_HITTED- ,wxOK- ,wxYES- ,wxNO- ,wxYES_NO- ,wxCANCEL- ,wxNO_DEFAULT- ,wxYES_DEFAULT- ,wxFR_DOWN- ,wxFR_WHOLEWORD- ,wxFR_MATCHCASE- ,wxFR_REPLACEDIALOG- ,wxFR_NOUPDOWN- ,wxFR_NOMATCHCASE- ,wxFR_NOWHOLEWORD- ,wxQUANTIZE_INCLUDE_WINDOWS_COLOURS- ,wxQUANTIZE_RETURN_8BIT_DATA- ,wxQUANTIZE_FILL_DESTINATION_IMAGE- ,wxLANGUAGE_DEFAULT- ,wxLANGUAGE_UNKNOWN- ,wxLANGUAGE_ABKHAZIAN- ,wxLANGUAGE_AFAR- ,wxLANGUAGE_AFRIKAANS- ,wxLANGUAGE_ALBANIAN- ,wxLANGUAGE_AMHARIC- ,wxLANGUAGE_ARABIC- ,wxLANGUAGE_ARABIC_ALGERIA- ,wxLANGUAGE_ARABIC_BAHRAIN- ,wxLANGUAGE_ARABIC_EGYPT- ,wxLANGUAGE_ARABIC_IRAQ- ,wxLANGUAGE_ARABIC_JORDAN- ,wxLANGUAGE_ARABIC_KUWAIT- ,wxLANGUAGE_ARABIC_LEBANON- ,wxLANGUAGE_ARABIC_LIBYA- ,wxLANGUAGE_ARABIC_MOROCCO- ,wxLANGUAGE_ARABIC_OMAN- ,wxLANGUAGE_ARABIC_QATAR- ,wxLANGUAGE_ARABIC_SAUDI_ARABIA- ,wxLANGUAGE_ARABIC_SUDAN- ,wxLANGUAGE_ARABIC_SYRIA- ,wxLANGUAGE_ARABIC_TUNISIA- ,wxLANGUAGE_ARABIC_UAE- ,wxLANGUAGE_ARABIC_YEMEN- ,wxLANGUAGE_ARMENIAN- ,wxLANGUAGE_ASSAMESE- ,wxLANGUAGE_AYMARA- ,wxLANGUAGE_AZERI- ,wxLANGUAGE_AZERI_CYRILLIC- ,wxLANGUAGE_AZERI_LATIN- ,wxLANGUAGE_BASHKIR- ,wxLANGUAGE_BASQUE- ,wxLANGUAGE_BELARUSIAN- ,wxLANGUAGE_BENGALI- ,wxLANGUAGE_BHUTANI- ,wxLANGUAGE_BIHARI- ,wxLANGUAGE_BISLAMA- ,wxLANGUAGE_BRETON- ,wxLANGUAGE_BULGARIAN- ,wxLANGUAGE_BURMESE- ,wxLANGUAGE_CAMBODIAN- ,wxLANGUAGE_CATALAN- ,wxLANGUAGE_CHINESE- ,wxLANGUAGE_CHINESE_SIMPLIFIED- ,wxLANGUAGE_CHINESE_TRADITIONAL- ,wxLANGUAGE_CHINESE_HONGKONG- ,wxLANGUAGE_CHINESE_MACAU- ,wxLANGUAGE_CHINESE_SINGAPORE- ,wxLANGUAGE_CHINESE_TAIWAN- ,wxLANGUAGE_CORSICAN- ,wxLANGUAGE_CROATIAN- ,wxLANGUAGE_CZECH- ,wxLANGUAGE_DANISH- ,wxLANGUAGE_DUTCH- ,wxLANGUAGE_DUTCH_BELGIAN- ,wxLANGUAGE_ENGLISH- ,wxLANGUAGE_ENGLISH_UK- ,wxLANGUAGE_ENGLISH_US- ,wxLANGUAGE_ENGLISH_AUSTRALIA- ,wxLANGUAGE_ENGLISH_BELIZE- ,wxLANGUAGE_ENGLISH_BOTSWANA- ,wxLANGUAGE_ENGLISH_CANADA- ,wxLANGUAGE_ENGLISH_CARIBBEAN- ,wxLANGUAGE_ENGLISH_DENMARK- ,wxLANGUAGE_ENGLISH_EIRE- ,wxLANGUAGE_ENGLISH_JAMAICA- ,wxLANGUAGE_ENGLISH_NEW_ZEALAND- ,wxLANGUAGE_ENGLISH_PHILIPPINES- ,wxLANGUAGE_ENGLISH_SOUTH_AFRICA- ,wxLANGUAGE_ENGLISH_TRINIDAD- ,wxLANGUAGE_ENGLISH_ZIMBABWE- ,wxLANGUAGE_ESPERANTO- ,wxLANGUAGE_ESTONIAN- ,wxLANGUAGE_FAEROESE- ,wxLANGUAGE_FARSI- ,wxLANGUAGE_FIJI- ,wxLANGUAGE_FINNISH- ,wxLANGUAGE_FRENCH- ,wxLANGUAGE_FRENCH_BELGIAN- ,wxLANGUAGE_FRENCH_CANADIAN- ,wxLANGUAGE_FRENCH_LUXEMBOURG- ,wxLANGUAGE_FRENCH_MONACO- ,wxLANGUAGE_FRENCH_SWISS- ,wxLANGUAGE_FRISIAN- ,wxLANGUAGE_GALICIAN- ,wxLANGUAGE_GEORGIAN- ,wxLANGUAGE_GERMAN- ,wxLANGUAGE_GERMAN_AUSTRIAN- ,wxLANGUAGE_GERMAN_BELGIUM- ,wxLANGUAGE_GERMAN_LIECHTENSTEIN- ,wxLANGUAGE_GERMAN_LUXEMBOURG- ,wxLANGUAGE_GERMAN_SWISS- ,wxLANGUAGE_GREEK- ,wxLANGUAGE_GREENLANDIC- ,wxLANGUAGE_GUARANI- ,wxLANGUAGE_GUJARATI- ,wxLANGUAGE_HAUSA- ,wxLANGUAGE_HEBREW- ,wxLANGUAGE_HINDI- ,wxLANGUAGE_HUNGARIAN- ,wxLANGUAGE_ICELANDIC- ,wxLANGUAGE_INDONESIAN- ,wxLANGUAGE_INTERLINGUA- ,wxLANGUAGE_INTERLINGUE- ,wxLANGUAGE_INUKTITUT- ,wxLANGUAGE_INUPIAK- ,wxLANGUAGE_IRISH- ,wxLANGUAGE_ITALIAN- ,wxLANGUAGE_ITALIAN_SWISS- ,wxLANGUAGE_JAPANESE- ,wxLANGUAGE_JAVANESE- ,wxLANGUAGE_KANNADA- ,wxLANGUAGE_KASHMIRI- ,wxLANGUAGE_KASHMIRI_INDIA- ,wxLANGUAGE_KAZAKH- ,wxLANGUAGE_KERNEWEK- ,wxLANGUAGE_KINYARWANDA- ,wxLANGUAGE_KIRGHIZ- ,wxLANGUAGE_KIRUNDI- ,wxLANGUAGE_KONKANI- ,wxLANGUAGE_KOREAN- ,wxLANGUAGE_KURDISH- ,wxLANGUAGE_LAOTHIAN- ,wxLANGUAGE_LATIN- ,wxLANGUAGE_LATVIAN- ,wxLANGUAGE_LINGALA- ,wxLANGUAGE_LITHUANIAN- ,wxLANGUAGE_MACEDONIAN- ,wxLANGUAGE_MALAGASY- ,wxLANGUAGE_MALAY- ,wxLANGUAGE_MALAYALAM- ,wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM- ,wxLANGUAGE_MALAY_MALAYSIA- ,wxLANGUAGE_MALTESE- ,wxLANGUAGE_MANIPURI- ,wxLANGUAGE_MAORI- ,wxLANGUAGE_MARATHI- ,wxLANGUAGE_MOLDAVIAN- ,wxLANGUAGE_MONGOLIAN- ,wxLANGUAGE_NAURU- ,wxLANGUAGE_NEPALI- ,wxLANGUAGE_NEPALI_INDIA- ,wxLANGUAGE_NORWEGIAN_BOKMAL- ,wxLANGUAGE_NORWEGIAN_NYNORSK- ,wxLANGUAGE_OCCITAN- ,wxLANGUAGE_ORIYA- ,wxLANGUAGE_OROMO- ,wxLANGUAGE_PASHTO- ,wxLANGUAGE_POLISH- ,wxLANGUAGE_PORTUGUESE- ,wxLANGUAGE_PORTUGUESE_BRAZILIAN- ,wxLANGUAGE_PUNJABI- ,wxLANGUAGE_QUECHUA- ,wxLANGUAGE_RHAETO_ROMANCE- ,wxLANGUAGE_ROMANIAN- ,wxLANGUAGE_RUSSIAN- ,wxLANGUAGE_RUSSIAN_UKRAINE- ,wxLANGUAGE_SAMOAN- ,wxLANGUAGE_SANGHO- ,wxLANGUAGE_SANSKRIT- ,wxLANGUAGE_SCOTS_GAELIC- ,wxLANGUAGE_SERBIAN- ,wxLANGUAGE_SERBIAN_CYRILLIC- ,wxLANGUAGE_SERBIAN_LATIN- ,wxLANGUAGE_SERBO_CROATIAN- ,wxLANGUAGE_SESOTHO- ,wxLANGUAGE_SETSWANA- ,wxLANGUAGE_SHONA- ,wxLANGUAGE_SINDHI- ,wxLANGUAGE_SINHALESE- ,wxLANGUAGE_SISWATI- ,wxLANGUAGE_SLOVAK- ,wxLANGUAGE_SLOVENIAN- ,wxLANGUAGE_SOMALI- ,wxLANGUAGE_SPANISH- ,wxLANGUAGE_SPANISH_ARGENTINA- ,wxLANGUAGE_SPANISH_BOLIVIA- ,wxLANGUAGE_SPANISH_CHILE- ,wxLANGUAGE_SPANISH_COLOMBIA- ,wxLANGUAGE_SPANISH_COSTA_RICA- ,wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC- ,wxLANGUAGE_SPANISH_ECUADOR- ,wxLANGUAGE_SPANISH_EL_SALVADOR- ,wxLANGUAGE_SPANISH_GUATEMALA- ,wxLANGUAGE_SPANISH_HONDURAS- ,wxLANGUAGE_SPANISH_MEXICAN- ,wxLANGUAGE_SPANISH_MODERN- ,wxLANGUAGE_SPANISH_NICARAGUA- ,wxLANGUAGE_SPANISH_PANAMA- ,wxLANGUAGE_SPANISH_PARAGUAY- ,wxLANGUAGE_SPANISH_PERU- ,wxLANGUAGE_SPANISH_PUERTO_RICO- ,wxLANGUAGE_SPANISH_URUGUAY- ,wxLANGUAGE_SPANISH_US- ,wxLANGUAGE_SPANISH_VENEZUELA- ,wxLANGUAGE_SUNDANESE- ,wxLANGUAGE_SWAHILI- ,wxLANGUAGE_SWEDISH- ,wxLANGUAGE_SWEDISH_FINLAND- ,wxLANGUAGE_TAGALOG- ,wxLANGUAGE_TAJIK- ,wxLANGUAGE_TAMIL- ,wxLANGUAGE_TATAR- ,wxLANGUAGE_TELUGU- ,wxLANGUAGE_THAI- ,wxLANGUAGE_TIBETAN- ,wxLANGUAGE_TIGRINYA- ,wxLANGUAGE_TONGA- ,wxLANGUAGE_TSONGA- ,wxLANGUAGE_TURKISH- ,wxLANGUAGE_TURKMEN- ,wxLANGUAGE_TWI- ,wxLANGUAGE_UIGHUR- ,wxLANGUAGE_UKRAINIAN- ,wxLANGUAGE_URDU- ,wxLANGUAGE_URDU_INDIA- ,wxLANGUAGE_URDU_PAKISTAN- ,wxLANGUAGE_UZBEK- ,wxLANGUAGE_UZBEK_CYRILLIC- ,wxLANGUAGE_UZBEK_LATIN- ,wxLANGUAGE_VIETNAMESE- ,wxLANGUAGE_VOLAPUK- ,wxLANGUAGE_WELSH- ,wxLANGUAGE_WOLOF- ,wxLANGUAGE_XHOSA- ,wxLANGUAGE_YIDDISH- ,wxLANGUAGE_YORUBA- ,wxLANGUAGE_ZHUANG- ,wxLANGUAGE_ZULU- ,wxLANGUAGE_USER_DEFINE- ,wxLOCALE_THOUSANDS_SEP- ,wxLOCALE_DECIMAL_POINT- ,wxLOCALE_LOAD_DEFAULT- ,wxLOCALE_CONV_ENCODING- ,wxSTC_INVALID_POSITION- ,wxSTC_START- ,wxSTC_OPTIONAL_START- ,wxSTC_LEXER_START- ,wxSTC_WS_INVISIBLE- ,wxSTC_WS_VISIBLEALWAYS- ,wxSTC_WS_VISIBLEAFTERINDENT- ,wxSTC_EOL_CRLF- ,wxSTC_EOL_CR- ,wxSTC_EOL_LF- ,wxSTC_CP_UTF8- ,wxSTC_CP_DBCS- ,wxSTC_MARKER_MAX- ,wxSTC_MARK_CIRCLE- ,wxSTC_MARK_ROUNDRECT- ,wxSTC_MARK_ARROW- ,wxSTC_MARK_SMALLRECT- ,wxSTC_MARK_SHORTARROW- ,wxSTC_MARK_EMPTY- ,wxSTC_MARK_ARROWDOWN- ,wxSTC_MARK_MINUS- ,wxSTC_MARK_PLUS- ,wxSTC_MARK_VLINE- ,wxSTC_MARK_LCORNER- ,wxSTC_MARK_TCORNER- ,wxSTC_MARK_BOXPLUS- ,wxSTC_MARK_BOXPLUSCONNECTED- ,wxSTC_MARK_BOXMINUS- ,wxSTC_MARK_BOXMINUSCONNECTED- ,wxSTC_MARK_LCORNERCURVE- ,wxSTC_MARK_TCORNERCURVE- ,wxSTC_MARK_CIRCLEPLUS- ,wxSTC_MARK_CIRCLEPLUSCONNECTED- ,wxSTC_MARK_CIRCLEMINUS- ,wxSTC_MARK_CIRCLEMINUSCONNECTED- ,wxSTC_MARK_BACKGROUND- ,wxSTC_MARK_DOTDOTDOT- ,wxSTC_MARK_ARROWS- ,wxSTC_MARK_PIXMAP- ,wxSTC_MARK_CHARACTER- ,wxSTC_MARKNUM_FOLDEREND- ,wxSTC_MARKNUM_FOLDEROPENMID- ,wxSTC_MARKNUM_FOLDERMIDTAIL- ,wxSTC_MARKNUM_FOLDERTAIL- ,wxSTC_MARKNUM_FOLDERSUB- ,wxSTC_MARKNUM_FOLDER- ,wxSTC_MARKNUM_FOLDEROPEN- ,wxSTC_MASK_FOLDERS- ,wxSTC_MARGIN_SYMBOL- ,wxSTC_MARGIN_NUMBER- ,wxSTC_STYLE_DEFAULT- ,wxSTC_STYLE_LINENUMBER- ,wxSTC_STYLE_BRACELIGHT- ,wxSTC_STYLE_BRACEBAD- ,wxSTC_STYLE_CONTROLCHAR- ,wxSTC_STYLE_INDENTGUIDE- ,wxSTC_STYLE_LASTPREDEFINED- ,wxSTC_STYLE_MAX- ,wxSTC_CHARSET_ANSI- ,wxSTC_CHARSET_DEFAULT- ,wxSTC_CHARSET_BALTIC- ,wxSTC_CHARSET_CHINESEBIG5- ,wxSTC_CHARSET_EASTEUROPE- ,wxSTC_CHARSET_GB2312- ,wxSTC_CHARSET_GREEK- ,wxSTC_CHARSET_HANGUL- ,wxSTC_CHARSET_MAC- ,wxSTC_CHARSET_OEM- ,wxSTC_CHARSET_RUSSIAN- ,wxSTC_CHARSET_SHIFTJIS- ,wxSTC_CHARSET_SYMBOL- ,wxSTC_CHARSET_TURKISH- ,wxSTC_CHARSET_JOHAB- ,wxSTC_CHARSET_HEBREW- ,wxSTC_CHARSET_ARABIC- ,wxSTC_CHARSET_VIETNAMESE- ,wxSTC_CHARSET_THAI- ,wxSTC_CASE_MIXED- ,wxSTC_CASE_UPPER- ,wxSTC_CASE_LOWER- ,wxSTC_INDIC_MAX- ,wxSTC_INDIC_PLAIN- ,wxSTC_INDIC_SQUIGGLE- ,wxSTC_INDIC_TT- ,wxSTC_INDIC_DIAGONAL- ,wxSTC_INDIC_STRIKE- ,wxSTC_INDIC_HIDDEN- ,wxSTC_INDIC0_MASK- ,wxSTC_INDIC1_MASK- ,wxSTC_INDIC2_MASK- ,wxSTC_INDICS_MASK- ,wxSTC_PRINT_NORMAL- ,wxSTC_PRINT_INVERTLIGHT- ,wxSTC_PRINT_BLACKONWHITE- ,wxSTC_PRINT_COLOURONWHITE- ,wxSTC_PRINT_COLOURONWHITEDEFAULTBG- ,wxSTC_FIND_WHOLEWORD- ,wxSTC_FIND_MATCHCASE- ,wxSTC_FIND_WORDSTART- ,wxSTC_FIND_REGEXP- ,wxSTC_FIND_POSIX- ,wxSTC_FOLDLEVELBASE- ,wxSTC_FOLDLEVELWHITEFLAG- ,wxSTC_FOLDLEVELHEADERFLAG- ,wxSTC_FOLDLEVELBOXHEADERFLAG- ,wxSTC_FOLDLEVELBOXFOOTERFLAG- ,wxSTC_FOLDLEVELCONTRACTED- ,wxSTC_FOLDLEVELUNINDENT- ,wxSTC_FOLDLEVELNUMBERMASK- ,wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED- ,wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED- ,wxSTC_FOLDFLAG_LINEAFTER_EXPANDED- ,wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED- ,wxSTC_FOLDFLAG_LEVELNUMBERS- ,wxSTC_FOLDFLAG_BOX- ,wxSTC_TIME_FOREVER- ,wxSTC_WRAP_NONE- ,wxSTC_WRAP_WORD- ,wxSTC_CACHE_NONE- ,wxSTC_CACHE_CARET- ,wxSTC_CACHE_PAGE- ,wxSTC_CACHE_DOCUMENT- ,wxSTC_EDGE_NONE- ,wxSTC_EDGE_LINE- ,wxSTC_EDGE_BACKGROUND- ,wxSTC_CURSORNORMAL- ,wxSTC_CURSORWAIT- ,wxSTC_VISIBLE_SLOP- ,wxSTC_VISIBLE_STRICT- ,wxSTC_CARET_SLOP- ,wxSTC_CARET_STRICT- ,wxSTC_CARET_JUMPS- ,wxSTC_CARET_EVEN- ,wxSTC_SEL_STREAM- ,wxSTC_SEL_RECTANGLE- ,wxSTC_SEL_LINES- ,wxSTC_KEYWORDSET_MAX- ,wxSTC_MOD_INSERTTEXT- ,wxSTC_MOD_DELETETEXT- ,wxSTC_MOD_CHANGESTYLE- ,wxSTC_MOD_CHANGEFOLD- ,wxSTC_PERFORMED_USER- ,wxSTC_PERFORMED_UNDO- ,wxSTC_PERFORMED_REDO- ,wxSTC_LASTSTEPINUNDOREDO- ,wxSTC_MOD_CHANGEMARKER- ,wxSTC_MOD_BEFOREINSERT- ,wxSTC_MOD_BEFOREDELETE- ,wxSTC_MODEVENTMASKALL- ,wxSTC_KEY_DOWN- ,wxSTC_KEY_UP- ,wxSTC_KEY_LEFT- ,wxSTC_KEY_RIGHT- ,wxSTC_KEY_HOME- ,wxSTC_KEY_END- ,wxSTC_KEY_PRIOR- ,wxSTC_KEY_NEXT- ,wxSTC_KEY_DELETE- ,wxSTC_KEY_INSERT- ,wxSTC_KEY_ESCAPE- ,wxSTC_KEY_BACK- ,wxSTC_KEY_TAB- ,wxSTC_KEY_RETURN- ,wxSTC_KEY_ADD- ,wxSTC_KEY_SUBTRACT- ,wxSTC_KEY_DIVIDE- ,wxSTC_SCMOD_SHIFT- ,wxSTC_SCMOD_CTRL- ,wxSTC_SCMOD_ALT- ,wxSTC_LEX_CONTAINER- ,wxSTC_LEX_NULL- ,wxSTC_LEX_PYTHON- ,wxSTC_LEX_CPP- ,wxSTC_LEX_HTML- ,wxSTC_LEX_XML- ,wxSTC_LEX_PERL- ,wxSTC_LEX_SQL- ,wxSTC_LEX_VB- ,wxSTC_LEX_PROPERTIES- ,wxSTC_LEX_ERRORLIST- ,wxSTC_LEX_MAKEFILE- ,wxSTC_LEX_BATCH- ,wxSTC_LEX_XCODE- ,wxSTC_LEX_LATEX- ,wxSTC_LEX_LUA- ,wxSTC_LEX_DIFF- ,wxSTC_LEX_CONF- ,wxSTC_LEX_PASCAL- ,wxSTC_LEX_AVE- ,wxSTC_LEX_ADA- ,wxSTC_LEX_LISP- ,wxSTC_LEX_RUBY- ,wxSTC_LEX_EIFFEL- ,wxSTC_LEX_EIFFELKW- ,wxSTC_LEX_TCL- ,wxSTC_LEX_NNCRONTAB- ,wxSTC_LEX_BULLANT- ,wxSTC_LEX_VBSCRIPT- ,wxSTC_LEX_ASP- ,wxSTC_LEX_PHP- ,wxSTC_LEX_BAAN- ,wxSTC_LEX_MATLAB- ,wxSTC_LEX_SCRIPTOL- ,wxSTC_LEX_ASM- ,wxSTC_LEX_CPPNOCASE- ,wxSTC_LEX_FORTRAN- ,wxSTC_LEX_F77- ,wxSTC_LEX_CSS- ,wxSTC_LEX_POV- ,wxSTC_LEX_LOUT- ,wxSTC_LEX_ESCRIPT- ,wxSTC_LEX_PS- ,wxSTC_LEX_NSIS- ,wxSTC_LEX_MMIXAL- ,wxSTC_LEX_PHPSCRIPT- ,wxSTC_LEX_TADS3- ,wxSTC_LEX_REBOL- ,wxSTC_LEX_SMALLTALK- ,wxSTC_LEX_FLAGSHIP- ,wxSTC_LEX_CSOUND- ,wxSTC_LEX_FREEBASIC- ,wxSTC_LEX_AUTOMATIC- ,wxSTC_LEX_HASKELL- ,wxSTC_P_DEFAULT- ,wxSTC_P_COMMENTLINE- ,wxSTC_P_NUMBER- ,wxSTC_P_STRING- ,wxSTC_P_CHARACTER- ,wxSTC_P_WORD- ,wxSTC_P_TRIPLE- ,wxSTC_P_TRIPLEDOUBLE- ,wxSTC_P_CLASSNAME- ,wxSTC_P_DEFNAME- ,wxSTC_P_OPERATOR- ,wxSTC_P_IDENTIFIER- ,wxSTC_P_COMMENTBLOCK- ,wxSTC_P_STRINGEOL- ,wxSTC_C_DEFAULT- ,wxSTC_C_COMMENT- ,wxSTC_C_COMMENTLINE- ,wxSTC_C_COMMENTDOC- ,wxSTC_C_NUMBER- ,wxSTC_C_WORD- ,wxSTC_C_STRING- ,wxSTC_C_CHARACTER- ,wxSTC_C_UUID- ,wxSTC_C_PREPROCESSOR- ,wxSTC_C_OPERATOR- ,wxSTC_C_IDENTIFIER- ,wxSTC_C_STRINGEOL- ,wxSTC_C_VERBATIM- ,wxSTC_C_REGEX- ,wxSTC_C_COMMENTLINEDOC- ,wxSTC_C_WORD2- ,wxSTC_C_COMMENTDOCKEYWORD- ,wxSTC_C_COMMENTDOCKEYWORDERROR- ,wxSTC_C_GLOBALCLASS- ,wxSTC_H_DEFAULT- ,wxSTC_H_TAG- ,wxSTC_H_TAGUNKNOWN- ,wxSTC_H_ATTRIBUTE- ,wxSTC_H_ATTRIBUTEUNKNOWN- ,wxSTC_H_NUMBER- ,wxSTC_H_DOUBLESTRING- ,wxSTC_H_SINGLESTRING- ,wxSTC_H_OTHER- ,wxSTC_H_COMMENT- ,wxSTC_H_ENTITY- ,wxSTC_H_TAGEND- ,wxSTC_H_XMLSTART- ,wxSTC_H_XMLEND- ,wxSTC_H_SCRIPT- ,wxSTC_H_ASP- ,wxSTC_H_ASPAT- ,wxSTC_H_CDATA- ,wxSTC_H_QUESTION- ,wxSTC_H_VALUE- ,wxSTC_H_XCCOMMENT- ,wxSTC_H_SGML_DEFAULT- ,wxSTC_H_SGML_COMMAND- ,wxSTC_H_SGML_1ST_PARAM- ,wxSTC_H_SGML_DOUBLESTRING- ,wxSTC_H_SGML_SIMPLESTRING- ,wxSTC_H_SGML_ERROR- ,wxSTC_H_SGML_SPECIAL- ,wxSTC_H_SGML_ENTITY- ,wxSTC_H_SGML_COMMENT- ,wxSTC_H_SGML_1ST_PARAM_COMMENT- ,wxSTC_H_SGML_BLOCK_DEFAULT- ,wxSTC_HA_DEFAULT- ,wxSTC_HA_IDENTIFIER- ,wxSTC_HA_KEYWORD- ,wxSTC_HA_NUMBER- ,wxSTC_HA_STRING- ,wxSTC_HA_CHARACTER- ,wxSTC_HA_CLASS- ,wxSTC_HA_MODULE- ,wxSTC_HA_CAPITAL- ,wxSTC_HA_DATA- ,wxSTC_HA_IMPORT- ,wxSTC_HA_OPERATOR- ,wxSTC_HA_INSTANCE- ,wxSTC_HA_COMMENTLINE- ,wxSTC_HA_COMMENTBLOCK- ,wxSTC_HA_COMMENTBLOCK2- ,wxSTC_HA_COMMENTBLOCK3- ,wxSTC_HA_PREPROCESSOR- ,wxSTC_HJ_START- ,wxSTC_HJ_DEFAULT- ,wxSTC_HJ_COMMENT- ,wxSTC_HJ_COMMENTLINE- ,wxSTC_HJ_COMMENTDOC- ,wxSTC_HJ_NUMBER- ,wxSTC_HJ_WORD- ,wxSTC_HJ_KEYWORD- ,wxSTC_HJ_DOUBLESTRING- ,wxSTC_HJ_SINGLESTRING- ,wxSTC_HJ_SYMBOLS- ,wxSTC_HJ_STRINGEOL- ,wxSTC_HJ_REGEX- ,wxSTC_HJA_START- ,wxSTC_HJA_DEFAULT- ,wxSTC_HJA_COMMENT- ,wxSTC_HJA_COMMENTLINE- ,wxSTC_HJA_COMMENTDOC- ,wxSTC_HJA_NUMBER- ,wxSTC_HJA_WORD- ,wxSTC_HJA_KEYWORD- ,wxSTC_HJA_DOUBLESTRING- ,wxSTC_HJA_SINGLESTRING- ,wxSTC_HJA_SYMBOLS- ,wxSTC_HJA_STRINGEOL- ,wxSTC_HJA_REGEX- ,wxSTC_HB_START- ,wxSTC_HB_DEFAULT- ,wxSTC_HB_COMMENTLINE- ,wxSTC_HB_NUMBER- ,wxSTC_HB_WORD- ,wxSTC_HB_STRING- ,wxSTC_HB_IDENTIFIER- ,wxSTC_HB_STRINGEOL- ,wxSTC_HBA_START- ,wxSTC_HBA_DEFAULT- ,wxSTC_HBA_COMMENTLINE- ,wxSTC_HBA_NUMBER- ,wxSTC_HBA_WORD- ,wxSTC_HBA_STRING- ,wxSTC_HBA_IDENTIFIER- ,wxSTC_HBA_STRINGEOL- ,wxSTC_HP_START- ,wxSTC_HP_DEFAULT- ,wxSTC_HP_COMMENTLINE- ,wxSTC_HP_NUMBER- ,wxSTC_HP_STRING- ,wxSTC_HP_CHARACTER- ,wxSTC_HP_WORD- ,wxSTC_HP_TRIPLE- ,wxSTC_HP_TRIPLEDOUBLE- ,wxSTC_HP_CLASSNAME- ,wxSTC_HP_DEFNAME- ,wxSTC_HP_OPERATOR- ,wxSTC_HP_IDENTIFIER- ,wxSTC_HPA_START- ,wxSTC_HPA_DEFAULT- ,wxSTC_HPA_COMMENTLINE- ,wxSTC_HPA_NUMBER- ,wxSTC_HPA_STRING- ,wxSTC_HPA_CHARACTER- ,wxSTC_HPA_WORD- ,wxSTC_HPA_TRIPLE- ,wxSTC_HPA_TRIPLEDOUBLE- ,wxSTC_HPA_CLASSNAME- ,wxSTC_HPA_DEFNAME- ,wxSTC_HPA_OPERATOR- ,wxSTC_HPA_IDENTIFIER- ,wxSTC_HPHP_DEFAULT- ,wxSTC_HPHP_HSTRING- ,wxSTC_HPHP_SIMPLESTRING- ,wxSTC_HPHP_WORD- ,wxSTC_HPHP_NUMBER- ,wxSTC_HPHP_VARIABLE- ,wxSTC_HPHP_COMMENT- ,wxSTC_HPHP_COMMENTLINE- ,wxSTC_HPHP_HSTRING_VARIABLE- ,wxSTC_HPHP_OPERATOR- ,wxSTC_PL_DEFAULT- ,wxSTC_PL_ERROR- ,wxSTC_PL_COMMENTLINE- ,wxSTC_PL_POD- ,wxSTC_PL_NUMBER- ,wxSTC_PL_WORD- ,wxSTC_PL_STRING- ,wxSTC_PL_CHARACTER- ,wxSTC_PL_PUNCTUATION- ,wxSTC_PL_PREPROCESSOR- ,wxSTC_PL_OPERATOR- ,wxSTC_PL_IDENTIFIER- ,wxSTC_PL_SCALAR- ,wxSTC_PL_ARRAY- ,wxSTC_PL_HASH- ,wxSTC_PL_SYMBOLTABLE- ,wxSTC_PL_REGEX- ,wxSTC_PL_REGSUBST- ,wxSTC_PL_LONGQUOTE- ,wxSTC_PL_BACKTICKS- ,wxSTC_PL_DATASECTION- ,wxSTC_PL_HERE_DELIM- ,wxSTC_PL_HERE_Q- ,wxSTC_PL_HERE_QQ- ,wxSTC_PL_HERE_QX- ,wxSTC_PL_STRING_Q- ,wxSTC_PL_STRING_QQ- ,wxSTC_PL_STRING_QX- ,wxSTC_PL_STRING_QR- ,wxSTC_PL_STRING_QW- ,wxSTC_B_DEFAULT- ,wxSTC_B_COMMENT- ,wxSTC_B_NUMBER- ,wxSTC_B_KEYWORD- ,wxSTC_B_STRING- ,wxSTC_B_PREPROCESSOR- ,wxSTC_B_OPERATOR- ,wxSTC_B_IDENTIFIER- ,wxSTC_B_DATE- ,wxSTC_PROPS_DEFAULT- ,wxSTC_PROPS_COMMENT- ,wxSTC_PROPS_SECTION- ,wxSTC_PROPS_ASSIGNMENT- ,wxSTC_PROPS_DEFVAL- ,wxSTC_L_DEFAULT- ,wxSTC_L_COMMAND- ,wxSTC_L_TAG- ,wxSTC_L_MATH- ,wxSTC_L_COMMENT- ,wxSTC_LUA_DEFAULT- ,wxSTC_LUA_COMMENT- ,wxSTC_LUA_COMMENTLINE- ,wxSTC_LUA_COMMENTDOC- ,wxSTC_LUA_NUMBER- ,wxSTC_LUA_WORD- ,wxSTC_LUA_STRING- ,wxSTC_LUA_CHARACTER- ,wxSTC_LUA_LITERALSTRING- ,wxSTC_LUA_PREPROCESSOR- ,wxSTC_LUA_OPERATOR- ,wxSTC_LUA_IDENTIFIER- ,wxSTC_LUA_STRINGEOL- ,wxSTC_LUA_WORD2- ,wxSTC_LUA_WORD3- ,wxSTC_LUA_WORD4- ,wxSTC_LUA_WORD5- ,wxSTC_LUA_WORD6- ,wxSTC_LUA_WORD7- ,wxSTC_LUA_WORD8- ,wxSTC_ERR_DEFAULT- ,wxSTC_ERR_PYTHON- ,wxSTC_ERR_GCC- ,wxSTC_ERR_MS- ,wxSTC_ERR_CMD- ,wxSTC_ERR_BORLAND- ,wxSTC_ERR_PERL- ,wxSTC_ERR_NET- ,wxSTC_ERR_LUA- ,wxSTC_ERR_CTAG- ,wxSTC_ERR_DIFF_CHANGED- ,wxSTC_ERR_DIFF_ADDITION- ,wxSTC_ERR_DIFF_DELETION- ,wxSTC_ERR_DIFF_MESSAGE- ,wxSTC_ERR_PHP- ,wxSTC_ERR_ELF- ,wxSTC_ERR_IFC- ,wxSTC_BAT_DEFAULT- ,wxSTC_BAT_COMMENT- ,wxSTC_BAT_WORD- ,wxSTC_BAT_LABEL- ,wxSTC_BAT_HIDE- ,wxSTC_BAT_COMMAND- ,wxSTC_BAT_IDENTIFIER- ,wxSTC_BAT_OPERATOR- ,wxSTC_MAKE_DEFAULT- ,wxSTC_MAKE_COMMENT- ,wxSTC_MAKE_PREPROCESSOR- ,wxSTC_MAKE_IDENTIFIER- ,wxSTC_MAKE_OPERATOR- ,wxSTC_MAKE_TARGET- ,wxSTC_MAKE_IDEOL- ,wxSTC_DIFF_DEFAULT- ,wxSTC_DIFF_COMMENT- ,wxSTC_DIFF_COMMAND- ,wxSTC_DIFF_HEADER- ,wxSTC_DIFF_POSITION- ,wxSTC_DIFF_DELETED- ,wxSTC_DIFF_ADDED- ,wxSTC_CONF_DEFAULT- ,wxSTC_CONF_COMMENT- ,wxSTC_CONF_NUMBER- ,wxSTC_CONF_IDENTIFIER- ,wxSTC_CONF_EXTENSION- ,wxSTC_CONF_PARAMETER- ,wxSTC_CONF_STRING- ,wxSTC_CONF_OPERATOR- ,wxSTC_CONF_IP- ,wxSTC_CONF_DIRECTIVE- ,wxSTC_AVE_DEFAULT- ,wxSTC_AVE_COMMENT- ,wxSTC_AVE_NUMBER- ,wxSTC_AVE_WORD- ,wxSTC_AVE_STRING- ,wxSTC_AVE_ENUM- ,wxSTC_AVE_STRINGEOL- ,wxSTC_AVE_IDENTIFIER- ,wxSTC_AVE_OPERATOR- ,wxSTC_AVE_WORD1- ,wxSTC_AVE_WORD2- ,wxSTC_AVE_WORD3- ,wxSTC_AVE_WORD4- ,wxSTC_AVE_WORD5- ,wxSTC_AVE_WORD6- ,wxSTC_ADA_DEFAULT- ,wxSTC_ADA_WORD- ,wxSTC_ADA_IDENTIFIER- ,wxSTC_ADA_NUMBER- ,wxSTC_ADA_DELIMITER- ,wxSTC_ADA_CHARACTER- ,wxSTC_ADA_CHARACTEREOL- ,wxSTC_ADA_STRING- ,wxSTC_ADA_STRINGEOL- ,wxSTC_ADA_LABEL- ,wxSTC_ADA_COMMENTLINE- ,wxSTC_ADA_ILLEGAL- ,wxSTC_BAAN_DEFAULT- ,wxSTC_BAAN_COMMENT- ,wxSTC_BAAN_COMMENTDOC- ,wxSTC_BAAN_NUMBER- ,wxSTC_BAAN_WORD- ,wxSTC_BAAN_STRING- ,wxSTC_BAAN_PREPROCESSOR- ,wxSTC_BAAN_OPERATOR- ,wxSTC_BAAN_IDENTIFIER- ,wxSTC_BAAN_STRINGEOL- ,wxSTC_BAAN_WORD2- ,wxSTC_LISP_DEFAULT- ,wxSTC_LISP_COMMENT- ,wxSTC_LISP_NUMBER- ,wxSTC_LISP_KEYWORD- ,wxSTC_LISP_STRING- ,wxSTC_LISP_STRINGEOL- ,wxSTC_LISP_IDENTIFIER- ,wxSTC_LISP_OPERATOR- ,wxSTC_EIFFEL_DEFAULT- ,wxSTC_EIFFEL_COMMENTLINE- ,wxSTC_EIFFEL_NUMBER- ,wxSTC_EIFFEL_WORD- ,wxSTC_EIFFEL_STRING- ,wxSTC_EIFFEL_CHARACTER- ,wxSTC_EIFFEL_OPERATOR- ,wxSTC_EIFFEL_IDENTIFIER- ,wxSTC_EIFFEL_STRINGEOL- ,wxSTC_NNCRONTAB_DEFAULT- ,wxSTC_NNCRONTAB_COMMENT- ,wxSTC_NNCRONTAB_TASK- ,wxSTC_NNCRONTAB_SECTION- ,wxSTC_NNCRONTAB_KEYWORD- ,wxSTC_NNCRONTAB_MODIFIER- ,wxSTC_NNCRONTAB_ASTERISK- ,wxSTC_NNCRONTAB_NUMBER- ,wxSTC_NNCRONTAB_STRING- ,wxSTC_NNCRONTAB_ENVIRONMENT- ,wxSTC_NNCRONTAB_IDENTIFIER- ,wxSTC_MATLAB_DEFAULT- ,wxSTC_MATLAB_COMMENT- ,wxSTC_MATLAB_COMMAND- ,wxSTC_MATLAB_NUMBER- ,wxSTC_MATLAB_KEYWORD- ,wxSTC_MATLAB_STRING- ,wxSTC_MATLAB_OPERATOR- ,wxSTC_MATLAB_IDENTIFIER- ,wxSTC_SCRIPTOL_DEFAULT- ,wxSTC_SCRIPTOL_COMMENT- ,wxSTC_SCRIPTOL_COMMENTLINE- ,wxSTC_SCRIPTOL_COMMENTDOC- ,wxSTC_SCRIPTOL_NUMBER- ,wxSTC_SCRIPTOL_WORD- ,wxSTC_SCRIPTOL_STRING- ,wxSTC_SCRIPTOL_CHARACTER- ,wxSTC_SCRIPTOL_UUID- ,wxSTC_SCRIPTOL_PREPROCESSOR- ,wxSTC_SCRIPTOL_OPERATOR- ,wxSTC_SCRIPTOL_IDENTIFIER- ,wxSTC_SCRIPTOL_STRINGEOL- ,wxSTC_SCRIPTOL_VERBATIM- ,wxSTC_SCRIPTOL_REGEX- ,wxSTC_SCRIPTOL_COMMENTLINEDOC- ,wxSTC_SCRIPTOL_WORD2- ,wxSTC_SCRIPTOL_COMMENTDOCKEYWORD- ,wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR- ,wxSTC_SCRIPTOL_COMMENTBASIC- ,wxSTC_ASM_DEFAULT- ,wxSTC_ASM_COMMENT- ,wxSTC_ASM_NUMBER- ,wxSTC_ASM_STRING- ,wxSTC_ASM_OPERATOR- ,wxSTC_ASM_IDENTIFIER- ,wxSTC_ASM_CPUINSTRUCTION- ,wxSTC_ASM_MATHINSTRUCTION- ,wxSTC_ASM_REGISTER- ,wxSTC_ASM_DIRECTIVE- ,wxSTC_ASM_DIRECTIVEOPERAND- ,wxSTC_F_DEFAULT- ,wxSTC_F_COMMENT- ,wxSTC_F_NUMBER- ,wxSTC_F_STRING1- ,wxSTC_F_STRING2- ,wxSTC_F_STRINGEOL- ,wxSTC_F_OPERATOR- ,wxSTC_F_IDENTIFIER- ,wxSTC_F_WORD- ,wxSTC_F_WORD2- ,wxSTC_F_WORD3- ,wxSTC_F_PREPROCESSOR- ,wxSTC_F_OPERATOR2- ,wxSTC_F_LABEL- ,wxSTC_F_CONTINUATION- ,wxSTC_CSS_DEFAULT- ,wxSTC_CSS_TAG- ,wxSTC_CSS_CLASS- ,wxSTC_CSS_PSEUDOCLASS- ,wxSTC_CSS_UNKNOWN_PSEUDOCLASS- ,wxSTC_CSS_OPERATOR- ,wxSTC_CSS_IDENTIFIER- ,wxSTC_CSS_UNKNOWN_IDENTIFIER- ,wxSTC_CSS_VALUE- ,wxSTC_CSS_COMMENT- ,wxSTC_CSS_ID- ,wxSTC_CSS_IMPORTANT- ,wxSTC_CSS_DIRECTIVE- ,wxSTC_CSS_DOUBLESTRING- ,wxSTC_CSS_SINGLESTRING- ,wxSTC_POV_DEFAULT- ,wxSTC_POV_COMMENT- ,wxSTC_POV_COMMENTLINE- ,wxSTC_POV_NUMBER- ,wxSTC_POV_OPERATOR- ,wxSTC_POV_IDENTIFIER- ,wxSTC_POV_STRING- ,wxSTC_POV_STRINGEOL- ,wxSTC_POV_DIRECTIVE- ,wxSTC_POV_BADDIRECTIVE- ,wxSTC_POV_WORD2- ,wxSTC_POV_WORD3- ,wxSTC_POV_WORD4- ,wxSTC_POV_WORD5- ,wxSTC_POV_WORD6- ,wxSTC_POV_WORD7- ,wxSTC_POV_WORD8- ,wxSTC_LOUT_DEFAULT- ,wxSTC_LOUT_COMMENT- ,wxSTC_LOUT_NUMBER- ,wxSTC_LOUT_WORD- ,wxSTC_LOUT_WORD2- ,wxSTC_LOUT_WORD3- ,wxSTC_LOUT_WORD4- ,wxSTC_LOUT_STRING- ,wxSTC_LOUT_OPERATOR- ,wxSTC_LOUT_IDENTIFIER- ,wxSTC_LOUT_STRINGEOL- ,wxSTC_ESCRIPT_DEFAULT- ,wxSTC_ESCRIPT_COMMENT- ,wxSTC_ESCRIPT_COMMENTLINE- ,wxSTC_ESCRIPT_COMMENTDOC- ,wxSTC_ESCRIPT_NUMBER- ,wxSTC_ESCRIPT_WORD- ,wxSTC_ESCRIPT_STRING- ,wxSTC_ESCRIPT_OPERATOR- ,wxSTC_ESCRIPT_IDENTIFIER- ,wxSTC_ESCRIPT_BRACE- ,wxSTC_ESCRIPT_WORD2- ,wxSTC_ESCRIPT_WORD3- ,wxSTC_PS_DEFAULT- ,wxSTC_PS_COMMENT- ,wxSTC_PS_DSC_COMMENT- ,wxSTC_PS_DSC_VALUE- ,wxSTC_PS_NUMBER- ,wxSTC_PS_NAME- ,wxSTC_PS_KEYWORD- ,wxSTC_PS_LITERAL- ,wxSTC_PS_IMMEVAL- ,wxSTC_PS_PAREN_ARRAY- ,wxSTC_PS_PAREN_DICT- ,wxSTC_PS_PAREN_PROC- ,wxSTC_PS_TEXT- ,wxSTC_PS_HEXSTRING- ,wxSTC_PS_BASE85STRING- ,wxSTC_PS_BADSTRINGCHAR- ,wxSTC_NSIS_DEFAULT- ,wxSTC_NSIS_COMMENT- ,wxSTC_NSIS_STRINGDQ- ,wxSTC_NSIS_STRINGLQ- ,wxSTC_NSIS_STRINGRQ- ,wxSTC_NSIS_FUNCTION- ,wxSTC_NSIS_VARIABLE- ,wxSTC_NSIS_LABEL- ,wxSTC_NSIS_USERDEFINED- ,wxSTC_NSIS_SECTIONDEF- ,wxSTC_NSIS_SUBSECTIONDEF- ,wxSTC_NSIS_IFDEFINEDEF- ,wxSTC_NSIS_MACRODEF- ,wxSTC_NSIS_STRINGVAR- ,wxSTC_MMIXAL_LEADWS- ,wxSTC_MMIXAL_COMMENT- ,wxSTC_MMIXAL_LABEL- ,wxSTC_MMIXAL_OPCODE- ,wxSTC_MMIXAL_OPCODE_PRE- ,wxSTC_MMIXAL_OPCODE_VALID- ,wxSTC_MMIXAL_OPCODE_UNKNOWN- ,wxSTC_MMIXAL_OPCODE_POST- ,wxSTC_MMIXAL_OPERANDS- ,wxSTC_MMIXAL_NUMBER- ,wxSTC_MMIXAL_REF- ,wxSTC_MMIXAL_CHAR- ,wxSTC_MMIXAL_STRING- ,wxSTC_MMIXAL_REGISTER- ,wxSTC_MMIXAL_HEX- ,wxSTC_MMIXAL_OPERATOR- ,wxSTC_MMIXAL_SYMBOL- ,wxSTC_MMIXAL_INCLUDE- ,wxSTC_CLW_DEFAULT- ,wxSTC_CLW_LABEL- ,wxSTC_CLW_COMMENT- ,wxSTC_CLW_STRING- ,wxSTC_CLW_USER_IDENTIFIER- ,wxSTC_CLW_INTEGER_CONSTANT- ,wxSTC_CLW_REAL_CONSTANT- ,wxSTC_CLW_PICTURE_STRING- ,wxSTC_CLW_KEYWORD- ,wxSTC_CLW_COMPILER_DIRECTIVE- ,wxSTC_CLW_RUNTIME_EXPRESSIONS- ,wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION- ,wxSTC_CLW_STRUCTURE_DATA_TYPE- ,wxSTC_CLW_ATTRIBUTE- ,wxSTC_CLW_STANDARD_EQUATE- ,wxSTC_CLW_ERROR- ,wxSTC_CLW_DEPRECATED- ,wxSTC_LOT_DEFAULT- ,wxSTC_LOT_HEADER- ,wxSTC_LOT_BREAK- ,wxSTC_LOT_SET- ,wxSTC_LOT_PASS- ,wxSTC_LOT_FAIL- ,wxSTC_LOT_ABORT- ,wxSTC_YAML_DEFAULT- ,wxSTC_YAML_COMMENT- ,wxSTC_YAML_IDENTIFIER- ,wxSTC_YAML_KEYWORD- ,wxSTC_YAML_NUMBER- ,wxSTC_YAML_REFERENCE- ,wxSTC_YAML_DOCUMENT- ,wxSTC_YAML_TEXT- ,wxSTC_YAML_ERROR- ,wxSTC_TEX_DEFAULT- ,wxSTC_TEX_SPECIAL- ,wxSTC_TEX_GROUP- ,wxSTC_TEX_SYMBOL- ,wxSTC_TEX_COMMAND- ,wxSTC_TEX_TEXT- ,wxSTC_METAPOST_DEFAULT- ,wxSTC_METAPOST_SPECIAL- ,wxSTC_METAPOST_GROUP- ,wxSTC_METAPOST_SYMBOL- ,wxSTC_METAPOST_COMMAND- ,wxSTC_METAPOST_TEXT- ,wxSTC_METAPOST_EXTRA- ,wxSTC_ERLANG_DEFAULT- ,wxSTC_ERLANG_COMMENT- ,wxSTC_ERLANG_VARIABLE- ,wxSTC_ERLANG_NUMBER- ,wxSTC_ERLANG_KEYWORD- ,wxSTC_ERLANG_STRING- ,wxSTC_ERLANG_OPERATOR- ,wxSTC_ERLANG_ATOM- ,wxSTC_ERLANG_FUNCTION_NAME- ,wxSTC_ERLANG_CHARACTER- ,wxSTC_ERLANG_MACRO- ,wxSTC_ERLANG_RECORD- ,wxSTC_ERLANG_SEPARATOR- ,wxSTC_ERLANG_NODE_NAME- ,wxSTC_ERLANG_UNKNOWN- ,wxSTC_MSSQL_DEFAULT- ,wxSTC_MSSQL_COMMENT- ,wxSTC_MSSQL_LINE_COMMENT- ,wxSTC_MSSQL_NUMBER- ,wxSTC_MSSQL_STRING- ,wxSTC_MSSQL_OPERATOR- ,wxSTC_MSSQL_IDENTIFIER- ,wxSTC_MSSQL_VARIABLE- ,wxSTC_MSSQL_COLUMN_NAME- ,wxSTC_MSSQL_STATEMENT- ,wxSTC_MSSQL_DATATYPE- ,wxSTC_MSSQL_SYSTABLE- ,wxSTC_MSSQL_GLOBAL_VARIABLE- ,wxSTC_MSSQL_FUNCTION- ,wxSTC_MSSQL_STORED_PROCEDURE- ,wxSTC_MSSQL_DEFAULT_PREF_DATATYPE- ,wxSTC_MSSQL_COLUMN_NAME_2- ,wxSTC_V_DEFAULT- ,wxSTC_V_COMMENT- ,wxSTC_V_COMMENTLINE- ,wxSTC_V_COMMENTLINEBANG- ,wxSTC_V_NUMBER- ,wxSTC_V_WORD- ,wxSTC_V_STRING- ,wxSTC_V_WORD2- ,wxSTC_V_WORD3- ,wxSTC_V_PREPROCESSOR- ,wxSTC_V_OPERATOR- ,wxSTC_V_IDENTIFIER- ,wxSTC_V_STRINGEOL- ,wxSTC_V_USER- ,wxSTC_KIX_DEFAULT- ,wxSTC_KIX_COMMENT- ,wxSTC_KIX_STRING1- ,wxSTC_KIX_STRING2- ,wxSTC_KIX_NUMBER- ,wxSTC_KIX_VAR- ,wxSTC_KIX_MACRO- ,wxSTC_KIX_KEYWORD- ,wxSTC_KIX_FUNCTIONS- ,wxSTC_KIX_OPERATOR- ,wxSTC_KIX_IDENTIFIER- ,wxSTC_GC_DEFAULT- ,wxSTC_GC_COMMENTLINE- ,wxSTC_GC_COMMENTBLOCK- ,wxSTC_GC_GLOBAL- ,wxSTC_GC_EVENT- ,wxSTC_GC_ATTRIBUTE- ,wxSTC_GC_CONTROL- ,wxSTC_GC_COMMAND- ,wxSTC_GC_STRING- ,wxSTC_GC_OPERATOR- ,wxSTC_SN_DEFAULT- ,wxSTC_SN_CODE- ,wxSTC_SN_COMMENTLINE- ,wxSTC_SN_COMMENTLINEBANG- ,wxSTC_SN_NUMBER- ,wxSTC_SN_WORD- ,wxSTC_SN_STRING- ,wxSTC_SN_WORD2- ,wxSTC_SN_WORD3- ,wxSTC_SN_PREPROCESSOR- ,wxSTC_SN_OPERATOR- ,wxSTC_SN_IDENTIFIER- ,wxSTC_SN_STRINGEOL- ,wxSTC_SN_REGEXTAG- ,wxSTC_SN_SIGNAL- ,wxSTC_SN_USER- ,wxSTC_AU3_DEFAULT- ,wxSTC_AU3_COMMENT- ,wxSTC_AU3_COMMENTBLOCK- ,wxSTC_AU3_NUMBER- ,wxSTC_AU3_FUNCTION- ,wxSTC_AU3_KEYWORD- ,wxSTC_AU3_MACRO- ,wxSTC_AU3_STRING- ,wxSTC_AU3_OPERATOR- ,wxSTC_AU3_VARIABLE- ,wxSTC_AU3_SENT- ,wxSTC_AU3_PREPROCESSOR- ,wxSTC_AU3_SPECIAL- ,wxSTC_AU3_EXPAND- ,wxSTC_AU3_COMOBJ- ,wxSTC_APDL_DEFAULT- ,wxSTC_APDL_COMMENT- ,wxSTC_APDL_COMMENTBLOCK- ,wxSTC_APDL_NUMBER- ,wxSTC_APDL_STRING- ,wxSTC_APDL_OPERATOR- ,wxSTC_APDL_WORD- ,wxSTC_APDL_PROCESSOR- ,wxSTC_APDL_COMMAND- ,wxSTC_APDL_SLASHCOMMAND- ,wxSTC_APDL_STARCOMMAND- ,wxSTC_APDL_ARGUMENT- ,wxSTC_APDL_FUNCTION- ,wxSTC_SH_DEFAULT- ,wxSTC_SH_ERROR- ,wxSTC_SH_COMMENTLINE- ,wxSTC_SH_NUMBER- ,wxSTC_SH_WORD- ,wxSTC_SH_STRING- ,wxSTC_SH_CHARACTER- ,wxSTC_SH_OPERATOR- ,wxSTC_SH_IDENTIFIER- ,wxSTC_SH_SCALAR- ,wxSTC_SH_PARAM- ,wxSTC_SH_BACKTICKS- ,wxSTC_SH_HERE_DELIM- ,wxSTC_SH_HERE_Q- ,wxSTC_ASN1_DEFAULT- ,wxSTC_ASN1_COMMENT- ,wxSTC_ASN1_IDENTIFIER- ,wxSTC_ASN1_STRING- ,wxSTC_ASN1_OID- ,wxSTC_ASN1_SCALAR- ,wxSTC_ASN1_KEYWORD- ,wxSTC_ASN1_ATTRIBUTE- ,wxSTC_ASN1_DESCRIPTOR- ,wxSTC_ASN1_TYPE- ,wxSTC_ASN1_OPERATOR- ,wxSTC_VHDL_DEFAULT- ,wxSTC_VHDL_COMMENT- ,wxSTC_VHDL_COMMENTLINEBANG- ,wxSTC_VHDL_NUMBER- ,wxSTC_VHDL_STRING- ,wxSTC_VHDL_OPERATOR- ,wxSTC_VHDL_IDENTIFIER- ,wxSTC_VHDL_STRINGEOL- ,wxSTC_VHDL_KEYWORD- ,wxSTC_VHDL_STDOPERATOR- ,wxSTC_VHDL_ATTRIBUTE- ,wxSTC_VHDL_STDFUNCTION- ,wxSTC_VHDL_STDPACKAGE- ,wxSTC_VHDL_STDTYPE- ,wxSTC_VHDL_USERWORD- ,wxSTC_CAML_DEFAULT- ,wxSTC_CAML_IDENTIFIER- ,wxSTC_CAML_TAGNAME- ,wxSTC_CAML_KEYWORD- ,wxSTC_CAML_KEYWORD2- ,wxSTC_CAML_KEYWORD3- ,wxSTC_CAML_LINENUM- ,wxSTC_CAML_OPERATOR- ,wxSTC_CAML_NUMBER- ,wxSTC_CAML_CHAR- ,wxSTC_CAML_STRING- ,wxSTC_CAML_COMMENT- ,wxSTC_CAML_COMMENT1- ,wxSTC_CAML_COMMENT2- ,wxSTC_CAML_COMMENT3- ,wxSTC_T3_DEFAULT- ,wxSTC_T3_X_DEFAULT- ,wxSTC_T3_PREPROCESSOR- ,wxSTC_T3_BLOCK_COMMENT- ,wxSTC_T3_LINE_COMMENT- ,wxSTC_T3_OPERATOR- ,wxSTC_T3_KEYWORD- ,wxSTC_T3_NUMBER- ,wxSTC_T3_IDENTIFIER- ,wxSTC_T3_S_STRING- ,wxSTC_T3_D_STRING- ,wxSTC_T3_X_STRING- ,wxSTC_T3_LIB_DIRECTIVE- ,wxSTC_T3_MSG_PARAM- ,wxSTC_T3_HTML_TAG- ,wxSTC_T3_HTML_DEFAULT- ,wxSTC_T3_HTML_STRING- ,wxSTC_T3_USER1- ,wxSTC_T3_USER2- ,wxSTC_T3_USER3- ,wxSTC_REBOL_DEFAULT- ,wxSTC_REBOL_COMMENTLINE- ,wxSTC_REBOL_COMMENTBLOCK- ,wxSTC_REBOL_PREFACE- ,wxSTC_REBOL_OPERATOR- ,wxSTC_REBOL_CHARACTER- ,wxSTC_REBOL_QUOTEDSTRING- ,wxSTC_REBOL_BRACEDSTRING- ,wxSTC_REBOL_NUMBER- ,wxSTC_REBOL_PAIR- ,wxSTC_REBOL_TUPLE- ,wxSTC_REBOL_BINARY- ,wxSTC_REBOL_MONEY- ,wxSTC_REBOL_ISSUE- ,wxSTC_REBOL_TAG- ,wxSTC_REBOL_FILE- ,wxSTC_REBOL_EMAIL- ,wxSTC_REBOL_URL- ,wxSTC_REBOL_DATE- ,wxSTC_REBOL_TIME- ,wxSTC_REBOL_IDENTIFIER- ,wxSTC_REBOL_WORD- ,wxSTC_REBOL_WORD2- ,wxSTC_REBOL_WORD3- ,wxSTC_REBOL_WORD4- ,wxSTC_REBOL_WORD5- ,wxSTC_REBOL_WORD6- ,wxSTC_REBOL_WORD7- ,wxSTC_REBOL_WORD8- ,wxSTC_SQL_DEFAULT- ,wxSTC_SQL_COMMENT- ,wxSTC_SQL_COMMENTLINE- ,wxSTC_SQL_COMMENTDOC- ,wxSTC_SQL_NUMBER- ,wxSTC_SQL_WORD- ,wxSTC_SQL_STRING- ,wxSTC_SQL_CHARACTER- ,wxSTC_SQL_SQLPLUS- ,wxSTC_SQL_SQLPLUS_PROMPT- ,wxSTC_SQL_OPERATOR- ,wxSTC_SQL_IDENTIFIER- ,wxSTC_SQL_SQLPLUS_COMMENT- ,wxSTC_SQL_COMMENTLINEDOC- ,wxSTC_SQL_WORD2- ,wxSTC_SQL_COMMENTDOCKEYWORD- ,wxSTC_SQL_COMMENTDOCKEYWORDERROR- ,wxSTC_SQL_USER1- ,wxSTC_SQL_USER2- ,wxSTC_SQL_USER3- ,wxSTC_SQL_USER4- ,wxSTC_SQL_QUOTEDIDENTIFIER- ,wxSTC_ST_DEFAULT- ,wxSTC_ST_STRING- ,wxSTC_ST_NUMBER- ,wxSTC_ST_COMMENT- ,wxSTC_ST_SYMBOL- ,wxSTC_ST_BINARY- ,wxSTC_ST_BOOL- ,wxSTC_ST_SELF- ,wxSTC_ST_SUPER- ,wxSTC_ST_NIL- ,wxSTC_ST_GLOBAL- ,wxSTC_ST_RETURN- ,wxSTC_ST_SPECIAL- ,wxSTC_ST_KWSEND- ,wxSTC_ST_ASSIGN- ,wxSTC_ST_CHARACTER- ,wxSTC_ST_SPEC_SEL- ,wxSTC_FS_DEFAULT- ,wxSTC_FS_COMMENT- ,wxSTC_FS_COMMENTLINE- ,wxSTC_FS_COMMENTDOC- ,wxSTC_FS_COMMENTLINEDOC- ,wxSTC_FS_COMMENTDOCKEYWORD- ,wxSTC_FS_COMMENTDOCKEYWORDERROR- ,wxSTC_FS_KEYWORD- ,wxSTC_FS_KEYWORD2- ,wxSTC_FS_KEYWORD3- ,wxSTC_FS_KEYWORD4- ,wxSTC_FS_NUMBER- ,wxSTC_FS_STRING- ,wxSTC_FS_PREPROCESSOR- ,wxSTC_FS_OPERATOR- ,wxSTC_FS_IDENTIFIER- ,wxSTC_FS_DATE- ,wxSTC_FS_STRINGEOL- ,wxSTC_FS_CONSTANT- ,wxSTC_FS_ASM- ,wxSTC_FS_LABEL- ,wxSTC_FS_ERROR- ,wxSTC_FS_HEXNUMBER- ,wxSTC_FS_BINNUMBER- ,wxSTC_CSOUND_DEFAULT- ,wxSTC_CSOUND_COMMENT- ,wxSTC_CSOUND_NUMBER- ,wxSTC_CSOUND_OPERATOR- ,wxSTC_CSOUND_INSTR- ,wxSTC_CSOUND_IDENTIFIER- ,wxSTC_CSOUND_OPCODE- ,wxSTC_CSOUND_HEADERSTMT- ,wxSTC_CSOUND_USERKEYWORD- ,wxSTC_CSOUND_COMMENTBLOCK- ,wxSTC_CSOUND_PARAM- ,wxSTC_CSOUND_ARATE_VAR- ,wxSTC_CSOUND_KRATE_VAR- ,wxSTC_CSOUND_IRATE_VAR- ,wxSTC_CSOUND_GLOBAL_VAR- ,wxSTC_CSOUND_STRINGEOL- ,wxSTC_CMD_REDO- ,wxSTC_CMD_SELECTALL- ,wxSTC_CMD_UNDO- ,wxSTC_CMD_CUT- ,wxSTC_CMD_COPY- ,wxSTC_CMD_PASTE- ,wxSTC_CMD_CLEAR- ,wxSTC_CMD_LINEDOWN- ,wxSTC_CMD_LINEDOWNEXTEND- ,wxSTC_CMD_LINEUP- ,wxSTC_CMD_LINEUPEXTEND- ,wxSTC_CMD_CHARLEFT- ,wxSTC_CMD_CHARLEFTEXTEND- ,wxSTC_CMD_CHARRIGHT- ,wxSTC_CMD_CHARRIGHTEXTEND- ,wxSTC_CMD_WORDLEFT- ,wxSTC_CMD_WORDLEFTEXTEND- ,wxSTC_CMD_WORDRIGHT- ,wxSTC_CMD_WORDRIGHTEXTEND- ,wxSTC_CMD_HOME- ,wxSTC_CMD_HOMEEXTEND- ,wxSTC_CMD_LINEEND- ,wxSTC_CMD_LINEENDEXTEND- ,wxSTC_CMD_DOCUMENTSTART- ,wxSTC_CMD_DOCUMENTSTARTEXTEND- ,wxSTC_CMD_DOCUMENTEND- ,wxSTC_CMD_DOCUMENTENDEXTEND- ,wxSTC_CMD_PAGEUP- ,wxSTC_CMD_PAGEUPEXTEND- ,wxSTC_CMD_PAGEDOWN- ,wxSTC_CMD_PAGEDOWNEXTEND- ,wxSTC_CMD_EDITTOGGLEOVERTYPE- ,wxSTC_CMD_CANCEL- ,wxSTC_CMD_DELETEBACK- ,wxSTC_CMD_TAB- ,wxSTC_CMD_BACKTAB- ,wxSTC_CMD_NEWLINE- ,wxSTC_CMD_FORMFEED- ,wxSTC_CMD_VCHOME- ,wxSTC_CMD_VCHOMEEXTEND- ,wxSTC_CMD_ZOOMIN- ,wxSTC_CMD_ZOOMOUT- ,wxSTC_CMD_DELWORDLEFT- ,wxSTC_CMD_DELWORDRIGHT- ,wxSTC_CMD_LINECUT- ,wxSTC_CMD_LINEDELETE- ,wxSTC_CMD_LINETRANSPOSE- ,wxSTC_CMD_LINEDUPLICATE- ,wxSTC_CMD_LOWERCASE- ,wxSTC_CMD_UPPERCASE- ,wxSTC_CMD_LINESCROLLDOWN- ,wxSTC_CMD_LINESCROLLUP- ,wxSTC_CMD_DELETEBACKNOTLINE- ,wxSTC_CMD_HOMEDISPLAY- ,wxSTC_CMD_HOMEDISPLAYEXTEND- ,wxSTC_CMD_LINEENDDISPLAY- ,wxSTC_CMD_LINEENDDISPLAYEXTEND- ,wxSTC_CMD_HOMEWRAP- ,wxSTC_CMD_HOMEWRAPEXTEND- ,wxSTC_CMD_LINEENDWRAP- ,wxSTC_CMD_LINEENDWRAPEXTEND- ,wxSTC_CMD_VCHOMEWRAP- ,wxSTC_CMD_VCHOMEWRAPEXTEND- ,wxSTC_CMD_LINECOPY- ,wxSTC_CMD_WORDPARTLEFT- ,wxSTC_CMD_WORDPARTLEFTEXTEND- ,wxSTC_CMD_WORDPARTRIGHT- ,wxSTC_CMD_WORDPARTRIGHTEXTEND- ,wxSTC_CMD_DELLINELEFT- ,wxSTC_CMD_DELLINERIGHT- ,wxSTC_CMD_PARADOWN- ,wxSTC_CMD_PARADOWNEXTEND- ,wxSTC_CMD_PARAUP- ,wxSTC_CMD_PARAUPEXTEND- ,wxSTC_CMD_LINEDOWNRECTEXTEND- ,wxSTC_CMD_LINEUPRECTEXTEND- ,wxSTC_CMD_CHARLEFTRECTEXTEND- ,wxSTC_CMD_CHARRIGHTRECTEXTEND- ,wxSTC_CMD_HOMERECTEXTEND- ,wxSTC_CMD_VCHOMERECTEXTEND- ,wxSTC_CMD_LINEENDRECTEXTEND- ,wxSTC_CMD_PAGEUPRECTEXTEND- ,wxSTC_CMD_PAGEDOWNRECTEXTEND- ,wxSTC_CMD_STUTTEREDPAGEUP- ,wxSTC_CMD_STUTTEREDPAGEUPEXTEND- ,wxSTC_CMD_STUTTEREDPAGEDOWN- ,wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND- ,wxSTC_CMD_WORDLEFTEND- ,wxSTC_CMD_WORDLEFTENDEXTEND- ,wxSTC_CMD_WORDRIGHTEND- ,wxSTC_CMD_WORDRIGHTENDEXTEND- ) where--import Data.Bits---- | A flag can be combined with other flags to a bit mask.-type BitFlag = Int--wxBU_EXACTFIT :: BitFlag-wxBU_EXACTFIT = 1--wxTE_PROCESS_ENTER :: BitFlag-wxTE_PROCESS_ENTER = 1024--wxTE_PASSWORD :: BitFlag-wxTE_PASSWORD = 2048--wxTE_RICH2 :: BitFlag-wxTE_RICH2 = 32768--wxTE_AUTO_URL :: BitFlag-wxTE_AUTO_URL = 4096--wxTE_NOHIDESEL :: BitFlag-wxTE_NOHIDESEL = 8192--wxTE_LEFT :: BitFlag-wxTE_LEFT = 0--wxTE_RIGHT :: BitFlag-wxTE_RIGHT = 512--wxTE_CENTRE :: BitFlag-wxTE_CENTRE = 256--wxTE_LINEWRAP :: BitFlag-wxTE_LINEWRAP = 16384--wxTE_WORDWRAP :: BitFlag-wxTE_WORDWRAP = 0--wxEXEC_ASYNC :: BitFlag-wxEXEC_ASYNC = 0--wxEXEC_SYNC :: BitFlag-wxEXEC_SYNC = 1--wxEXEC_NOHIDE :: BitFlag-wxEXEC_NOHIDE = 2--wxEXEC_MAKE_GROUP_LEADER :: BitFlag-wxEXEC_MAKE_GROUP_LEADER = 4--wxITEM_SEPARATOR :: Int-wxITEM_SEPARATOR = (-1)--wxITEM_NORMAL :: Int-wxITEM_NORMAL = 0--wxITEM_CHECK :: Int-wxITEM_CHECK = 1--wxITEM_RADIO :: Int-wxITEM_RADIO = 2--wxITEM_MAX :: Int-wxITEM_MAX = 3--wxCLOSE_BOX :: Int-wxCLOSE_BOX = 4096--wxFRAME_EX_CONTEXTHELP :: Int-wxFRAME_EX_CONTEXTHELP = 4--wxDIALOG_EX_CONTEXTHELP :: Int-wxDIALOG_EX_CONTEXTHELP = 4--wxFRAME_SHAPED :: Int-wxFRAME_SHAPED = 16--wxFULLSCREEN_ALL :: Int-wxFULLSCREEN_ALL = 31--wxTreeItemIcon_Normal :: Int-wxTreeItemIcon_Normal = 0--wxTreeItemIcon_Selected :: Int-wxTreeItemIcon_Selected = 1--wxTreeItemIcon_Expanded :: Int-wxTreeItemIcon_Expanded = 2--wxTreeItemIcon_SelectedExpanded :: Int-wxTreeItemIcon_SelectedExpanded = 3--wxCONFIG_USE_LOCAL_FILE :: Int-wxCONFIG_USE_LOCAL_FILE = 1--wxCONFIG_USE_GLOBAL_FILE :: Int-wxCONFIG_USE_GLOBAL_FILE = 2--wxCONFIG_USE_RELATIVE_PATH :: Int-wxCONFIG_USE_RELATIVE_PATH = 4--wxCONFIG_USE_NO_ESCAPE_CHARACTERS :: Int-wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8--wxCONFIG_TYPE_UNKNOWN :: Int-wxCONFIG_TYPE_UNKNOWN = 0--wxCONFIG_TYPE_STRING :: Int-wxCONFIG_TYPE_STRING = 1--wxCONFIG_TYPE_BOOLEAN :: Int-wxCONFIG_TYPE_BOOLEAN = 2--wxCONFIG_TYPE_INTEGER :: Int-wxCONFIG_TYPE_INTEGER = 3--wxCONFIG_TYPE_FLOAT :: Int-wxCONFIG_TYPE_FLOAT = 4--wxSIGNONE :: Int-wxSIGNONE = 0--wxSIGHUP :: Int-wxSIGHUP = 1--wxSIGINT :: Int-wxSIGINT = 2--wxSIGQUIT :: Int-wxSIGQUIT = 3--wxSIGILL :: Int-wxSIGILL = 4--wxSIGTRAP :: Int-wxSIGTRAP = 5--wxSIGABRT :: Int-wxSIGABRT = 6--wxSIGEMT :: Int-wxSIGEMT = 7--wxSIGFPE :: Int-wxSIGFPE = 8--wxSIGKILL :: Int-wxSIGKILL = 9--wxSIGBUS :: Int-wxSIGBUS = 10--wxSIGSEGV :: Int-wxSIGSEGV = 11--wxSIGSYS :: Int-wxSIGSYS = 12--wxSIGPIPE :: Int-wxSIGPIPE = 13--wxSIGALRM :: Int-wxSIGALRM = 14--wxSIGTERM :: Int-wxSIGTERM = 15--wxKILL_OK :: Int-wxKILL_OK = 0--wxKILL_BAD_SIGNAL :: Int-wxKILL_BAD_SIGNAL = 1--wxKILL_ACCESS_DENIED :: Int-wxKILL_ACCESS_DENIED = 2--wxKILL_NO_PROCESS :: Int-wxKILL_NO_PROCESS = 3--wxKILL_ERROR :: Int-wxKILL_ERROR = 4--wxSTREAM_NO_ERROR :: Int-wxSTREAM_NO_ERROR = 0--wxSTREAM_EOF :: Int-wxSTREAM_EOF = 1--wxSTREAM_WRITE_ERROR :: Int-wxSTREAM_WRITE_ERROR = 2--wxSTREAM_READ_ERROR :: Int-wxSTREAM_READ_ERROR = 3--wxNB_MULTILINE :: Int-wxNB_MULTILINE = 256--wxIMAGE_LIST_NORMAL :: Int-wxIMAGE_LIST_NORMAL = 0--wxIMAGE_LIST_SMALL :: Int-wxIMAGE_LIST_SMALL = 1--wxIMAGE_LIST_STATE :: Int-wxIMAGE_LIST_STATE = 2--wxTB_HORIZONTAL :: Int-wxTB_HORIZONTAL = 4--wxTB_NOALIGN :: Int-wxTB_NOALIGN = 1024--wxTB_NODIVIDER :: Int-wxTB_NODIVIDER = 512--wxTB_NOICONS :: Int-wxTB_NOICONS = 128--wxTB_TEXT :: Int-wxTB_TEXT = 256--wxTB_VERTICAL :: Int-wxTB_VERTICAL = 8--wxADJUST_MINSIZE :: Int-wxADJUST_MINSIZE = 32768--wxDB_TYPE_NAME_LEN :: Int-wxDB_TYPE_NAME_LEN = 40--wxDB_MAX_STATEMENT_LEN :: Int-wxDB_MAX_STATEMENT_LEN = 4096--wxDB_MAX_WHERE_CLAUSE_LEN :: Int-wxDB_MAX_WHERE_CLAUSE_LEN = 2048--wxDB_MAX_ERROR_MSG_LEN :: Int-wxDB_MAX_ERROR_MSG_LEN = 512--wxDB_MAX_ERROR_HISTORY :: Int-wxDB_MAX_ERROR_HISTORY = 5--wxDB_MAX_TABLE_NAME_LEN :: Int-wxDB_MAX_TABLE_NAME_LEN = 128--wxDB_MAX_COLUMN_NAME_LEN :: Int-wxDB_MAX_COLUMN_NAME_LEN = 128--wxDB_DATA_TYPE_VARCHAR :: Int-wxDB_DATA_TYPE_VARCHAR = 1--wxDB_DATA_TYPE_INTEGER :: Int-wxDB_DATA_TYPE_INTEGER = 2--wxDB_DATA_TYPE_FLOAT :: Int-wxDB_DATA_TYPE_FLOAT = 3--wxDB_DATA_TYPE_DATE :: Int-wxDB_DATA_TYPE_DATE = 4--wxDB_DATA_TYPE_BLOB :: Int-wxDB_DATA_TYPE_BLOB = 5--wxDB_SELECT_KEYFIELDS :: Int-wxDB_SELECT_KEYFIELDS = 1--wxDB_SELECT_WHERE :: Int-wxDB_SELECT_WHERE = 2--wxDB_SELECT_MATCHING :: Int-wxDB_SELECT_MATCHING = 3--wxDB_SELECT_STATEMENT :: Int-wxDB_SELECT_STATEMENT = 4--wxDB_UPD_KEYFIELDS :: Int-wxDB_UPD_KEYFIELDS = 1--wxDB_UPD_WHERE :: Int-wxDB_UPD_WHERE = 2--wxDB_DEL_KEYFIELDS :: Int-wxDB_DEL_KEYFIELDS = 1--wxDB_DEL_WHERE :: Int-wxDB_DEL_WHERE = 2--wxDB_DEL_MATCHING :: Int-wxDB_DEL_MATCHING = 3--wxDB_WHERE_KEYFIELDS :: Int-wxDB_WHERE_KEYFIELDS = 1--wxDB_WHERE_MATCHING :: Int-wxDB_WHERE_MATCHING = 2--wxDB_GRANT_SELECT :: Int-wxDB_GRANT_SELECT = 1--wxDB_GRANT_INSERT :: Int-wxDB_GRANT_INSERT = 2--wxDB_GRANT_UPDATE :: Int-wxDB_GRANT_UPDATE = 4--wxDB_GRANT_DELETE :: Int-wxDB_GRANT_DELETE = 8--wxDB_GRANT_ALL :: Int-wxDB_GRANT_ALL = 15--wxSQL_INVALID_HANDLE :: Int-wxSQL_INVALID_HANDLE = (-2)--wxSQL_ERROR :: Int-wxSQL_ERROR = (-1)--wxSQL_SUCCESS :: Int-wxSQL_SUCCESS = 0--wxSQL_SUCCESS_WITH_INFO :: Int-wxSQL_SUCCESS_WITH_INFO = 1--wxSQL_NO_DATA_FOUND :: Int-wxSQL_NO_DATA_FOUND = 100--wxSQL_CHAR :: Int-wxSQL_CHAR = 1--wxSQL_NUMERIC :: Int-wxSQL_NUMERIC = 2--wxSQL_DECIMAL :: Int-wxSQL_DECIMAL = 3--wxSQL_INTEGER :: Int-wxSQL_INTEGER = 4--wxSQL_SMALLINT :: Int-wxSQL_SMALLINT = 5--wxSQL_FLOAT :: Int-wxSQL_FLOAT = 6--wxSQL_REAL :: Int-wxSQL_REAL = 7--wxSQL_DOUBLE :: Int-wxSQL_DOUBLE = 8--wxSQL_VARCHAR :: Int-wxSQL_VARCHAR = 12--wxSQL_C_CHAR :: Int-wxSQL_C_CHAR = 1--wxSQL_C_LONG :: Int-wxSQL_C_LONG = 4--wxSQL_C_SHORT :: Int-wxSQL_C_SHORT = 5--wxSQL_C_FLOAT :: Int-wxSQL_C_FLOAT = 7--wxSQL_C_DOUBLE :: Int-wxSQL_C_DOUBLE = 8--wxSQL_C_DEFAULT :: Int-wxSQL_C_DEFAULT = 99--wxSQL_NO_NULLS :: Int-wxSQL_NO_NULLS = 0--wxSQL_NULLABLE :: Int-wxSQL_NULLABLE = 1--wxSQL_NULLABLE_UNKNOWN :: Int-wxSQL_NULLABLE_UNKNOWN = 2--wxSQL_NULL_DATA :: Int-wxSQL_NULL_DATA = (-1)--wxSQL_DATA_AT_EXEC :: Int-wxSQL_DATA_AT_EXEC = (-2)--wxSQL_NTS :: Int-wxSQL_NTS = (-3)--wxSQL_DATE :: Int-wxSQL_DATE = 9--wxSQL_TIME :: Int-wxSQL_TIME = 10--wxSQL_TIMESTAMP :: Int-wxSQL_TIMESTAMP = 11--wxSQL_C_DATE :: Int-wxSQL_C_DATE = 9--wxSQL_C_TIME :: Int-wxSQL_C_TIME = 10--wxSQL_C_TIMESTAMP :: Int-wxSQL_C_TIMESTAMP = 11--wxSQL_FETCH_NEXT :: Int-wxSQL_FETCH_NEXT = 1--wxSQL_FETCH_FIRST :: Int-wxSQL_FETCH_FIRST = 2--wxSQL_FETCH_LAST :: Int-wxSQL_FETCH_LAST = 3--wxSQL_FETCH_PRIOR :: Int-wxSQL_FETCH_PRIOR = 4--wxSQL_FETCH_ABSOLUTE :: Int-wxSQL_FETCH_ABSOLUTE = 5--wxSQL_FETCH_RELATIVE :: Int-wxSQL_FETCH_RELATIVE = 6--wxSQL_FETCH_BOOKMARK :: Int-wxSQL_FETCH_BOOKMARK = 8--wxSOUND_SYNC :: Int-wxSOUND_SYNC = 0--wxSOUND_ASYNC :: Int-wxSOUND_ASYNC = 1--wxSOUND_LOOP :: Int-wxSOUND_LOOP = 2--wxDRAG_COPYONLY :: Int-wxDRAG_COPYONLY = 0--wxDRAG_ALLOWMOVE :: Int-wxDRAG_ALLOWMOVE = 1--wxDRAG_DEFALUTMOVE :: Int-wxDRAG_DEFALUTMOVE = 3--wxMEDIACTRLPLAYERCONTROLS_NONE :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_NONE = 0--wxMEDIACTRLPLAYERCONTROLS_STEP :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_STEP = 1--wxMEDIACTRLPLAYERCONTROLS_VOLUME :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_VOLUME = 2--wxMEDIACTRLPLAYERCONTROLS_DEFAULT :: BitFlag-wxMEDIACTRLPLAYERCONTROLS_DEFAULT = 3--wxACCEL_ALT :: Int-wxACCEL_ALT = 1--wxACCEL_CTRL :: Int-wxACCEL_CTRL = 2--wxACCEL_SHIFT :: Int-wxACCEL_SHIFT = 4--wxACCEL_NORMAL :: Int-wxACCEL_NORMAL = 0--wxNULL_FLAG :: Int-wxNULL_FLAG = 0--wxEVT_NULL :: Int-wxEVT_NULL = 0--wxEVT_FIRST :: Int-wxEVT_FIRST = 10000--wxJOYSTICK1 :: Int-wxJOYSTICK1 = 0--wxJOYSTICK2 :: Int-wxJOYSTICK2 = 1--wxJOY_BUTTON1 :: Int-wxJOY_BUTTON1 = 1--wxJOY_BUTTON2 :: Int-wxJOY_BUTTON2 = 2--wxJOY_BUTTON3 :: Int-wxJOY_BUTTON3 = 4--wxJOY_BUTTON4 :: Int-wxJOY_BUTTON4 = 8--wxUNKNOWN_PLATFORM :: Int-wxUNKNOWN_PLATFORM = 1--wxCURSES :: Int-wxCURSES = 2--wxXVIEW_X :: Int-wxXVIEW_X = 3--wxMOTIF_X :: Int-wxMOTIF_X = 4--wxCOSE_X :: Int-wxCOSE_X = 5--wxNEXTSTEP :: Int-wxNEXTSTEP = 6--wxMACINTOSH :: Int-wxMACINTOSH = 7--wxBEOS :: Int-wxBEOS = 8--wxGTK :: Int-wxGTK = 9--wxGTK_WIN32 :: Int-wxGTK_WIN32 = 10--wxGTK_OS2 :: Int-wxGTK_OS2 = 11--wxGTK_BEOS :: Int-wxGTK_BEOS = 12--wxQT :: Int-wxQT = 13--wxGEOS :: Int-wxGEOS = 14--wxOS2_PM :: Int-wxOS2_PM = 15--wxWINDOWS :: Int-wxWINDOWS = 16--wxPENWINDOWS :: Int-wxPENWINDOWS = 17--wxWINDOWS_NT :: Int-wxWINDOWS_NT = 18--wxWIN32S :: Int-wxWIN32S = 19--wxWIN95 :: Int-wxWIN95 = 20--wxWIN386 :: Int-wxWIN386 = 21--wxMGL_UNIX :: Int-wxMGL_UNIX = 22--wxMGL_X :: Int-wxMGL_X = 23--wxMGL_WIN32 :: Int-wxMGL_WIN32 = 24--wxMGL_OS2 :: Int-wxMGL_OS2 = 25--wxWINDOWS_OS2 :: Int-wxWINDOWS_OS2 = 26--wxUNIX :: Int-wxUNIX = 27--wxBIG_ENDIAN :: Int-wxBIG_ENDIAN = 4321--wxLITTLE_ENDIAN :: Int-wxLITTLE_ENDIAN = 1234--wxPDP_ENDIAN :: Int-wxPDP_ENDIAN = 3412--wxCENTRE :: Int-wxCENTRE = 1--wxCENTER :: Int-wxCENTER = 1--wxCENTER_FRAME :: Int-wxCENTER_FRAME = 0--wxCENTRE_ON_SCREEN :: Int-wxCENTRE_ON_SCREEN = 2--wxHORIZONTAL :: Int-wxHORIZONTAL = 4--wxVERTICAL :: Int-wxVERTICAL = 8--wxBOTH :: Int-wxBOTH = 12--wxLEFT :: Int-wxLEFT = 16--wxRIGHT :: Int-wxRIGHT = 32--wxUP :: Int-wxUP = 64--wxDOWN :: Int-wxDOWN = 128--wxTOP :: Int-wxTOP = 64--wxBOTTOM :: Int-wxBOTTOM = 128--wxNORTH :: Int-wxNORTH = 64--wxSOUTH :: Int-wxSOUTH = 128--wxWEST :: Int-wxWEST = 16--wxEAST :: Int-wxEAST = 32--wxALL :: Int-wxALL = 240--wxALIGN_NOT :: Int-wxALIGN_NOT = 0--wxALIGN_CENTER_HORIZONTAL :: Int-wxALIGN_CENTER_HORIZONTAL = 256--wxALIGN_CENTRE_HORIZONTAL :: Int-wxALIGN_CENTRE_HORIZONTAL = 256--wxALIGN_LEFT :: Int-wxALIGN_LEFT = 0--wxALIGN_TOP :: Int-wxALIGN_TOP = 0--wxALIGN_RIGHT :: Int-wxALIGN_RIGHT = 512--wxALIGN_BOTTOM :: Int-wxALIGN_BOTTOM = 1024--wxALIGN_CENTER_VERTICAL :: Int-wxALIGN_CENTER_VERTICAL = 2048--wxALIGN_CENTRE_VERTICAL :: Int-wxALIGN_CENTRE_VERTICAL = 2048--wxALIGN_CENTER :: Int-wxALIGN_CENTER = 2304--wxALIGN_CENTRE :: Int-wxALIGN_CENTRE = 2304--wxSTRETCH_NOT :: Int-wxSTRETCH_NOT = 0--wxSHRINK :: Int-wxSHRINK = 4096--wxGROW :: Int-wxGROW = 8192--wxEXPAND :: Int-wxEXPAND = 8192--wxSHAPED :: Int-wxSHAPED = 16384--wxVSCROLL :: Int-wxVSCROLL = (-2147483648)--wxHSCROLL :: Int-wxHSCROLL = 1073741824--wxCAPTION :: Int-wxCAPTION = 536870912---- | Deprecated-wxDOUBLE_BORDER :: Int-wxDOUBLE_BORDER = 268435456--- DEPRECATED wxDOUBLE_BORDER "Use wxBORDER_THEME" #-}---- | Deprecated-wxSUNKEN_BORDER :: Int-wxSUNKEN_BORDER = 134217728--- DEPRECATED wxSUNKEN_BORDER "Use wxBORDER_SUNKEN" #-}---- | Deprecated-wxRAISED_BORDER :: Int-wxRAISED_BORDER = 67108864--- DEPRECATED wxRAISED_BORDER "Use wxBORDER_RAISED" #-}---- | Deprecated-wxSTATIC_BORDER :: Int-wxSTATIC_BORDER = 16777216--- DEPRECATED wxSTATIC_BORDER "Use wxBORDER_STATIC" #-}--wxBORDER :: Int-wxBORDER = 33554432---- | This is different from wxBORDER_NONE as by default the controls do--- have border-wxBORDER_DEFAULT :: Int-wxBORDER_DEFAULT = 0---- | Displays no border, overriding the default border style for the--- window. wxNO_BORDER is the old name for this style.-wxBORDER_NONE :: Int-wxBORDER_NONE = 0x00200000---- | Displays a border suitable for a static control. wxSTATIC_BORDER is--- the old name for this style. Windows only.-wxBORDER_STATIC :: Int-wxBORDER_STATIC = 0x01000000---- | Displays a thin border around the window. wxSIMPLE_BORDER is the old--- name for this style.-wxBORDER_SIMPLE :: Int-wxBORDER_SIMPLE = 0x02000000---- | Displays a raised border. wxRAISED_BORDER is the old name for this style.-wxBORDER_RAISED :: Int-wxBORDER_RAISED = 0x04000000---- | Displays a sunken border. wxSUNKEN_BORDER is the old name for this style.-wxBORDER_SUNKEN :: Int-wxBORDER_SUNKEN = 0x08000000---- | Displays a themed border where possible. Currently this has an effect--- on Windows XP and above only. For more information on themed borders,--- please see Themed borders on Windows--- <http://docs.wxwidgets.org/2.8/wx_wxmswport.html#wxmswthemedborders>.-wxBORDER_THEME :: Int-wxBORDER_THEME = 0x10000000---- | A mask to extract border style from the combination of flags-wxBORDER_MASK :: Int-wxBORDER_MASK = 0x1f200000---wxTRANSPARENT_WINDOW :: Int-wxTRANSPARENT_WINDOW = 1048576--wxNO_BORDER :: Int-wxNO_BORDER = 2097152--wxUSER_COLOURS :: Int-wxUSER_COLOURS = 8388608--wxNO_3D :: Int-wxNO_3D = 8388608--wxCLIP_CHILDREN :: Int-wxCLIP_CHILDREN = 4194304--wxTAB_TRAVERSAL :: Int-wxTAB_TRAVERSAL = 524288--wxWANTS_CHARS :: Int-wxWANTS_CHARS = 262144--wxRETAINED :: Int-wxRETAINED = 131072--wxNO_FULL_REPAINT_ON_RESIZE :: Int-wxNO_FULL_REPAINT_ON_RESIZE = 65536--wxWS_EX_VALIDATE_RECURSIVELY :: Int-wxWS_EX_VALIDATE_RECURSIVELY = 1--wxSTAY_ON_TOP :: Int-wxSTAY_ON_TOP = 32768--wxICONIZE :: Int-wxICONIZE = 16384--wxMAXIMIZE :: Int-wxMAXIMIZE = 8192--wxSYSTEM_MENU :: Int-wxSYSTEM_MENU = 2048--wxMINIMIZE_BOX :: Int-wxMINIMIZE_BOX = 1024--wxMAXIMIZE_BOX :: Int-wxMAXIMIZE_BOX = 512--wxDEFAULT_FRAME_STYLE :: Int-wxDEFAULT_FRAME_STYLE = 536878656--wxTINY_CAPTION_HORIZ :: Int-wxTINY_CAPTION_HORIZ = 256--wxTINY_CAPTION_VERT :: Int-wxTINY_CAPTION_VERT = 128--wxRESIZE_BORDER :: Int-wxRESIZE_BORDER = 64--wxDIALOG_MODAL :: Int-wxDIALOG_MODAL = 32--wxDIALOG_MODELESS :: Int-wxDIALOG_MODELESS = 0--wxFRAME_FLOAT_ON_PARENT :: Int-wxFRAME_FLOAT_ON_PARENT = 8--wxFRAME_NO_WINDOW_MENU :: Int-wxFRAME_NO_WINDOW_MENU = 256--wxED_CLIENT_MARGIN :: Int-wxED_CLIENT_MARGIN = 4--wxED_BUTTONS_BOTTOM :: Int-wxED_BUTTONS_BOTTOM = 0--wxED_BUTTONS_RIGHT :: Int-wxED_BUTTONS_RIGHT = 2--wxED_STATIC_LINE :: Int-wxED_STATIC_LINE = 1--wxTB_3DBUTTONS :: Int-wxTB_3DBUTTONS = 16--wxTB_FLAT :: Int-wxTB_FLAT = 32--wxTB_DOCKABLE :: Int-wxTB_DOCKABLE = 64--wxMB_DOCKABLE :: Int-wxMB_DOCKABLE = 1--wxMENU_TEAROFF :: Int-wxMENU_TEAROFF = 1--wxCOLOURED :: Int-wxCOLOURED = 2048--wxFIXED_LENGTH :: Int-wxFIXED_LENGTH = 1024--wxLB_SORT :: Int-wxLB_SORT = 16--wxLB_SINGLE :: Int-wxLB_SINGLE = 32--wxLB_MULTIPLE :: Int-wxLB_MULTIPLE = 64--wxLB_EXTENDED :: Int-wxLB_EXTENDED = 128--wxLB_OWNERDRAW :: Int-wxLB_OWNERDRAW = 256--wxLB_NEEDED_SB :: Int-wxLB_NEEDED_SB = 512--wxLB_ALWAYS_SB :: Int-wxLB_ALWAYS_SB = 1024--wxTE_READONLY :: Int-wxTE_READONLY = 16--wxTE_MULTILINE :: Int-wxTE_MULTILINE = 32--wxTE_PROCESS_TAB :: Int-wxTE_PROCESS_TAB = 64--wxTE_RICH :: Int-wxTE_RICH = 128--wxTE_NO_VSCROLL :: Int-wxTE_NO_VSCROLL = 256--wxTE_AUTO_SCROLL :: Int-wxTE_AUTO_SCROLL = 512--wxPROCESS_ENTER :: Int-wxPROCESS_ENTER = 1024--wxPASSWORD :: Int-wxPASSWORD = 2048--wxCB_SIMPLE :: Int-wxCB_SIMPLE = 4--wxCB_SORT :: Int-wxCB_SORT = 8--wxCB_READONLY :: Int-wxCB_READONLY = 16--wxCB_DROPDOWN :: Int-wxCB_DROPDOWN = 32--wxRB_GROUP :: Int-wxRB_GROUP = 4--wxGA_PROGRESSBAR :: Int-wxGA_PROGRESSBAR = 16--wxGA_SMOOTH :: Int-wxGA_SMOOTH = 32--wxSL_NOTIFY_DRAG :: Int-wxSL_NOTIFY_DRAG = 0--wxSL_AUTOTICKS :: Int-wxSL_AUTOTICKS = 16--wxSL_LABELS :: Int-wxSL_LABELS = 32--wxSL_LEFT :: Int-wxSL_LEFT = 64--wxSL_TOP :: Int-wxSL_TOP = 128--wxSL_RIGHT :: Int-wxSL_RIGHT = 256--wxSL_BOTTOM :: Int-wxSL_BOTTOM = 512--wxSL_BOTH :: Int-wxSL_BOTH = 1024--wxSL_SELRANGE :: Int-wxSL_SELRANGE = 2048--wxBU_AUTODRAW :: Int-wxBU_AUTODRAW = 4--wxBU_NOAUTODRAW :: Int-wxBU_NOAUTODRAW = 0--wxBU_LEFT :: Int-wxBU_LEFT = 64--wxBU_TOP :: Int-wxBU_TOP = 128--wxBU_RIGHT :: Int-wxBU_RIGHT = 256--wxBU_BOTTOM :: Int-wxBU_BOTTOM = 512--wxLC_VRULES :: Int-wxLC_VRULES = 1--wxLC_HRULES :: Int-wxLC_HRULES = 2--wxLC_ICON :: Int-wxLC_ICON = 4--wxLC_SMALL_ICON :: Int-wxLC_SMALL_ICON = 8--wxLC_LIST :: Int-wxLC_LIST = 16--wxLC_REPORT :: Int-wxLC_REPORT = 32--wxLC_ALIGN_TOP :: Int-wxLC_ALIGN_TOP = 64--wxLC_ALIGN_LEFT :: Int-wxLC_ALIGN_LEFT = 128--wxLC_AUTOARRANGE :: Int-wxLC_AUTOARRANGE = 256--wxLC_VIRTUAL :: Int-wxLC_VIRTUAL = 512--wxLC_EDIT_LABELS :: Int-wxLC_EDIT_LABELS = 1024--wxLC_NO_HEADER :: Int-wxLC_NO_HEADER = 2048--wxLC_NO_SORT_HEADER :: Int-wxLC_NO_SORT_HEADER = 4096--wxLC_SINGLE_SEL :: Int-wxLC_SINGLE_SEL = 8192--wxLC_SORT_ASCENDING :: Int-wxLC_SORT_ASCENDING = 16384--wxLC_SORT_DESCENDING :: Int-wxLC_SORT_DESCENDING = 32768--wxLC_MASK_TYPE = wxLC_ICON .|. wxLC_SMALL_ICON .|. wxLC_LIST .|. wxLC_REPORT-wxLC_MASK_ALIGN = wxLC_ALIGN_TOP .|. wxLC_ALIGN_LEFT-wxLC_MASK_SORT = wxLC_SORT_ASCENDING .|. wxLC_SORT_DESCENDING--wxSP_ARROW_KEYS :: Int-wxSP_ARROW_KEYS = 4096--wxSP_WRAP :: Int-wxSP_WRAP = 8192--wxSP_NOBORDER :: Int-wxSP_NOBORDER = 0--wxSP_NOSASH :: Int-wxSP_NOSASH = 16--wxSP_BORDER :: Int-wxSP_BORDER = 32--wxSP_PERMIT_UNSPLIT :: Int-wxSP_PERMIT_UNSPLIT = 64--wxSP_LIVE_UPDATE :: Int-wxSP_LIVE_UPDATE = 128--wxSP_3DSASH :: Int-wxSP_3DSASH = 256--wxSP_3DBORDER :: Int-wxSP_3DBORDER = 512--wxSP_3D :: Int-wxSP_3D = 768--wxSP_FULLSASH :: Int-wxSP_FULLSASH = 1024--wxFRAME_TOOL_WINDOW :: Int-wxFRAME_TOOL_WINDOW = 4--wxTC_MULTILINE :: Int-wxTC_MULTILINE = 0--wxTC_RIGHTJUSTIFY :: Int-wxTC_RIGHTJUSTIFY = 16--wxTC_FIXEDWIDTH :: Int-wxTC_FIXEDWIDTH = 32--wxTC_OWNERDRAW :: Int-wxTC_OWNERDRAW = 64--wxNB_FIXEDWIDTH :: Int-wxNB_FIXEDWIDTH = 16--wxST_SIZEGRIP :: Int-wxST_SIZEGRIP = 16--wxST_NO_AUTORESIZE :: Int-wxST_NO_AUTORESIZE = 1--wxPD_CAN_ABORT :: Int-wxPD_CAN_ABORT = 1--wxPD_APP_MODAL :: Int-wxPD_APP_MODAL = 2--wxPD_AUTO_HIDE :: Int-wxPD_AUTO_HIDE = 4--wxPD_ELAPSED_TIME :: Int-wxPD_ELAPSED_TIME = 8--wxPD_ESTIMATED_TIME :: Int-wxPD_ESTIMATED_TIME = 16--wxPD_REMAINING_TIME :: Int-wxPD_REMAINING_TIME = 64--wxHW_SCROLLBAR_NEVER :: Int-wxHW_SCROLLBAR_NEVER = 2--wxHW_SCROLLBAR_AUTO :: Int-wxHW_SCROLLBAR_AUTO = 4--wxCAL_SUNDAY_FIRST :: Int-wxCAL_SUNDAY_FIRST = 0--wxCAL_MONDAY_FIRST :: Int-wxCAL_MONDAY_FIRST = 1--wxCAL_SHOW_HOLIDAYS :: Int-wxCAL_SHOW_HOLIDAYS = 2--wxCAL_NO_YEAR_CHANGE :: Int-wxCAL_NO_YEAR_CHANGE = 4--wxCAL_NO_MONTH_CHANGE :: Int-wxCAL_NO_MONTH_CHANGE = 12--wxICON_EXCLAMATION :: Int-wxICON_EXCLAMATION = 256--wxICON_HAND :: Int-wxICON_HAND = 512--wxICON_QUESTION :: Int-wxICON_QUESTION = 1024--wxICON_INFORMATION :: Int-wxICON_INFORMATION = 2048--wxFORWARD :: Int-wxFORWARD = 4096--wxBACKWARD :: Int-wxBACKWARD = 8192--wxRESET :: Int-wxRESET = 16384--wxHELP :: Int-wxHELP = 32768--wxMORE :: Int-wxMORE = 65536--wxSETUP :: Int-wxSETUP = 131072--wxID_LOWEST :: Int-wxID_LOWEST = 4999--wxID_OPEN :: Int-wxID_OPEN = 5000--wxID_CLOSE :: Int-wxID_CLOSE = 5001--wxID_NEW :: Int-wxID_NEW = 5002--wxID_SAVE :: Int-wxID_SAVE = 5003--wxID_SAVEAS :: Int-wxID_SAVEAS = 5004--wxID_REVERT :: Int-wxID_REVERT = 5005--wxID_EXIT :: Int-wxID_EXIT = 5006--wxID_UNDO :: Int-wxID_UNDO = 5007--wxID_REDO :: Int-wxID_REDO = 5008--wxID_HELP :: Int-wxID_HELP = 5009--wxID_PRINT :: Int-wxID_PRINT = 5010--wxID_PRINT_SETUP :: Int-wxID_PRINT_SETUP = 5011--wxID_PREVIEW :: Int-wxID_PREVIEW = 5012--wxID_ABOUT :: Int-wxID_ABOUT = 5013--wxID_HELP_CONTENTS :: Int-wxID_HELP_CONTENTS = 5014--wxID_HELP_COMMANDS :: Int-wxID_HELP_COMMANDS = 5015--wxID_HELP_PROCEDURES :: Int-wxID_HELP_PROCEDURES = 5016--wxID_HELP_CONTEXT :: Int-wxID_HELP_CONTEXT = 5017--wxPG_DEFAULT_STYLE :: Int-wxPG_DEFAULT_STYLE = 0--wxID_CLOSE_ALL :: Int-wxID_CLOSE_ALL = 5018--wxID_PREFERENCES :: Int-wxID_PREFERENCES = 5019--wxID_EDIT :: Int-wxID_EDIT = 5030--wxID_CUT :: Int-wxID_CUT = 5031--wxID_COPY :: Int-wxID_COPY = 5032--wxID_PASTE :: Int-wxID_PASTE = 5033--wxID_CLEAR :: Int-wxID_CLEAR = 5034--wxID_FIND :: Int-wxID_FIND = 5035--wxID_DUPLICATE :: Int-wxID_DUPLICATE = 5036--wxID_SELECTALL :: Int-wxID_SELECTALL = 5037--wxID_DELETE :: Int-wxID_DELETE = 5038--wxID_REPLACE :: Int-wxID_REPLACE = 5039--wxID_REPLACE_ALL :: Int-wxID_REPLACE_ALL = 5040--wxID_PROPERTIES :: Int-wxID_PROPERTIES = 5041--wxID_VIEW_DETAILS :: Int-wxID_VIEW_DETAILS = 5042--wxID_VIEW_LARGEICONS :: Int-wxID_VIEW_LARGEICONS = 5043--wxID_VIEW_SMALLICONS :: Int-wxID_VIEW_SMALLICONS = 5044--wxID_VIEW_LIST :: Int-wxID_VIEW_LIST = 5045--wxID_VIEW_SORTDATE :: Int-wxID_VIEW_SORTDATE = 5046--wxID_VIEW_SORTNAME :: Int-wxID_VIEW_SORTNAME = 5047--wxID_VIEW_SORTSIZE :: Int-wxID_VIEW_SORTSIZE = 5048--wxID_VIEW_SORTTYPE :: Int-wxID_VIEW_SORTTYPE = 5049--wxID_FILE1 :: Int-wxID_FILE1 = 5050--wxID_FILE2 :: Int-wxID_FILE2 = 5051--wxID_FILE3 :: Int-wxID_FILE3 = 5052--wxID_FILE4 :: Int-wxID_FILE4 = 5053--wxID_FILE5 :: Int-wxID_FILE5 = 5054--wxID_FILE6 :: Int-wxID_FILE6 = 5055--wxID_FILE7 :: Int-wxID_FILE7 = 5056--wxID_FILE8 :: Int-wxID_FILE8 = 5057--wxID_FILE9 :: Int-wxID_FILE9 = 5058--wxID_OK :: Int-wxID_OK = 5100--wxID_CANCEL :: Int-wxID_CANCEL = 5101--wxID_APPLY :: Int-wxID_APPLY = 5102--wxID_YES :: Int-wxID_YES = 5103--wxID_NO :: Int-wxID_NO = 5104--wxID_STATIC :: Int-wxID_STATIC = 5105--wxID_FORWARD :: Int-wxID_FORWARD = 5106--wxID_BACKWARD :: Int-wxID_BACKWARD = 5107--wxID_DEFAULT :: Int-wxID_DEFAULT = 5108--wxID_MORE :: Int-wxID_MORE = 5109--wxID_SETUP :: Int-wxID_SETUP = 5110--wxID_RESET :: Int-wxID_RESET = 5111--wxID_FILEDLGG :: Int-wxID_FILEDLGG = 5900--wxID_HIGHEST :: Int-wxID_HIGHEST = 5999--wxSIZE_AUTO_WIDTH :: Int-wxSIZE_AUTO_WIDTH = 1--wxSIZE_AUTO_HEIGHT :: Int-wxSIZE_AUTO_HEIGHT = 2--wxSIZE_USE_EXISTING :: Int-wxSIZE_USE_EXISTING = 0--wxSIZE_ALLOW_MINUS_ONE :: Int-wxSIZE_ALLOW_MINUS_ONE = 4--wxSIZE_NO_ADJUSTMENTS :: Int-wxSIZE_NO_ADJUSTMENTS = 8--wxSOLID :: Int-wxSOLID = 100--wxDOT :: Int-wxDOT = 101--wxLONG_DASH :: Int-wxLONG_DASH = 102--wxSHORT_DASH :: Int-wxSHORT_DASH = 103--wxDOT_DASH :: Int-wxDOT_DASH = 104--wxUSER_DASH :: Int-wxUSER_DASH = 105--wxTRANSPARENT :: Int-wxTRANSPARENT = 106--wxSTIPPLE_MASK_OPAQUE :: Int-wxSTIPPLE_MASK_OPAQUE = 107--wxSTIPPLE_MASK :: Int-wxSTIPPLE_MASK = 108--wxSTIPPLE :: Int-wxSTIPPLE = 110--wxBDIAGONAL_HATCH :: Int-wxBDIAGONAL_HATCH = 111--wxCROSSDIAG_HATCH :: Int-wxCROSSDIAG_HATCH = 112--wxFDIAGONAL_HATCH :: Int-wxFDIAGONAL_HATCH = 113--wxCROSS_HATCH :: Int-wxCROSS_HATCH = 114--wxHORIZONTAL_HATCH :: Int-wxHORIZONTAL_HATCH = 115--wxVERTICAL_HATCH :: Int-wxVERTICAL_HATCH = 116--wxJOIN_BEVEL :: Int-wxJOIN_BEVEL = 120--wxJOIN_MITER :: Int-wxJOIN_MITER = 121--wxJOIN_ROUND :: Int-wxJOIN_ROUND = 122--wxCAP_ROUND :: Int-wxCAP_ROUND = 130--wxCAP_PROJECTING :: Int-wxCAP_PROJECTING = 131--wxCAP_BUTT :: Int-wxCAP_BUTT = 132--wxCLEAR :: Int-wxCLEAR = 0--wxXOR :: Int-wxXOR = 1--wxINVERT :: Int-wxINVERT = 2--wxOR_REVERSE :: Int-wxOR_REVERSE = 3--wxAND_REVERSE :: Int-wxAND_REVERSE = 4--wxCOPY :: Int-wxCOPY = 5--wxAND :: Int-wxAND = 6--wxAND_INVERT :: Int-wxAND_INVERT = 7--wxNO_OP :: Int-wxNO_OP = 8--wxNOR :: Int-wxNOR = 9--wxEQUIV :: Int-wxEQUIV = 10--wxSRC_INVERT :: Int-wxSRC_INVERT = 11--wxOR_INVERT :: Int-wxOR_INVERT = 12--wxNAND :: Int-wxNAND = 13--wxOR :: Int-wxOR = 14--wxSET :: Int-wxSET = 15--wxFLOOD_SURFACE :: Int-wxFLOOD_SURFACE = 1--wxFLOOD_BORDER :: Int-wxFLOOD_BORDER = 2--wxODDEVEN_RULE :: Int-wxODDEVEN_RULE = 1--wxWINDING_RULE :: Int-wxWINDING_RULE = 2--wxTOOL_TOP :: Int-wxTOOL_TOP = 1--wxTOOL_BOTTOM :: Int-wxTOOL_BOTTOM = 2--wxTOOL_LEFT :: Int-wxTOOL_LEFT = 3--wxTOOL_RIGHT :: Int-wxTOOL_RIGHT = 4--wxDF_INVALID :: Int-wxDF_INVALID = 1--wxDF_TEXT :: Int-wxDF_TEXT = 2--wxDF_BITMAP :: Int-wxDF_BITMAP = 3--wxDF_METAFILE :: Int-wxDF_METAFILE = 4--wxDF_SYLK :: Int-wxDF_SYLK = 5--wxDF_DIF :: Int-wxDF_DIF = 6--wxDF_TIFF :: Int-wxDF_TIFF = 7--wxDF_OEMTEXT :: Int-wxDF_OEMTEXT = 8--wxDF_DIB :: Int-wxDF_DIB = 9--wxDF_PALETTE :: Int-wxDF_PALETTE = 10--wxDF_PENDATA :: Int-wxDF_PENDATA = 11--wxDF_RIFF :: Int-wxDF_RIFF = 12--wxDF_WAVE :: Int-wxDF_WAVE = 13--wxDF_UNICODETEXT :: Int-wxDF_UNICODETEXT = 14--wxDF_ENHMETAFILE :: Int-wxDF_ENHMETAFILE = 15--wxDF_FILENAME :: Int-wxDF_FILENAME = 16--wxDF_LOCALE :: Int-wxDF_LOCALE = 17--wxDF_PRIVATE :: Int-wxDF_PRIVATE = 18--wxDF_MAX :: Int-wxDF_MAX = 19--wxMM_TEXT :: Int-wxMM_TEXT = 1--wxMM_LOMETRIC :: Int-wxMM_LOMETRIC = 2--wxMM_HIMETRIC :: Int-wxMM_HIMETRIC = 3--wxMM_LOENGLISH :: Int-wxMM_LOENGLISH = 4--wxMM_HIENGLISH :: Int-wxMM_HIENGLISH = 5--wxMM_TWIPS :: Int-wxMM_TWIPS = 6--wxMM_ISOTROPIC :: Int-wxMM_ISOTROPIC = 7--wxMM_ANISOTROPIC :: Int-wxMM_ANISOTROPIC = 8--wxMM_POINTS :: Int-wxMM_POINTS = 9--wxMM_METRIC :: Int-wxMM_METRIC = 10--wxPAPER_NONE :: Int-wxPAPER_NONE = 0--wxPAPER_LETTER :: Int-wxPAPER_LETTER = 1--wxPAPER_LEGAL :: Int-wxPAPER_LEGAL = 2--wxPAPER_A4 :: Int-wxPAPER_A4 = 3--wxPAPER_CSHEET :: Int-wxPAPER_CSHEET = 4--wxPAPER_DSHEET :: Int-wxPAPER_DSHEET = 5--wxPAPER_ESHEET :: Int-wxPAPER_ESHEET = 6--wxPAPER_LETTERSMALL :: Int-wxPAPER_LETTERSMALL = 7--wxPAPER_TABLOID :: Int-wxPAPER_TABLOID = 8--wxPAPER_LEDGER :: Int-wxPAPER_LEDGER = 9--wxPAPER_STATEMENT :: Int-wxPAPER_STATEMENT = 10--wxPAPER_EXECUTIVE :: Int-wxPAPER_EXECUTIVE = 11--wxPAPER_A3 :: Int-wxPAPER_A3 = 12--wxPAPER_A4SMALL :: Int-wxPAPER_A4SMALL = 13--wxPAPER_A5 :: Int-wxPAPER_A5 = 14--wxPAPER_B4 :: Int-wxPAPER_B4 = 15--wxPAPER_B5 :: Int-wxPAPER_B5 = 16--wxPAPER_FOLIO :: Int-wxPAPER_FOLIO = 17--wxPAPER_QUARTO :: Int-wxPAPER_QUARTO = 18--wxPAPER_10X14 :: Int-wxPAPER_10X14 = 19--wxPAPER_11X17 :: Int-wxPAPER_11X17 = 20--wxPAPER_NOTE :: Int-wxPAPER_NOTE = 21--wxPAPER_ENV_9 :: Int-wxPAPER_ENV_9 = 22--wxPAPER_ENV_10 :: Int-wxPAPER_ENV_10 = 23--wxPAPER_ENV_11 :: Int-wxPAPER_ENV_11 = 24--wxPAPER_ENV_12 :: Int-wxPAPER_ENV_12 = 25--wxPAPER_ENV_14 :: Int-wxPAPER_ENV_14 = 26--wxPAPER_ENV_DL :: Int-wxPAPER_ENV_DL = 27--wxPAPER_ENV_C5 :: Int-wxPAPER_ENV_C5 = 28--wxPAPER_ENV_C3 :: Int-wxPAPER_ENV_C3 = 29--wxPAPER_ENV_C4 :: Int-wxPAPER_ENV_C4 = 30--wxPAPER_ENV_C6 :: Int-wxPAPER_ENV_C6 = 31--wxPAPER_ENV_C65 :: Int-wxPAPER_ENV_C65 = 32--wxPAPER_ENV_B4 :: Int-wxPAPER_ENV_B4 = 33--wxPAPER_ENV_B5 :: Int-wxPAPER_ENV_B5 = 34--wxPAPER_ENV_B6 :: Int-wxPAPER_ENV_B6 = 35--wxPAPER_ENV_ITALY :: Int-wxPAPER_ENV_ITALY = 36--wxPAPER_ENV_MONARCH :: Int-wxPAPER_ENV_MONARCH = 37--wxPAPER_ENV_PERSONAL :: Int-wxPAPER_ENV_PERSONAL = 38--wxPAPER_FANFOLD_US :: Int-wxPAPER_FANFOLD_US = 39--wxPAPER_FANFOLD_STD_GERMAN :: Int-wxPAPER_FANFOLD_STD_GERMAN = 40--wxPAPER_FANFOLD_LGL_GERMAN :: Int-wxPAPER_FANFOLD_LGL_GERMAN = 41--wxPAPER_ISO_B4 :: Int-wxPAPER_ISO_B4 = 42--wxPAPER_JAPANESE_POSTCARD :: Int-wxPAPER_JAPANESE_POSTCARD = 43--wxPAPER_9X11 :: Int-wxPAPER_9X11 = 44--wxPAPER_10X11 :: Int-wxPAPER_10X11 = 45--wxPAPER_15X11 :: Int-wxPAPER_15X11 = 46--wxPAPER_ENV_INVITE :: Int-wxPAPER_ENV_INVITE = 47--wxPAPER_LETTER_EXTRA :: Int-wxPAPER_LETTER_EXTRA = 48--wxPAPER_LEGAL_EXTRA :: Int-wxPAPER_LEGAL_EXTRA = 49--wxPAPER_TABLOID_EXTRA :: Int-wxPAPER_TABLOID_EXTRA = 50--wxPAPER_A4_EXTRA :: Int-wxPAPER_A4_EXTRA = 51--wxPAPER_LETTER_TRANSVERSE :: Int-wxPAPER_LETTER_TRANSVERSE = 52--wxPAPER_A4_TRANSVERSE :: Int-wxPAPER_A4_TRANSVERSE = 53--wxPAPER_LETTER_EXTRA_TRANSVERSE :: Int-wxPAPER_LETTER_EXTRA_TRANSVERSE = 54--wxPAPER_A_PLUS :: Int-wxPAPER_A_PLUS = 55--wxPAPER_B_PLUS :: Int-wxPAPER_B_PLUS = 56--wxPAPER_LETTER_PLUS :: Int-wxPAPER_LETTER_PLUS = 57--wxPAPER_A4_PLUS :: Int-wxPAPER_A4_PLUS = 58--wxPAPER_A5_TRANSVERSE :: Int-wxPAPER_A5_TRANSVERSE = 59--wxPAPER_B5_TRANSVERSE :: Int-wxPAPER_B5_TRANSVERSE = 60--wxPAPER_A3_EXTRA :: Int-wxPAPER_A3_EXTRA = 61--wxPAPER_A5_EXTRA :: Int-wxPAPER_A5_EXTRA = 62--wxPAPER_B5_EXTRA :: Int-wxPAPER_B5_EXTRA = 63--wxPAPER_A2 :: Int-wxPAPER_A2 = 64--wxPAPER_A3_TRANSVERSE :: Int-wxPAPER_A3_TRANSVERSE = 65--wxPAPER_A3_EXTRA_TRANSVERSE :: Int-wxPAPER_A3_EXTRA_TRANSVERSE = 66--wxPORTRAIT :: Int-wxPORTRAIT = 1--wxLANDSCAPE :: Int-wxLANDSCAPE = 2--wxDUPLEX_SIMPLEX :: Int-wxDUPLEX_SIMPLEX = 0--wxDUPLEX_HORIZONTAL :: Int-wxDUPLEX_HORIZONTAL = 1--wxDUPLEX_VERTICAL :: Int-wxDUPLEX_VERTICAL = 2--wxPRINT_MODE_NONE :: Int-wxPRINT_MODE_NONE = 0--wxPRINT_MODE_PREVIEW :: Int-wxPRINT_MODE_PREVIEW = 1--wxPRINT_MODE_FILE :: Int-wxPRINT_MODE_FILE = 2--wxPRINT_MODE_PRINTER :: Int-wxPRINT_MODE_PRINTER = 3--wxFULLSCREEN_NOMENUBAR :: Int-wxFULLSCREEN_NOMENUBAR = 1--wxFULLSCREEN_NOTOOLBAR :: Int-wxFULLSCREEN_NOTOOLBAR = 2--wxFULLSCREEN_NOSTATUSBAR :: Int-wxFULLSCREEN_NOSTATUSBAR = 4--wxFULLSCREEN_NOBORDER :: Int-wxFULLSCREEN_NOBORDER = 8--wxFULLSCREEN_NOCAPTION :: Int-wxFULLSCREEN_NOCAPTION = 16--wxLAYOUT_DEFAULT_MARGIN :: Int-wxLAYOUT_DEFAULT_MARGIN = 0--wxEDGE_LEFT :: Int-wxEDGE_LEFT = 0--wxEDGE_TOP :: Int-wxEDGE_TOP = 1--wxEDGE_RIGHT :: Int-wxEDGE_RIGHT = 2--wxEDGE_BOTTOM :: Int-wxEDGE_BOTTOM = 3--wxEDGE_WIDTH :: Int-wxEDGE_WIDTH = 4--wxEDGE_HEIGHT :: Int-wxEDGE_HEIGHT = 5--wxEDGE_CENTER :: Int-wxEDGE_CENTER = 6--wxEDGE_CENTREX :: Int-wxEDGE_CENTREX = 7--wxEDGE_CENTREY :: Int-wxEDGE_CENTREY = 8--wxRELATIONSHIP_UNCONSTRAINED :: Int-wxRELATIONSHIP_UNCONSTRAINED = 0--wxRELATIONSHIP_ASIS :: Int-wxRELATIONSHIP_ASIS = 1--wxRELATIONSHIP_PERCENTOF :: Int-wxRELATIONSHIP_PERCENTOF = 2--wxRELATIONSHIP_ABOVE :: Int-wxRELATIONSHIP_ABOVE = 3--wxRELATIONSHIP_BELOW :: Int-wxRELATIONSHIP_BELOW = 4--wxRELATIONSHIP_LEFTOF :: Int-wxRELATIONSHIP_LEFTOF = 5--wxRELATIONSHIP_RIGHTOF :: Int-wxRELATIONSHIP_RIGHTOF = 6--wxRELATIONSHIP_SAMEAS :: Int-wxRELATIONSHIP_SAMEAS = 7--wxRELATIONSHIP_ABSOLUTE :: Int-wxRELATIONSHIP_ABSOLUTE = 8--wxFONTENCODING_SYSTEM :: Int-wxFONTENCODING_SYSTEM = (-1)--wxFONTENCODING_DEFAULT :: Int-wxFONTENCODING_DEFAULT = 0--wxFONTENCODING_ISO8859_1 :: Int-wxFONTENCODING_ISO8859_1 = 1--wxFONTENCODING_ISO8859_2 :: Int-wxFONTENCODING_ISO8859_2 = 2--wxFONTENCODING_ISO8859_3 :: Int-wxFONTENCODING_ISO8859_3 = 3--wxFONTENCODING_ISO8859_4 :: Int-wxFONTENCODING_ISO8859_4 = 4--wxFONTENCODING_ISO8859_5 :: Int-wxFONTENCODING_ISO8859_5 = 5--wxFONTENCODING_ISO8859_6 :: Int-wxFONTENCODING_ISO8859_6 = 6--wxFONTENCODING_ISO8859_7 :: Int-wxFONTENCODING_ISO8859_7 = 7--wxFONTENCODING_ISO8859_8 :: Int-wxFONTENCODING_ISO8859_8 = 8--wxFONTENCODING_ISO8859_9 :: Int-wxFONTENCODING_ISO8859_9 = 9--wxFONTENCODING_ISO8859_10 :: Int-wxFONTENCODING_ISO8859_10 = 10--wxFONTENCODING_ISO8859_11 :: Int-wxFONTENCODING_ISO8859_11 = 11--wxFONTENCODING_ISO8859_12 :: Int-wxFONTENCODING_ISO8859_12 = 12--wxFONTENCODING_ISO8859_13 :: Int-wxFONTENCODING_ISO8859_13 = 13--wxFONTENCODING_ISO8859_14 :: Int-wxFONTENCODING_ISO8859_14 = 14--wxFONTENCODING_ISO8859_15 :: Int-wxFONTENCODING_ISO8859_15 = 15--wxFONTENCODING_ISO8859_MAX :: Int-wxFONTENCODING_ISO8859_MAX = 16--wxFONTENCODING_KOI8 :: Int-wxFONTENCODING_KOI8 = 17--wxFONTENCODING_ALTERNATIVE :: Int-wxFONTENCODING_ALTERNATIVE = 18--wxFONTENCODING_BULGARIAN :: Int-wxFONTENCODING_BULGARIAN = 19--wxFONTENCODING_CP437 :: Int-wxFONTENCODING_CP437 = 20--wxFONTENCODING_CP850 :: Int-wxFONTENCODING_CP850 = 21--wxFONTENCODING_CP852 :: Int-wxFONTENCODING_CP852 = 22--wxFONTENCODING_CP855 :: Int-wxFONTENCODING_CP855 = 23--wxFONTENCODING_CP866 :: Int-wxFONTENCODING_CP866 = 24--wxFONTENCODING_CP874 :: Int-wxFONTENCODING_CP874 = 25--wxFONTENCODING_CP1250 :: Int-wxFONTENCODING_CP1250 = 26--wxFONTENCODING_CP1251 :: Int-wxFONTENCODING_CP1251 = 27--wxFONTENCODING_CP1252 :: Int-wxFONTENCODING_CP1252 = 28--wxFONTENCODING_CP1253 :: Int-wxFONTENCODING_CP1253 = 29--wxFONTENCODING_CP1254 :: Int-wxFONTENCODING_CP1254 = 30--wxFONTENCODING_CP1255 :: Int-wxFONTENCODING_CP1255 = 31--wxFONTENCODING_CP1256 :: Int-wxFONTENCODING_CP1256 = 32--wxFONTENCODING_CP1257 :: Int-wxFONTENCODING_CP1257 = 33--wxFONTENCODING_CP12_MAX :: Int-wxFONTENCODING_CP12_MAX = 34--wxFONTENCODING_UNICODE :: Int-wxFONTENCODING_UNICODE = 35--wxFONTENCODING_MAX :: Int-wxFONTENCODING_MAX = 36--wxGRIDTABLE_REQUEST_VIEW_GET_VALUES :: Int-wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000--wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES :: Int-wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES = 2001--wxGRIDTABLE_NOTIFY_ROWS_INSERTED :: Int-wxGRIDTABLE_NOTIFY_ROWS_INSERTED = 2002--wxGRIDTABLE_NOTIFY_ROWS_APPENDED :: Int-wxGRIDTABLE_NOTIFY_ROWS_APPENDED = 2003--wxGRIDTABLE_NOTIFY_ROWS_DELETED :: Int-wxGRIDTABLE_NOTIFY_ROWS_DELETED = 2004--wxGRIDTABLE_NOTIFY_COLS_INSERTED :: Int-wxGRIDTABLE_NOTIFY_COLS_INSERTED = 2005--wxGRIDTABLE_NOTIFY_COLS_APPENDED :: Int-wxGRIDTABLE_NOTIFY_COLS_APPENDED = 2006--wxGRIDTABLE_NOTIFY_COLS_DELETED :: Int-wxGRIDTABLE_NOTIFY_COLS_DELETED = 2007--wxGridSelectCells :: Int-wxGridSelectCells = 0--wxGridSelectRows :: Int-wxGridSelectRows = 1--wxGridSelectColumns :: Int-wxGridSelectColumns = 2--wxFILTER_NONE :: Int-wxFILTER_NONE = 0--wxFILTER_ASCII :: Int-wxFILTER_ASCII = 1--wxFILTER_ALPHA :: Int-wxFILTER_ALPHA = 2--wxFILTER_ALPHANUMERIC :: Int-wxFILTER_ALPHANUMERIC = 4--wxFILTER_NUMERIC :: Int-wxFILTER_NUMERIC = 8--wxFILTER_INCLUDE_LIST :: Int-wxFILTER_INCLUDE_LIST = 16--wxFILTER_EXCLUDE_LIST :: Int-wxFILTER_EXCLUDE_LIST = 32--wxFILTER_UPPER_CASE :: Int-wxFILTER_UPPER_CASE = 64--wxFILTER_LOWER_CASE :: Int-wxFILTER_LOWER_CASE = 128--wxBITMAP_TYPE_INVALID :: Int-wxBITMAP_TYPE_INVALID = 0--wxBITMAP_TYPE_BMP :: Int-wxBITMAP_TYPE_BMP = 1--wxBITMAP_TYPE_BMP_RESOURCE :: Int-wxBITMAP_TYPE_BMP_RESOURCE = 2--wxBITMAP_TYPE_RESOURCE :: Int-wxBITMAP_TYPE_RESOURCE = 2--wxBITMAP_TYPE_ICO :: Int-wxBITMAP_TYPE_ICO = 3--wxBITMAP_TYPE_ICO_RESOURCE :: Int-wxBITMAP_TYPE_ICO_RESOURCE = 4--wxBITMAP_TYPE_CUR :: Int-wxBITMAP_TYPE_CUR = 5--wxBITMAP_TYPE_CUR_RESOURCE :: Int-wxBITMAP_TYPE_CUR_RESOURCE = 6--wxBITMAP_TYPE_XBM :: Int-wxBITMAP_TYPE_XBM = 7--wxBITMAP_TYPE_XBM_DATA :: Int-wxBITMAP_TYPE_XBM_DATA = 8--wxBITMAP_TYPE_XPM :: Int-wxBITMAP_TYPE_XPM = 9--wxBITMAP_TYPE_XPM_DATA :: Int-wxBITMAP_TYPE_XPM_DATA = 10--wxBITMAP_TYPE_TIF :: Int-wxBITMAP_TYPE_TIF = 11--wxBITMAP_TYPE_TIF_RESOURCE :: Int-wxBITMAP_TYPE_TIF_RESOURCE = 12--wxBITMAP_TYPE_GIF :: Int-wxBITMAP_TYPE_GIF = 13--wxBITMAP_TYPE_GIF_RESOURCE :: Int-wxBITMAP_TYPE_GIF_RESOURCE = 14--wxBITMAP_TYPE_PNG :: Int-wxBITMAP_TYPE_PNG = 15--wxBITMAP_TYPE_PNG_RESOURCE :: Int-wxBITMAP_TYPE_PNG_RESOURCE = 16--wxBITMAP_TYPE_JPEG :: Int-wxBITMAP_TYPE_JPEG = 17--wxBITMAP_TYPE_JPEG_RESOURCE :: Int-wxBITMAP_TYPE_JPEG_RESOURCE = 18--wxBITMAP_TYPE_PNM :: Int-wxBITMAP_TYPE_PNM = 19--wxBITMAP_TYPE_PNM_RESOURCE :: Int-wxBITMAP_TYPE_PNM_RESOURCE = 20--wxBITMAP_TYPE_PCX :: Int-wxBITMAP_TYPE_PCX = 21--wxBITMAP_TYPE_PCX_RESOURCE :: Int-wxBITMAP_TYPE_PCX_RESOURCE = 22--wxBITMAP_TYPE_PICT :: Int-wxBITMAP_TYPE_PICT = 23--wxBITMAP_TYPE_PICT_RESOURCE :: Int-wxBITMAP_TYPE_PICT_RESOURCE = 24--wxBITMAP_TYPE_ICON :: Int-wxBITMAP_TYPE_ICON = 25--wxBITMAP_TYPE_ICON_RESOURCE :: Int-wxBITMAP_TYPE_ICON_RESOURCE = 26--wxBITMAP_TYPE_MACCURSOR :: Int-wxBITMAP_TYPE_MACCURSOR = 27--wxBITMAP_TYPE_MACCURSOR_RESOURCE :: Int-wxBITMAP_TYPE_MACCURSOR_RESOURCE = 28--wxBITMAP_TYPE_ANY :: Int-wxBITMAP_TYPE_ANY = 50--wxCURSOR_NONE :: Int-wxCURSOR_NONE = 0--wxCURSOR_ARROW :: Int-wxCURSOR_ARROW = 1--wxCURSOR_RIGHT_ARROW :: Int-wxCURSOR_RIGHT_ARROW = 2--wxCURSOR_BULLSEYE :: Int-wxCURSOR_BULLSEYE = 3--wxCURSOR_CHAR :: Int-wxCURSOR_CHAR = 4--wxCURSOR_CROSS :: Int-wxCURSOR_CROSS = 5--wxCURSOR_HAND :: Int-wxCURSOR_HAND = 6--wxCURSOR_IBEAM :: Int-wxCURSOR_IBEAM = 7--wxCURSOR_LEFT_BUTTON :: Int-wxCURSOR_LEFT_BUTTON = 8--wxCURSOR_MAGNIFIER :: Int-wxCURSOR_MAGNIFIER = 9--wxCURSOR_MIDDLE_BUTTON :: Int-wxCURSOR_MIDDLE_BUTTON = 10--wxCURSOR_NO_ENTRY :: Int-wxCURSOR_NO_ENTRY = 11--wxCURSOR_PAINT_BRUSH :: Int-wxCURSOR_PAINT_BRUSH = 12--wxCURSOR_PENCIL :: Int-wxCURSOR_PENCIL = 13--wxCURSOR_POINT_LEFT :: Int-wxCURSOR_POINT_LEFT = 14--wxCURSOR_POINT_RIGHT :: Int-wxCURSOR_POINT_RIGHT = 15--wxCURSOR_QUESTION_ARROW :: Int-wxCURSOR_QUESTION_ARROW = 16--wxCURSOR_RIGHT_BUTTON :: Int-wxCURSOR_RIGHT_BUTTON = 17--wxCURSOR_SIZENESW :: Int-wxCURSOR_SIZENESW = 18--wxCURSOR_SIZENS :: Int-wxCURSOR_SIZENS = 19--wxCURSOR_SIZENWSE :: Int-wxCURSOR_SIZENWSE = 20--wxCURSOR_SIZEWE :: Int-wxCURSOR_SIZEWE = 21--wxCURSOR_SIZING :: Int-wxCURSOR_SIZING = 22--wxCURSOR_SPRAYCAN :: Int-wxCURSOR_SPRAYCAN = 23--wxCURSOR_WAIT :: Int-wxCURSOR_WAIT = 24--wxCURSOR_WATCH :: Int-wxCURSOR_WATCH = 25--wxCURSOR_BLANK :: Int-wxCURSOR_BLANK = 26--wxOPEN :: Int-wxOPEN = 1--wxSAVE :: Int-wxSAVE = 2--wxOVERWRITE_PROMPT :: Int-wxOVERWRITE_PROMPT = 4--wxHIDE_READONLY :: Int-wxHIDE_READONLY = 8--wxFILE_MUST_EXIST :: Int-wxFILE_MUST_EXIST = 16--wxMULTIPLE :: Int-wxMULTIPLE = 32--wxCHANGE_DIR :: Int-wxCHANGE_DIR = 64--wxDRAG_ERROR :: Int-wxDRAG_ERROR = 0--wxDRAG_NONE :: Int-wxDRAG_NONE = 1--wxDRAG_COPY :: Int-wxDRAG_COPY = 2--wxDRAG_MOVE :: Int-wxDRAG_MOVE = 3--wxDRAG_LINK :: Int-wxDRAG_LINK = 4--wxDRAG_CANCEL :: Int-wxDRAG_CANCEL = 5--wxSPLIT_HORIZONTAL :: Int-wxSPLIT_HORIZONTAL = 1--wxSPLIT_VERTICAL :: Int-wxSPLIT_VERTICAL = 2--wxLIST_FORMAT_LEFT :: Int-wxLIST_FORMAT_LEFT = 0--wxLIST_FORMAT_RIGHT :: Int-wxLIST_FORMAT_RIGHT = 1--wxLIST_FORMAT_CENTRE :: Int-wxLIST_FORMAT_CENTRE = 2--wxLIST_FORMAT_CENTER :: Int-wxLIST_FORMAT_CENTER = 2--wxLIST_STATE_DONTCARE :: Int-wxLIST_STATE_DONTCARE = 0--wxLIST_STATE_DROPHILITED :: Int-wxLIST_STATE_DROPHILITED = 1--wxLIST_STATE_FOCUSED :: Int-wxLIST_STATE_FOCUSED = 2--wxLIST_STATE_SELECTED :: Int-wxLIST_STATE_SELECTED = 4--wxLIST_STATE_CUT :: Int-wxLIST_STATE_CUT = 8--wxLIST_MASK_STATE :: Int-wxLIST_MASK_STATE = 1--wxLIST_MASK_TEXT :: Int-wxLIST_MASK_TEXT = 2--wxLIST_MASK_IMAGE :: Int-wxLIST_MASK_IMAGE = 4--wxLIST_MASK_DATA :: Int-wxLIST_MASK_DATA = 8--wxLIST_MASK_WIDTH :: Int-wxLIST_MASK_WIDTH = 16--wxLIST_MASK_FORMAT :: Int-wxLIST_MASK_FORMAT = 32--wxLIST_NEXT_ABOVE :: Int-wxLIST_NEXT_ABOVE = 0--wxLIST_NEXT_ALL :: Int-wxLIST_NEXT_ALL = 1--wxLIST_NEXT_BELOW :: Int-wxLIST_NEXT_BELOW = 2--wxLIST_NEXT_LEFT :: Int-wxLIST_NEXT_LEFT = 3--wxLIST_NEXT_RIGHT :: Int-wxLIST_NEXT_RIGHT = 4--wxRA_SPECIFY_COLS :: Int-wxRA_SPECIFY_COLS = 4--wxRA_SPECIFY_ROWS :: Int-wxRA_SPECIFY_ROWS = 8--wxTREE_HITTEST_ABOVE :: Int-wxTREE_HITTEST_ABOVE = 1--wxTREE_HITTEST_BELOW :: Int-wxTREE_HITTEST_BELOW = 2--wxTREE_HITTEST_NOWHERE :: Int-wxTREE_HITTEST_NOWHERE = 4--wxTREE_HITTEST_ONITEMBUTTON :: Int-wxTREE_HITTEST_ONITEMBUTTON = 8--wxTREE_HITTEST_ONITEMICON :: Int-wxTREE_HITTEST_ONITEMICON = 16--wxTREE_HITTEST_ONITEMINDENT :: Int-wxTREE_HITTEST_ONITEMINDENT = 32--wxTREE_HITTEST_ONITEMLABEL :: Int-wxTREE_HITTEST_ONITEMLABEL = 64--wxTREE_HITTEST_ONITEMRIGHT :: Int-wxTREE_HITTEST_ONITEMRIGHT = 128--wxTREE_HITTEST_ONITEMSTATEICON :: Int-wxTREE_HITTEST_ONITEMSTATEICON = 256--wxTREE_HITTEST_TOLEFT :: Int-wxTREE_HITTEST_TOLEFT = 512--wxTREE_HITTEST_TORIGHT :: Int-wxTREE_HITTEST_TORIGHT = 1024--wxTREE_HITTEST_ONITEMUPPERPART :: Int-wxTREE_HITTEST_ONITEMUPPERPART = 2048--wxTREE_HITTEST_ONITEMLOWERPART :: Int-wxTREE_HITTEST_ONITEMLOWERPART = 4096--wxTREE_HITTEST_ONITEM :: Int-wxTREE_HITTEST_ONITEM = 80--wxDEFAULT :: Int-wxDEFAULT = 70--wxDECORATIVE :: Int-wxDECORATIVE = 71--wxROMAN :: Int-wxROMAN = 72--wxSCRIPT :: Int-wxSCRIPT = 73--wxSWISS :: Int-wxSWISS = 74--wxMODERN :: Int-wxMODERN = 75--wxTELETYPE :: Int-wxTELETYPE = 76--wxVARIABLE :: Int-wxVARIABLE = 80--wxFIXED :: Int-wxFIXED = 81--wxNORMAL :: Int-wxNORMAL = 90--wxLIGHT :: Int-wxLIGHT = 91--wxBOLD :: Int-wxBOLD = 92--wxITALIC :: Int-wxITALIC = 93--wxSLANT :: Int-wxSLANT = 94--wxBLUE_BRUSH :: Int-wxBLUE_BRUSH = 0--wxGREEN_BRUSH :: Int-wxGREEN_BRUSH = 1--wxWHITE_BRUSH :: Int-wxWHITE_BRUSH = 2--wxBLACK_BRUSH :: Int-wxBLACK_BRUSH = 3--wxGREY_BRUSH :: Int-wxGREY_BRUSH = 4--wxMEDIUM_GREY_BRUSH :: Int-wxMEDIUM_GREY_BRUSH = 5--wxLIGHT_GREY_BRUSH :: Int-wxLIGHT_GREY_BRUSH = 6--wxTRANSPARENT_BRUSH :: Int-wxTRANSPARENT_BRUSH = 7--wxCYAN_BRUSH :: Int-wxCYAN_BRUSH = 8--wxRED_BRUSH :: Int-wxRED_BRUSH = 9--wxBLACK :: Int-wxBLACK = 0--wxWHITE :: Int-wxWHITE = 1--wxRED :: Int-wxRED = 2--wxBLUE :: Int-wxBLUE = 3--wxGREEN :: Int-wxGREEN = 4--wxCYAN :: Int-wxCYAN = 5--wxLIGHT_GREY :: Int-wxLIGHT_GREY = 6--wxRED_PEN :: Int-wxRED_PEN = 0--wxCYAN_PEN :: Int-wxCYAN_PEN = 1--wxGREEN_PEN :: Int-wxGREEN_PEN = 2--wxBLACK_PEN :: Int-wxBLACK_PEN = 3--wxWHITE_PEN :: Int-wxWHITE_PEN = 4--wxTRANSPARENT_PEN :: Int-wxTRANSPARENT_PEN = 5--wxBLACK_DASHED_PEN :: Int-wxBLACK_DASHED_PEN = 6--wxGREY_PEN :: Int-wxGREY_PEN = 7--wxMEDIUM_GREY_PEN :: Int-wxMEDIUM_GREY_PEN = 8--wxLIGHT_GREY_PEN :: Int-wxLIGHT_GREY_PEN = 9--wxNOT_FOUND :: Int-wxNOT_FOUND = (-1)--wxPRINTER_NO_ERROR :: Int-wxPRINTER_NO_ERROR = 0--wxPRINTER_CANCELLED :: Int-wxPRINTER_CANCELLED = 1--wxPRINTER_ERROR :: Int-wxPRINTER_ERROR = 2--wxPREVIEW_PRINT :: Int-wxPREVIEW_PRINT = 1--wxPREVIEW_PREVIOUS :: Int-wxPREVIEW_PREVIOUS = 2--wxPREVIEW_NEXT :: Int-wxPREVIEW_NEXT = 4--wxPREVIEW_ZOOM :: Int-wxPREVIEW_ZOOM = 8--wxPREVIEW_FIRST :: Int-wxPREVIEW_FIRST = 8--wxPREVIEW_LAST :: Int-wxPREVIEW_LAST = 32--wxPREVIEW_GOTO :: Int-wxPREVIEW_GOTO = 64--wxPREVIEW_DEFAULT :: Int-wxPREVIEW_DEFAULT = 126--wxID_PREVIEW_CLOSE :: Int-wxID_PREVIEW_CLOSE = 1--wxID_PREVIEW_NEXT :: Int-wxID_PREVIEW_NEXT = 2--wxID_PREVIEW_PREVIOUS :: Int-wxID_PREVIEW_PREVIOUS = 3--wxID_PREVIEW_PRINT :: Int-wxID_PREVIEW_PRINT = 4--wxID_PREVIEW_ZOOM :: Int-wxID_PREVIEW_ZOOM = 5--wxID_PREVIEW_FIRST :: Int-wxID_PREVIEW_FIRST = 6--wxID_PREVIEW_LAST :: Int-wxID_PREVIEW_LAST = 7--wxID_PREVIEW_GOTO :: Int-wxID_PREVIEW_GOTO = 8--wxPRINTID_STATIC :: Int-wxPRINTID_STATIC = 10--wxPRINTID_RANGE :: Int-wxPRINTID_RANGE = 11--wxPRINTID_FROM :: Int-wxPRINTID_FROM = 12--wxPRINTID_TO :: Int-wxPRINTID_TO = 13--wxPRINTID_COPIES :: Int-wxPRINTID_COPIES = 14--wxPRINTID_PRINTTOFILE :: Int-wxPRINTID_PRINTTOFILE = 15--wxPRINTID_SETUP :: Int-wxPRINTID_SETUP = 16--wxPRINTID_LEFTMARGIN :: Int-wxPRINTID_LEFTMARGIN = 30--wxPRINTID_RIGHTMARGIN :: Int-wxPRINTID_RIGHTMARGIN = 31--wxPRINTID_TOPMARGIN :: Int-wxPRINTID_TOPMARGIN = 32--wxPRINTID_BOTTOMMARGIN :: Int-wxPRINTID_BOTTOMMARGIN = 33--wxPRINTID_PRINTCOLOUR :: Int-wxPRINTID_PRINTCOLOUR = 10--wxPRINTID_ORIENTATION :: Int-wxPRINTID_ORIENTATION = 11--wxPRINTID_COMMAND :: Int-wxPRINTID_COMMAND = 12--wxPRINTID_OPTIONS :: Int-wxPRINTID_OPTIONS = 13--wxPRINTID_PAPERSIZE :: Int-wxPRINTID_PAPERSIZE = 14--wxHF_TOOLBAR :: Int-wxHF_TOOLBAR = 1--wxHF_CONTENTS :: Int-wxHF_CONTENTS = 2--wxHF_INDEX :: Int-wxHF_INDEX = 4--wxHF_SEARCH :: Int-wxHF_SEARCH = 8--wxHF_BOOKMARKS :: Int-wxHF_BOOKMARKS = 16--wxHF_OPENFILES :: Int-wxHF_OPENFILES = 32--wxHF_PRINT :: Int-wxHF_PRINT = 64--wxHF_FLATTOOLBAR :: Int-wxHF_FLATTOOLBAR = 128--wxHF_DEFAULTSTYLE :: Int-wxHF_DEFAULTSTYLE = 95--wxLAYOUT_HORIZONTAL :: Int-wxLAYOUT_HORIZONTAL = 0--wxLAYOUT_VERTICAL :: Int-wxLAYOUT_VERTICAL = 1--wxLAYOUT_NONE :: Int-wxLAYOUT_NONE = 0--wxLAYOUT_TOP :: Int-wxLAYOUT_TOP = 1--wxLAYOUT_LEFT :: Int-wxLAYOUT_LEFT = 2--wxLAYOUT_RIGHT :: Int-wxLAYOUT_RIGHT = 3--wxLAYOUT_BOTTOM :: Int-wxLAYOUT_BOTTOM = 4--wxSASH_DRAG_NONE :: Int-wxSASH_DRAG_NONE = 0--wxSASH_DRAG_DRAGGING :: Int-wxSASH_DRAG_DRAGGING = 1--wxSASH_DRAG_LEFT_DOWN :: Int-wxSASH_DRAG_LEFT_DOWN = 2--wxSASH_TOP :: Int-wxSASH_TOP = 0--wxSASH_RIGHT :: Int-wxSASH_RIGHT = 1--wxSASH_BOTTOM :: Int-wxSASH_BOTTOM = 2--wxSASH_LEFT :: Int-wxSASH_LEFT = 3--wxSASH_NONE :: Int-wxSASH_NONE = 100--wxSW_NOBORDER :: Int-wxSW_NOBORDER = 0--wxSW_BORDER :: Int-wxSW_BORDER = 32--wxSW_3DSASH :: Int-wxSW_3DSASH = 64--wxSW_3DBORDER :: Int-wxSW_3DBORDER = 128--wxSW_3D :: Int-wxSW_3D = 192--wxSASH_STATUS_OK :: Int-wxSASH_STATUS_OK = 0--wxSASH_STATUS_OUT_OF_RANGE :: Int-wxSASH_STATUS_OUT_OF_RANGE = 1--wxXRC_NONE :: Int-wxXRC_NONE = 0--wxXRC_USE_LOCALE :: Int-wxXRC_USE_LOCALE = 1--wxXRC_NO_SUBCLASSING :: Int-wxXRC_NO_SUBCLASSING = 2--wxXRC_NO_RELOADING :: Int-wxXRC_NO_RELOADING = 4--wxSYS_WHITE_BRUSH :: Int-wxSYS_WHITE_BRUSH = 0--wxSYS_LTGRAY_BRUSH :: Int-wxSYS_LTGRAY_BRUSH = 1--wxSYS_GRAY_BRUSH :: Int-wxSYS_GRAY_BRUSH = 2--wxSYS_DKGRAY_BRUSH :: Int-wxSYS_DKGRAY_BRUSH = 3--wxSYS_BLACK_BRUSH :: Int-wxSYS_BLACK_BRUSH = 4--wxSYS_NULL_BRUSH :: Int-wxSYS_NULL_BRUSH = 5--wxSYS_HOLLOW_BRUSH :: Int-wxSYS_HOLLOW_BRUSH = 5--wxSYS_WHITE_PEN :: Int-wxSYS_WHITE_PEN = 6--wxSYS_BLACK_PEN :: Int-wxSYS_BLACK_PEN = 7--wxSYS_NULL_PEN :: Int-wxSYS_NULL_PEN = 8--wxSYS_OEM_FIXED_FONT :: Int-wxSYS_OEM_FIXED_FONT = 10--wxSYS_ANSI_FIXED_FONT :: Int-wxSYS_ANSI_FIXED_FONT = 11--wxSYS_ANSI_VAR_FONT :: Int-wxSYS_ANSI_VAR_FONT = 12--wxSYS_SYSTEM_FONT :: Int-wxSYS_SYSTEM_FONT = 13--wxSYS_DEVICE_DEFAULT_FONT :: Int-wxSYS_DEVICE_DEFAULT_FONT = 14--wxSYS_DEFAULT_PALETTE :: Int-wxSYS_DEFAULT_PALETTE = 15--wxSYS_SYSTEM_FIXED_FONT :: Int-wxSYS_SYSTEM_FIXED_FONT = 16--wxSYS_DEFAULT_GUI_FONT :: Int-wxSYS_DEFAULT_GUI_FONT = 17--wxSYS_COLOUR_SCROLLBAR :: Int-wxSYS_COLOUR_SCROLLBAR = 0--wxSYS_COLOUR_BACKGROUND :: Int-wxSYS_COLOUR_BACKGROUND = 1--wxSYS_COLOUR_ACTIVECAPTION :: Int-wxSYS_COLOUR_ACTIVECAPTION = 2--wxSYS_COLOUR_INACTIVECAPTION :: Int-wxSYS_COLOUR_INACTIVECAPTION = 3--wxSYS_COLOUR_MENU :: Int-wxSYS_COLOUR_MENU = 4--wxSYS_COLOUR_WINDOW :: Int-wxSYS_COLOUR_WINDOW = 5--wxSYS_COLOUR_WINDOWFRAME :: Int-wxSYS_COLOUR_WINDOWFRAME = 6--wxSYS_COLOUR_MENUTEXT :: Int-wxSYS_COLOUR_MENUTEXT = 7--wxSYS_COLOUR_WINDOWTEXT :: Int-wxSYS_COLOUR_WINDOWTEXT = 8--wxSYS_COLOUR_CAPTIONTEXT :: Int-wxSYS_COLOUR_CAPTIONTEXT = 9--wxSYS_COLOUR_ACTIVEBORDER :: Int-wxSYS_COLOUR_ACTIVEBORDER = 10--wxSYS_COLOUR_INACTIVEBORDER :: Int-wxSYS_COLOUR_INACTIVEBORDER = 11--wxSYS_COLOUR_APPWORKSPACE :: Int-wxSYS_COLOUR_APPWORKSPACE = 12--wxSYS_COLOUR_HIGHLIGHT :: Int-wxSYS_COLOUR_HIGHLIGHT = 13--wxSYS_COLOUR_HIGHLIGHTTEXT :: Int-wxSYS_COLOUR_HIGHLIGHTTEXT = 14--wxSYS_COLOUR_BTNFACE :: Int-wxSYS_COLOUR_BTNFACE = 15--wxSYS_COLOUR_BTNSHADOW :: Int-wxSYS_COLOUR_BTNSHADOW = 16--wxSYS_COLOUR_GRAYTEXT :: Int-wxSYS_COLOUR_GRAYTEXT = 17--wxSYS_COLOUR_BTNTEXT :: Int-wxSYS_COLOUR_BTNTEXT = 18--wxSYS_COLOUR_INACTIVECAPTIONTEXT :: Int-wxSYS_COLOUR_INACTIVECAPTIONTEXT = 19--wxSYS_COLOUR_BTNHIGHLIGHT :: Int-wxSYS_COLOUR_BTNHIGHLIGHT = 20--wxSYS_COLOUR_3DDKSHADOW :: Int-wxSYS_COLOUR_3DDKSHADOW = 21--wxSYS_COLOUR_3DLIGHT :: Int-wxSYS_COLOUR_3DLIGHT = 22--wxSYS_COLOUR_INFOTEXT :: Int-wxSYS_COLOUR_INFOTEXT = 23--wxSYS_COLOUR_INFOBK :: Int-wxSYS_COLOUR_INFOBK = 24--wxSYS_COLOUR_LISTBOX :: Int-wxSYS_COLOUR_LISTBOX = 25--wxSYS_COLOUR_DESKTOP :: Int-wxSYS_COLOUR_DESKTOP = 1--wxSYS_COLOUR_3DFACE :: Int-wxSYS_COLOUR_3DFACE = 15--wxSYS_COLOUR_3DSHADOW :: Int-wxSYS_COLOUR_3DSHADOW = 16--wxSYS_COLOUR_3DHIGHLIGHT :: Int-wxSYS_COLOUR_3DHIGHLIGHT = 20--wxSYS_COLOUR_3DHILIGHT :: Int-wxSYS_COLOUR_3DHILIGHT = 20--wxSYS_COLOUR_BTNHILIGHT :: Int-wxSYS_COLOUR_BTNHILIGHT = 20--wxSYS_MOUSE_BUTTONS :: Int-wxSYS_MOUSE_BUTTONS = 1--wxSYS_BORDER_X :: Int-wxSYS_BORDER_X = 2--wxSYS_BORDER_Y :: Int-wxSYS_BORDER_Y = 3--wxSYS_CURSOR_X :: Int-wxSYS_CURSOR_X = 4--wxSYS_CURSOR_Y :: Int-wxSYS_CURSOR_Y = 5--wxSYS_DCLICK_X :: Int-wxSYS_DCLICK_X = 6--wxSYS_DCLICK_Y :: Int-wxSYS_DCLICK_Y = 7--wxSYS_DRAG_X :: Int-wxSYS_DRAG_X = 8--wxSYS_DRAG_Y :: Int-wxSYS_DRAG_Y = 9--wxSYS_EDGE_X :: Int-wxSYS_EDGE_X = 10--wxSYS_EDGE_Y :: Int-wxSYS_EDGE_Y = 11--wxSYS_HSCROLL_ARROW_X :: Int-wxSYS_HSCROLL_ARROW_X = 12--wxSYS_HSCROLL_ARROW_Y :: Int-wxSYS_HSCROLL_ARROW_Y = 13--wxSYS_HTHUMB_X :: Int-wxSYS_HTHUMB_X = 14--wxSYS_ICON_X :: Int-wxSYS_ICON_X = 15--wxSYS_ICON_Y :: Int-wxSYS_ICON_Y = 16--wxSYS_ICONSPACING_X :: Int-wxSYS_ICONSPACING_X = 17--wxSYS_ICONSPACING_Y :: Int-wxSYS_ICONSPACING_Y = 18--wxSYS_WINDOWMIN_X :: Int-wxSYS_WINDOWMIN_X = 19--wxSYS_WINDOWMIN_Y :: Int-wxSYS_WINDOWMIN_Y = 20--wxSYS_SCREEN_X :: Int-wxSYS_SCREEN_X = 21--wxSYS_SCREEN_Y :: Int-wxSYS_SCREEN_Y = 22--wxSYS_FRAMESIZE_X :: Int-wxSYS_FRAMESIZE_X = 23--wxSYS_FRAMESIZE_Y :: Int-wxSYS_FRAMESIZE_Y = 24--wxSYS_SMALLICON_X :: Int-wxSYS_SMALLICON_X = 25--wxSYS_SMALLICON_Y :: Int-wxSYS_SMALLICON_Y = 26--wxSYS_HSCROLL_Y :: Int-wxSYS_HSCROLL_Y = 27--wxSYS_VSCROLL_X :: Int-wxSYS_VSCROLL_X = 28--wxSYS_VSCROLL_ARROW_X :: Int-wxSYS_VSCROLL_ARROW_X = 29--wxSYS_VSCROLL_ARROW_Y :: Int-wxSYS_VSCROLL_ARROW_Y = 30--wxSYS_VTHUMB_Y :: Int-wxSYS_VTHUMB_Y = 31--wxSYS_CAPTION_Y :: Int-wxSYS_CAPTION_Y = 32--wxSYS_MENU_Y :: Int-wxSYS_MENU_Y = 33--wxSYS_NETWORK_PRESENT :: Int-wxSYS_NETWORK_PRESENT = 34--wxSYS_PENWINDOWS_PRESENT :: Int-wxSYS_PENWINDOWS_PRESENT = 35--wxSYS_SHOW_SOUNDS :: Int-wxSYS_SHOW_SOUNDS = 36--wxSYS_SWAP_BUTTONS :: Int-wxSYS_SWAP_BUTTONS = 37--wxSYS_SCREEN_NONE :: Int-wxSYS_SCREEN_NONE = 0--wxSYS_SCREEN_TINY :: Int-wxSYS_SCREEN_TINY = 1--wxSYS_SCREEN_PDA :: Int-wxSYS_SCREEN_PDA = 2--wxSYS_SCREEN_SMALL :: Int-wxSYS_SCREEN_SMALL = 3--wxSYS_SCREEN_DESKTOP :: Int-wxSYS_SCREEN_DESKTOP = 4--wxCAL_BORDER_NONE :: Int-wxCAL_BORDER_NONE = 0--wxCAL_BORDER_SQUARE :: Int-wxCAL_BORDER_SQUARE = 1--wxCAL_BORDER_ROUND :: Int-wxCAL_BORDER_ROUND = 2--wxCAL_HITTEST_NOWHERE :: Int-wxCAL_HITTEST_NOWHERE = 0--wxCAL_HITTEST_HEADER :: Int-wxCAL_HITTEST_HEADER = 1--wxCAL_HITTEST_DAY :: Int-wxCAL_HITTEST_DAY = 2--wxUNKNOWN :: Int-wxUNKNOWN = 0--wxSTRING :: Int-wxSTRING = 1--wxBOOLEAN :: Int-wxBOOLEAN = 2--wxINTEGER :: Int-wxINTEGER = 3--wxFLOAT :: Int-wxFLOAT = 4--wxMUTEX_NO_ERROR :: Int-wxMUTEX_NO_ERROR = 0--wxMUTEX_DEAD_LOCK :: Int-wxMUTEX_DEAD_LOCK = 1--wxMUTEX_BUSY :: Int-wxMUTEX_BUSY = 2--wxMUTEX_UNLOCKED :: Int-wxMUTEX_UNLOCKED = 3--wxMUTEX_MISC_ERROR :: Int-wxMUTEX_MISC_ERROR = 4--wxPLATFORM_CURRENT :: Int-wxPLATFORM_CURRENT = (-1)--wxPLATFORM_UNIX :: Int-wxPLATFORM_UNIX = 0--wxPLATFORM_WINDOWS :: Int-wxPLATFORM_WINDOWS = 1--wxPLATFORM_OS2 :: Int-wxPLATFORM_OS2 = 2--wxPLATFORM_MAC :: Int-wxPLATFORM_MAC = 3--wxLED_ALIGN_LEFT :: Int-wxLED_ALIGN_LEFT = 1--wxLED_ALIGN_RIGHT :: Int-wxLED_ALIGN_RIGHT = 2--wxLED_ALIGN_CENTER :: Int-wxLED_ALIGN_CENTER = 4--wxLED_ALIGN_MASK :: Int-wxLED_ALIGN_MASK = 4--wxLED_DRAW_FADED :: Int-wxLED_DRAW_FADED = 8--wxDS_MANAGE_SCROLLBARS :: Int-wxDS_MANAGE_SCROLLBARS = 16--wxDS_DRAG_CORNER :: Int-wxDS_DRAG_CORNER = 32--wxEL_ALLOW_NEW :: Int-wxEL_ALLOW_NEW = 256--wxEL_ALLOW_EDIT :: Int-wxEL_ALLOW_EDIT = 512--wxEL_ALLOW_DELETE :: Int-wxEL_ALLOW_DELETE = 1024--wxTR_NO_BUTTONS :: Int-wxTR_NO_BUTTONS = 0--wxTR_HAS_BUTTONS :: Int-wxTR_HAS_BUTTONS = 1--wxTR_TWIST_BUTTONS :: Int-wxTR_TWIST_BUTTONS = 2--wxTR_NO_LINES :: Int-wxTR_NO_LINES = 4--wxTR_LINES_AT_ROOT :: Int-wxTR_LINES_AT_ROOT = 8--wxTR_AQUA_BUTTONS :: Int-wxTR_AQUA_BUTTONS = 16--wxTR_SINGLE :: Int-wxTR_SINGLE = 0--wxTR_MULTIPLE :: Int-wxTR_MULTIPLE = 32--wxTR_EXTENDED :: Int-wxTR_EXTENDED = 64--wxTR_FULL_ROW_HIGHLIGHT :: Int-wxTR_FULL_ROW_HIGHLIGHT = 8192--wxTR_EDIT_LABELS :: Int-wxTR_EDIT_LABELS = 512--wxTR_ROW_LINES :: Int-wxTR_ROW_LINES = 1024--wxTR_HIDE_ROOT :: Int-wxTR_HIDE_ROOT = 2048--wxTR_HAS_VARIABLE_ROW_HEIGHT :: Int-wxTR_HAS_VARIABLE_ROW_HEIGHT = 128--wxCBAR_DOCKED_HORIZONTALLY :: Int-wxCBAR_DOCKED_HORIZONTALLY = 0--wxCBAR_DOCKED_VERTICALLY :: Int-wxCBAR_DOCKED_VERTICALLY = 1--wxCBAR_FLOATING :: Int-wxCBAR_FLOATING = 2--wxCBAR_HIDDEN :: Int-wxCBAR_HIDDEN = 3--fL_ALIGN_TOP :: Int-fL_ALIGN_TOP = 0--fL_ALIGN_BOTTOM :: Int-fL_ALIGN_BOTTOM = 1--fL_ALIGN_LEFT :: Int-fL_ALIGN_LEFT = 2--fL_ALIGN_RIGHT :: Int-fL_ALIGN_RIGHT = 3--fL_ALIGN_TOP_PANE :: Int-fL_ALIGN_TOP_PANE = 1--fL_ALIGN_BOTTOM_PANE :: Int-fL_ALIGN_BOTTOM_PANE = 2--fL_ALIGN_LEFT_PANE :: Int-fL_ALIGN_LEFT_PANE = 4--fL_ALIGN_RIGHT_PANE :: Int-fL_ALIGN_RIGHT_PANE = 8--wxALL_PANES :: Int-wxALL_PANES = 15--cB_NO_ITEMS_HITTED :: Int-cB_NO_ITEMS_HITTED = 0--cB_UPPER_ROW_HANDLE_HITTED :: Int-cB_UPPER_ROW_HANDLE_HITTED = 1--cB_LOWER_ROW_HANDLE_HITTED :: Int-cB_LOWER_ROW_HANDLE_HITTED = 2--cB_LEFT_BAR_HANDLE_HITTED :: Int-cB_LEFT_BAR_HANDLE_HITTED = 3--cB_RIGHT_BAR_HANDLE_HITTED :: Int-cB_RIGHT_BAR_HANDLE_HITTED = 4--cB_BAR_CONTENT_HITTED :: Int-cB_BAR_CONTENT_HITTED = 5--wxOK :: Int-wxOK = 4--wxYES :: Int-wxYES = 2--wxNO :: Int-wxNO = 8--wxYES_NO :: Int-wxYES_NO = 10--wxCANCEL :: Int-wxCANCEL = 16--wxNO_DEFAULT :: Int-wxNO_DEFAULT = 128--wxYES_DEFAULT :: Int-wxYES_DEFAULT = 0--wxFR_DOWN :: Int-wxFR_DOWN = 1--wxFR_WHOLEWORD :: Int-wxFR_WHOLEWORD = 2--wxFR_MATCHCASE :: Int-wxFR_MATCHCASE = 4--wxFR_REPLACEDIALOG :: Int-wxFR_REPLACEDIALOG = 1--wxFR_NOUPDOWN :: Int-wxFR_NOUPDOWN = 2--wxFR_NOMATCHCASE :: Int-wxFR_NOMATCHCASE = 4--wxFR_NOWHOLEWORD :: Int-wxFR_NOWHOLEWORD = 8--wxQUANTIZE_INCLUDE_WINDOWS_COLOURS :: Int-wxQUANTIZE_INCLUDE_WINDOWS_COLOURS = 1--wxQUANTIZE_RETURN_8BIT_DATA :: Int-wxQUANTIZE_RETURN_8BIT_DATA = 2--wxQUANTIZE_FILL_DESTINATION_IMAGE :: Int-wxQUANTIZE_FILL_DESTINATION_IMAGE = 4--wxLANGUAGE_DEFAULT :: Int-wxLANGUAGE_DEFAULT = 0--wxLANGUAGE_UNKNOWN :: Int-wxLANGUAGE_UNKNOWN = 1--wxLANGUAGE_ABKHAZIAN :: Int-wxLANGUAGE_ABKHAZIAN = 2--wxLANGUAGE_AFAR :: Int-wxLANGUAGE_AFAR = 3--wxLANGUAGE_AFRIKAANS :: Int-wxLANGUAGE_AFRIKAANS = 4--wxLANGUAGE_ALBANIAN :: Int-wxLANGUAGE_ALBANIAN = 5--wxLANGUAGE_AMHARIC :: Int-wxLANGUAGE_AMHARIC = 6--wxLANGUAGE_ARABIC :: Int-wxLANGUAGE_ARABIC = 7--wxLANGUAGE_ARABIC_ALGERIA :: Int-wxLANGUAGE_ARABIC_ALGERIA = 8--wxLANGUAGE_ARABIC_BAHRAIN :: Int-wxLANGUAGE_ARABIC_BAHRAIN = 9--wxLANGUAGE_ARABIC_EGYPT :: Int-wxLANGUAGE_ARABIC_EGYPT = 10--wxLANGUAGE_ARABIC_IRAQ :: Int-wxLANGUAGE_ARABIC_IRAQ = 11--wxLANGUAGE_ARABIC_JORDAN :: Int-wxLANGUAGE_ARABIC_JORDAN = 12--wxLANGUAGE_ARABIC_KUWAIT :: Int-wxLANGUAGE_ARABIC_KUWAIT = 13--wxLANGUAGE_ARABIC_LEBANON :: Int-wxLANGUAGE_ARABIC_LEBANON = 14--wxLANGUAGE_ARABIC_LIBYA :: Int-wxLANGUAGE_ARABIC_LIBYA = 15--wxLANGUAGE_ARABIC_MOROCCO :: Int-wxLANGUAGE_ARABIC_MOROCCO = 16--wxLANGUAGE_ARABIC_OMAN :: Int-wxLANGUAGE_ARABIC_OMAN = 17--wxLANGUAGE_ARABIC_QATAR :: Int-wxLANGUAGE_ARABIC_QATAR = 18--wxLANGUAGE_ARABIC_SAUDI_ARABIA :: Int-wxLANGUAGE_ARABIC_SAUDI_ARABIA = 19--wxLANGUAGE_ARABIC_SUDAN :: Int-wxLANGUAGE_ARABIC_SUDAN = 20--wxLANGUAGE_ARABIC_SYRIA :: Int-wxLANGUAGE_ARABIC_SYRIA = 21--wxLANGUAGE_ARABIC_TUNISIA :: Int-wxLANGUAGE_ARABIC_TUNISIA = 22--wxLANGUAGE_ARABIC_UAE :: Int-wxLANGUAGE_ARABIC_UAE = 23--wxLANGUAGE_ARABIC_YEMEN :: Int-wxLANGUAGE_ARABIC_YEMEN = 24--wxLANGUAGE_ARMENIAN :: Int-wxLANGUAGE_ARMENIAN = 25--wxLANGUAGE_ASSAMESE :: Int-wxLANGUAGE_ASSAMESE = 26--wxLANGUAGE_AYMARA :: Int-wxLANGUAGE_AYMARA = 27--wxLANGUAGE_AZERI :: Int-wxLANGUAGE_AZERI = 28--wxLANGUAGE_AZERI_CYRILLIC :: Int-wxLANGUAGE_AZERI_CYRILLIC = 29--wxLANGUAGE_AZERI_LATIN :: Int-wxLANGUAGE_AZERI_LATIN = 30--wxLANGUAGE_BASHKIR :: Int-wxLANGUAGE_BASHKIR = 31--wxLANGUAGE_BASQUE :: Int-wxLANGUAGE_BASQUE = 32--wxLANGUAGE_BELARUSIAN :: Int-wxLANGUAGE_BELARUSIAN = 33--wxLANGUAGE_BENGALI :: Int-wxLANGUAGE_BENGALI = 34--wxLANGUAGE_BHUTANI :: Int-wxLANGUAGE_BHUTANI = 35--wxLANGUAGE_BIHARI :: Int-wxLANGUAGE_BIHARI = 36--wxLANGUAGE_BISLAMA :: Int-wxLANGUAGE_BISLAMA = 37--wxLANGUAGE_BRETON :: Int-wxLANGUAGE_BRETON = 38--wxLANGUAGE_BULGARIAN :: Int-wxLANGUAGE_BULGARIAN = 39--wxLANGUAGE_BURMESE :: Int-wxLANGUAGE_BURMESE = 40--wxLANGUAGE_CAMBODIAN :: Int-wxLANGUAGE_CAMBODIAN = 41--wxLANGUAGE_CATALAN :: Int-wxLANGUAGE_CATALAN = 42--wxLANGUAGE_CHINESE :: Int-wxLANGUAGE_CHINESE = 43--wxLANGUAGE_CHINESE_SIMPLIFIED :: Int-wxLANGUAGE_CHINESE_SIMPLIFIED = 44--wxLANGUAGE_CHINESE_TRADITIONAL :: Int-wxLANGUAGE_CHINESE_TRADITIONAL = 45--wxLANGUAGE_CHINESE_HONGKONG :: Int-wxLANGUAGE_CHINESE_HONGKONG = 46--wxLANGUAGE_CHINESE_MACAU :: Int-wxLANGUAGE_CHINESE_MACAU = 47--wxLANGUAGE_CHINESE_SINGAPORE :: Int-wxLANGUAGE_CHINESE_SINGAPORE = 48--wxLANGUAGE_CHINESE_TAIWAN :: Int-wxLANGUAGE_CHINESE_TAIWAN = 49--wxLANGUAGE_CORSICAN :: Int-wxLANGUAGE_CORSICAN = 50--wxLANGUAGE_CROATIAN :: Int-wxLANGUAGE_CROATIAN = 51--wxLANGUAGE_CZECH :: Int-wxLANGUAGE_CZECH = 52--wxLANGUAGE_DANISH :: Int-wxLANGUAGE_DANISH = 53--wxLANGUAGE_DUTCH :: Int-wxLANGUAGE_DUTCH = 54--wxLANGUAGE_DUTCH_BELGIAN :: Int-wxLANGUAGE_DUTCH_BELGIAN = 55--wxLANGUAGE_ENGLISH :: Int-wxLANGUAGE_ENGLISH = 56--wxLANGUAGE_ENGLISH_UK :: Int-wxLANGUAGE_ENGLISH_UK = 57--wxLANGUAGE_ENGLISH_US :: Int-wxLANGUAGE_ENGLISH_US = 58--wxLANGUAGE_ENGLISH_AUSTRALIA :: Int-wxLANGUAGE_ENGLISH_AUSTRALIA = 59--wxLANGUAGE_ENGLISH_BELIZE :: Int-wxLANGUAGE_ENGLISH_BELIZE = 60--wxLANGUAGE_ENGLISH_BOTSWANA :: Int-wxLANGUAGE_ENGLISH_BOTSWANA = 61--wxLANGUAGE_ENGLISH_CANADA :: Int-wxLANGUAGE_ENGLISH_CANADA = 62--wxLANGUAGE_ENGLISH_CARIBBEAN :: Int-wxLANGUAGE_ENGLISH_CARIBBEAN = 63--wxLANGUAGE_ENGLISH_DENMARK :: Int-wxLANGUAGE_ENGLISH_DENMARK = 64--wxLANGUAGE_ENGLISH_EIRE :: Int-wxLANGUAGE_ENGLISH_EIRE = 65--wxLANGUAGE_ENGLISH_JAMAICA :: Int-wxLANGUAGE_ENGLISH_JAMAICA = 66--wxLANGUAGE_ENGLISH_NEW_ZEALAND :: Int-wxLANGUAGE_ENGLISH_NEW_ZEALAND = 67--wxLANGUAGE_ENGLISH_PHILIPPINES :: Int-wxLANGUAGE_ENGLISH_PHILIPPINES = 68--wxLANGUAGE_ENGLISH_SOUTH_AFRICA :: Int-wxLANGUAGE_ENGLISH_SOUTH_AFRICA = 69--wxLANGUAGE_ENGLISH_TRINIDAD :: Int-wxLANGUAGE_ENGLISH_TRINIDAD = 70--wxLANGUAGE_ENGLISH_ZIMBABWE :: Int-wxLANGUAGE_ENGLISH_ZIMBABWE = 71--wxLANGUAGE_ESPERANTO :: Int-wxLANGUAGE_ESPERANTO = 72--wxLANGUAGE_ESTONIAN :: Int-wxLANGUAGE_ESTONIAN = 73--wxLANGUAGE_FAEROESE :: Int-wxLANGUAGE_FAEROESE = 74--wxLANGUAGE_FARSI :: Int-wxLANGUAGE_FARSI = 75--wxLANGUAGE_FIJI :: Int-wxLANGUAGE_FIJI = 76--wxLANGUAGE_FINNISH :: Int-wxLANGUAGE_FINNISH = 77--wxLANGUAGE_FRENCH :: Int-wxLANGUAGE_FRENCH = 78--wxLANGUAGE_FRENCH_BELGIAN :: Int-wxLANGUAGE_FRENCH_BELGIAN = 79--wxLANGUAGE_FRENCH_CANADIAN :: Int-wxLANGUAGE_FRENCH_CANADIAN = 80--wxLANGUAGE_FRENCH_LUXEMBOURG :: Int-wxLANGUAGE_FRENCH_LUXEMBOURG = 81--wxLANGUAGE_FRENCH_MONACO :: Int-wxLANGUAGE_FRENCH_MONACO = 82--wxLANGUAGE_FRENCH_SWISS :: Int-wxLANGUAGE_FRENCH_SWISS = 83--wxLANGUAGE_FRISIAN :: Int-wxLANGUAGE_FRISIAN = 84--wxLANGUAGE_GALICIAN :: Int-wxLANGUAGE_GALICIAN = 85--wxLANGUAGE_GEORGIAN :: Int-wxLANGUAGE_GEORGIAN = 86--wxLANGUAGE_GERMAN :: Int-wxLANGUAGE_GERMAN = 87--wxLANGUAGE_GERMAN_AUSTRIAN :: Int-wxLANGUAGE_GERMAN_AUSTRIAN = 88--wxLANGUAGE_GERMAN_BELGIUM :: Int-wxLANGUAGE_GERMAN_BELGIUM = 89--wxLANGUAGE_GERMAN_LIECHTENSTEIN :: Int-wxLANGUAGE_GERMAN_LIECHTENSTEIN = 90--wxLANGUAGE_GERMAN_LUXEMBOURG :: Int-wxLANGUAGE_GERMAN_LUXEMBOURG = 91--wxLANGUAGE_GERMAN_SWISS :: Int-wxLANGUAGE_GERMAN_SWISS = 92--wxLANGUAGE_GREEK :: Int-wxLANGUAGE_GREEK = 93--wxLANGUAGE_GREENLANDIC :: Int-wxLANGUAGE_GREENLANDIC = 94--wxLANGUAGE_GUARANI :: Int-wxLANGUAGE_GUARANI = 95--wxLANGUAGE_GUJARATI :: Int-wxLANGUAGE_GUJARATI = 96--wxLANGUAGE_HAUSA :: Int-wxLANGUAGE_HAUSA = 97--wxLANGUAGE_HEBREW :: Int-wxLANGUAGE_HEBREW = 98--wxLANGUAGE_HINDI :: Int-wxLANGUAGE_HINDI = 99--wxLANGUAGE_HUNGARIAN :: Int-wxLANGUAGE_HUNGARIAN = 100--wxLANGUAGE_ICELANDIC :: Int-wxLANGUAGE_ICELANDIC = 101--wxLANGUAGE_INDONESIAN :: Int-wxLANGUAGE_INDONESIAN = 102--wxLANGUAGE_INTERLINGUA :: Int-wxLANGUAGE_INTERLINGUA = 103--wxLANGUAGE_INTERLINGUE :: Int-wxLANGUAGE_INTERLINGUE = 104--wxLANGUAGE_INUKTITUT :: Int-wxLANGUAGE_INUKTITUT = 105--wxLANGUAGE_INUPIAK :: Int-wxLANGUAGE_INUPIAK = 106--wxLANGUAGE_IRISH :: Int-wxLANGUAGE_IRISH = 107--wxLANGUAGE_ITALIAN :: Int-wxLANGUAGE_ITALIAN = 108--wxLANGUAGE_ITALIAN_SWISS :: Int-wxLANGUAGE_ITALIAN_SWISS = 109--wxLANGUAGE_JAPANESE :: Int-wxLANGUAGE_JAPANESE = 110--wxLANGUAGE_JAVANESE :: Int-wxLANGUAGE_JAVANESE = 111--wxLANGUAGE_KANNADA :: Int-wxLANGUAGE_KANNADA = 112--wxLANGUAGE_KASHMIRI :: Int-wxLANGUAGE_KASHMIRI = 113--wxLANGUAGE_KASHMIRI_INDIA :: Int-wxLANGUAGE_KASHMIRI_INDIA = 114--wxLANGUAGE_KAZAKH :: Int-wxLANGUAGE_KAZAKH = 115--wxLANGUAGE_KERNEWEK :: Int-wxLANGUAGE_KERNEWEK = 116--wxLANGUAGE_KINYARWANDA :: Int-wxLANGUAGE_KINYARWANDA = 117--wxLANGUAGE_KIRGHIZ :: Int-wxLANGUAGE_KIRGHIZ = 118--wxLANGUAGE_KIRUNDI :: Int-wxLANGUAGE_KIRUNDI = 119--wxLANGUAGE_KONKANI :: Int-wxLANGUAGE_KONKANI = 120--wxLANGUAGE_KOREAN :: Int-wxLANGUAGE_KOREAN = 121--wxLANGUAGE_KURDISH :: Int-wxLANGUAGE_KURDISH = 122--wxLANGUAGE_LAOTHIAN :: Int-wxLANGUAGE_LAOTHIAN = 123--wxLANGUAGE_LATIN :: Int-wxLANGUAGE_LATIN = 124--wxLANGUAGE_LATVIAN :: Int-wxLANGUAGE_LATVIAN = 125--wxLANGUAGE_LINGALA :: Int-wxLANGUAGE_LINGALA = 126--wxLANGUAGE_LITHUANIAN :: Int-wxLANGUAGE_LITHUANIAN = 127--wxLANGUAGE_MACEDONIAN :: Int-wxLANGUAGE_MACEDONIAN = 128--wxLANGUAGE_MALAGASY :: Int-wxLANGUAGE_MALAGASY = 129--wxLANGUAGE_MALAY :: Int-wxLANGUAGE_MALAY = 130--wxLANGUAGE_MALAYALAM :: Int-wxLANGUAGE_MALAYALAM = 131--wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM :: Int-wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM = 132--wxLANGUAGE_MALAY_MALAYSIA :: Int-wxLANGUAGE_MALAY_MALAYSIA = 133--wxLANGUAGE_MALTESE :: Int-wxLANGUAGE_MALTESE = 134--wxLANGUAGE_MANIPURI :: Int-wxLANGUAGE_MANIPURI = 135--wxLANGUAGE_MAORI :: Int-wxLANGUAGE_MAORI = 136--wxLANGUAGE_MARATHI :: Int-wxLANGUAGE_MARATHI = 137--wxLANGUAGE_MOLDAVIAN :: Int-wxLANGUAGE_MOLDAVIAN = 138--wxLANGUAGE_MONGOLIAN :: Int-wxLANGUAGE_MONGOLIAN = 139--wxLANGUAGE_NAURU :: Int-wxLANGUAGE_NAURU = 140--wxLANGUAGE_NEPALI :: Int-wxLANGUAGE_NEPALI = 141--wxLANGUAGE_NEPALI_INDIA :: Int-wxLANGUAGE_NEPALI_INDIA = 142--wxLANGUAGE_NORWEGIAN_BOKMAL :: Int-wxLANGUAGE_NORWEGIAN_BOKMAL = 143--wxLANGUAGE_NORWEGIAN_NYNORSK :: Int-wxLANGUAGE_NORWEGIAN_NYNORSK = 144--wxLANGUAGE_OCCITAN :: Int-wxLANGUAGE_OCCITAN = 145--wxLANGUAGE_ORIYA :: Int-wxLANGUAGE_ORIYA = 146--wxLANGUAGE_OROMO :: Int-wxLANGUAGE_OROMO = 147--wxLANGUAGE_PASHTO :: Int-wxLANGUAGE_PASHTO = 148--wxLANGUAGE_POLISH :: Int-wxLANGUAGE_POLISH = 149--wxLANGUAGE_PORTUGUESE :: Int-wxLANGUAGE_PORTUGUESE = 150--wxLANGUAGE_PORTUGUESE_BRAZILIAN :: Int-wxLANGUAGE_PORTUGUESE_BRAZILIAN = 151--wxLANGUAGE_PUNJABI :: Int-wxLANGUAGE_PUNJABI = 152--wxLANGUAGE_QUECHUA :: Int-wxLANGUAGE_QUECHUA = 153--wxLANGUAGE_RHAETO_ROMANCE :: Int-wxLANGUAGE_RHAETO_ROMANCE = 154--wxLANGUAGE_ROMANIAN :: Int-wxLANGUAGE_ROMANIAN = 155--wxLANGUAGE_RUSSIAN :: Int-wxLANGUAGE_RUSSIAN = 156--wxLANGUAGE_RUSSIAN_UKRAINE :: Int-wxLANGUAGE_RUSSIAN_UKRAINE = 157--wxLANGUAGE_SAMOAN :: Int-wxLANGUAGE_SAMOAN = 158--wxLANGUAGE_SANGHO :: Int-wxLANGUAGE_SANGHO = 159--wxLANGUAGE_SANSKRIT :: Int-wxLANGUAGE_SANSKRIT = 160--wxLANGUAGE_SCOTS_GAELIC :: Int-wxLANGUAGE_SCOTS_GAELIC = 161--wxLANGUAGE_SERBIAN :: Int-wxLANGUAGE_SERBIAN = 162--wxLANGUAGE_SERBIAN_CYRILLIC :: Int-wxLANGUAGE_SERBIAN_CYRILLIC = 163--wxLANGUAGE_SERBIAN_LATIN :: Int-wxLANGUAGE_SERBIAN_LATIN = 164--wxLANGUAGE_SERBO_CROATIAN :: Int-wxLANGUAGE_SERBO_CROATIAN = 165--wxLANGUAGE_SESOTHO :: Int-wxLANGUAGE_SESOTHO = 166--wxLANGUAGE_SETSWANA :: Int-wxLANGUAGE_SETSWANA = 167--wxLANGUAGE_SHONA :: Int-wxLANGUAGE_SHONA = 168--wxLANGUAGE_SINDHI :: Int-wxLANGUAGE_SINDHI = 169--wxLANGUAGE_SINHALESE :: Int-wxLANGUAGE_SINHALESE = 170--wxLANGUAGE_SISWATI :: Int-wxLANGUAGE_SISWATI = 171--wxLANGUAGE_SLOVAK :: Int-wxLANGUAGE_SLOVAK = 172--wxLANGUAGE_SLOVENIAN :: Int-wxLANGUAGE_SLOVENIAN = 173--wxLANGUAGE_SOMALI :: Int-wxLANGUAGE_SOMALI = 174--wxLANGUAGE_SPANISH :: Int-wxLANGUAGE_SPANISH = 175--wxLANGUAGE_SPANISH_ARGENTINA :: Int-wxLANGUAGE_SPANISH_ARGENTINA = 176--wxLANGUAGE_SPANISH_BOLIVIA :: Int-wxLANGUAGE_SPANISH_BOLIVIA = 177--wxLANGUAGE_SPANISH_CHILE :: Int-wxLANGUAGE_SPANISH_CHILE = 178--wxLANGUAGE_SPANISH_COLOMBIA :: Int-wxLANGUAGE_SPANISH_COLOMBIA = 179--wxLANGUAGE_SPANISH_COSTA_RICA :: Int-wxLANGUAGE_SPANISH_COSTA_RICA = 180--wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC :: Int-wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC = 181--wxLANGUAGE_SPANISH_ECUADOR :: Int-wxLANGUAGE_SPANISH_ECUADOR = 182--wxLANGUAGE_SPANISH_EL_SALVADOR :: Int-wxLANGUAGE_SPANISH_EL_SALVADOR = 183--wxLANGUAGE_SPANISH_GUATEMALA :: Int-wxLANGUAGE_SPANISH_GUATEMALA = 184--wxLANGUAGE_SPANISH_HONDURAS :: Int-wxLANGUAGE_SPANISH_HONDURAS = 185--wxLANGUAGE_SPANISH_MEXICAN :: Int-wxLANGUAGE_SPANISH_MEXICAN = 186--wxLANGUAGE_SPANISH_MODERN :: Int-wxLANGUAGE_SPANISH_MODERN = 187--wxLANGUAGE_SPANISH_NICARAGUA :: Int-wxLANGUAGE_SPANISH_NICARAGUA = 188--wxLANGUAGE_SPANISH_PANAMA :: Int-wxLANGUAGE_SPANISH_PANAMA = 189--wxLANGUAGE_SPANISH_PARAGUAY :: Int-wxLANGUAGE_SPANISH_PARAGUAY = 190--wxLANGUAGE_SPANISH_PERU :: Int-wxLANGUAGE_SPANISH_PERU = 191--wxLANGUAGE_SPANISH_PUERTO_RICO :: Int-wxLANGUAGE_SPANISH_PUERTO_RICO = 192--wxLANGUAGE_SPANISH_URUGUAY :: Int-wxLANGUAGE_SPANISH_URUGUAY = 193--wxLANGUAGE_SPANISH_US :: Int-wxLANGUAGE_SPANISH_US = 194--wxLANGUAGE_SPANISH_VENEZUELA :: Int-wxLANGUAGE_SPANISH_VENEZUELA = 195--wxLANGUAGE_SUNDANESE :: Int-wxLANGUAGE_SUNDANESE = 196--wxLANGUAGE_SWAHILI :: Int-wxLANGUAGE_SWAHILI = 197--wxLANGUAGE_SWEDISH :: Int-wxLANGUAGE_SWEDISH = 198--wxLANGUAGE_SWEDISH_FINLAND :: Int-wxLANGUAGE_SWEDISH_FINLAND = 199--wxLANGUAGE_TAGALOG :: Int-wxLANGUAGE_TAGALOG = 200--wxLANGUAGE_TAJIK :: Int-wxLANGUAGE_TAJIK = 201--wxLANGUAGE_TAMIL :: Int-wxLANGUAGE_TAMIL = 202--wxLANGUAGE_TATAR :: Int-wxLANGUAGE_TATAR = 203--wxLANGUAGE_TELUGU :: Int-wxLANGUAGE_TELUGU = 204--wxLANGUAGE_THAI :: Int-wxLANGUAGE_THAI = 205--wxLANGUAGE_TIBETAN :: Int-wxLANGUAGE_TIBETAN = 206--wxLANGUAGE_TIGRINYA :: Int-wxLANGUAGE_TIGRINYA = 207--wxLANGUAGE_TONGA :: Int-wxLANGUAGE_TONGA = 208--wxLANGUAGE_TSONGA :: Int-wxLANGUAGE_TSONGA = 209--wxLANGUAGE_TURKISH :: Int-wxLANGUAGE_TURKISH = 210--wxLANGUAGE_TURKMEN :: Int-wxLANGUAGE_TURKMEN = 211--wxLANGUAGE_TWI :: Int-wxLANGUAGE_TWI = 212--wxLANGUAGE_UIGHUR :: Int-wxLANGUAGE_UIGHUR = 213--wxLANGUAGE_UKRAINIAN :: Int-wxLANGUAGE_UKRAINIAN = 214--wxLANGUAGE_URDU :: Int-wxLANGUAGE_URDU = 215--wxLANGUAGE_URDU_INDIA :: Int-wxLANGUAGE_URDU_INDIA = 216--wxLANGUAGE_URDU_PAKISTAN :: Int-wxLANGUAGE_URDU_PAKISTAN = 217--wxLANGUAGE_UZBEK :: Int-wxLANGUAGE_UZBEK = 218--wxLANGUAGE_UZBEK_CYRILLIC :: Int-wxLANGUAGE_UZBEK_CYRILLIC = 219--wxLANGUAGE_UZBEK_LATIN :: Int-wxLANGUAGE_UZBEK_LATIN = 220--wxLANGUAGE_VIETNAMESE :: Int-wxLANGUAGE_VIETNAMESE = 221--wxLANGUAGE_VOLAPUK :: Int-wxLANGUAGE_VOLAPUK = 222--wxLANGUAGE_WELSH :: Int-wxLANGUAGE_WELSH = 223--wxLANGUAGE_WOLOF :: Int-wxLANGUAGE_WOLOF = 224--wxLANGUAGE_XHOSA :: Int-wxLANGUAGE_XHOSA = 225--wxLANGUAGE_YIDDISH :: Int-wxLANGUAGE_YIDDISH = 226--wxLANGUAGE_YORUBA :: Int-wxLANGUAGE_YORUBA = 227--wxLANGUAGE_ZHUANG :: Int-wxLANGUAGE_ZHUANG = 228--wxLANGUAGE_ZULU :: Int-wxLANGUAGE_ZULU = 229--wxLANGUAGE_USER_DEFINE :: Int-wxLANGUAGE_USER_DEFINE = 230--wxLOCALE_THOUSANDS_SEP :: Int-wxLOCALE_THOUSANDS_SEP = 0--wxLOCALE_DECIMAL_POINT :: Int-wxLOCALE_DECIMAL_POINT = 1--wxLOCALE_LOAD_DEFAULT :: Int-wxLOCALE_LOAD_DEFAULT = 1--wxLOCALE_CONV_ENCODING :: Int-wxLOCALE_CONV_ENCODING = 2--wxSTC_INVALID_POSITION :: Int-wxSTC_INVALID_POSITION = (-1)--wxSTC_START :: Int-wxSTC_START = 2000--wxSTC_OPTIONAL_START :: Int-wxSTC_OPTIONAL_START = 3000--wxSTC_LEXER_START :: Int-wxSTC_LEXER_START = 4000--wxSTC_WS_INVISIBLE :: Int-wxSTC_WS_INVISIBLE = 0--wxSTC_WS_VISIBLEALWAYS :: Int-wxSTC_WS_VISIBLEALWAYS = 1--wxSTC_WS_VISIBLEAFTERINDENT :: Int-wxSTC_WS_VISIBLEAFTERINDENT = 2--wxSTC_EOL_CRLF :: Int-wxSTC_EOL_CRLF = 0--wxSTC_EOL_CR :: Int-wxSTC_EOL_CR = 1--wxSTC_EOL_LF :: Int-wxSTC_EOL_LF = 2--wxSTC_CP_UTF8 :: Int-wxSTC_CP_UTF8 = 65001--wxSTC_CP_DBCS :: Int-wxSTC_CP_DBCS = 1--wxSTC_MARKER_MAX :: Int-wxSTC_MARKER_MAX = 31--wxSTC_MARK_CIRCLE :: Int-wxSTC_MARK_CIRCLE = 0--wxSTC_MARK_ROUNDRECT :: Int-wxSTC_MARK_ROUNDRECT = 1--wxSTC_MARK_ARROW :: Int-wxSTC_MARK_ARROW = 2--wxSTC_MARK_SMALLRECT :: Int-wxSTC_MARK_SMALLRECT = 3--wxSTC_MARK_SHORTARROW :: Int-wxSTC_MARK_SHORTARROW = 4--wxSTC_MARK_EMPTY :: Int-wxSTC_MARK_EMPTY = 5--wxSTC_MARK_ARROWDOWN :: Int-wxSTC_MARK_ARROWDOWN = 6--wxSTC_MARK_MINUS :: Int-wxSTC_MARK_MINUS = 7--wxSTC_MARK_PLUS :: Int-wxSTC_MARK_PLUS = 8--wxSTC_MARK_VLINE :: Int-wxSTC_MARK_VLINE = 9--wxSTC_MARK_LCORNER :: Int-wxSTC_MARK_LCORNER = 10--wxSTC_MARK_TCORNER :: Int-wxSTC_MARK_TCORNER = 11--wxSTC_MARK_BOXPLUS :: Int-wxSTC_MARK_BOXPLUS = 12--wxSTC_MARK_BOXPLUSCONNECTED :: Int-wxSTC_MARK_BOXPLUSCONNECTED = 13--wxSTC_MARK_BOXMINUS :: Int-wxSTC_MARK_BOXMINUS = 14--wxSTC_MARK_BOXMINUSCONNECTED :: Int-wxSTC_MARK_BOXMINUSCONNECTED = 15--wxSTC_MARK_LCORNERCURVE :: Int-wxSTC_MARK_LCORNERCURVE = 16--wxSTC_MARK_TCORNERCURVE :: Int-wxSTC_MARK_TCORNERCURVE = 17--wxSTC_MARK_CIRCLEPLUS :: Int-wxSTC_MARK_CIRCLEPLUS = 18--wxSTC_MARK_CIRCLEPLUSCONNECTED :: Int-wxSTC_MARK_CIRCLEPLUSCONNECTED = 19--wxSTC_MARK_CIRCLEMINUS :: Int-wxSTC_MARK_CIRCLEMINUS = 20--wxSTC_MARK_CIRCLEMINUSCONNECTED :: Int-wxSTC_MARK_CIRCLEMINUSCONNECTED = 21--wxSTC_MARK_BACKGROUND :: Int-wxSTC_MARK_BACKGROUND = 22--wxSTC_MARK_DOTDOTDOT :: Int-wxSTC_MARK_DOTDOTDOT = 23--wxSTC_MARK_ARROWS :: Int-wxSTC_MARK_ARROWS = 24--wxSTC_MARK_PIXMAP :: Int-wxSTC_MARK_PIXMAP = 25--wxSTC_MARK_CHARACTER :: Int-wxSTC_MARK_CHARACTER = 10000--wxSTC_MARKNUM_FOLDEREND :: Int-wxSTC_MARKNUM_FOLDEREND = 25--wxSTC_MARKNUM_FOLDEROPENMID :: Int-wxSTC_MARKNUM_FOLDEROPENMID = 26--wxSTC_MARKNUM_FOLDERMIDTAIL :: Int-wxSTC_MARKNUM_FOLDERMIDTAIL = 27--wxSTC_MARKNUM_FOLDERTAIL :: Int-wxSTC_MARKNUM_FOLDERTAIL = 28--wxSTC_MARKNUM_FOLDERSUB :: Int-wxSTC_MARKNUM_FOLDERSUB = 29--wxSTC_MARKNUM_FOLDER :: Int-wxSTC_MARKNUM_FOLDER = 30--wxSTC_MARKNUM_FOLDEROPEN :: Int-wxSTC_MARKNUM_FOLDEROPEN = 31--wxSTC_MASK_FOLDERS :: Int-wxSTC_MASK_FOLDERS = (-33554432)--wxSTC_MARGIN_SYMBOL :: Int-wxSTC_MARGIN_SYMBOL = 0--wxSTC_MARGIN_NUMBER :: Int-wxSTC_MARGIN_NUMBER = 1--wxSTC_STYLE_DEFAULT :: Int-wxSTC_STYLE_DEFAULT = 32--wxSTC_STYLE_LINENUMBER :: Int-wxSTC_STYLE_LINENUMBER = 33--wxSTC_STYLE_BRACELIGHT :: Int-wxSTC_STYLE_BRACELIGHT = 34--wxSTC_STYLE_BRACEBAD :: Int-wxSTC_STYLE_BRACEBAD = 35--wxSTC_STYLE_CONTROLCHAR :: Int-wxSTC_STYLE_CONTROLCHAR = 36--wxSTC_STYLE_INDENTGUIDE :: Int-wxSTC_STYLE_INDENTGUIDE = 37--wxSTC_STYLE_LASTPREDEFINED :: Int-wxSTC_STYLE_LASTPREDEFINED = 39--wxSTC_STYLE_MAX :: Int-wxSTC_STYLE_MAX = 127--wxSTC_CHARSET_ANSI :: Int-wxSTC_CHARSET_ANSI = 0--wxSTC_CHARSET_DEFAULT :: Int-wxSTC_CHARSET_DEFAULT = 1--wxSTC_CHARSET_BALTIC :: Int-wxSTC_CHARSET_BALTIC = 186--wxSTC_CHARSET_CHINESEBIG5 :: Int-wxSTC_CHARSET_CHINESEBIG5 = 136--wxSTC_CHARSET_EASTEUROPE :: Int-wxSTC_CHARSET_EASTEUROPE = 238--wxSTC_CHARSET_GB2312 :: Int-wxSTC_CHARSET_GB2312 = 134--wxSTC_CHARSET_GREEK :: Int-wxSTC_CHARSET_GREEK = 161--wxSTC_CHARSET_HANGUL :: Int-wxSTC_CHARSET_HANGUL = 129--wxSTC_CHARSET_MAC :: Int-wxSTC_CHARSET_MAC = 77--wxSTC_CHARSET_OEM :: Int-wxSTC_CHARSET_OEM = 255--wxSTC_CHARSET_RUSSIAN :: Int-wxSTC_CHARSET_RUSSIAN = 204--wxSTC_CHARSET_SHIFTJIS :: Int-wxSTC_CHARSET_SHIFTJIS = 128--wxSTC_CHARSET_SYMBOL :: Int-wxSTC_CHARSET_SYMBOL = 2--wxSTC_CHARSET_TURKISH :: Int-wxSTC_CHARSET_TURKISH = 162--wxSTC_CHARSET_JOHAB :: Int-wxSTC_CHARSET_JOHAB = 130--wxSTC_CHARSET_HEBREW :: Int-wxSTC_CHARSET_HEBREW = 177--wxSTC_CHARSET_ARABIC :: Int-wxSTC_CHARSET_ARABIC = 178--wxSTC_CHARSET_VIETNAMESE :: Int-wxSTC_CHARSET_VIETNAMESE = 163--wxSTC_CHARSET_THAI :: Int-wxSTC_CHARSET_THAI = 222--wxSTC_CASE_MIXED :: Int-wxSTC_CASE_MIXED = 0--wxSTC_CASE_UPPER :: Int-wxSTC_CASE_UPPER = 1--wxSTC_CASE_LOWER :: Int-wxSTC_CASE_LOWER = 2--wxSTC_INDIC_MAX :: Int-wxSTC_INDIC_MAX = 7--wxSTC_INDIC_PLAIN :: Int-wxSTC_INDIC_PLAIN = 0--wxSTC_INDIC_SQUIGGLE :: Int-wxSTC_INDIC_SQUIGGLE = 1--wxSTC_INDIC_TT :: Int-wxSTC_INDIC_TT = 2--wxSTC_INDIC_DIAGONAL :: Int-wxSTC_INDIC_DIAGONAL = 3--wxSTC_INDIC_STRIKE :: Int-wxSTC_INDIC_STRIKE = 4--wxSTC_INDIC_HIDDEN :: Int-wxSTC_INDIC_HIDDEN = 5--wxSTC_INDIC0_MASK :: Int-wxSTC_INDIC0_MASK = 32--wxSTC_INDIC1_MASK :: Int-wxSTC_INDIC1_MASK = 64--wxSTC_INDIC2_MASK :: Int-wxSTC_INDIC2_MASK = 128--wxSTC_INDICS_MASK :: Int-wxSTC_INDICS_MASK = 224--wxSTC_PRINT_NORMAL :: Int-wxSTC_PRINT_NORMAL = 0--wxSTC_PRINT_INVERTLIGHT :: Int-wxSTC_PRINT_INVERTLIGHT = 1--wxSTC_PRINT_BLACKONWHITE :: Int-wxSTC_PRINT_BLACKONWHITE = 2--wxSTC_PRINT_COLOURONWHITE :: Int-wxSTC_PRINT_COLOURONWHITE = 3--wxSTC_PRINT_COLOURONWHITEDEFAULTBG :: Int-wxSTC_PRINT_COLOURONWHITEDEFAULTBG = 4--wxSTC_FIND_WHOLEWORD :: Int-wxSTC_FIND_WHOLEWORD = 2--wxSTC_FIND_MATCHCASE :: Int-wxSTC_FIND_MATCHCASE = 4--wxSTC_FIND_WORDSTART :: Int-wxSTC_FIND_WORDSTART = 1048576--wxSTC_FIND_REGEXP :: Int-wxSTC_FIND_REGEXP = 2097152--wxSTC_FIND_POSIX :: Int-wxSTC_FIND_POSIX = 4194304--wxSTC_FOLDLEVELBASE :: Int-wxSTC_FOLDLEVELBASE = 1024--wxSTC_FOLDLEVELWHITEFLAG :: Int-wxSTC_FOLDLEVELWHITEFLAG = 4096--wxSTC_FOLDLEVELHEADERFLAG :: Int-wxSTC_FOLDLEVELHEADERFLAG = 8192--wxSTC_FOLDLEVELBOXHEADERFLAG :: Int-wxSTC_FOLDLEVELBOXHEADERFLAG = 16384--wxSTC_FOLDLEVELBOXFOOTERFLAG :: Int-wxSTC_FOLDLEVELBOXFOOTERFLAG = 32768--wxSTC_FOLDLEVELCONTRACTED :: Int-wxSTC_FOLDLEVELCONTRACTED = 65536--wxSTC_FOLDLEVELUNINDENT :: Int-wxSTC_FOLDLEVELUNINDENT = 131072--wxSTC_FOLDLEVELNUMBERMASK :: Int-wxSTC_FOLDLEVELNUMBERMASK = 4095--wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED :: Int-wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = 2--wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED :: Int-wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = 4--wxSTC_FOLDFLAG_LINEAFTER_EXPANDED :: Int-wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = 8--wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED :: Int-wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = 16--wxSTC_FOLDFLAG_LEVELNUMBERS :: Int-wxSTC_FOLDFLAG_LEVELNUMBERS = 64--wxSTC_FOLDFLAG_BOX :: Int-wxSTC_FOLDFLAG_BOX = 1--wxSTC_TIME_FOREVER :: Int-wxSTC_TIME_FOREVER = 10000000--wxSTC_WRAP_NONE :: Int-wxSTC_WRAP_NONE = 0--wxSTC_WRAP_WORD :: Int-wxSTC_WRAP_WORD = 1--wxSTC_CACHE_NONE :: Int-wxSTC_CACHE_NONE = 0--wxSTC_CACHE_CARET :: Int-wxSTC_CACHE_CARET = 1--wxSTC_CACHE_PAGE :: Int-wxSTC_CACHE_PAGE = 2--wxSTC_CACHE_DOCUMENT :: Int-wxSTC_CACHE_DOCUMENT = 3--wxSTC_EDGE_NONE :: Int-wxSTC_EDGE_NONE = 0--wxSTC_EDGE_LINE :: Int-wxSTC_EDGE_LINE = 1--wxSTC_EDGE_BACKGROUND :: Int-wxSTC_EDGE_BACKGROUND = 2--wxSTC_CURSORNORMAL :: Int-wxSTC_CURSORNORMAL = (-1)--wxSTC_CURSORWAIT :: Int-wxSTC_CURSORWAIT = 4--wxSTC_VISIBLE_SLOP :: Int-wxSTC_VISIBLE_SLOP = 1--wxSTC_VISIBLE_STRICT :: Int-wxSTC_VISIBLE_STRICT = 4--wxSTC_CARET_SLOP :: Int-wxSTC_CARET_SLOP = 1--wxSTC_CARET_STRICT :: Int-wxSTC_CARET_STRICT = 4--wxSTC_CARET_JUMPS :: Int-wxSTC_CARET_JUMPS = 16--wxSTC_CARET_EVEN :: Int-wxSTC_CARET_EVEN = 8--wxSTC_SEL_STREAM :: Int-wxSTC_SEL_STREAM = 0--wxSTC_SEL_RECTANGLE :: Int-wxSTC_SEL_RECTANGLE = 1--wxSTC_SEL_LINES :: Int-wxSTC_SEL_LINES = 2--wxSTC_KEYWORDSET_MAX :: Int-wxSTC_KEYWORDSET_MAX = 8--wxSTC_MOD_INSERTTEXT :: Int-wxSTC_MOD_INSERTTEXT = 1--wxSTC_MOD_DELETETEXT :: Int-wxSTC_MOD_DELETETEXT = 2--wxSTC_MOD_CHANGESTYLE :: Int-wxSTC_MOD_CHANGESTYLE = 4--wxSTC_MOD_CHANGEFOLD :: Int-wxSTC_MOD_CHANGEFOLD = 8--wxSTC_PERFORMED_USER :: Int-wxSTC_PERFORMED_USER = 16--wxSTC_PERFORMED_UNDO :: Int-wxSTC_PERFORMED_UNDO = 32--wxSTC_PERFORMED_REDO :: Int-wxSTC_PERFORMED_REDO = 64--wxSTC_LASTSTEPINUNDOREDO :: Int-wxSTC_LASTSTEPINUNDOREDO = 256--wxSTC_MOD_CHANGEMARKER :: Int-wxSTC_MOD_CHANGEMARKER = 512--wxSTC_MOD_BEFOREINSERT :: Int-wxSTC_MOD_BEFOREINSERT = 1024--wxSTC_MOD_BEFOREDELETE :: Int-wxSTC_MOD_BEFOREDELETE = 2048--wxSTC_MODEVENTMASKALL :: Int-wxSTC_MODEVENTMASKALL = 3959--wxSTC_KEY_DOWN :: Int-wxSTC_KEY_DOWN = 300--wxSTC_KEY_UP :: Int-wxSTC_KEY_UP = 301--wxSTC_KEY_LEFT :: Int-wxSTC_KEY_LEFT = 302--wxSTC_KEY_RIGHT :: Int-wxSTC_KEY_RIGHT = 303--wxSTC_KEY_HOME :: Int-wxSTC_KEY_HOME = 304--wxSTC_KEY_END :: Int-wxSTC_KEY_END = 305--wxSTC_KEY_PRIOR :: Int-wxSTC_KEY_PRIOR = 306--wxSTC_KEY_NEXT :: Int-wxSTC_KEY_NEXT = 307--wxSTC_KEY_DELETE :: Int-wxSTC_KEY_DELETE = 308--wxSTC_KEY_INSERT :: Int-wxSTC_KEY_INSERT = 309--wxSTC_KEY_ESCAPE :: Int-wxSTC_KEY_ESCAPE = 7--wxSTC_KEY_BACK :: Int-wxSTC_KEY_BACK = 8--wxSTC_KEY_TAB :: Int-wxSTC_KEY_TAB = 9--wxSTC_KEY_RETURN :: Int-wxSTC_KEY_RETURN = 13--wxSTC_KEY_ADD :: Int-wxSTC_KEY_ADD = 310--wxSTC_KEY_SUBTRACT :: Int-wxSTC_KEY_SUBTRACT = 311--wxSTC_KEY_DIVIDE :: Int-wxSTC_KEY_DIVIDE = 312--wxSTC_SCMOD_SHIFT :: Int-wxSTC_SCMOD_SHIFT = 1--wxSTC_SCMOD_CTRL :: Int-wxSTC_SCMOD_CTRL = 2--wxSTC_SCMOD_ALT :: Int-wxSTC_SCMOD_ALT = 4--wxSTC_LEX_CONTAINER :: Int-wxSTC_LEX_CONTAINER = 0--wxSTC_LEX_NULL :: Int-wxSTC_LEX_NULL = 1--wxSTC_LEX_PYTHON :: Int-wxSTC_LEX_PYTHON = 2--wxSTC_LEX_CPP :: Int-wxSTC_LEX_CPP = 3--wxSTC_LEX_HTML :: Int-wxSTC_LEX_HTML = 4--wxSTC_LEX_XML :: Int-wxSTC_LEX_XML = 5--wxSTC_LEX_PERL :: Int-wxSTC_LEX_PERL = 6--wxSTC_LEX_SQL :: Int-wxSTC_LEX_SQL = 7--wxSTC_LEX_VB :: Int-wxSTC_LEX_VB = 8--wxSTC_LEX_PROPERTIES :: Int-wxSTC_LEX_PROPERTIES = 9--wxSTC_LEX_ERRORLIST :: Int-wxSTC_LEX_ERRORLIST = 10--wxSTC_LEX_MAKEFILE :: Int-wxSTC_LEX_MAKEFILE = 11--wxSTC_LEX_BATCH :: Int-wxSTC_LEX_BATCH = 12--wxSTC_LEX_XCODE :: Int-wxSTC_LEX_XCODE = 13--wxSTC_LEX_LATEX :: Int-wxSTC_LEX_LATEX = 14--wxSTC_LEX_LUA :: Int-wxSTC_LEX_LUA = 15--wxSTC_LEX_DIFF :: Int-wxSTC_LEX_DIFF = 16--wxSTC_LEX_CONF :: Int-wxSTC_LEX_CONF = 17--wxSTC_LEX_PASCAL :: Int-wxSTC_LEX_PASCAL = 18--wxSTC_LEX_AVE :: Int-wxSTC_LEX_AVE = 19--wxSTC_LEX_ADA :: Int-wxSTC_LEX_ADA = 20--wxSTC_LEX_LISP :: Int-wxSTC_LEX_LISP = 21--wxSTC_LEX_RUBY :: Int-wxSTC_LEX_RUBY = 22--wxSTC_LEX_EIFFEL :: Int-wxSTC_LEX_EIFFEL = 23--wxSTC_LEX_EIFFELKW :: Int-wxSTC_LEX_EIFFELKW = 24--wxSTC_LEX_TCL :: Int-wxSTC_LEX_TCL = 25--wxSTC_LEX_NNCRONTAB :: Int-wxSTC_LEX_NNCRONTAB = 26--wxSTC_LEX_BULLANT :: Int-wxSTC_LEX_BULLANT = 27--wxSTC_LEX_VBSCRIPT :: Int-wxSTC_LEX_VBSCRIPT = 28--wxSTC_LEX_ASP :: Int-wxSTC_LEX_ASP = 29--wxSTC_LEX_PHP :: Int-wxSTC_LEX_PHP = 30--wxSTC_LEX_BAAN :: Int-wxSTC_LEX_BAAN = 31--wxSTC_LEX_MATLAB :: Int-wxSTC_LEX_MATLAB = 32--wxSTC_LEX_SCRIPTOL :: Int-wxSTC_LEX_SCRIPTOL = 33--wxSTC_LEX_ASM :: Int-wxSTC_LEX_ASM = 34--wxSTC_LEX_CPPNOCASE :: Int-wxSTC_LEX_CPPNOCASE = 35--wxSTC_LEX_FORTRAN :: Int-wxSTC_LEX_FORTRAN = 36--wxSTC_LEX_F77 :: Int-wxSTC_LEX_F77 = 37--wxSTC_LEX_CSS :: Int-wxSTC_LEX_CSS = 38--wxSTC_LEX_POV :: Int-wxSTC_LEX_POV = 39--wxSTC_LEX_LOUT :: Int-wxSTC_LEX_LOUT = 40--wxSTC_LEX_ESCRIPT :: Int-wxSTC_LEX_ESCRIPT = 41--wxSTC_LEX_PS :: Int-wxSTC_LEX_PS = 42--wxSTC_LEX_NSIS :: Int-wxSTC_LEX_NSIS = 43--wxSTC_LEX_MMIXAL :: Int-wxSTC_LEX_MMIXAL = 44--wxSTC_LEX_PHPSCRIPT :: Int-wxSTC_LEX_PHPSCRIPT = 69--wxSTC_LEX_TADS3 :: Int-wxSTC_LEX_TADS3 = 70--wxSTC_LEX_REBOL :: Int-wxSTC_LEX_REBOL = 71--wxSTC_LEX_SMALLTALK :: Int-wxSTC_LEX_SMALLTALK = 72--wxSTC_LEX_FLAGSHIP :: Int-wxSTC_LEX_FLAGSHIP = 73--wxSTC_LEX_CSOUND :: Int-wxSTC_LEX_CSOUND = 74--wxSTC_LEX_FREEBASIC :: Int-wxSTC_LEX_FREEBASIC = 75--wxSTC_LEX_AUTOMATIC :: Int-wxSTC_LEX_AUTOMATIC = 1000--wxSTC_LEX_HASKELL :: Int-wxSTC_LEX_HASKELL = 68--wxSTC_P_DEFAULT :: Int-wxSTC_P_DEFAULT = 0--wxSTC_P_COMMENTLINE :: Int-wxSTC_P_COMMENTLINE = 1--wxSTC_P_NUMBER :: Int-wxSTC_P_NUMBER = 2--wxSTC_P_STRING :: Int-wxSTC_P_STRING = 3--wxSTC_P_CHARACTER :: Int-wxSTC_P_CHARACTER = 4--wxSTC_P_WORD :: Int-wxSTC_P_WORD = 5--wxSTC_P_TRIPLE :: Int-wxSTC_P_TRIPLE = 6--wxSTC_P_TRIPLEDOUBLE :: Int-wxSTC_P_TRIPLEDOUBLE = 7--wxSTC_P_CLASSNAME :: Int-wxSTC_P_CLASSNAME = 8--wxSTC_P_DEFNAME :: Int-wxSTC_P_DEFNAME = 9--wxSTC_P_OPERATOR :: Int-wxSTC_P_OPERATOR = 10--wxSTC_P_IDENTIFIER :: Int-wxSTC_P_IDENTIFIER = 11--wxSTC_P_COMMENTBLOCK :: Int-wxSTC_P_COMMENTBLOCK = 12--wxSTC_P_STRINGEOL :: Int-wxSTC_P_STRINGEOL = 13--wxSTC_C_DEFAULT :: Int-wxSTC_C_DEFAULT = 0--wxSTC_C_COMMENT :: Int-wxSTC_C_COMMENT = 1--wxSTC_C_COMMENTLINE :: Int-wxSTC_C_COMMENTLINE = 2--wxSTC_C_COMMENTDOC :: Int-wxSTC_C_COMMENTDOC = 3--wxSTC_C_NUMBER :: Int-wxSTC_C_NUMBER = 4--wxSTC_C_WORD :: Int-wxSTC_C_WORD = 5--wxSTC_C_STRING :: Int-wxSTC_C_STRING = 6--wxSTC_C_CHARACTER :: Int-wxSTC_C_CHARACTER = 7--wxSTC_C_UUID :: Int-wxSTC_C_UUID = 8--wxSTC_C_PREPROCESSOR :: Int-wxSTC_C_PREPROCESSOR = 9--wxSTC_C_OPERATOR :: Int-wxSTC_C_OPERATOR = 10--wxSTC_C_IDENTIFIER :: Int-wxSTC_C_IDENTIFIER = 11--wxSTC_C_STRINGEOL :: Int-wxSTC_C_STRINGEOL = 12--wxSTC_C_VERBATIM :: Int-wxSTC_C_VERBATIM = 13--wxSTC_C_REGEX :: Int-wxSTC_C_REGEX = 14--wxSTC_C_COMMENTLINEDOC :: Int-wxSTC_C_COMMENTLINEDOC = 15--wxSTC_C_WORD2 :: Int-wxSTC_C_WORD2 = 16--wxSTC_C_COMMENTDOCKEYWORD :: Int-wxSTC_C_COMMENTDOCKEYWORD = 17--wxSTC_C_COMMENTDOCKEYWORDERROR :: Int-wxSTC_C_COMMENTDOCKEYWORDERROR = 18--wxSTC_C_GLOBALCLASS :: Int-wxSTC_C_GLOBALCLASS = 19--wxSTC_H_DEFAULT :: Int-wxSTC_H_DEFAULT = 0--wxSTC_H_TAG :: Int-wxSTC_H_TAG = 1--wxSTC_H_TAGUNKNOWN :: Int-wxSTC_H_TAGUNKNOWN = 2--wxSTC_H_ATTRIBUTE :: Int-wxSTC_H_ATTRIBUTE = 3--wxSTC_H_ATTRIBUTEUNKNOWN :: Int-wxSTC_H_ATTRIBUTEUNKNOWN = 4--wxSTC_H_NUMBER :: Int-wxSTC_H_NUMBER = 5--wxSTC_H_DOUBLESTRING :: Int-wxSTC_H_DOUBLESTRING = 6--wxSTC_H_SINGLESTRING :: Int-wxSTC_H_SINGLESTRING = 7--wxSTC_H_OTHER :: Int-wxSTC_H_OTHER = 8--wxSTC_H_COMMENT :: Int-wxSTC_H_COMMENT = 9--wxSTC_H_ENTITY :: Int-wxSTC_H_ENTITY = 10--wxSTC_H_TAGEND :: Int-wxSTC_H_TAGEND = 11--wxSTC_H_XMLSTART :: Int-wxSTC_H_XMLSTART = 12--wxSTC_H_XMLEND :: Int-wxSTC_H_XMLEND = 13--wxSTC_H_SCRIPT :: Int-wxSTC_H_SCRIPT = 14--wxSTC_H_ASP :: Int-wxSTC_H_ASP = 15--wxSTC_H_ASPAT :: Int-wxSTC_H_ASPAT = 16--wxSTC_H_CDATA :: Int-wxSTC_H_CDATA = 17--wxSTC_H_QUESTION :: Int-wxSTC_H_QUESTION = 18--wxSTC_H_VALUE :: Int-wxSTC_H_VALUE = 19--wxSTC_H_XCCOMMENT :: Int-wxSTC_H_XCCOMMENT = 20--wxSTC_H_SGML_DEFAULT :: Int-wxSTC_H_SGML_DEFAULT = 21--wxSTC_H_SGML_COMMAND :: Int-wxSTC_H_SGML_COMMAND = 22--wxSTC_H_SGML_1ST_PARAM :: Int-wxSTC_H_SGML_1ST_PARAM = 23--wxSTC_H_SGML_DOUBLESTRING :: Int-wxSTC_H_SGML_DOUBLESTRING = 24--wxSTC_H_SGML_SIMPLESTRING :: Int-wxSTC_H_SGML_SIMPLESTRING = 25--wxSTC_H_SGML_ERROR :: Int-wxSTC_H_SGML_ERROR = 26--wxSTC_H_SGML_SPECIAL :: Int-wxSTC_H_SGML_SPECIAL = 27--wxSTC_H_SGML_ENTITY :: Int-wxSTC_H_SGML_ENTITY = 28--wxSTC_H_SGML_COMMENT :: Int-wxSTC_H_SGML_COMMENT = 29--wxSTC_H_SGML_1ST_PARAM_COMMENT :: Int-wxSTC_H_SGML_1ST_PARAM_COMMENT = 30--wxSTC_H_SGML_BLOCK_DEFAULT :: Int-wxSTC_H_SGML_BLOCK_DEFAULT = 31--wxSTC_HA_DEFAULT :: Int-wxSTC_HA_DEFAULT = 0--wxSTC_HA_IDENTIFIER :: Int-wxSTC_HA_IDENTIFIER = 1--wxSTC_HA_KEYWORD :: Int-wxSTC_HA_KEYWORD = 2--wxSTC_HA_NUMBER :: Int-wxSTC_HA_NUMBER = 3--wxSTC_HA_STRING :: Int-wxSTC_HA_STRING = 4--wxSTC_HA_CHARACTER :: Int-wxSTC_HA_CHARACTER = 5--wxSTC_HA_CLASS :: Int-wxSTC_HA_CLASS = 6--wxSTC_HA_MODULE :: Int-wxSTC_HA_MODULE = 7--wxSTC_HA_CAPITAL :: Int-wxSTC_HA_CAPITAL = 8--wxSTC_HA_DATA :: Int-wxSTC_HA_DATA = 9--wxSTC_HA_IMPORT :: Int-wxSTC_HA_IMPORT = 10--wxSTC_HA_OPERATOR :: Int-wxSTC_HA_OPERATOR = 11--wxSTC_HA_INSTANCE :: Int-wxSTC_HA_INSTANCE = 12--wxSTC_HA_COMMENTLINE :: Int-wxSTC_HA_COMMENTLINE = 13--wxSTC_HA_COMMENTBLOCK :: Int-wxSTC_HA_COMMENTBLOCK = 14--wxSTC_HA_COMMENTBLOCK2 :: Int-wxSTC_HA_COMMENTBLOCK2 = 15--wxSTC_HA_COMMENTBLOCK3 :: Int-wxSTC_HA_COMMENTBLOCK3 = 16--wxSTC_HA_PREPROCESSOR :: Int-wxSTC_HA_PREPROCESSOR = 17--wxSTC_HJ_START :: Int-wxSTC_HJ_START = 40--wxSTC_HJ_DEFAULT :: Int-wxSTC_HJ_DEFAULT = 41--wxSTC_HJ_COMMENT :: Int-wxSTC_HJ_COMMENT = 42--wxSTC_HJ_COMMENTLINE :: Int-wxSTC_HJ_COMMENTLINE = 43--wxSTC_HJ_COMMENTDOC :: Int-wxSTC_HJ_COMMENTDOC = 44--wxSTC_HJ_NUMBER :: Int-wxSTC_HJ_NUMBER = 45--wxSTC_HJ_WORD :: Int-wxSTC_HJ_WORD = 46--wxSTC_HJ_KEYWORD :: Int-wxSTC_HJ_KEYWORD = 47--wxSTC_HJ_DOUBLESTRING :: Int-wxSTC_HJ_DOUBLESTRING = 48--wxSTC_HJ_SINGLESTRING :: Int-wxSTC_HJ_SINGLESTRING = 49--wxSTC_HJ_SYMBOLS :: Int-wxSTC_HJ_SYMBOLS = 50--wxSTC_HJ_STRINGEOL :: Int-wxSTC_HJ_STRINGEOL = 51--wxSTC_HJ_REGEX :: Int-wxSTC_HJ_REGEX = 52--wxSTC_HJA_START :: Int-wxSTC_HJA_START = 55--wxSTC_HJA_DEFAULT :: Int-wxSTC_HJA_DEFAULT = 56--wxSTC_HJA_COMMENT :: Int-wxSTC_HJA_COMMENT = 57--wxSTC_HJA_COMMENTLINE :: Int-wxSTC_HJA_COMMENTLINE = 58--wxSTC_HJA_COMMENTDOC :: Int-wxSTC_HJA_COMMENTDOC = 59--wxSTC_HJA_NUMBER :: Int-wxSTC_HJA_NUMBER = 60--wxSTC_HJA_WORD :: Int-wxSTC_HJA_WORD = 61--wxSTC_HJA_KEYWORD :: Int-wxSTC_HJA_KEYWORD = 62--wxSTC_HJA_DOUBLESTRING :: Int-wxSTC_HJA_DOUBLESTRING = 63--wxSTC_HJA_SINGLESTRING :: Int-wxSTC_HJA_SINGLESTRING = 64--wxSTC_HJA_SYMBOLS :: Int-wxSTC_HJA_SYMBOLS = 65--wxSTC_HJA_STRINGEOL :: Int-wxSTC_HJA_STRINGEOL = 66--wxSTC_HJA_REGEX :: Int-wxSTC_HJA_REGEX = 67--wxSTC_HB_START :: Int-wxSTC_HB_START = 70--wxSTC_HB_DEFAULT :: Int-wxSTC_HB_DEFAULT = 71--wxSTC_HB_COMMENTLINE :: Int-wxSTC_HB_COMMENTLINE = 72--wxSTC_HB_NUMBER :: Int-wxSTC_HB_NUMBER = 73--wxSTC_HB_WORD :: Int-wxSTC_HB_WORD = 74--wxSTC_HB_STRING :: Int-wxSTC_HB_STRING = 75--wxSTC_HB_IDENTIFIER :: Int-wxSTC_HB_IDENTIFIER = 76--wxSTC_HB_STRINGEOL :: Int-wxSTC_HB_STRINGEOL = 77--wxSTC_HBA_START :: Int-wxSTC_HBA_START = 80--wxSTC_HBA_DEFAULT :: Int-wxSTC_HBA_DEFAULT = 81--wxSTC_HBA_COMMENTLINE :: Int-wxSTC_HBA_COMMENTLINE = 82--wxSTC_HBA_NUMBER :: Int-wxSTC_HBA_NUMBER = 83--wxSTC_HBA_WORD :: Int-wxSTC_HBA_WORD = 84--wxSTC_HBA_STRING :: Int-wxSTC_HBA_STRING = 85--wxSTC_HBA_IDENTIFIER :: Int-wxSTC_HBA_IDENTIFIER = 86--wxSTC_HBA_STRINGEOL :: Int-wxSTC_HBA_STRINGEOL = 87--wxSTC_HP_START :: Int-wxSTC_HP_START = 90--wxSTC_HP_DEFAULT :: Int-wxSTC_HP_DEFAULT = 91--wxSTC_HP_COMMENTLINE :: Int-wxSTC_HP_COMMENTLINE = 92--wxSTC_HP_NUMBER :: Int-wxSTC_HP_NUMBER = 93--wxSTC_HP_STRING :: Int-wxSTC_HP_STRING = 94--wxSTC_HP_CHARACTER :: Int-wxSTC_HP_CHARACTER = 95--wxSTC_HP_WORD :: Int-wxSTC_HP_WORD = 96--wxSTC_HP_TRIPLE :: Int-wxSTC_HP_TRIPLE = 97--wxSTC_HP_TRIPLEDOUBLE :: Int-wxSTC_HP_TRIPLEDOUBLE = 98--wxSTC_HP_CLASSNAME :: Int-wxSTC_HP_CLASSNAME = 99--wxSTC_HP_DEFNAME :: Int-wxSTC_HP_DEFNAME = 100--wxSTC_HP_OPERATOR :: Int-wxSTC_HP_OPERATOR = 101--wxSTC_HP_IDENTIFIER :: Int-wxSTC_HP_IDENTIFIER = 102--wxSTC_HPA_START :: Int-wxSTC_HPA_START = 105--wxSTC_HPA_DEFAULT :: Int-wxSTC_HPA_DEFAULT = 106--wxSTC_HPA_COMMENTLINE :: Int-wxSTC_HPA_COMMENTLINE = 107--wxSTC_HPA_NUMBER :: Int-wxSTC_HPA_NUMBER = 108--wxSTC_HPA_STRING :: Int-wxSTC_HPA_STRING = 109--wxSTC_HPA_CHARACTER :: Int-wxSTC_HPA_CHARACTER = 110--wxSTC_HPA_WORD :: Int-wxSTC_HPA_WORD = 111--wxSTC_HPA_TRIPLE :: Int-wxSTC_HPA_TRIPLE = 112--wxSTC_HPA_TRIPLEDOUBLE :: Int-wxSTC_HPA_TRIPLEDOUBLE = 113--wxSTC_HPA_CLASSNAME :: Int-wxSTC_HPA_CLASSNAME = 114--wxSTC_HPA_DEFNAME :: Int-wxSTC_HPA_DEFNAME = 115--wxSTC_HPA_OPERATOR :: Int-wxSTC_HPA_OPERATOR = 116--wxSTC_HPA_IDENTIFIER :: Int-wxSTC_HPA_IDENTIFIER = 117--wxSTC_HPHP_DEFAULT :: Int-wxSTC_HPHP_DEFAULT = 118--wxSTC_HPHP_HSTRING :: Int-wxSTC_HPHP_HSTRING = 119--wxSTC_HPHP_SIMPLESTRING :: Int-wxSTC_HPHP_SIMPLESTRING = 120--wxSTC_HPHP_WORD :: Int-wxSTC_HPHP_WORD = 121--wxSTC_HPHP_NUMBER :: Int-wxSTC_HPHP_NUMBER = 122--wxSTC_HPHP_VARIABLE :: Int-wxSTC_HPHP_VARIABLE = 123--wxSTC_HPHP_COMMENT :: Int-wxSTC_HPHP_COMMENT = 124--wxSTC_HPHP_COMMENTLINE :: Int-wxSTC_HPHP_COMMENTLINE = 125--wxSTC_HPHP_HSTRING_VARIABLE :: Int-wxSTC_HPHP_HSTRING_VARIABLE = 126--wxSTC_HPHP_OPERATOR :: Int-wxSTC_HPHP_OPERATOR = 127--wxSTC_PL_DEFAULT :: Int-wxSTC_PL_DEFAULT = 0--wxSTC_PL_ERROR :: Int-wxSTC_PL_ERROR = 1--wxSTC_PL_COMMENTLINE :: Int-wxSTC_PL_COMMENTLINE = 2--wxSTC_PL_POD :: Int-wxSTC_PL_POD = 3--wxSTC_PL_NUMBER :: Int-wxSTC_PL_NUMBER = 4--wxSTC_PL_WORD :: Int-wxSTC_PL_WORD = 5--wxSTC_PL_STRING :: Int-wxSTC_PL_STRING = 6--wxSTC_PL_CHARACTER :: Int-wxSTC_PL_CHARACTER = 7--wxSTC_PL_PUNCTUATION :: Int-wxSTC_PL_PUNCTUATION = 8--wxSTC_PL_PREPROCESSOR :: Int-wxSTC_PL_PREPROCESSOR = 9--wxSTC_PL_OPERATOR :: Int-wxSTC_PL_OPERATOR = 10--wxSTC_PL_IDENTIFIER :: Int-wxSTC_PL_IDENTIFIER = 11--wxSTC_PL_SCALAR :: Int-wxSTC_PL_SCALAR = 12--wxSTC_PL_ARRAY :: Int-wxSTC_PL_ARRAY = 13--wxSTC_PL_HASH :: Int-wxSTC_PL_HASH = 14--wxSTC_PL_SYMBOLTABLE :: Int-wxSTC_PL_SYMBOLTABLE = 15--wxSTC_PL_REGEX :: Int-wxSTC_PL_REGEX = 17--wxSTC_PL_REGSUBST :: Int-wxSTC_PL_REGSUBST = 18--wxSTC_PL_LONGQUOTE :: Int-wxSTC_PL_LONGQUOTE = 19--wxSTC_PL_BACKTICKS :: Int-wxSTC_PL_BACKTICKS = 20--wxSTC_PL_DATASECTION :: Int-wxSTC_PL_DATASECTION = 21--wxSTC_PL_HERE_DELIM :: Int-wxSTC_PL_HERE_DELIM = 22--wxSTC_PL_HERE_Q :: Int-wxSTC_PL_HERE_Q = 23--wxSTC_PL_HERE_QQ :: Int-wxSTC_PL_HERE_QQ = 24--wxSTC_PL_HERE_QX :: Int-wxSTC_PL_HERE_QX = 25--wxSTC_PL_STRING_Q :: Int-wxSTC_PL_STRING_Q = 26--wxSTC_PL_STRING_QQ :: Int-wxSTC_PL_STRING_QQ = 27--wxSTC_PL_STRING_QX :: Int-wxSTC_PL_STRING_QX = 28--wxSTC_PL_STRING_QR :: Int-wxSTC_PL_STRING_QR = 29--wxSTC_PL_STRING_QW :: Int-wxSTC_PL_STRING_QW = 30--wxSTC_B_DEFAULT :: Int-wxSTC_B_DEFAULT = 0--wxSTC_B_COMMENT :: Int-wxSTC_B_COMMENT = 1--wxSTC_B_NUMBER :: Int-wxSTC_B_NUMBER = 2--wxSTC_B_KEYWORD :: Int-wxSTC_B_KEYWORD = 3--wxSTC_B_STRING :: Int-wxSTC_B_STRING = 4--wxSTC_B_PREPROCESSOR :: Int-wxSTC_B_PREPROCESSOR = 5--wxSTC_B_OPERATOR :: Int-wxSTC_B_OPERATOR = 6--wxSTC_B_IDENTIFIER :: Int-wxSTC_B_IDENTIFIER = 7--wxSTC_B_DATE :: Int-wxSTC_B_DATE = 8--wxSTC_PROPS_DEFAULT :: Int-wxSTC_PROPS_DEFAULT = 0--wxSTC_PROPS_COMMENT :: Int-wxSTC_PROPS_COMMENT = 1--wxSTC_PROPS_SECTION :: Int-wxSTC_PROPS_SECTION = 2--wxSTC_PROPS_ASSIGNMENT :: Int-wxSTC_PROPS_ASSIGNMENT = 3--wxSTC_PROPS_DEFVAL :: Int-wxSTC_PROPS_DEFVAL = 4--wxSTC_L_DEFAULT :: Int-wxSTC_L_DEFAULT = 0--wxSTC_L_COMMAND :: Int-wxSTC_L_COMMAND = 1--wxSTC_L_TAG :: Int-wxSTC_L_TAG = 2--wxSTC_L_MATH :: Int-wxSTC_L_MATH = 3--wxSTC_L_COMMENT :: Int-wxSTC_L_COMMENT = 4--wxSTC_LUA_DEFAULT :: Int-wxSTC_LUA_DEFAULT = 0--wxSTC_LUA_COMMENT :: Int-wxSTC_LUA_COMMENT = 1--wxSTC_LUA_COMMENTLINE :: Int-wxSTC_LUA_COMMENTLINE = 2--wxSTC_LUA_COMMENTDOC :: Int-wxSTC_LUA_COMMENTDOC = 3--wxSTC_LUA_NUMBER :: Int-wxSTC_LUA_NUMBER = 4--wxSTC_LUA_WORD :: Int-wxSTC_LUA_WORD = 5--wxSTC_LUA_STRING :: Int-wxSTC_LUA_STRING = 6--wxSTC_LUA_CHARACTER :: Int-wxSTC_LUA_CHARACTER = 7--wxSTC_LUA_LITERALSTRING :: Int-wxSTC_LUA_LITERALSTRING = 8--wxSTC_LUA_PREPROCESSOR :: Int-wxSTC_LUA_PREPROCESSOR = 9--wxSTC_LUA_OPERATOR :: Int-wxSTC_LUA_OPERATOR = 10--wxSTC_LUA_IDENTIFIER :: Int-wxSTC_LUA_IDENTIFIER = 11--wxSTC_LUA_STRINGEOL :: Int-wxSTC_LUA_STRINGEOL = 12--wxSTC_LUA_WORD2 :: Int-wxSTC_LUA_WORD2 = 13--wxSTC_LUA_WORD3 :: Int-wxSTC_LUA_WORD3 = 14--wxSTC_LUA_WORD4 :: Int-wxSTC_LUA_WORD4 = 15--wxSTC_LUA_WORD5 :: Int-wxSTC_LUA_WORD5 = 16--wxSTC_LUA_WORD6 :: Int-wxSTC_LUA_WORD6 = 17--wxSTC_LUA_WORD7 :: Int-wxSTC_LUA_WORD7 = 18--wxSTC_LUA_WORD8 :: Int-wxSTC_LUA_WORD8 = 19--wxSTC_ERR_DEFAULT :: Int-wxSTC_ERR_DEFAULT = 0--wxSTC_ERR_PYTHON :: Int-wxSTC_ERR_PYTHON = 1--wxSTC_ERR_GCC :: Int-wxSTC_ERR_GCC = 2--wxSTC_ERR_MS :: Int-wxSTC_ERR_MS = 3--wxSTC_ERR_CMD :: Int-wxSTC_ERR_CMD = 4--wxSTC_ERR_BORLAND :: Int-wxSTC_ERR_BORLAND = 5--wxSTC_ERR_PERL :: Int-wxSTC_ERR_PERL = 6--wxSTC_ERR_NET :: Int-wxSTC_ERR_NET = 7--wxSTC_ERR_LUA :: Int-wxSTC_ERR_LUA = 8--wxSTC_ERR_CTAG :: Int-wxSTC_ERR_CTAG = 9--wxSTC_ERR_DIFF_CHANGED :: Int-wxSTC_ERR_DIFF_CHANGED = 10--wxSTC_ERR_DIFF_ADDITION :: Int-wxSTC_ERR_DIFF_ADDITION = 11--wxSTC_ERR_DIFF_DELETION :: Int-wxSTC_ERR_DIFF_DELETION = 12--wxSTC_ERR_DIFF_MESSAGE :: Int-wxSTC_ERR_DIFF_MESSAGE = 13--wxSTC_ERR_PHP :: Int-wxSTC_ERR_PHP = 14--wxSTC_ERR_ELF :: Int-wxSTC_ERR_ELF = 15--wxSTC_ERR_IFC :: Int-wxSTC_ERR_IFC = 16--wxSTC_BAT_DEFAULT :: Int-wxSTC_BAT_DEFAULT = 0--wxSTC_BAT_COMMENT :: Int-wxSTC_BAT_COMMENT = 1--wxSTC_BAT_WORD :: Int-wxSTC_BAT_WORD = 2--wxSTC_BAT_LABEL :: Int-wxSTC_BAT_LABEL = 3--wxSTC_BAT_HIDE :: Int-wxSTC_BAT_HIDE = 4--wxSTC_BAT_COMMAND :: Int-wxSTC_BAT_COMMAND = 5--wxSTC_BAT_IDENTIFIER :: Int-wxSTC_BAT_IDENTIFIER = 6--wxSTC_BAT_OPERATOR :: Int-wxSTC_BAT_OPERATOR = 7--wxSTC_MAKE_DEFAULT :: Int-wxSTC_MAKE_DEFAULT = 0--wxSTC_MAKE_COMMENT :: Int-wxSTC_MAKE_COMMENT = 1--wxSTC_MAKE_PREPROCESSOR :: Int-wxSTC_MAKE_PREPROCESSOR = 2--wxSTC_MAKE_IDENTIFIER :: Int-wxSTC_MAKE_IDENTIFIER = 3--wxSTC_MAKE_OPERATOR :: Int-wxSTC_MAKE_OPERATOR = 4--wxSTC_MAKE_TARGET :: Int-wxSTC_MAKE_TARGET = 5--wxSTC_MAKE_IDEOL :: Int-wxSTC_MAKE_IDEOL = 9--wxSTC_DIFF_DEFAULT :: Int-wxSTC_DIFF_DEFAULT = 0--wxSTC_DIFF_COMMENT :: Int-wxSTC_DIFF_COMMENT = 1--wxSTC_DIFF_COMMAND :: Int-wxSTC_DIFF_COMMAND = 2--wxSTC_DIFF_HEADER :: Int-wxSTC_DIFF_HEADER = 3--wxSTC_DIFF_POSITION :: Int-wxSTC_DIFF_POSITION = 4--wxSTC_DIFF_DELETED :: Int-wxSTC_DIFF_DELETED = 5--wxSTC_DIFF_ADDED :: Int-wxSTC_DIFF_ADDED = 6--wxSTC_CONF_DEFAULT :: Int-wxSTC_CONF_DEFAULT = 0--wxSTC_CONF_COMMENT :: Int-wxSTC_CONF_COMMENT = 1--wxSTC_CONF_NUMBER :: Int-wxSTC_CONF_NUMBER = 2--wxSTC_CONF_IDENTIFIER :: Int-wxSTC_CONF_IDENTIFIER = 3--wxSTC_CONF_EXTENSION :: Int-wxSTC_CONF_EXTENSION = 4--wxSTC_CONF_PARAMETER :: Int-wxSTC_CONF_PARAMETER = 5--wxSTC_CONF_STRING :: Int-wxSTC_CONF_STRING = 6--wxSTC_CONF_OPERATOR :: Int-wxSTC_CONF_OPERATOR = 7--wxSTC_CONF_IP :: Int-wxSTC_CONF_IP = 8--wxSTC_CONF_DIRECTIVE :: Int-wxSTC_CONF_DIRECTIVE = 9--wxSTC_AVE_DEFAULT :: Int-wxSTC_AVE_DEFAULT = 0--wxSTC_AVE_COMMENT :: Int-wxSTC_AVE_COMMENT = 1--wxSTC_AVE_NUMBER :: Int-wxSTC_AVE_NUMBER = 2--wxSTC_AVE_WORD :: Int-wxSTC_AVE_WORD = 3--wxSTC_AVE_STRING :: Int-wxSTC_AVE_STRING = 6--wxSTC_AVE_ENUM :: Int-wxSTC_AVE_ENUM = 7--wxSTC_AVE_STRINGEOL :: Int-wxSTC_AVE_STRINGEOL = 8--wxSTC_AVE_IDENTIFIER :: Int-wxSTC_AVE_IDENTIFIER = 9--wxSTC_AVE_OPERATOR :: Int-wxSTC_AVE_OPERATOR = 10--wxSTC_AVE_WORD1 :: Int-wxSTC_AVE_WORD1 = 11--wxSTC_AVE_WORD2 :: Int-wxSTC_AVE_WORD2 = 12--wxSTC_AVE_WORD3 :: Int-wxSTC_AVE_WORD3 = 13--wxSTC_AVE_WORD4 :: Int-wxSTC_AVE_WORD4 = 14--wxSTC_AVE_WORD5 :: Int-wxSTC_AVE_WORD5 = 15--wxSTC_AVE_WORD6 :: Int-wxSTC_AVE_WORD6 = 16--wxSTC_ADA_DEFAULT :: Int-wxSTC_ADA_DEFAULT = 0--wxSTC_ADA_WORD :: Int-wxSTC_ADA_WORD = 1--wxSTC_ADA_IDENTIFIER :: Int-wxSTC_ADA_IDENTIFIER = 2--wxSTC_ADA_NUMBER :: Int-wxSTC_ADA_NUMBER = 3--wxSTC_ADA_DELIMITER :: Int-wxSTC_ADA_DELIMITER = 4--wxSTC_ADA_CHARACTER :: Int-wxSTC_ADA_CHARACTER = 5--wxSTC_ADA_CHARACTEREOL :: Int-wxSTC_ADA_CHARACTEREOL = 6--wxSTC_ADA_STRING :: Int-wxSTC_ADA_STRING = 7--wxSTC_ADA_STRINGEOL :: Int-wxSTC_ADA_STRINGEOL = 8--wxSTC_ADA_LABEL :: Int-wxSTC_ADA_LABEL = 9--wxSTC_ADA_COMMENTLINE :: Int-wxSTC_ADA_COMMENTLINE = 10--wxSTC_ADA_ILLEGAL :: Int-wxSTC_ADA_ILLEGAL = 11--wxSTC_BAAN_DEFAULT :: Int-wxSTC_BAAN_DEFAULT = 0--wxSTC_BAAN_COMMENT :: Int-wxSTC_BAAN_COMMENT = 1--wxSTC_BAAN_COMMENTDOC :: Int-wxSTC_BAAN_COMMENTDOC = 2--wxSTC_BAAN_NUMBER :: Int-wxSTC_BAAN_NUMBER = 3--wxSTC_BAAN_WORD :: Int-wxSTC_BAAN_WORD = 4--wxSTC_BAAN_STRING :: Int-wxSTC_BAAN_STRING = 5--wxSTC_BAAN_PREPROCESSOR :: Int-wxSTC_BAAN_PREPROCESSOR = 6--wxSTC_BAAN_OPERATOR :: Int-wxSTC_BAAN_OPERATOR = 7--wxSTC_BAAN_IDENTIFIER :: Int-wxSTC_BAAN_IDENTIFIER = 8--wxSTC_BAAN_STRINGEOL :: Int-wxSTC_BAAN_STRINGEOL = 9--wxSTC_BAAN_WORD2 :: Int-wxSTC_BAAN_WORD2 = 10--wxSTC_LISP_DEFAULT :: Int-wxSTC_LISP_DEFAULT = 0--wxSTC_LISP_COMMENT :: Int-wxSTC_LISP_COMMENT = 1--wxSTC_LISP_NUMBER :: Int-wxSTC_LISP_NUMBER = 2--wxSTC_LISP_KEYWORD :: Int-wxSTC_LISP_KEYWORD = 3--wxSTC_LISP_STRING :: Int-wxSTC_LISP_STRING = 6--wxSTC_LISP_STRINGEOL :: Int-wxSTC_LISP_STRINGEOL = 8--wxSTC_LISP_IDENTIFIER :: Int-wxSTC_LISP_IDENTIFIER = 9--wxSTC_LISP_OPERATOR :: Int-wxSTC_LISP_OPERATOR = 10--wxSTC_EIFFEL_DEFAULT :: Int-wxSTC_EIFFEL_DEFAULT = 0--wxSTC_EIFFEL_COMMENTLINE :: Int-wxSTC_EIFFEL_COMMENTLINE = 1--wxSTC_EIFFEL_NUMBER :: Int-wxSTC_EIFFEL_NUMBER = 2--wxSTC_EIFFEL_WORD :: Int-wxSTC_EIFFEL_WORD = 3--wxSTC_EIFFEL_STRING :: Int-wxSTC_EIFFEL_STRING = 4--wxSTC_EIFFEL_CHARACTER :: Int-wxSTC_EIFFEL_CHARACTER = 5--wxSTC_EIFFEL_OPERATOR :: Int-wxSTC_EIFFEL_OPERATOR = 6--wxSTC_EIFFEL_IDENTIFIER :: Int-wxSTC_EIFFEL_IDENTIFIER = 7--wxSTC_EIFFEL_STRINGEOL :: Int-wxSTC_EIFFEL_STRINGEOL = 8--wxSTC_NNCRONTAB_DEFAULT :: Int-wxSTC_NNCRONTAB_DEFAULT = 0--wxSTC_NNCRONTAB_COMMENT :: Int-wxSTC_NNCRONTAB_COMMENT = 1--wxSTC_NNCRONTAB_TASK :: Int-wxSTC_NNCRONTAB_TASK = 2--wxSTC_NNCRONTAB_SECTION :: Int-wxSTC_NNCRONTAB_SECTION = 3--wxSTC_NNCRONTAB_KEYWORD :: Int-wxSTC_NNCRONTAB_KEYWORD = 4--wxSTC_NNCRONTAB_MODIFIER :: Int-wxSTC_NNCRONTAB_MODIFIER = 5--wxSTC_NNCRONTAB_ASTERISK :: Int-wxSTC_NNCRONTAB_ASTERISK = 6--wxSTC_NNCRONTAB_NUMBER :: Int-wxSTC_NNCRONTAB_NUMBER = 7--wxSTC_NNCRONTAB_STRING :: Int-wxSTC_NNCRONTAB_STRING = 8--wxSTC_NNCRONTAB_ENVIRONMENT :: Int-wxSTC_NNCRONTAB_ENVIRONMENT = 9--wxSTC_NNCRONTAB_IDENTIFIER :: Int-wxSTC_NNCRONTAB_IDENTIFIER = 10--wxSTC_MATLAB_DEFAULT :: Int-wxSTC_MATLAB_DEFAULT = 0--wxSTC_MATLAB_COMMENT :: Int-wxSTC_MATLAB_COMMENT = 1--wxSTC_MATLAB_COMMAND :: Int-wxSTC_MATLAB_COMMAND = 2--wxSTC_MATLAB_NUMBER :: Int-wxSTC_MATLAB_NUMBER = 3--wxSTC_MATLAB_KEYWORD :: Int-wxSTC_MATLAB_KEYWORD = 4--wxSTC_MATLAB_STRING :: Int-wxSTC_MATLAB_STRING = 5--wxSTC_MATLAB_OPERATOR :: Int-wxSTC_MATLAB_OPERATOR = 6--wxSTC_MATLAB_IDENTIFIER :: Int-wxSTC_MATLAB_IDENTIFIER = 7--wxSTC_SCRIPTOL_DEFAULT :: Int-wxSTC_SCRIPTOL_DEFAULT = 0--wxSTC_SCRIPTOL_COMMENT :: Int-wxSTC_SCRIPTOL_COMMENT = 1--wxSTC_SCRIPTOL_COMMENTLINE :: Int-wxSTC_SCRIPTOL_COMMENTLINE = 2--wxSTC_SCRIPTOL_COMMENTDOC :: Int-wxSTC_SCRIPTOL_COMMENTDOC = 3--wxSTC_SCRIPTOL_NUMBER :: Int-wxSTC_SCRIPTOL_NUMBER = 4--wxSTC_SCRIPTOL_WORD :: Int-wxSTC_SCRIPTOL_WORD = 5--wxSTC_SCRIPTOL_STRING :: Int-wxSTC_SCRIPTOL_STRING = 6--wxSTC_SCRIPTOL_CHARACTER :: Int-wxSTC_SCRIPTOL_CHARACTER = 7--wxSTC_SCRIPTOL_UUID :: Int-wxSTC_SCRIPTOL_UUID = 8--wxSTC_SCRIPTOL_PREPROCESSOR :: Int-wxSTC_SCRIPTOL_PREPROCESSOR = 9--wxSTC_SCRIPTOL_OPERATOR :: Int-wxSTC_SCRIPTOL_OPERATOR = 10--wxSTC_SCRIPTOL_IDENTIFIER :: Int-wxSTC_SCRIPTOL_IDENTIFIER = 11--wxSTC_SCRIPTOL_STRINGEOL :: Int-wxSTC_SCRIPTOL_STRINGEOL = 12--wxSTC_SCRIPTOL_VERBATIM :: Int-wxSTC_SCRIPTOL_VERBATIM = 13--wxSTC_SCRIPTOL_REGEX :: Int-wxSTC_SCRIPTOL_REGEX = 14--wxSTC_SCRIPTOL_COMMENTLINEDOC :: Int-wxSTC_SCRIPTOL_COMMENTLINEDOC = 15--wxSTC_SCRIPTOL_WORD2 :: Int-wxSTC_SCRIPTOL_WORD2 = 16--wxSTC_SCRIPTOL_COMMENTDOCKEYWORD :: Int-wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = 17--wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR :: Int-wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = 18--wxSTC_SCRIPTOL_COMMENTBASIC :: Int-wxSTC_SCRIPTOL_COMMENTBASIC = 19--wxSTC_ASM_DEFAULT :: Int-wxSTC_ASM_DEFAULT = 0--wxSTC_ASM_COMMENT :: Int-wxSTC_ASM_COMMENT = 1--wxSTC_ASM_NUMBER :: Int-wxSTC_ASM_NUMBER = 2--wxSTC_ASM_STRING :: Int-wxSTC_ASM_STRING = 3--wxSTC_ASM_OPERATOR :: Int-wxSTC_ASM_OPERATOR = 4--wxSTC_ASM_IDENTIFIER :: Int-wxSTC_ASM_IDENTIFIER = 5--wxSTC_ASM_CPUINSTRUCTION :: Int-wxSTC_ASM_CPUINSTRUCTION = 6--wxSTC_ASM_MATHINSTRUCTION :: Int-wxSTC_ASM_MATHINSTRUCTION = 7--wxSTC_ASM_REGISTER :: Int-wxSTC_ASM_REGISTER = 8--wxSTC_ASM_DIRECTIVE :: Int-wxSTC_ASM_DIRECTIVE = 9--wxSTC_ASM_DIRECTIVEOPERAND :: Int-wxSTC_ASM_DIRECTIVEOPERAND = 10--wxSTC_F_DEFAULT :: Int-wxSTC_F_DEFAULT = 0--wxSTC_F_COMMENT :: Int-wxSTC_F_COMMENT = 1--wxSTC_F_NUMBER :: Int-wxSTC_F_NUMBER = 2--wxSTC_F_STRING1 :: Int-wxSTC_F_STRING1 = 3--wxSTC_F_STRING2 :: Int-wxSTC_F_STRING2 = 4--wxSTC_F_STRINGEOL :: Int-wxSTC_F_STRINGEOL = 5--wxSTC_F_OPERATOR :: Int-wxSTC_F_OPERATOR = 6--wxSTC_F_IDENTIFIER :: Int-wxSTC_F_IDENTIFIER = 7--wxSTC_F_WORD :: Int-wxSTC_F_WORD = 8--wxSTC_F_WORD2 :: Int-wxSTC_F_WORD2 = 9--wxSTC_F_WORD3 :: Int-wxSTC_F_WORD3 = 10--wxSTC_F_PREPROCESSOR :: Int-wxSTC_F_PREPROCESSOR = 11--wxSTC_F_OPERATOR2 :: Int-wxSTC_F_OPERATOR2 = 12--wxSTC_F_LABEL :: Int-wxSTC_F_LABEL = 13--wxSTC_F_CONTINUATION :: Int-wxSTC_F_CONTINUATION = 14--wxSTC_CSS_DEFAULT :: Int-wxSTC_CSS_DEFAULT = 0--wxSTC_CSS_TAG :: Int-wxSTC_CSS_TAG = 1--wxSTC_CSS_CLASS :: Int-wxSTC_CSS_CLASS = 2--wxSTC_CSS_PSEUDOCLASS :: Int-wxSTC_CSS_PSEUDOCLASS = 3--wxSTC_CSS_UNKNOWN_PSEUDOCLASS :: Int-wxSTC_CSS_UNKNOWN_PSEUDOCLASS = 4--wxSTC_CSS_OPERATOR :: Int-wxSTC_CSS_OPERATOR = 5--wxSTC_CSS_IDENTIFIER :: Int-wxSTC_CSS_IDENTIFIER = 6--wxSTC_CSS_UNKNOWN_IDENTIFIER :: Int-wxSTC_CSS_UNKNOWN_IDENTIFIER = 7--wxSTC_CSS_VALUE :: Int-wxSTC_CSS_VALUE = 8--wxSTC_CSS_COMMENT :: Int-wxSTC_CSS_COMMENT = 9--wxSTC_CSS_ID :: Int-wxSTC_CSS_ID = 10--wxSTC_CSS_IMPORTANT :: Int-wxSTC_CSS_IMPORTANT = 11--wxSTC_CSS_DIRECTIVE :: Int-wxSTC_CSS_DIRECTIVE = 12--wxSTC_CSS_DOUBLESTRING :: Int-wxSTC_CSS_DOUBLESTRING = 13--wxSTC_CSS_SINGLESTRING :: Int-wxSTC_CSS_SINGLESTRING = 14--wxSTC_POV_DEFAULT :: Int-wxSTC_POV_DEFAULT = 0--wxSTC_POV_COMMENT :: Int-wxSTC_POV_COMMENT = 1--wxSTC_POV_COMMENTLINE :: Int-wxSTC_POV_COMMENTLINE = 2--wxSTC_POV_NUMBER :: Int-wxSTC_POV_NUMBER = 3--wxSTC_POV_OPERATOR :: Int-wxSTC_POV_OPERATOR = 4--wxSTC_POV_IDENTIFIER :: Int-wxSTC_POV_IDENTIFIER = 5--wxSTC_POV_STRING :: Int-wxSTC_POV_STRING = 6--wxSTC_POV_STRINGEOL :: Int-wxSTC_POV_STRINGEOL = 7--wxSTC_POV_DIRECTIVE :: Int-wxSTC_POV_DIRECTIVE = 8--wxSTC_POV_BADDIRECTIVE :: Int-wxSTC_POV_BADDIRECTIVE = 9--wxSTC_POV_WORD2 :: Int-wxSTC_POV_WORD2 = 10--wxSTC_POV_WORD3 :: Int-wxSTC_POV_WORD3 = 11--wxSTC_POV_WORD4 :: Int-wxSTC_POV_WORD4 = 12--wxSTC_POV_WORD5 :: Int-wxSTC_POV_WORD5 = 13--wxSTC_POV_WORD6 :: Int-wxSTC_POV_WORD6 = 14--wxSTC_POV_WORD7 :: Int-wxSTC_POV_WORD7 = 15--wxSTC_POV_WORD8 :: Int-wxSTC_POV_WORD8 = 16--wxSTC_LOUT_DEFAULT :: Int-wxSTC_LOUT_DEFAULT = 0--wxSTC_LOUT_COMMENT :: Int-wxSTC_LOUT_COMMENT = 1--wxSTC_LOUT_NUMBER :: Int-wxSTC_LOUT_NUMBER = 2--wxSTC_LOUT_WORD :: Int-wxSTC_LOUT_WORD = 3--wxSTC_LOUT_WORD2 :: Int-wxSTC_LOUT_WORD2 = 4--wxSTC_LOUT_WORD3 :: Int-wxSTC_LOUT_WORD3 = 5--wxSTC_LOUT_WORD4 :: Int-wxSTC_LOUT_WORD4 = 6--wxSTC_LOUT_STRING :: Int-wxSTC_LOUT_STRING = 7--wxSTC_LOUT_OPERATOR :: Int-wxSTC_LOUT_OPERATOR = 8--wxSTC_LOUT_IDENTIFIER :: Int-wxSTC_LOUT_IDENTIFIER = 9--wxSTC_LOUT_STRINGEOL :: Int-wxSTC_LOUT_STRINGEOL = 10--wxSTC_ESCRIPT_DEFAULT :: Int-wxSTC_ESCRIPT_DEFAULT = 0--wxSTC_ESCRIPT_COMMENT :: Int-wxSTC_ESCRIPT_COMMENT = 1--wxSTC_ESCRIPT_COMMENTLINE :: Int-wxSTC_ESCRIPT_COMMENTLINE = 2--wxSTC_ESCRIPT_COMMENTDOC :: Int-wxSTC_ESCRIPT_COMMENTDOC = 3--wxSTC_ESCRIPT_NUMBER :: Int-wxSTC_ESCRIPT_NUMBER = 4--wxSTC_ESCRIPT_WORD :: Int-wxSTC_ESCRIPT_WORD = 5--wxSTC_ESCRIPT_STRING :: Int-wxSTC_ESCRIPT_STRING = 6--wxSTC_ESCRIPT_OPERATOR :: Int-wxSTC_ESCRIPT_OPERATOR = 7--wxSTC_ESCRIPT_IDENTIFIER :: Int-wxSTC_ESCRIPT_IDENTIFIER = 8--wxSTC_ESCRIPT_BRACE :: Int-wxSTC_ESCRIPT_BRACE = 9--wxSTC_ESCRIPT_WORD2 :: Int-wxSTC_ESCRIPT_WORD2 = 10--wxSTC_ESCRIPT_WORD3 :: Int-wxSTC_ESCRIPT_WORD3 = 11--wxSTC_PS_DEFAULT :: Int-wxSTC_PS_DEFAULT = 0--wxSTC_PS_COMMENT :: Int-wxSTC_PS_COMMENT = 1--wxSTC_PS_DSC_COMMENT :: Int-wxSTC_PS_DSC_COMMENT = 2--wxSTC_PS_DSC_VALUE :: Int-wxSTC_PS_DSC_VALUE = 3--wxSTC_PS_NUMBER :: Int-wxSTC_PS_NUMBER = 4--wxSTC_PS_NAME :: Int-wxSTC_PS_NAME = 5--wxSTC_PS_KEYWORD :: Int-wxSTC_PS_KEYWORD = 6--wxSTC_PS_LITERAL :: Int-wxSTC_PS_LITERAL = 7--wxSTC_PS_IMMEVAL :: Int-wxSTC_PS_IMMEVAL = 8--wxSTC_PS_PAREN_ARRAY :: Int-wxSTC_PS_PAREN_ARRAY = 9--wxSTC_PS_PAREN_DICT :: Int-wxSTC_PS_PAREN_DICT = 10--wxSTC_PS_PAREN_PROC :: Int-wxSTC_PS_PAREN_PROC = 11--wxSTC_PS_TEXT :: Int-wxSTC_PS_TEXT = 12--wxSTC_PS_HEXSTRING :: Int-wxSTC_PS_HEXSTRING = 13--wxSTC_PS_BASE85STRING :: Int-wxSTC_PS_BASE85STRING = 14--wxSTC_PS_BADSTRINGCHAR :: Int-wxSTC_PS_BADSTRINGCHAR = 15--wxSTC_NSIS_DEFAULT :: Int-wxSTC_NSIS_DEFAULT = 0--wxSTC_NSIS_COMMENT :: Int-wxSTC_NSIS_COMMENT = 1--wxSTC_NSIS_STRINGDQ :: Int-wxSTC_NSIS_STRINGDQ = 2--wxSTC_NSIS_STRINGLQ :: Int-wxSTC_NSIS_STRINGLQ = 3--wxSTC_NSIS_STRINGRQ :: Int-wxSTC_NSIS_STRINGRQ = 4--wxSTC_NSIS_FUNCTION :: Int-wxSTC_NSIS_FUNCTION = 5--wxSTC_NSIS_VARIABLE :: Int-wxSTC_NSIS_VARIABLE = 6--wxSTC_NSIS_LABEL :: Int-wxSTC_NSIS_LABEL = 7--wxSTC_NSIS_USERDEFINED :: Int-wxSTC_NSIS_USERDEFINED = 8--wxSTC_NSIS_SECTIONDEF :: Int-wxSTC_NSIS_SECTIONDEF = 9--wxSTC_NSIS_SUBSECTIONDEF :: Int-wxSTC_NSIS_SUBSECTIONDEF = 10--wxSTC_NSIS_IFDEFINEDEF :: Int-wxSTC_NSIS_IFDEFINEDEF = 11--wxSTC_NSIS_MACRODEF :: Int-wxSTC_NSIS_MACRODEF = 12--wxSTC_NSIS_STRINGVAR :: Int-wxSTC_NSIS_STRINGVAR = 13--wxSTC_MMIXAL_LEADWS :: Int-wxSTC_MMIXAL_LEADWS = 0--wxSTC_MMIXAL_COMMENT :: Int-wxSTC_MMIXAL_COMMENT = 1--wxSTC_MMIXAL_LABEL :: Int-wxSTC_MMIXAL_LABEL = 2--wxSTC_MMIXAL_OPCODE :: Int-wxSTC_MMIXAL_OPCODE = 3--wxSTC_MMIXAL_OPCODE_PRE :: Int-wxSTC_MMIXAL_OPCODE_PRE = 4--wxSTC_MMIXAL_OPCODE_VALID :: Int-wxSTC_MMIXAL_OPCODE_VALID = 5--wxSTC_MMIXAL_OPCODE_UNKNOWN :: Int-wxSTC_MMIXAL_OPCODE_UNKNOWN = 6--wxSTC_MMIXAL_OPCODE_POST :: Int-wxSTC_MMIXAL_OPCODE_POST = 7--wxSTC_MMIXAL_OPERANDS :: Int-wxSTC_MMIXAL_OPERANDS = 8--wxSTC_MMIXAL_NUMBER :: Int-wxSTC_MMIXAL_NUMBER = 9--wxSTC_MMIXAL_REF :: Int-wxSTC_MMIXAL_REF = 10--wxSTC_MMIXAL_CHAR :: Int-wxSTC_MMIXAL_CHAR = 11--wxSTC_MMIXAL_STRING :: Int-wxSTC_MMIXAL_STRING = 12--wxSTC_MMIXAL_REGISTER :: Int-wxSTC_MMIXAL_REGISTER = 13--wxSTC_MMIXAL_HEX :: Int-wxSTC_MMIXAL_HEX = 14--wxSTC_MMIXAL_OPERATOR :: Int-wxSTC_MMIXAL_OPERATOR = 15--wxSTC_MMIXAL_SYMBOL :: Int-wxSTC_MMIXAL_SYMBOL = 16--wxSTC_MMIXAL_INCLUDE :: Int-wxSTC_MMIXAL_INCLUDE = 17--wxSTC_CLW_DEFAULT :: Int-wxSTC_CLW_DEFAULT = 0--wxSTC_CLW_LABEL :: Int-wxSTC_CLW_LABEL = 1--wxSTC_CLW_COMMENT :: Int-wxSTC_CLW_COMMENT = 2--wxSTC_CLW_STRING :: Int-wxSTC_CLW_STRING = 3--wxSTC_CLW_USER_IDENTIFIER :: Int-wxSTC_CLW_USER_IDENTIFIER = 4--wxSTC_CLW_INTEGER_CONSTANT :: Int-wxSTC_CLW_INTEGER_CONSTANT = 5--wxSTC_CLW_REAL_CONSTANT :: Int-wxSTC_CLW_REAL_CONSTANT = 6--wxSTC_CLW_PICTURE_STRING :: Int-wxSTC_CLW_PICTURE_STRING = 7--wxSTC_CLW_KEYWORD :: Int-wxSTC_CLW_KEYWORD = 8--wxSTC_CLW_COMPILER_DIRECTIVE :: Int-wxSTC_CLW_COMPILER_DIRECTIVE = 9--wxSTC_CLW_RUNTIME_EXPRESSIONS :: Int-wxSTC_CLW_RUNTIME_EXPRESSIONS = 10--wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION :: Int-wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION = 11--wxSTC_CLW_STRUCTURE_DATA_TYPE :: Int-wxSTC_CLW_STRUCTURE_DATA_TYPE = 12--wxSTC_CLW_ATTRIBUTE :: Int-wxSTC_CLW_ATTRIBUTE = 13--wxSTC_CLW_STANDARD_EQUATE :: Int-wxSTC_CLW_STANDARD_EQUATE = 14--wxSTC_CLW_ERROR :: Int-wxSTC_CLW_ERROR = 15--wxSTC_CLW_DEPRECATED :: Int-wxSTC_CLW_DEPRECATED = 16--wxSTC_LOT_DEFAULT :: Int-wxSTC_LOT_DEFAULT = 0--wxSTC_LOT_HEADER :: Int-wxSTC_LOT_HEADER = 1--wxSTC_LOT_BREAK :: Int-wxSTC_LOT_BREAK = 2--wxSTC_LOT_SET :: Int-wxSTC_LOT_SET = 3--wxSTC_LOT_PASS :: Int-wxSTC_LOT_PASS = 4--wxSTC_LOT_FAIL :: Int-wxSTC_LOT_FAIL = 5--wxSTC_LOT_ABORT :: Int-wxSTC_LOT_ABORT = 6--wxSTC_YAML_DEFAULT :: Int-wxSTC_YAML_DEFAULT = 0--wxSTC_YAML_COMMENT :: Int-wxSTC_YAML_COMMENT = 1--wxSTC_YAML_IDENTIFIER :: Int-wxSTC_YAML_IDENTIFIER = 2--wxSTC_YAML_KEYWORD :: Int-wxSTC_YAML_KEYWORD = 3--wxSTC_YAML_NUMBER :: Int-wxSTC_YAML_NUMBER = 4--wxSTC_YAML_REFERENCE :: Int-wxSTC_YAML_REFERENCE = 5--wxSTC_YAML_DOCUMENT :: Int-wxSTC_YAML_DOCUMENT = 6--wxSTC_YAML_TEXT :: Int-wxSTC_YAML_TEXT = 7--wxSTC_YAML_ERROR :: Int-wxSTC_YAML_ERROR = 8--wxSTC_TEX_DEFAULT :: Int-wxSTC_TEX_DEFAULT = 0--wxSTC_TEX_SPECIAL :: Int-wxSTC_TEX_SPECIAL = 1--wxSTC_TEX_GROUP :: Int-wxSTC_TEX_GROUP = 2--wxSTC_TEX_SYMBOL :: Int-wxSTC_TEX_SYMBOL = 3--wxSTC_TEX_COMMAND :: Int-wxSTC_TEX_COMMAND = 4--wxSTC_TEX_TEXT :: Int-wxSTC_TEX_TEXT = 5--wxSTC_METAPOST_DEFAULT :: Int-wxSTC_METAPOST_DEFAULT = 0--wxSTC_METAPOST_SPECIAL :: Int-wxSTC_METAPOST_SPECIAL = 1--wxSTC_METAPOST_GROUP :: Int-wxSTC_METAPOST_GROUP = 2--wxSTC_METAPOST_SYMBOL :: Int-wxSTC_METAPOST_SYMBOL = 3--wxSTC_METAPOST_COMMAND :: Int-wxSTC_METAPOST_COMMAND = 4--wxSTC_METAPOST_TEXT :: Int-wxSTC_METAPOST_TEXT = 5--wxSTC_METAPOST_EXTRA :: Int-wxSTC_METAPOST_EXTRA = 6--wxSTC_ERLANG_DEFAULT :: Int-wxSTC_ERLANG_DEFAULT = 0--wxSTC_ERLANG_COMMENT :: Int-wxSTC_ERLANG_COMMENT = 1--wxSTC_ERLANG_VARIABLE :: Int-wxSTC_ERLANG_VARIABLE = 2--wxSTC_ERLANG_NUMBER :: Int-wxSTC_ERLANG_NUMBER = 3--wxSTC_ERLANG_KEYWORD :: Int-wxSTC_ERLANG_KEYWORD = 4--wxSTC_ERLANG_STRING :: Int-wxSTC_ERLANG_STRING = 5--wxSTC_ERLANG_OPERATOR :: Int-wxSTC_ERLANG_OPERATOR = 6--wxSTC_ERLANG_ATOM :: Int-wxSTC_ERLANG_ATOM = 7--wxSTC_ERLANG_FUNCTION_NAME :: Int-wxSTC_ERLANG_FUNCTION_NAME = 8--wxSTC_ERLANG_CHARACTER :: Int-wxSTC_ERLANG_CHARACTER = 9--wxSTC_ERLANG_MACRO :: Int-wxSTC_ERLANG_MACRO = 10--wxSTC_ERLANG_RECORD :: Int-wxSTC_ERLANG_RECORD = 11--wxSTC_ERLANG_SEPARATOR :: Int-wxSTC_ERLANG_SEPARATOR = 12--wxSTC_ERLANG_NODE_NAME :: Int-wxSTC_ERLANG_NODE_NAME = 13--wxSTC_ERLANG_UNKNOWN :: Int-wxSTC_ERLANG_UNKNOWN = 31--wxSTC_MSSQL_DEFAULT :: Int-wxSTC_MSSQL_DEFAULT = 0--wxSTC_MSSQL_COMMENT :: Int-wxSTC_MSSQL_COMMENT = 1--wxSTC_MSSQL_LINE_COMMENT :: Int-wxSTC_MSSQL_LINE_COMMENT = 2--wxSTC_MSSQL_NUMBER :: Int-wxSTC_MSSQL_NUMBER = 3--wxSTC_MSSQL_STRING :: Int-wxSTC_MSSQL_STRING = 4--wxSTC_MSSQL_OPERATOR :: Int-wxSTC_MSSQL_OPERATOR = 5--wxSTC_MSSQL_IDENTIFIER :: Int-wxSTC_MSSQL_IDENTIFIER = 6--wxSTC_MSSQL_VARIABLE :: Int-wxSTC_MSSQL_VARIABLE = 7--wxSTC_MSSQL_COLUMN_NAME :: Int-wxSTC_MSSQL_COLUMN_NAME = 8--wxSTC_MSSQL_STATEMENT :: Int-wxSTC_MSSQL_STATEMENT = 9--wxSTC_MSSQL_DATATYPE :: Int-wxSTC_MSSQL_DATATYPE = 10--wxSTC_MSSQL_SYSTABLE :: Int-wxSTC_MSSQL_SYSTABLE = 11--wxSTC_MSSQL_GLOBAL_VARIABLE :: Int-wxSTC_MSSQL_GLOBAL_VARIABLE = 12--wxSTC_MSSQL_FUNCTION :: Int-wxSTC_MSSQL_FUNCTION = 13--wxSTC_MSSQL_STORED_PROCEDURE :: Int-wxSTC_MSSQL_STORED_PROCEDURE = 14--wxSTC_MSSQL_DEFAULT_PREF_DATATYPE :: Int-wxSTC_MSSQL_DEFAULT_PREF_DATATYPE = 15--wxSTC_MSSQL_COLUMN_NAME_2 :: Int-wxSTC_MSSQL_COLUMN_NAME_2 = 16--wxSTC_V_DEFAULT :: Int-wxSTC_V_DEFAULT = 0--wxSTC_V_COMMENT :: Int-wxSTC_V_COMMENT = 1--wxSTC_V_COMMENTLINE :: Int-wxSTC_V_COMMENTLINE = 2--wxSTC_V_COMMENTLINEBANG :: Int-wxSTC_V_COMMENTLINEBANG = 3--wxSTC_V_NUMBER :: Int-wxSTC_V_NUMBER = 4--wxSTC_V_WORD :: Int-wxSTC_V_WORD = 5--wxSTC_V_STRING :: Int-wxSTC_V_STRING = 6--wxSTC_V_WORD2 :: Int-wxSTC_V_WORD2 = 7--wxSTC_V_WORD3 :: Int-wxSTC_V_WORD3 = 8--wxSTC_V_PREPROCESSOR :: Int-wxSTC_V_PREPROCESSOR = 9--wxSTC_V_OPERATOR :: Int-wxSTC_V_OPERATOR = 10--wxSTC_V_IDENTIFIER :: Int-wxSTC_V_IDENTIFIER = 11--wxSTC_V_STRINGEOL :: Int-wxSTC_V_STRINGEOL = 12--wxSTC_V_USER :: Int-wxSTC_V_USER = 19--wxSTC_KIX_DEFAULT :: Int-wxSTC_KIX_DEFAULT = 0--wxSTC_KIX_COMMENT :: Int-wxSTC_KIX_COMMENT = 1--wxSTC_KIX_STRING1 :: Int-wxSTC_KIX_STRING1 = 2--wxSTC_KIX_STRING2 :: Int-wxSTC_KIX_STRING2 = 3--wxSTC_KIX_NUMBER :: Int-wxSTC_KIX_NUMBER = 4--wxSTC_KIX_VAR :: Int-wxSTC_KIX_VAR = 5--wxSTC_KIX_MACRO :: Int-wxSTC_KIX_MACRO = 6--wxSTC_KIX_KEYWORD :: Int-wxSTC_KIX_KEYWORD = 7--wxSTC_KIX_FUNCTIONS :: Int-wxSTC_KIX_FUNCTIONS = 8--wxSTC_KIX_OPERATOR :: Int-wxSTC_KIX_OPERATOR = 9--wxSTC_KIX_IDENTIFIER :: Int-wxSTC_KIX_IDENTIFIER = 31--wxSTC_GC_DEFAULT :: Int-wxSTC_GC_DEFAULT = 0--wxSTC_GC_COMMENTLINE :: Int-wxSTC_GC_COMMENTLINE = 1--wxSTC_GC_COMMENTBLOCK :: Int-wxSTC_GC_COMMENTBLOCK = 2--wxSTC_GC_GLOBAL :: Int-wxSTC_GC_GLOBAL = 3--wxSTC_GC_EVENT :: Int-wxSTC_GC_EVENT = 4--wxSTC_GC_ATTRIBUTE :: Int-wxSTC_GC_ATTRIBUTE = 5--wxSTC_GC_CONTROL :: Int-wxSTC_GC_CONTROL = 6--wxSTC_GC_COMMAND :: Int-wxSTC_GC_COMMAND = 7--wxSTC_GC_STRING :: Int-wxSTC_GC_STRING = 8--wxSTC_GC_OPERATOR :: Int-wxSTC_GC_OPERATOR = 9--wxSTC_SN_DEFAULT :: Int-wxSTC_SN_DEFAULT = 0--wxSTC_SN_CODE :: Int-wxSTC_SN_CODE = 1--wxSTC_SN_COMMENTLINE :: Int-wxSTC_SN_COMMENTLINE = 2--wxSTC_SN_COMMENTLINEBANG :: Int-wxSTC_SN_COMMENTLINEBANG = 3--wxSTC_SN_NUMBER :: Int-wxSTC_SN_NUMBER = 4--wxSTC_SN_WORD :: Int-wxSTC_SN_WORD = 5--wxSTC_SN_STRING :: Int-wxSTC_SN_STRING = 6--wxSTC_SN_WORD2 :: Int-wxSTC_SN_WORD2 = 7--wxSTC_SN_WORD3 :: Int-wxSTC_SN_WORD3 = 8--wxSTC_SN_PREPROCESSOR :: Int-wxSTC_SN_PREPROCESSOR = 9--wxSTC_SN_OPERATOR :: Int-wxSTC_SN_OPERATOR = 10--wxSTC_SN_IDENTIFIER :: Int-wxSTC_SN_IDENTIFIER = 11--wxSTC_SN_STRINGEOL :: Int-wxSTC_SN_STRINGEOL = 12--wxSTC_SN_REGEXTAG :: Int-wxSTC_SN_REGEXTAG = 13--wxSTC_SN_SIGNAL :: Int-wxSTC_SN_SIGNAL = 14--wxSTC_SN_USER :: Int-wxSTC_SN_USER = 19--wxSTC_AU3_DEFAULT :: Int-wxSTC_AU3_DEFAULT = 0--wxSTC_AU3_COMMENT :: Int-wxSTC_AU3_COMMENT = 1--wxSTC_AU3_COMMENTBLOCK :: Int-wxSTC_AU3_COMMENTBLOCK = 2--wxSTC_AU3_NUMBER :: Int-wxSTC_AU3_NUMBER = 3--wxSTC_AU3_FUNCTION :: Int-wxSTC_AU3_FUNCTION = 4--wxSTC_AU3_KEYWORD :: Int-wxSTC_AU3_KEYWORD = 5--wxSTC_AU3_MACRO :: Int-wxSTC_AU3_MACRO = 6--wxSTC_AU3_STRING :: Int-wxSTC_AU3_STRING = 7--wxSTC_AU3_OPERATOR :: Int-wxSTC_AU3_OPERATOR = 8--wxSTC_AU3_VARIABLE :: Int-wxSTC_AU3_VARIABLE = 9--wxSTC_AU3_SENT :: Int-wxSTC_AU3_SENT = 10--wxSTC_AU3_PREPROCESSOR :: Int-wxSTC_AU3_PREPROCESSOR = 11--wxSTC_AU3_SPECIAL :: Int-wxSTC_AU3_SPECIAL = 12--wxSTC_AU3_EXPAND :: Int-wxSTC_AU3_EXPAND = 13--wxSTC_AU3_COMOBJ :: Int-wxSTC_AU3_COMOBJ = 14--wxSTC_APDL_DEFAULT :: Int-wxSTC_APDL_DEFAULT = 0--wxSTC_APDL_COMMENT :: Int-wxSTC_APDL_COMMENT = 1--wxSTC_APDL_COMMENTBLOCK :: Int-wxSTC_APDL_COMMENTBLOCK = 2--wxSTC_APDL_NUMBER :: Int-wxSTC_APDL_NUMBER = 3--wxSTC_APDL_STRING :: Int-wxSTC_APDL_STRING = 4--wxSTC_APDL_OPERATOR :: Int-wxSTC_APDL_OPERATOR = 5--wxSTC_APDL_WORD :: Int-wxSTC_APDL_WORD = 6--wxSTC_APDL_PROCESSOR :: Int-wxSTC_APDL_PROCESSOR = 7--wxSTC_APDL_COMMAND :: Int-wxSTC_APDL_COMMAND = 8--wxSTC_APDL_SLASHCOMMAND :: Int-wxSTC_APDL_SLASHCOMMAND = 9--wxSTC_APDL_STARCOMMAND :: Int-wxSTC_APDL_STARCOMMAND = 10--wxSTC_APDL_ARGUMENT :: Int-wxSTC_APDL_ARGUMENT = 11--wxSTC_APDL_FUNCTION :: Int-wxSTC_APDL_FUNCTION = 12--wxSTC_SH_DEFAULT :: Int-wxSTC_SH_DEFAULT = 0--wxSTC_SH_ERROR :: Int-wxSTC_SH_ERROR = 1--wxSTC_SH_COMMENTLINE :: Int-wxSTC_SH_COMMENTLINE = 2--wxSTC_SH_NUMBER :: Int-wxSTC_SH_NUMBER = 3--wxSTC_SH_WORD :: Int-wxSTC_SH_WORD = 4--wxSTC_SH_STRING :: Int-wxSTC_SH_STRING = 5--wxSTC_SH_CHARACTER :: Int-wxSTC_SH_CHARACTER = 6--wxSTC_SH_OPERATOR :: Int-wxSTC_SH_OPERATOR = 7--wxSTC_SH_IDENTIFIER :: Int-wxSTC_SH_IDENTIFIER = 8--wxSTC_SH_SCALAR :: Int-wxSTC_SH_SCALAR = 9--wxSTC_SH_PARAM :: Int-wxSTC_SH_PARAM = 10--wxSTC_SH_BACKTICKS :: Int-wxSTC_SH_BACKTICKS = 11--wxSTC_SH_HERE_DELIM :: Int-wxSTC_SH_HERE_DELIM = 12--wxSTC_SH_HERE_Q :: Int-wxSTC_SH_HERE_Q = 13--wxSTC_ASN1_DEFAULT :: Int-wxSTC_ASN1_DEFAULT = 0--wxSTC_ASN1_COMMENT :: Int-wxSTC_ASN1_COMMENT = 1--wxSTC_ASN1_IDENTIFIER :: Int-wxSTC_ASN1_IDENTIFIER = 2--wxSTC_ASN1_STRING :: Int-wxSTC_ASN1_STRING = 3--wxSTC_ASN1_OID :: Int-wxSTC_ASN1_OID = 4--wxSTC_ASN1_SCALAR :: Int-wxSTC_ASN1_SCALAR = 5--wxSTC_ASN1_KEYWORD :: Int-wxSTC_ASN1_KEYWORD = 6--wxSTC_ASN1_ATTRIBUTE :: Int-wxSTC_ASN1_ATTRIBUTE = 7--wxSTC_ASN1_DESCRIPTOR :: Int-wxSTC_ASN1_DESCRIPTOR = 8--wxSTC_ASN1_TYPE :: Int-wxSTC_ASN1_TYPE = 9--wxSTC_ASN1_OPERATOR :: Int-wxSTC_ASN1_OPERATOR = 10--wxSTC_VHDL_DEFAULT :: Int-wxSTC_VHDL_DEFAULT = 0--wxSTC_VHDL_COMMENT :: Int-wxSTC_VHDL_COMMENT = 1--wxSTC_VHDL_COMMENTLINEBANG :: Int-wxSTC_VHDL_COMMENTLINEBANG = 2--wxSTC_VHDL_NUMBER :: Int-wxSTC_VHDL_NUMBER = 3--wxSTC_VHDL_STRING :: Int-wxSTC_VHDL_STRING = 4--wxSTC_VHDL_OPERATOR :: Int-wxSTC_VHDL_OPERATOR = 5--wxSTC_VHDL_IDENTIFIER :: Int-wxSTC_VHDL_IDENTIFIER = 6--wxSTC_VHDL_STRINGEOL :: Int-wxSTC_VHDL_STRINGEOL = 7--wxSTC_VHDL_KEYWORD :: Int-wxSTC_VHDL_KEYWORD = 8--wxSTC_VHDL_STDOPERATOR :: Int-wxSTC_VHDL_STDOPERATOR = 9--wxSTC_VHDL_ATTRIBUTE :: Int-wxSTC_VHDL_ATTRIBUTE = 10--wxSTC_VHDL_STDFUNCTION :: Int-wxSTC_VHDL_STDFUNCTION = 11--wxSTC_VHDL_STDPACKAGE :: Int-wxSTC_VHDL_STDPACKAGE = 12--wxSTC_VHDL_STDTYPE :: Int-wxSTC_VHDL_STDTYPE = 13--wxSTC_VHDL_USERWORD :: Int-wxSTC_VHDL_USERWORD = 14--wxSTC_CAML_DEFAULT :: Int-wxSTC_CAML_DEFAULT = 0--wxSTC_CAML_IDENTIFIER :: Int-wxSTC_CAML_IDENTIFIER = 1--wxSTC_CAML_TAGNAME :: Int-wxSTC_CAML_TAGNAME = 2--wxSTC_CAML_KEYWORD :: Int-wxSTC_CAML_KEYWORD = 3--wxSTC_CAML_KEYWORD2 :: Int-wxSTC_CAML_KEYWORD2 = 4--wxSTC_CAML_KEYWORD3 :: Int-wxSTC_CAML_KEYWORD3 = 5--wxSTC_CAML_LINENUM :: Int-wxSTC_CAML_LINENUM = 6--wxSTC_CAML_OPERATOR :: Int-wxSTC_CAML_OPERATOR = 7--wxSTC_CAML_NUMBER :: Int-wxSTC_CAML_NUMBER = 8--wxSTC_CAML_CHAR :: Int-wxSTC_CAML_CHAR = 9--wxSTC_CAML_STRING :: Int-wxSTC_CAML_STRING = 11--wxSTC_CAML_COMMENT :: Int-wxSTC_CAML_COMMENT = 12--wxSTC_CAML_COMMENT1 :: Int-wxSTC_CAML_COMMENT1 = 13--wxSTC_CAML_COMMENT2 :: Int-wxSTC_CAML_COMMENT2 = 14--wxSTC_CAML_COMMENT3 :: Int-wxSTC_CAML_COMMENT3 = 15--wxSTC_T3_DEFAULT :: Int-wxSTC_T3_DEFAULT = 0--wxSTC_T3_X_DEFAULT :: Int-wxSTC_T3_X_DEFAULT = 1--wxSTC_T3_PREPROCESSOR :: Int-wxSTC_T3_PREPROCESSOR = 2--wxSTC_T3_BLOCK_COMMENT :: Int-wxSTC_T3_BLOCK_COMMENT = 3--wxSTC_T3_LINE_COMMENT :: Int-wxSTC_T3_LINE_COMMENT = 4--wxSTC_T3_OPERATOR :: Int-wxSTC_T3_OPERATOR = 5--wxSTC_T3_KEYWORD :: Int-wxSTC_T3_KEYWORD = 6--wxSTC_T3_NUMBER :: Int-wxSTC_T3_NUMBER = 7--wxSTC_T3_IDENTIFIER :: Int-wxSTC_T3_IDENTIFIER = 8--wxSTC_T3_S_STRING :: Int-wxSTC_T3_S_STRING = 9--wxSTC_T3_D_STRING :: Int-wxSTC_T3_D_STRING = 10--wxSTC_T3_X_STRING :: Int-wxSTC_T3_X_STRING = 11--wxSTC_T3_LIB_DIRECTIVE :: Int-wxSTC_T3_LIB_DIRECTIVE = 12--wxSTC_T3_MSG_PARAM :: Int-wxSTC_T3_MSG_PARAM = 13--wxSTC_T3_HTML_TAG :: Int-wxSTC_T3_HTML_TAG = 14--wxSTC_T3_HTML_DEFAULT :: Int-wxSTC_T3_HTML_DEFAULT = 15--wxSTC_T3_HTML_STRING :: Int-wxSTC_T3_HTML_STRING = 16--wxSTC_T3_USER1 :: Int-wxSTC_T3_USER1 = 17--wxSTC_T3_USER2 :: Int-wxSTC_T3_USER2 = 18--wxSTC_T3_USER3 :: Int-wxSTC_T3_USER3 = 19--wxSTC_REBOL_DEFAULT :: Int-wxSTC_REBOL_DEFAULT = 0--wxSTC_REBOL_COMMENTLINE :: Int-wxSTC_REBOL_COMMENTLINE = 1--wxSTC_REBOL_COMMENTBLOCK :: Int-wxSTC_REBOL_COMMENTBLOCK = 2--wxSTC_REBOL_PREFACE :: Int-wxSTC_REBOL_PREFACE = 3--wxSTC_REBOL_OPERATOR :: Int-wxSTC_REBOL_OPERATOR = 4--wxSTC_REBOL_CHARACTER :: Int-wxSTC_REBOL_CHARACTER = 5--wxSTC_REBOL_QUOTEDSTRING :: Int-wxSTC_REBOL_QUOTEDSTRING = 6--wxSTC_REBOL_BRACEDSTRING :: Int-wxSTC_REBOL_BRACEDSTRING = 7--wxSTC_REBOL_NUMBER :: Int-wxSTC_REBOL_NUMBER = 8--wxSTC_REBOL_PAIR :: Int-wxSTC_REBOL_PAIR = 9--wxSTC_REBOL_TUPLE :: Int-wxSTC_REBOL_TUPLE = 10--wxSTC_REBOL_BINARY :: Int-wxSTC_REBOL_BINARY = 11--wxSTC_REBOL_MONEY :: Int-wxSTC_REBOL_MONEY = 12--wxSTC_REBOL_ISSUE :: Int-wxSTC_REBOL_ISSUE = 13--wxSTC_REBOL_TAG :: Int-wxSTC_REBOL_TAG = 14--wxSTC_REBOL_FILE :: Int-wxSTC_REBOL_FILE = 15--wxSTC_REBOL_EMAIL :: Int-wxSTC_REBOL_EMAIL = 16--wxSTC_REBOL_URL :: Int-wxSTC_REBOL_URL = 17--wxSTC_REBOL_DATE :: Int-wxSTC_REBOL_DATE = 18--wxSTC_REBOL_TIME :: Int-wxSTC_REBOL_TIME = 19--wxSTC_REBOL_IDENTIFIER :: Int-wxSTC_REBOL_IDENTIFIER = 20--wxSTC_REBOL_WORD :: Int-wxSTC_REBOL_WORD = 21--wxSTC_REBOL_WORD2 :: Int-wxSTC_REBOL_WORD2 = 22--wxSTC_REBOL_WORD3 :: Int-wxSTC_REBOL_WORD3 = 23--wxSTC_REBOL_WORD4 :: Int-wxSTC_REBOL_WORD4 = 24--wxSTC_REBOL_WORD5 :: Int-wxSTC_REBOL_WORD5 = 25--wxSTC_REBOL_WORD6 :: Int-wxSTC_REBOL_WORD6 = 26--wxSTC_REBOL_WORD7 :: Int-wxSTC_REBOL_WORD7 = 27--wxSTC_REBOL_WORD8 :: Int-wxSTC_REBOL_WORD8 = 28--wxSTC_SQL_DEFAULT :: Int-wxSTC_SQL_DEFAULT = 0--wxSTC_SQL_COMMENT :: Int-wxSTC_SQL_COMMENT = 1--wxSTC_SQL_COMMENTLINE :: Int-wxSTC_SQL_COMMENTLINE = 2--wxSTC_SQL_COMMENTDOC :: Int-wxSTC_SQL_COMMENTDOC = 3--wxSTC_SQL_NUMBER :: Int-wxSTC_SQL_NUMBER = 4--wxSTC_SQL_WORD :: Int-wxSTC_SQL_WORD = 5--wxSTC_SQL_STRING :: Int-wxSTC_SQL_STRING = 6--wxSTC_SQL_CHARACTER :: Int-wxSTC_SQL_CHARACTER = 7--wxSTC_SQL_SQLPLUS :: Int-wxSTC_SQL_SQLPLUS = 8--wxSTC_SQL_SQLPLUS_PROMPT :: Int-wxSTC_SQL_SQLPLUS_PROMPT = 9--wxSTC_SQL_OPERATOR :: Int-wxSTC_SQL_OPERATOR = 10--wxSTC_SQL_IDENTIFIER :: Int-wxSTC_SQL_IDENTIFIER = 11--wxSTC_SQL_SQLPLUS_COMMENT :: Int-wxSTC_SQL_SQLPLUS_COMMENT = 13--wxSTC_SQL_COMMENTLINEDOC :: Int-wxSTC_SQL_COMMENTLINEDOC = 15--wxSTC_SQL_WORD2 :: Int-wxSTC_SQL_WORD2 = 16--wxSTC_SQL_COMMENTDOCKEYWORD :: Int-wxSTC_SQL_COMMENTDOCKEYWORD = 17--wxSTC_SQL_COMMENTDOCKEYWORDERROR :: Int-wxSTC_SQL_COMMENTDOCKEYWORDERROR = 18--wxSTC_SQL_USER1 :: Int-wxSTC_SQL_USER1 = 19--wxSTC_SQL_USER2 :: Int-wxSTC_SQL_USER2 = 20--wxSTC_SQL_USER3 :: Int-wxSTC_SQL_USER3 = 21--wxSTC_SQL_USER4 :: Int-wxSTC_SQL_USER4 = 22--wxSTC_SQL_QUOTEDIDENTIFIER :: Int-wxSTC_SQL_QUOTEDIDENTIFIER = 23--wxSTC_ST_DEFAULT :: Int-wxSTC_ST_DEFAULT = 0--wxSTC_ST_STRING :: Int-wxSTC_ST_STRING = 1--wxSTC_ST_NUMBER :: Int-wxSTC_ST_NUMBER = 2--wxSTC_ST_COMMENT :: Int-wxSTC_ST_COMMENT = 3--wxSTC_ST_SYMBOL :: Int-wxSTC_ST_SYMBOL = 4--wxSTC_ST_BINARY :: Int-wxSTC_ST_BINARY = 5--wxSTC_ST_BOOL :: Int-wxSTC_ST_BOOL = 6--wxSTC_ST_SELF :: Int-wxSTC_ST_SELF = 7--wxSTC_ST_SUPER :: Int-wxSTC_ST_SUPER = 8--wxSTC_ST_NIL :: Int-wxSTC_ST_NIL = 9--wxSTC_ST_GLOBAL :: Int-wxSTC_ST_GLOBAL = 10--wxSTC_ST_RETURN :: Int-wxSTC_ST_RETURN = 11--wxSTC_ST_SPECIAL :: Int-wxSTC_ST_SPECIAL = 12--wxSTC_ST_KWSEND :: Int-wxSTC_ST_KWSEND = 13--wxSTC_ST_ASSIGN :: Int-wxSTC_ST_ASSIGN = 14--wxSTC_ST_CHARACTER :: Int-wxSTC_ST_CHARACTER = 15--wxSTC_ST_SPEC_SEL :: Int-wxSTC_ST_SPEC_SEL = 16--wxSTC_FS_DEFAULT :: Int-wxSTC_FS_DEFAULT = 0--wxSTC_FS_COMMENT :: Int-wxSTC_FS_COMMENT = 1--wxSTC_FS_COMMENTLINE :: Int-wxSTC_FS_COMMENTLINE = 2--wxSTC_FS_COMMENTDOC :: Int-wxSTC_FS_COMMENTDOC = 3--wxSTC_FS_COMMENTLINEDOC :: Int-wxSTC_FS_COMMENTLINEDOC = 4--wxSTC_FS_COMMENTDOCKEYWORD :: Int-wxSTC_FS_COMMENTDOCKEYWORD = 5--wxSTC_FS_COMMENTDOCKEYWORDERROR :: Int-wxSTC_FS_COMMENTDOCKEYWORDERROR = 6--wxSTC_FS_KEYWORD :: Int-wxSTC_FS_KEYWORD = 7--wxSTC_FS_KEYWORD2 :: Int-wxSTC_FS_KEYWORD2 = 8--wxSTC_FS_KEYWORD3 :: Int-wxSTC_FS_KEYWORD3 = 9--wxSTC_FS_KEYWORD4 :: Int-wxSTC_FS_KEYWORD4 = 10--wxSTC_FS_NUMBER :: Int-wxSTC_FS_NUMBER = 11--wxSTC_FS_STRING :: Int-wxSTC_FS_STRING = 12--wxSTC_FS_PREPROCESSOR :: Int-wxSTC_FS_PREPROCESSOR = 13--wxSTC_FS_OPERATOR :: Int-wxSTC_FS_OPERATOR = 14--wxSTC_FS_IDENTIFIER :: Int-wxSTC_FS_IDENTIFIER = 15--wxSTC_FS_DATE :: Int-wxSTC_FS_DATE = 16--wxSTC_FS_STRINGEOL :: Int-wxSTC_FS_STRINGEOL = 17--wxSTC_FS_CONSTANT :: Int-wxSTC_FS_CONSTANT = 18--wxSTC_FS_ASM :: Int-wxSTC_FS_ASM = 19--wxSTC_FS_LABEL :: Int-wxSTC_FS_LABEL = 20--wxSTC_FS_ERROR :: Int-wxSTC_FS_ERROR = 21--wxSTC_FS_HEXNUMBER :: Int-wxSTC_FS_HEXNUMBER = 22--wxSTC_FS_BINNUMBER :: Int-wxSTC_FS_BINNUMBER = 23--wxSTC_CSOUND_DEFAULT :: Int-wxSTC_CSOUND_DEFAULT = 0--wxSTC_CSOUND_COMMENT :: Int-wxSTC_CSOUND_COMMENT = 1--wxSTC_CSOUND_NUMBER :: Int-wxSTC_CSOUND_NUMBER = 2--wxSTC_CSOUND_OPERATOR :: Int-wxSTC_CSOUND_OPERATOR = 3--wxSTC_CSOUND_INSTR :: Int-wxSTC_CSOUND_INSTR = 4--wxSTC_CSOUND_IDENTIFIER :: Int-wxSTC_CSOUND_IDENTIFIER = 5--wxSTC_CSOUND_OPCODE :: Int-wxSTC_CSOUND_OPCODE = 6--wxSTC_CSOUND_HEADERSTMT :: Int-wxSTC_CSOUND_HEADERSTMT = 7--wxSTC_CSOUND_USERKEYWORD :: Int-wxSTC_CSOUND_USERKEYWORD = 8--wxSTC_CSOUND_COMMENTBLOCK :: Int-wxSTC_CSOUND_COMMENTBLOCK = 9--wxSTC_CSOUND_PARAM :: Int-wxSTC_CSOUND_PARAM = 10--wxSTC_CSOUND_ARATE_VAR :: Int-wxSTC_CSOUND_ARATE_VAR = 11--wxSTC_CSOUND_KRATE_VAR :: Int-wxSTC_CSOUND_KRATE_VAR = 12--wxSTC_CSOUND_IRATE_VAR :: Int-wxSTC_CSOUND_IRATE_VAR = 13--wxSTC_CSOUND_GLOBAL_VAR :: Int-wxSTC_CSOUND_GLOBAL_VAR = 14--wxSTC_CSOUND_STRINGEOL :: Int-wxSTC_CSOUND_STRINGEOL = 15--wxSTC_CMD_REDO :: Int-wxSTC_CMD_REDO = 2011--wxSTC_CMD_SELECTALL :: Int-wxSTC_CMD_SELECTALL = 2013--wxSTC_CMD_UNDO :: Int-wxSTC_CMD_UNDO = 2176--wxSTC_CMD_CUT :: Int-wxSTC_CMD_CUT = 2177--wxSTC_CMD_COPY :: Int-wxSTC_CMD_COPY = 2178--wxSTC_CMD_PASTE :: Int-wxSTC_CMD_PASTE = 2179--wxSTC_CMD_CLEAR :: Int-wxSTC_CMD_CLEAR = 2180--wxSTC_CMD_LINEDOWN :: Int-wxSTC_CMD_LINEDOWN = 2300--wxSTC_CMD_LINEDOWNEXTEND :: Int-wxSTC_CMD_LINEDOWNEXTEND = 2301--wxSTC_CMD_LINEUP :: Int-wxSTC_CMD_LINEUP = 2302--wxSTC_CMD_LINEUPEXTEND :: Int-wxSTC_CMD_LINEUPEXTEND = 2303--wxSTC_CMD_CHARLEFT :: Int-wxSTC_CMD_CHARLEFT = 2304--wxSTC_CMD_CHARLEFTEXTEND :: Int-wxSTC_CMD_CHARLEFTEXTEND = 2305--wxSTC_CMD_CHARRIGHT :: Int-wxSTC_CMD_CHARRIGHT = 2306--wxSTC_CMD_CHARRIGHTEXTEND :: Int-wxSTC_CMD_CHARRIGHTEXTEND = 2307--wxSTC_CMD_WORDLEFT :: Int-wxSTC_CMD_WORDLEFT = 2308--wxSTC_CMD_WORDLEFTEXTEND :: Int-wxSTC_CMD_WORDLEFTEXTEND = 2309--wxSTC_CMD_WORDRIGHT :: Int-wxSTC_CMD_WORDRIGHT = 2310--wxSTC_CMD_WORDRIGHTEXTEND :: Int-wxSTC_CMD_WORDRIGHTEXTEND = 2311--wxSTC_CMD_HOME :: Int-wxSTC_CMD_HOME = 2312--wxSTC_CMD_HOMEEXTEND :: Int-wxSTC_CMD_HOMEEXTEND = 2313--wxSTC_CMD_LINEEND :: Int-wxSTC_CMD_LINEEND = 2314--wxSTC_CMD_LINEENDEXTEND :: Int-wxSTC_CMD_LINEENDEXTEND = 2315--wxSTC_CMD_DOCUMENTSTART :: Int-wxSTC_CMD_DOCUMENTSTART = 2316--wxSTC_CMD_DOCUMENTSTARTEXTEND :: Int-wxSTC_CMD_DOCUMENTSTARTEXTEND = 2317--wxSTC_CMD_DOCUMENTEND :: Int-wxSTC_CMD_DOCUMENTEND = 2318--wxSTC_CMD_DOCUMENTENDEXTEND :: Int-wxSTC_CMD_DOCUMENTENDEXTEND = 2319--wxSTC_CMD_PAGEUP :: Int-wxSTC_CMD_PAGEUP = 2320--wxSTC_CMD_PAGEUPEXTEND :: Int-wxSTC_CMD_PAGEUPEXTEND = 2321--wxSTC_CMD_PAGEDOWN :: Int-wxSTC_CMD_PAGEDOWN = 2322--wxSTC_CMD_PAGEDOWNEXTEND :: Int-wxSTC_CMD_PAGEDOWNEXTEND = 2323--wxSTC_CMD_EDITTOGGLEOVERTYPE :: Int-wxSTC_CMD_EDITTOGGLEOVERTYPE = 2324--wxSTC_CMD_CANCEL :: Int-wxSTC_CMD_CANCEL = 2325--wxSTC_CMD_DELETEBACK :: Int-wxSTC_CMD_DELETEBACK = 2326--wxSTC_CMD_TAB :: Int-wxSTC_CMD_TAB = 2327--wxSTC_CMD_BACKTAB :: Int-wxSTC_CMD_BACKTAB = 2328--wxSTC_CMD_NEWLINE :: Int-wxSTC_CMD_NEWLINE = 2329--wxSTC_CMD_FORMFEED :: Int-wxSTC_CMD_FORMFEED = 2330--wxSTC_CMD_VCHOME :: Int-wxSTC_CMD_VCHOME = 2331--wxSTC_CMD_VCHOMEEXTEND :: Int-wxSTC_CMD_VCHOMEEXTEND = 2332--wxSTC_CMD_ZOOMIN :: Int-wxSTC_CMD_ZOOMIN = 2333--wxSTC_CMD_ZOOMOUT :: Int-wxSTC_CMD_ZOOMOUT = 2334--wxSTC_CMD_DELWORDLEFT :: Int-wxSTC_CMD_DELWORDLEFT = 2335--wxSTC_CMD_DELWORDRIGHT :: Int-wxSTC_CMD_DELWORDRIGHT = 2336--wxSTC_CMD_LINECUT :: Int-wxSTC_CMD_LINECUT = 2337--wxSTC_CMD_LINEDELETE :: Int-wxSTC_CMD_LINEDELETE = 2338--wxSTC_CMD_LINETRANSPOSE :: Int-wxSTC_CMD_LINETRANSPOSE = 2339--wxSTC_CMD_LINEDUPLICATE :: Int-wxSTC_CMD_LINEDUPLICATE = 2404--wxSTC_CMD_LOWERCASE :: Int-wxSTC_CMD_LOWERCASE = 2340--wxSTC_CMD_UPPERCASE :: Int-wxSTC_CMD_UPPERCASE = 2341--wxSTC_CMD_LINESCROLLDOWN :: Int-wxSTC_CMD_LINESCROLLDOWN = 2342--wxSTC_CMD_LINESCROLLUP :: Int-wxSTC_CMD_LINESCROLLUP = 2343--wxSTC_CMD_DELETEBACKNOTLINE :: Int-wxSTC_CMD_DELETEBACKNOTLINE = 2344--wxSTC_CMD_HOMEDISPLAY :: Int-wxSTC_CMD_HOMEDISPLAY = 2345--wxSTC_CMD_HOMEDISPLAYEXTEND :: Int-wxSTC_CMD_HOMEDISPLAYEXTEND = 2346--wxSTC_CMD_LINEENDDISPLAY :: Int-wxSTC_CMD_LINEENDDISPLAY = 2347--wxSTC_CMD_LINEENDDISPLAYEXTEND :: Int-wxSTC_CMD_LINEENDDISPLAYEXTEND = 2348--wxSTC_CMD_HOMEWRAP :: Int-wxSTC_CMD_HOMEWRAP = 2349--wxSTC_CMD_HOMEWRAPEXTEND :: Int-wxSTC_CMD_HOMEWRAPEXTEND = 2450--wxSTC_CMD_LINEENDWRAP :: Int-wxSTC_CMD_LINEENDWRAP = 2451--wxSTC_CMD_LINEENDWRAPEXTEND :: Int-wxSTC_CMD_LINEENDWRAPEXTEND = 2452--wxSTC_CMD_VCHOMEWRAP :: Int-wxSTC_CMD_VCHOMEWRAP = 2453--wxSTC_CMD_VCHOMEWRAPEXTEND :: Int-wxSTC_CMD_VCHOMEWRAPEXTEND = 2454--wxSTC_CMD_LINECOPY :: Int-wxSTC_CMD_LINECOPY = 2455--wxSTC_CMD_WORDPARTLEFT :: Int-wxSTC_CMD_WORDPARTLEFT = 2390--wxSTC_CMD_WORDPARTLEFTEXTEND :: Int-wxSTC_CMD_WORDPARTLEFTEXTEND = 2391--wxSTC_CMD_WORDPARTRIGHT :: Int-wxSTC_CMD_WORDPARTRIGHT = 2392--wxSTC_CMD_WORDPARTRIGHTEXTEND :: Int-wxSTC_CMD_WORDPARTRIGHTEXTEND = 2393--wxSTC_CMD_DELLINELEFT :: Int-wxSTC_CMD_DELLINELEFT = 2395--wxSTC_CMD_DELLINERIGHT :: Int-wxSTC_CMD_DELLINERIGHT = 2396--wxSTC_CMD_PARADOWN :: Int-wxSTC_CMD_PARADOWN = 2413--wxSTC_CMD_PARADOWNEXTEND :: Int-wxSTC_CMD_PARADOWNEXTEND = 2414--wxSTC_CMD_PARAUP :: Int-wxSTC_CMD_PARAUP = 2415--wxSTC_CMD_PARAUPEXTEND :: Int-wxSTC_CMD_PARAUPEXTEND = 2416--wxSTC_CMD_LINEDOWNRECTEXTEND :: Int-wxSTC_CMD_LINEDOWNRECTEXTEND = 2426--wxSTC_CMD_LINEUPRECTEXTEND :: Int-wxSTC_CMD_LINEUPRECTEXTEND = 2427--wxSTC_CMD_CHARLEFTRECTEXTEND :: Int-wxSTC_CMD_CHARLEFTRECTEXTEND = 2428--wxSTC_CMD_CHARRIGHTRECTEXTEND :: Int-wxSTC_CMD_CHARRIGHTRECTEXTEND = 2429--wxSTC_CMD_HOMERECTEXTEND :: Int-wxSTC_CMD_HOMERECTEXTEND = 2430--wxSTC_CMD_VCHOMERECTEXTEND :: Int-wxSTC_CMD_VCHOMERECTEXTEND = 2431--wxSTC_CMD_LINEENDRECTEXTEND :: Int-wxSTC_CMD_LINEENDRECTEXTEND = 2432--wxSTC_CMD_PAGEUPRECTEXTEND :: Int-wxSTC_CMD_PAGEUPRECTEXTEND = 2433--wxSTC_CMD_PAGEDOWNRECTEXTEND :: Int-wxSTC_CMD_PAGEDOWNRECTEXTEND = 2434--wxSTC_CMD_STUTTEREDPAGEUP :: Int-wxSTC_CMD_STUTTEREDPAGEUP = 2435--wxSTC_CMD_STUTTEREDPAGEUPEXTEND :: Int-wxSTC_CMD_STUTTEREDPAGEUPEXTEND = 2436--wxSTC_CMD_STUTTEREDPAGEDOWN :: Int-wxSTC_CMD_STUTTEREDPAGEDOWN = 2437--wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND :: Int-wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND = 2438--wxSTC_CMD_WORDLEFTEND :: Int-wxSTC_CMD_WORDLEFTEND = 2439--wxSTC_CMD_WORDLEFTENDEXTEND :: Int-wxSTC_CMD_WORDLEFTENDEXTEND = 2440--wxSTC_CMD_WORDRIGHTEND :: Int-wxSTC_CMD_WORDRIGHTEND = 2441--wxSTC_CMD_WORDRIGHTENDEXTEND :: Int-wxSTC_CMD_WORDRIGHTENDEXTEND = 2442-+-------------------------------------------------------------------------------- +{-| Module : WxcDefs + Copyright : Copyright (c) Daan Leijen 2003, 2004 + License : wxWidgets + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Haskell constant definitions for the wxWidgets C library (@wxc.dll@). + +This file was originally generated automatically by wxDirect; it +is now manually maintained. + +-} +-------------------------------------------------------------------------------- +module Graphics.UI.WXCore.WxcDefs + ( -- * Types + BitFlag + -- * Constants + , cB_BAR_CONTENT_HITTED + , cB_LEFT_BAR_HANDLE_HITTED + , cB_LOWER_ROW_HANDLE_HITTED + , cB_NO_ITEMS_HITTED + , cB_RIGHT_BAR_HANDLE_HITTED + , cB_UPPER_ROW_HANDLE_HITTED + , fL_ALIGN_BOTTOM + , fL_ALIGN_BOTTOM_PANE + , fL_ALIGN_LEFT + , fL_ALIGN_LEFT_PANE + , fL_ALIGN_RIGHT + , fL_ALIGN_RIGHT_PANE + , fL_ALIGN_TOP + , fL_ALIGN_TOP_PANE + , wxACCEL_ALT + , wxACCEL_CTRL + , wxACCEL_NORMAL + , wxACCEL_SHIFT + , wxADJUST_MINSIZE + , wxALIGN_BOTTOM + , wxALIGN_CENTER + , wxALIGN_CENTER_HORIZONTAL + , wxALIGN_CENTER_VERTICAL + , wxALIGN_CENTRE + , wxALIGN_CENTRE_HORIZONTAL + , wxALIGN_CENTRE_VERTICAL + , wxALIGN_LEFT + , wxALIGN_NOT + , wxALIGN_RIGHT + , wxALIGN_TOP + , wxALL + , wxALL_PANES + , wxAND + , wxAND_INVERT + , wxAND_REVERSE + , wxBACKWARD + , wxBDIAGONAL_HATCH + , wxBEOS + , wxBIG_ENDIAN + , wxBITMAP_TYPE_ANY + , wxBITMAP_TYPE_BMP + , wxBITMAP_TYPE_BMP_RESOURCE + , wxBITMAP_TYPE_CUR + , wxBITMAP_TYPE_CUR_RESOURCE + , wxBITMAP_TYPE_GIF + , wxBITMAP_TYPE_GIF_RESOURCE + , wxBITMAP_TYPE_ICO + , wxBITMAP_TYPE_ICON + , wxBITMAP_TYPE_ICON_RESOURCE + , wxBITMAP_TYPE_ICO_RESOURCE + , wxBITMAP_TYPE_INVALID + , wxBITMAP_TYPE_JPEG + , wxBITMAP_TYPE_JPEG_RESOURCE + , wxBITMAP_TYPE_MACCURSOR + , wxBITMAP_TYPE_MACCURSOR_RESOURCE + , wxBITMAP_TYPE_PCX + , wxBITMAP_TYPE_PCX_RESOURCE + , wxBITMAP_TYPE_PICT + , wxBITMAP_TYPE_PICT_RESOURCE + , wxBITMAP_TYPE_PNG + , wxBITMAP_TYPE_PNG_RESOURCE + , wxBITMAP_TYPE_PNM + , wxBITMAP_TYPE_PNM_RESOURCE + , wxBITMAP_TYPE_RESOURCE + , wxBITMAP_TYPE_TIF + , wxBITMAP_TYPE_TIF_RESOURCE + , wxBITMAP_TYPE_XBM + , wxBITMAP_TYPE_XBM_DATA + , wxBITMAP_TYPE_XPM + , wxBITMAP_TYPE_XPM_DATA + , wxBLACK + , wxBLACK_BRUSH + , wxBLACK_DASHED_PEN + , wxBLACK_PEN + , wxBLUE + , wxBLUE_BRUSH + , wxBOLD + , wxBOOLEAN + , wxBORDER + , wxBORDER_DEFAULT + , wxBORDER_MASK + , wxBORDER_NONE + , wxBORDER_RAISED + , wxBORDER_SIMPLE + , wxBORDER_STATIC + , wxBORDER_SUNKEN + , wxBORDER_THEME + , wxBOTH + , wxBOTTOM + , wxBRUSHSTYLE_BDIAGONAL_HATCH + , wxBRUSHSTYLE_CROSSDIAG_HATCH + , wxBRUSHSTYLE_CROSS_HATCH + , wxBRUSHSTYLE_FDIAGONAL_HATCH + , wxBRUSHSTYLE_FIRST_HATCH + , wxBRUSHSTYLE_HORIZONTAL_HATCH + , wxBRUSHSTYLE_INVALID + , wxBRUSHSTYLE_LAST_HATCH + , wxBRUSHSTYLE_SOLID + , wxBRUSHSTYLE_STIPPLE + , wxBRUSHSTYLE_STIPPLE_MASK + , wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE + , wxBRUSHSTYLE_TRANSPARENT + , wxBRUSHSTYLE_VERTICAL_HATCH + , wxBU_ALIGN_MASK + , wxBU_AUTODRAW + , wxBU_BOTTOM + , wxBU_EXACTFIT + , wxBU_LEFT + , wxBU_NOAUTODRAW + , wxBU_NOTEXT + , wxBU_RIGHT + , wxBU_TOP + , wxCAL_BORDER_NONE + , wxCAL_BORDER_ROUND + , wxCAL_BORDER_SQUARE + , wxCAL_HITTEST_DAY + , wxCAL_HITTEST_HEADER + , wxCAL_HITTEST_NOWHERE + , wxCAL_MONDAY_FIRST + , wxCAL_NO_MONTH_CHANGE + , wxCAL_NO_YEAR_CHANGE + , wxCAL_SHOW_HOLIDAYS + , wxCAL_SUNDAY_FIRST + , wxCANCEL + , wxCAPTION + , wxCAP_BUTT + , wxCAP_INVALID + , wxCAP_PROJECTING + , wxCAP_ROUND + , wxCBAR_DOCKED_HORIZONTALLY + , wxCBAR_DOCKED_VERTICALLY + , wxCBAR_FLOATING + , wxCBAR_HIDDEN + , wxCB_DROPDOWN + , wxCB_READONLY + , wxCB_SIMPLE + , wxCB_SORT + , wxCENTER + , wxCENTER_FRAME + , wxCENTRE + , wxCENTRE_ON_SCREEN + , wxCHANGE_DIR + , wxCLEAR + , wxCLIP_CHILDREN + , wxCLOSE_BOX + , wxCOLOURED + , wxCONFIG_TYPE_BOOLEAN + , wxCONFIG_TYPE_FLOAT + , wxCONFIG_TYPE_INTEGER + , wxCONFIG_TYPE_STRING + , wxCONFIG_TYPE_UNKNOWN + , wxCONFIG_USE_GLOBAL_FILE + , wxCONFIG_USE_LOCAL_FILE + , wxCONFIG_USE_NO_ESCAPE_CHARACTERS + , wxCONFIG_USE_RELATIVE_PATH + , wxCOPY + , wxCOSE_X + , wxCROSSDIAG_HATCH + , wxCROSS_HATCH + , wxCURSES + , wxCURSOR_ARROW + , wxCURSOR_BLANK + , wxCURSOR_BULLSEYE + , wxCURSOR_CHAR + , wxCURSOR_CROSS + , wxCURSOR_HAND + , wxCURSOR_IBEAM + , wxCURSOR_LEFT_BUTTON + , wxCURSOR_MAGNIFIER + , wxCURSOR_MIDDLE_BUTTON + , wxCURSOR_NONE + , wxCURSOR_NO_ENTRY + , wxCURSOR_PAINT_BRUSH + , wxCURSOR_PENCIL + , wxCURSOR_POINT_LEFT + , wxCURSOR_POINT_RIGHT + , wxCURSOR_QUESTION_ARROW + , wxCURSOR_RIGHT_ARROW + , wxCURSOR_RIGHT_BUTTON + , wxCURSOR_SIZENESW + , wxCURSOR_SIZENS + , wxCURSOR_SIZENWSE + , wxCURSOR_SIZEWE + , wxCURSOR_SIZING + , wxCURSOR_SPRAYCAN + , wxCURSOR_WAIT + , wxCURSOR_WATCH + , wxCYAN + , wxCYAN_BRUSH + , wxCYAN_PEN + , wxDB_DATA_TYPE_BLOB + , wxDB_DATA_TYPE_DATE + , wxDB_DATA_TYPE_FLOAT + , wxDB_DATA_TYPE_INTEGER + , wxDB_DATA_TYPE_VARCHAR + , wxDB_DEL_KEYFIELDS + , wxDB_DEL_MATCHING + , wxDB_DEL_WHERE + , wxDB_GRANT_ALL + , wxDB_GRANT_DELETE + , wxDB_GRANT_INSERT + , wxDB_GRANT_SELECT + , wxDB_GRANT_UPDATE + , wxDB_MAX_COLUMN_NAME_LEN + , wxDB_MAX_ERROR_HISTORY + , wxDB_MAX_ERROR_MSG_LEN + , wxDB_MAX_STATEMENT_LEN + , wxDB_MAX_TABLE_NAME_LEN + , wxDB_MAX_WHERE_CLAUSE_LEN + , wxDB_SELECT_KEYFIELDS + , wxDB_SELECT_MATCHING + , wxDB_SELECT_STATEMENT + , wxDB_SELECT_WHERE + , wxDB_TYPE_NAME_LEN + , wxDB_UPD_KEYFIELDS + , wxDB_UPD_WHERE + , wxDB_WHERE_KEYFIELDS + , wxDB_WHERE_MATCHING + , wxDECORATIVE + , wxDEFAULT + , wxDEFAULT_FRAME_STYLE + , wxDF_BITMAP + , wxDF_DIB + , wxDF_DIF + , wxDF_ENHMETAFILE + , wxDF_FILENAME + , wxDF_HTML + , wxDF_INVALID + , wxDF_LOCALE + , wxDF_MAX + , wxDF_METAFILE + , wxDF_OEMTEXT + , wxDF_PALETTE + , wxDF_PENDATA + , wxDF_PRIVATE + , wxDF_RIFF + , wxDF_SYLK + , wxDF_TEXT + , wxDF_TIFF + , wxDF_UNICODETEXT + , wxDF_WAVE + , wxDIALOG_EX_CONTEXTHELP + , wxDIALOG_MODAL + , wxDIALOG_MODELESS + , wxDOT + , wxDOT_DASH + , wxDOUBLE_BORDER + , wxDOWN + , wxDRAG_ALLOWMOVE + , wxDRAG_CANCEL + , wxDRAG_COPY + , wxDRAG_COPYONLY + , wxDRAG_DEFALUTMOVE + , wxDRAG_ERROR + , wxDRAG_LINK + , wxDRAG_MOVE + , wxDRAG_NONE + , wxDS_DRAG_CORNER + , wxDS_MANAGE_SCROLLBARS + , wxDUPLEX_HORIZONTAL + , wxDUPLEX_SIMPLEX + , wxDUPLEX_VERTICAL + , wxEAST + , wxEDGE_BOTTOM + , wxEDGE_CENTER + , wxEDGE_CENTREX + , wxEDGE_CENTREY + , wxEDGE_HEIGHT + , wxEDGE_LEFT + , wxEDGE_RIGHT + , wxEDGE_TOP + , wxEDGE_WIDTH + , wxED_BUTTONS_BOTTOM + , wxED_BUTTONS_RIGHT + , wxED_CLIENT_MARGIN + , wxED_STATIC_LINE + , wxEL_ALLOW_DELETE + , wxEL_ALLOW_EDIT + , wxEL_ALLOW_NEW + , wxEQUIV + , wxEVT_FIRST + , wxEVT_NULL + , wxEXEC_ASYNC + , wxEXEC_MAKE_GROUP_LEADER + , wxEXEC_NOHIDE + , wxEXEC_SYNC + , wxEXPAND + , wxFDIAGONAL_HATCH + , wxFILE_MUST_EXIST + , wxFILTER_ALPHA + , wxFILTER_ALPHANUMERIC + , wxFILTER_ASCII + , wxFILTER_EXCLUDE_LIST + , wxFILTER_INCLUDE_LIST + , wxFILTER_LOWER_CASE + , wxFILTER_NONE + , wxFILTER_NUMERIC + , wxFILTER_UPPER_CASE + , wxFIXED + , wxFIXED_LENGTH + , wxFIXED_MINSIZE + , wxFLOAT + , wxFLOOD_BORDER + , wxFLOOD_SURFACE + , wxFONTENCODING_ALTERNATIVE + , wxFONTENCODING_BULGARIAN + , wxFONTENCODING_CP1250 + , wxFONTENCODING_CP1251 + , wxFONTENCODING_CP1252 + , wxFONTENCODING_CP1253 + , wxFONTENCODING_CP1254 + , wxFONTENCODING_CP1255 + , wxFONTENCODING_CP1256 + , wxFONTENCODING_CP1257 + , wxFONTENCODING_CP12_MAX + , wxFONTENCODING_CP437 + , wxFONTENCODING_CP850 + , wxFONTENCODING_CP852 + , wxFONTENCODING_CP855 + , wxFONTENCODING_CP866 + , wxFONTENCODING_CP874 + , wxFONTENCODING_DEFAULT + , wxFONTENCODING_ISO8859_1 + , wxFONTENCODING_ISO8859_10 + , wxFONTENCODING_ISO8859_11 + , wxFONTENCODING_ISO8859_12 + , wxFONTENCODING_ISO8859_13 + , wxFONTENCODING_ISO8859_14 + , wxFONTENCODING_ISO8859_15 + , wxFONTENCODING_ISO8859_2 + , wxFONTENCODING_ISO8859_3 + , wxFONTENCODING_ISO8859_4 + , wxFONTENCODING_ISO8859_5 + , wxFONTENCODING_ISO8859_6 + , wxFONTENCODING_ISO8859_7 + , wxFONTENCODING_ISO8859_8 + , wxFONTENCODING_ISO8859_9 + , wxFONTENCODING_ISO8859_MAX + , wxFONTENCODING_KOI8 + , wxFONTENCODING_MAX + , wxFONTENCODING_SYSTEM + , wxFONTENCODING_UNICODE + , wxFONTFAMILY_DECORATIVE + , wxFONTFAMILY_DEFAULT + , wxFONTFAMILY_MAX + , wxFONTFAMILY_MODERN + , wxFONTFAMILY_ROMAN + , wxFONTFAMILY_SCRIPT + , wxFONTFAMILY_SWISS + , wxFONTFAMILY_TELETYPE + , wxFONTFAMILY_UNKNOWN + , wxFONTFLAG_ANTIALIASED + , wxFONTFLAG_BOLD + , wxFONTFLAG_DEFAULT + , wxFONTFLAG_ITALIC + , wxFONTFLAG_LIGHT + , wxFONTFLAG_MASK + , wxFONTFLAG_NOT_ANTIALIASED + , wxFONTFLAG_SLANT + , wxFONTFLAG_STRIKETHROUGH + , wxFONTFLAG_UNDERLINED + , wxFONTSIZE_LARGE + , wxFONTSIZE_MEDIUM + , wxFONTSIZE_SMALL + , wxFONTSIZE_XX_LARGE + , wxFONTSIZE_XX_SMALL + , wxFONTSIZE_X_LARGE + , wxFONTSIZE_X_SMALL + , wxFONTSTYLE_ITALIC + , wxFONTSTYLE_MAX + , wxFONTSTYLE_NORMAL + , wxFONTSTYLE_SLANT + , wxFONTWEIGHT_BOLD + , wxFONTWEIGHT_LIGHT + , wxFONTWEIGHT_MAX + , wxFONTWEIGHT_NORMAL + , wxFORWARD + , wxFRAME_EX_CONTEXTHELP + , wxFRAME_FLOAT_ON_PARENT + , wxFRAME_NO_WINDOW_MENU + , wxFRAME_SHAPED + , wxFRAME_TOOL_WINDOW + , wxFR_DOWN + , wxFR_MATCHCASE + , wxFR_NOMATCHCASE + , wxFR_NOUPDOWN + , wxFR_NOWHOLEWORD + , wxFR_REPLACEDIALOG + , wxFR_WHOLEWORD + , wxFULLSCREEN_ALL + , wxFULLSCREEN_NOBORDER + , wxFULLSCREEN_NOCAPTION + , wxFULLSCREEN_NOMENUBAR + , wxFULLSCREEN_NOSTATUSBAR + , wxFULLSCREEN_NOTOOLBAR + , wxGA_PROGRESSBAR + , wxGA_SMOOTH + , wxGEOS + , wxGREEN + , wxGREEN_BRUSH + , wxGREEN_PEN + , wxGREY_BRUSH + , wxGREY_PEN + , wxGRIDTABLE_NOTIFY_COLS_APPENDED + , wxGRIDTABLE_NOTIFY_COLS_DELETED + , wxGRIDTABLE_NOTIFY_COLS_INSERTED + , wxGRIDTABLE_NOTIFY_ROWS_APPENDED + , wxGRIDTABLE_NOTIFY_ROWS_DELETED + , wxGRIDTABLE_NOTIFY_ROWS_INSERTED + , wxGRIDTABLE_REQUEST_VIEW_GET_VALUES + , wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES + , wxGROW + , wxGTK + , wxGTK_BEOS + , wxGTK_OS2 + , wxGTK_WIN32 + , wxGridSelectCells + , wxGridSelectColumns + , wxGridSelectRows + , wxHATCHSTYLE_BDIAGONAL + , wxHATCHSTYLE_CROSS + , wxHATCHSTYLE_CROSSDIAG + , wxHATCHSTYLE_FDIAGONAL + , wxHATCHSTYLE_FIRST + , wxHATCHSTYLE_HORIZONTAL + , wxHATCHSTYLE_LAST + , wxHATCHSTYLE_VERTICAL + , wxHELP + , wxHF_BOOKMARKS + , wxHF_CONTENTS + , wxHF_DEFAULTSTYLE + , wxHF_FLATTOOLBAR + , wxHF_INDEX + , wxHF_OPENFILES + , wxHF_PRINT + , wxHF_SEARCH + , wxHF_TOOLBAR + , wxHIDE_READONLY + , wxHORIZONTAL + , wxHORIZONTAL_HATCH + , wxHSCROLL + , wxHW_SCROLLBAR_AUTO + , wxHW_SCROLLBAR_NEVER + , wxICONIZE + , wxICON_EXCLAMATION + , wxICON_HAND + , wxICON_INFORMATION + , wxICON_QUESTION + , wxID_ABOUT + , wxID_APPLY + , wxID_BACKWARD + , wxID_CANCEL + , wxID_CLEAR + , wxID_CLOSE + , wxID_CLOSE_ALL + , wxID_COPY + , wxID_CUT + , wxID_DEFAULT + , wxID_DELETE + , wxID_DUPLICATE + , wxID_EDIT + , wxID_EXIT + , wxID_FILE1 + , wxID_FILE2 + , wxID_FILE3 + , wxID_FILE4 + , wxID_FILE5 + , wxID_FILE6 + , wxID_FILE7 + , wxID_FILE8 + , wxID_FILE9 + , wxID_FILEDLGG + , wxID_FIND + , wxID_FORWARD + , wxID_HELP + , wxID_HELP_COMMANDS + , wxID_HELP_CONTENTS + , wxID_HELP_CONTEXT + , wxID_HELP_PROCEDURES + , wxID_HIGHEST + , wxID_LOWEST + , wxID_MORE + , wxID_NEW + , wxID_NO + , wxID_OK + , wxID_OPEN + , wxID_PASTE + , wxID_PREFERENCES + , wxID_PREVIEW + , wxID_PREVIEW_CLOSE + , wxID_PREVIEW_FIRST + , wxID_PREVIEW_GOTO + , wxID_PREVIEW_LAST + , wxID_PREVIEW_NEXT + , wxID_PREVIEW_PREVIOUS + , wxID_PREVIEW_PRINT + , wxID_PREVIEW_ZOOM + , wxID_PRINT + , wxID_PRINT_SETUP + , wxID_PROPERTIES + , wxID_REDO + , wxID_REPLACE + , wxID_REPLACE_ALL + , wxID_RESET + , wxID_REVERT + , wxID_SAVE + , wxID_SAVEAS + , wxID_SELECTALL + , wxID_SETUP + , wxID_STATIC + , wxID_UNDO + , wxID_VIEW_DETAILS + , wxID_VIEW_LARGEICONS + , wxID_VIEW_LIST + , wxID_VIEW_SMALLICONS + , wxID_VIEW_SORTDATE + , wxID_VIEW_SORTNAME + , wxID_VIEW_SORTSIZE + , wxID_VIEW_SORTTYPE + , wxID_YES + , wxIMAGE_LIST_NORMAL + , wxIMAGE_LIST_SMALL + , wxIMAGE_LIST_STATE + , wxINTEGER + , wxINVERT + , wxITALIC + , wxITEM_CHECK + , wxITEM_MAX + , wxITEM_NORMAL + , wxITEM_RADIO + , wxITEM_SEPARATOR + , wxJOIN_BEVEL + , wxJOIN_INVALID + , wxJOIN_MITER + , wxJOIN_ROUND + , wxJOYSTICK1 + , wxJOYSTICK2 + , wxJOY_BUTTON1 + , wxJOY_BUTTON2 + , wxJOY_BUTTON3 + , wxJOY_BUTTON4 + , wxKILL_ACCESS_DENIED + , wxKILL_BAD_SIGNAL + , wxKILL_ERROR + , wxKILL_NO_PROCESS + , wxKILL_OK + , wxLANDSCAPE + , wxLANGUAGE_ABKHAZIAN + , wxLANGUAGE_AFAR + , wxLANGUAGE_AFRIKAANS + , wxLANGUAGE_ALBANIAN + , wxLANGUAGE_AMHARIC + , wxLANGUAGE_ARABIC + , wxLANGUAGE_ARABIC_ALGERIA + , wxLANGUAGE_ARABIC_BAHRAIN + , wxLANGUAGE_ARABIC_EGYPT + , wxLANGUAGE_ARABIC_IRAQ + , wxLANGUAGE_ARABIC_JORDAN + , wxLANGUAGE_ARABIC_KUWAIT + , wxLANGUAGE_ARABIC_LEBANON + , wxLANGUAGE_ARABIC_LIBYA + , wxLANGUAGE_ARABIC_MOROCCO + , wxLANGUAGE_ARABIC_OMAN + , wxLANGUAGE_ARABIC_QATAR + , wxLANGUAGE_ARABIC_SAUDI_ARABIA + , wxLANGUAGE_ARABIC_SUDAN + , wxLANGUAGE_ARABIC_SYRIA + , wxLANGUAGE_ARABIC_TUNISIA + , wxLANGUAGE_ARABIC_UAE + , wxLANGUAGE_ARABIC_YEMEN + , wxLANGUAGE_ARMENIAN + , wxLANGUAGE_ASSAMESE + , wxLANGUAGE_AYMARA + , wxLANGUAGE_AZERI + , wxLANGUAGE_AZERI_CYRILLIC + , wxLANGUAGE_AZERI_LATIN + , wxLANGUAGE_BASHKIR + , wxLANGUAGE_BASQUE + , wxLANGUAGE_BELARUSIAN + , wxLANGUAGE_BENGALI + , wxLANGUAGE_BHUTANI + , wxLANGUAGE_BIHARI + , wxLANGUAGE_BISLAMA + , wxLANGUAGE_BRETON + , wxLANGUAGE_BULGARIAN + , wxLANGUAGE_BURMESE + , wxLANGUAGE_CAMBODIAN + , wxLANGUAGE_CATALAN + , wxLANGUAGE_CHINESE + , wxLANGUAGE_CHINESE_HONGKONG + , wxLANGUAGE_CHINESE_MACAU + , wxLANGUAGE_CHINESE_SIMPLIFIED + , wxLANGUAGE_CHINESE_SINGAPORE + , wxLANGUAGE_CHINESE_TAIWAN + , wxLANGUAGE_CHINESE_TRADITIONAL + , wxLANGUAGE_CORSICAN + , wxLANGUAGE_CROATIAN + , wxLANGUAGE_CZECH + , wxLANGUAGE_DANISH + , wxLANGUAGE_DEFAULT + , wxLANGUAGE_DUTCH + , wxLANGUAGE_DUTCH_BELGIAN + , wxLANGUAGE_ENGLISH + , wxLANGUAGE_ENGLISH_AUSTRALIA + , wxLANGUAGE_ENGLISH_BELIZE + , wxLANGUAGE_ENGLISH_BOTSWANA + , wxLANGUAGE_ENGLISH_CANADA + , wxLANGUAGE_ENGLISH_CARIBBEAN + , wxLANGUAGE_ENGLISH_DENMARK + , wxLANGUAGE_ENGLISH_EIRE + , wxLANGUAGE_ENGLISH_JAMAICA + , wxLANGUAGE_ENGLISH_NEW_ZEALAND + , wxLANGUAGE_ENGLISH_PHILIPPINES + , wxLANGUAGE_ENGLISH_SOUTH_AFRICA + , wxLANGUAGE_ENGLISH_TRINIDAD + , wxLANGUAGE_ENGLISH_UK + , wxLANGUAGE_ENGLISH_US + , wxLANGUAGE_ENGLISH_ZIMBABWE + , wxLANGUAGE_ESPERANTO + , wxLANGUAGE_ESTONIAN + , wxLANGUAGE_FAEROESE + , wxLANGUAGE_FARSI + , wxLANGUAGE_FIJI + , wxLANGUAGE_FINNISH + , wxLANGUAGE_FRENCH + , wxLANGUAGE_FRENCH_BELGIAN + , wxLANGUAGE_FRENCH_CANADIAN + , wxLANGUAGE_FRENCH_LUXEMBOURG + , wxLANGUAGE_FRENCH_MONACO + , wxLANGUAGE_FRENCH_SWISS + , wxLANGUAGE_FRISIAN + , wxLANGUAGE_GALICIAN + , wxLANGUAGE_GEORGIAN + , wxLANGUAGE_GERMAN + , wxLANGUAGE_GERMAN_AUSTRIAN + , wxLANGUAGE_GERMAN_BELGIUM + , wxLANGUAGE_GERMAN_LIECHTENSTEIN + , wxLANGUAGE_GERMAN_LUXEMBOURG + , wxLANGUAGE_GERMAN_SWISS + , wxLANGUAGE_GREEK + , wxLANGUAGE_GREENLANDIC + , wxLANGUAGE_GUARANI + , wxLANGUAGE_GUJARATI + , wxLANGUAGE_HAUSA + , wxLANGUAGE_HEBREW + , wxLANGUAGE_HINDI + , wxLANGUAGE_HUNGARIAN + , wxLANGUAGE_ICELANDIC + , wxLANGUAGE_INDONESIAN + , wxLANGUAGE_INTERLINGUA + , wxLANGUAGE_INTERLINGUE + , wxLANGUAGE_INUKTITUT + , wxLANGUAGE_INUPIAK + , wxLANGUAGE_IRISH + , wxLANGUAGE_ITALIAN + , wxLANGUAGE_ITALIAN_SWISS + , wxLANGUAGE_JAPANESE + , wxLANGUAGE_JAVANESE + , wxLANGUAGE_KANNADA + , wxLANGUAGE_KASHMIRI + , wxLANGUAGE_KASHMIRI_INDIA + , wxLANGUAGE_KAZAKH + , wxLANGUAGE_KERNEWEK + , wxLANGUAGE_KINYARWANDA + , wxLANGUAGE_KIRGHIZ + , wxLANGUAGE_KIRUNDI + , wxLANGUAGE_KONKANI + , wxLANGUAGE_KOREAN + , wxLANGUAGE_KURDISH + , wxLANGUAGE_LAOTHIAN + , wxLANGUAGE_LATIN + , wxLANGUAGE_LATVIAN + , wxLANGUAGE_LINGALA + , wxLANGUAGE_LITHUANIAN + , wxLANGUAGE_MACEDONIAN + , wxLANGUAGE_MALAGASY + , wxLANGUAGE_MALAY + , wxLANGUAGE_MALAYALAM + , wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM + , wxLANGUAGE_MALAY_MALAYSIA + , wxLANGUAGE_MALTESE + , wxLANGUAGE_MANIPURI + , wxLANGUAGE_MAORI + , wxLANGUAGE_MARATHI + , wxLANGUAGE_MOLDAVIAN + , wxLANGUAGE_MONGOLIAN + , wxLANGUAGE_NAURU + , wxLANGUAGE_NEPALI + , wxLANGUAGE_NEPALI_INDIA + , wxLANGUAGE_NORWEGIAN_BOKMAL + , wxLANGUAGE_NORWEGIAN_NYNORSK + , wxLANGUAGE_OCCITAN + , wxLANGUAGE_ORIYA + , wxLANGUAGE_OROMO + , wxLANGUAGE_PASHTO + , wxLANGUAGE_POLISH + , wxLANGUAGE_PORTUGUESE + , wxLANGUAGE_PORTUGUESE_BRAZILIAN + , wxLANGUAGE_PUNJABI + , wxLANGUAGE_QUECHUA + , wxLANGUAGE_RHAETO_ROMANCE + , wxLANGUAGE_ROMANIAN + , wxLANGUAGE_RUSSIAN + , wxLANGUAGE_RUSSIAN_UKRAINE + , wxLANGUAGE_SAMOAN + , wxLANGUAGE_SANGHO + , wxLANGUAGE_SANSKRIT + , wxLANGUAGE_SCOTS_GAELIC + , wxLANGUAGE_SERBIAN + , wxLANGUAGE_SERBIAN_CYRILLIC + , wxLANGUAGE_SERBIAN_LATIN + , wxLANGUAGE_SERBO_CROATIAN + , wxLANGUAGE_SESOTHO + , wxLANGUAGE_SETSWANA + , wxLANGUAGE_SHONA + , wxLANGUAGE_SINDHI + , wxLANGUAGE_SINHALESE + , wxLANGUAGE_SISWATI + , wxLANGUAGE_SLOVAK + , wxLANGUAGE_SLOVENIAN + , wxLANGUAGE_SOMALI + , wxLANGUAGE_SPANISH + , wxLANGUAGE_SPANISH_ARGENTINA + , wxLANGUAGE_SPANISH_BOLIVIA + , wxLANGUAGE_SPANISH_CHILE + , wxLANGUAGE_SPANISH_COLOMBIA + , wxLANGUAGE_SPANISH_COSTA_RICA + , wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC + , wxLANGUAGE_SPANISH_ECUADOR + , wxLANGUAGE_SPANISH_EL_SALVADOR + , wxLANGUAGE_SPANISH_GUATEMALA + , wxLANGUAGE_SPANISH_HONDURAS + , wxLANGUAGE_SPANISH_MEXICAN + , wxLANGUAGE_SPANISH_MODERN + , wxLANGUAGE_SPANISH_NICARAGUA + , wxLANGUAGE_SPANISH_PANAMA + , wxLANGUAGE_SPANISH_PARAGUAY + , wxLANGUAGE_SPANISH_PERU + , wxLANGUAGE_SPANISH_PUERTO_RICO + , wxLANGUAGE_SPANISH_URUGUAY + , wxLANGUAGE_SPANISH_US + , wxLANGUAGE_SPANISH_VENEZUELA + , wxLANGUAGE_SUNDANESE + , wxLANGUAGE_SWAHILI + , wxLANGUAGE_SWEDISH + , wxLANGUAGE_SWEDISH_FINLAND + , wxLANGUAGE_TAGALOG + , wxLANGUAGE_TAJIK + , wxLANGUAGE_TAMIL + , wxLANGUAGE_TATAR + , wxLANGUAGE_TELUGU + , wxLANGUAGE_THAI + , wxLANGUAGE_TIBETAN + , wxLANGUAGE_TIGRINYA + , wxLANGUAGE_TONGA + , wxLANGUAGE_TSONGA + , wxLANGUAGE_TURKISH + , wxLANGUAGE_TURKMEN + , wxLANGUAGE_TWI + , wxLANGUAGE_UIGHUR + , wxLANGUAGE_UKRAINIAN + , wxLANGUAGE_UNKNOWN + , wxLANGUAGE_URDU + , wxLANGUAGE_URDU_INDIA + , wxLANGUAGE_URDU_PAKISTAN + , wxLANGUAGE_USER_DEFINE + , wxLANGUAGE_UZBEK + , wxLANGUAGE_UZBEK_CYRILLIC + , wxLANGUAGE_UZBEK_LATIN + , wxLANGUAGE_VIETNAMESE + , wxLANGUAGE_VOLAPUK + , wxLANGUAGE_WELSH + , wxLANGUAGE_WOLOF + , wxLANGUAGE_XHOSA + , wxLANGUAGE_YIDDISH + , wxLANGUAGE_YORUBA + , wxLANGUAGE_ZHUANG + , wxLANGUAGE_ZULU + , wxLAYOUT_BOTTOM + , wxLAYOUT_DEFAULT_MARGIN + , wxLAYOUT_HORIZONTAL + , wxLAYOUT_LEFT + , wxLAYOUT_NONE + , wxLAYOUT_RIGHT + , wxLAYOUT_TOP + , wxLAYOUT_VERTICAL + , wxLB_ALWAYS_SB + , wxLB_EXTENDED + , wxLB_MULTIPLE + , wxLB_NEEDED_SB + , wxLB_OWNERDRAW + , wxLB_SINGLE + , wxLB_SORT + , wxLC_ALIGN_LEFT + , wxLC_ALIGN_TOP + , wxLC_AUTOARRANGE + , wxLC_EDIT_LABELS + , wxLC_HRULES + , wxLC_ICON + , wxLC_LIST + , wxLC_MASK_ALIGN + , wxLC_MASK_SORT + , wxLC_MASK_TYPE + , wxLC_NO_HEADER + , wxLC_NO_SORT_HEADER + , wxLC_REPORT + , wxLC_SINGLE_SEL + , wxLC_SMALL_ICON + , wxLC_SORT_ASCENDING + , wxLC_SORT_DESCENDING + , wxLC_VIRTUAL + , wxLC_VRULES + , wxLED_ALIGN_CENTER + , wxLED_ALIGN_LEFT + , wxLED_ALIGN_MASK + , wxLED_ALIGN_RIGHT + , wxLED_DRAW_FADED + , wxLEFT + , wxLIGHT + , wxLIGHT_GREY + , wxLIGHT_GREY_BRUSH + , wxLIGHT_GREY_PEN + , wxLIST_FORMAT_CENTER + , wxLIST_FORMAT_CENTRE + , wxLIST_FORMAT_LEFT + , wxLIST_FORMAT_RIGHT + , wxLIST_MASK_DATA + , wxLIST_MASK_FORMAT + , wxLIST_MASK_IMAGE + , wxLIST_MASK_STATE + , wxLIST_MASK_TEXT + , wxLIST_MASK_WIDTH + , wxLIST_NEXT_ABOVE + , wxLIST_NEXT_ALL + , wxLIST_NEXT_BELOW + , wxLIST_NEXT_LEFT + , wxLIST_NEXT_RIGHT + , wxLIST_STATE_CUT + , wxLIST_STATE_DONTCARE + , wxLIST_STATE_DROPHILITED + , wxLIST_STATE_FOCUSED + , wxLIST_STATE_SELECTED + , wxLITTLE_ENDIAN + , wxLOCALE_CONV_ENCODING + , wxLOCALE_DECIMAL_POINT + , wxLOCALE_LOAD_DEFAULT + , wxLOCALE_THOUSANDS_SEP + , wxLONG_DASH + , wxMACINTOSH + , wxMAXIMIZE + , wxMAXIMIZE_BOX + , wxMB_DOCKABLE + , wxMEDIACTRLPLAYERCONTROLS_DEFAULT + , wxMEDIACTRLPLAYERCONTROLS_NONE + , wxMEDIACTRLPLAYERCONTROLS_STEP + , wxMEDIACTRLPLAYERCONTROLS_VOLUME + , wxMEDIUM_GREY_BRUSH + , wxMEDIUM_GREY_PEN + , wxMENU_TEAROFF + , wxMGL_OS2 + , wxMGL_UNIX + , wxMGL_WIN32 + , wxMGL_X + , wxMINIMIZE_BOX + , wxMM_ANISOTROPIC + , wxMM_HIENGLISH + , wxMM_HIMETRIC + , wxMM_ISOTROPIC + , wxMM_LOENGLISH + , wxMM_LOMETRIC + , wxMM_METRIC + , wxMM_POINTS + , wxMM_TEXT + , wxMM_TWIPS + , wxMODERN + , wxMORE + , wxMOTIF_X + , wxMULTIPLE + , wxMUTEX_BUSY + , wxMUTEX_DEAD_LOCK + , wxMUTEX_MISC_ERROR + , wxMUTEX_NO_ERROR + , wxMUTEX_UNLOCKED + , wxNAND + , wxNB_FIXEDWIDTH + , wxNB_MULTILINE + , wxNEXTSTEP + , wxNO + , wxNOR + , wxNORMAL + , wxNORTH + , wxNOT_FOUND + , wxNO_3D + , wxNO_BORDER + , wxNO_DEFAULT + , wxNO_FULL_REPAINT_ON_RESIZE + , wxNO_OP + , wxNULL_FLAG + , wxODDEVEN_RULE + , wxOK + , wxOPEN + , wxOR + , wxOR_INVERT + , wxOR_REVERSE + , wxOS2_PM + , wxOVERWRITE_PROMPT + , wxPAPER_10X11 + , wxPAPER_10X14 + , wxPAPER_11X17 + , wxPAPER_15X11 + , wxPAPER_9X11 + , wxPAPER_A2 + , wxPAPER_A3 + , wxPAPER_A3_EXTRA + , wxPAPER_A3_EXTRA_TRANSVERSE + , wxPAPER_A3_TRANSVERSE + , wxPAPER_A4 + , wxPAPER_A4SMALL + , wxPAPER_A4_EXTRA + , wxPAPER_A4_PLUS + , wxPAPER_A4_TRANSVERSE + , wxPAPER_A5 + , wxPAPER_A5_EXTRA + , wxPAPER_A5_TRANSVERSE + , wxPAPER_A_PLUS + , wxPAPER_B4 + , wxPAPER_B5 + , wxPAPER_B5_EXTRA + , wxPAPER_B5_TRANSVERSE + , wxPAPER_B_PLUS + , wxPAPER_CSHEET + , wxPAPER_DSHEET + , wxPAPER_ENV_10 + , wxPAPER_ENV_11 + , wxPAPER_ENV_12 + , wxPAPER_ENV_14 + , wxPAPER_ENV_9 + , wxPAPER_ENV_B4 + , wxPAPER_ENV_B5 + , wxPAPER_ENV_B6 + , wxPAPER_ENV_C3 + , wxPAPER_ENV_C4 + , wxPAPER_ENV_C5 + , wxPAPER_ENV_C6 + , wxPAPER_ENV_C65 + , wxPAPER_ENV_DL + , wxPAPER_ENV_INVITE + , wxPAPER_ENV_ITALY + , wxPAPER_ENV_MONARCH + , wxPAPER_ENV_PERSONAL + , wxPAPER_ESHEET + , wxPAPER_EXECUTIVE + , wxPAPER_FANFOLD_LGL_GERMAN + , wxPAPER_FANFOLD_STD_GERMAN + , wxPAPER_FANFOLD_US + , wxPAPER_FOLIO + , wxPAPER_ISO_B4 + , wxPAPER_JAPANESE_POSTCARD + , wxPAPER_LEDGER + , wxPAPER_LEGAL + , wxPAPER_LEGAL_EXTRA + , wxPAPER_LETTER + , wxPAPER_LETTERSMALL + , wxPAPER_LETTER_EXTRA + , wxPAPER_LETTER_EXTRA_TRANSVERSE + , wxPAPER_LETTER_PLUS + , wxPAPER_LETTER_TRANSVERSE + , wxPAPER_NONE + , wxPAPER_NOTE + , wxPAPER_QUARTO + , wxPAPER_STATEMENT + , wxPAPER_TABLOID + , wxPAPER_TABLOID_EXTRA + , wxPASSWORD + , wxPDP_ENDIAN + , wxPD_APP_MODAL + , wxPD_AUTO_HIDE + , wxPD_CAN_ABORT + , wxPD_ELAPSED_TIME + , wxPD_ESTIMATED_TIME + , wxPD_REMAINING_TIME + , wxPENSTYLE_BDIAGONAL_HATCH + , wxPENSTYLE_CROSSDIAG_HATCH + , wxPENSTYLE_CROSS_HATCH + , wxPENSTYLE_DOT + , wxPENSTYLE_DOT_DASH + , wxPENSTYLE_FDIAGONAL_HATCH + , wxPENSTYLE_FIRST_HATCH + , wxPENSTYLE_HORIZONTAL_HATCH + , wxPENSTYLE_INVALID + , wxPENSTYLE_LAST_HATCH + , wxPENSTYLE_LONG_DASH + , wxPENSTYLE_SHORT_DASH + , wxPENSTYLE_SOLID + , wxPENSTYLE_STIPPLE + , wxPENSTYLE_STIPPLE_MASK + , wxPENSTYLE_STIPPLE_MASK_OPAQUE + , wxPENSTYLE_TRANSPARENT + , wxPENSTYLE_USER_DASH + , wxPENSTYLE_VERTICAL_HATCH + , wxPENWINDOWS + , wxPG_DEFAULT_STYLE + , wxPLATFORM_CURRENT + , wxPLATFORM_MAC + , wxPLATFORM_OS2 + , wxPLATFORM_UNIX + , wxPLATFORM_WINDOWS + , wxPORTRAIT + , wxPREVIEW_DEFAULT + , wxPREVIEW_FIRST + , wxPREVIEW_GOTO + , wxPREVIEW_LAST + , wxPREVIEW_NEXT + , wxPREVIEW_PREVIOUS + , wxPREVIEW_PRINT + , wxPREVIEW_ZOOM + , wxPRINTER_CANCELLED + , wxPRINTER_ERROR + , wxPRINTER_NO_ERROR + , wxPRINTID_BOTTOMMARGIN + , wxPRINTID_COMMAND + , wxPRINTID_COPIES + , wxPRINTID_FROM + , wxPRINTID_LEFTMARGIN + , wxPRINTID_OPTIONS + , wxPRINTID_ORIENTATION + , wxPRINTID_PAPERSIZE + , wxPRINTID_PRINTCOLOUR + , wxPRINTID_PRINTTOFILE + , wxPRINTID_RANGE + , wxPRINTID_RIGHTMARGIN + , wxPRINTID_SETUP + , wxPRINTID_STATIC + , wxPRINTID_TO + , wxPRINTID_TOPMARGIN + , wxPRINT_MODE_FILE + , wxPRINT_MODE_NONE + , wxPRINT_MODE_PREVIEW + , wxPRINT_MODE_PRINTER + , wxPROCESS_ENTER + , wxQT + , wxQUANTIZE_FILL_DESTINATION_IMAGE + , wxQUANTIZE_INCLUDE_WINDOWS_COLOURS + , wxQUANTIZE_RETURN_8BIT_DATA + , wxRAISED_BORDER + , wxRA_SPECIFY_COLS + , wxRA_SPECIFY_ROWS + , wxRB_GROUP + , wxRED + , wxRED_BRUSH + , wxRED_PEN + , wxRELATIONSHIP_ABOVE + , wxRELATIONSHIP_ABSOLUTE + , wxRELATIONSHIP_ASIS + , wxRELATIONSHIP_BELOW + , wxRELATIONSHIP_LEFTOF + , wxRELATIONSHIP_PERCENTOF + , wxRELATIONSHIP_RIGHTOF + , wxRELATIONSHIP_SAMEAS + , wxRELATIONSHIP_UNCONSTRAINED + , wxRESERVE_SPACE_EVEN_IF_HIDDEN + , wxRESET + , wxRESIZE_BORDER + , wxRETAINED + , wxRIGHT + , wxROMAN + , wxSASH_BOTTOM + , wxSASH_DRAG_DRAGGING + , wxSASH_DRAG_LEFT_DOWN + , wxSASH_DRAG_NONE + , wxSASH_LEFT + , wxSASH_NONE + , wxSASH_RIGHT + , wxSASH_STATUS_OK + , wxSASH_STATUS_OUT_OF_RANGE + , wxSASH_TOP + , wxSAVE + , wxSCRIPT + , wxSET + , wxSETUP + , wxSHAPED + , wxSHORT_DASH + , wxSHRINK + , wxSIGABRT + , wxSIGALRM + , wxSIGBUS + , wxSIGEMT + , wxSIGFPE + , wxSIGHUP + , wxSIGILL + , wxSIGINT + , wxSIGKILL + , wxSIGNONE + , wxSIGPIPE + , wxSIGQUIT + , wxSIGSEGV + , wxSIGSYS + , wxSIGTERM + , wxSIGTRAP + , wxSIZER_FLAG_BITS_MASK + , wxSIZE_ALLOW_MINUS_ONE + , wxSIZE_AUTO_HEIGHT + , wxSIZE_AUTO_WIDTH + , wxSIZE_NO_ADJUSTMENTS + , wxSIZE_USE_EXISTING + , wxSLANT + , wxSL_AUTOTICKS + , wxSL_BOTH + , wxSL_BOTTOM + , wxSL_LABELS + , wxSL_LEFT + , wxSL_NOTIFY_DRAG + , wxSL_RIGHT + , wxSL_SELRANGE + , wxSL_TOP + , wxSOLID + , wxSOUND_ASYNC + , wxSOUND_LOOP + , wxSOUND_SYNC + , wxSOUTH + , wxSPLIT_HORIZONTAL + , wxSPLIT_VERTICAL + , wxSP_3D + , wxSP_3DBORDER + , wxSP_3DSASH + , wxSP_ARROW_KEYS + , wxSP_BORDER + , wxSP_FULLSASH + , wxSP_LIVE_UPDATE + , wxSP_NOBORDER + , wxSP_NOSASH + , wxSP_PERMIT_UNSPLIT + , wxSP_WRAP + , wxSQL_CHAR + , wxSQL_C_CHAR + , wxSQL_C_DATE + , wxSQL_C_DEFAULT + , wxSQL_C_DOUBLE + , wxSQL_C_FLOAT + , wxSQL_C_LONG + , wxSQL_C_SHORT + , wxSQL_C_TIME + , wxSQL_C_TIMESTAMP + , wxSQL_DATA_AT_EXEC + , wxSQL_DATE + , wxSQL_DECIMAL + , wxSQL_DOUBLE + , wxSQL_ERROR + , wxSQL_FETCH_ABSOLUTE + , wxSQL_FETCH_BOOKMARK + , wxSQL_FETCH_FIRST + , wxSQL_FETCH_LAST + , wxSQL_FETCH_NEXT + , wxSQL_FETCH_PRIOR + , wxSQL_FETCH_RELATIVE + , wxSQL_FLOAT + , wxSQL_INTEGER + , wxSQL_INVALID_HANDLE + , wxSQL_NO_DATA_FOUND + , wxSQL_NO_NULLS + , wxSQL_NTS + , wxSQL_NULLABLE + , wxSQL_NULLABLE_UNKNOWN + , wxSQL_NULL_DATA + , wxSQL_NUMERIC + , wxSQL_REAL + , wxSQL_SMALLINT + , wxSQL_SUCCESS + , wxSQL_SUCCESS_WITH_INFO + , wxSQL_TIME + , wxSQL_TIMESTAMP + , wxSQL_VARCHAR + , wxSRC_INVERT + , wxSTATIC_BORDER + , wxSTAY_ON_TOP + , wxSTC_ADA_CHARACTER + , wxSTC_ADA_CHARACTEREOL + , wxSTC_ADA_COMMENTLINE + , wxSTC_ADA_DEFAULT + , wxSTC_ADA_DELIMITER + , wxSTC_ADA_IDENTIFIER + , wxSTC_ADA_ILLEGAL + , wxSTC_ADA_LABEL + , wxSTC_ADA_NUMBER + , wxSTC_ADA_STRING + , wxSTC_ADA_STRINGEOL + , wxSTC_ADA_WORD + , wxSTC_APDL_ARGUMENT + , wxSTC_APDL_COMMAND + , wxSTC_APDL_COMMENT + , wxSTC_APDL_COMMENTBLOCK + , wxSTC_APDL_DEFAULT + , wxSTC_APDL_FUNCTION + , wxSTC_APDL_NUMBER + , wxSTC_APDL_OPERATOR + , wxSTC_APDL_PROCESSOR + , wxSTC_APDL_SLASHCOMMAND + , wxSTC_APDL_STARCOMMAND + , wxSTC_APDL_STRING + , wxSTC_APDL_WORD + , wxSTC_ASM_COMMENT + , wxSTC_ASM_CPUINSTRUCTION + , wxSTC_ASM_DEFAULT + , wxSTC_ASM_DIRECTIVE + , wxSTC_ASM_DIRECTIVEOPERAND + , wxSTC_ASM_IDENTIFIER + , wxSTC_ASM_MATHINSTRUCTION + , wxSTC_ASM_NUMBER + , wxSTC_ASM_OPERATOR + , wxSTC_ASM_REGISTER + , wxSTC_ASM_STRING + , wxSTC_ASN1_ATTRIBUTE + , wxSTC_ASN1_COMMENT + , wxSTC_ASN1_DEFAULT + , wxSTC_ASN1_DESCRIPTOR + , wxSTC_ASN1_IDENTIFIER + , wxSTC_ASN1_KEYWORD + , wxSTC_ASN1_OID + , wxSTC_ASN1_OPERATOR + , wxSTC_ASN1_SCALAR + , wxSTC_ASN1_STRING + , wxSTC_ASN1_TYPE + , wxSTC_AU3_COMMENT + , wxSTC_AU3_COMMENTBLOCK + , wxSTC_AU3_COMOBJ + , wxSTC_AU3_DEFAULT + , wxSTC_AU3_EXPAND + , wxSTC_AU3_FUNCTION + , wxSTC_AU3_KEYWORD + , wxSTC_AU3_MACRO + , wxSTC_AU3_NUMBER + , wxSTC_AU3_OPERATOR + , wxSTC_AU3_PREPROCESSOR + , wxSTC_AU3_SENT + , wxSTC_AU3_SPECIAL + , wxSTC_AU3_STRING + , wxSTC_AU3_VARIABLE + , wxSTC_AVE_COMMENT + , wxSTC_AVE_DEFAULT + , wxSTC_AVE_ENUM + , wxSTC_AVE_IDENTIFIER + , wxSTC_AVE_NUMBER + , wxSTC_AVE_OPERATOR + , wxSTC_AVE_STRING + , wxSTC_AVE_STRINGEOL + , wxSTC_AVE_WORD + , wxSTC_AVE_WORD1 + , wxSTC_AVE_WORD2 + , wxSTC_AVE_WORD3 + , wxSTC_AVE_WORD4 + , wxSTC_AVE_WORD5 + , wxSTC_AVE_WORD6 + , wxSTC_BAAN_COMMENT + , wxSTC_BAAN_COMMENTDOC + , wxSTC_BAAN_DEFAULT + , wxSTC_BAAN_IDENTIFIER + , wxSTC_BAAN_NUMBER + , wxSTC_BAAN_OPERATOR + , wxSTC_BAAN_PREPROCESSOR + , wxSTC_BAAN_STRING + , wxSTC_BAAN_STRINGEOL + , wxSTC_BAAN_WORD + , wxSTC_BAAN_WORD2 + , wxSTC_BAT_COMMAND + , wxSTC_BAT_COMMENT + , wxSTC_BAT_DEFAULT + , wxSTC_BAT_HIDE + , wxSTC_BAT_IDENTIFIER + , wxSTC_BAT_LABEL + , wxSTC_BAT_OPERATOR + , wxSTC_BAT_WORD + , wxSTC_B_COMMENT + , wxSTC_B_DATE + , wxSTC_B_DEFAULT + , wxSTC_B_IDENTIFIER + , wxSTC_B_KEYWORD + , wxSTC_B_NUMBER + , wxSTC_B_OPERATOR + , wxSTC_B_PREPROCESSOR + , wxSTC_B_STRING + , wxSTC_CACHE_CARET + , wxSTC_CACHE_DOCUMENT + , wxSTC_CACHE_NONE + , wxSTC_CACHE_PAGE + , wxSTC_CAML_CHAR + , wxSTC_CAML_COMMENT + , wxSTC_CAML_COMMENT1 + , wxSTC_CAML_COMMENT2 + , wxSTC_CAML_COMMENT3 + , wxSTC_CAML_DEFAULT + , wxSTC_CAML_IDENTIFIER + , wxSTC_CAML_KEYWORD + , wxSTC_CAML_KEYWORD2 + , wxSTC_CAML_KEYWORD3 + , wxSTC_CAML_LINENUM + , wxSTC_CAML_NUMBER + , wxSTC_CAML_OPERATOR + , wxSTC_CAML_STRING + , wxSTC_CAML_TAGNAME + , wxSTC_CARET_EVEN + , wxSTC_CARET_JUMPS + , wxSTC_CARET_SLOP + , wxSTC_CARET_STRICT + , wxSTC_CASE_LOWER + , wxSTC_CASE_MIXED + , wxSTC_CASE_UPPER + , wxSTC_CHARSET_ANSI + , wxSTC_CHARSET_ARABIC + , wxSTC_CHARSET_BALTIC + , wxSTC_CHARSET_CHINESEBIG5 + , wxSTC_CHARSET_DEFAULT + , wxSTC_CHARSET_EASTEUROPE + , wxSTC_CHARSET_GB2312 + , wxSTC_CHARSET_GREEK + , wxSTC_CHARSET_HANGUL + , wxSTC_CHARSET_HEBREW + , wxSTC_CHARSET_JOHAB + , wxSTC_CHARSET_MAC + , wxSTC_CHARSET_OEM + , wxSTC_CHARSET_RUSSIAN + , wxSTC_CHARSET_SHIFTJIS + , wxSTC_CHARSET_SYMBOL + , wxSTC_CHARSET_THAI + , wxSTC_CHARSET_TURKISH + , wxSTC_CHARSET_VIETNAMESE + , wxSTC_CLW_ATTRIBUTE + , wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION + , wxSTC_CLW_COMMENT + , wxSTC_CLW_COMPILER_DIRECTIVE + , wxSTC_CLW_DEFAULT + , wxSTC_CLW_DEPRECATED + , wxSTC_CLW_ERROR + , wxSTC_CLW_INTEGER_CONSTANT + , wxSTC_CLW_KEYWORD + , wxSTC_CLW_LABEL + , wxSTC_CLW_PICTURE_STRING + , wxSTC_CLW_REAL_CONSTANT + , wxSTC_CLW_RUNTIME_EXPRESSIONS + , wxSTC_CLW_STANDARD_EQUATE + , wxSTC_CLW_STRING + , wxSTC_CLW_STRUCTURE_DATA_TYPE + , wxSTC_CLW_USER_IDENTIFIER + , wxSTC_CMD_BACKTAB + , wxSTC_CMD_CANCEL + , wxSTC_CMD_CHARLEFT + , wxSTC_CMD_CHARLEFTEXTEND + , wxSTC_CMD_CHARLEFTRECTEXTEND + , wxSTC_CMD_CHARRIGHT + , wxSTC_CMD_CHARRIGHTEXTEND + , wxSTC_CMD_CHARRIGHTRECTEXTEND + , wxSTC_CMD_CLEAR + , wxSTC_CMD_COPY + , wxSTC_CMD_CUT + , wxSTC_CMD_DELETEBACK + , wxSTC_CMD_DELETEBACKNOTLINE + , wxSTC_CMD_DELLINELEFT + , wxSTC_CMD_DELLINERIGHT + , wxSTC_CMD_DELWORDLEFT + , wxSTC_CMD_DELWORDRIGHT + , wxSTC_CMD_DOCUMENTEND + , wxSTC_CMD_DOCUMENTENDEXTEND + , wxSTC_CMD_DOCUMENTSTART + , wxSTC_CMD_DOCUMENTSTARTEXTEND + , wxSTC_CMD_EDITTOGGLEOVERTYPE + , wxSTC_CMD_FORMFEED + , wxSTC_CMD_HOME + , wxSTC_CMD_HOMEDISPLAY + , wxSTC_CMD_HOMEDISPLAYEXTEND + , wxSTC_CMD_HOMEEXTEND + , wxSTC_CMD_HOMERECTEXTEND + , wxSTC_CMD_HOMEWRAP + , wxSTC_CMD_HOMEWRAPEXTEND + , wxSTC_CMD_LINECOPY + , wxSTC_CMD_LINECUT + , wxSTC_CMD_LINEDELETE + , wxSTC_CMD_LINEDOWN + , wxSTC_CMD_LINEDOWNEXTEND + , wxSTC_CMD_LINEDOWNRECTEXTEND + , wxSTC_CMD_LINEDUPLICATE + , wxSTC_CMD_LINEEND + , wxSTC_CMD_LINEENDDISPLAY + , wxSTC_CMD_LINEENDDISPLAYEXTEND + , wxSTC_CMD_LINEENDEXTEND + , wxSTC_CMD_LINEENDRECTEXTEND + , wxSTC_CMD_LINEENDWRAP + , wxSTC_CMD_LINEENDWRAPEXTEND + , wxSTC_CMD_LINESCROLLDOWN + , wxSTC_CMD_LINESCROLLUP + , wxSTC_CMD_LINETRANSPOSE + , wxSTC_CMD_LINEUP + , wxSTC_CMD_LINEUPEXTEND + , wxSTC_CMD_LINEUPRECTEXTEND + , wxSTC_CMD_LOWERCASE + , wxSTC_CMD_NEWLINE + , wxSTC_CMD_PAGEDOWN + , wxSTC_CMD_PAGEDOWNEXTEND + , wxSTC_CMD_PAGEDOWNRECTEXTEND + , wxSTC_CMD_PAGEUP + , wxSTC_CMD_PAGEUPEXTEND + , wxSTC_CMD_PAGEUPRECTEXTEND + , wxSTC_CMD_PARADOWN + , wxSTC_CMD_PARADOWNEXTEND + , wxSTC_CMD_PARAUP + , wxSTC_CMD_PARAUPEXTEND + , wxSTC_CMD_PASTE + , wxSTC_CMD_REDO + , wxSTC_CMD_SELECTALL + , wxSTC_CMD_STUTTEREDPAGEDOWN + , wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND + , wxSTC_CMD_STUTTEREDPAGEUP + , wxSTC_CMD_STUTTEREDPAGEUPEXTEND + , wxSTC_CMD_TAB + , wxSTC_CMD_UNDO + , wxSTC_CMD_UPPERCASE + , wxSTC_CMD_VCHOME + , wxSTC_CMD_VCHOMEEXTEND + , wxSTC_CMD_VCHOMERECTEXTEND + , wxSTC_CMD_VCHOMEWRAP + , wxSTC_CMD_VCHOMEWRAPEXTEND + , wxSTC_CMD_WORDLEFT + , wxSTC_CMD_WORDLEFTEND + , wxSTC_CMD_WORDLEFTENDEXTEND + , wxSTC_CMD_WORDLEFTEXTEND + , wxSTC_CMD_WORDPARTLEFT + , wxSTC_CMD_WORDPARTLEFTEXTEND + , wxSTC_CMD_WORDPARTRIGHT + , wxSTC_CMD_WORDPARTRIGHTEXTEND + , wxSTC_CMD_WORDRIGHT + , wxSTC_CMD_WORDRIGHTEND + , wxSTC_CMD_WORDRIGHTENDEXTEND + , wxSTC_CMD_WORDRIGHTEXTEND + , wxSTC_CMD_ZOOMIN + , wxSTC_CMD_ZOOMOUT + , wxSTC_CONF_COMMENT + , wxSTC_CONF_DEFAULT + , wxSTC_CONF_DIRECTIVE + , wxSTC_CONF_EXTENSION + , wxSTC_CONF_IDENTIFIER + , wxSTC_CONF_IP + , wxSTC_CONF_NUMBER + , wxSTC_CONF_OPERATOR + , wxSTC_CONF_PARAMETER + , wxSTC_CONF_STRING + , wxSTC_CP_DBCS + , wxSTC_CP_UTF8 + , wxSTC_CSOUND_ARATE_VAR + , wxSTC_CSOUND_COMMENT + , wxSTC_CSOUND_COMMENTBLOCK + , wxSTC_CSOUND_DEFAULT + , wxSTC_CSOUND_GLOBAL_VAR + , wxSTC_CSOUND_HEADERSTMT + , wxSTC_CSOUND_IDENTIFIER + , wxSTC_CSOUND_INSTR + , wxSTC_CSOUND_IRATE_VAR + , wxSTC_CSOUND_KRATE_VAR + , wxSTC_CSOUND_NUMBER + , wxSTC_CSOUND_OPCODE + , wxSTC_CSOUND_OPERATOR + , wxSTC_CSOUND_PARAM + , wxSTC_CSOUND_STRINGEOL + , wxSTC_CSOUND_USERKEYWORD + , wxSTC_CSS_CLASS + , wxSTC_CSS_COMMENT + , wxSTC_CSS_DEFAULT + , wxSTC_CSS_DIRECTIVE + , wxSTC_CSS_DOUBLESTRING + , wxSTC_CSS_ID + , wxSTC_CSS_IDENTIFIER + , wxSTC_CSS_IMPORTANT + , wxSTC_CSS_OPERATOR + , wxSTC_CSS_PSEUDOCLASS + , wxSTC_CSS_SINGLESTRING + , wxSTC_CSS_TAG + , wxSTC_CSS_UNKNOWN_IDENTIFIER + , wxSTC_CSS_UNKNOWN_PSEUDOCLASS + , wxSTC_CSS_VALUE + , wxSTC_CURSORNORMAL + , wxSTC_CURSORWAIT + , wxSTC_C_CHARACTER + , wxSTC_C_COMMENT + , wxSTC_C_COMMENTDOC + , wxSTC_C_COMMENTDOCKEYWORD + , wxSTC_C_COMMENTDOCKEYWORDERROR + , wxSTC_C_COMMENTLINE + , wxSTC_C_COMMENTLINEDOC + , wxSTC_C_DEFAULT + , wxSTC_C_GLOBALCLASS + , wxSTC_C_IDENTIFIER + , wxSTC_C_NUMBER + , wxSTC_C_OPERATOR + , wxSTC_C_PREPROCESSOR + , wxSTC_C_REGEX + , wxSTC_C_STRING + , wxSTC_C_STRINGEOL + , wxSTC_C_UUID + , wxSTC_C_VERBATIM + , wxSTC_C_WORD + , wxSTC_C_WORD2 + , wxSTC_DIFF_ADDED + , wxSTC_DIFF_COMMAND + , wxSTC_DIFF_COMMENT + , wxSTC_DIFF_DEFAULT + , wxSTC_DIFF_DELETED + , wxSTC_DIFF_HEADER + , wxSTC_DIFF_POSITION + , wxSTC_EDGE_BACKGROUND + , wxSTC_EDGE_LINE + , wxSTC_EDGE_NONE + , wxSTC_EIFFEL_CHARACTER + , wxSTC_EIFFEL_COMMENTLINE + , wxSTC_EIFFEL_DEFAULT + , wxSTC_EIFFEL_IDENTIFIER + , wxSTC_EIFFEL_NUMBER + , wxSTC_EIFFEL_OPERATOR + , wxSTC_EIFFEL_STRING + , wxSTC_EIFFEL_STRINGEOL + , wxSTC_EIFFEL_WORD + , wxSTC_EOL_CR + , wxSTC_EOL_CRLF + , wxSTC_EOL_LF + , wxSTC_ERLANG_ATOM + , wxSTC_ERLANG_CHARACTER + , wxSTC_ERLANG_COMMENT + , wxSTC_ERLANG_DEFAULT + , wxSTC_ERLANG_FUNCTION_NAME + , wxSTC_ERLANG_KEYWORD + , wxSTC_ERLANG_MACRO + , wxSTC_ERLANG_NODE_NAME + , wxSTC_ERLANG_NUMBER + , wxSTC_ERLANG_OPERATOR + , wxSTC_ERLANG_RECORD + , wxSTC_ERLANG_SEPARATOR + , wxSTC_ERLANG_STRING + , wxSTC_ERLANG_UNKNOWN + , wxSTC_ERLANG_VARIABLE + , wxSTC_ERR_BORLAND + , wxSTC_ERR_CMD + , wxSTC_ERR_CTAG + , wxSTC_ERR_DEFAULT + , wxSTC_ERR_DIFF_ADDITION + , wxSTC_ERR_DIFF_CHANGED + , wxSTC_ERR_DIFF_DELETION + , wxSTC_ERR_DIFF_MESSAGE + , wxSTC_ERR_ELF + , wxSTC_ERR_GCC + , wxSTC_ERR_IFC + , wxSTC_ERR_LUA + , wxSTC_ERR_MS + , wxSTC_ERR_NET + , wxSTC_ERR_PERL + , wxSTC_ERR_PHP + , wxSTC_ERR_PYTHON + , wxSTC_ESCRIPT_BRACE + , wxSTC_ESCRIPT_COMMENT + , wxSTC_ESCRIPT_COMMENTDOC + , wxSTC_ESCRIPT_COMMENTLINE + , wxSTC_ESCRIPT_DEFAULT + , wxSTC_ESCRIPT_IDENTIFIER + , wxSTC_ESCRIPT_NUMBER + , wxSTC_ESCRIPT_OPERATOR + , wxSTC_ESCRIPT_STRING + , wxSTC_ESCRIPT_WORD + , wxSTC_ESCRIPT_WORD2 + , wxSTC_ESCRIPT_WORD3 + , wxSTC_FIND_MATCHCASE + , wxSTC_FIND_POSIX + , wxSTC_FIND_REGEXP + , wxSTC_FIND_WHOLEWORD + , wxSTC_FIND_WORDSTART + , wxSTC_FOLDFLAG_BOX + , wxSTC_FOLDFLAG_LEVELNUMBERS + , wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED + , wxSTC_FOLDFLAG_LINEAFTER_EXPANDED + , wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED + , wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED + , wxSTC_FOLDLEVELBASE + , wxSTC_FOLDLEVELBOXFOOTERFLAG + , wxSTC_FOLDLEVELBOXHEADERFLAG + , wxSTC_FOLDLEVELCONTRACTED + , wxSTC_FOLDLEVELHEADERFLAG + , wxSTC_FOLDLEVELNUMBERMASK + , wxSTC_FOLDLEVELUNINDENT + , wxSTC_FOLDLEVELWHITEFLAG + , wxSTC_FS_ASM + , wxSTC_FS_BINNUMBER + , wxSTC_FS_COMMENT + , wxSTC_FS_COMMENTDOC + , wxSTC_FS_COMMENTDOCKEYWORD + , wxSTC_FS_COMMENTDOCKEYWORDERROR + , wxSTC_FS_COMMENTLINE + , wxSTC_FS_COMMENTLINEDOC + , wxSTC_FS_CONSTANT + , wxSTC_FS_DATE + , wxSTC_FS_DEFAULT + , wxSTC_FS_ERROR + , wxSTC_FS_HEXNUMBER + , wxSTC_FS_IDENTIFIER + , wxSTC_FS_KEYWORD + , wxSTC_FS_KEYWORD2 + , wxSTC_FS_KEYWORD3 + , wxSTC_FS_KEYWORD4 + , wxSTC_FS_LABEL + , wxSTC_FS_NUMBER + , wxSTC_FS_OPERATOR + , wxSTC_FS_PREPROCESSOR + , wxSTC_FS_STRING + , wxSTC_FS_STRINGEOL + , wxSTC_F_COMMENT + , wxSTC_F_CONTINUATION + , wxSTC_F_DEFAULT + , wxSTC_F_IDENTIFIER + , wxSTC_F_LABEL + , wxSTC_F_NUMBER + , wxSTC_F_OPERATOR + , wxSTC_F_OPERATOR2 + , wxSTC_F_PREPROCESSOR + , wxSTC_F_STRING1 + , wxSTC_F_STRING2 + , wxSTC_F_STRINGEOL + , wxSTC_F_WORD + , wxSTC_F_WORD2 + , wxSTC_F_WORD3 + , wxSTC_GC_ATTRIBUTE + , wxSTC_GC_COMMAND + , wxSTC_GC_COMMENTBLOCK + , wxSTC_GC_COMMENTLINE + , wxSTC_GC_CONTROL + , wxSTC_GC_DEFAULT + , wxSTC_GC_EVENT + , wxSTC_GC_GLOBAL + , wxSTC_GC_OPERATOR + , wxSTC_GC_STRING + , wxSTC_HA_CAPITAL + , wxSTC_HA_CHARACTER + , wxSTC_HA_CLASS + , wxSTC_HA_COMMENTBLOCK + , wxSTC_HA_COMMENTBLOCK2 + , wxSTC_HA_COMMENTBLOCK3 + , wxSTC_HA_COMMENTLINE + , wxSTC_HA_DATA + , wxSTC_HA_DEFAULT + , wxSTC_HA_IDENTIFIER + , wxSTC_HA_IMPORT + , wxSTC_HA_INSTANCE + , wxSTC_HA_KEYWORD + , wxSTC_HA_MODULE + , wxSTC_HA_NUMBER + , wxSTC_HA_OPERATOR + , wxSTC_HA_PREPROCESSOR + , wxSTC_HA_STRING + , wxSTC_HBA_COMMENTLINE + , wxSTC_HBA_DEFAULT + , wxSTC_HBA_IDENTIFIER + , wxSTC_HBA_NUMBER + , wxSTC_HBA_START + , wxSTC_HBA_STRING + , wxSTC_HBA_STRINGEOL + , wxSTC_HBA_WORD + , wxSTC_HB_COMMENTLINE + , wxSTC_HB_DEFAULT + , wxSTC_HB_IDENTIFIER + , wxSTC_HB_NUMBER + , wxSTC_HB_START + , wxSTC_HB_STRING + , wxSTC_HB_STRINGEOL + , wxSTC_HB_WORD + , wxSTC_HJA_COMMENT + , wxSTC_HJA_COMMENTDOC + , wxSTC_HJA_COMMENTLINE + , wxSTC_HJA_DEFAULT + , wxSTC_HJA_DOUBLESTRING + , wxSTC_HJA_KEYWORD + , wxSTC_HJA_NUMBER + , wxSTC_HJA_REGEX + , wxSTC_HJA_SINGLESTRING + , wxSTC_HJA_START + , wxSTC_HJA_STRINGEOL + , wxSTC_HJA_SYMBOLS + , wxSTC_HJA_WORD + , wxSTC_HJ_COMMENT + , wxSTC_HJ_COMMENTDOC + , wxSTC_HJ_COMMENTLINE + , wxSTC_HJ_DEFAULT + , wxSTC_HJ_DOUBLESTRING + , wxSTC_HJ_KEYWORD + , wxSTC_HJ_NUMBER + , wxSTC_HJ_REGEX + , wxSTC_HJ_SINGLESTRING + , wxSTC_HJ_START + , wxSTC_HJ_STRINGEOL + , wxSTC_HJ_SYMBOLS + , wxSTC_HJ_WORD + , wxSTC_HPA_CHARACTER + , wxSTC_HPA_CLASSNAME + , wxSTC_HPA_COMMENTLINE + , wxSTC_HPA_DEFAULT + , wxSTC_HPA_DEFNAME + , wxSTC_HPA_IDENTIFIER + , wxSTC_HPA_NUMBER + , wxSTC_HPA_OPERATOR + , wxSTC_HPA_START + , wxSTC_HPA_STRING + , wxSTC_HPA_TRIPLE + , wxSTC_HPA_TRIPLEDOUBLE + , wxSTC_HPA_WORD + , wxSTC_HPHP_COMMENT + , wxSTC_HPHP_COMMENTLINE + , wxSTC_HPHP_DEFAULT + , wxSTC_HPHP_HSTRING + , wxSTC_HPHP_HSTRING_VARIABLE + , wxSTC_HPHP_NUMBER + , wxSTC_HPHP_OPERATOR + , wxSTC_HPHP_SIMPLESTRING + , wxSTC_HPHP_VARIABLE + , wxSTC_HPHP_WORD + , wxSTC_HP_CHARACTER + , wxSTC_HP_CLASSNAME + , wxSTC_HP_COMMENTLINE + , wxSTC_HP_DEFAULT + , wxSTC_HP_DEFNAME + , wxSTC_HP_IDENTIFIER + , wxSTC_HP_NUMBER + , wxSTC_HP_OPERATOR + , wxSTC_HP_START + , wxSTC_HP_STRING + , wxSTC_HP_TRIPLE + , wxSTC_HP_TRIPLEDOUBLE + , wxSTC_HP_WORD + , wxSTC_H_ASP + , wxSTC_H_ASPAT + , wxSTC_H_ATTRIBUTE + , wxSTC_H_ATTRIBUTEUNKNOWN + , wxSTC_H_CDATA + , wxSTC_H_COMMENT + , wxSTC_H_DEFAULT + , wxSTC_H_DOUBLESTRING + , wxSTC_H_ENTITY + , wxSTC_H_NUMBER + , wxSTC_H_OTHER + , wxSTC_H_QUESTION + , wxSTC_H_SCRIPT + , wxSTC_H_SGML_1ST_PARAM + , wxSTC_H_SGML_1ST_PARAM_COMMENT + , wxSTC_H_SGML_BLOCK_DEFAULT + , wxSTC_H_SGML_COMMAND + , wxSTC_H_SGML_COMMENT + , wxSTC_H_SGML_DEFAULT + , wxSTC_H_SGML_DOUBLESTRING + , wxSTC_H_SGML_ENTITY + , wxSTC_H_SGML_ERROR + , wxSTC_H_SGML_SIMPLESTRING + , wxSTC_H_SGML_SPECIAL + , wxSTC_H_SINGLESTRING + , wxSTC_H_TAG + , wxSTC_H_TAGEND + , wxSTC_H_TAGUNKNOWN + , wxSTC_H_VALUE + , wxSTC_H_XCCOMMENT + , wxSTC_H_XMLEND + , wxSTC_H_XMLSTART + , wxSTC_INDIC0_MASK + , wxSTC_INDIC1_MASK + , wxSTC_INDIC2_MASK + , wxSTC_INDICS_MASK + , wxSTC_INDIC_DIAGONAL + , wxSTC_INDIC_HIDDEN + , wxSTC_INDIC_MAX + , wxSTC_INDIC_PLAIN + , wxSTC_INDIC_SQUIGGLE + , wxSTC_INDIC_STRIKE + , wxSTC_INDIC_TT + , wxSTC_INVALID_POSITION + , wxSTC_KEYWORDSET_MAX + , wxSTC_KEY_ADD + , wxSTC_KEY_BACK + , wxSTC_KEY_DELETE + , wxSTC_KEY_DIVIDE + , wxSTC_KEY_DOWN + , wxSTC_KEY_END + , wxSTC_KEY_ESCAPE + , wxSTC_KEY_HOME + , wxSTC_KEY_INSERT + , wxSTC_KEY_LEFT + , wxSTC_KEY_NEXT + , wxSTC_KEY_PRIOR + , wxSTC_KEY_RETURN + , wxSTC_KEY_RIGHT + , wxSTC_KEY_SUBTRACT + , wxSTC_KEY_TAB + , wxSTC_KEY_UP + , wxSTC_KIX_COMMENT + , wxSTC_KIX_DEFAULT + , wxSTC_KIX_FUNCTIONS + , wxSTC_KIX_IDENTIFIER + , wxSTC_KIX_KEYWORD + , wxSTC_KIX_MACRO + , wxSTC_KIX_NUMBER + , wxSTC_KIX_OPERATOR + , wxSTC_KIX_STRING1 + , wxSTC_KIX_STRING2 + , wxSTC_KIX_VAR + , wxSTC_LASTSTEPINUNDOREDO + , wxSTC_LEXER_START + , wxSTC_LEX_ADA + , wxSTC_LEX_ASM + , wxSTC_LEX_ASP + , wxSTC_LEX_AUTOMATIC + , wxSTC_LEX_AVE + , wxSTC_LEX_BAAN + , wxSTC_LEX_BATCH + , wxSTC_LEX_BULLANT + , wxSTC_LEX_CONF + , wxSTC_LEX_CONTAINER + , wxSTC_LEX_CPP + , wxSTC_LEX_CPPNOCASE + , wxSTC_LEX_CSOUND + , wxSTC_LEX_CSS + , wxSTC_LEX_DIFF + , wxSTC_LEX_EIFFEL + , wxSTC_LEX_EIFFELKW + , wxSTC_LEX_ERRORLIST + , wxSTC_LEX_ESCRIPT + , wxSTC_LEX_F77 + , wxSTC_LEX_FLAGSHIP + , wxSTC_LEX_FORTRAN + , wxSTC_LEX_FREEBASIC + , wxSTC_LEX_HASKELL + , wxSTC_LEX_HTML + , wxSTC_LEX_LATEX + , wxSTC_LEX_LISP + , wxSTC_LEX_LOUT + , wxSTC_LEX_LUA + , wxSTC_LEX_MAKEFILE + , wxSTC_LEX_MATLAB + , wxSTC_LEX_MMIXAL + , wxSTC_LEX_NNCRONTAB + , wxSTC_LEX_NSIS + , wxSTC_LEX_NULL + , wxSTC_LEX_PASCAL + , wxSTC_LEX_PERL + , wxSTC_LEX_PHP + , wxSTC_LEX_PHPSCRIPT + , wxSTC_LEX_POV + , wxSTC_LEX_PROPERTIES + , wxSTC_LEX_PS + , wxSTC_LEX_PYTHON + , wxSTC_LEX_REBOL + , wxSTC_LEX_RUBY + , wxSTC_LEX_SCRIPTOL + , wxSTC_LEX_SMALLTALK + , wxSTC_LEX_SQL + , wxSTC_LEX_TADS3 + , wxSTC_LEX_TCL + , wxSTC_LEX_VB + , wxSTC_LEX_VBSCRIPT + , wxSTC_LEX_XCODE + , wxSTC_LEX_XML + , wxSTC_LISP_COMMENT + , wxSTC_LISP_DEFAULT + , wxSTC_LISP_IDENTIFIER + , wxSTC_LISP_KEYWORD + , wxSTC_LISP_NUMBER + , wxSTC_LISP_OPERATOR + , wxSTC_LISP_STRING + , wxSTC_LISP_STRINGEOL + , wxSTC_LOT_ABORT + , wxSTC_LOT_BREAK + , wxSTC_LOT_DEFAULT + , wxSTC_LOT_FAIL + , wxSTC_LOT_HEADER + , wxSTC_LOT_PASS + , wxSTC_LOT_SET + , wxSTC_LOUT_COMMENT + , wxSTC_LOUT_DEFAULT + , wxSTC_LOUT_IDENTIFIER + , wxSTC_LOUT_NUMBER + , wxSTC_LOUT_OPERATOR + , wxSTC_LOUT_STRING + , wxSTC_LOUT_STRINGEOL + , wxSTC_LOUT_WORD + , wxSTC_LOUT_WORD2 + , wxSTC_LOUT_WORD3 + , wxSTC_LOUT_WORD4 + , wxSTC_LUA_CHARACTER + , wxSTC_LUA_COMMENT + , wxSTC_LUA_COMMENTDOC + , wxSTC_LUA_COMMENTLINE + , wxSTC_LUA_DEFAULT + , wxSTC_LUA_IDENTIFIER + , wxSTC_LUA_LITERALSTRING + , wxSTC_LUA_NUMBER + , wxSTC_LUA_OPERATOR + , wxSTC_LUA_PREPROCESSOR + , wxSTC_LUA_STRING + , wxSTC_LUA_STRINGEOL + , wxSTC_LUA_WORD + , wxSTC_LUA_WORD2 + , wxSTC_LUA_WORD3 + , wxSTC_LUA_WORD4 + , wxSTC_LUA_WORD5 + , wxSTC_LUA_WORD6 + , wxSTC_LUA_WORD7 + , wxSTC_LUA_WORD8 + , wxSTC_L_COMMAND + , wxSTC_L_COMMENT + , wxSTC_L_DEFAULT + , wxSTC_L_MATH + , wxSTC_L_TAG + , wxSTC_MAKE_COMMENT + , wxSTC_MAKE_DEFAULT + , wxSTC_MAKE_IDENTIFIER + , wxSTC_MAKE_IDEOL + , wxSTC_MAKE_OPERATOR + , wxSTC_MAKE_PREPROCESSOR + , wxSTC_MAKE_TARGET + , wxSTC_MARGIN_NUMBER + , wxSTC_MARGIN_SYMBOL + , wxSTC_MARKER_MAX + , wxSTC_MARKNUM_FOLDER + , wxSTC_MARKNUM_FOLDEREND + , wxSTC_MARKNUM_FOLDERMIDTAIL + , wxSTC_MARKNUM_FOLDEROPEN + , wxSTC_MARKNUM_FOLDEROPENMID + , wxSTC_MARKNUM_FOLDERSUB + , wxSTC_MARKNUM_FOLDERTAIL + , wxSTC_MARK_ARROW + , wxSTC_MARK_ARROWDOWN + , wxSTC_MARK_ARROWS + , wxSTC_MARK_BACKGROUND + , wxSTC_MARK_BOXMINUS + , wxSTC_MARK_BOXMINUSCONNECTED + , wxSTC_MARK_BOXPLUS + , wxSTC_MARK_BOXPLUSCONNECTED + , wxSTC_MARK_CHARACTER + , wxSTC_MARK_CIRCLE + , wxSTC_MARK_CIRCLEMINUS + , wxSTC_MARK_CIRCLEMINUSCONNECTED + , wxSTC_MARK_CIRCLEPLUS + , wxSTC_MARK_CIRCLEPLUSCONNECTED + , wxSTC_MARK_DOTDOTDOT + , wxSTC_MARK_EMPTY + , wxSTC_MARK_LCORNER + , wxSTC_MARK_LCORNERCURVE + , wxSTC_MARK_MINUS + , wxSTC_MARK_PIXMAP + , wxSTC_MARK_PLUS + , wxSTC_MARK_ROUNDRECT + , wxSTC_MARK_SHORTARROW + , wxSTC_MARK_SMALLRECT + , wxSTC_MARK_TCORNER + , wxSTC_MARK_TCORNERCURVE + , wxSTC_MARK_VLINE + , wxSTC_MASK_FOLDERS + , wxSTC_MATLAB_COMMAND + , wxSTC_MATLAB_COMMENT + , wxSTC_MATLAB_DEFAULT + , wxSTC_MATLAB_IDENTIFIER + , wxSTC_MATLAB_KEYWORD + , wxSTC_MATLAB_NUMBER + , wxSTC_MATLAB_OPERATOR + , wxSTC_MATLAB_STRING + , wxSTC_METAPOST_COMMAND + , wxSTC_METAPOST_DEFAULT + , wxSTC_METAPOST_EXTRA + , wxSTC_METAPOST_GROUP + , wxSTC_METAPOST_SPECIAL + , wxSTC_METAPOST_SYMBOL + , wxSTC_METAPOST_TEXT + , wxSTC_MMIXAL_CHAR + , wxSTC_MMIXAL_COMMENT + , wxSTC_MMIXAL_HEX + , wxSTC_MMIXAL_INCLUDE + , wxSTC_MMIXAL_LABEL + , wxSTC_MMIXAL_LEADWS + , wxSTC_MMIXAL_NUMBER + , wxSTC_MMIXAL_OPCODE + , wxSTC_MMIXAL_OPCODE_POST + , wxSTC_MMIXAL_OPCODE_PRE + , wxSTC_MMIXAL_OPCODE_UNKNOWN + , wxSTC_MMIXAL_OPCODE_VALID + , wxSTC_MMIXAL_OPERANDS + , wxSTC_MMIXAL_OPERATOR + , wxSTC_MMIXAL_REF + , wxSTC_MMIXAL_REGISTER + , wxSTC_MMIXAL_STRING + , wxSTC_MMIXAL_SYMBOL + , wxSTC_MODEVENTMASKALL + , wxSTC_MOD_BEFOREDELETE + , wxSTC_MOD_BEFOREINSERT + , wxSTC_MOD_CHANGEFOLD + , wxSTC_MOD_CHANGEMARKER + , wxSTC_MOD_CHANGESTYLE + , wxSTC_MOD_DELETETEXT + , wxSTC_MOD_INSERTTEXT + , wxSTC_MSSQL_COLUMN_NAME + , wxSTC_MSSQL_COLUMN_NAME_2 + , wxSTC_MSSQL_COMMENT + , wxSTC_MSSQL_DATATYPE + , wxSTC_MSSQL_DEFAULT + , wxSTC_MSSQL_DEFAULT_PREF_DATATYPE + , wxSTC_MSSQL_FUNCTION + , wxSTC_MSSQL_GLOBAL_VARIABLE + , wxSTC_MSSQL_IDENTIFIER + , wxSTC_MSSQL_LINE_COMMENT + , wxSTC_MSSQL_NUMBER + , wxSTC_MSSQL_OPERATOR + , wxSTC_MSSQL_STATEMENT + , wxSTC_MSSQL_STORED_PROCEDURE + , wxSTC_MSSQL_STRING + , wxSTC_MSSQL_SYSTABLE + , wxSTC_MSSQL_VARIABLE + , wxSTC_NNCRONTAB_ASTERISK + , wxSTC_NNCRONTAB_COMMENT + , wxSTC_NNCRONTAB_DEFAULT + , wxSTC_NNCRONTAB_ENVIRONMENT + , wxSTC_NNCRONTAB_IDENTIFIER + , wxSTC_NNCRONTAB_KEYWORD + , wxSTC_NNCRONTAB_MODIFIER + , wxSTC_NNCRONTAB_NUMBER + , wxSTC_NNCRONTAB_SECTION + , wxSTC_NNCRONTAB_STRING + , wxSTC_NNCRONTAB_TASK + , wxSTC_NSIS_COMMENT + , wxSTC_NSIS_DEFAULT + , wxSTC_NSIS_FUNCTION + , wxSTC_NSIS_IFDEFINEDEF + , wxSTC_NSIS_LABEL + , wxSTC_NSIS_MACRODEF + , wxSTC_NSIS_SECTIONDEF + , wxSTC_NSIS_STRINGDQ + , wxSTC_NSIS_STRINGLQ + , wxSTC_NSIS_STRINGRQ + , wxSTC_NSIS_STRINGVAR + , wxSTC_NSIS_SUBSECTIONDEF + , wxSTC_NSIS_USERDEFINED + , wxSTC_NSIS_VARIABLE + , wxSTC_OPTIONAL_START + , wxSTC_PERFORMED_REDO + , wxSTC_PERFORMED_UNDO + , wxSTC_PERFORMED_USER + , wxSTC_PL_ARRAY + , wxSTC_PL_BACKTICKS + , wxSTC_PL_CHARACTER + , wxSTC_PL_COMMENTLINE + , wxSTC_PL_DATASECTION + , wxSTC_PL_DEFAULT + , wxSTC_PL_ERROR + , wxSTC_PL_HASH + , wxSTC_PL_HERE_DELIM + , wxSTC_PL_HERE_Q + , wxSTC_PL_HERE_QQ + , wxSTC_PL_HERE_QX + , wxSTC_PL_IDENTIFIER + , wxSTC_PL_LONGQUOTE + , wxSTC_PL_NUMBER + , wxSTC_PL_OPERATOR + , wxSTC_PL_POD + , wxSTC_PL_PREPROCESSOR + , wxSTC_PL_PUNCTUATION + , wxSTC_PL_REGEX + , wxSTC_PL_REGSUBST + , wxSTC_PL_SCALAR + , wxSTC_PL_STRING + , wxSTC_PL_STRING_Q + , wxSTC_PL_STRING_QQ + , wxSTC_PL_STRING_QR + , wxSTC_PL_STRING_QW + , wxSTC_PL_STRING_QX + , wxSTC_PL_SYMBOLTABLE + , wxSTC_PL_WORD + , wxSTC_POV_BADDIRECTIVE + , wxSTC_POV_COMMENT + , wxSTC_POV_COMMENTLINE + , wxSTC_POV_DEFAULT + , wxSTC_POV_DIRECTIVE + , wxSTC_POV_IDENTIFIER + , wxSTC_POV_NUMBER + , wxSTC_POV_OPERATOR + , wxSTC_POV_STRING + , wxSTC_POV_STRINGEOL + , wxSTC_POV_WORD2 + , wxSTC_POV_WORD3 + , wxSTC_POV_WORD4 + , wxSTC_POV_WORD5 + , wxSTC_POV_WORD6 + , wxSTC_POV_WORD7 + , wxSTC_POV_WORD8 + , wxSTC_PRINT_BLACKONWHITE + , wxSTC_PRINT_COLOURONWHITE + , wxSTC_PRINT_COLOURONWHITEDEFAULTBG + , wxSTC_PRINT_INVERTLIGHT + , wxSTC_PRINT_NORMAL + , wxSTC_PROPS_ASSIGNMENT + , wxSTC_PROPS_COMMENT + , wxSTC_PROPS_DEFAULT + , wxSTC_PROPS_DEFVAL + , wxSTC_PROPS_SECTION + , wxSTC_PS_BADSTRINGCHAR + , wxSTC_PS_BASE85STRING + , wxSTC_PS_COMMENT + , wxSTC_PS_DEFAULT + , wxSTC_PS_DSC_COMMENT + , wxSTC_PS_DSC_VALUE + , wxSTC_PS_HEXSTRING + , wxSTC_PS_IMMEVAL + , wxSTC_PS_KEYWORD + , wxSTC_PS_LITERAL + , wxSTC_PS_NAME + , wxSTC_PS_NUMBER + , wxSTC_PS_PAREN_ARRAY + , wxSTC_PS_PAREN_DICT + , wxSTC_PS_PAREN_PROC + , wxSTC_PS_TEXT + , wxSTC_P_CHARACTER + , wxSTC_P_CLASSNAME + , wxSTC_P_COMMENTBLOCK + , wxSTC_P_COMMENTLINE + , wxSTC_P_DEFAULT + , wxSTC_P_DEFNAME + , wxSTC_P_IDENTIFIER + , wxSTC_P_NUMBER + , wxSTC_P_OPERATOR + , wxSTC_P_STRING + , wxSTC_P_STRINGEOL + , wxSTC_P_TRIPLE + , wxSTC_P_TRIPLEDOUBLE + , wxSTC_P_WORD + , wxSTC_REBOL_BINARY + , wxSTC_REBOL_BRACEDSTRING + , wxSTC_REBOL_CHARACTER + , wxSTC_REBOL_COMMENTBLOCK + , wxSTC_REBOL_COMMENTLINE + , wxSTC_REBOL_DATE + , wxSTC_REBOL_DEFAULT + , wxSTC_REBOL_EMAIL + , wxSTC_REBOL_FILE + , wxSTC_REBOL_IDENTIFIER + , wxSTC_REBOL_ISSUE + , wxSTC_REBOL_MONEY + , wxSTC_REBOL_NUMBER + , wxSTC_REBOL_OPERATOR + , wxSTC_REBOL_PAIR + , wxSTC_REBOL_PREFACE + , wxSTC_REBOL_QUOTEDSTRING + , wxSTC_REBOL_TAG + , wxSTC_REBOL_TIME + , wxSTC_REBOL_TUPLE + , wxSTC_REBOL_URL + , wxSTC_REBOL_WORD + , wxSTC_REBOL_WORD2 + , wxSTC_REBOL_WORD3 + , wxSTC_REBOL_WORD4 + , wxSTC_REBOL_WORD5 + , wxSTC_REBOL_WORD6 + , wxSTC_REBOL_WORD7 + , wxSTC_REBOL_WORD8 + , wxSTC_SCMOD_ALT + , wxSTC_SCMOD_CTRL + , wxSTC_SCMOD_SHIFT + , wxSTC_SCRIPTOL_CHARACTER + , wxSTC_SCRIPTOL_COMMENT + , wxSTC_SCRIPTOL_COMMENTBASIC + , wxSTC_SCRIPTOL_COMMENTDOC + , wxSTC_SCRIPTOL_COMMENTDOCKEYWORD + , wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR + , wxSTC_SCRIPTOL_COMMENTLINE + , wxSTC_SCRIPTOL_COMMENTLINEDOC + , wxSTC_SCRIPTOL_DEFAULT + , wxSTC_SCRIPTOL_IDENTIFIER + , wxSTC_SCRIPTOL_NUMBER + , wxSTC_SCRIPTOL_OPERATOR + , wxSTC_SCRIPTOL_PREPROCESSOR + , wxSTC_SCRIPTOL_REGEX + , wxSTC_SCRIPTOL_STRING + , wxSTC_SCRIPTOL_STRINGEOL + , wxSTC_SCRIPTOL_UUID + , wxSTC_SCRIPTOL_VERBATIM + , wxSTC_SCRIPTOL_WORD + , wxSTC_SCRIPTOL_WORD2 + , wxSTC_SEL_LINES + , wxSTC_SEL_RECTANGLE + , wxSTC_SEL_STREAM + , wxSTC_SH_BACKTICKS + , wxSTC_SH_CHARACTER + , wxSTC_SH_COMMENTLINE + , wxSTC_SH_DEFAULT + , wxSTC_SH_ERROR + , wxSTC_SH_HERE_DELIM + , wxSTC_SH_HERE_Q + , wxSTC_SH_IDENTIFIER + , wxSTC_SH_NUMBER + , wxSTC_SH_OPERATOR + , wxSTC_SH_PARAM + , wxSTC_SH_SCALAR + , wxSTC_SH_STRING + , wxSTC_SH_WORD + , wxSTC_SN_CODE + , wxSTC_SN_COMMENTLINE + , wxSTC_SN_COMMENTLINEBANG + , wxSTC_SN_DEFAULT + , wxSTC_SN_IDENTIFIER + , wxSTC_SN_NUMBER + , wxSTC_SN_OPERATOR + , wxSTC_SN_PREPROCESSOR + , wxSTC_SN_REGEXTAG + , wxSTC_SN_SIGNAL + , wxSTC_SN_STRING + , wxSTC_SN_STRINGEOL + , wxSTC_SN_USER + , wxSTC_SN_WORD + , wxSTC_SN_WORD2 + , wxSTC_SN_WORD3 + , wxSTC_SQL_CHARACTER + , wxSTC_SQL_COMMENT + , wxSTC_SQL_COMMENTDOC + , wxSTC_SQL_COMMENTDOCKEYWORD + , wxSTC_SQL_COMMENTDOCKEYWORDERROR + , wxSTC_SQL_COMMENTLINE + , wxSTC_SQL_COMMENTLINEDOC + , wxSTC_SQL_DEFAULT + , wxSTC_SQL_IDENTIFIER + , wxSTC_SQL_NUMBER + , wxSTC_SQL_OPERATOR + , wxSTC_SQL_QUOTEDIDENTIFIER + , wxSTC_SQL_SQLPLUS + , wxSTC_SQL_SQLPLUS_COMMENT + , wxSTC_SQL_SQLPLUS_PROMPT + , wxSTC_SQL_STRING + , wxSTC_SQL_USER1 + , wxSTC_SQL_USER2 + , wxSTC_SQL_USER3 + , wxSTC_SQL_USER4 + , wxSTC_SQL_WORD + , wxSTC_SQL_WORD2 + , wxSTC_START + , wxSTC_STYLE_BRACEBAD + , wxSTC_STYLE_BRACELIGHT + , wxSTC_STYLE_CONTROLCHAR + , wxSTC_STYLE_DEFAULT + , wxSTC_STYLE_INDENTGUIDE + , wxSTC_STYLE_LASTPREDEFINED + , wxSTC_STYLE_LINENUMBER + , wxSTC_STYLE_MAX + , wxSTC_ST_ASSIGN + , wxSTC_ST_BINARY + , wxSTC_ST_BOOL + , wxSTC_ST_CHARACTER + , wxSTC_ST_COMMENT + , wxSTC_ST_DEFAULT + , wxSTC_ST_GLOBAL + , wxSTC_ST_KWSEND + , wxSTC_ST_NIL + , wxSTC_ST_NUMBER + , wxSTC_ST_RETURN + , wxSTC_ST_SELF + , wxSTC_ST_SPECIAL + , wxSTC_ST_SPEC_SEL + , wxSTC_ST_STRING + , wxSTC_ST_SUPER + , wxSTC_ST_SYMBOL + , wxSTC_T3_BLOCK_COMMENT + , wxSTC_T3_DEFAULT + , wxSTC_T3_D_STRING + , wxSTC_T3_HTML_DEFAULT + , wxSTC_T3_HTML_STRING + , wxSTC_T3_HTML_TAG + , wxSTC_T3_IDENTIFIER + , wxSTC_T3_KEYWORD + , wxSTC_T3_LIB_DIRECTIVE + , wxSTC_T3_LINE_COMMENT + , wxSTC_T3_MSG_PARAM + , wxSTC_T3_NUMBER + , wxSTC_T3_OPERATOR + , wxSTC_T3_PREPROCESSOR + , wxSTC_T3_S_STRING + , wxSTC_T3_USER1 + , wxSTC_T3_USER2 + , wxSTC_T3_USER3 + , wxSTC_T3_X_DEFAULT + , wxSTC_T3_X_STRING + , wxSTC_TEX_COMMAND + , wxSTC_TEX_DEFAULT + , wxSTC_TEX_GROUP + , wxSTC_TEX_SPECIAL + , wxSTC_TEX_SYMBOL + , wxSTC_TEX_TEXT + , wxSTC_TIME_FOREVER + , wxSTC_VHDL_ATTRIBUTE + , wxSTC_VHDL_COMMENT + , wxSTC_VHDL_COMMENTLINEBANG + , wxSTC_VHDL_DEFAULT + , wxSTC_VHDL_IDENTIFIER + , wxSTC_VHDL_KEYWORD + , wxSTC_VHDL_NUMBER + , wxSTC_VHDL_OPERATOR + , wxSTC_VHDL_STDFUNCTION + , wxSTC_VHDL_STDOPERATOR + , wxSTC_VHDL_STDPACKAGE + , wxSTC_VHDL_STDTYPE + , wxSTC_VHDL_STRING + , wxSTC_VHDL_STRINGEOL + , wxSTC_VHDL_USERWORD + , wxSTC_VISIBLE_SLOP + , wxSTC_VISIBLE_STRICT + , wxSTC_V_COMMENT + , wxSTC_V_COMMENTLINE + , wxSTC_V_COMMENTLINEBANG + , wxSTC_V_DEFAULT + , wxSTC_V_IDENTIFIER + , wxSTC_V_NUMBER + , wxSTC_V_OPERATOR + , wxSTC_V_PREPROCESSOR + , wxSTC_V_STRING + , wxSTC_V_STRINGEOL + , wxSTC_V_USER + , wxSTC_V_WORD + , wxSTC_V_WORD2 + , wxSTC_V_WORD3 + , wxSTC_WRAP_NONE + , wxSTC_WRAP_WORD + , wxSTC_WS_INVISIBLE + , wxSTC_WS_VISIBLEAFTERINDENT + , wxSTC_WS_VISIBLEALWAYS + , wxSTC_YAML_COMMENT + , wxSTC_YAML_DEFAULT + , wxSTC_YAML_DOCUMENT + , wxSTC_YAML_ERROR + , wxSTC_YAML_IDENTIFIER + , wxSTC_YAML_KEYWORD + , wxSTC_YAML_NUMBER + , wxSTC_YAML_REFERENCE + , wxSTC_YAML_TEXT + , wxSTIPPLE + , wxSTIPPLE_MASK + , wxSTIPPLE_MASK_OPAQUE + , wxSTREAM_EOF + , wxSTREAM_NO_ERROR + , wxSTREAM_READ_ERROR + , wxSTREAM_WRITE_ERROR + , wxSTRETCH_NOT + , wxSTRING + , wxST_NO_AUTORESIZE + , wxST_SIZEGRIP + , wxSUNKEN_BORDER + , wxSWISS + , wxSW_3D + , wxSW_3DBORDER + , wxSW_3DSASH + , wxSW_BORDER + , wxSW_NOBORDER + , wxSYSTEM_MENU + , wxSYS_ANSI_FIXED_FONT + , wxSYS_ANSI_VAR_FONT + , wxSYS_BLACK_BRUSH + , wxSYS_BLACK_PEN + , wxSYS_BORDER_X + , wxSYS_BORDER_Y + , wxSYS_CAPTION_Y + , wxSYS_COLOUR_3DDKSHADOW + , wxSYS_COLOUR_3DFACE + , wxSYS_COLOUR_3DHIGHLIGHT + , wxSYS_COLOUR_3DHILIGHT + , wxSYS_COLOUR_3DLIGHT + , wxSYS_COLOUR_3DSHADOW + , wxSYS_COLOUR_ACTIVEBORDER + , wxSYS_COLOUR_ACTIVECAPTION + , wxSYS_COLOUR_APPWORKSPACE + , wxSYS_COLOUR_BACKGROUND + , wxSYS_COLOUR_BTNFACE + , wxSYS_COLOUR_BTNHIGHLIGHT + , wxSYS_COLOUR_BTNHILIGHT + , wxSYS_COLOUR_BTNSHADOW + , wxSYS_COLOUR_BTNTEXT + , wxSYS_COLOUR_CAPTIONTEXT + , wxSYS_COLOUR_DESKTOP + , wxSYS_COLOUR_GRAYTEXT + , wxSYS_COLOUR_HIGHLIGHT + , wxSYS_COLOUR_HIGHLIGHTTEXT + , wxSYS_COLOUR_INACTIVEBORDER + , wxSYS_COLOUR_INACTIVECAPTION + , wxSYS_COLOUR_INACTIVECAPTIONTEXT + , wxSYS_COLOUR_INFOBK + , wxSYS_COLOUR_INFOTEXT + , wxSYS_COLOUR_LISTBOX + , wxSYS_COLOUR_MENU + , wxSYS_COLOUR_MENUTEXT + , wxSYS_COLOUR_SCROLLBAR + , wxSYS_COLOUR_WINDOW + , wxSYS_COLOUR_WINDOWFRAME + , wxSYS_COLOUR_WINDOWTEXT + , wxSYS_CURSOR_X + , wxSYS_CURSOR_Y + , wxSYS_DCLICK_X + , wxSYS_DCLICK_Y + , wxSYS_DEFAULT_GUI_FONT + , wxSYS_DEFAULT_PALETTE + , wxSYS_DEVICE_DEFAULT_FONT + , wxSYS_DKGRAY_BRUSH + , wxSYS_DRAG_X + , wxSYS_DRAG_Y + , wxSYS_EDGE_X + , wxSYS_EDGE_Y + , wxSYS_FRAMESIZE_X + , wxSYS_FRAMESIZE_Y + , wxSYS_GRAY_BRUSH + , wxSYS_HOLLOW_BRUSH + , wxSYS_HSCROLL_ARROW_X + , wxSYS_HSCROLL_ARROW_Y + , wxSYS_HSCROLL_Y + , wxSYS_HTHUMB_X + , wxSYS_ICONSPACING_X + , wxSYS_ICONSPACING_Y + , wxSYS_ICON_X + , wxSYS_ICON_Y + , wxSYS_LTGRAY_BRUSH + , wxSYS_MENU_Y + , wxSYS_MOUSE_BUTTONS + , wxSYS_NETWORK_PRESENT + , wxSYS_NULL_BRUSH + , wxSYS_NULL_PEN + , wxSYS_OEM_FIXED_FONT + , wxSYS_PENWINDOWS_PRESENT + , wxSYS_SCREEN_DESKTOP + , wxSYS_SCREEN_NONE + , wxSYS_SCREEN_PDA + , wxSYS_SCREEN_SMALL + , wxSYS_SCREEN_TINY + , wxSYS_SCREEN_X + , wxSYS_SCREEN_Y + , wxSYS_SHOW_SOUNDS + , wxSYS_SMALLICON_X + , wxSYS_SMALLICON_Y + , wxSYS_SWAP_BUTTONS + , wxSYS_SYSTEM_FIXED_FONT + , wxSYS_SYSTEM_FONT + , wxSYS_VSCROLL_ARROW_X + , wxSYS_VSCROLL_ARROW_Y + , wxSYS_VSCROLL_X + , wxSYS_VTHUMB_Y + , wxSYS_WHITE_BRUSH + , wxSYS_WHITE_PEN + , wxSYS_WINDOWMIN_X + , wxSYS_WINDOWMIN_Y + , wxTAB_TRAVERSAL + , wxTB_3DBUTTONS + , wxTB_BOTTOM + , wxTB_DEFAULT_STYLE + , wxTB_DOCKABLE + , wxTB_FLAT + , wxTB_HORIZONTAL + , wxTB_HORZ_LAYOUT + , wxTB_HORZ_TEXT + , wxTB_LEFT + , wxTB_NOALIGN + , wxTB_NODIVIDER + , wxTB_NOICONS + , wxTB_NO_TOOLTIPS + , wxTB_RIGHT + , wxTB_TEXT + , wxTB_TOP + , wxTB_VERTICAL + , wxTC_FIXEDWIDTH + , wxTC_MULTILINE + , wxTC_OWNERDRAW + , wxTC_RIGHTJUSTIFY + , wxTELETYPE + , wxTEXT_ALIGNMENT_CENTER + , wxTEXT_ALIGNMENT_CENTRE + , wxTEXT_ALIGNMENT_DEFAULT + , wxTEXT_ALIGNMENT_JUSTIFIED + , wxTEXT_ALIGNMENT_LEFT + , wxTEXT_ALIGNMENT_RIGHT + , wxTEXT_ATTR_ALIGNMENT + , wxTEXT_ATTR_ALL + , wxTEXT_ATTR_BACKGROUND_COLOUR + , wxTEXT_ATTR_BULLET + , wxTEXT_ATTR_BULLET_NAME + , wxTEXT_ATTR_BULLET_NUMBER + , wxTEXT_ATTR_BULLET_STYLE + , wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE + , wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT + , wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT + , wxTEXT_ATTR_BULLET_STYLE_ARABIC + , wxTEXT_ATTR_BULLET_STYLE_BITMAP + , wxTEXT_ATTR_BULLET_STYLE_CONTINUATION + , wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER + , wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER + , wxTEXT_ATTR_BULLET_STYLE_NONE + , wxTEXT_ATTR_BULLET_STYLE_OUTLINE + , wxTEXT_ATTR_BULLET_STYLE_PARENTHESES + , wxTEXT_ATTR_BULLET_STYLE_PERIOD + , wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS + , wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER + , wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER + , wxTEXT_ATTR_BULLET_STYLE_STANDARD + , wxTEXT_ATTR_BULLET_STYLE_SYMBOL + , wxTEXT_ATTR_BULLET_TEXT + , wxTEXT_ATTR_CHARACTER + , wxTEXT_ATTR_CHARACTER_STYLE_NAME + , wxTEXT_ATTR_EFFECTS + , wxTEXT_ATTR_EFFECT_CAPITALS + , wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH + , wxTEXT_ATTR_EFFECT_EMBOSS + , wxTEXT_ATTR_EFFECT_ENGRAVE + , wxTEXT_ATTR_EFFECT_NONE + , wxTEXT_ATTR_EFFECT_OUTLINE + , wxTEXT_ATTR_EFFECT_SHADOW + , wxTEXT_ATTR_EFFECT_SMALL_CAPITALS + , wxTEXT_ATTR_EFFECT_STRIKETHROUGH + , wxTEXT_ATTR_EFFECT_SUBSCRIPT + , wxTEXT_ATTR_EFFECT_SUPERSCRIPT + , wxTEXT_ATTR_FONT + , wxTEXT_ATTR_FONT_ENCODING + , wxTEXT_ATTR_FONT_FACE + , wxTEXT_ATTR_FONT_FAMILY + , wxTEXT_ATTR_FONT_ITALIC + , wxTEXT_ATTR_FONT_PIXEL_SIZE + , wxTEXT_ATTR_FONT_POINT_SIZE + , wxTEXT_ATTR_FONT_SIZE + , wxTEXT_ATTR_FONT_STRIKETHROUGH + , wxTEXT_ATTR_FONT_UNDERLINE + , wxTEXT_ATTR_FONT_WEIGHT + , wxTEXT_ATTR_LEFT_INDENT + , wxTEXT_ATTR_LINE_SPACING + , wxTEXT_ATTR_LINE_SPACING_HALF + , wxTEXT_ATTR_LINE_SPACING_NORMAL + , wxTEXT_ATTR_LINE_SPACING_TWICE + , wxTEXT_ATTR_LIST_STYLE_NAME + , wxTEXT_ATTR_OUTLINE_LEVEL + , wxTEXT_ATTR_PAGE_BREAK + , wxTEXT_ATTR_PARAGRAPH + , wxTEXT_ATTR_PARAGRAPH_STYLE_NAME + , wxTEXT_ATTR_PARA_SPACING_AFTER + , wxTEXT_ATTR_PARA_SPACING_BEFORE + , wxTEXT_ATTR_RIGHT_INDENT + , wxTEXT_ATTR_TABS + , wxTEXT_ATTR_TEXT_COLOUR + , wxTEXT_ATTR_URL + , wxTEXT_TYPE_ANY + , wxTE_AUTO_SCROLL + , wxTE_AUTO_URL + , wxTE_BESTWRAP + , wxTE_CAPITALIZE + , wxTE_CENTER + , wxTE_CENTRE + , wxTE_CHARWRAP + , wxTE_DONTWRAP + , wxTE_HT_BEFORE + , wxTE_HT_BELOW + , wxTE_HT_BEYOND + , wxTE_HT_ON_TEXT + , wxTE_HT_UNKNOWN + , wxTE_LEFT + , wxTE_LINEWRAP + , wxTE_MULTILINE + , wxTE_NOHIDESEL + , wxTE_NO_VSCROLL + , wxTE_PASSWORD + , wxTE_PROCESS_ENTER + , wxTE_PROCESS_TAB + , wxTE_READONLY + , wxTE_RICH + , wxTE_RICH2 + , wxTE_RIGHT + , wxTE_WORDWRAP + , wxTILE + , wxTINY_CAPTION_HORIZ + , wxTINY_CAPTION_VERT + , wxTOOL_BOTTOM + , wxTOOL_LEFT + , wxTOOL_RIGHT + , wxTOOL_TOP + , wxTOP + , wxTRANSPARENT + , wxTRANSPARENT_BRUSH + , wxTRANSPARENT_PEN + , wxTRANSPARENT_WINDOW + , wxTREE_HITTEST_ABOVE + , wxTREE_HITTEST_BELOW + , wxTREE_HITTEST_NOWHERE + , wxTREE_HITTEST_ONITEM + , wxTREE_HITTEST_ONITEMBUTTON + , wxTREE_HITTEST_ONITEMICON + , wxTREE_HITTEST_ONITEMINDENT + , wxTREE_HITTEST_ONITEMLABEL + , wxTREE_HITTEST_ONITEMLOWERPART + , wxTREE_HITTEST_ONITEMRIGHT + , wxTREE_HITTEST_ONITEMSTATEICON + , wxTREE_HITTEST_ONITEMUPPERPART + , wxTREE_HITTEST_TOLEFT + , wxTREE_HITTEST_TORIGHT + , wxTR_AQUA_BUTTONS + , wxTR_EDIT_LABELS + , wxTR_EXTENDED + , wxTR_FULL_ROW_HIGHLIGHT + , wxTR_HAS_BUTTONS + , wxTR_HAS_VARIABLE_ROW_HEIGHT + , wxTR_HIDE_ROOT + , wxTR_LINES_AT_ROOT + , wxTR_MULTIPLE + , wxTR_NO_BUTTONS + , wxTR_NO_LINES + , wxTR_ROW_LINES + , wxTR_SINGLE + , wxTR_TWIST_BUTTONS + , wxTreeItemIcon_Expanded + , wxTreeItemIcon_Normal + , wxTreeItemIcon_Selected + , wxTreeItemIcon_SelectedExpanded + , wxUNIX + , wxUNKNOWN + , wxUNKNOWN_PLATFORM + , wxUP + , wxUSER_COLOURS + , wxUSER_DASH + , wxVARIABLE + , wxVERTICAL + , wxVERTICAL_HATCH + , wxVSCROLL + , wxWANTS_CHARS + , wxWEST + , wxWHITE + , wxWHITE_BRUSH + , wxWHITE_PEN + , wxWIN32S + , wxWIN386 + , wxWIN95 + , wxWINDING_RULE + , wxWINDOWS + , wxWINDOWS_NT + , wxWINDOWS_OS2 + , wxWS_EX_VALIDATE_RECURSIVELY + , wxXOR + , wxXRC_NONE + , wxXRC_NO_RELOADING + , wxXRC_NO_SUBCLASSING + , wxXRC_USE_LOCALE + , wxXVIEW_X + , wxYES + , wxYES_DEFAULT + , wxYES_NO + ) where + +import Data.Bits + +-- A utility function +(<<) :: Int -> Int -> Int +x << i = shift x i + +-- NEW! converted from wxWidgets\2.9.5\include\wx\defs.h + +-- From wxWidgets\2.9.5\include\wx\defs.h +{- + The value of the first style is chosen to fit with + wxDeprecatedGUIConstants values below, don't change it. +-} +wxHATCHSTYLE_FIRST :: Int +wxHATCHSTYLE_FIRST = 111 +wxHATCHSTYLE_BDIAGONAL :: Int +wxHATCHSTYLE_BDIAGONAL = wxHATCHSTYLE_FIRST +wxHATCHSTYLE_CROSSDIAG :: Int +wxHATCHSTYLE_CROSSDIAG = wxHATCHSTYLE_BDIAGONAL + 1 +wxHATCHSTYLE_FDIAGONAL :: Int +wxHATCHSTYLE_FDIAGONAL = wxHATCHSTYLE_CROSSDIAG + 1 +wxHATCHSTYLE_CROSS :: Int +wxHATCHSTYLE_CROSS = wxHATCHSTYLE_FDIAGONAL + 1 +wxHATCHSTYLE_HORIZONTAL :: Int +wxHATCHSTYLE_HORIZONTAL = wxHATCHSTYLE_CROSS + 1 +wxHATCHSTYLE_VERTICAL :: Int +wxHATCHSTYLE_VERTICAL = wxHATCHSTYLE_HORIZONTAL + 1 +wxHATCHSTYLE_LAST :: Int +wxHATCHSTYLE_LAST = wxHATCHSTYLE_VERTICAL + + +-- End NEW! + +-- | A flag can be combined with other flags to a bit mask. +type BitFlag = Int + +wxEXEC_ASYNC :: BitFlag +wxEXEC_ASYNC = 0 + +wxEXEC_SYNC :: BitFlag +wxEXEC_SYNC = 1 + +wxEXEC_NOHIDE :: BitFlag +wxEXEC_NOHIDE = 2 + +wxEXEC_MAKE_GROUP_LEADER :: BitFlag +wxEXEC_MAKE_GROUP_LEADER = 4 + +wxITEM_SEPARATOR :: Int +wxITEM_SEPARATOR = (-1) + +wxITEM_NORMAL :: Int +wxITEM_NORMAL = 0 + +wxITEM_CHECK :: Int +wxITEM_CHECK = 1 + +wxITEM_RADIO :: Int +wxITEM_RADIO = 2 + +wxITEM_MAX :: Int +wxITEM_MAX = 3 + +wxCLOSE_BOX :: Int +wxCLOSE_BOX = 4096 + +wxFRAME_EX_CONTEXTHELP :: Int +wxFRAME_EX_CONTEXTHELP = 4 + +wxDIALOG_EX_CONTEXTHELP :: Int +wxDIALOG_EX_CONTEXTHELP = 4 + +wxFRAME_SHAPED :: Int +wxFRAME_SHAPED = 16 + +wxFULLSCREEN_ALL :: Int +wxFULLSCREEN_ALL = 31 + +wxTreeItemIcon_Normal :: Int +wxTreeItemIcon_Normal = 0 + +wxTreeItemIcon_Selected :: Int +wxTreeItemIcon_Selected = 1 + +wxTreeItemIcon_Expanded :: Int +wxTreeItemIcon_Expanded = 2 + +wxTreeItemIcon_SelectedExpanded :: Int +wxTreeItemIcon_SelectedExpanded = 3 + +wxCONFIG_USE_LOCAL_FILE :: Int +wxCONFIG_USE_LOCAL_FILE = 1 + +wxCONFIG_USE_GLOBAL_FILE :: Int +wxCONFIG_USE_GLOBAL_FILE = 2 + +wxCONFIG_USE_RELATIVE_PATH :: Int +wxCONFIG_USE_RELATIVE_PATH = 4 + +wxCONFIG_USE_NO_ESCAPE_CHARACTERS :: Int +wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8 + +wxCONFIG_TYPE_UNKNOWN :: Int +wxCONFIG_TYPE_UNKNOWN = 0 + +wxCONFIG_TYPE_STRING :: Int +wxCONFIG_TYPE_STRING = 1 + +wxCONFIG_TYPE_BOOLEAN :: Int +wxCONFIG_TYPE_BOOLEAN = 2 + +wxCONFIG_TYPE_INTEGER :: Int +wxCONFIG_TYPE_INTEGER = 3 + +wxCONFIG_TYPE_FLOAT :: Int +wxCONFIG_TYPE_FLOAT = 4 + +wxSIGNONE :: Int +wxSIGNONE = 0 + +wxSIGHUP :: Int +wxSIGHUP = 1 + +wxSIGINT :: Int +wxSIGINT = 2 + +wxSIGQUIT :: Int +wxSIGQUIT = 3 + +wxSIGILL :: Int +wxSIGILL = 4 + +wxSIGTRAP :: Int +wxSIGTRAP = 5 + +wxSIGABRT :: Int +wxSIGABRT = 6 + +wxSIGEMT :: Int +wxSIGEMT = 7 + +wxSIGFPE :: Int +wxSIGFPE = 8 + +wxSIGKILL :: Int +wxSIGKILL = 9 + +wxSIGBUS :: Int +wxSIGBUS = 10 + +wxSIGSEGV :: Int +wxSIGSEGV = 11 + +wxSIGSYS :: Int +wxSIGSYS = 12 + +wxSIGPIPE :: Int +wxSIGPIPE = 13 + +wxSIGALRM :: Int +wxSIGALRM = 14 + +wxSIGTERM :: Int +wxSIGTERM = 15 + +wxKILL_OK :: Int +wxKILL_OK = 0 + +wxKILL_BAD_SIGNAL :: Int +wxKILL_BAD_SIGNAL = 1 + +wxKILL_ACCESS_DENIED :: Int +wxKILL_ACCESS_DENIED = 2 + +wxKILL_NO_PROCESS :: Int +wxKILL_NO_PROCESS = 3 + +wxKILL_ERROR :: Int +wxKILL_ERROR = 4 + +wxSTREAM_NO_ERROR :: Int +wxSTREAM_NO_ERROR = 0 + +wxSTREAM_EOF :: Int +wxSTREAM_EOF = 1 + +wxSTREAM_WRITE_ERROR :: Int +wxSTREAM_WRITE_ERROR = 2 + +wxSTREAM_READ_ERROR :: Int +wxSTREAM_READ_ERROR = 3 + +wxNB_MULTILINE :: Int +wxNB_MULTILINE = 256 + +wxIMAGE_LIST_NORMAL :: Int +wxIMAGE_LIST_NORMAL = 0 + +wxIMAGE_LIST_SMALL :: Int +wxIMAGE_LIST_SMALL = 1 + +wxIMAGE_LIST_STATE :: Int +wxIMAGE_LIST_STATE = 2 + + +-- wxToolBar style flags + +-- lay out the toolbar horizontally +wxTB_HORIZONTAL :: Int +wxTB_HORIZONTAL = wxHORIZONTAL -- == 0x0004 +wxTB_TOP :: Int +wxTB_TOP = wxTB_HORIZONTAL + +-- lay out the toolbar vertically +wxTB_VERTICAL :: Int +wxTB_VERTICAL = wxVERTICAL -- == 0x0008 + +wxTB_LEFT :: Int +wxTB_LEFT = wxTB_VERTICAL + +-- show 3D buttons (wxToolBarSimple only) +wxTB_3DBUTTONS :: Int +wxTB_3DBUTTONS = 0x0010 + +-- "flat" buttons (Win32/GTK only) +wxTB_FLAT :: Int +wxTB_FLAT = 0x0020 + +-- dockable toolbar (GTK only) +wxTB_DOCKABLE :: Int +wxTB_DOCKABLE = 0x0040 + +-- don't show the icons (they're shown by default) +wxTB_NOICONS :: Int +wxTB_NOICONS = 0x0080 + +-- show the text (not shown by default) +wxTB_TEXT :: Int +wxTB_TEXT = 0x0100 + +-- don't show the divider between toolbar and the window (Win32 only) +wxTB_NODIVIDER :: Int +wxTB_NODIVIDER = 0x0200 + +-- no automatic alignment (Win32 only useless) +wxTB_NOALIGN :: Int +wxTB_NOALIGN = 0x0400 + +-- show the text and the icons alongside not vertically stacked (Win32/GTK) +wxTB_HORZ_LAYOUT :: Int +wxTB_HORZ_LAYOUT = 0x0800 + +wxTB_HORZ_TEXT :: Int +wxTB_HORZ_TEXT = wxTB_HORZ_LAYOUT .|. wxTB_TEXT + +-- don't show the toolbar short help tooltips +wxTB_NO_TOOLTIPS :: Int +wxTB_NO_TOOLTIPS = 0x1000 + +-- lay out toolbar at the bottom of the window +wxTB_BOTTOM :: Int +wxTB_BOTTOM = 0x2000 + +-- lay out toolbar at the right edge of the window +wxTB_RIGHT :: Int +wxTB_RIGHT = 0x4000 + +wxTB_DEFAULT_STYLE :: Int +wxTB_DEFAULT_STYLE = wxTB_HORIZONTAL .|. wxTB_FLAT + +-- End wxToolBar style flags + + +wxADJUST_MINSIZE :: Int +wxADJUST_MINSIZE = 32768 +{-# DEPRECATED wxADJUST_MINSIZE "Don't use this" #-} + +wxDB_TYPE_NAME_LEN :: Int +wxDB_TYPE_NAME_LEN = 40 + +wxDB_MAX_STATEMENT_LEN :: Int +wxDB_MAX_STATEMENT_LEN = 4096 + +wxDB_MAX_WHERE_CLAUSE_LEN :: Int +wxDB_MAX_WHERE_CLAUSE_LEN = 2048 + +wxDB_MAX_ERROR_MSG_LEN :: Int +wxDB_MAX_ERROR_MSG_LEN = 512 + +wxDB_MAX_ERROR_HISTORY :: Int +wxDB_MAX_ERROR_HISTORY = 5 + +wxDB_MAX_TABLE_NAME_LEN :: Int +wxDB_MAX_TABLE_NAME_LEN = 128 + +wxDB_MAX_COLUMN_NAME_LEN :: Int +wxDB_MAX_COLUMN_NAME_LEN = 128 + +wxDB_DATA_TYPE_VARCHAR :: Int +wxDB_DATA_TYPE_VARCHAR = 1 + +wxDB_DATA_TYPE_INTEGER :: Int +wxDB_DATA_TYPE_INTEGER = 2 + +wxDB_DATA_TYPE_FLOAT :: Int +wxDB_DATA_TYPE_FLOAT = 3 + +wxDB_DATA_TYPE_DATE :: Int +wxDB_DATA_TYPE_DATE = 4 + +wxDB_DATA_TYPE_BLOB :: Int +wxDB_DATA_TYPE_BLOB = 5 + +wxDB_SELECT_KEYFIELDS :: Int +wxDB_SELECT_KEYFIELDS = 1 + +wxDB_SELECT_WHERE :: Int +wxDB_SELECT_WHERE = 2 + +wxDB_SELECT_MATCHING :: Int +wxDB_SELECT_MATCHING = 3 + +wxDB_SELECT_STATEMENT :: Int +wxDB_SELECT_STATEMENT = 4 + +wxDB_UPD_KEYFIELDS :: Int +wxDB_UPD_KEYFIELDS = 1 + +wxDB_UPD_WHERE :: Int +wxDB_UPD_WHERE = 2 + +wxDB_DEL_KEYFIELDS :: Int +wxDB_DEL_KEYFIELDS = 1 + +wxDB_DEL_WHERE :: Int +wxDB_DEL_WHERE = 2 + +wxDB_DEL_MATCHING :: Int +wxDB_DEL_MATCHING = 3 + +wxDB_WHERE_KEYFIELDS :: Int +wxDB_WHERE_KEYFIELDS = 1 + +wxDB_WHERE_MATCHING :: Int +wxDB_WHERE_MATCHING = 2 + +wxDB_GRANT_SELECT :: Int +wxDB_GRANT_SELECT = 1 + +wxDB_GRANT_INSERT :: Int +wxDB_GRANT_INSERT = 2 + +wxDB_GRANT_UPDATE :: Int +wxDB_GRANT_UPDATE = 4 + +wxDB_GRANT_DELETE :: Int +wxDB_GRANT_DELETE = 8 + +wxDB_GRANT_ALL :: Int +wxDB_GRANT_ALL = 15 + +wxSQL_INVALID_HANDLE :: Int +wxSQL_INVALID_HANDLE = (-2) + +wxSQL_ERROR :: Int +wxSQL_ERROR = (-1) + +wxSQL_SUCCESS :: Int +wxSQL_SUCCESS = 0 + +wxSQL_SUCCESS_WITH_INFO :: Int +wxSQL_SUCCESS_WITH_INFO = 1 + +wxSQL_NO_DATA_FOUND :: Int +wxSQL_NO_DATA_FOUND = 100 + +wxSQL_CHAR :: Int +wxSQL_CHAR = 1 + +wxSQL_NUMERIC :: Int +wxSQL_NUMERIC = 2 + +wxSQL_DECIMAL :: Int +wxSQL_DECIMAL = 3 + +wxSQL_INTEGER :: Int +wxSQL_INTEGER = 4 + +wxSQL_SMALLINT :: Int +wxSQL_SMALLINT = 5 + +wxSQL_FLOAT :: Int +wxSQL_FLOAT = 6 + +wxSQL_REAL :: Int +wxSQL_REAL = 7 + +wxSQL_DOUBLE :: Int +wxSQL_DOUBLE = 8 + +wxSQL_VARCHAR :: Int +wxSQL_VARCHAR = 12 + +wxSQL_C_CHAR :: Int +wxSQL_C_CHAR = 1 + +wxSQL_C_LONG :: Int +wxSQL_C_LONG = 4 + +wxSQL_C_SHORT :: Int +wxSQL_C_SHORT = 5 + +wxSQL_C_FLOAT :: Int +wxSQL_C_FLOAT = 7 + +wxSQL_C_DOUBLE :: Int +wxSQL_C_DOUBLE = 8 + +wxSQL_C_DEFAULT :: Int +wxSQL_C_DEFAULT = 99 + +wxSQL_NO_NULLS :: Int +wxSQL_NO_NULLS = 0 + +wxSQL_NULLABLE :: Int +wxSQL_NULLABLE = 1 + +wxSQL_NULLABLE_UNKNOWN :: Int +wxSQL_NULLABLE_UNKNOWN = 2 + +wxSQL_NULL_DATA :: Int +wxSQL_NULL_DATA = (-1) + +wxSQL_DATA_AT_EXEC :: Int +wxSQL_DATA_AT_EXEC = (-2) + +wxSQL_NTS :: Int +wxSQL_NTS = (-3) + +wxSQL_DATE :: Int +wxSQL_DATE = 9 + +wxSQL_TIME :: Int +wxSQL_TIME = 10 + +wxSQL_TIMESTAMP :: Int +wxSQL_TIMESTAMP = 11 + +wxSQL_C_DATE :: Int +wxSQL_C_DATE = 9 + +wxSQL_C_TIME :: Int +wxSQL_C_TIME = 10 + +wxSQL_C_TIMESTAMP :: Int +wxSQL_C_TIMESTAMP = 11 + +wxSQL_FETCH_NEXT :: Int +wxSQL_FETCH_NEXT = 1 + +wxSQL_FETCH_FIRST :: Int +wxSQL_FETCH_FIRST = 2 + +wxSQL_FETCH_LAST :: Int +wxSQL_FETCH_LAST = 3 + +wxSQL_FETCH_PRIOR :: Int +wxSQL_FETCH_PRIOR = 4 + +wxSQL_FETCH_ABSOLUTE :: Int +wxSQL_FETCH_ABSOLUTE = 5 + +wxSQL_FETCH_RELATIVE :: Int +wxSQL_FETCH_RELATIVE = 6 + +wxSQL_FETCH_BOOKMARK :: Int +wxSQL_FETCH_BOOKMARK = 8 + +wxSOUND_SYNC :: Int +wxSOUND_SYNC = 0 + +wxSOUND_ASYNC :: Int +wxSOUND_ASYNC = 1 + +wxSOUND_LOOP :: Int +wxSOUND_LOOP = 2 + +wxDRAG_COPYONLY :: Int +wxDRAG_COPYONLY = 0 + +wxDRAG_ALLOWMOVE :: Int +wxDRAG_ALLOWMOVE = 1 + +wxDRAG_DEFALUTMOVE :: Int +wxDRAG_DEFALUTMOVE = 3 + +wxMEDIACTRLPLAYERCONTROLS_NONE :: BitFlag +wxMEDIACTRLPLAYERCONTROLS_NONE = 0 + +wxMEDIACTRLPLAYERCONTROLS_STEP :: BitFlag +wxMEDIACTRLPLAYERCONTROLS_STEP = 1 + +wxMEDIACTRLPLAYERCONTROLS_VOLUME :: BitFlag +wxMEDIACTRLPLAYERCONTROLS_VOLUME = 2 + +wxMEDIACTRLPLAYERCONTROLS_DEFAULT :: BitFlag +wxMEDIACTRLPLAYERCONTROLS_DEFAULT = 3 + +wxACCEL_ALT :: Int +wxACCEL_ALT = 1 + +wxACCEL_CTRL :: Int +wxACCEL_CTRL = 2 + +wxACCEL_SHIFT :: Int +wxACCEL_SHIFT = 4 + +wxACCEL_NORMAL :: Int +wxACCEL_NORMAL = 0 + +wxNULL_FLAG :: Int +wxNULL_FLAG = 0 + +wxEVT_NULL :: Int +wxEVT_NULL = 0 + +wxEVT_FIRST :: Int +wxEVT_FIRST = 10000 + +wxJOYSTICK1 :: Int +wxJOYSTICK1 = 0 + +wxJOYSTICK2 :: Int +wxJOYSTICK2 = 1 + +wxJOY_BUTTON1 :: Int +wxJOY_BUTTON1 = 1 + +wxJOY_BUTTON2 :: Int +wxJOY_BUTTON2 = 2 + +wxJOY_BUTTON3 :: Int +wxJOY_BUTTON3 = 4 + +wxJOY_BUTTON4 :: Int +wxJOY_BUTTON4 = 8 + +wxUNKNOWN_PLATFORM :: Int +wxUNKNOWN_PLATFORM = 1 + +wxCURSES :: Int +wxCURSES = 2 + +wxXVIEW_X :: Int +wxXVIEW_X = 3 + +wxMOTIF_X :: Int +wxMOTIF_X = 4 + +wxCOSE_X :: Int +wxCOSE_X = 5 + +wxNEXTSTEP :: Int +wxNEXTSTEP = 6 + +wxMACINTOSH :: Int +wxMACINTOSH = 7 + +wxBEOS :: Int +wxBEOS = 8 + +wxGTK :: Int +wxGTK = 9 + +wxGTK_WIN32 :: Int +wxGTK_WIN32 = 10 + +wxGTK_OS2 :: Int +wxGTK_OS2 = 11 + +wxGTK_BEOS :: Int +wxGTK_BEOS = 12 + +wxQT :: Int +wxQT = 13 + +wxGEOS :: Int +wxGEOS = 14 + +wxOS2_PM :: Int +wxOS2_PM = 15 + +wxWINDOWS :: Int +wxWINDOWS = 16 + +wxPENWINDOWS :: Int +wxPENWINDOWS = 17 + +wxWINDOWS_NT :: Int +wxWINDOWS_NT = 18 + +wxWIN32S :: Int +wxWIN32S = 19 + +wxWIN95 :: Int +wxWIN95 = 20 + +wxWIN386 :: Int +wxWIN386 = 21 + +wxMGL_UNIX :: Int +wxMGL_UNIX = 22 + +wxMGL_X :: Int +wxMGL_X = 23 + +wxMGL_WIN32 :: Int +wxMGL_WIN32 = 24 + +wxMGL_OS2 :: Int +wxMGL_OS2 = 25 + +wxWINDOWS_OS2 :: Int +wxWINDOWS_OS2 = 26 + +wxUNIX :: Int +wxUNIX = 27 + +wxBIG_ENDIAN :: Int +wxBIG_ENDIAN = 4321 + +wxLITTLE_ENDIAN :: Int +wxLITTLE_ENDIAN = 1234 + +wxPDP_ENDIAN :: Int +wxPDP_ENDIAN = 3412 + +wxCENTRE :: Int +wxCENTRE = 1 + +wxCENTER :: Int +wxCENTER = 1 + +wxCENTER_FRAME :: Int +wxCENTER_FRAME = 0 + +wxCENTRE_ON_SCREEN :: Int +wxCENTRE_ON_SCREEN = 2 + +wxHORIZONTAL :: Int +wxHORIZONTAL = 4 + +wxVERTICAL :: Int +wxVERTICAL = 8 + +wxBOTH :: Int +wxBOTH = 12 + +wxLEFT :: Int +wxLEFT = 16 + +wxRIGHT :: Int +wxRIGHT = 32 + +wxUP :: Int +wxUP = 64 + +wxDOWN :: Int +wxDOWN = 128 + +wxTOP :: Int +wxTOP = 64 + +wxBOTTOM :: Int +wxBOTTOM = 128 + +wxNORTH :: Int +wxNORTH = 64 + +wxSOUTH :: Int +wxSOUTH = 128 + +wxWEST :: Int +wxWEST = 16 + +wxEAST :: Int +wxEAST = 32 + +wxALL :: Int +wxALL = 240 + +-- enum wxAlignment + +wxALIGN_NOT :: Int +wxALIGN_NOT = 0 + +wxALIGN_CENTER_HORIZONTAL :: Int +wxALIGN_CENTER_HORIZONTAL = 256 + +wxALIGN_CENTRE_HORIZONTAL :: Int +wxALIGN_CENTRE_HORIZONTAL = 256 + +wxALIGN_LEFT :: Int +wxALIGN_LEFT = 0 + +wxALIGN_TOP :: Int +wxALIGN_TOP = 0 + +wxALIGN_RIGHT :: Int +wxALIGN_RIGHT = 512 + +wxALIGN_BOTTOM :: Int +wxALIGN_BOTTOM = 1024 + +wxALIGN_CENTER_VERTICAL :: Int +wxALIGN_CENTER_VERTICAL = 2048 + +wxALIGN_CENTRE_VERTICAL :: Int +wxALIGN_CENTRE_VERTICAL = 2048 + +wxALIGN_CENTER :: Int +wxALIGN_CENTER = 2304 + +wxALIGN_CENTRE :: Int +wxALIGN_CENTRE = 2304 + +-- End enum wxAlignment + +-- enum wxSizerFlagBits + +wxFIXED_MINSIZE :: Int +wxFIXED_MINSIZE = 0x8000 + +wxRESERVE_SPACE_EVEN_IF_HIDDEN :: Int +wxRESERVE_SPACE_EVEN_IF_HIDDEN = 0x0002 + +-- a mask to extract wxSizerFlagBits from combination of flags +wxSIZER_FLAG_BITS_MASK :: Int +wxSIZER_FLAG_BITS_MASK = 0x8002 + +-- End enum wxSizerFlagBits + +-- enum wxStretch + +wxSTRETCH_NOT :: Int +wxSTRETCH_NOT = 0 + +wxSHRINK :: Int +wxSHRINK = 4096 + +wxGROW :: Int +wxGROW = 8192 + +wxEXPAND :: Int +wxEXPAND = 8192 + +wxSHAPED :: Int +wxSHAPED = 16384 + +wxTILE :: Int +wxTILE = wxSHAPED .|. wxFIXED_MINSIZE + +-- a mask to extract stretch from the combination of flags +wxSTRETCH_MASK = 0x7000 -- sans wxTILE + +-- End enum wxStretch + +-- enum wxBorder + +{- + - Window (Frame/dialog/subwindow/panel item) style flags + -} +wxVSCROLL :: Int +wxVSCROLL = 0x80000000 + +wxHSCROLL :: Int +wxHSCROLL = 0x40000000 + +wxCAPTION :: Int +wxCAPTION = 0x20000000 + +-- | Deprecated +wxDOUBLE_BORDER :: Int +wxDOUBLE_BORDER = 268435456 +{-# DEPRECATED wxDOUBLE_BORDER "Use wxBORDER_THEME" #-} + +-- | Deprecated +wxSUNKEN_BORDER :: Int +wxSUNKEN_BORDER = 134217728 +{-# DEPRECATED wxSUNKEN_BORDER "Use wxBORDER_SUNKEN" #-} + +-- | Deprecated +wxRAISED_BORDER :: Int +wxRAISED_BORDER = 67108864 +{-# DEPRECATED wxRAISED_BORDER "Use wxBORDER_RAISED" #-} + +-- | Deprecated +wxSTATIC_BORDER :: Int +wxSTATIC_BORDER = 16777216 +{-# DEPRECATED wxSTATIC_BORDER "Use wxBORDER_STATIC" #-} + +wxBORDER :: Int +wxBORDER = 33554432 + +-- | This is different from wxBORDER_NONE as by default the controls do +-- have border +wxBORDER_DEFAULT :: Int +wxBORDER_DEFAULT = 0 + +-- | Displays no border, overriding the default border style for the +-- window. wxNO_BORDER is the old name for this style. +wxBORDER_NONE :: Int +wxBORDER_NONE = 0x00200000 + +-- | Displays a border suitable for a static control. wxSTATIC_BORDER is +-- the old name for this style. Windows only. +wxBORDER_STATIC :: Int +wxBORDER_STATIC = 0x01000000 + +-- | Displays a thin border around the window. wxSIMPLE_BORDER is the old +-- name for this style. +wxBORDER_SIMPLE :: Int +wxBORDER_SIMPLE = 0x02000000 + +-- | Displays a raised border. wxRAISED_BORDER is the old name for this style. +wxBORDER_RAISED :: Int +wxBORDER_RAISED = 0x04000000 + +-- | Displays a sunken border. wxSUNKEN_BORDER is the old name for this style. +wxBORDER_SUNKEN :: Int +wxBORDER_SUNKEN = 0x08000000 + +-- | Displays a themed border where possible. Currently this has an effect +-- on Windows XP and above only. For more information on themed borders, +-- please see Themed borders on Windows +-- <http://docs.wxwidgets.org/2.8/wx_wxmswport.html#wxmswthemedborders>. +wxBORDER_THEME :: Int +wxBORDER_THEME = 0x10000000 + +-- | A mask to extract border style from the combination of flags +wxBORDER_MASK :: Int +wxBORDER_MASK = 0x1f200000 + +-- End enum wxBorder + + +wxTRANSPARENT_WINDOW :: Int +wxTRANSPARENT_WINDOW = 1048576 + +wxNO_BORDER :: Int +wxNO_BORDER = 2097152 + +wxUSER_COLOURS :: Int +wxUSER_COLOURS = 8388608 + +wxNO_3D :: Int +wxNO_3D = 8388608 + +wxCLIP_CHILDREN :: Int +wxCLIP_CHILDREN = 4194304 + +wxTAB_TRAVERSAL :: Int +wxTAB_TRAVERSAL = 524288 + +wxWANTS_CHARS :: Int +wxWANTS_CHARS = 262144 + +wxRETAINED :: Int +wxRETAINED = 131072 + +wxNO_FULL_REPAINT_ON_RESIZE :: Int +wxNO_FULL_REPAINT_ON_RESIZE = 65536 + +wxWS_EX_VALIDATE_RECURSIVELY :: Int +wxWS_EX_VALIDATE_RECURSIVELY = 1 + +wxSTAY_ON_TOP :: Int +wxSTAY_ON_TOP = 32768 + +wxICONIZE :: Int +wxICONIZE = 16384 + +wxMAXIMIZE :: Int +wxMAXIMIZE = 8192 + +wxSYSTEM_MENU :: Int +wxSYSTEM_MENU = 2048 + +wxMINIMIZE_BOX :: Int +wxMINIMIZE_BOX = 1024 + +wxMAXIMIZE_BOX :: Int +wxMAXIMIZE_BOX = 512 + +wxDEFAULT_FRAME_STYLE :: Int +wxDEFAULT_FRAME_STYLE = 536878656 + +wxTINY_CAPTION_HORIZ :: Int +wxTINY_CAPTION_HORIZ = 256 + +wxTINY_CAPTION_VERT :: Int +wxTINY_CAPTION_VERT = 128 + +wxRESIZE_BORDER :: Int +wxRESIZE_BORDER = 64 + +wxDIALOG_MODAL :: Int +wxDIALOG_MODAL = 32 + +wxDIALOG_MODELESS :: Int +wxDIALOG_MODELESS = 0 + +wxFRAME_FLOAT_ON_PARENT :: Int +wxFRAME_FLOAT_ON_PARENT = 8 + +wxFRAME_NO_WINDOW_MENU :: Int +wxFRAME_NO_WINDOW_MENU = 256 + +wxED_CLIENT_MARGIN :: Int +wxED_CLIENT_MARGIN = 4 + +wxED_BUTTONS_BOTTOM :: Int +wxED_BUTTONS_BOTTOM = 0 + +wxED_BUTTONS_RIGHT :: Int +wxED_BUTTONS_RIGHT = 2 + +wxED_STATIC_LINE :: Int +wxED_STATIC_LINE = 1 + +wxMB_DOCKABLE :: Int +wxMB_DOCKABLE = 1 + +wxMENU_TEAROFF :: Int +wxMENU_TEAROFF = 1 + +wxCOLOURED :: Int +wxCOLOURED = 2048 + +wxFIXED_LENGTH :: Int +wxFIXED_LENGTH = 1024 + +wxLB_SORT :: Int +wxLB_SORT = 16 + +wxLB_SINGLE :: Int +wxLB_SINGLE = 32 + +wxLB_MULTIPLE :: Int +wxLB_MULTIPLE = 64 + +wxLB_EXTENDED :: Int +wxLB_EXTENDED = 128 + +wxLB_OWNERDRAW :: Int +wxLB_OWNERDRAW = 256 + +wxLB_NEEDED_SB :: Int +wxLB_NEEDED_SB = 512 + +wxLB_ALWAYS_SB :: Int +wxLB_ALWAYS_SB = 1024 + +-- ---------------------------------------------------------------------------- +-- wxTextCtrl style flags +-- ---------------------------------------------------------------------------- + +wxTE_NO_VSCROLL :: Int +wxTE_NO_VSCROLL = 0x0002 + +wxTE_READONLY :: Int +wxTE_READONLY = 0x0010 +wxTE_MULTILINE :: Int +wxTE_MULTILINE = 0x0020 +wxTE_PROCESS_TAB :: Int +wxTE_PROCESS_TAB = 0x0040 + +-- alignment flags +wxTE_LEFT :: Int +wxTE_LEFT = 0x0000 -- 0x0000 +wxTE_CENTER :: Int +wxTE_CENTER = wxALIGN_CENTER_HORIZONTAL -- 0x0100 +wxTE_RIGHT :: Int +wxTE_RIGHT = wxALIGN_RIGHT -- 0x0200 +wxTE_CENTRE :: Int +wxTE_CENTRE = wxTE_CENTER + +-- this style means to use RICHEDIT control and does something only under wxMSW +-- and Win32 and is silently ignored under all other platforms +wxTE_RICH :: Int +wxTE_RICH = 0x0080 + +wxTE_PROCESS_ENTER :: Int +wxTE_PROCESS_ENTER = 0x0400 + +wxTE_PASSWORD :: Int +wxTE_PASSWORD = 0x0800 + +-- automatically detect the URLs and generate the events when mouse is +-- moved/clicked over an URL +-- +-- this is for Win32 richedit and wxGTK2 multiline controls only so far +wxTE_AUTO_URL :: Int +wxTE_AUTO_URL = 0x1000 + +-- by default, the Windows text control doesn't show the selection when it +-- doesn't have focus - use this style to force it to always show it +wxTE_NOHIDESEL :: Int +wxTE_NOHIDESEL = 0x2000 + +-- use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any +-- position and wxTE_WORDWRAP to wrap at words boundary +-- +-- if no wrapping style is given at all, the control wraps at word boundary +wxTE_DONTWRAP :: Int +wxTE_DONTWRAP = wxHSCROLL +wxTE_CHARWRAP :: Int +wxTE_CHARWRAP = 0x4000 -- wrap at any position +wxTE_WORDWRAP :: Int +wxTE_WORDWRAP = 0x0001 -- wrap only at words boundaries +wxTE_BESTWRAP :: Int +wxTE_BESTWRAP = 0x0000 -- this is the default + +-- if WXWIN_COMPATIBILITY_2_6 +-- obsolete synonym +wxTE_LINEWRAP :: Int +wxTE_LINEWRAP = wxTE_CHARWRAP +{-# DEPRECATED wxTE_LINEWRAP "Don't use this" #-} +-- endif -- WXWIN_COMPATIBILITY_2_6 + +-- if WXWIN_COMPATIBILITY_2_8 +-- this style is (or at least should be) on by default now, don't use it +wxTE_AUTO_SCROLL :: Int +wxTE_AUTO_SCROLL = 0 +{-# DEPRECATED wxTE_AUTO_SCROLL "Don't use this" #-} +-- endif -- WXWIN_COMPATIBILITY_2_8 + +-- force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for +-- wxTE_RICH controls - can be used together with or instead of wxTE_RICH +wxTE_RICH2 :: Int +wxTE_RICH2 = 0x8000 + +-- reuse wxTE_RICH2's value for CAPEDIT control on Windows CE +-- #if defined(__SMARTPHONE__) || defined(__POCKETPC__) +-- wxTE_CAPITALIZE :: Int +-- wxTE_CAPITALIZE = wxTE_RICH2 +-- #else +wxTE_CAPITALIZE :: Int +wxTE_CAPITALIZE = 0 +-- #endif + +-- ---------------------------------------------------------------------------- +-- wxTextCtrl file types +-- ---------------------------------------------------------------------------- + +wxTEXT_TYPE_ANY :: Int +wxTEXT_TYPE_ANY = 0 + +-- ---------------------------------------------------------------------------- +-- wxTextCtrl::HitTest return values +-- ---------------------------------------------------------------------------- + +-- the point asked is ... +-- enum wxTextCtrlHitTestResult +wxTE_HT_UNKNOWN :: Int +wxTE_HT_UNKNOWN = -2 -- this means HitTest() is simply not implemented +wxTE_HT_BEFORE :: Int +wxTE_HT_BEFORE = -1 -- either to the left or upper +wxTE_HT_ON_TEXT :: Int +wxTE_HT_ON_TEXT = 0 -- directly on +wxTE_HT_BELOW :: Int +wxTE_HT_BELOW = 1 -- below [the last line] +wxTE_HT_BEYOND :: Int +wxTE_HT_BEYOND = 2 -- after [the end of line] +-- ... the character returned + +-- ---------------------------------------------------------------------------- +-- Types for wxTextAttr +-- ---------------------------------------------------------------------------- + +-- Alignment + +-- enum wxTextAttrAlignment +wxTEXT_ALIGNMENT_DEFAULT :: Int +wxTEXT_ALIGNMENT_DEFAULT = 0 +wxTEXT_ALIGNMENT_LEFT :: Int +wxTEXT_ALIGNMENT_LEFT = 1 +wxTEXT_ALIGNMENT_CENTRE :: Int +wxTEXT_ALIGNMENT_CENTRE = 2 +wxTEXT_ALIGNMENT_CENTER :: Int +wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE +wxTEXT_ALIGNMENT_RIGHT :: Int +wxTEXT_ALIGNMENT_RIGHT = 3 +wxTEXT_ALIGNMENT_JUSTIFIED :: Int +wxTEXT_ALIGNMENT_JUSTIFIED = 4 + +-- Flags to indicate which attributes are being applied +-- enum wxTextAttrFlags +wxTEXT_ATTR_TEXT_COLOUR :: Int +wxTEXT_ATTR_TEXT_COLOUR = 0x00000001 +wxTEXT_ATTR_BACKGROUND_COLOUR :: Int +wxTEXT_ATTR_BACKGROUND_COLOUR = 0x00000002 + +wxTEXT_ATTR_FONT_FACE :: Int +wxTEXT_ATTR_FONT_FACE = 0x00000004 +wxTEXT_ATTR_FONT_POINT_SIZE :: Int +wxTEXT_ATTR_FONT_POINT_SIZE = 0x00000008 +wxTEXT_ATTR_FONT_PIXEL_SIZE :: Int +wxTEXT_ATTR_FONT_PIXEL_SIZE = 0x10000000 +wxTEXT_ATTR_FONT_WEIGHT :: Int +wxTEXT_ATTR_FONT_WEIGHT = 0x00000010 +wxTEXT_ATTR_FONT_ITALIC :: Int +wxTEXT_ATTR_FONT_ITALIC = 0x00000020 +wxTEXT_ATTR_FONT_UNDERLINE :: Int +wxTEXT_ATTR_FONT_UNDERLINE = 0x00000040 +wxTEXT_ATTR_FONT_STRIKETHROUGH :: Int +wxTEXT_ATTR_FONT_STRIKETHROUGH = 0x08000000 +wxTEXT_ATTR_FONT_ENCODING :: Int +wxTEXT_ATTR_FONT_ENCODING = 0x02000000 +wxTEXT_ATTR_FONT_FAMILY :: Int +wxTEXT_ATTR_FONT_FAMILY = 0x04000000 +wxTEXT_ATTR_FONT_SIZE :: Int +wxTEXT_ATTR_FONT_SIZE = + wxTEXT_ATTR_FONT_POINT_SIZE .|. + wxTEXT_ATTR_FONT_PIXEL_SIZE +wxTEXT_ATTR_FONT :: Int +wxTEXT_ATTR_FONT = + wxTEXT_ATTR_FONT_FACE .|. + wxTEXT_ATTR_FONT_SIZE .|. + wxTEXT_ATTR_FONT_WEIGHT .|. + wxTEXT_ATTR_FONT_ITALIC .|. + wxTEXT_ATTR_FONT_UNDERLINE .|. + wxTEXT_ATTR_FONT_STRIKETHROUGH .|. + wxTEXT_ATTR_FONT_ENCODING .|. + wxTEXT_ATTR_FONT_FAMILY + +wxTEXT_ATTR_ALIGNMENT :: Int +wxTEXT_ATTR_ALIGNMENT = 0x00000080 +wxTEXT_ATTR_LEFT_INDENT :: Int +wxTEXT_ATTR_LEFT_INDENT = 0x00000100 +wxTEXT_ATTR_RIGHT_INDENT :: Int +wxTEXT_ATTR_RIGHT_INDENT = 0x00000200 +wxTEXT_ATTR_TABS :: Int +wxTEXT_ATTR_TABS = 0x00000400 +wxTEXT_ATTR_PARA_SPACING_AFTER :: Int +wxTEXT_ATTR_PARA_SPACING_AFTER = 0x00000800 +wxTEXT_ATTR_PARA_SPACING_BEFORE :: Int +wxTEXT_ATTR_PARA_SPACING_BEFORE = 0x00001000 +wxTEXT_ATTR_LINE_SPACING :: Int +wxTEXT_ATTR_LINE_SPACING = 0x00002000 +wxTEXT_ATTR_CHARACTER_STYLE_NAME :: Int +wxTEXT_ATTR_CHARACTER_STYLE_NAME = 0x00004000 +wxTEXT_ATTR_PARAGRAPH_STYLE_NAME :: Int +wxTEXT_ATTR_PARAGRAPH_STYLE_NAME = 0x00008000 +wxTEXT_ATTR_LIST_STYLE_NAME :: Int +wxTEXT_ATTR_LIST_STYLE_NAME = 0x00010000 + +wxTEXT_ATTR_BULLET_STYLE :: Int +wxTEXT_ATTR_BULLET_STYLE = 0x00020000 +wxTEXT_ATTR_BULLET_NUMBER :: Int +wxTEXT_ATTR_BULLET_NUMBER = 0x00040000 +wxTEXT_ATTR_BULLET_TEXT :: Int +wxTEXT_ATTR_BULLET_TEXT = 0x00080000 +wxTEXT_ATTR_BULLET_NAME :: Int +wxTEXT_ATTR_BULLET_NAME = 0x00100000 + +wxTEXT_ATTR_BULLET :: Int +wxTEXT_ATTR_BULLET = + wxTEXT_ATTR_BULLET_STYLE .|. + wxTEXT_ATTR_BULLET_NUMBER .|. + wxTEXT_ATTR_BULLET_TEXT .|. + wxTEXT_ATTR_BULLET_NAME + + +wxTEXT_ATTR_URL :: Int +wxTEXT_ATTR_URL = 0x00200000 +wxTEXT_ATTR_PAGE_BREAK :: Int +wxTEXT_ATTR_PAGE_BREAK = 0x00400000 +wxTEXT_ATTR_EFFECTS :: Int +wxTEXT_ATTR_EFFECTS = 0x00800000 +wxTEXT_ATTR_OUTLINE_LEVEL :: Int +wxTEXT_ATTR_OUTLINE_LEVEL = 0x01000000 + +{-! +* Character and paragraph combined styles +-} + +wxTEXT_ATTR_CHARACTER :: Int +wxTEXT_ATTR_CHARACTER = + wxTEXT_ATTR_FONT .|. + wxTEXT_ATTR_EFFECTS .|. + wxTEXT_ATTR_BACKGROUND_COLOUR .|. + wxTEXT_ATTR_TEXT_COLOUR .|. + wxTEXT_ATTR_CHARACTER_STYLE_NAME .|. + wxTEXT_ATTR_URL + +wxTEXT_ATTR_PARAGRAPH :: Int +wxTEXT_ATTR_PARAGRAPH = + wxTEXT_ATTR_ALIGNMENT .|. + wxTEXT_ATTR_LEFT_INDENT .|. + wxTEXT_ATTR_RIGHT_INDENT .|. + wxTEXT_ATTR_TABS .|. + wxTEXT_ATTR_PARA_SPACING_BEFORE .|. + wxTEXT_ATTR_PARA_SPACING_AFTER .|. + wxTEXT_ATTR_LINE_SPACING .|. + wxTEXT_ATTR_BULLET .|. + wxTEXT_ATTR_PARAGRAPH_STYLE_NAME .|. + wxTEXT_ATTR_LIST_STYLE_NAME .|. + wxTEXT_ATTR_OUTLINE_LEVEL .|. + wxTEXT_ATTR_PAGE_BREAK + +wxTEXT_ATTR_ALL :: Int +wxTEXT_ATTR_ALL = + wxTEXT_ATTR_CHARACTER .|. + wxTEXT_ATTR_PARAGRAPH + +{-! +* Styles for wxTextAttr::SetBulletStyle +-} +-- enum wxTextAttrBulletStyle +wxTEXT_ATTR_BULLET_STYLE_NONE :: Int +wxTEXT_ATTR_BULLET_STYLE_NONE = 0x00000000 +wxTEXT_ATTR_BULLET_STYLE_ARABIC :: Int +wxTEXT_ATTR_BULLET_STYLE_ARABIC = 0x00000001 +wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER :: Int +wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER = 0x00000002 +wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER :: Int +wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER = 0x00000004 +wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER :: Int +wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER = 0x00000008 +wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER :: Int +wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER = 0x00000010 +wxTEXT_ATTR_BULLET_STYLE_SYMBOL :: Int +wxTEXT_ATTR_BULLET_STYLE_SYMBOL = 0x00000020 +wxTEXT_ATTR_BULLET_STYLE_BITMAP :: Int +wxTEXT_ATTR_BULLET_STYLE_BITMAP = 0x00000040 +wxTEXT_ATTR_BULLET_STYLE_PARENTHESES :: Int +wxTEXT_ATTR_BULLET_STYLE_PARENTHESES = 0x00000080 +wxTEXT_ATTR_BULLET_STYLE_PERIOD :: Int +wxTEXT_ATTR_BULLET_STYLE_PERIOD = 0x00000100 +wxTEXT_ATTR_BULLET_STYLE_STANDARD :: Int +wxTEXT_ATTR_BULLET_STYLE_STANDARD = 0x00000200 +wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS :: Int +wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS = 0x00000400 +wxTEXT_ATTR_BULLET_STYLE_OUTLINE :: Int +wxTEXT_ATTR_BULLET_STYLE_OUTLINE = 0x00000800 + +wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT :: Int +wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT = 0x00000000 +wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT :: Int +wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT = 0x00001000 +wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE :: Int +wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE = 0x00002000 + +wxTEXT_ATTR_BULLET_STYLE_CONTINUATION :: Int +wxTEXT_ATTR_BULLET_STYLE_CONTINUATION = 0x00004000 + +{-! +* Styles for wxTextAttr::SetTextEffects +-} +-- enum wxTextAttrEffects +wxTEXT_ATTR_EFFECT_NONE :: Int +wxTEXT_ATTR_EFFECT_NONE = 0x00000000 +wxTEXT_ATTR_EFFECT_CAPITALS :: Int +wxTEXT_ATTR_EFFECT_CAPITALS = 0x00000001 +wxTEXT_ATTR_EFFECT_SMALL_CAPITALS :: Int +wxTEXT_ATTR_EFFECT_SMALL_CAPITALS = 0x00000002 +wxTEXT_ATTR_EFFECT_STRIKETHROUGH :: Int +wxTEXT_ATTR_EFFECT_STRIKETHROUGH = 0x00000004 +wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH :: Int +wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH = 0x00000008 +wxTEXT_ATTR_EFFECT_SHADOW :: Int +wxTEXT_ATTR_EFFECT_SHADOW = 0x00000010 +wxTEXT_ATTR_EFFECT_EMBOSS :: Int +wxTEXT_ATTR_EFFECT_EMBOSS = 0x00000020 +wxTEXT_ATTR_EFFECT_OUTLINE :: Int +wxTEXT_ATTR_EFFECT_OUTLINE = 0x00000040 +wxTEXT_ATTR_EFFECT_ENGRAVE :: Int +wxTEXT_ATTR_EFFECT_ENGRAVE = 0x00000080 +wxTEXT_ATTR_EFFECT_SUPERSCRIPT :: Int +wxTEXT_ATTR_EFFECT_SUPERSCRIPT = 0x00000100 +wxTEXT_ATTR_EFFECT_SUBSCRIPT :: Int +wxTEXT_ATTR_EFFECT_SUBSCRIPT = 0x00000200 + +{-! +* Line spacing values +-} +-- enum wxTextAttrLineSpacing +wxTEXT_ATTR_LINE_SPACING_NORMAL :: Int +wxTEXT_ATTR_LINE_SPACING_NORMAL = 10 +wxTEXT_ATTR_LINE_SPACING_HALF :: Int +wxTEXT_ATTR_LINE_SPACING_HALF = 15 +wxTEXT_ATTR_LINE_SPACING_TWICE :: Int +wxTEXT_ATTR_LINE_SPACING_TWICE = 20 + +--End wxTextCtrl style flags + + +wxPROCESS_ENTER :: Int +wxPROCESS_ENTER = 1024 +{-# DEPRECATED wxPROCESS_ENTER "Use wxTE_PROCESS_ENTER" #-} + +wxPASSWORD :: Int +wxPASSWORD = 2048 +{-# DEPRECATED wxPASSWORD "Use wxTE_PASSWORD" #-} + +wxCB_SIMPLE :: Int +wxCB_SIMPLE = 4 + +wxCB_SORT :: Int +wxCB_SORT = 8 + +wxCB_READONLY :: Int +wxCB_READONLY = 16 + +wxCB_DROPDOWN :: Int +wxCB_DROPDOWN = 32 + +wxRB_GROUP :: Int +wxRB_GROUP = 4 + +wxGA_PROGRESSBAR :: Int +wxGA_PROGRESSBAR = 16 + +wxGA_SMOOTH :: Int +wxGA_SMOOTH = 32 + +wxSL_NOTIFY_DRAG :: Int +wxSL_NOTIFY_DRAG = 0 + +wxSL_AUTOTICKS :: Int +wxSL_AUTOTICKS = 16 + +wxSL_LABELS :: Int +wxSL_LABELS = 32 + +wxSL_LEFT :: Int +wxSL_LEFT = 64 + +wxSL_TOP :: Int +wxSL_TOP = 128 + +wxSL_RIGHT :: Int +wxSL_RIGHT = 256 + +wxSL_BOTTOM :: Int +wxSL_BOTTOM = 512 + +wxSL_BOTH :: Int +wxSL_BOTH = 1024 + +wxSL_SELRANGE :: Int +wxSL_SELRANGE = 2048 + + +-- wxAnyButton specific flags + +-- These flags affect label alignment +wxBU_LEFT :: Int +wxBU_LEFT = 64 + +wxBU_TOP :: Int +wxBU_TOP = 128 + +wxBU_RIGHT :: Int +wxBU_RIGHT = 256 + +wxBU_BOTTOM :: Int +wxBU_BOTTOM = 512 + +wxBU_ALIGN_MASK :: Int +wxBU_ALIGN_MASK = wxBU_LEFT .|. wxBU_TOP .|. wxBU_RIGHT .|. wxBU_BOTTOM + +-- These two flags are obsolete +wxBU_AUTODRAW :: Int +wxBU_AUTODRAW = 4 +{-# DEPRECATED wxBU_AUTODRAW "Don't use this" #-} + +wxBU_NOAUTODRAW :: Int +wxBU_NOAUTODRAW = 0 +{-# DEPRECATED wxBU_NOAUTODRAW "Don't use this" #-} + +-- by default, the buttons will be created with some (system dependent) +-- minimal size to make them look nicer, giving this style will make them as +-- small as possible +wxBU_EXACTFIT :: Int +wxBU_EXACTFIT = 0x0001 + +-- this flag can be used to disable using the text label in the button: it is +-- mostly useful when creating buttons showing bitmap and having stock id as +-- without it both the standard label corresponding to the stock id and the +-- bitmap would be shown +wxBU_NOTEXT :: Int +wxBU_NOTEXT = 0x0002 + +-- End wxAnyButton specific flags + + +wxLC_VRULES :: Int +wxLC_VRULES = 1 + +wxLC_HRULES :: Int +wxLC_HRULES = 2 + +wxLC_ICON :: Int +wxLC_ICON = 4 + +wxLC_SMALL_ICON :: Int +wxLC_SMALL_ICON = 8 + +wxLC_LIST :: Int +wxLC_LIST = 16 + +wxLC_REPORT :: Int +wxLC_REPORT = 32 + +wxLC_ALIGN_TOP :: Int +wxLC_ALIGN_TOP = 64 + +wxLC_ALIGN_LEFT :: Int +wxLC_ALIGN_LEFT = 128 + +wxLC_AUTOARRANGE :: Int +wxLC_AUTOARRANGE = 256 + +wxLC_VIRTUAL :: Int +wxLC_VIRTUAL = 512 + +wxLC_EDIT_LABELS :: Int +wxLC_EDIT_LABELS = 1024 + +wxLC_NO_HEADER :: Int +wxLC_NO_HEADER = 2048 + +wxLC_NO_SORT_HEADER :: Int +wxLC_NO_SORT_HEADER = 4096 + +wxLC_SINGLE_SEL :: Int +wxLC_SINGLE_SEL = 8192 + +wxLC_SORT_ASCENDING :: Int +wxLC_SORT_ASCENDING = 16384 + +wxLC_SORT_DESCENDING :: Int +wxLC_SORT_DESCENDING = 32768 + +wxLC_MASK_TYPE :: Int +wxLC_MASK_TYPE = wxLC_ICON .|. wxLC_SMALL_ICON .|. wxLC_LIST .|. wxLC_REPORT + +wxLC_MASK_ALIGN :: Int +wxLC_MASK_ALIGN = wxLC_ALIGN_TOP .|. wxLC_ALIGN_LEFT + +wxLC_MASK_SORT :: Int +wxLC_MASK_SORT = wxLC_SORT_ASCENDING .|. wxLC_SORT_DESCENDING + +wxSP_ARROW_KEYS :: Int +wxSP_ARROW_KEYS = 4096 + +wxSP_WRAP :: Int +wxSP_WRAP = 8192 + +wxSP_NOBORDER :: Int +wxSP_NOBORDER = 0 + +wxSP_NOSASH :: Int +wxSP_NOSASH = 16 + +wxSP_BORDER :: Int +wxSP_BORDER = 32 + +wxSP_PERMIT_UNSPLIT :: Int +wxSP_PERMIT_UNSPLIT = 64 + +wxSP_LIVE_UPDATE :: Int +wxSP_LIVE_UPDATE = 128 + +wxSP_3DSASH :: Int +wxSP_3DSASH = 256 + +wxSP_3DBORDER :: Int +wxSP_3DBORDER = 512 + +wxSP_3D :: Int +wxSP_3D = 768 + +wxSP_FULLSASH :: Int +wxSP_FULLSASH = 1024 + +wxFRAME_TOOL_WINDOW :: Int +wxFRAME_TOOL_WINDOW = 4 + +wxTC_MULTILINE :: Int +wxTC_MULTILINE = 0 + +wxTC_RIGHTJUSTIFY :: Int +wxTC_RIGHTJUSTIFY = 16 + +wxTC_FIXEDWIDTH :: Int +wxTC_FIXEDWIDTH = 32 + +wxTC_OWNERDRAW :: Int +wxTC_OWNERDRAW = 64 + +wxNB_FIXEDWIDTH :: Int +wxNB_FIXEDWIDTH = 16 + +wxST_SIZEGRIP :: Int +wxST_SIZEGRIP = 16 + +wxST_NO_AUTORESIZE :: Int +wxST_NO_AUTORESIZE = 1 + +wxPD_CAN_ABORT :: Int +wxPD_CAN_ABORT = 1 + +wxPD_APP_MODAL :: Int +wxPD_APP_MODAL = 2 + +wxPD_AUTO_HIDE :: Int +wxPD_AUTO_HIDE = 4 + +wxPD_ELAPSED_TIME :: Int +wxPD_ELAPSED_TIME = 8 + +wxPD_ESTIMATED_TIME :: Int +wxPD_ESTIMATED_TIME = 16 + +wxPD_REMAINING_TIME :: Int +wxPD_REMAINING_TIME = 64 + +wxHW_SCROLLBAR_NEVER :: Int +wxHW_SCROLLBAR_NEVER = 2 + +wxHW_SCROLLBAR_AUTO :: Int +wxHW_SCROLLBAR_AUTO = 4 + +wxCAL_SUNDAY_FIRST :: Int +wxCAL_SUNDAY_FIRST = 0 + +wxCAL_MONDAY_FIRST :: Int +wxCAL_MONDAY_FIRST = 1 + +wxCAL_SHOW_HOLIDAYS :: Int +wxCAL_SHOW_HOLIDAYS = 2 + +wxCAL_NO_YEAR_CHANGE :: Int +wxCAL_NO_YEAR_CHANGE = 4 + +wxCAL_NO_MONTH_CHANGE :: Int +wxCAL_NO_MONTH_CHANGE = 12 + +wxICON_EXCLAMATION :: Int +wxICON_EXCLAMATION = 256 + +wxICON_HAND :: Int +wxICON_HAND = 512 + +wxICON_QUESTION :: Int +wxICON_QUESTION = 1024 + +wxICON_INFORMATION :: Int +wxICON_INFORMATION = 2048 + +wxFORWARD :: Int +wxFORWARD = 4096 + +wxBACKWARD :: Int +wxBACKWARD = 8192 + +wxRESET :: Int +wxRESET = 16384 + +wxHELP :: Int +wxHELP = 32768 + +wxMORE :: Int +wxMORE = 65536 + +wxSETUP :: Int +wxSETUP = 131072 + +wxID_LOWEST :: Int +wxID_LOWEST = 4999 + +wxID_OPEN :: Int +wxID_OPEN = 5000 + +wxID_CLOSE :: Int +wxID_CLOSE = 5001 + +wxID_NEW :: Int +wxID_NEW = 5002 + +wxID_SAVE :: Int +wxID_SAVE = 5003 + +wxID_SAVEAS :: Int +wxID_SAVEAS = 5004 + +wxID_REVERT :: Int +wxID_REVERT = 5005 + +wxID_EXIT :: Int +wxID_EXIT = 5006 + +wxID_UNDO :: Int +wxID_UNDO = 5007 + +wxID_REDO :: Int +wxID_REDO = 5008 + +wxID_HELP :: Int +wxID_HELP = 5009 + +wxID_PRINT :: Int +wxID_PRINT = 5010 + +wxID_PRINT_SETUP :: Int +wxID_PRINT_SETUP = 5011 + +wxID_PREVIEW :: Int +wxID_PREVIEW = 5012 + +wxID_ABOUT :: Int +wxID_ABOUT = 5013 + +wxID_HELP_CONTENTS :: Int +wxID_HELP_CONTENTS = 5014 + +wxID_HELP_COMMANDS :: Int +wxID_HELP_COMMANDS = 5015 + +wxID_HELP_PROCEDURES :: Int +wxID_HELP_PROCEDURES = 5016 + +wxID_HELP_CONTEXT :: Int +wxID_HELP_CONTEXT = 5017 + +wxPG_DEFAULT_STYLE :: Int +wxPG_DEFAULT_STYLE = 0 + +wxID_CLOSE_ALL :: Int +wxID_CLOSE_ALL = 5018 + +wxID_PREFERENCES :: Int +wxID_PREFERENCES = 5019 + +wxID_EDIT :: Int +wxID_EDIT = 5030 + +wxID_CUT :: Int +wxID_CUT = 5031 + +wxID_COPY :: Int +wxID_COPY = 5032 + +wxID_PASTE :: Int +wxID_PASTE = 5033 + +wxID_CLEAR :: Int +wxID_CLEAR = 5034 + +wxID_FIND :: Int +wxID_FIND = 5035 + +wxID_DUPLICATE :: Int +wxID_DUPLICATE = 5036 + +wxID_SELECTALL :: Int +wxID_SELECTALL = 5037 + +wxID_DELETE :: Int +wxID_DELETE = 5038 + +wxID_REPLACE :: Int +wxID_REPLACE = 5039 + +wxID_REPLACE_ALL :: Int +wxID_REPLACE_ALL = 5040 + +wxID_PROPERTIES :: Int +wxID_PROPERTIES = 5041 + +wxID_VIEW_DETAILS :: Int +wxID_VIEW_DETAILS = 5042 + +wxID_VIEW_LARGEICONS :: Int +wxID_VIEW_LARGEICONS = 5043 + +wxID_VIEW_SMALLICONS :: Int +wxID_VIEW_SMALLICONS = 5044 + +wxID_VIEW_LIST :: Int +wxID_VIEW_LIST = 5045 + +wxID_VIEW_SORTDATE :: Int +wxID_VIEW_SORTDATE = 5046 + +wxID_VIEW_SORTNAME :: Int +wxID_VIEW_SORTNAME = 5047 + +wxID_VIEW_SORTSIZE :: Int +wxID_VIEW_SORTSIZE = 5048 + +wxID_VIEW_SORTTYPE :: Int +wxID_VIEW_SORTTYPE = 5049 + +wxID_FILE1 :: Int +wxID_FILE1 = 5050 + +wxID_FILE2 :: Int +wxID_FILE2 = 5051 + +wxID_FILE3 :: Int +wxID_FILE3 = 5052 + +wxID_FILE4 :: Int +wxID_FILE4 = 5053 + +wxID_FILE5 :: Int +wxID_FILE5 = 5054 + +wxID_FILE6 :: Int +wxID_FILE6 = 5055 + +wxID_FILE7 :: Int +wxID_FILE7 = 5056 + +wxID_FILE8 :: Int +wxID_FILE8 = 5057 + +wxID_FILE9 :: Int +wxID_FILE9 = 5058 + +wxID_OK :: Int +wxID_OK = 5100 + +wxID_CANCEL :: Int +wxID_CANCEL = 5101 + +wxID_APPLY :: Int +wxID_APPLY = 5102 + +wxID_YES :: Int +wxID_YES = 5103 + +wxID_NO :: Int +wxID_NO = 5104 + +wxID_STATIC :: Int +wxID_STATIC = 5105 + +wxID_FORWARD :: Int +wxID_FORWARD = 5106 + +wxID_BACKWARD :: Int +wxID_BACKWARD = 5107 + +wxID_DEFAULT :: Int +wxID_DEFAULT = 5108 + +wxID_MORE :: Int +wxID_MORE = 5109 + +wxID_SETUP :: Int +wxID_SETUP = 5110 + +wxID_RESET :: Int +wxID_RESET = 5111 + +wxID_FILEDLGG :: Int +wxID_FILEDLGG = 5900 + +wxID_HIGHEST :: Int +wxID_HIGHEST = 5999 + +wxSIZE_AUTO_WIDTH :: Int +wxSIZE_AUTO_WIDTH = 1 + +wxSIZE_AUTO_HEIGHT :: Int +wxSIZE_AUTO_HEIGHT = 2 + +wxSIZE_USE_EXISTING :: Int +wxSIZE_USE_EXISTING = 0 + +wxSIZE_ALLOW_MINUS_ONE :: Int +wxSIZE_ALLOW_MINUS_ONE = 4 + +wxSIZE_NO_ADJUSTMENTS :: Int +wxSIZE_NO_ADJUSTMENTS = 8 + +wxSOLID :: Int +wxSOLID = 100 +{-# DEPRECATED wxSOLID "Don't use this" #-} + +wxDOT :: Int +wxDOT = 101 +{-# DEPRECATED wxDOT "Don't use this" #-} + +wxLONG_DASH :: Int +wxLONG_DASH = 102 +{-# DEPRECATED wxLONG_DASH "Don't use this" #-} + +wxSHORT_DASH :: Int +wxSHORT_DASH = 103 +{-# DEPRECATED wxSHORT_DASH "Don't use this" #-} + +wxDOT_DASH :: Int +wxDOT_DASH = 104 +{-# DEPRECATED wxDOT_DASH "Don't use this" #-} + +wxUSER_DASH :: Int +wxUSER_DASH = 105 +{-# DEPRECATED wxUSER_DASH "Don't use this" #-} + +wxTRANSPARENT :: Int +wxTRANSPARENT = 106 +{-# DEPRECATED wxTRANSPARENT "Don't use this" #-} + +wxSTIPPLE_MASK_OPAQUE :: Int +wxSTIPPLE_MASK_OPAQUE = 107 +{-# DEPRECATED wxSTIPPLE_MASK_OPAQUE "Don't use this" #-} + +wxSTIPPLE_MASK :: Int +wxSTIPPLE_MASK = 108 +{-# DEPRECATED wxSTIPPLE_MASK "Don't use this" #-} + +wxSTIPPLE :: Int +wxSTIPPLE = 110 +{-# DEPRECATED wxSTIPPLE "Don't use this" #-} + +wxBDIAGONAL_HATCH :: Int +wxBDIAGONAL_HATCH = 111 +{-# DEPRECATED wxBDIAGONAL_HATCH "Don't use this" #-} + +wxCROSSDIAG_HATCH :: Int +wxCROSSDIAG_HATCH = 112 +{-# DEPRECATED wxCROSSDIAG_HATCH "Don't use this" #-} + +wxFDIAGONAL_HATCH :: Int +wxFDIAGONAL_HATCH = 113 +{-# DEPRECATED wxFDIAGONAL_HATCH "Don't use this" #-} + +wxCROSS_HATCH :: Int +wxCROSS_HATCH = 114 +{-# DEPRECATED wxCROSS_HATCH "Don't use this" #-} + +wxHORIZONTAL_HATCH :: Int +wxHORIZONTAL_HATCH = 115 +{-# DEPRECATED wxHORIZONTAL_HATCH "Don't use this" #-} + +wxVERTICAL_HATCH :: Int +wxVERTICAL_HATCH = 116 +{-# DEPRECATED wxVERTICAL_HATCH "Don't use this" #-} + + +wxCLEAR :: Int +wxCLEAR = 0 + +wxXOR :: Int +wxXOR = 1 + +wxINVERT :: Int +wxINVERT = 2 + +wxOR_REVERSE :: Int +wxOR_REVERSE = 3 + +wxAND_REVERSE :: Int +wxAND_REVERSE = 4 + +wxCOPY :: Int +wxCOPY = 5 + +wxAND :: Int +wxAND = 6 + +wxAND_INVERT :: Int +wxAND_INVERT = 7 + +wxNO_OP :: Int +wxNO_OP = 8 + +wxNOR :: Int +wxNOR = 9 + +wxEQUIV :: Int +wxEQUIV = 10 + +wxSRC_INVERT :: Int +wxSRC_INVERT = 11 + +wxOR_INVERT :: Int +wxOR_INVERT = 12 + +wxNAND :: Int +wxNAND = 13 + +wxOR :: Int +wxOR = 14 + +wxSET :: Int +wxSET = 15 + +wxFLOOD_SURFACE :: Int +wxFLOOD_SURFACE = 1 + +wxFLOOD_BORDER :: Int +wxFLOOD_BORDER = 2 + +wxODDEVEN_RULE :: Int +wxODDEVEN_RULE = 1 + +wxWINDING_RULE :: Int +wxWINDING_RULE = 2 + +wxTOOL_TOP :: Int +wxTOOL_TOP = 1 + +wxTOOL_BOTTOM :: Int +wxTOOL_BOTTOM = 2 + +wxTOOL_LEFT :: Int +wxTOOL_LEFT = 3 + +wxTOOL_RIGHT :: Int +wxTOOL_RIGHT = 4 + +-- enum wxDataFormatId +-- the values of the format constants should be the same as corresponding +-- CF_XXX constants in Windows API + +wxDF_INVALID :: Int +wxDF_INVALID = 0 + +wxDF_TEXT :: Int +wxDF_TEXT = 1 -- CF_TEXT + +wxDF_BITMAP :: Int +wxDF_BITMAP = 2 -- CF_BITMAP + +wxDF_METAFILE :: Int +wxDF_METAFILE = 3 -- CF_METAFILEPICT + +wxDF_SYLK :: Int +wxDF_SYLK = 4 + +wxDF_DIF :: Int +wxDF_DIF = 5 + +wxDF_TIFF :: Int +wxDF_TIFF = 6 + +wxDF_OEMTEXT :: Int +wxDF_OEMTEXT = 7 -- CF_OEMTEXT + +wxDF_DIB :: Int +wxDF_DIB = 8 -- CF_DIB + +wxDF_PALETTE :: Int +wxDF_PALETTE = 9 + +wxDF_PENDATA :: Int +wxDF_PENDATA = 10 + +wxDF_RIFF :: Int +wxDF_RIFF = 11 + +wxDF_WAVE :: Int +wxDF_WAVE = 12 + +wxDF_UNICODETEXT :: Int +wxDF_UNICODETEXT = 13 + +wxDF_ENHMETAFILE :: Int +wxDF_ENHMETAFILE = 14 + +wxDF_FILENAME :: Int +wxDF_FILENAME = 15 -- CF_HDROP + +wxDF_LOCALE :: Int +wxDF_LOCALE = 16 + +wxDF_PRIVATE :: Int +wxDF_PRIVATE = 20 + +wxDF_HTML :: Int +wxDF_HTML = 30 -- Note: does not correspond to CF_ constant + +wxDF_MAX :: Int +wxDF_MAX = 31 + +-- End enum wxDataFormatId + + +wxMM_TEXT :: Int +wxMM_TEXT = 1 + +wxMM_LOMETRIC :: Int +wxMM_LOMETRIC = 2 + +wxMM_HIMETRIC :: Int +wxMM_HIMETRIC = 3 + +wxMM_LOENGLISH :: Int +wxMM_LOENGLISH = 4 + +wxMM_HIENGLISH :: Int +wxMM_HIENGLISH = 5 + +wxMM_TWIPS :: Int +wxMM_TWIPS = 6 + +wxMM_ISOTROPIC :: Int +wxMM_ISOTROPIC = 7 + +wxMM_ANISOTROPIC :: Int +wxMM_ANISOTROPIC = 8 + +wxMM_POINTS :: Int +wxMM_POINTS = 9 + +wxMM_METRIC :: Int +wxMM_METRIC = 10 + +wxPAPER_NONE :: Int +wxPAPER_NONE = 0 + +wxPAPER_LETTER :: Int +wxPAPER_LETTER = 1 + +wxPAPER_LEGAL :: Int +wxPAPER_LEGAL = 2 + +wxPAPER_A4 :: Int +wxPAPER_A4 = 3 + +wxPAPER_CSHEET :: Int +wxPAPER_CSHEET = 4 + +wxPAPER_DSHEET :: Int +wxPAPER_DSHEET = 5 + +wxPAPER_ESHEET :: Int +wxPAPER_ESHEET = 6 + +wxPAPER_LETTERSMALL :: Int +wxPAPER_LETTERSMALL = 7 + +wxPAPER_TABLOID :: Int +wxPAPER_TABLOID = 8 + +wxPAPER_LEDGER :: Int +wxPAPER_LEDGER = 9 + +wxPAPER_STATEMENT :: Int +wxPAPER_STATEMENT = 10 + +wxPAPER_EXECUTIVE :: Int +wxPAPER_EXECUTIVE = 11 + +wxPAPER_A3 :: Int +wxPAPER_A3 = 12 + +wxPAPER_A4SMALL :: Int +wxPAPER_A4SMALL = 13 + +wxPAPER_A5 :: Int +wxPAPER_A5 = 14 + +wxPAPER_B4 :: Int +wxPAPER_B4 = 15 + +wxPAPER_B5 :: Int +wxPAPER_B5 = 16 + +wxPAPER_FOLIO :: Int +wxPAPER_FOLIO = 17 + +wxPAPER_QUARTO :: Int +wxPAPER_QUARTO = 18 + +wxPAPER_10X14 :: Int +wxPAPER_10X14 = 19 + +wxPAPER_11X17 :: Int +wxPAPER_11X17 = 20 + +wxPAPER_NOTE :: Int +wxPAPER_NOTE = 21 + +wxPAPER_ENV_9 :: Int +wxPAPER_ENV_9 = 22 + +wxPAPER_ENV_10 :: Int +wxPAPER_ENV_10 = 23 + +wxPAPER_ENV_11 :: Int +wxPAPER_ENV_11 = 24 + +wxPAPER_ENV_12 :: Int +wxPAPER_ENV_12 = 25 + +wxPAPER_ENV_14 :: Int +wxPAPER_ENV_14 = 26 + +wxPAPER_ENV_DL :: Int +wxPAPER_ENV_DL = 27 + +wxPAPER_ENV_C5 :: Int +wxPAPER_ENV_C5 = 28 + +wxPAPER_ENV_C3 :: Int +wxPAPER_ENV_C3 = 29 + +wxPAPER_ENV_C4 :: Int +wxPAPER_ENV_C4 = 30 + +wxPAPER_ENV_C6 :: Int +wxPAPER_ENV_C6 = 31 + +wxPAPER_ENV_C65 :: Int +wxPAPER_ENV_C65 = 32 + +wxPAPER_ENV_B4 :: Int +wxPAPER_ENV_B4 = 33 + +wxPAPER_ENV_B5 :: Int +wxPAPER_ENV_B5 = 34 + +wxPAPER_ENV_B6 :: Int +wxPAPER_ENV_B6 = 35 + +wxPAPER_ENV_ITALY :: Int +wxPAPER_ENV_ITALY = 36 + +wxPAPER_ENV_MONARCH :: Int +wxPAPER_ENV_MONARCH = 37 + +wxPAPER_ENV_PERSONAL :: Int +wxPAPER_ENV_PERSONAL = 38 + +wxPAPER_FANFOLD_US :: Int +wxPAPER_FANFOLD_US = 39 + +wxPAPER_FANFOLD_STD_GERMAN :: Int +wxPAPER_FANFOLD_STD_GERMAN = 40 + +wxPAPER_FANFOLD_LGL_GERMAN :: Int +wxPAPER_FANFOLD_LGL_GERMAN = 41 + +wxPAPER_ISO_B4 :: Int +wxPAPER_ISO_B4 = 42 + +wxPAPER_JAPANESE_POSTCARD :: Int +wxPAPER_JAPANESE_POSTCARD = 43 + +wxPAPER_9X11 :: Int +wxPAPER_9X11 = 44 + +wxPAPER_10X11 :: Int +wxPAPER_10X11 = 45 + +wxPAPER_15X11 :: Int +wxPAPER_15X11 = 46 + +wxPAPER_ENV_INVITE :: Int +wxPAPER_ENV_INVITE = 47 + +wxPAPER_LETTER_EXTRA :: Int +wxPAPER_LETTER_EXTRA = 48 + +wxPAPER_LEGAL_EXTRA :: Int +wxPAPER_LEGAL_EXTRA = 49 + +wxPAPER_TABLOID_EXTRA :: Int +wxPAPER_TABLOID_EXTRA = 50 + +wxPAPER_A4_EXTRA :: Int +wxPAPER_A4_EXTRA = 51 + +wxPAPER_LETTER_TRANSVERSE :: Int +wxPAPER_LETTER_TRANSVERSE = 52 + +wxPAPER_A4_TRANSVERSE :: Int +wxPAPER_A4_TRANSVERSE = 53 + +wxPAPER_LETTER_EXTRA_TRANSVERSE :: Int +wxPAPER_LETTER_EXTRA_TRANSVERSE = 54 + +wxPAPER_A_PLUS :: Int +wxPAPER_A_PLUS = 55 + +wxPAPER_B_PLUS :: Int +wxPAPER_B_PLUS = 56 + +wxPAPER_LETTER_PLUS :: Int +wxPAPER_LETTER_PLUS = 57 + +wxPAPER_A4_PLUS :: Int +wxPAPER_A4_PLUS = 58 + +wxPAPER_A5_TRANSVERSE :: Int +wxPAPER_A5_TRANSVERSE = 59 + +wxPAPER_B5_TRANSVERSE :: Int +wxPAPER_B5_TRANSVERSE = 60 + +wxPAPER_A3_EXTRA :: Int +wxPAPER_A3_EXTRA = 61 + +wxPAPER_A5_EXTRA :: Int +wxPAPER_A5_EXTRA = 62 + +wxPAPER_B5_EXTRA :: Int +wxPAPER_B5_EXTRA = 63 + +wxPAPER_A2 :: Int +wxPAPER_A2 = 64 + +wxPAPER_A3_TRANSVERSE :: Int +wxPAPER_A3_TRANSVERSE = 65 + +wxPAPER_A3_EXTRA_TRANSVERSE :: Int +wxPAPER_A3_EXTRA_TRANSVERSE = 66 + +wxPORTRAIT :: Int +wxPORTRAIT = 1 + +wxLANDSCAPE :: Int +wxLANDSCAPE = 2 + +wxDUPLEX_SIMPLEX :: Int +wxDUPLEX_SIMPLEX = 0 + +wxDUPLEX_HORIZONTAL :: Int +wxDUPLEX_HORIZONTAL = 1 + +wxDUPLEX_VERTICAL :: Int +wxDUPLEX_VERTICAL = 2 + +wxPRINT_MODE_NONE :: Int +wxPRINT_MODE_NONE = 0 + +wxPRINT_MODE_PREVIEW :: Int +wxPRINT_MODE_PREVIEW = 1 + +wxPRINT_MODE_FILE :: Int +wxPRINT_MODE_FILE = 2 + +wxPRINT_MODE_PRINTER :: Int +wxPRINT_MODE_PRINTER = 3 + +wxFULLSCREEN_NOMENUBAR :: Int +wxFULLSCREEN_NOMENUBAR = 1 + +wxFULLSCREEN_NOTOOLBAR :: Int +wxFULLSCREEN_NOTOOLBAR = 2 + +wxFULLSCREEN_NOSTATUSBAR :: Int +wxFULLSCREEN_NOSTATUSBAR = 4 + +wxFULLSCREEN_NOBORDER :: Int +wxFULLSCREEN_NOBORDER = 8 + +wxFULLSCREEN_NOCAPTION :: Int +wxFULLSCREEN_NOCAPTION = 16 + +wxLAYOUT_DEFAULT_MARGIN :: Int +wxLAYOUT_DEFAULT_MARGIN = 0 + +wxEDGE_LEFT :: Int +wxEDGE_LEFT = 0 + +wxEDGE_TOP :: Int +wxEDGE_TOP = 1 + +wxEDGE_RIGHT :: Int +wxEDGE_RIGHT = 2 + +wxEDGE_BOTTOM :: Int +wxEDGE_BOTTOM = 3 + +wxEDGE_WIDTH :: Int +wxEDGE_WIDTH = 4 + +wxEDGE_HEIGHT :: Int +wxEDGE_HEIGHT = 5 + +wxEDGE_CENTER :: Int +wxEDGE_CENTER = 6 + +wxEDGE_CENTREX :: Int +wxEDGE_CENTREX = 7 + +wxEDGE_CENTREY :: Int +wxEDGE_CENTREY = 8 + +wxRELATIONSHIP_UNCONSTRAINED :: Int +wxRELATIONSHIP_UNCONSTRAINED = 0 + +wxRELATIONSHIP_ASIS :: Int +wxRELATIONSHIP_ASIS = 1 + +wxRELATIONSHIP_PERCENTOF :: Int +wxRELATIONSHIP_PERCENTOF = 2 + +wxRELATIONSHIP_ABOVE :: Int +wxRELATIONSHIP_ABOVE = 3 + +wxRELATIONSHIP_BELOW :: Int +wxRELATIONSHIP_BELOW = 4 + +wxRELATIONSHIP_LEFTOF :: Int +wxRELATIONSHIP_LEFTOF = 5 + +wxRELATIONSHIP_RIGHTOF :: Int +wxRELATIONSHIP_RIGHTOF = 6 + +wxRELATIONSHIP_SAMEAS :: Int +wxRELATIONSHIP_SAMEAS = 7 + +wxRELATIONSHIP_ABSOLUTE :: Int +wxRELATIONSHIP_ABSOLUTE = 8 + +wxFONTENCODING_SYSTEM :: Int +wxFONTENCODING_SYSTEM = (-1) + +wxFONTENCODING_DEFAULT :: Int +wxFONTENCODING_DEFAULT = 0 + +wxFONTENCODING_ISO8859_1 :: Int +wxFONTENCODING_ISO8859_1 = 1 + +wxFONTENCODING_ISO8859_2 :: Int +wxFONTENCODING_ISO8859_2 = 2 + +wxFONTENCODING_ISO8859_3 :: Int +wxFONTENCODING_ISO8859_3 = 3 + +wxFONTENCODING_ISO8859_4 :: Int +wxFONTENCODING_ISO8859_4 = 4 + +wxFONTENCODING_ISO8859_5 :: Int +wxFONTENCODING_ISO8859_5 = 5 + +wxFONTENCODING_ISO8859_6 :: Int +wxFONTENCODING_ISO8859_6 = 6 + +wxFONTENCODING_ISO8859_7 :: Int +wxFONTENCODING_ISO8859_7 = 7 + +wxFONTENCODING_ISO8859_8 :: Int +wxFONTENCODING_ISO8859_8 = 8 + +wxFONTENCODING_ISO8859_9 :: Int +wxFONTENCODING_ISO8859_9 = 9 + +wxFONTENCODING_ISO8859_10 :: Int +wxFONTENCODING_ISO8859_10 = 10 + +wxFONTENCODING_ISO8859_11 :: Int +wxFONTENCODING_ISO8859_11 = 11 + +wxFONTENCODING_ISO8859_12 :: Int +wxFONTENCODING_ISO8859_12 = 12 + +wxFONTENCODING_ISO8859_13 :: Int +wxFONTENCODING_ISO8859_13 = 13 + +wxFONTENCODING_ISO8859_14 :: Int +wxFONTENCODING_ISO8859_14 = 14 + +wxFONTENCODING_ISO8859_15 :: Int +wxFONTENCODING_ISO8859_15 = 15 + +wxFONTENCODING_ISO8859_MAX :: Int +wxFONTENCODING_ISO8859_MAX = 16 + +wxFONTENCODING_KOI8 :: Int +wxFONTENCODING_KOI8 = 17 + +wxFONTENCODING_ALTERNATIVE :: Int +wxFONTENCODING_ALTERNATIVE = 18 + +wxFONTENCODING_BULGARIAN :: Int +wxFONTENCODING_BULGARIAN = 19 + +wxFONTENCODING_CP437 :: Int +wxFONTENCODING_CP437 = 20 + +wxFONTENCODING_CP850 :: Int +wxFONTENCODING_CP850 = 21 + +wxFONTENCODING_CP852 :: Int +wxFONTENCODING_CP852 = 22 + +wxFONTENCODING_CP855 :: Int +wxFONTENCODING_CP855 = 23 + +wxFONTENCODING_CP866 :: Int +wxFONTENCODING_CP866 = 24 + +wxFONTENCODING_CP874 :: Int +wxFONTENCODING_CP874 = 25 + +wxFONTENCODING_CP1250 :: Int +wxFONTENCODING_CP1250 = 26 + +wxFONTENCODING_CP1251 :: Int +wxFONTENCODING_CP1251 = 27 + +wxFONTENCODING_CP1252 :: Int +wxFONTENCODING_CP1252 = 28 + +wxFONTENCODING_CP1253 :: Int +wxFONTENCODING_CP1253 = 29 + +wxFONTENCODING_CP1254 :: Int +wxFONTENCODING_CP1254 = 30 + +wxFONTENCODING_CP1255 :: Int +wxFONTENCODING_CP1255 = 31 + +wxFONTENCODING_CP1256 :: Int +wxFONTENCODING_CP1256 = 32 + +wxFONTENCODING_CP1257 :: Int +wxFONTENCODING_CP1257 = 33 + +wxFONTENCODING_CP12_MAX :: Int +wxFONTENCODING_CP12_MAX = 34 + +wxFONTENCODING_UNICODE :: Int +wxFONTENCODING_UNICODE = 35 + +wxFONTENCODING_MAX :: Int +wxFONTENCODING_MAX = 36 + +wxGRIDTABLE_REQUEST_VIEW_GET_VALUES :: Int +wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000 + +wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES :: Int +wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES = 2001 + +wxGRIDTABLE_NOTIFY_ROWS_INSERTED :: Int +wxGRIDTABLE_NOTIFY_ROWS_INSERTED = 2002 + +wxGRIDTABLE_NOTIFY_ROWS_APPENDED :: Int +wxGRIDTABLE_NOTIFY_ROWS_APPENDED = 2003 + +wxGRIDTABLE_NOTIFY_ROWS_DELETED :: Int +wxGRIDTABLE_NOTIFY_ROWS_DELETED = 2004 + +wxGRIDTABLE_NOTIFY_COLS_INSERTED :: Int +wxGRIDTABLE_NOTIFY_COLS_INSERTED = 2005 + +wxGRIDTABLE_NOTIFY_COLS_APPENDED :: Int +wxGRIDTABLE_NOTIFY_COLS_APPENDED = 2006 + +wxGRIDTABLE_NOTIFY_COLS_DELETED :: Int +wxGRIDTABLE_NOTIFY_COLS_DELETED = 2007 + +wxGridSelectCells :: Int +wxGridSelectCells = 0 + +wxGridSelectRows :: Int +wxGridSelectRows = 1 + +wxGridSelectColumns :: Int +wxGridSelectColumns = 2 + +wxFILTER_NONE :: Int +wxFILTER_NONE = 0 + +wxFILTER_ASCII :: Int +wxFILTER_ASCII = 1 + +wxFILTER_ALPHA :: Int +wxFILTER_ALPHA = 2 + +wxFILTER_ALPHANUMERIC :: Int +wxFILTER_ALPHANUMERIC = 4 + +wxFILTER_NUMERIC :: Int +wxFILTER_NUMERIC = 8 + +wxFILTER_INCLUDE_LIST :: Int +wxFILTER_INCLUDE_LIST = 16 + +wxFILTER_EXCLUDE_LIST :: Int +wxFILTER_EXCLUDE_LIST = 32 + +wxFILTER_UPPER_CASE :: Int +wxFILTER_UPPER_CASE = 64 + +wxFILTER_LOWER_CASE :: Int +wxFILTER_LOWER_CASE = 128 + +wxBITMAP_TYPE_INVALID :: Int +wxBITMAP_TYPE_INVALID = 0 + +wxBITMAP_TYPE_BMP :: Int +wxBITMAP_TYPE_BMP = 1 + +wxBITMAP_TYPE_BMP_RESOURCE :: Int +wxBITMAP_TYPE_BMP_RESOURCE = 2 + +wxBITMAP_TYPE_RESOURCE :: Int +wxBITMAP_TYPE_RESOURCE = 2 + +wxBITMAP_TYPE_ICO :: Int +wxBITMAP_TYPE_ICO = 3 + +wxBITMAP_TYPE_ICO_RESOURCE :: Int +wxBITMAP_TYPE_ICO_RESOURCE = 4 + +wxBITMAP_TYPE_CUR :: Int +wxBITMAP_TYPE_CUR = 5 + +wxBITMAP_TYPE_CUR_RESOURCE :: Int +wxBITMAP_TYPE_CUR_RESOURCE = 6 + +wxBITMAP_TYPE_XBM :: Int +wxBITMAP_TYPE_XBM = 7 + +wxBITMAP_TYPE_XBM_DATA :: Int +wxBITMAP_TYPE_XBM_DATA = 8 + +wxBITMAP_TYPE_XPM :: Int +wxBITMAP_TYPE_XPM = 9 + +wxBITMAP_TYPE_XPM_DATA :: Int +wxBITMAP_TYPE_XPM_DATA = 10 + +wxBITMAP_TYPE_TIF :: Int +wxBITMAP_TYPE_TIF = 11 + +wxBITMAP_TYPE_TIF_RESOURCE :: Int +wxBITMAP_TYPE_TIF_RESOURCE = 12 + +wxBITMAP_TYPE_GIF :: Int +wxBITMAP_TYPE_GIF = 13 + +wxBITMAP_TYPE_GIF_RESOURCE :: Int +wxBITMAP_TYPE_GIF_RESOURCE = 14 + +wxBITMAP_TYPE_PNG :: Int +wxBITMAP_TYPE_PNG = 15 + +wxBITMAP_TYPE_PNG_RESOURCE :: Int +wxBITMAP_TYPE_PNG_RESOURCE = 16 + +wxBITMAP_TYPE_JPEG :: Int +wxBITMAP_TYPE_JPEG = 17 + +wxBITMAP_TYPE_JPEG_RESOURCE :: Int +wxBITMAP_TYPE_JPEG_RESOURCE = 18 + +wxBITMAP_TYPE_PNM :: Int +wxBITMAP_TYPE_PNM = 19 + +wxBITMAP_TYPE_PNM_RESOURCE :: Int +wxBITMAP_TYPE_PNM_RESOURCE = 20 + +wxBITMAP_TYPE_PCX :: Int +wxBITMAP_TYPE_PCX = 21 + +wxBITMAP_TYPE_PCX_RESOURCE :: Int +wxBITMAP_TYPE_PCX_RESOURCE = 22 + +wxBITMAP_TYPE_PICT :: Int +wxBITMAP_TYPE_PICT = 23 + +wxBITMAP_TYPE_PICT_RESOURCE :: Int +wxBITMAP_TYPE_PICT_RESOURCE = 24 + +wxBITMAP_TYPE_ICON :: Int +wxBITMAP_TYPE_ICON = 25 + +wxBITMAP_TYPE_ICON_RESOURCE :: Int +wxBITMAP_TYPE_ICON_RESOURCE = 26 + +wxBITMAP_TYPE_MACCURSOR :: Int +wxBITMAP_TYPE_MACCURSOR = 27 + +wxBITMAP_TYPE_MACCURSOR_RESOURCE :: Int +wxBITMAP_TYPE_MACCURSOR_RESOURCE = 28 + +wxBITMAP_TYPE_ANY :: Int +wxBITMAP_TYPE_ANY = 50 + +wxCURSOR_NONE :: Int +wxCURSOR_NONE = 0 + +wxCURSOR_ARROW :: Int +wxCURSOR_ARROW = 1 + +wxCURSOR_RIGHT_ARROW :: Int +wxCURSOR_RIGHT_ARROW = 2 + +wxCURSOR_BULLSEYE :: Int +wxCURSOR_BULLSEYE = 3 + +wxCURSOR_CHAR :: Int +wxCURSOR_CHAR = 4 + +wxCURSOR_CROSS :: Int +wxCURSOR_CROSS = 5 + +wxCURSOR_HAND :: Int +wxCURSOR_HAND = 6 + +wxCURSOR_IBEAM :: Int +wxCURSOR_IBEAM = 7 + +wxCURSOR_LEFT_BUTTON :: Int +wxCURSOR_LEFT_BUTTON = 8 + +wxCURSOR_MAGNIFIER :: Int +wxCURSOR_MAGNIFIER = 9 + +wxCURSOR_MIDDLE_BUTTON :: Int +wxCURSOR_MIDDLE_BUTTON = 10 + +wxCURSOR_NO_ENTRY :: Int +wxCURSOR_NO_ENTRY = 11 + +wxCURSOR_PAINT_BRUSH :: Int +wxCURSOR_PAINT_BRUSH = 12 + +wxCURSOR_PENCIL :: Int +wxCURSOR_PENCIL = 13 + +wxCURSOR_POINT_LEFT :: Int +wxCURSOR_POINT_LEFT = 14 + +wxCURSOR_POINT_RIGHT :: Int +wxCURSOR_POINT_RIGHT = 15 + +wxCURSOR_QUESTION_ARROW :: Int +wxCURSOR_QUESTION_ARROW = 16 + +wxCURSOR_RIGHT_BUTTON :: Int +wxCURSOR_RIGHT_BUTTON = 17 + +wxCURSOR_SIZENESW :: Int +wxCURSOR_SIZENESW = 18 + +wxCURSOR_SIZENS :: Int +wxCURSOR_SIZENS = 19 + +wxCURSOR_SIZENWSE :: Int +wxCURSOR_SIZENWSE = 20 + +wxCURSOR_SIZEWE :: Int +wxCURSOR_SIZEWE = 21 + +wxCURSOR_SIZING :: Int +wxCURSOR_SIZING = 22 + +wxCURSOR_SPRAYCAN :: Int +wxCURSOR_SPRAYCAN = 23 + +wxCURSOR_WAIT :: Int +wxCURSOR_WAIT = 24 + +wxCURSOR_WATCH :: Int +wxCURSOR_WATCH = 25 + +wxCURSOR_BLANK :: Int +wxCURSOR_BLANK = 26 + +wxOPEN :: Int +wxOPEN = 1 + +wxSAVE :: Int +wxSAVE = 2 + +wxOVERWRITE_PROMPT :: Int +wxOVERWRITE_PROMPT = 4 + +wxHIDE_READONLY :: Int +wxHIDE_READONLY = 8 + +wxFILE_MUST_EXIST :: Int +wxFILE_MUST_EXIST = 16 + +wxMULTIPLE :: Int +wxMULTIPLE = 32 + +wxCHANGE_DIR :: Int +wxCHANGE_DIR = 64 + +wxDRAG_ERROR :: Int +wxDRAG_ERROR = 0 + +wxDRAG_NONE :: Int +wxDRAG_NONE = 1 + +wxDRAG_COPY :: Int +wxDRAG_COPY = 2 + +wxDRAG_MOVE :: Int +wxDRAG_MOVE = 3 + +wxDRAG_LINK :: Int +wxDRAG_LINK = 4 + +wxDRAG_CANCEL :: Int +wxDRAG_CANCEL = 5 + +wxSPLIT_HORIZONTAL :: Int +wxSPLIT_HORIZONTAL = 1 + +wxSPLIT_VERTICAL :: Int +wxSPLIT_VERTICAL = 2 + +wxLIST_FORMAT_LEFT :: Int +wxLIST_FORMAT_LEFT = 0 + +wxLIST_FORMAT_RIGHT :: Int +wxLIST_FORMAT_RIGHT = 1 + +wxLIST_FORMAT_CENTRE :: Int +wxLIST_FORMAT_CENTRE = 2 + +wxLIST_FORMAT_CENTER :: Int +wxLIST_FORMAT_CENTER = 2 + +wxLIST_STATE_DONTCARE :: Int +wxLIST_STATE_DONTCARE = 0 + +wxLIST_STATE_DROPHILITED :: Int +wxLIST_STATE_DROPHILITED = 1 + +wxLIST_STATE_FOCUSED :: Int +wxLIST_STATE_FOCUSED = 2 + +wxLIST_STATE_SELECTED :: Int +wxLIST_STATE_SELECTED = 4 + +wxLIST_STATE_CUT :: Int +wxLIST_STATE_CUT = 8 + +wxLIST_MASK_STATE :: Int +wxLIST_MASK_STATE = 1 + +wxLIST_MASK_TEXT :: Int +wxLIST_MASK_TEXT = 2 + +wxLIST_MASK_IMAGE :: Int +wxLIST_MASK_IMAGE = 4 + +wxLIST_MASK_DATA :: Int +wxLIST_MASK_DATA = 8 + +wxLIST_MASK_WIDTH :: Int +wxLIST_MASK_WIDTH = 16 + +wxLIST_MASK_FORMAT :: Int +wxLIST_MASK_FORMAT = 32 + +wxLIST_NEXT_ABOVE :: Int +wxLIST_NEXT_ABOVE = 0 + +wxLIST_NEXT_ALL :: Int +wxLIST_NEXT_ALL = 1 + +wxLIST_NEXT_BELOW :: Int +wxLIST_NEXT_BELOW = 2 + +wxLIST_NEXT_LEFT :: Int +wxLIST_NEXT_LEFT = 3 + +wxLIST_NEXT_RIGHT :: Int +wxLIST_NEXT_RIGHT = 4 + +wxRA_SPECIFY_COLS :: Int +wxRA_SPECIFY_COLS = 4 + +wxRA_SPECIFY_ROWS :: Int +wxRA_SPECIFY_ROWS = 8 + +wxTREE_HITTEST_ABOVE :: Int +wxTREE_HITTEST_ABOVE = 1 + +wxTREE_HITTEST_BELOW :: Int +wxTREE_HITTEST_BELOW = 2 + +wxTREE_HITTEST_NOWHERE :: Int +wxTREE_HITTEST_NOWHERE = 4 + +wxTREE_HITTEST_ONITEMBUTTON :: Int +wxTREE_HITTEST_ONITEMBUTTON = 8 + +wxTREE_HITTEST_ONITEMICON :: Int +wxTREE_HITTEST_ONITEMICON = 16 + +wxTREE_HITTEST_ONITEMINDENT :: Int +wxTREE_HITTEST_ONITEMINDENT = 32 + +wxTREE_HITTEST_ONITEMLABEL :: Int +wxTREE_HITTEST_ONITEMLABEL = 64 + +wxTREE_HITTEST_ONITEMRIGHT :: Int +wxTREE_HITTEST_ONITEMRIGHT = 128 + +wxTREE_HITTEST_ONITEMSTATEICON :: Int +wxTREE_HITTEST_ONITEMSTATEICON = 256 + +wxTREE_HITTEST_TOLEFT :: Int +wxTREE_HITTEST_TOLEFT = 512 + +wxTREE_HITTEST_TORIGHT :: Int +wxTREE_HITTEST_TORIGHT = 1024 + +wxTREE_HITTEST_ONITEMUPPERPART :: Int +wxTREE_HITTEST_ONITEMUPPERPART = 2048 + +wxTREE_HITTEST_ONITEMLOWERPART :: Int +wxTREE_HITTEST_ONITEMLOWERPART = 4096 + +wxTREE_HITTEST_ONITEM :: Int +wxTREE_HITTEST_ONITEM = 80 + +wxDEFAULT :: Int +wxDEFAULT = 70 +{-# DEPRECATED wxDEFAULT "Don't use this" #-} + +wxDECORATIVE :: Int +wxDECORATIVE = 71 +{-# DEPRECATED wxDECORATIVE "Don't use this" #-} + +wxROMAN :: Int +wxROMAN = 72 +{-# DEPRECATED wxROMAN "Don't use this" #-} + +wxSCRIPT :: Int +wxSCRIPT = 73 +{-# DEPRECATED wxSCRIPT "Don't use this" #-} + +wxSWISS :: Int +wxSWISS = 74 +{-# DEPRECATED wxSWISS "Don't use this" #-} + +wxMODERN :: Int +wxMODERN = 75 +{-# DEPRECATED wxMODERN "Don't use this" #-} + +wxTELETYPE :: Int +wxTELETYPE = 76 +{-# DEPRECATED wxTELETYPE "Don't use this" #-} + +wxVARIABLE :: Int +wxVARIABLE = 80 +{-# DEPRECATED wxVARIABLE "Don't use this" #-} + +wxFIXED :: Int +wxFIXED = 81 +{-# DEPRECATED wxFIXED "Don't use this" #-} + +wxNORMAL :: Int +wxNORMAL = 90 +{-# DEPRECATED wxNORMAL "Don't use this" #-} + +wxLIGHT :: Int +wxLIGHT = 91 +{-# DEPRECATED wxLIGHT "Don't use this" #-} + +wxBOLD :: Int +wxBOLD = 92 +{-# DEPRECATED wxBOLD "Don't use this" #-} + +wxITALIC :: Int +wxITALIC = 93 +{-# DEPRECATED wxITALIC "Don't use this" #-} + +wxSLANT :: Int +wxSLANT = 94 +{-# DEPRECATED wxSLANT "Don't use this" #-} + +-- ---------------------------------------------------------------------------- +-- font constants +-- ---------------------------------------------------------------------------- + +-- standard font families: these may be used only for the font creation, it +-- doesn't make sense to query an existing font for its font family as, +-- especially if the font had been created from a native font description, it +-- may be unknown + +-- enum wxFontFamily +wxFONTFAMILY_DEFAULT :: Int +wxFONTFAMILY_DEFAULT = wxDEFAULT +wxFONTFAMILY_DECORATIVE :: Int +wxFONTFAMILY_DECORATIVE = wxDECORATIVE +wxFONTFAMILY_ROMAN :: Int +wxFONTFAMILY_ROMAN = wxROMAN +wxFONTFAMILY_SCRIPT :: Int +wxFONTFAMILY_SCRIPT = wxSCRIPT +wxFONTFAMILY_SWISS :: Int +wxFONTFAMILY_SWISS = wxSWISS +wxFONTFAMILY_MODERN :: Int +wxFONTFAMILY_MODERN = wxMODERN +wxFONTFAMILY_TELETYPE :: Int +wxFONTFAMILY_TELETYPE = wxTELETYPE +wxFONTFAMILY_MAX :: Int +wxFONTFAMILY_MAX = wxFONTFAMILY_TELETYPE + 1 +wxFONTFAMILY_UNKNOWN :: Int +wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX + +-- font styles +-- enum wxFontStyle +wxFONTSTYLE_NORMAL :: Int +wxFONTSTYLE_NORMAL = wxNORMAL +wxFONTSTYLE_ITALIC :: Int +wxFONTSTYLE_ITALIC = wxITALIC +wxFONTSTYLE_SLANT :: Int +wxFONTSTYLE_SLANT = wxSLANT +wxFONTSTYLE_MAX :: Int +wxFONTSTYLE_MAX = wxFONTSTYLE_SLANT + 1 + +-- font weights +-- enum wxFontWeight +wxFONTWEIGHT_NORMAL :: Int +wxFONTWEIGHT_NORMAL = wxNORMAL +wxFONTWEIGHT_LIGHT :: Int +wxFONTWEIGHT_LIGHT = wxLIGHT +wxFONTWEIGHT_BOLD :: Int +wxFONTWEIGHT_BOLD = wxBOLD +wxFONTWEIGHT_MAX :: Int +wxFONTWEIGHT_MAX = wxFONTWEIGHT_BOLD + 1 + +-- Symbolic font sizes as defined in CSS specification. +-- enum wxFontSymbolicSize +wxFONTSIZE_XX_SMALL :: Int +wxFONTSIZE_XX_SMALL = -3 +wxFONTSIZE_X_SMALL :: Int +wxFONTSIZE_X_SMALL = -2 +wxFONTSIZE_SMALL :: Int +wxFONTSIZE_SMALL = -1 +wxFONTSIZE_MEDIUM :: Int +wxFONTSIZE_MEDIUM = 0 +wxFONTSIZE_LARGE :: Int +wxFONTSIZE_LARGE = 1 +wxFONTSIZE_X_LARGE :: Int +wxFONTSIZE_X_LARGE = 2 +wxFONTSIZE_XX_LARGE :: Int +wxFONTSIZE_XX_LARGE = 3 + +-- the font flag bits for the new font ctor accepting one combined flags word +-- enum wxFontFlag +-- no special flags: font with default weight/slant/anti-aliasing +wxFONTFLAG_DEFAULT :: Int +wxFONTFLAG_DEFAULT = 0 + +-- slant flags (default: no slant) +wxFONTFLAG_ITALIC :: Int +wxFONTFLAG_ITALIC = 1 << 0 +wxFONTFLAG_SLANT :: Int +wxFONTFLAG_SLANT = 1 << 1 + +-- weight flags (default: medium) +wxFONTFLAG_LIGHT :: Int +wxFONTFLAG_LIGHT = 1 << 2 +wxFONTFLAG_BOLD :: Int +wxFONTFLAG_BOLD = 1 << 3 + +-- anti-aliasing flag: force on or off (default: the current system default) +wxFONTFLAG_ANTIALIASED :: Int +wxFONTFLAG_ANTIALIASED = 1 << 4 +wxFONTFLAG_NOT_ANTIALIASED :: Int +wxFONTFLAG_NOT_ANTIALIASED = 1 << 5 + +-- underlined/strikethrough flags (default: no lines) +wxFONTFLAG_UNDERLINED :: Int +wxFONTFLAG_UNDERLINED = 1 << 6 +wxFONTFLAG_STRIKETHROUGH :: Int +wxFONTFLAG_STRIKETHROUGH = 1 << 7 + +-- the mask of all currently used flags +wxFONTFLAG_MASK :: Int +wxFONTFLAG_MASK = wxFONTFLAG_ITALIC .|. + wxFONTFLAG_SLANT .|. + wxFONTFLAG_LIGHT .|. + wxFONTFLAG_BOLD .|. + wxFONTFLAG_ANTIALIASED .|. + wxFONTFLAG_NOT_ANTIALIASED .|. + wxFONTFLAG_UNDERLINED .|. + wxFONTFLAG_STRIKETHROUGH + +-- End font constants + + +wxBLUE_BRUSH :: Int +wxBLUE_BRUSH = 0 + +wxGREEN_BRUSH :: Int +wxGREEN_BRUSH = 1 + +wxWHITE_BRUSH :: Int +wxWHITE_BRUSH = 2 + +wxBLACK_BRUSH :: Int +wxBLACK_BRUSH = 3 + +wxGREY_BRUSH :: Int +wxGREY_BRUSH = 4 + +wxMEDIUM_GREY_BRUSH :: Int +wxMEDIUM_GREY_BRUSH = 5 + +wxLIGHT_GREY_BRUSH :: Int +wxLIGHT_GREY_BRUSH = 6 + +wxTRANSPARENT_BRUSH :: Int +wxTRANSPARENT_BRUSH = 7 + +wxCYAN_BRUSH :: Int +wxCYAN_BRUSH = 8 + +wxRED_BRUSH :: Int +wxRED_BRUSH = 9 + +-- From wx/brush.h +-- NOTE: these values cannot be combined together! +-- enum wxBrushStyle +wxBRUSHSTYLE_INVALID :: Int +wxBRUSHSTYLE_INVALID = -1 + +wxBRUSHSTYLE_SOLID :: Int +wxBRUSHSTYLE_SOLID = wxSOLID +wxBRUSHSTYLE_TRANSPARENT :: Int +wxBRUSHSTYLE_TRANSPARENT = wxTRANSPARENT +wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE :: Int +wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE = wxSTIPPLE_MASK_OPAQUE +wxBRUSHSTYLE_STIPPLE_MASK :: Int +wxBRUSHSTYLE_STIPPLE_MASK = wxSTIPPLE_MASK +wxBRUSHSTYLE_STIPPLE :: Int +wxBRUSHSTYLE_STIPPLE = wxSTIPPLE +wxBRUSHSTYLE_BDIAGONAL_HATCH :: Int +wxBRUSHSTYLE_BDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL +wxBRUSHSTYLE_CROSSDIAG_HATCH :: Int +wxBRUSHSTYLE_CROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG +wxBRUSHSTYLE_FDIAGONAL_HATCH :: Int +wxBRUSHSTYLE_FDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL +wxBRUSHSTYLE_CROSS_HATCH :: Int +wxBRUSHSTYLE_CROSS_HATCH = wxHATCHSTYLE_CROSS +wxBRUSHSTYLE_HORIZONTAL_HATCH :: Int +wxBRUSHSTYLE_HORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL +wxBRUSHSTYLE_VERTICAL_HATCH :: Int +wxBRUSHSTYLE_VERTICAL_HATCH = wxHATCHSTYLE_VERTICAL +wxBRUSHSTYLE_FIRST_HATCH :: Int +wxBRUSHSTYLE_FIRST_HATCH = wxHATCHSTYLE_FIRST +wxBRUSHSTYLE_LAST_HATCH :: Int +wxBRUSHSTYLE_LAST_HATCH = wxHATCHSTYLE_LAST + + +wxBLACK :: Int +wxBLACK = 0 + +wxWHITE :: Int +wxWHITE = 1 + +wxRED :: Int +wxRED = 2 + +wxBLUE :: Int +wxBLUE = 3 + +wxGREEN :: Int +wxGREEN = 4 + +wxCYAN :: Int +wxCYAN = 5 + +wxLIGHT_GREY :: Int +wxLIGHT_GREY = 6 + +wxRED_PEN :: Int +wxRED_PEN = 0 + +wxCYAN_PEN :: Int +wxCYAN_PEN = 1 + +wxGREEN_PEN :: Int +wxGREEN_PEN = 2 + +wxBLACK_PEN :: Int +wxBLACK_PEN = 3 + +wxWHITE_PEN :: Int +wxWHITE_PEN = 4 + +wxTRANSPARENT_PEN :: Int +wxTRANSPARENT_PEN = 5 + +wxBLACK_DASHED_PEN :: Int +wxBLACK_DASHED_PEN = 6 + +wxGREY_PEN :: Int +wxGREY_PEN = 7 + +wxMEDIUM_GREY_PEN :: Int +wxMEDIUM_GREY_PEN = 8 + +wxLIGHT_GREY_PEN :: Int +wxLIGHT_GREY_PEN = 9 + + +-- From wx/pen.h + +-- enum wxPenStyle +wxPENSTYLE_INVALID :: Int +wxPENSTYLE_INVALID = -1 + +wxPENSTYLE_SOLID :: Int +wxPENSTYLE_SOLID = wxSOLID +wxPENSTYLE_DOT :: Int +wxPENSTYLE_DOT = wxDOT +wxPENSTYLE_LONG_DASH :: Int +wxPENSTYLE_LONG_DASH = wxLONG_DASH +wxPENSTYLE_SHORT_DASH :: Int +wxPENSTYLE_SHORT_DASH = wxSHORT_DASH +wxPENSTYLE_DOT_DASH :: Int +wxPENSTYLE_DOT_DASH = wxDOT_DASH +wxPENSTYLE_USER_DASH :: Int +wxPENSTYLE_USER_DASH = wxUSER_DASH + +wxPENSTYLE_TRANSPARENT :: Int +wxPENSTYLE_TRANSPARENT = wxTRANSPARENT + +wxPENSTYLE_STIPPLE_MASK_OPAQUE :: Int +wxPENSTYLE_STIPPLE_MASK_OPAQUE = wxSTIPPLE_MASK_OPAQUE +wxPENSTYLE_STIPPLE_MASK :: Int +wxPENSTYLE_STIPPLE_MASK = wxSTIPPLE_MASK +wxPENSTYLE_STIPPLE :: Int +wxPENSTYLE_STIPPLE = wxSTIPPLE + +wxPENSTYLE_BDIAGONAL_HATCH :: Int +wxPENSTYLE_BDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL +wxPENSTYLE_CROSSDIAG_HATCH :: Int +wxPENSTYLE_CROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG +wxPENSTYLE_FDIAGONAL_HATCH :: Int +wxPENSTYLE_FDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL +wxPENSTYLE_CROSS_HATCH :: Int +wxPENSTYLE_CROSS_HATCH = wxHATCHSTYLE_CROSS +wxPENSTYLE_HORIZONTAL_HATCH :: Int +wxPENSTYLE_HORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL +wxPENSTYLE_VERTICAL_HATCH :: Int +wxPENSTYLE_VERTICAL_HATCH = wxHATCHSTYLE_VERTICAL +wxPENSTYLE_FIRST_HATCH :: Int +wxPENSTYLE_FIRST_HATCH = wxHATCHSTYLE_FIRST +wxPENSTYLE_LAST_HATCH :: Int +wxPENSTYLE_LAST_HATCH = wxHATCHSTYLE_LAST + +-- enum wxPenJoin +wxJOIN_INVALID :: Int +wxJOIN_INVALID = -1 + +wxJOIN_BEVEL :: Int +wxJOIN_BEVEL = 120 +wxJOIN_MITER :: Int +wxJOIN_MITER = 121 +wxJOIN_ROUND :: Int +wxJOIN_ROUND = 122 + +-- enum wxPenCap +wxCAP_INVALID :: Int +wxCAP_INVALID = -1 + +wxCAP_ROUND :: Int +wxCAP_ROUND = 130 +wxCAP_PROJECTING :: Int +wxCAP_PROJECTING = 131 +wxCAP_BUTT :: Int +wxCAP_BUTT = 132 + +-- End from wx/pen.h + + +wxNOT_FOUND :: Int +wxNOT_FOUND = (-1) + +wxPRINTER_NO_ERROR :: Int +wxPRINTER_NO_ERROR = 0 + +wxPRINTER_CANCELLED :: Int +wxPRINTER_CANCELLED = 1 + +wxPRINTER_ERROR :: Int +wxPRINTER_ERROR = 2 + +wxPREVIEW_PRINT :: Int +wxPREVIEW_PRINT = 1 + +wxPREVIEW_PREVIOUS :: Int +wxPREVIEW_PREVIOUS = 2 + +wxPREVIEW_NEXT :: Int +wxPREVIEW_NEXT = 4 + +wxPREVIEW_ZOOM :: Int +wxPREVIEW_ZOOM = 8 + +wxPREVIEW_FIRST :: Int +wxPREVIEW_FIRST = 8 + +wxPREVIEW_LAST :: Int +wxPREVIEW_LAST = 32 + +wxPREVIEW_GOTO :: Int +wxPREVIEW_GOTO = 64 + +wxPREVIEW_DEFAULT :: Int +wxPREVIEW_DEFAULT = 126 + +wxID_PREVIEW_CLOSE :: Int +wxID_PREVIEW_CLOSE = 1 + +wxID_PREVIEW_NEXT :: Int +wxID_PREVIEW_NEXT = 2 + +wxID_PREVIEW_PREVIOUS :: Int +wxID_PREVIEW_PREVIOUS = 3 + +wxID_PREVIEW_PRINT :: Int +wxID_PREVIEW_PRINT = 4 + +wxID_PREVIEW_ZOOM :: Int +wxID_PREVIEW_ZOOM = 5 + +wxID_PREVIEW_FIRST :: Int +wxID_PREVIEW_FIRST = 6 + +wxID_PREVIEW_LAST :: Int +wxID_PREVIEW_LAST = 7 + +wxID_PREVIEW_GOTO :: Int +wxID_PREVIEW_GOTO = 8 + +wxPRINTID_STATIC :: Int +wxPRINTID_STATIC = 10 + +wxPRINTID_RANGE :: Int +wxPRINTID_RANGE = 11 + +wxPRINTID_FROM :: Int +wxPRINTID_FROM = 12 + +wxPRINTID_TO :: Int +wxPRINTID_TO = 13 + +wxPRINTID_COPIES :: Int +wxPRINTID_COPIES = 14 + +wxPRINTID_PRINTTOFILE :: Int +wxPRINTID_PRINTTOFILE = 15 + +wxPRINTID_SETUP :: Int +wxPRINTID_SETUP = 16 + +wxPRINTID_LEFTMARGIN :: Int +wxPRINTID_LEFTMARGIN = 30 + +wxPRINTID_RIGHTMARGIN :: Int +wxPRINTID_RIGHTMARGIN = 31 + +wxPRINTID_TOPMARGIN :: Int +wxPRINTID_TOPMARGIN = 32 + +wxPRINTID_BOTTOMMARGIN :: Int +wxPRINTID_BOTTOMMARGIN = 33 + +wxPRINTID_PRINTCOLOUR :: Int +wxPRINTID_PRINTCOLOUR = 10 + +wxPRINTID_ORIENTATION :: Int +wxPRINTID_ORIENTATION = 11 + +wxPRINTID_COMMAND :: Int +wxPRINTID_COMMAND = 12 + +wxPRINTID_OPTIONS :: Int +wxPRINTID_OPTIONS = 13 + +wxPRINTID_PAPERSIZE :: Int +wxPRINTID_PAPERSIZE = 14 + +wxHF_TOOLBAR :: Int +wxHF_TOOLBAR = 1 + +wxHF_CONTENTS :: Int +wxHF_CONTENTS = 2 + +wxHF_INDEX :: Int +wxHF_INDEX = 4 + +wxHF_SEARCH :: Int +wxHF_SEARCH = 8 + +wxHF_BOOKMARKS :: Int +wxHF_BOOKMARKS = 16 + +wxHF_OPENFILES :: Int +wxHF_OPENFILES = 32 + +wxHF_PRINT :: Int +wxHF_PRINT = 64 + +wxHF_FLATTOOLBAR :: Int +wxHF_FLATTOOLBAR = 128 + +wxHF_DEFAULTSTYLE :: Int +wxHF_DEFAULTSTYLE = 95 + +wxLAYOUT_HORIZONTAL :: Int +wxLAYOUT_HORIZONTAL = 0 + +wxLAYOUT_VERTICAL :: Int +wxLAYOUT_VERTICAL = 1 + +wxLAYOUT_NONE :: Int +wxLAYOUT_NONE = 0 + +wxLAYOUT_TOP :: Int +wxLAYOUT_TOP = 1 + +wxLAYOUT_LEFT :: Int +wxLAYOUT_LEFT = 2 + +wxLAYOUT_RIGHT :: Int +wxLAYOUT_RIGHT = 3 + +wxLAYOUT_BOTTOM :: Int +wxLAYOUT_BOTTOM = 4 + +wxSASH_DRAG_NONE :: Int +wxSASH_DRAG_NONE = 0 + +wxSASH_DRAG_DRAGGING :: Int +wxSASH_DRAG_DRAGGING = 1 + +wxSASH_DRAG_LEFT_DOWN :: Int +wxSASH_DRAG_LEFT_DOWN = 2 + +wxSASH_TOP :: Int +wxSASH_TOP = 0 + +wxSASH_RIGHT :: Int +wxSASH_RIGHT = 1 + +wxSASH_BOTTOM :: Int +wxSASH_BOTTOM = 2 + +wxSASH_LEFT :: Int +wxSASH_LEFT = 3 + +wxSASH_NONE :: Int +wxSASH_NONE = 100 + +wxSW_NOBORDER :: Int +wxSW_NOBORDER = 0 + +wxSW_BORDER :: Int +wxSW_BORDER = 32 + +wxSW_3DSASH :: Int +wxSW_3DSASH = 64 + +wxSW_3DBORDER :: Int +wxSW_3DBORDER = 128 + +wxSW_3D :: Int +wxSW_3D = 192 + +wxSASH_STATUS_OK :: Int +wxSASH_STATUS_OK = 0 + +wxSASH_STATUS_OUT_OF_RANGE :: Int +wxSASH_STATUS_OUT_OF_RANGE = 1 + +wxXRC_NONE :: Int +wxXRC_NONE = 0 + +wxXRC_USE_LOCALE :: Int +wxXRC_USE_LOCALE = 1 + +wxXRC_NO_SUBCLASSING :: Int +wxXRC_NO_SUBCLASSING = 2 + +wxXRC_NO_RELOADING :: Int +wxXRC_NO_RELOADING = 4 + +wxSYS_WHITE_BRUSH :: Int +wxSYS_WHITE_BRUSH = 0 + +wxSYS_LTGRAY_BRUSH :: Int +wxSYS_LTGRAY_BRUSH = 1 + +wxSYS_GRAY_BRUSH :: Int +wxSYS_GRAY_BRUSH = 2 + +wxSYS_DKGRAY_BRUSH :: Int +wxSYS_DKGRAY_BRUSH = 3 + +wxSYS_BLACK_BRUSH :: Int +wxSYS_BLACK_BRUSH = 4 + +wxSYS_NULL_BRUSH :: Int +wxSYS_NULL_BRUSH = 5 + +wxSYS_HOLLOW_BRUSH :: Int +wxSYS_HOLLOW_BRUSH = 5 + +wxSYS_WHITE_PEN :: Int +wxSYS_WHITE_PEN = 6 + +wxSYS_BLACK_PEN :: Int +wxSYS_BLACK_PEN = 7 + +wxSYS_NULL_PEN :: Int +wxSYS_NULL_PEN = 8 + +wxSYS_OEM_FIXED_FONT :: Int +wxSYS_OEM_FIXED_FONT = 10 + +wxSYS_ANSI_FIXED_FONT :: Int +wxSYS_ANSI_FIXED_FONT = 11 + +wxSYS_ANSI_VAR_FONT :: Int +wxSYS_ANSI_VAR_FONT = 12 + +wxSYS_SYSTEM_FONT :: Int +wxSYS_SYSTEM_FONT = 13 + +wxSYS_DEVICE_DEFAULT_FONT :: Int +wxSYS_DEVICE_DEFAULT_FONT = 14 + +wxSYS_DEFAULT_PALETTE :: Int +wxSYS_DEFAULT_PALETTE = 15 + +wxSYS_SYSTEM_FIXED_FONT :: Int +wxSYS_SYSTEM_FIXED_FONT = 16 + +wxSYS_DEFAULT_GUI_FONT :: Int +wxSYS_DEFAULT_GUI_FONT = 17 + +wxSYS_COLOUR_SCROLLBAR :: Int +wxSYS_COLOUR_SCROLLBAR = 0 + +wxSYS_COLOUR_BACKGROUND :: Int +wxSYS_COLOUR_BACKGROUND = 1 + +wxSYS_COLOUR_ACTIVECAPTION :: Int +wxSYS_COLOUR_ACTIVECAPTION = 2 + +wxSYS_COLOUR_INACTIVECAPTION :: Int +wxSYS_COLOUR_INACTIVECAPTION = 3 + +wxSYS_COLOUR_MENU :: Int +wxSYS_COLOUR_MENU = 4 + +wxSYS_COLOUR_WINDOW :: Int +wxSYS_COLOUR_WINDOW = 5 + +wxSYS_COLOUR_WINDOWFRAME :: Int +wxSYS_COLOUR_WINDOWFRAME = 6 + +wxSYS_COLOUR_MENUTEXT :: Int +wxSYS_COLOUR_MENUTEXT = 7 + +wxSYS_COLOUR_WINDOWTEXT :: Int +wxSYS_COLOUR_WINDOWTEXT = 8 + +wxSYS_COLOUR_CAPTIONTEXT :: Int +wxSYS_COLOUR_CAPTIONTEXT = 9 + +wxSYS_COLOUR_ACTIVEBORDER :: Int +wxSYS_COLOUR_ACTIVEBORDER = 10 + +wxSYS_COLOUR_INACTIVEBORDER :: Int +wxSYS_COLOUR_INACTIVEBORDER = 11 + +wxSYS_COLOUR_APPWORKSPACE :: Int +wxSYS_COLOUR_APPWORKSPACE = 12 + +wxSYS_COLOUR_HIGHLIGHT :: Int +wxSYS_COLOUR_HIGHLIGHT = 13 + +wxSYS_COLOUR_HIGHLIGHTTEXT :: Int +wxSYS_COLOUR_HIGHLIGHTTEXT = 14 + +wxSYS_COLOUR_BTNFACE :: Int +wxSYS_COLOUR_BTNFACE = 15 + +wxSYS_COLOUR_BTNSHADOW :: Int +wxSYS_COLOUR_BTNSHADOW = 16 + +wxSYS_COLOUR_GRAYTEXT :: Int +wxSYS_COLOUR_GRAYTEXT = 17 + +wxSYS_COLOUR_BTNTEXT :: Int +wxSYS_COLOUR_BTNTEXT = 18 + +wxSYS_COLOUR_INACTIVECAPTIONTEXT :: Int +wxSYS_COLOUR_INACTIVECAPTIONTEXT = 19 + +wxSYS_COLOUR_BTNHIGHLIGHT :: Int +wxSYS_COLOUR_BTNHIGHLIGHT = 20 + +wxSYS_COLOUR_3DDKSHADOW :: Int +wxSYS_COLOUR_3DDKSHADOW = 21 + +wxSYS_COLOUR_3DLIGHT :: Int +wxSYS_COLOUR_3DLIGHT = 22 + +wxSYS_COLOUR_INFOTEXT :: Int +wxSYS_COLOUR_INFOTEXT = 23 + +wxSYS_COLOUR_INFOBK :: Int +wxSYS_COLOUR_INFOBK = 24 + +wxSYS_COLOUR_LISTBOX :: Int +wxSYS_COLOUR_LISTBOX = 25 + +wxSYS_COLOUR_DESKTOP :: Int +wxSYS_COLOUR_DESKTOP = 1 + +wxSYS_COLOUR_3DFACE :: Int +wxSYS_COLOUR_3DFACE = 15 + +wxSYS_COLOUR_3DSHADOW :: Int +wxSYS_COLOUR_3DSHADOW = 16 + +wxSYS_COLOUR_3DHIGHLIGHT :: Int +wxSYS_COLOUR_3DHIGHLIGHT = 20 + +wxSYS_COLOUR_3DHILIGHT :: Int +wxSYS_COLOUR_3DHILIGHT = 20 + +wxSYS_COLOUR_BTNHILIGHT :: Int +wxSYS_COLOUR_BTNHILIGHT = 20 + +wxSYS_MOUSE_BUTTONS :: Int +wxSYS_MOUSE_BUTTONS = 1 + +wxSYS_BORDER_X :: Int +wxSYS_BORDER_X = 2 + +wxSYS_BORDER_Y :: Int +wxSYS_BORDER_Y = 3 + +wxSYS_CURSOR_X :: Int +wxSYS_CURSOR_X = 4 + +wxSYS_CURSOR_Y :: Int +wxSYS_CURSOR_Y = 5 + +wxSYS_DCLICK_X :: Int +wxSYS_DCLICK_X = 6 + +wxSYS_DCLICK_Y :: Int +wxSYS_DCLICK_Y = 7 + +wxSYS_DRAG_X :: Int +wxSYS_DRAG_X = 8 + +wxSYS_DRAG_Y :: Int +wxSYS_DRAG_Y = 9 + +wxSYS_EDGE_X :: Int +wxSYS_EDGE_X = 10 + +wxSYS_EDGE_Y :: Int +wxSYS_EDGE_Y = 11 + +wxSYS_HSCROLL_ARROW_X :: Int +wxSYS_HSCROLL_ARROW_X = 12 + +wxSYS_HSCROLL_ARROW_Y :: Int +wxSYS_HSCROLL_ARROW_Y = 13 + +wxSYS_HTHUMB_X :: Int +wxSYS_HTHUMB_X = 14 + +wxSYS_ICON_X :: Int +wxSYS_ICON_X = 15 + +wxSYS_ICON_Y :: Int +wxSYS_ICON_Y = 16 + +wxSYS_ICONSPACING_X :: Int +wxSYS_ICONSPACING_X = 17 + +wxSYS_ICONSPACING_Y :: Int +wxSYS_ICONSPACING_Y = 18 + +wxSYS_WINDOWMIN_X :: Int +wxSYS_WINDOWMIN_X = 19 + +wxSYS_WINDOWMIN_Y :: Int +wxSYS_WINDOWMIN_Y = 20 + +wxSYS_SCREEN_X :: Int +wxSYS_SCREEN_X = 21 + +wxSYS_SCREEN_Y :: Int +wxSYS_SCREEN_Y = 22 + +wxSYS_FRAMESIZE_X :: Int +wxSYS_FRAMESIZE_X = 23 + +wxSYS_FRAMESIZE_Y :: Int +wxSYS_FRAMESIZE_Y = 24 + +wxSYS_SMALLICON_X :: Int +wxSYS_SMALLICON_X = 25 + +wxSYS_SMALLICON_Y :: Int +wxSYS_SMALLICON_Y = 26 + +wxSYS_HSCROLL_Y :: Int +wxSYS_HSCROLL_Y = 27 + +wxSYS_VSCROLL_X :: Int +wxSYS_VSCROLL_X = 28 + +wxSYS_VSCROLL_ARROW_X :: Int +wxSYS_VSCROLL_ARROW_X = 29 + +wxSYS_VSCROLL_ARROW_Y :: Int +wxSYS_VSCROLL_ARROW_Y = 30 + +wxSYS_VTHUMB_Y :: Int +wxSYS_VTHUMB_Y = 31 + +wxSYS_CAPTION_Y :: Int +wxSYS_CAPTION_Y = 32 + +wxSYS_MENU_Y :: Int +wxSYS_MENU_Y = 33 + +wxSYS_NETWORK_PRESENT :: Int +wxSYS_NETWORK_PRESENT = 34 + +wxSYS_PENWINDOWS_PRESENT :: Int +wxSYS_PENWINDOWS_PRESENT = 35 + +wxSYS_SHOW_SOUNDS :: Int +wxSYS_SHOW_SOUNDS = 36 + +wxSYS_SWAP_BUTTONS :: Int +wxSYS_SWAP_BUTTONS = 37 + +wxSYS_SCREEN_NONE :: Int +wxSYS_SCREEN_NONE = 0 + +wxSYS_SCREEN_TINY :: Int +wxSYS_SCREEN_TINY = 1 + +wxSYS_SCREEN_PDA :: Int +wxSYS_SCREEN_PDA = 2 + +wxSYS_SCREEN_SMALL :: Int +wxSYS_SCREEN_SMALL = 3 + +wxSYS_SCREEN_DESKTOP :: Int +wxSYS_SCREEN_DESKTOP = 4 + +wxCAL_BORDER_NONE :: Int +wxCAL_BORDER_NONE = 0 + +wxCAL_BORDER_SQUARE :: Int +wxCAL_BORDER_SQUARE = 1 + +wxCAL_BORDER_ROUND :: Int +wxCAL_BORDER_ROUND = 2 + +wxCAL_HITTEST_NOWHERE :: Int +wxCAL_HITTEST_NOWHERE = 0 + +wxCAL_HITTEST_HEADER :: Int +wxCAL_HITTEST_HEADER = 1 + +wxCAL_HITTEST_DAY :: Int +wxCAL_HITTEST_DAY = 2 + +wxUNKNOWN :: Int +wxUNKNOWN = 0 + +wxSTRING :: Int +wxSTRING = 1 + +wxBOOLEAN :: Int +wxBOOLEAN = 2 + +wxINTEGER :: Int +wxINTEGER = 3 + +wxFLOAT :: Int +wxFLOAT = 4 + +wxMUTEX_NO_ERROR :: Int +wxMUTEX_NO_ERROR = 0 + +wxMUTEX_DEAD_LOCK :: Int +wxMUTEX_DEAD_LOCK = 1 + +wxMUTEX_BUSY :: Int +wxMUTEX_BUSY = 2 + +wxMUTEX_UNLOCKED :: Int +wxMUTEX_UNLOCKED = 3 + +wxMUTEX_MISC_ERROR :: Int +wxMUTEX_MISC_ERROR = 4 + +wxPLATFORM_CURRENT :: Int +wxPLATFORM_CURRENT = (-1) + +wxPLATFORM_UNIX :: Int +wxPLATFORM_UNIX = 0 + +wxPLATFORM_WINDOWS :: Int +wxPLATFORM_WINDOWS = 1 + +wxPLATFORM_OS2 :: Int +wxPLATFORM_OS2 = 2 + +wxPLATFORM_MAC :: Int +wxPLATFORM_MAC = 3 + +wxLED_ALIGN_LEFT :: Int +wxLED_ALIGN_LEFT = 1 + +wxLED_ALIGN_RIGHT :: Int +wxLED_ALIGN_RIGHT = 2 + +wxLED_ALIGN_CENTER :: Int +wxLED_ALIGN_CENTER = 4 + +wxLED_ALIGN_MASK :: Int +wxLED_ALIGN_MASK = 4 + +wxLED_DRAW_FADED :: Int +wxLED_DRAW_FADED = 8 + +wxDS_MANAGE_SCROLLBARS :: Int +wxDS_MANAGE_SCROLLBARS = 16 + +wxDS_DRAG_CORNER :: Int +wxDS_DRAG_CORNER = 32 + +wxEL_ALLOW_NEW :: Int +wxEL_ALLOW_NEW = 256 + +wxEL_ALLOW_EDIT :: Int +wxEL_ALLOW_EDIT = 512 + +wxEL_ALLOW_DELETE :: Int +wxEL_ALLOW_DELETE = 1024 + +wxTR_NO_BUTTONS :: Int +wxTR_NO_BUTTONS = 0 + +wxTR_HAS_BUTTONS :: Int +wxTR_HAS_BUTTONS = 1 + +wxTR_TWIST_BUTTONS :: Int +wxTR_TWIST_BUTTONS = 2 + +wxTR_NO_LINES :: Int +wxTR_NO_LINES = 4 + +wxTR_LINES_AT_ROOT :: Int +wxTR_LINES_AT_ROOT = 8 + +wxTR_AQUA_BUTTONS :: Int +wxTR_AQUA_BUTTONS = 16 + +wxTR_SINGLE :: Int +wxTR_SINGLE = 0 + +wxTR_MULTIPLE :: Int +wxTR_MULTIPLE = 32 + +wxTR_EXTENDED :: Int +wxTR_EXTENDED = 64 + +wxTR_FULL_ROW_HIGHLIGHT :: Int +wxTR_FULL_ROW_HIGHLIGHT = 8192 + +wxTR_EDIT_LABELS :: Int +wxTR_EDIT_LABELS = 512 + +wxTR_ROW_LINES :: Int +wxTR_ROW_LINES = 1024 + +wxTR_HIDE_ROOT :: Int +wxTR_HIDE_ROOT = 2048 + +wxTR_HAS_VARIABLE_ROW_HEIGHT :: Int +wxTR_HAS_VARIABLE_ROW_HEIGHT = 128 + +wxCBAR_DOCKED_HORIZONTALLY :: Int +wxCBAR_DOCKED_HORIZONTALLY = 0 + +wxCBAR_DOCKED_VERTICALLY :: Int +wxCBAR_DOCKED_VERTICALLY = 1 + +wxCBAR_FLOATING :: Int +wxCBAR_FLOATING = 2 + +wxCBAR_HIDDEN :: Int +wxCBAR_HIDDEN = 3 + +fL_ALIGN_TOP :: Int +fL_ALIGN_TOP = 0 + +fL_ALIGN_BOTTOM :: Int +fL_ALIGN_BOTTOM = 1 + +fL_ALIGN_LEFT :: Int +fL_ALIGN_LEFT = 2 + +fL_ALIGN_RIGHT :: Int +fL_ALIGN_RIGHT = 3 + +fL_ALIGN_TOP_PANE :: Int +fL_ALIGN_TOP_PANE = 1 + +fL_ALIGN_BOTTOM_PANE :: Int +fL_ALIGN_BOTTOM_PANE = 2 + +fL_ALIGN_LEFT_PANE :: Int +fL_ALIGN_LEFT_PANE = 4 + +fL_ALIGN_RIGHT_PANE :: Int +fL_ALIGN_RIGHT_PANE = 8 + +wxALL_PANES :: Int +wxALL_PANES = 15 + +cB_NO_ITEMS_HITTED :: Int +cB_NO_ITEMS_HITTED = 0 + +cB_UPPER_ROW_HANDLE_HITTED :: Int +cB_UPPER_ROW_HANDLE_HITTED = 1 + +cB_LOWER_ROW_HANDLE_HITTED :: Int +cB_LOWER_ROW_HANDLE_HITTED = 2 + +cB_LEFT_BAR_HANDLE_HITTED :: Int +cB_LEFT_BAR_HANDLE_HITTED = 3 + +cB_RIGHT_BAR_HANDLE_HITTED :: Int +cB_RIGHT_BAR_HANDLE_HITTED = 4 + +cB_BAR_CONTENT_HITTED :: Int +cB_BAR_CONTENT_HITTED = 5 + +wxOK :: Int +wxOK = 4 + +wxYES :: Int +wxYES = 2 + +wxNO :: Int +wxNO = 8 + +wxYES_NO :: Int +wxYES_NO = 10 + +wxCANCEL :: Int +wxCANCEL = 16 + +wxNO_DEFAULT :: Int +wxNO_DEFAULT = 128 + +wxYES_DEFAULT :: Int +wxYES_DEFAULT = 0 + +wxFR_DOWN :: Int +wxFR_DOWN = 1 + +wxFR_WHOLEWORD :: Int +wxFR_WHOLEWORD = 2 + +wxFR_MATCHCASE :: Int +wxFR_MATCHCASE = 4 + +wxFR_REPLACEDIALOG :: Int +wxFR_REPLACEDIALOG = 1 + +wxFR_NOUPDOWN :: Int +wxFR_NOUPDOWN = 2 + +wxFR_NOMATCHCASE :: Int +wxFR_NOMATCHCASE = 4 + +wxFR_NOWHOLEWORD :: Int +wxFR_NOWHOLEWORD = 8 + +wxQUANTIZE_INCLUDE_WINDOWS_COLOURS :: Int +wxQUANTIZE_INCLUDE_WINDOWS_COLOURS = 1 + +wxQUANTIZE_RETURN_8BIT_DATA :: Int +wxQUANTIZE_RETURN_8BIT_DATA = 2 + +wxQUANTIZE_FILL_DESTINATION_IMAGE :: Int +wxQUANTIZE_FILL_DESTINATION_IMAGE = 4 + +wxLANGUAGE_DEFAULT :: Int +wxLANGUAGE_DEFAULT = 0 + +wxLANGUAGE_UNKNOWN :: Int +wxLANGUAGE_UNKNOWN = 1 + +wxLANGUAGE_ABKHAZIAN :: Int +wxLANGUAGE_ABKHAZIAN = 2 + +wxLANGUAGE_AFAR :: Int +wxLANGUAGE_AFAR = 3 + +wxLANGUAGE_AFRIKAANS :: Int +wxLANGUAGE_AFRIKAANS = 4 + +wxLANGUAGE_ALBANIAN :: Int +wxLANGUAGE_ALBANIAN = 5 + +wxLANGUAGE_AMHARIC :: Int +wxLANGUAGE_AMHARIC = 6 + +wxLANGUAGE_ARABIC :: Int +wxLANGUAGE_ARABIC = 7 + +wxLANGUAGE_ARABIC_ALGERIA :: Int +wxLANGUAGE_ARABIC_ALGERIA = 8 + +wxLANGUAGE_ARABIC_BAHRAIN :: Int +wxLANGUAGE_ARABIC_BAHRAIN = 9 + +wxLANGUAGE_ARABIC_EGYPT :: Int +wxLANGUAGE_ARABIC_EGYPT = 10 + +wxLANGUAGE_ARABIC_IRAQ :: Int +wxLANGUAGE_ARABIC_IRAQ = 11 + +wxLANGUAGE_ARABIC_JORDAN :: Int +wxLANGUAGE_ARABIC_JORDAN = 12 + +wxLANGUAGE_ARABIC_KUWAIT :: Int +wxLANGUAGE_ARABIC_KUWAIT = 13 + +wxLANGUAGE_ARABIC_LEBANON :: Int +wxLANGUAGE_ARABIC_LEBANON = 14 + +wxLANGUAGE_ARABIC_LIBYA :: Int +wxLANGUAGE_ARABIC_LIBYA = 15 + +wxLANGUAGE_ARABIC_MOROCCO :: Int +wxLANGUAGE_ARABIC_MOROCCO = 16 + +wxLANGUAGE_ARABIC_OMAN :: Int +wxLANGUAGE_ARABIC_OMAN = 17 + +wxLANGUAGE_ARABIC_QATAR :: Int +wxLANGUAGE_ARABIC_QATAR = 18 + +wxLANGUAGE_ARABIC_SAUDI_ARABIA :: Int +wxLANGUAGE_ARABIC_SAUDI_ARABIA = 19 + +wxLANGUAGE_ARABIC_SUDAN :: Int +wxLANGUAGE_ARABIC_SUDAN = 20 + +wxLANGUAGE_ARABIC_SYRIA :: Int +wxLANGUAGE_ARABIC_SYRIA = 21 + +wxLANGUAGE_ARABIC_TUNISIA :: Int +wxLANGUAGE_ARABIC_TUNISIA = 22 + +wxLANGUAGE_ARABIC_UAE :: Int +wxLANGUAGE_ARABIC_UAE = 23 + +wxLANGUAGE_ARABIC_YEMEN :: Int +wxLANGUAGE_ARABIC_YEMEN = 24 + +wxLANGUAGE_ARMENIAN :: Int +wxLANGUAGE_ARMENIAN = 25 + +wxLANGUAGE_ASSAMESE :: Int +wxLANGUAGE_ASSAMESE = 26 + +wxLANGUAGE_AYMARA :: Int +wxLANGUAGE_AYMARA = 27 + +wxLANGUAGE_AZERI :: Int +wxLANGUAGE_AZERI = 28 + +wxLANGUAGE_AZERI_CYRILLIC :: Int +wxLANGUAGE_AZERI_CYRILLIC = 29 + +wxLANGUAGE_AZERI_LATIN :: Int +wxLANGUAGE_AZERI_LATIN = 30 + +wxLANGUAGE_BASHKIR :: Int +wxLANGUAGE_BASHKIR = 31 + +wxLANGUAGE_BASQUE :: Int +wxLANGUAGE_BASQUE = 32 + +wxLANGUAGE_BELARUSIAN :: Int +wxLANGUAGE_BELARUSIAN = 33 + +wxLANGUAGE_BENGALI :: Int +wxLANGUAGE_BENGALI = 34 + +wxLANGUAGE_BHUTANI :: Int +wxLANGUAGE_BHUTANI = 35 + +wxLANGUAGE_BIHARI :: Int +wxLANGUAGE_BIHARI = 36 + +wxLANGUAGE_BISLAMA :: Int +wxLANGUAGE_BISLAMA = 37 + +wxLANGUAGE_BRETON :: Int +wxLANGUAGE_BRETON = 38 + +wxLANGUAGE_BULGARIAN :: Int +wxLANGUAGE_BULGARIAN = 39 + +wxLANGUAGE_BURMESE :: Int +wxLANGUAGE_BURMESE = 40 + +wxLANGUAGE_CAMBODIAN :: Int +wxLANGUAGE_CAMBODIAN = 41 + +wxLANGUAGE_CATALAN :: Int +wxLANGUAGE_CATALAN = 42 + +wxLANGUAGE_CHINESE :: Int +wxLANGUAGE_CHINESE = 43 + +wxLANGUAGE_CHINESE_SIMPLIFIED :: Int +wxLANGUAGE_CHINESE_SIMPLIFIED = 44 + +wxLANGUAGE_CHINESE_TRADITIONAL :: Int +wxLANGUAGE_CHINESE_TRADITIONAL = 45 + +wxLANGUAGE_CHINESE_HONGKONG :: Int +wxLANGUAGE_CHINESE_HONGKONG = 46 + +wxLANGUAGE_CHINESE_MACAU :: Int +wxLANGUAGE_CHINESE_MACAU = 47 + +wxLANGUAGE_CHINESE_SINGAPORE :: Int +wxLANGUAGE_CHINESE_SINGAPORE = 48 + +wxLANGUAGE_CHINESE_TAIWAN :: Int +wxLANGUAGE_CHINESE_TAIWAN = 49 + +wxLANGUAGE_CORSICAN :: Int +wxLANGUAGE_CORSICAN = 50 + +wxLANGUAGE_CROATIAN :: Int +wxLANGUAGE_CROATIAN = 51 + +wxLANGUAGE_CZECH :: Int +wxLANGUAGE_CZECH = 52 + +wxLANGUAGE_DANISH :: Int +wxLANGUAGE_DANISH = 53 + +wxLANGUAGE_DUTCH :: Int +wxLANGUAGE_DUTCH = 54 + +wxLANGUAGE_DUTCH_BELGIAN :: Int +wxLANGUAGE_DUTCH_BELGIAN = 55 + +wxLANGUAGE_ENGLISH :: Int +wxLANGUAGE_ENGLISH = 56 + +wxLANGUAGE_ENGLISH_UK :: Int +wxLANGUAGE_ENGLISH_UK = 57 + +wxLANGUAGE_ENGLISH_US :: Int +wxLANGUAGE_ENGLISH_US = 58 + +wxLANGUAGE_ENGLISH_AUSTRALIA :: Int +wxLANGUAGE_ENGLISH_AUSTRALIA = 59 + +wxLANGUAGE_ENGLISH_BELIZE :: Int +wxLANGUAGE_ENGLISH_BELIZE = 60 + +wxLANGUAGE_ENGLISH_BOTSWANA :: Int +wxLANGUAGE_ENGLISH_BOTSWANA = 61 + +wxLANGUAGE_ENGLISH_CANADA :: Int +wxLANGUAGE_ENGLISH_CANADA = 62 + +wxLANGUAGE_ENGLISH_CARIBBEAN :: Int +wxLANGUAGE_ENGLISH_CARIBBEAN = 63 + +wxLANGUAGE_ENGLISH_DENMARK :: Int +wxLANGUAGE_ENGLISH_DENMARK = 64 + +wxLANGUAGE_ENGLISH_EIRE :: Int +wxLANGUAGE_ENGLISH_EIRE = 65 + +wxLANGUAGE_ENGLISH_JAMAICA :: Int +wxLANGUAGE_ENGLISH_JAMAICA = 66 + +wxLANGUAGE_ENGLISH_NEW_ZEALAND :: Int +wxLANGUAGE_ENGLISH_NEW_ZEALAND = 67 + +wxLANGUAGE_ENGLISH_PHILIPPINES :: Int +wxLANGUAGE_ENGLISH_PHILIPPINES = 68 + +wxLANGUAGE_ENGLISH_SOUTH_AFRICA :: Int +wxLANGUAGE_ENGLISH_SOUTH_AFRICA = 69 + +wxLANGUAGE_ENGLISH_TRINIDAD :: Int +wxLANGUAGE_ENGLISH_TRINIDAD = 70 + +wxLANGUAGE_ENGLISH_ZIMBABWE :: Int +wxLANGUAGE_ENGLISH_ZIMBABWE = 71 + +wxLANGUAGE_ESPERANTO :: Int +wxLANGUAGE_ESPERANTO = 72 + +wxLANGUAGE_ESTONIAN :: Int +wxLANGUAGE_ESTONIAN = 73 + +wxLANGUAGE_FAEROESE :: Int +wxLANGUAGE_FAEROESE = 74 + +wxLANGUAGE_FARSI :: Int +wxLANGUAGE_FARSI = 75 + +wxLANGUAGE_FIJI :: Int +wxLANGUAGE_FIJI = 76 + +wxLANGUAGE_FINNISH :: Int +wxLANGUAGE_FINNISH = 77 + +wxLANGUAGE_FRENCH :: Int +wxLANGUAGE_FRENCH = 78 + +wxLANGUAGE_FRENCH_BELGIAN :: Int +wxLANGUAGE_FRENCH_BELGIAN = 79 + +wxLANGUAGE_FRENCH_CANADIAN :: Int +wxLANGUAGE_FRENCH_CANADIAN = 80 + +wxLANGUAGE_FRENCH_LUXEMBOURG :: Int +wxLANGUAGE_FRENCH_LUXEMBOURG = 81 + +wxLANGUAGE_FRENCH_MONACO :: Int +wxLANGUAGE_FRENCH_MONACO = 82 + +wxLANGUAGE_FRENCH_SWISS :: Int +wxLANGUAGE_FRENCH_SWISS = 83 + +wxLANGUAGE_FRISIAN :: Int +wxLANGUAGE_FRISIAN = 84 + +wxLANGUAGE_GALICIAN :: Int +wxLANGUAGE_GALICIAN = 85 + +wxLANGUAGE_GEORGIAN :: Int +wxLANGUAGE_GEORGIAN = 86 + +wxLANGUAGE_GERMAN :: Int +wxLANGUAGE_GERMAN = 87 + +wxLANGUAGE_GERMAN_AUSTRIAN :: Int +wxLANGUAGE_GERMAN_AUSTRIAN = 88 + +wxLANGUAGE_GERMAN_BELGIUM :: Int +wxLANGUAGE_GERMAN_BELGIUM = 89 + +wxLANGUAGE_GERMAN_LIECHTENSTEIN :: Int +wxLANGUAGE_GERMAN_LIECHTENSTEIN = 90 + +wxLANGUAGE_GERMAN_LUXEMBOURG :: Int +wxLANGUAGE_GERMAN_LUXEMBOURG = 91 + +wxLANGUAGE_GERMAN_SWISS :: Int +wxLANGUAGE_GERMAN_SWISS = 92 + +wxLANGUAGE_GREEK :: Int +wxLANGUAGE_GREEK = 93 + +wxLANGUAGE_GREENLANDIC :: Int +wxLANGUAGE_GREENLANDIC = 94 + +wxLANGUAGE_GUARANI :: Int +wxLANGUAGE_GUARANI = 95 + +wxLANGUAGE_GUJARATI :: Int +wxLANGUAGE_GUJARATI = 96 + +wxLANGUAGE_HAUSA :: Int +wxLANGUAGE_HAUSA = 97 + +wxLANGUAGE_HEBREW :: Int +wxLANGUAGE_HEBREW = 98 + +wxLANGUAGE_HINDI :: Int +wxLANGUAGE_HINDI = 99 + +wxLANGUAGE_HUNGARIAN :: Int +wxLANGUAGE_HUNGARIAN = 100 + +wxLANGUAGE_ICELANDIC :: Int +wxLANGUAGE_ICELANDIC = 101 + +wxLANGUAGE_INDONESIAN :: Int +wxLANGUAGE_INDONESIAN = 102 + +wxLANGUAGE_INTERLINGUA :: Int +wxLANGUAGE_INTERLINGUA = 103 + +wxLANGUAGE_INTERLINGUE :: Int +wxLANGUAGE_INTERLINGUE = 104 + +wxLANGUAGE_INUKTITUT :: Int +wxLANGUAGE_INUKTITUT = 105 + +wxLANGUAGE_INUPIAK :: Int +wxLANGUAGE_INUPIAK = 106 + +wxLANGUAGE_IRISH :: Int +wxLANGUAGE_IRISH = 107 + +wxLANGUAGE_ITALIAN :: Int +wxLANGUAGE_ITALIAN = 108 + +wxLANGUAGE_ITALIAN_SWISS :: Int +wxLANGUAGE_ITALIAN_SWISS = 109 + +wxLANGUAGE_JAPANESE :: Int +wxLANGUAGE_JAPANESE = 110 + +wxLANGUAGE_JAVANESE :: Int +wxLANGUAGE_JAVANESE = 111 + +wxLANGUAGE_KANNADA :: Int +wxLANGUAGE_KANNADA = 112 + +wxLANGUAGE_KASHMIRI :: Int +wxLANGUAGE_KASHMIRI = 113 + +wxLANGUAGE_KASHMIRI_INDIA :: Int +wxLANGUAGE_KASHMIRI_INDIA = 114 + +wxLANGUAGE_KAZAKH :: Int +wxLANGUAGE_KAZAKH = 115 + +wxLANGUAGE_KERNEWEK :: Int +wxLANGUAGE_KERNEWEK = 116 + +wxLANGUAGE_KINYARWANDA :: Int +wxLANGUAGE_KINYARWANDA = 117 + +wxLANGUAGE_KIRGHIZ :: Int +wxLANGUAGE_KIRGHIZ = 118 + +wxLANGUAGE_KIRUNDI :: Int +wxLANGUAGE_KIRUNDI = 119 + +wxLANGUAGE_KONKANI :: Int +wxLANGUAGE_KONKANI = 120 + +wxLANGUAGE_KOREAN :: Int +wxLANGUAGE_KOREAN = 121 + +wxLANGUAGE_KURDISH :: Int +wxLANGUAGE_KURDISH = 122 + +wxLANGUAGE_LAOTHIAN :: Int +wxLANGUAGE_LAOTHIAN = 123 + +wxLANGUAGE_LATIN :: Int +wxLANGUAGE_LATIN = 124 + +wxLANGUAGE_LATVIAN :: Int +wxLANGUAGE_LATVIAN = 125 + +wxLANGUAGE_LINGALA :: Int +wxLANGUAGE_LINGALA = 126 + +wxLANGUAGE_LITHUANIAN :: Int +wxLANGUAGE_LITHUANIAN = 127 + +wxLANGUAGE_MACEDONIAN :: Int +wxLANGUAGE_MACEDONIAN = 128 + +wxLANGUAGE_MALAGASY :: Int +wxLANGUAGE_MALAGASY = 129 + +wxLANGUAGE_MALAY :: Int +wxLANGUAGE_MALAY = 130 + +wxLANGUAGE_MALAYALAM :: Int +wxLANGUAGE_MALAYALAM = 131 + +wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM :: Int +wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM = 132 + +wxLANGUAGE_MALAY_MALAYSIA :: Int +wxLANGUAGE_MALAY_MALAYSIA = 133 + +wxLANGUAGE_MALTESE :: Int +wxLANGUAGE_MALTESE = 134 + +wxLANGUAGE_MANIPURI :: Int +wxLANGUAGE_MANIPURI = 135 + +wxLANGUAGE_MAORI :: Int +wxLANGUAGE_MAORI = 136 + +wxLANGUAGE_MARATHI :: Int +wxLANGUAGE_MARATHI = 137 + +wxLANGUAGE_MOLDAVIAN :: Int +wxLANGUAGE_MOLDAVIAN = 138 + +wxLANGUAGE_MONGOLIAN :: Int +wxLANGUAGE_MONGOLIAN = 139 + +wxLANGUAGE_NAURU :: Int +wxLANGUAGE_NAURU = 140 + +wxLANGUAGE_NEPALI :: Int +wxLANGUAGE_NEPALI = 141 + +wxLANGUAGE_NEPALI_INDIA :: Int +wxLANGUAGE_NEPALI_INDIA = 142 + +wxLANGUAGE_NORWEGIAN_BOKMAL :: Int +wxLANGUAGE_NORWEGIAN_BOKMAL = 143 + +wxLANGUAGE_NORWEGIAN_NYNORSK :: Int +wxLANGUAGE_NORWEGIAN_NYNORSK = 144 + +wxLANGUAGE_OCCITAN :: Int +wxLANGUAGE_OCCITAN = 145 + +wxLANGUAGE_ORIYA :: Int +wxLANGUAGE_ORIYA = 146 + +wxLANGUAGE_OROMO :: Int +wxLANGUAGE_OROMO = 147 + +wxLANGUAGE_PASHTO :: Int +wxLANGUAGE_PASHTO = 148 + +wxLANGUAGE_POLISH :: Int +wxLANGUAGE_POLISH = 149 + +wxLANGUAGE_PORTUGUESE :: Int +wxLANGUAGE_PORTUGUESE = 150 + +wxLANGUAGE_PORTUGUESE_BRAZILIAN :: Int +wxLANGUAGE_PORTUGUESE_BRAZILIAN = 151 + +wxLANGUAGE_PUNJABI :: Int +wxLANGUAGE_PUNJABI = 152 + +wxLANGUAGE_QUECHUA :: Int +wxLANGUAGE_QUECHUA = 153 + +wxLANGUAGE_RHAETO_ROMANCE :: Int +wxLANGUAGE_RHAETO_ROMANCE = 154 + +wxLANGUAGE_ROMANIAN :: Int +wxLANGUAGE_ROMANIAN = 155 + +wxLANGUAGE_RUSSIAN :: Int +wxLANGUAGE_RUSSIAN = 156 + +wxLANGUAGE_RUSSIAN_UKRAINE :: Int +wxLANGUAGE_RUSSIAN_UKRAINE = 157 + +wxLANGUAGE_SAMOAN :: Int +wxLANGUAGE_SAMOAN = 158 + +wxLANGUAGE_SANGHO :: Int +wxLANGUAGE_SANGHO = 159 + +wxLANGUAGE_SANSKRIT :: Int +wxLANGUAGE_SANSKRIT = 160 + +wxLANGUAGE_SCOTS_GAELIC :: Int +wxLANGUAGE_SCOTS_GAELIC = 161 + +wxLANGUAGE_SERBIAN :: Int +wxLANGUAGE_SERBIAN = 162 + +wxLANGUAGE_SERBIAN_CYRILLIC :: Int +wxLANGUAGE_SERBIAN_CYRILLIC = 163 + +wxLANGUAGE_SERBIAN_LATIN :: Int +wxLANGUAGE_SERBIAN_LATIN = 164 + +wxLANGUAGE_SERBO_CROATIAN :: Int +wxLANGUAGE_SERBO_CROATIAN = 165 + +wxLANGUAGE_SESOTHO :: Int +wxLANGUAGE_SESOTHO = 166 + +wxLANGUAGE_SETSWANA :: Int +wxLANGUAGE_SETSWANA = 167 + +wxLANGUAGE_SHONA :: Int +wxLANGUAGE_SHONA = 168 + +wxLANGUAGE_SINDHI :: Int +wxLANGUAGE_SINDHI = 169 + +wxLANGUAGE_SINHALESE :: Int +wxLANGUAGE_SINHALESE = 170 + +wxLANGUAGE_SISWATI :: Int +wxLANGUAGE_SISWATI = 171 + +wxLANGUAGE_SLOVAK :: Int +wxLANGUAGE_SLOVAK = 172 + +wxLANGUAGE_SLOVENIAN :: Int +wxLANGUAGE_SLOVENIAN = 173 + +wxLANGUAGE_SOMALI :: Int +wxLANGUAGE_SOMALI = 174 + +wxLANGUAGE_SPANISH :: Int +wxLANGUAGE_SPANISH = 175 + +wxLANGUAGE_SPANISH_ARGENTINA :: Int +wxLANGUAGE_SPANISH_ARGENTINA = 176 + +wxLANGUAGE_SPANISH_BOLIVIA :: Int +wxLANGUAGE_SPANISH_BOLIVIA = 177 + +wxLANGUAGE_SPANISH_CHILE :: Int +wxLANGUAGE_SPANISH_CHILE = 178 + +wxLANGUAGE_SPANISH_COLOMBIA :: Int +wxLANGUAGE_SPANISH_COLOMBIA = 179 + +wxLANGUAGE_SPANISH_COSTA_RICA :: Int +wxLANGUAGE_SPANISH_COSTA_RICA = 180 + +wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC :: Int +wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC = 181 + +wxLANGUAGE_SPANISH_ECUADOR :: Int +wxLANGUAGE_SPANISH_ECUADOR = 182 + +wxLANGUAGE_SPANISH_EL_SALVADOR :: Int +wxLANGUAGE_SPANISH_EL_SALVADOR = 183 + +wxLANGUAGE_SPANISH_GUATEMALA :: Int +wxLANGUAGE_SPANISH_GUATEMALA = 184 + +wxLANGUAGE_SPANISH_HONDURAS :: Int +wxLANGUAGE_SPANISH_HONDURAS = 185 + +wxLANGUAGE_SPANISH_MEXICAN :: Int +wxLANGUAGE_SPANISH_MEXICAN = 186 + +wxLANGUAGE_SPANISH_MODERN :: Int +wxLANGUAGE_SPANISH_MODERN = 187 + +wxLANGUAGE_SPANISH_NICARAGUA :: Int +wxLANGUAGE_SPANISH_NICARAGUA = 188 + +wxLANGUAGE_SPANISH_PANAMA :: Int +wxLANGUAGE_SPANISH_PANAMA = 189 + +wxLANGUAGE_SPANISH_PARAGUAY :: Int +wxLANGUAGE_SPANISH_PARAGUAY = 190 + +wxLANGUAGE_SPANISH_PERU :: Int +wxLANGUAGE_SPANISH_PERU = 191 + +wxLANGUAGE_SPANISH_PUERTO_RICO :: Int +wxLANGUAGE_SPANISH_PUERTO_RICO = 192 + +wxLANGUAGE_SPANISH_URUGUAY :: Int +wxLANGUAGE_SPANISH_URUGUAY = 193 + +wxLANGUAGE_SPANISH_US :: Int +wxLANGUAGE_SPANISH_US = 194 + +wxLANGUAGE_SPANISH_VENEZUELA :: Int +wxLANGUAGE_SPANISH_VENEZUELA = 195 + +wxLANGUAGE_SUNDANESE :: Int +wxLANGUAGE_SUNDANESE = 196 + +wxLANGUAGE_SWAHILI :: Int +wxLANGUAGE_SWAHILI = 197 + +wxLANGUAGE_SWEDISH :: Int +wxLANGUAGE_SWEDISH = 198 + +wxLANGUAGE_SWEDISH_FINLAND :: Int +wxLANGUAGE_SWEDISH_FINLAND = 199 + +wxLANGUAGE_TAGALOG :: Int +wxLANGUAGE_TAGALOG = 200 + +wxLANGUAGE_TAJIK :: Int +wxLANGUAGE_TAJIK = 201 + +wxLANGUAGE_TAMIL :: Int +wxLANGUAGE_TAMIL = 202 + +wxLANGUAGE_TATAR :: Int +wxLANGUAGE_TATAR = 203 + +wxLANGUAGE_TELUGU :: Int +wxLANGUAGE_TELUGU = 204 + +wxLANGUAGE_THAI :: Int +wxLANGUAGE_THAI = 205 + +wxLANGUAGE_TIBETAN :: Int +wxLANGUAGE_TIBETAN = 206 + +wxLANGUAGE_TIGRINYA :: Int +wxLANGUAGE_TIGRINYA = 207 + +wxLANGUAGE_TONGA :: Int +wxLANGUAGE_TONGA = 208 + +wxLANGUAGE_TSONGA :: Int +wxLANGUAGE_TSONGA = 209 + +wxLANGUAGE_TURKISH :: Int +wxLANGUAGE_TURKISH = 210 + +wxLANGUAGE_TURKMEN :: Int +wxLANGUAGE_TURKMEN = 211 + +wxLANGUAGE_TWI :: Int +wxLANGUAGE_TWI = 212 + +wxLANGUAGE_UIGHUR :: Int +wxLANGUAGE_UIGHUR = 213 + +wxLANGUAGE_UKRAINIAN :: Int +wxLANGUAGE_UKRAINIAN = 214 + +wxLANGUAGE_URDU :: Int +wxLANGUAGE_URDU = 215 + +wxLANGUAGE_URDU_INDIA :: Int +wxLANGUAGE_URDU_INDIA = 216 + +wxLANGUAGE_URDU_PAKISTAN :: Int +wxLANGUAGE_URDU_PAKISTAN = 217 + +wxLANGUAGE_UZBEK :: Int +wxLANGUAGE_UZBEK = 218 + +wxLANGUAGE_UZBEK_CYRILLIC :: Int +wxLANGUAGE_UZBEK_CYRILLIC = 219 + +wxLANGUAGE_UZBEK_LATIN :: Int +wxLANGUAGE_UZBEK_LATIN = 220 + +wxLANGUAGE_VIETNAMESE :: Int +wxLANGUAGE_VIETNAMESE = 221 + +wxLANGUAGE_VOLAPUK :: Int +wxLANGUAGE_VOLAPUK = 222 + +wxLANGUAGE_WELSH :: Int +wxLANGUAGE_WELSH = 223 + +wxLANGUAGE_WOLOF :: Int +wxLANGUAGE_WOLOF = 224 + +wxLANGUAGE_XHOSA :: Int +wxLANGUAGE_XHOSA = 225 + +wxLANGUAGE_YIDDISH :: Int +wxLANGUAGE_YIDDISH = 226 + +wxLANGUAGE_YORUBA :: Int +wxLANGUAGE_YORUBA = 227 + +wxLANGUAGE_ZHUANG :: Int +wxLANGUAGE_ZHUANG = 228 + +wxLANGUAGE_ZULU :: Int +wxLANGUAGE_ZULU = 229 + +wxLANGUAGE_USER_DEFINE :: Int +wxLANGUAGE_USER_DEFINE = 230 + +wxLOCALE_THOUSANDS_SEP :: Int +wxLOCALE_THOUSANDS_SEP = 0 + +wxLOCALE_DECIMAL_POINT :: Int +wxLOCALE_DECIMAL_POINT = 1 + +wxLOCALE_LOAD_DEFAULT :: Int +wxLOCALE_LOAD_DEFAULT = 1 + +wxLOCALE_CONV_ENCODING :: Int +wxLOCALE_CONV_ENCODING = 2 + +wxSTC_INVALID_POSITION :: Int +wxSTC_INVALID_POSITION = (-1) + +wxSTC_START :: Int +wxSTC_START = 2000 + +wxSTC_OPTIONAL_START :: Int +wxSTC_OPTIONAL_START = 3000 + +wxSTC_LEXER_START :: Int +wxSTC_LEXER_START = 4000 + +wxSTC_WS_INVISIBLE :: Int +wxSTC_WS_INVISIBLE = 0 + +wxSTC_WS_VISIBLEALWAYS :: Int +wxSTC_WS_VISIBLEALWAYS = 1 + +wxSTC_WS_VISIBLEAFTERINDENT :: Int +wxSTC_WS_VISIBLEAFTERINDENT = 2 + +wxSTC_EOL_CRLF :: Int +wxSTC_EOL_CRLF = 0 + +wxSTC_EOL_CR :: Int +wxSTC_EOL_CR = 1 + +wxSTC_EOL_LF :: Int +wxSTC_EOL_LF = 2 + +wxSTC_CP_UTF8 :: Int +wxSTC_CP_UTF8 = 65001 + +wxSTC_CP_DBCS :: Int +wxSTC_CP_DBCS = 1 + +wxSTC_MARKER_MAX :: Int +wxSTC_MARKER_MAX = 31 + +wxSTC_MARK_CIRCLE :: Int +wxSTC_MARK_CIRCLE = 0 + +wxSTC_MARK_ROUNDRECT :: Int +wxSTC_MARK_ROUNDRECT = 1 + +wxSTC_MARK_ARROW :: Int +wxSTC_MARK_ARROW = 2 + +wxSTC_MARK_SMALLRECT :: Int +wxSTC_MARK_SMALLRECT = 3 + +wxSTC_MARK_SHORTARROW :: Int +wxSTC_MARK_SHORTARROW = 4 + +wxSTC_MARK_EMPTY :: Int +wxSTC_MARK_EMPTY = 5 + +wxSTC_MARK_ARROWDOWN :: Int +wxSTC_MARK_ARROWDOWN = 6 + +wxSTC_MARK_MINUS :: Int +wxSTC_MARK_MINUS = 7 + +wxSTC_MARK_PLUS :: Int +wxSTC_MARK_PLUS = 8 + +wxSTC_MARK_VLINE :: Int +wxSTC_MARK_VLINE = 9 + +wxSTC_MARK_LCORNER :: Int +wxSTC_MARK_LCORNER = 10 + +wxSTC_MARK_TCORNER :: Int +wxSTC_MARK_TCORNER = 11 + +wxSTC_MARK_BOXPLUS :: Int +wxSTC_MARK_BOXPLUS = 12 + +wxSTC_MARK_BOXPLUSCONNECTED :: Int +wxSTC_MARK_BOXPLUSCONNECTED = 13 + +wxSTC_MARK_BOXMINUS :: Int +wxSTC_MARK_BOXMINUS = 14 + +wxSTC_MARK_BOXMINUSCONNECTED :: Int +wxSTC_MARK_BOXMINUSCONNECTED = 15 + +wxSTC_MARK_LCORNERCURVE :: Int +wxSTC_MARK_LCORNERCURVE = 16 + +wxSTC_MARK_TCORNERCURVE :: Int +wxSTC_MARK_TCORNERCURVE = 17 + +wxSTC_MARK_CIRCLEPLUS :: Int +wxSTC_MARK_CIRCLEPLUS = 18 + +wxSTC_MARK_CIRCLEPLUSCONNECTED :: Int +wxSTC_MARK_CIRCLEPLUSCONNECTED = 19 + +wxSTC_MARK_CIRCLEMINUS :: Int +wxSTC_MARK_CIRCLEMINUS = 20 + +wxSTC_MARK_CIRCLEMINUSCONNECTED :: Int +wxSTC_MARK_CIRCLEMINUSCONNECTED = 21 + +wxSTC_MARK_BACKGROUND :: Int +wxSTC_MARK_BACKGROUND = 22 + +wxSTC_MARK_DOTDOTDOT :: Int +wxSTC_MARK_DOTDOTDOT = 23 + +wxSTC_MARK_ARROWS :: Int +wxSTC_MARK_ARROWS = 24 + +wxSTC_MARK_PIXMAP :: Int +wxSTC_MARK_PIXMAP = 25 + +wxSTC_MARK_CHARACTER :: Int +wxSTC_MARK_CHARACTER = 10000 + +wxSTC_MARKNUM_FOLDEREND :: Int +wxSTC_MARKNUM_FOLDEREND = 25 + +wxSTC_MARKNUM_FOLDEROPENMID :: Int +wxSTC_MARKNUM_FOLDEROPENMID = 26 + +wxSTC_MARKNUM_FOLDERMIDTAIL :: Int +wxSTC_MARKNUM_FOLDERMIDTAIL = 27 + +wxSTC_MARKNUM_FOLDERTAIL :: Int +wxSTC_MARKNUM_FOLDERTAIL = 28 + +wxSTC_MARKNUM_FOLDERSUB :: Int +wxSTC_MARKNUM_FOLDERSUB = 29 + +wxSTC_MARKNUM_FOLDER :: Int +wxSTC_MARKNUM_FOLDER = 30 + +wxSTC_MARKNUM_FOLDEROPEN :: Int +wxSTC_MARKNUM_FOLDEROPEN = 31 + +wxSTC_MASK_FOLDERS :: Int +wxSTC_MASK_FOLDERS = (-33554432) + +wxSTC_MARGIN_SYMBOL :: Int +wxSTC_MARGIN_SYMBOL = 0 + +wxSTC_MARGIN_NUMBER :: Int +wxSTC_MARGIN_NUMBER = 1 + +wxSTC_STYLE_DEFAULT :: Int +wxSTC_STYLE_DEFAULT = 32 + +wxSTC_STYLE_LINENUMBER :: Int +wxSTC_STYLE_LINENUMBER = 33 + +wxSTC_STYLE_BRACELIGHT :: Int +wxSTC_STYLE_BRACELIGHT = 34 + +wxSTC_STYLE_BRACEBAD :: Int +wxSTC_STYLE_BRACEBAD = 35 + +wxSTC_STYLE_CONTROLCHAR :: Int +wxSTC_STYLE_CONTROLCHAR = 36 + +wxSTC_STYLE_INDENTGUIDE :: Int +wxSTC_STYLE_INDENTGUIDE = 37 + +wxSTC_STYLE_LASTPREDEFINED :: Int +wxSTC_STYLE_LASTPREDEFINED = 39 + +wxSTC_STYLE_MAX :: Int +wxSTC_STYLE_MAX = 127 + +wxSTC_CHARSET_ANSI :: Int +wxSTC_CHARSET_ANSI = 0 + +wxSTC_CHARSET_DEFAULT :: Int +wxSTC_CHARSET_DEFAULT = 1 + +wxSTC_CHARSET_BALTIC :: Int +wxSTC_CHARSET_BALTIC = 186 + +wxSTC_CHARSET_CHINESEBIG5 :: Int +wxSTC_CHARSET_CHINESEBIG5 = 136 + +wxSTC_CHARSET_EASTEUROPE :: Int +wxSTC_CHARSET_EASTEUROPE = 238 + +wxSTC_CHARSET_GB2312 :: Int +wxSTC_CHARSET_GB2312 = 134 + +wxSTC_CHARSET_GREEK :: Int +wxSTC_CHARSET_GREEK = 161 + +wxSTC_CHARSET_HANGUL :: Int +wxSTC_CHARSET_HANGUL = 129 + +wxSTC_CHARSET_MAC :: Int +wxSTC_CHARSET_MAC = 77 + +wxSTC_CHARSET_OEM :: Int +wxSTC_CHARSET_OEM = 255 + +wxSTC_CHARSET_RUSSIAN :: Int +wxSTC_CHARSET_RUSSIAN = 204 + +wxSTC_CHARSET_SHIFTJIS :: Int +wxSTC_CHARSET_SHIFTJIS = 128 + +wxSTC_CHARSET_SYMBOL :: Int +wxSTC_CHARSET_SYMBOL = 2 + +wxSTC_CHARSET_TURKISH :: Int +wxSTC_CHARSET_TURKISH = 162 + +wxSTC_CHARSET_JOHAB :: Int +wxSTC_CHARSET_JOHAB = 130 + +wxSTC_CHARSET_HEBREW :: Int +wxSTC_CHARSET_HEBREW = 177 + +wxSTC_CHARSET_ARABIC :: Int +wxSTC_CHARSET_ARABIC = 178 + +wxSTC_CHARSET_VIETNAMESE :: Int +wxSTC_CHARSET_VIETNAMESE = 163 + +wxSTC_CHARSET_THAI :: Int +wxSTC_CHARSET_THAI = 222 + +wxSTC_CASE_MIXED :: Int +wxSTC_CASE_MIXED = 0 + +wxSTC_CASE_UPPER :: Int +wxSTC_CASE_UPPER = 1 + +wxSTC_CASE_LOWER :: Int +wxSTC_CASE_LOWER = 2 + +wxSTC_INDIC_MAX :: Int +wxSTC_INDIC_MAX = 7 + +wxSTC_INDIC_PLAIN :: Int +wxSTC_INDIC_PLAIN = 0 + +wxSTC_INDIC_SQUIGGLE :: Int +wxSTC_INDIC_SQUIGGLE = 1 + +wxSTC_INDIC_TT :: Int +wxSTC_INDIC_TT = 2 + +wxSTC_INDIC_DIAGONAL :: Int +wxSTC_INDIC_DIAGONAL = 3 + +wxSTC_INDIC_STRIKE :: Int +wxSTC_INDIC_STRIKE = 4 + +wxSTC_INDIC_HIDDEN :: Int +wxSTC_INDIC_HIDDEN = 5 + +wxSTC_INDIC0_MASK :: Int +wxSTC_INDIC0_MASK = 32 + +wxSTC_INDIC1_MASK :: Int +wxSTC_INDIC1_MASK = 64 + +wxSTC_INDIC2_MASK :: Int +wxSTC_INDIC2_MASK = 128 + +wxSTC_INDICS_MASK :: Int +wxSTC_INDICS_MASK = 224 + +wxSTC_PRINT_NORMAL :: Int +wxSTC_PRINT_NORMAL = 0 + +wxSTC_PRINT_INVERTLIGHT :: Int +wxSTC_PRINT_INVERTLIGHT = 1 + +wxSTC_PRINT_BLACKONWHITE :: Int +wxSTC_PRINT_BLACKONWHITE = 2 + +wxSTC_PRINT_COLOURONWHITE :: Int +wxSTC_PRINT_COLOURONWHITE = 3 + +wxSTC_PRINT_COLOURONWHITEDEFAULTBG :: Int +wxSTC_PRINT_COLOURONWHITEDEFAULTBG = 4 + +wxSTC_FIND_WHOLEWORD :: Int +wxSTC_FIND_WHOLEWORD = 2 + +wxSTC_FIND_MATCHCASE :: Int +wxSTC_FIND_MATCHCASE = 4 + +wxSTC_FIND_WORDSTART :: Int +wxSTC_FIND_WORDSTART = 1048576 + +wxSTC_FIND_REGEXP :: Int +wxSTC_FIND_REGEXP = 2097152 + +wxSTC_FIND_POSIX :: Int +wxSTC_FIND_POSIX = 4194304 + +wxSTC_FOLDLEVELBASE :: Int +wxSTC_FOLDLEVELBASE = 1024 + +wxSTC_FOLDLEVELWHITEFLAG :: Int +wxSTC_FOLDLEVELWHITEFLAG = 4096 + +wxSTC_FOLDLEVELHEADERFLAG :: Int +wxSTC_FOLDLEVELHEADERFLAG = 8192 + +wxSTC_FOLDLEVELBOXHEADERFLAG :: Int +wxSTC_FOLDLEVELBOXHEADERFLAG = 16384 + +wxSTC_FOLDLEVELBOXFOOTERFLAG :: Int +wxSTC_FOLDLEVELBOXFOOTERFLAG = 32768 + +wxSTC_FOLDLEVELCONTRACTED :: Int +wxSTC_FOLDLEVELCONTRACTED = 65536 + +wxSTC_FOLDLEVELUNINDENT :: Int +wxSTC_FOLDLEVELUNINDENT = 131072 + +wxSTC_FOLDLEVELNUMBERMASK :: Int +wxSTC_FOLDLEVELNUMBERMASK = 4095 + +wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED :: Int +wxSTC_FOLDFLAG_LINEBEFORE_EXPANDED = 2 + +wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED :: Int +wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED = 4 + +wxSTC_FOLDFLAG_LINEAFTER_EXPANDED :: Int +wxSTC_FOLDFLAG_LINEAFTER_EXPANDED = 8 + +wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED :: Int +wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED = 16 + +wxSTC_FOLDFLAG_LEVELNUMBERS :: Int +wxSTC_FOLDFLAG_LEVELNUMBERS = 64 + +wxSTC_FOLDFLAG_BOX :: Int +wxSTC_FOLDFLAG_BOX = 1 + +wxSTC_TIME_FOREVER :: Int +wxSTC_TIME_FOREVER = 10000000 + +wxSTC_WRAP_NONE :: Int +wxSTC_WRAP_NONE = 0 + +wxSTC_WRAP_WORD :: Int +wxSTC_WRAP_WORD = 1 + +wxSTC_CACHE_NONE :: Int +wxSTC_CACHE_NONE = 0 + +wxSTC_CACHE_CARET :: Int +wxSTC_CACHE_CARET = 1 + +wxSTC_CACHE_PAGE :: Int +wxSTC_CACHE_PAGE = 2 + +wxSTC_CACHE_DOCUMENT :: Int +wxSTC_CACHE_DOCUMENT = 3 + +wxSTC_EDGE_NONE :: Int +wxSTC_EDGE_NONE = 0 + +wxSTC_EDGE_LINE :: Int +wxSTC_EDGE_LINE = 1 + +wxSTC_EDGE_BACKGROUND :: Int +wxSTC_EDGE_BACKGROUND = 2 + +wxSTC_CURSORNORMAL :: Int +wxSTC_CURSORNORMAL = (-1) + +wxSTC_CURSORWAIT :: Int +wxSTC_CURSORWAIT = 4 + +wxSTC_VISIBLE_SLOP :: Int +wxSTC_VISIBLE_SLOP = 1 + +wxSTC_VISIBLE_STRICT :: Int +wxSTC_VISIBLE_STRICT = 4 + +wxSTC_CARET_SLOP :: Int +wxSTC_CARET_SLOP = 1 + +wxSTC_CARET_STRICT :: Int +wxSTC_CARET_STRICT = 4 + +wxSTC_CARET_JUMPS :: Int +wxSTC_CARET_JUMPS = 16 + +wxSTC_CARET_EVEN :: Int +wxSTC_CARET_EVEN = 8 + +wxSTC_SEL_STREAM :: Int +wxSTC_SEL_STREAM = 0 + +wxSTC_SEL_RECTANGLE :: Int +wxSTC_SEL_RECTANGLE = 1 + +wxSTC_SEL_LINES :: Int +wxSTC_SEL_LINES = 2 + +wxSTC_KEYWORDSET_MAX :: Int +wxSTC_KEYWORDSET_MAX = 8 + +wxSTC_MOD_INSERTTEXT :: Int +wxSTC_MOD_INSERTTEXT = 1 + +wxSTC_MOD_DELETETEXT :: Int +wxSTC_MOD_DELETETEXT = 2 + +wxSTC_MOD_CHANGESTYLE :: Int +wxSTC_MOD_CHANGESTYLE = 4 + +wxSTC_MOD_CHANGEFOLD :: Int +wxSTC_MOD_CHANGEFOLD = 8 + +wxSTC_PERFORMED_USER :: Int +wxSTC_PERFORMED_USER = 16 + +wxSTC_PERFORMED_UNDO :: Int +wxSTC_PERFORMED_UNDO = 32 + +wxSTC_PERFORMED_REDO :: Int +wxSTC_PERFORMED_REDO = 64 + +wxSTC_LASTSTEPINUNDOREDO :: Int +wxSTC_LASTSTEPINUNDOREDO = 256 + +wxSTC_MOD_CHANGEMARKER :: Int +wxSTC_MOD_CHANGEMARKER = 512 + +wxSTC_MOD_BEFOREINSERT :: Int +wxSTC_MOD_BEFOREINSERT = 1024 + +wxSTC_MOD_BEFOREDELETE :: Int +wxSTC_MOD_BEFOREDELETE = 2048 + +wxSTC_MODEVENTMASKALL :: Int +wxSTC_MODEVENTMASKALL = 3959 + +wxSTC_KEY_DOWN :: Int +wxSTC_KEY_DOWN = 300 + +wxSTC_KEY_UP :: Int +wxSTC_KEY_UP = 301 + +wxSTC_KEY_LEFT :: Int +wxSTC_KEY_LEFT = 302 + +wxSTC_KEY_RIGHT :: Int +wxSTC_KEY_RIGHT = 303 + +wxSTC_KEY_HOME :: Int +wxSTC_KEY_HOME = 304 + +wxSTC_KEY_END :: Int +wxSTC_KEY_END = 305 + +wxSTC_KEY_PRIOR :: Int +wxSTC_KEY_PRIOR = 306 + +wxSTC_KEY_NEXT :: Int +wxSTC_KEY_NEXT = 307 + +wxSTC_KEY_DELETE :: Int +wxSTC_KEY_DELETE = 308 + +wxSTC_KEY_INSERT :: Int +wxSTC_KEY_INSERT = 309 + +wxSTC_KEY_ESCAPE :: Int +wxSTC_KEY_ESCAPE = 7 + +wxSTC_KEY_BACK :: Int +wxSTC_KEY_BACK = 8 + +wxSTC_KEY_TAB :: Int +wxSTC_KEY_TAB = 9 + +wxSTC_KEY_RETURN :: Int +wxSTC_KEY_RETURN = 13 + +wxSTC_KEY_ADD :: Int +wxSTC_KEY_ADD = 310 + +wxSTC_KEY_SUBTRACT :: Int +wxSTC_KEY_SUBTRACT = 311 + +wxSTC_KEY_DIVIDE :: Int +wxSTC_KEY_DIVIDE = 312 + +wxSTC_SCMOD_SHIFT :: Int +wxSTC_SCMOD_SHIFT = 1 + +wxSTC_SCMOD_CTRL :: Int +wxSTC_SCMOD_CTRL = 2 + +wxSTC_SCMOD_ALT :: Int +wxSTC_SCMOD_ALT = 4 + +wxSTC_LEX_CONTAINER :: Int +wxSTC_LEX_CONTAINER = 0 + +wxSTC_LEX_NULL :: Int +wxSTC_LEX_NULL = 1 + +wxSTC_LEX_PYTHON :: Int +wxSTC_LEX_PYTHON = 2 + +wxSTC_LEX_CPP :: Int +wxSTC_LEX_CPP = 3 + +wxSTC_LEX_HTML :: Int +wxSTC_LEX_HTML = 4 + +wxSTC_LEX_XML :: Int +wxSTC_LEX_XML = 5 + +wxSTC_LEX_PERL :: Int +wxSTC_LEX_PERL = 6 + +wxSTC_LEX_SQL :: Int +wxSTC_LEX_SQL = 7 + +wxSTC_LEX_VB :: Int +wxSTC_LEX_VB = 8 + +wxSTC_LEX_PROPERTIES :: Int +wxSTC_LEX_PROPERTIES = 9 + +wxSTC_LEX_ERRORLIST :: Int +wxSTC_LEX_ERRORLIST = 10 + +wxSTC_LEX_MAKEFILE :: Int +wxSTC_LEX_MAKEFILE = 11 + +wxSTC_LEX_BATCH :: Int +wxSTC_LEX_BATCH = 12 + +wxSTC_LEX_XCODE :: Int +wxSTC_LEX_XCODE = 13 + +wxSTC_LEX_LATEX :: Int +wxSTC_LEX_LATEX = 14 + +wxSTC_LEX_LUA :: Int +wxSTC_LEX_LUA = 15 + +wxSTC_LEX_DIFF :: Int +wxSTC_LEX_DIFF = 16 + +wxSTC_LEX_CONF :: Int +wxSTC_LEX_CONF = 17 + +wxSTC_LEX_PASCAL :: Int +wxSTC_LEX_PASCAL = 18 + +wxSTC_LEX_AVE :: Int +wxSTC_LEX_AVE = 19 + +wxSTC_LEX_ADA :: Int +wxSTC_LEX_ADA = 20 + +wxSTC_LEX_LISP :: Int +wxSTC_LEX_LISP = 21 + +wxSTC_LEX_RUBY :: Int +wxSTC_LEX_RUBY = 22 + +wxSTC_LEX_EIFFEL :: Int +wxSTC_LEX_EIFFEL = 23 + +wxSTC_LEX_EIFFELKW :: Int +wxSTC_LEX_EIFFELKW = 24 + +wxSTC_LEX_TCL :: Int +wxSTC_LEX_TCL = 25 + +wxSTC_LEX_NNCRONTAB :: Int +wxSTC_LEX_NNCRONTAB = 26 + +wxSTC_LEX_BULLANT :: Int +wxSTC_LEX_BULLANT = 27 + +wxSTC_LEX_VBSCRIPT :: Int +wxSTC_LEX_VBSCRIPT = 28 + +wxSTC_LEX_ASP :: Int +wxSTC_LEX_ASP = 29 + +wxSTC_LEX_PHP :: Int +wxSTC_LEX_PHP = 30 + +wxSTC_LEX_BAAN :: Int +wxSTC_LEX_BAAN = 31 + +wxSTC_LEX_MATLAB :: Int +wxSTC_LEX_MATLAB = 32 + +wxSTC_LEX_SCRIPTOL :: Int +wxSTC_LEX_SCRIPTOL = 33 + +wxSTC_LEX_ASM :: Int +wxSTC_LEX_ASM = 34 + +wxSTC_LEX_CPPNOCASE :: Int +wxSTC_LEX_CPPNOCASE = 35 + +wxSTC_LEX_FORTRAN :: Int +wxSTC_LEX_FORTRAN = 36 + +wxSTC_LEX_F77 :: Int +wxSTC_LEX_F77 = 37 + +wxSTC_LEX_CSS :: Int +wxSTC_LEX_CSS = 38 + +wxSTC_LEX_POV :: Int +wxSTC_LEX_POV = 39 + +wxSTC_LEX_LOUT :: Int +wxSTC_LEX_LOUT = 40 + +wxSTC_LEX_ESCRIPT :: Int +wxSTC_LEX_ESCRIPT = 41 + +wxSTC_LEX_PS :: Int +wxSTC_LEX_PS = 42 + +wxSTC_LEX_NSIS :: Int +wxSTC_LEX_NSIS = 43 + +wxSTC_LEX_MMIXAL :: Int +wxSTC_LEX_MMIXAL = 44 + +wxSTC_LEX_PHPSCRIPT :: Int +wxSTC_LEX_PHPSCRIPT = 69 + +wxSTC_LEX_TADS3 :: Int +wxSTC_LEX_TADS3 = 70 + +wxSTC_LEX_REBOL :: Int +wxSTC_LEX_REBOL = 71 + +wxSTC_LEX_SMALLTALK :: Int +wxSTC_LEX_SMALLTALK = 72 + +wxSTC_LEX_FLAGSHIP :: Int +wxSTC_LEX_FLAGSHIP = 73 + +wxSTC_LEX_CSOUND :: Int +wxSTC_LEX_CSOUND = 74 + +wxSTC_LEX_FREEBASIC :: Int +wxSTC_LEX_FREEBASIC = 75 + +wxSTC_LEX_AUTOMATIC :: Int +wxSTC_LEX_AUTOMATIC = 1000 + +wxSTC_LEX_HASKELL :: Int +wxSTC_LEX_HASKELL = 68 + +wxSTC_P_DEFAULT :: Int +wxSTC_P_DEFAULT = 0 + +wxSTC_P_COMMENTLINE :: Int +wxSTC_P_COMMENTLINE = 1 + +wxSTC_P_NUMBER :: Int +wxSTC_P_NUMBER = 2 + +wxSTC_P_STRING :: Int +wxSTC_P_STRING = 3 + +wxSTC_P_CHARACTER :: Int +wxSTC_P_CHARACTER = 4 + +wxSTC_P_WORD :: Int +wxSTC_P_WORD = 5 + +wxSTC_P_TRIPLE :: Int +wxSTC_P_TRIPLE = 6 + +wxSTC_P_TRIPLEDOUBLE :: Int +wxSTC_P_TRIPLEDOUBLE = 7 + +wxSTC_P_CLASSNAME :: Int +wxSTC_P_CLASSNAME = 8 + +wxSTC_P_DEFNAME :: Int +wxSTC_P_DEFNAME = 9 + +wxSTC_P_OPERATOR :: Int +wxSTC_P_OPERATOR = 10 + +wxSTC_P_IDENTIFIER :: Int +wxSTC_P_IDENTIFIER = 11 + +wxSTC_P_COMMENTBLOCK :: Int +wxSTC_P_COMMENTBLOCK = 12 + +wxSTC_P_STRINGEOL :: Int +wxSTC_P_STRINGEOL = 13 + +wxSTC_C_DEFAULT :: Int +wxSTC_C_DEFAULT = 0 + +wxSTC_C_COMMENT :: Int +wxSTC_C_COMMENT = 1 + +wxSTC_C_COMMENTLINE :: Int +wxSTC_C_COMMENTLINE = 2 + +wxSTC_C_COMMENTDOC :: Int +wxSTC_C_COMMENTDOC = 3 + +wxSTC_C_NUMBER :: Int +wxSTC_C_NUMBER = 4 + +wxSTC_C_WORD :: Int +wxSTC_C_WORD = 5 + +wxSTC_C_STRING :: Int +wxSTC_C_STRING = 6 + +wxSTC_C_CHARACTER :: Int +wxSTC_C_CHARACTER = 7 + +wxSTC_C_UUID :: Int +wxSTC_C_UUID = 8 + +wxSTC_C_PREPROCESSOR :: Int +wxSTC_C_PREPROCESSOR = 9 + +wxSTC_C_OPERATOR :: Int +wxSTC_C_OPERATOR = 10 + +wxSTC_C_IDENTIFIER :: Int +wxSTC_C_IDENTIFIER = 11 + +wxSTC_C_STRINGEOL :: Int +wxSTC_C_STRINGEOL = 12 + +wxSTC_C_VERBATIM :: Int +wxSTC_C_VERBATIM = 13 + +wxSTC_C_REGEX :: Int +wxSTC_C_REGEX = 14 + +wxSTC_C_COMMENTLINEDOC :: Int +wxSTC_C_COMMENTLINEDOC = 15 + +wxSTC_C_WORD2 :: Int +wxSTC_C_WORD2 = 16 + +wxSTC_C_COMMENTDOCKEYWORD :: Int +wxSTC_C_COMMENTDOCKEYWORD = 17 + +wxSTC_C_COMMENTDOCKEYWORDERROR :: Int +wxSTC_C_COMMENTDOCKEYWORDERROR = 18 + +wxSTC_C_GLOBALCLASS :: Int +wxSTC_C_GLOBALCLASS = 19 + +wxSTC_H_DEFAULT :: Int +wxSTC_H_DEFAULT = 0 + +wxSTC_H_TAG :: Int +wxSTC_H_TAG = 1 + +wxSTC_H_TAGUNKNOWN :: Int +wxSTC_H_TAGUNKNOWN = 2 + +wxSTC_H_ATTRIBUTE :: Int +wxSTC_H_ATTRIBUTE = 3 + +wxSTC_H_ATTRIBUTEUNKNOWN :: Int +wxSTC_H_ATTRIBUTEUNKNOWN = 4 + +wxSTC_H_NUMBER :: Int +wxSTC_H_NUMBER = 5 + +wxSTC_H_DOUBLESTRING :: Int +wxSTC_H_DOUBLESTRING = 6 + +wxSTC_H_SINGLESTRING :: Int +wxSTC_H_SINGLESTRING = 7 + +wxSTC_H_OTHER :: Int +wxSTC_H_OTHER = 8 + +wxSTC_H_COMMENT :: Int +wxSTC_H_COMMENT = 9 + +wxSTC_H_ENTITY :: Int +wxSTC_H_ENTITY = 10 + +wxSTC_H_TAGEND :: Int +wxSTC_H_TAGEND = 11 + +wxSTC_H_XMLSTART :: Int +wxSTC_H_XMLSTART = 12 + +wxSTC_H_XMLEND :: Int +wxSTC_H_XMLEND = 13 + +wxSTC_H_SCRIPT :: Int +wxSTC_H_SCRIPT = 14 + +wxSTC_H_ASP :: Int +wxSTC_H_ASP = 15 + +wxSTC_H_ASPAT :: Int +wxSTC_H_ASPAT = 16 + +wxSTC_H_CDATA :: Int +wxSTC_H_CDATA = 17 + +wxSTC_H_QUESTION :: Int +wxSTC_H_QUESTION = 18 + +wxSTC_H_VALUE :: Int +wxSTC_H_VALUE = 19 + +wxSTC_H_XCCOMMENT :: Int +wxSTC_H_XCCOMMENT = 20 + +wxSTC_H_SGML_DEFAULT :: Int +wxSTC_H_SGML_DEFAULT = 21 + +wxSTC_H_SGML_COMMAND :: Int +wxSTC_H_SGML_COMMAND = 22 + +wxSTC_H_SGML_1ST_PARAM :: Int +wxSTC_H_SGML_1ST_PARAM = 23 + +wxSTC_H_SGML_DOUBLESTRING :: Int +wxSTC_H_SGML_DOUBLESTRING = 24 + +wxSTC_H_SGML_SIMPLESTRING :: Int +wxSTC_H_SGML_SIMPLESTRING = 25 + +wxSTC_H_SGML_ERROR :: Int +wxSTC_H_SGML_ERROR = 26 + +wxSTC_H_SGML_SPECIAL :: Int +wxSTC_H_SGML_SPECIAL = 27 + +wxSTC_H_SGML_ENTITY :: Int +wxSTC_H_SGML_ENTITY = 28 + +wxSTC_H_SGML_COMMENT :: Int +wxSTC_H_SGML_COMMENT = 29 + +wxSTC_H_SGML_1ST_PARAM_COMMENT :: Int +wxSTC_H_SGML_1ST_PARAM_COMMENT = 30 + +wxSTC_H_SGML_BLOCK_DEFAULT :: Int +wxSTC_H_SGML_BLOCK_DEFAULT = 31 + +wxSTC_HA_DEFAULT :: Int +wxSTC_HA_DEFAULT = 0 + +wxSTC_HA_IDENTIFIER :: Int +wxSTC_HA_IDENTIFIER = 1 + +wxSTC_HA_KEYWORD :: Int +wxSTC_HA_KEYWORD = 2 + +wxSTC_HA_NUMBER :: Int +wxSTC_HA_NUMBER = 3 + +wxSTC_HA_STRING :: Int +wxSTC_HA_STRING = 4 + +wxSTC_HA_CHARACTER :: Int +wxSTC_HA_CHARACTER = 5 + +wxSTC_HA_CLASS :: Int +wxSTC_HA_CLASS = 6 + +wxSTC_HA_MODULE :: Int +wxSTC_HA_MODULE = 7 + +wxSTC_HA_CAPITAL :: Int +wxSTC_HA_CAPITAL = 8 + +wxSTC_HA_DATA :: Int +wxSTC_HA_DATA = 9 + +wxSTC_HA_IMPORT :: Int +wxSTC_HA_IMPORT = 10 + +wxSTC_HA_OPERATOR :: Int +wxSTC_HA_OPERATOR = 11 + +wxSTC_HA_INSTANCE :: Int +wxSTC_HA_INSTANCE = 12 + +wxSTC_HA_COMMENTLINE :: Int +wxSTC_HA_COMMENTLINE = 13 + +wxSTC_HA_COMMENTBLOCK :: Int +wxSTC_HA_COMMENTBLOCK = 14 + +wxSTC_HA_COMMENTBLOCK2 :: Int +wxSTC_HA_COMMENTBLOCK2 = 15 + +wxSTC_HA_COMMENTBLOCK3 :: Int +wxSTC_HA_COMMENTBLOCK3 = 16 + +wxSTC_HA_PREPROCESSOR :: Int +wxSTC_HA_PREPROCESSOR = 17 + +wxSTC_HJ_START :: Int +wxSTC_HJ_START = 40 + +wxSTC_HJ_DEFAULT :: Int +wxSTC_HJ_DEFAULT = 41 + +wxSTC_HJ_COMMENT :: Int +wxSTC_HJ_COMMENT = 42 + +wxSTC_HJ_COMMENTLINE :: Int +wxSTC_HJ_COMMENTLINE = 43 + +wxSTC_HJ_COMMENTDOC :: Int +wxSTC_HJ_COMMENTDOC = 44 + +wxSTC_HJ_NUMBER :: Int +wxSTC_HJ_NUMBER = 45 + +wxSTC_HJ_WORD :: Int +wxSTC_HJ_WORD = 46 + +wxSTC_HJ_KEYWORD :: Int +wxSTC_HJ_KEYWORD = 47 + +wxSTC_HJ_DOUBLESTRING :: Int +wxSTC_HJ_DOUBLESTRING = 48 + +wxSTC_HJ_SINGLESTRING :: Int +wxSTC_HJ_SINGLESTRING = 49 + +wxSTC_HJ_SYMBOLS :: Int +wxSTC_HJ_SYMBOLS = 50 + +wxSTC_HJ_STRINGEOL :: Int +wxSTC_HJ_STRINGEOL = 51 + +wxSTC_HJ_REGEX :: Int +wxSTC_HJ_REGEX = 52 + +wxSTC_HJA_START :: Int +wxSTC_HJA_START = 55 + +wxSTC_HJA_DEFAULT :: Int +wxSTC_HJA_DEFAULT = 56 + +wxSTC_HJA_COMMENT :: Int +wxSTC_HJA_COMMENT = 57 + +wxSTC_HJA_COMMENTLINE :: Int +wxSTC_HJA_COMMENTLINE = 58 + +wxSTC_HJA_COMMENTDOC :: Int +wxSTC_HJA_COMMENTDOC = 59 + +wxSTC_HJA_NUMBER :: Int +wxSTC_HJA_NUMBER = 60 + +wxSTC_HJA_WORD :: Int +wxSTC_HJA_WORD = 61 + +wxSTC_HJA_KEYWORD :: Int +wxSTC_HJA_KEYWORD = 62 + +wxSTC_HJA_DOUBLESTRING :: Int +wxSTC_HJA_DOUBLESTRING = 63 + +wxSTC_HJA_SINGLESTRING :: Int +wxSTC_HJA_SINGLESTRING = 64 + +wxSTC_HJA_SYMBOLS :: Int +wxSTC_HJA_SYMBOLS = 65 + +wxSTC_HJA_STRINGEOL :: Int +wxSTC_HJA_STRINGEOL = 66 + +wxSTC_HJA_REGEX :: Int +wxSTC_HJA_REGEX = 67 + +wxSTC_HB_START :: Int +wxSTC_HB_START = 70 + +wxSTC_HB_DEFAULT :: Int +wxSTC_HB_DEFAULT = 71 + +wxSTC_HB_COMMENTLINE :: Int +wxSTC_HB_COMMENTLINE = 72 + +wxSTC_HB_NUMBER :: Int +wxSTC_HB_NUMBER = 73 + +wxSTC_HB_WORD :: Int +wxSTC_HB_WORD = 74 + +wxSTC_HB_STRING :: Int +wxSTC_HB_STRING = 75 + +wxSTC_HB_IDENTIFIER :: Int +wxSTC_HB_IDENTIFIER = 76 + +wxSTC_HB_STRINGEOL :: Int +wxSTC_HB_STRINGEOL = 77 + +wxSTC_HBA_START :: Int +wxSTC_HBA_START = 80 + +wxSTC_HBA_DEFAULT :: Int +wxSTC_HBA_DEFAULT = 81 + +wxSTC_HBA_COMMENTLINE :: Int +wxSTC_HBA_COMMENTLINE = 82 + +wxSTC_HBA_NUMBER :: Int +wxSTC_HBA_NUMBER = 83 + +wxSTC_HBA_WORD :: Int +wxSTC_HBA_WORD = 84 + +wxSTC_HBA_STRING :: Int +wxSTC_HBA_STRING = 85 + +wxSTC_HBA_IDENTIFIER :: Int +wxSTC_HBA_IDENTIFIER = 86 + +wxSTC_HBA_STRINGEOL :: Int +wxSTC_HBA_STRINGEOL = 87 + +wxSTC_HP_START :: Int +wxSTC_HP_START = 90 + +wxSTC_HP_DEFAULT :: Int +wxSTC_HP_DEFAULT = 91 + +wxSTC_HP_COMMENTLINE :: Int +wxSTC_HP_COMMENTLINE = 92 + +wxSTC_HP_NUMBER :: Int +wxSTC_HP_NUMBER = 93 + +wxSTC_HP_STRING :: Int +wxSTC_HP_STRING = 94 + +wxSTC_HP_CHARACTER :: Int +wxSTC_HP_CHARACTER = 95 + +wxSTC_HP_WORD :: Int +wxSTC_HP_WORD = 96 + +wxSTC_HP_TRIPLE :: Int +wxSTC_HP_TRIPLE = 97 + +wxSTC_HP_TRIPLEDOUBLE :: Int +wxSTC_HP_TRIPLEDOUBLE = 98 + +wxSTC_HP_CLASSNAME :: Int +wxSTC_HP_CLASSNAME = 99 + +wxSTC_HP_DEFNAME :: Int +wxSTC_HP_DEFNAME = 100 + +wxSTC_HP_OPERATOR :: Int +wxSTC_HP_OPERATOR = 101 + +wxSTC_HP_IDENTIFIER :: Int +wxSTC_HP_IDENTIFIER = 102 + +wxSTC_HPA_START :: Int +wxSTC_HPA_START = 105 + +wxSTC_HPA_DEFAULT :: Int +wxSTC_HPA_DEFAULT = 106 + +wxSTC_HPA_COMMENTLINE :: Int +wxSTC_HPA_COMMENTLINE = 107 + +wxSTC_HPA_NUMBER :: Int +wxSTC_HPA_NUMBER = 108 + +wxSTC_HPA_STRING :: Int +wxSTC_HPA_STRING = 109 + +wxSTC_HPA_CHARACTER :: Int +wxSTC_HPA_CHARACTER = 110 + +wxSTC_HPA_WORD :: Int +wxSTC_HPA_WORD = 111 + +wxSTC_HPA_TRIPLE :: Int +wxSTC_HPA_TRIPLE = 112 + +wxSTC_HPA_TRIPLEDOUBLE :: Int +wxSTC_HPA_TRIPLEDOUBLE = 113 + +wxSTC_HPA_CLASSNAME :: Int +wxSTC_HPA_CLASSNAME = 114 + +wxSTC_HPA_DEFNAME :: Int +wxSTC_HPA_DEFNAME = 115 + +wxSTC_HPA_OPERATOR :: Int +wxSTC_HPA_OPERATOR = 116 + +wxSTC_HPA_IDENTIFIER :: Int +wxSTC_HPA_IDENTIFIER = 117 + +wxSTC_HPHP_DEFAULT :: Int +wxSTC_HPHP_DEFAULT = 118 + +wxSTC_HPHP_HSTRING :: Int +wxSTC_HPHP_HSTRING = 119 + +wxSTC_HPHP_SIMPLESTRING :: Int +wxSTC_HPHP_SIMPLESTRING = 120 + +wxSTC_HPHP_WORD :: Int +wxSTC_HPHP_WORD = 121 + +wxSTC_HPHP_NUMBER :: Int +wxSTC_HPHP_NUMBER = 122 + +wxSTC_HPHP_VARIABLE :: Int +wxSTC_HPHP_VARIABLE = 123 + +wxSTC_HPHP_COMMENT :: Int +wxSTC_HPHP_COMMENT = 124 + +wxSTC_HPHP_COMMENTLINE :: Int +wxSTC_HPHP_COMMENTLINE = 125 + +wxSTC_HPHP_HSTRING_VARIABLE :: Int +wxSTC_HPHP_HSTRING_VARIABLE = 126 + +wxSTC_HPHP_OPERATOR :: Int +wxSTC_HPHP_OPERATOR = 127 + +wxSTC_PL_DEFAULT :: Int +wxSTC_PL_DEFAULT = 0 + +wxSTC_PL_ERROR :: Int +wxSTC_PL_ERROR = 1 + +wxSTC_PL_COMMENTLINE :: Int +wxSTC_PL_COMMENTLINE = 2 + +wxSTC_PL_POD :: Int +wxSTC_PL_POD = 3 + +wxSTC_PL_NUMBER :: Int +wxSTC_PL_NUMBER = 4 + +wxSTC_PL_WORD :: Int +wxSTC_PL_WORD = 5 + +wxSTC_PL_STRING :: Int +wxSTC_PL_STRING = 6 + +wxSTC_PL_CHARACTER :: Int +wxSTC_PL_CHARACTER = 7 + +wxSTC_PL_PUNCTUATION :: Int +wxSTC_PL_PUNCTUATION = 8 + +wxSTC_PL_PREPROCESSOR :: Int +wxSTC_PL_PREPROCESSOR = 9 + +wxSTC_PL_OPERATOR :: Int +wxSTC_PL_OPERATOR = 10 + +wxSTC_PL_IDENTIFIER :: Int +wxSTC_PL_IDENTIFIER = 11 + +wxSTC_PL_SCALAR :: Int +wxSTC_PL_SCALAR = 12 + +wxSTC_PL_ARRAY :: Int +wxSTC_PL_ARRAY = 13 + +wxSTC_PL_HASH :: Int +wxSTC_PL_HASH = 14 + +wxSTC_PL_SYMBOLTABLE :: Int +wxSTC_PL_SYMBOLTABLE = 15 + +wxSTC_PL_REGEX :: Int +wxSTC_PL_REGEX = 17 + +wxSTC_PL_REGSUBST :: Int +wxSTC_PL_REGSUBST = 18 + +wxSTC_PL_LONGQUOTE :: Int +wxSTC_PL_LONGQUOTE = 19 + +wxSTC_PL_BACKTICKS :: Int +wxSTC_PL_BACKTICKS = 20 + +wxSTC_PL_DATASECTION :: Int +wxSTC_PL_DATASECTION = 21 + +wxSTC_PL_HERE_DELIM :: Int +wxSTC_PL_HERE_DELIM = 22 + +wxSTC_PL_HERE_Q :: Int +wxSTC_PL_HERE_Q = 23 + +wxSTC_PL_HERE_QQ :: Int +wxSTC_PL_HERE_QQ = 24 + +wxSTC_PL_HERE_QX :: Int +wxSTC_PL_HERE_QX = 25 + +wxSTC_PL_STRING_Q :: Int +wxSTC_PL_STRING_Q = 26 + +wxSTC_PL_STRING_QQ :: Int +wxSTC_PL_STRING_QQ = 27 + +wxSTC_PL_STRING_QX :: Int +wxSTC_PL_STRING_QX = 28 + +wxSTC_PL_STRING_QR :: Int +wxSTC_PL_STRING_QR = 29 + +wxSTC_PL_STRING_QW :: Int +wxSTC_PL_STRING_QW = 30 + +wxSTC_B_DEFAULT :: Int +wxSTC_B_DEFAULT = 0 + +wxSTC_B_COMMENT :: Int +wxSTC_B_COMMENT = 1 + +wxSTC_B_NUMBER :: Int +wxSTC_B_NUMBER = 2 + +wxSTC_B_KEYWORD :: Int +wxSTC_B_KEYWORD = 3 + +wxSTC_B_STRING :: Int +wxSTC_B_STRING = 4 + +wxSTC_B_PREPROCESSOR :: Int +wxSTC_B_PREPROCESSOR = 5 + +wxSTC_B_OPERATOR :: Int +wxSTC_B_OPERATOR = 6 + +wxSTC_B_IDENTIFIER :: Int +wxSTC_B_IDENTIFIER = 7 + +wxSTC_B_DATE :: Int +wxSTC_B_DATE = 8 + +wxSTC_PROPS_DEFAULT :: Int +wxSTC_PROPS_DEFAULT = 0 + +wxSTC_PROPS_COMMENT :: Int +wxSTC_PROPS_COMMENT = 1 + +wxSTC_PROPS_SECTION :: Int +wxSTC_PROPS_SECTION = 2 + +wxSTC_PROPS_ASSIGNMENT :: Int +wxSTC_PROPS_ASSIGNMENT = 3 + +wxSTC_PROPS_DEFVAL :: Int +wxSTC_PROPS_DEFVAL = 4 + +wxSTC_L_DEFAULT :: Int +wxSTC_L_DEFAULT = 0 + +wxSTC_L_COMMAND :: Int +wxSTC_L_COMMAND = 1 + +wxSTC_L_TAG :: Int +wxSTC_L_TAG = 2 + +wxSTC_L_MATH :: Int +wxSTC_L_MATH = 3 + +wxSTC_L_COMMENT :: Int +wxSTC_L_COMMENT = 4 + +wxSTC_LUA_DEFAULT :: Int +wxSTC_LUA_DEFAULT = 0 + +wxSTC_LUA_COMMENT :: Int +wxSTC_LUA_COMMENT = 1 + +wxSTC_LUA_COMMENTLINE :: Int +wxSTC_LUA_COMMENTLINE = 2 + +wxSTC_LUA_COMMENTDOC :: Int +wxSTC_LUA_COMMENTDOC = 3 + +wxSTC_LUA_NUMBER :: Int +wxSTC_LUA_NUMBER = 4 + +wxSTC_LUA_WORD :: Int +wxSTC_LUA_WORD = 5 + +wxSTC_LUA_STRING :: Int +wxSTC_LUA_STRING = 6 + +wxSTC_LUA_CHARACTER :: Int +wxSTC_LUA_CHARACTER = 7 + +wxSTC_LUA_LITERALSTRING :: Int +wxSTC_LUA_LITERALSTRING = 8 + +wxSTC_LUA_PREPROCESSOR :: Int +wxSTC_LUA_PREPROCESSOR = 9 + +wxSTC_LUA_OPERATOR :: Int +wxSTC_LUA_OPERATOR = 10 + +wxSTC_LUA_IDENTIFIER :: Int +wxSTC_LUA_IDENTIFIER = 11 + +wxSTC_LUA_STRINGEOL :: Int +wxSTC_LUA_STRINGEOL = 12 + +wxSTC_LUA_WORD2 :: Int +wxSTC_LUA_WORD2 = 13 + +wxSTC_LUA_WORD3 :: Int +wxSTC_LUA_WORD3 = 14 + +wxSTC_LUA_WORD4 :: Int +wxSTC_LUA_WORD4 = 15 + +wxSTC_LUA_WORD5 :: Int +wxSTC_LUA_WORD5 = 16 + +wxSTC_LUA_WORD6 :: Int +wxSTC_LUA_WORD6 = 17 + +wxSTC_LUA_WORD7 :: Int +wxSTC_LUA_WORD7 = 18 + +wxSTC_LUA_WORD8 :: Int +wxSTC_LUA_WORD8 = 19 + +wxSTC_ERR_DEFAULT :: Int +wxSTC_ERR_DEFAULT = 0 + +wxSTC_ERR_PYTHON :: Int +wxSTC_ERR_PYTHON = 1 + +wxSTC_ERR_GCC :: Int +wxSTC_ERR_GCC = 2 + +wxSTC_ERR_MS :: Int +wxSTC_ERR_MS = 3 + +wxSTC_ERR_CMD :: Int +wxSTC_ERR_CMD = 4 + +wxSTC_ERR_BORLAND :: Int +wxSTC_ERR_BORLAND = 5 + +wxSTC_ERR_PERL :: Int +wxSTC_ERR_PERL = 6 + +wxSTC_ERR_NET :: Int +wxSTC_ERR_NET = 7 + +wxSTC_ERR_LUA :: Int +wxSTC_ERR_LUA = 8 + +wxSTC_ERR_CTAG :: Int +wxSTC_ERR_CTAG = 9 + +wxSTC_ERR_DIFF_CHANGED :: Int +wxSTC_ERR_DIFF_CHANGED = 10 + +wxSTC_ERR_DIFF_ADDITION :: Int +wxSTC_ERR_DIFF_ADDITION = 11 + +wxSTC_ERR_DIFF_DELETION :: Int +wxSTC_ERR_DIFF_DELETION = 12 + +wxSTC_ERR_DIFF_MESSAGE :: Int +wxSTC_ERR_DIFF_MESSAGE = 13 + +wxSTC_ERR_PHP :: Int +wxSTC_ERR_PHP = 14 + +wxSTC_ERR_ELF :: Int +wxSTC_ERR_ELF = 15 + +wxSTC_ERR_IFC :: Int +wxSTC_ERR_IFC = 16 + +wxSTC_BAT_DEFAULT :: Int +wxSTC_BAT_DEFAULT = 0 + +wxSTC_BAT_COMMENT :: Int +wxSTC_BAT_COMMENT = 1 + +wxSTC_BAT_WORD :: Int +wxSTC_BAT_WORD = 2 + +wxSTC_BAT_LABEL :: Int +wxSTC_BAT_LABEL = 3 + +wxSTC_BAT_HIDE :: Int +wxSTC_BAT_HIDE = 4 + +wxSTC_BAT_COMMAND :: Int +wxSTC_BAT_COMMAND = 5 + +wxSTC_BAT_IDENTIFIER :: Int +wxSTC_BAT_IDENTIFIER = 6 + +wxSTC_BAT_OPERATOR :: Int +wxSTC_BAT_OPERATOR = 7 + +wxSTC_MAKE_DEFAULT :: Int +wxSTC_MAKE_DEFAULT = 0 + +wxSTC_MAKE_COMMENT :: Int +wxSTC_MAKE_COMMENT = 1 + +wxSTC_MAKE_PREPROCESSOR :: Int +wxSTC_MAKE_PREPROCESSOR = 2 + +wxSTC_MAKE_IDENTIFIER :: Int +wxSTC_MAKE_IDENTIFIER = 3 + +wxSTC_MAKE_OPERATOR :: Int +wxSTC_MAKE_OPERATOR = 4 + +wxSTC_MAKE_TARGET :: Int +wxSTC_MAKE_TARGET = 5 + +wxSTC_MAKE_IDEOL :: Int +wxSTC_MAKE_IDEOL = 9 + +wxSTC_DIFF_DEFAULT :: Int +wxSTC_DIFF_DEFAULT = 0 + +wxSTC_DIFF_COMMENT :: Int +wxSTC_DIFF_COMMENT = 1 + +wxSTC_DIFF_COMMAND :: Int +wxSTC_DIFF_COMMAND = 2 + +wxSTC_DIFF_HEADER :: Int +wxSTC_DIFF_HEADER = 3 + +wxSTC_DIFF_POSITION :: Int +wxSTC_DIFF_POSITION = 4 + +wxSTC_DIFF_DELETED :: Int +wxSTC_DIFF_DELETED = 5 + +wxSTC_DIFF_ADDED :: Int +wxSTC_DIFF_ADDED = 6 + +wxSTC_CONF_DEFAULT :: Int +wxSTC_CONF_DEFAULT = 0 + +wxSTC_CONF_COMMENT :: Int +wxSTC_CONF_COMMENT = 1 + +wxSTC_CONF_NUMBER :: Int +wxSTC_CONF_NUMBER = 2 + +wxSTC_CONF_IDENTIFIER :: Int +wxSTC_CONF_IDENTIFIER = 3 + +wxSTC_CONF_EXTENSION :: Int +wxSTC_CONF_EXTENSION = 4 + +wxSTC_CONF_PARAMETER :: Int +wxSTC_CONF_PARAMETER = 5 + +wxSTC_CONF_STRING :: Int +wxSTC_CONF_STRING = 6 + +wxSTC_CONF_OPERATOR :: Int +wxSTC_CONF_OPERATOR = 7 + +wxSTC_CONF_IP :: Int +wxSTC_CONF_IP = 8 + +wxSTC_CONF_DIRECTIVE :: Int +wxSTC_CONF_DIRECTIVE = 9 + +wxSTC_AVE_DEFAULT :: Int +wxSTC_AVE_DEFAULT = 0 + +wxSTC_AVE_COMMENT :: Int +wxSTC_AVE_COMMENT = 1 + +wxSTC_AVE_NUMBER :: Int +wxSTC_AVE_NUMBER = 2 + +wxSTC_AVE_WORD :: Int +wxSTC_AVE_WORD = 3 + +wxSTC_AVE_STRING :: Int +wxSTC_AVE_STRING = 6 + +wxSTC_AVE_ENUM :: Int +wxSTC_AVE_ENUM = 7 + +wxSTC_AVE_STRINGEOL :: Int +wxSTC_AVE_STRINGEOL = 8 + +wxSTC_AVE_IDENTIFIER :: Int +wxSTC_AVE_IDENTIFIER = 9 + +wxSTC_AVE_OPERATOR :: Int +wxSTC_AVE_OPERATOR = 10 + +wxSTC_AVE_WORD1 :: Int +wxSTC_AVE_WORD1 = 11 + +wxSTC_AVE_WORD2 :: Int +wxSTC_AVE_WORD2 = 12 + +wxSTC_AVE_WORD3 :: Int +wxSTC_AVE_WORD3 = 13 + +wxSTC_AVE_WORD4 :: Int +wxSTC_AVE_WORD4 = 14 + +wxSTC_AVE_WORD5 :: Int +wxSTC_AVE_WORD5 = 15 + +wxSTC_AVE_WORD6 :: Int +wxSTC_AVE_WORD6 = 16 + +wxSTC_ADA_DEFAULT :: Int +wxSTC_ADA_DEFAULT = 0 + +wxSTC_ADA_WORD :: Int +wxSTC_ADA_WORD = 1 + +wxSTC_ADA_IDENTIFIER :: Int +wxSTC_ADA_IDENTIFIER = 2 + +wxSTC_ADA_NUMBER :: Int +wxSTC_ADA_NUMBER = 3 + +wxSTC_ADA_DELIMITER :: Int +wxSTC_ADA_DELIMITER = 4 + +wxSTC_ADA_CHARACTER :: Int +wxSTC_ADA_CHARACTER = 5 + +wxSTC_ADA_CHARACTEREOL :: Int +wxSTC_ADA_CHARACTEREOL = 6 + +wxSTC_ADA_STRING :: Int +wxSTC_ADA_STRING = 7 + +wxSTC_ADA_STRINGEOL :: Int +wxSTC_ADA_STRINGEOL = 8 + +wxSTC_ADA_LABEL :: Int +wxSTC_ADA_LABEL = 9 + +wxSTC_ADA_COMMENTLINE :: Int +wxSTC_ADA_COMMENTLINE = 10 + +wxSTC_ADA_ILLEGAL :: Int +wxSTC_ADA_ILLEGAL = 11 + +wxSTC_BAAN_DEFAULT :: Int +wxSTC_BAAN_DEFAULT = 0 + +wxSTC_BAAN_COMMENT :: Int +wxSTC_BAAN_COMMENT = 1 + +wxSTC_BAAN_COMMENTDOC :: Int +wxSTC_BAAN_COMMENTDOC = 2 + +wxSTC_BAAN_NUMBER :: Int +wxSTC_BAAN_NUMBER = 3 + +wxSTC_BAAN_WORD :: Int +wxSTC_BAAN_WORD = 4 + +wxSTC_BAAN_STRING :: Int +wxSTC_BAAN_STRING = 5 + +wxSTC_BAAN_PREPROCESSOR :: Int +wxSTC_BAAN_PREPROCESSOR = 6 + +wxSTC_BAAN_OPERATOR :: Int +wxSTC_BAAN_OPERATOR = 7 + +wxSTC_BAAN_IDENTIFIER :: Int +wxSTC_BAAN_IDENTIFIER = 8 + +wxSTC_BAAN_STRINGEOL :: Int +wxSTC_BAAN_STRINGEOL = 9 + +wxSTC_BAAN_WORD2 :: Int +wxSTC_BAAN_WORD2 = 10 + +wxSTC_LISP_DEFAULT :: Int +wxSTC_LISP_DEFAULT = 0 + +wxSTC_LISP_COMMENT :: Int +wxSTC_LISP_COMMENT = 1 + +wxSTC_LISP_NUMBER :: Int +wxSTC_LISP_NUMBER = 2 + +wxSTC_LISP_KEYWORD :: Int +wxSTC_LISP_KEYWORD = 3 + +wxSTC_LISP_STRING :: Int +wxSTC_LISP_STRING = 6 + +wxSTC_LISP_STRINGEOL :: Int +wxSTC_LISP_STRINGEOL = 8 + +wxSTC_LISP_IDENTIFIER :: Int +wxSTC_LISP_IDENTIFIER = 9 + +wxSTC_LISP_OPERATOR :: Int +wxSTC_LISP_OPERATOR = 10 + +wxSTC_EIFFEL_DEFAULT :: Int +wxSTC_EIFFEL_DEFAULT = 0 + +wxSTC_EIFFEL_COMMENTLINE :: Int +wxSTC_EIFFEL_COMMENTLINE = 1 + +wxSTC_EIFFEL_NUMBER :: Int +wxSTC_EIFFEL_NUMBER = 2 + +wxSTC_EIFFEL_WORD :: Int +wxSTC_EIFFEL_WORD = 3 + +wxSTC_EIFFEL_STRING :: Int +wxSTC_EIFFEL_STRING = 4 + +wxSTC_EIFFEL_CHARACTER :: Int +wxSTC_EIFFEL_CHARACTER = 5 + +wxSTC_EIFFEL_OPERATOR :: Int +wxSTC_EIFFEL_OPERATOR = 6 + +wxSTC_EIFFEL_IDENTIFIER :: Int +wxSTC_EIFFEL_IDENTIFIER = 7 + +wxSTC_EIFFEL_STRINGEOL :: Int +wxSTC_EIFFEL_STRINGEOL = 8 + +wxSTC_NNCRONTAB_DEFAULT :: Int +wxSTC_NNCRONTAB_DEFAULT = 0 + +wxSTC_NNCRONTAB_COMMENT :: Int +wxSTC_NNCRONTAB_COMMENT = 1 + +wxSTC_NNCRONTAB_TASK :: Int +wxSTC_NNCRONTAB_TASK = 2 + +wxSTC_NNCRONTAB_SECTION :: Int +wxSTC_NNCRONTAB_SECTION = 3 + +wxSTC_NNCRONTAB_KEYWORD :: Int +wxSTC_NNCRONTAB_KEYWORD = 4 + +wxSTC_NNCRONTAB_MODIFIER :: Int +wxSTC_NNCRONTAB_MODIFIER = 5 + +wxSTC_NNCRONTAB_ASTERISK :: Int +wxSTC_NNCRONTAB_ASTERISK = 6 + +wxSTC_NNCRONTAB_NUMBER :: Int +wxSTC_NNCRONTAB_NUMBER = 7 + +wxSTC_NNCRONTAB_STRING :: Int +wxSTC_NNCRONTAB_STRING = 8 + +wxSTC_NNCRONTAB_ENVIRONMENT :: Int +wxSTC_NNCRONTAB_ENVIRONMENT = 9 + +wxSTC_NNCRONTAB_IDENTIFIER :: Int +wxSTC_NNCRONTAB_IDENTIFIER = 10 + +wxSTC_MATLAB_DEFAULT :: Int +wxSTC_MATLAB_DEFAULT = 0 + +wxSTC_MATLAB_COMMENT :: Int +wxSTC_MATLAB_COMMENT = 1 + +wxSTC_MATLAB_COMMAND :: Int +wxSTC_MATLAB_COMMAND = 2 + +wxSTC_MATLAB_NUMBER :: Int +wxSTC_MATLAB_NUMBER = 3 + +wxSTC_MATLAB_KEYWORD :: Int +wxSTC_MATLAB_KEYWORD = 4 + +wxSTC_MATLAB_STRING :: Int +wxSTC_MATLAB_STRING = 5 + +wxSTC_MATLAB_OPERATOR :: Int +wxSTC_MATLAB_OPERATOR = 6 + +wxSTC_MATLAB_IDENTIFIER :: Int +wxSTC_MATLAB_IDENTIFIER = 7 + +wxSTC_SCRIPTOL_DEFAULT :: Int +wxSTC_SCRIPTOL_DEFAULT = 0 + +wxSTC_SCRIPTOL_COMMENT :: Int +wxSTC_SCRIPTOL_COMMENT = 1 + +wxSTC_SCRIPTOL_COMMENTLINE :: Int +wxSTC_SCRIPTOL_COMMENTLINE = 2 + +wxSTC_SCRIPTOL_COMMENTDOC :: Int +wxSTC_SCRIPTOL_COMMENTDOC = 3 + +wxSTC_SCRIPTOL_NUMBER :: Int +wxSTC_SCRIPTOL_NUMBER = 4 + +wxSTC_SCRIPTOL_WORD :: Int +wxSTC_SCRIPTOL_WORD = 5 + +wxSTC_SCRIPTOL_STRING :: Int +wxSTC_SCRIPTOL_STRING = 6 + +wxSTC_SCRIPTOL_CHARACTER :: Int +wxSTC_SCRIPTOL_CHARACTER = 7 + +wxSTC_SCRIPTOL_UUID :: Int +wxSTC_SCRIPTOL_UUID = 8 + +wxSTC_SCRIPTOL_PREPROCESSOR :: Int +wxSTC_SCRIPTOL_PREPROCESSOR = 9 + +wxSTC_SCRIPTOL_OPERATOR :: Int +wxSTC_SCRIPTOL_OPERATOR = 10 + +wxSTC_SCRIPTOL_IDENTIFIER :: Int +wxSTC_SCRIPTOL_IDENTIFIER = 11 + +wxSTC_SCRIPTOL_STRINGEOL :: Int +wxSTC_SCRIPTOL_STRINGEOL = 12 + +wxSTC_SCRIPTOL_VERBATIM :: Int +wxSTC_SCRIPTOL_VERBATIM = 13 + +wxSTC_SCRIPTOL_REGEX :: Int +wxSTC_SCRIPTOL_REGEX = 14 + +wxSTC_SCRIPTOL_COMMENTLINEDOC :: Int +wxSTC_SCRIPTOL_COMMENTLINEDOC = 15 + +wxSTC_SCRIPTOL_WORD2 :: Int +wxSTC_SCRIPTOL_WORD2 = 16 + +wxSTC_SCRIPTOL_COMMENTDOCKEYWORD :: Int +wxSTC_SCRIPTOL_COMMENTDOCKEYWORD = 17 + +wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR :: Int +wxSTC_SCRIPTOL_COMMENTDOCKEYWORDERROR = 18 + +wxSTC_SCRIPTOL_COMMENTBASIC :: Int +wxSTC_SCRIPTOL_COMMENTBASIC = 19 + +wxSTC_ASM_DEFAULT :: Int +wxSTC_ASM_DEFAULT = 0 + +wxSTC_ASM_COMMENT :: Int +wxSTC_ASM_COMMENT = 1 + +wxSTC_ASM_NUMBER :: Int +wxSTC_ASM_NUMBER = 2 + +wxSTC_ASM_STRING :: Int +wxSTC_ASM_STRING = 3 + +wxSTC_ASM_OPERATOR :: Int +wxSTC_ASM_OPERATOR = 4 + +wxSTC_ASM_IDENTIFIER :: Int +wxSTC_ASM_IDENTIFIER = 5 + +wxSTC_ASM_CPUINSTRUCTION :: Int +wxSTC_ASM_CPUINSTRUCTION = 6 + +wxSTC_ASM_MATHINSTRUCTION :: Int +wxSTC_ASM_MATHINSTRUCTION = 7 + +wxSTC_ASM_REGISTER :: Int +wxSTC_ASM_REGISTER = 8 + +wxSTC_ASM_DIRECTIVE :: Int +wxSTC_ASM_DIRECTIVE = 9 + +wxSTC_ASM_DIRECTIVEOPERAND :: Int +wxSTC_ASM_DIRECTIVEOPERAND = 10 + +wxSTC_F_DEFAULT :: Int +wxSTC_F_DEFAULT = 0 + +wxSTC_F_COMMENT :: Int +wxSTC_F_COMMENT = 1 + +wxSTC_F_NUMBER :: Int +wxSTC_F_NUMBER = 2 + +wxSTC_F_STRING1 :: Int +wxSTC_F_STRING1 = 3 + +wxSTC_F_STRING2 :: Int +wxSTC_F_STRING2 = 4 + +wxSTC_F_STRINGEOL :: Int +wxSTC_F_STRINGEOL = 5 + +wxSTC_F_OPERATOR :: Int +wxSTC_F_OPERATOR = 6 + +wxSTC_F_IDENTIFIER :: Int +wxSTC_F_IDENTIFIER = 7 + +wxSTC_F_WORD :: Int +wxSTC_F_WORD = 8 + +wxSTC_F_WORD2 :: Int +wxSTC_F_WORD2 = 9 + +wxSTC_F_WORD3 :: Int +wxSTC_F_WORD3 = 10 + +wxSTC_F_PREPROCESSOR :: Int +wxSTC_F_PREPROCESSOR = 11 + +wxSTC_F_OPERATOR2 :: Int +wxSTC_F_OPERATOR2 = 12 + +wxSTC_F_LABEL :: Int +wxSTC_F_LABEL = 13 + +wxSTC_F_CONTINUATION :: Int +wxSTC_F_CONTINUATION = 14 + +wxSTC_CSS_DEFAULT :: Int +wxSTC_CSS_DEFAULT = 0 + +wxSTC_CSS_TAG :: Int +wxSTC_CSS_TAG = 1 + +wxSTC_CSS_CLASS :: Int +wxSTC_CSS_CLASS = 2 + +wxSTC_CSS_PSEUDOCLASS :: Int +wxSTC_CSS_PSEUDOCLASS = 3 + +wxSTC_CSS_UNKNOWN_PSEUDOCLASS :: Int +wxSTC_CSS_UNKNOWN_PSEUDOCLASS = 4 + +wxSTC_CSS_OPERATOR :: Int +wxSTC_CSS_OPERATOR = 5 + +wxSTC_CSS_IDENTIFIER :: Int +wxSTC_CSS_IDENTIFIER = 6 + +wxSTC_CSS_UNKNOWN_IDENTIFIER :: Int +wxSTC_CSS_UNKNOWN_IDENTIFIER = 7 + +wxSTC_CSS_VALUE :: Int +wxSTC_CSS_VALUE = 8 + +wxSTC_CSS_COMMENT :: Int +wxSTC_CSS_COMMENT = 9 + +wxSTC_CSS_ID :: Int +wxSTC_CSS_ID = 10 + +wxSTC_CSS_IMPORTANT :: Int +wxSTC_CSS_IMPORTANT = 11 + +wxSTC_CSS_DIRECTIVE :: Int +wxSTC_CSS_DIRECTIVE = 12 + +wxSTC_CSS_DOUBLESTRING :: Int +wxSTC_CSS_DOUBLESTRING = 13 + +wxSTC_CSS_SINGLESTRING :: Int +wxSTC_CSS_SINGLESTRING = 14 + +wxSTC_POV_DEFAULT :: Int +wxSTC_POV_DEFAULT = 0 + +wxSTC_POV_COMMENT :: Int +wxSTC_POV_COMMENT = 1 + +wxSTC_POV_COMMENTLINE :: Int +wxSTC_POV_COMMENTLINE = 2 + +wxSTC_POV_NUMBER :: Int +wxSTC_POV_NUMBER = 3 + +wxSTC_POV_OPERATOR :: Int +wxSTC_POV_OPERATOR = 4 + +wxSTC_POV_IDENTIFIER :: Int +wxSTC_POV_IDENTIFIER = 5 + +wxSTC_POV_STRING :: Int +wxSTC_POV_STRING = 6 + +wxSTC_POV_STRINGEOL :: Int +wxSTC_POV_STRINGEOL = 7 + +wxSTC_POV_DIRECTIVE :: Int +wxSTC_POV_DIRECTIVE = 8 + +wxSTC_POV_BADDIRECTIVE :: Int +wxSTC_POV_BADDIRECTIVE = 9 + +wxSTC_POV_WORD2 :: Int +wxSTC_POV_WORD2 = 10 + +wxSTC_POV_WORD3 :: Int +wxSTC_POV_WORD3 = 11 + +wxSTC_POV_WORD4 :: Int +wxSTC_POV_WORD4 = 12 + +wxSTC_POV_WORD5 :: Int +wxSTC_POV_WORD5 = 13 + +wxSTC_POV_WORD6 :: Int +wxSTC_POV_WORD6 = 14 + +wxSTC_POV_WORD7 :: Int +wxSTC_POV_WORD7 = 15 + +wxSTC_POV_WORD8 :: Int +wxSTC_POV_WORD8 = 16 + +wxSTC_LOUT_DEFAULT :: Int +wxSTC_LOUT_DEFAULT = 0 + +wxSTC_LOUT_COMMENT :: Int +wxSTC_LOUT_COMMENT = 1 + +wxSTC_LOUT_NUMBER :: Int +wxSTC_LOUT_NUMBER = 2 + +wxSTC_LOUT_WORD :: Int +wxSTC_LOUT_WORD = 3 + +wxSTC_LOUT_WORD2 :: Int +wxSTC_LOUT_WORD2 = 4 + +wxSTC_LOUT_WORD3 :: Int +wxSTC_LOUT_WORD3 = 5 + +wxSTC_LOUT_WORD4 :: Int +wxSTC_LOUT_WORD4 = 6 + +wxSTC_LOUT_STRING :: Int +wxSTC_LOUT_STRING = 7 + +wxSTC_LOUT_OPERATOR :: Int +wxSTC_LOUT_OPERATOR = 8 + +wxSTC_LOUT_IDENTIFIER :: Int +wxSTC_LOUT_IDENTIFIER = 9 + +wxSTC_LOUT_STRINGEOL :: Int +wxSTC_LOUT_STRINGEOL = 10 + +wxSTC_ESCRIPT_DEFAULT :: Int +wxSTC_ESCRIPT_DEFAULT = 0 + +wxSTC_ESCRIPT_COMMENT :: Int +wxSTC_ESCRIPT_COMMENT = 1 + +wxSTC_ESCRIPT_COMMENTLINE :: Int +wxSTC_ESCRIPT_COMMENTLINE = 2 + +wxSTC_ESCRIPT_COMMENTDOC :: Int +wxSTC_ESCRIPT_COMMENTDOC = 3 + +wxSTC_ESCRIPT_NUMBER :: Int +wxSTC_ESCRIPT_NUMBER = 4 + +wxSTC_ESCRIPT_WORD :: Int +wxSTC_ESCRIPT_WORD = 5 + +wxSTC_ESCRIPT_STRING :: Int +wxSTC_ESCRIPT_STRING = 6 + +wxSTC_ESCRIPT_OPERATOR :: Int +wxSTC_ESCRIPT_OPERATOR = 7 + +wxSTC_ESCRIPT_IDENTIFIER :: Int +wxSTC_ESCRIPT_IDENTIFIER = 8 + +wxSTC_ESCRIPT_BRACE :: Int +wxSTC_ESCRIPT_BRACE = 9 + +wxSTC_ESCRIPT_WORD2 :: Int +wxSTC_ESCRIPT_WORD2 = 10 + +wxSTC_ESCRIPT_WORD3 :: Int +wxSTC_ESCRIPT_WORD3 = 11 + +wxSTC_PS_DEFAULT :: Int +wxSTC_PS_DEFAULT = 0 + +wxSTC_PS_COMMENT :: Int +wxSTC_PS_COMMENT = 1 + +wxSTC_PS_DSC_COMMENT :: Int +wxSTC_PS_DSC_COMMENT = 2 + +wxSTC_PS_DSC_VALUE :: Int +wxSTC_PS_DSC_VALUE = 3 + +wxSTC_PS_NUMBER :: Int +wxSTC_PS_NUMBER = 4 + +wxSTC_PS_NAME :: Int +wxSTC_PS_NAME = 5 + +wxSTC_PS_KEYWORD :: Int +wxSTC_PS_KEYWORD = 6 + +wxSTC_PS_LITERAL :: Int +wxSTC_PS_LITERAL = 7 + +wxSTC_PS_IMMEVAL :: Int +wxSTC_PS_IMMEVAL = 8 + +wxSTC_PS_PAREN_ARRAY :: Int +wxSTC_PS_PAREN_ARRAY = 9 + +wxSTC_PS_PAREN_DICT :: Int +wxSTC_PS_PAREN_DICT = 10 + +wxSTC_PS_PAREN_PROC :: Int +wxSTC_PS_PAREN_PROC = 11 + +wxSTC_PS_TEXT :: Int +wxSTC_PS_TEXT = 12 + +wxSTC_PS_HEXSTRING :: Int +wxSTC_PS_HEXSTRING = 13 + +wxSTC_PS_BASE85STRING :: Int +wxSTC_PS_BASE85STRING = 14 + +wxSTC_PS_BADSTRINGCHAR :: Int +wxSTC_PS_BADSTRINGCHAR = 15 + +wxSTC_NSIS_DEFAULT :: Int +wxSTC_NSIS_DEFAULT = 0 + +wxSTC_NSIS_COMMENT :: Int +wxSTC_NSIS_COMMENT = 1 + +wxSTC_NSIS_STRINGDQ :: Int +wxSTC_NSIS_STRINGDQ = 2 + +wxSTC_NSIS_STRINGLQ :: Int +wxSTC_NSIS_STRINGLQ = 3 + +wxSTC_NSIS_STRINGRQ :: Int +wxSTC_NSIS_STRINGRQ = 4 + +wxSTC_NSIS_FUNCTION :: Int +wxSTC_NSIS_FUNCTION = 5 + +wxSTC_NSIS_VARIABLE :: Int +wxSTC_NSIS_VARIABLE = 6 + +wxSTC_NSIS_LABEL :: Int +wxSTC_NSIS_LABEL = 7 + +wxSTC_NSIS_USERDEFINED :: Int +wxSTC_NSIS_USERDEFINED = 8 + +wxSTC_NSIS_SECTIONDEF :: Int +wxSTC_NSIS_SECTIONDEF = 9 + +wxSTC_NSIS_SUBSECTIONDEF :: Int +wxSTC_NSIS_SUBSECTIONDEF = 10 + +wxSTC_NSIS_IFDEFINEDEF :: Int +wxSTC_NSIS_IFDEFINEDEF = 11 + +wxSTC_NSIS_MACRODEF :: Int +wxSTC_NSIS_MACRODEF = 12 + +wxSTC_NSIS_STRINGVAR :: Int +wxSTC_NSIS_STRINGVAR = 13 + +wxSTC_MMIXAL_LEADWS :: Int +wxSTC_MMIXAL_LEADWS = 0 + +wxSTC_MMIXAL_COMMENT :: Int +wxSTC_MMIXAL_COMMENT = 1 + +wxSTC_MMIXAL_LABEL :: Int +wxSTC_MMIXAL_LABEL = 2 + +wxSTC_MMIXAL_OPCODE :: Int +wxSTC_MMIXAL_OPCODE = 3 + +wxSTC_MMIXAL_OPCODE_PRE :: Int +wxSTC_MMIXAL_OPCODE_PRE = 4 + +wxSTC_MMIXAL_OPCODE_VALID :: Int +wxSTC_MMIXAL_OPCODE_VALID = 5 + +wxSTC_MMIXAL_OPCODE_UNKNOWN :: Int +wxSTC_MMIXAL_OPCODE_UNKNOWN = 6 + +wxSTC_MMIXAL_OPCODE_POST :: Int +wxSTC_MMIXAL_OPCODE_POST = 7 + +wxSTC_MMIXAL_OPERANDS :: Int +wxSTC_MMIXAL_OPERANDS = 8 + +wxSTC_MMIXAL_NUMBER :: Int +wxSTC_MMIXAL_NUMBER = 9 + +wxSTC_MMIXAL_REF :: Int +wxSTC_MMIXAL_REF = 10 + +wxSTC_MMIXAL_CHAR :: Int +wxSTC_MMIXAL_CHAR = 11 + +wxSTC_MMIXAL_STRING :: Int +wxSTC_MMIXAL_STRING = 12 + +wxSTC_MMIXAL_REGISTER :: Int +wxSTC_MMIXAL_REGISTER = 13 + +wxSTC_MMIXAL_HEX :: Int +wxSTC_MMIXAL_HEX = 14 + +wxSTC_MMIXAL_OPERATOR :: Int +wxSTC_MMIXAL_OPERATOR = 15 + +wxSTC_MMIXAL_SYMBOL :: Int +wxSTC_MMIXAL_SYMBOL = 16 + +wxSTC_MMIXAL_INCLUDE :: Int +wxSTC_MMIXAL_INCLUDE = 17 + +wxSTC_CLW_DEFAULT :: Int +wxSTC_CLW_DEFAULT = 0 + +wxSTC_CLW_LABEL :: Int +wxSTC_CLW_LABEL = 1 + +wxSTC_CLW_COMMENT :: Int +wxSTC_CLW_COMMENT = 2 + +wxSTC_CLW_STRING :: Int +wxSTC_CLW_STRING = 3 + +wxSTC_CLW_USER_IDENTIFIER :: Int +wxSTC_CLW_USER_IDENTIFIER = 4 + +wxSTC_CLW_INTEGER_CONSTANT :: Int +wxSTC_CLW_INTEGER_CONSTANT = 5 + +wxSTC_CLW_REAL_CONSTANT :: Int +wxSTC_CLW_REAL_CONSTANT = 6 + +wxSTC_CLW_PICTURE_STRING :: Int +wxSTC_CLW_PICTURE_STRING = 7 + +wxSTC_CLW_KEYWORD :: Int +wxSTC_CLW_KEYWORD = 8 + +wxSTC_CLW_COMPILER_DIRECTIVE :: Int +wxSTC_CLW_COMPILER_DIRECTIVE = 9 + +wxSTC_CLW_RUNTIME_EXPRESSIONS :: Int +wxSTC_CLW_RUNTIME_EXPRESSIONS = 10 + +wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION :: Int +wxSTC_CLW_BUILTIN_PROCEDURES_FUNCTION = 11 + +wxSTC_CLW_STRUCTURE_DATA_TYPE :: Int +wxSTC_CLW_STRUCTURE_DATA_TYPE = 12 + +wxSTC_CLW_ATTRIBUTE :: Int +wxSTC_CLW_ATTRIBUTE = 13 + +wxSTC_CLW_STANDARD_EQUATE :: Int +wxSTC_CLW_STANDARD_EQUATE = 14 + +wxSTC_CLW_ERROR :: Int +wxSTC_CLW_ERROR = 15 + +wxSTC_CLW_DEPRECATED :: Int +wxSTC_CLW_DEPRECATED = 16 + +wxSTC_LOT_DEFAULT :: Int +wxSTC_LOT_DEFAULT = 0 + +wxSTC_LOT_HEADER :: Int +wxSTC_LOT_HEADER = 1 + +wxSTC_LOT_BREAK :: Int +wxSTC_LOT_BREAK = 2 + +wxSTC_LOT_SET :: Int +wxSTC_LOT_SET = 3 + +wxSTC_LOT_PASS :: Int +wxSTC_LOT_PASS = 4 + +wxSTC_LOT_FAIL :: Int +wxSTC_LOT_FAIL = 5 + +wxSTC_LOT_ABORT :: Int +wxSTC_LOT_ABORT = 6 + +wxSTC_YAML_DEFAULT :: Int +wxSTC_YAML_DEFAULT = 0 + +wxSTC_YAML_COMMENT :: Int +wxSTC_YAML_COMMENT = 1 + +wxSTC_YAML_IDENTIFIER :: Int +wxSTC_YAML_IDENTIFIER = 2 + +wxSTC_YAML_KEYWORD :: Int +wxSTC_YAML_KEYWORD = 3 + +wxSTC_YAML_NUMBER :: Int +wxSTC_YAML_NUMBER = 4 + +wxSTC_YAML_REFERENCE :: Int +wxSTC_YAML_REFERENCE = 5 + +wxSTC_YAML_DOCUMENT :: Int +wxSTC_YAML_DOCUMENT = 6 + +wxSTC_YAML_TEXT :: Int +wxSTC_YAML_TEXT = 7 + +wxSTC_YAML_ERROR :: Int +wxSTC_YAML_ERROR = 8 + +wxSTC_TEX_DEFAULT :: Int +wxSTC_TEX_DEFAULT = 0 + +wxSTC_TEX_SPECIAL :: Int +wxSTC_TEX_SPECIAL = 1 + +wxSTC_TEX_GROUP :: Int +wxSTC_TEX_GROUP = 2 + +wxSTC_TEX_SYMBOL :: Int +wxSTC_TEX_SYMBOL = 3 + +wxSTC_TEX_COMMAND :: Int +wxSTC_TEX_COMMAND = 4 + +wxSTC_TEX_TEXT :: Int +wxSTC_TEX_TEXT = 5 + +wxSTC_METAPOST_DEFAULT :: Int +wxSTC_METAPOST_DEFAULT = 0 + +wxSTC_METAPOST_SPECIAL :: Int +wxSTC_METAPOST_SPECIAL = 1 + +wxSTC_METAPOST_GROUP :: Int +wxSTC_METAPOST_GROUP = 2 + +wxSTC_METAPOST_SYMBOL :: Int +wxSTC_METAPOST_SYMBOL = 3 + +wxSTC_METAPOST_COMMAND :: Int +wxSTC_METAPOST_COMMAND = 4 + +wxSTC_METAPOST_TEXT :: Int +wxSTC_METAPOST_TEXT = 5 + +wxSTC_METAPOST_EXTRA :: Int +wxSTC_METAPOST_EXTRA = 6 + +wxSTC_ERLANG_DEFAULT :: Int +wxSTC_ERLANG_DEFAULT = 0 + +wxSTC_ERLANG_COMMENT :: Int +wxSTC_ERLANG_COMMENT = 1 + +wxSTC_ERLANG_VARIABLE :: Int +wxSTC_ERLANG_VARIABLE = 2 + +wxSTC_ERLANG_NUMBER :: Int +wxSTC_ERLANG_NUMBER = 3 + +wxSTC_ERLANG_KEYWORD :: Int +wxSTC_ERLANG_KEYWORD = 4 + +wxSTC_ERLANG_STRING :: Int +wxSTC_ERLANG_STRING = 5 + +wxSTC_ERLANG_OPERATOR :: Int +wxSTC_ERLANG_OPERATOR = 6 + +wxSTC_ERLANG_ATOM :: Int +wxSTC_ERLANG_ATOM = 7 + +wxSTC_ERLANG_FUNCTION_NAME :: Int +wxSTC_ERLANG_FUNCTION_NAME = 8 + +wxSTC_ERLANG_CHARACTER :: Int +wxSTC_ERLANG_CHARACTER = 9 + +wxSTC_ERLANG_MACRO :: Int +wxSTC_ERLANG_MACRO = 10 + +wxSTC_ERLANG_RECORD :: Int +wxSTC_ERLANG_RECORD = 11 + +wxSTC_ERLANG_SEPARATOR :: Int +wxSTC_ERLANG_SEPARATOR = 12 + +wxSTC_ERLANG_NODE_NAME :: Int +wxSTC_ERLANG_NODE_NAME = 13 + +wxSTC_ERLANG_UNKNOWN :: Int +wxSTC_ERLANG_UNKNOWN = 31 + +wxSTC_MSSQL_DEFAULT :: Int +wxSTC_MSSQL_DEFAULT = 0 + +wxSTC_MSSQL_COMMENT :: Int +wxSTC_MSSQL_COMMENT = 1 + +wxSTC_MSSQL_LINE_COMMENT :: Int +wxSTC_MSSQL_LINE_COMMENT = 2 + +wxSTC_MSSQL_NUMBER :: Int +wxSTC_MSSQL_NUMBER = 3 + +wxSTC_MSSQL_STRING :: Int +wxSTC_MSSQL_STRING = 4 + +wxSTC_MSSQL_OPERATOR :: Int +wxSTC_MSSQL_OPERATOR = 5 + +wxSTC_MSSQL_IDENTIFIER :: Int +wxSTC_MSSQL_IDENTIFIER = 6 + +wxSTC_MSSQL_VARIABLE :: Int +wxSTC_MSSQL_VARIABLE = 7 + +wxSTC_MSSQL_COLUMN_NAME :: Int +wxSTC_MSSQL_COLUMN_NAME = 8 + +wxSTC_MSSQL_STATEMENT :: Int +wxSTC_MSSQL_STATEMENT = 9 + +wxSTC_MSSQL_DATATYPE :: Int +wxSTC_MSSQL_DATATYPE = 10 + +wxSTC_MSSQL_SYSTABLE :: Int +wxSTC_MSSQL_SYSTABLE = 11 + +wxSTC_MSSQL_GLOBAL_VARIABLE :: Int +wxSTC_MSSQL_GLOBAL_VARIABLE = 12 + +wxSTC_MSSQL_FUNCTION :: Int +wxSTC_MSSQL_FUNCTION = 13 + +wxSTC_MSSQL_STORED_PROCEDURE :: Int +wxSTC_MSSQL_STORED_PROCEDURE = 14 + +wxSTC_MSSQL_DEFAULT_PREF_DATATYPE :: Int +wxSTC_MSSQL_DEFAULT_PREF_DATATYPE = 15 + +wxSTC_MSSQL_COLUMN_NAME_2 :: Int +wxSTC_MSSQL_COLUMN_NAME_2 = 16 + +wxSTC_V_DEFAULT :: Int +wxSTC_V_DEFAULT = 0 + +wxSTC_V_COMMENT :: Int +wxSTC_V_COMMENT = 1 + +wxSTC_V_COMMENTLINE :: Int +wxSTC_V_COMMENTLINE = 2 + +wxSTC_V_COMMENTLINEBANG :: Int +wxSTC_V_COMMENTLINEBANG = 3 + +wxSTC_V_NUMBER :: Int +wxSTC_V_NUMBER = 4 + +wxSTC_V_WORD :: Int +wxSTC_V_WORD = 5 + +wxSTC_V_STRING :: Int +wxSTC_V_STRING = 6 + +wxSTC_V_WORD2 :: Int +wxSTC_V_WORD2 = 7 + +wxSTC_V_WORD3 :: Int +wxSTC_V_WORD3 = 8 + +wxSTC_V_PREPROCESSOR :: Int +wxSTC_V_PREPROCESSOR = 9 + +wxSTC_V_OPERATOR :: Int +wxSTC_V_OPERATOR = 10 + +wxSTC_V_IDENTIFIER :: Int +wxSTC_V_IDENTIFIER = 11 + +wxSTC_V_STRINGEOL :: Int +wxSTC_V_STRINGEOL = 12 + +wxSTC_V_USER :: Int +wxSTC_V_USER = 19 + +wxSTC_KIX_DEFAULT :: Int +wxSTC_KIX_DEFAULT = 0 + +wxSTC_KIX_COMMENT :: Int +wxSTC_KIX_COMMENT = 1 + +wxSTC_KIX_STRING1 :: Int +wxSTC_KIX_STRING1 = 2 + +wxSTC_KIX_STRING2 :: Int +wxSTC_KIX_STRING2 = 3 + +wxSTC_KIX_NUMBER :: Int +wxSTC_KIX_NUMBER = 4 + +wxSTC_KIX_VAR :: Int +wxSTC_KIX_VAR = 5 + +wxSTC_KIX_MACRO :: Int +wxSTC_KIX_MACRO = 6 + +wxSTC_KIX_KEYWORD :: Int +wxSTC_KIX_KEYWORD = 7 + +wxSTC_KIX_FUNCTIONS :: Int +wxSTC_KIX_FUNCTIONS = 8 + +wxSTC_KIX_OPERATOR :: Int +wxSTC_KIX_OPERATOR = 9 + +wxSTC_KIX_IDENTIFIER :: Int +wxSTC_KIX_IDENTIFIER = 31 + +wxSTC_GC_DEFAULT :: Int +wxSTC_GC_DEFAULT = 0 + +wxSTC_GC_COMMENTLINE :: Int +wxSTC_GC_COMMENTLINE = 1 + +wxSTC_GC_COMMENTBLOCK :: Int +wxSTC_GC_COMMENTBLOCK = 2 + +wxSTC_GC_GLOBAL :: Int +wxSTC_GC_GLOBAL = 3 + +wxSTC_GC_EVENT :: Int +wxSTC_GC_EVENT = 4 + +wxSTC_GC_ATTRIBUTE :: Int +wxSTC_GC_ATTRIBUTE = 5 + +wxSTC_GC_CONTROL :: Int +wxSTC_GC_CONTROL = 6 + +wxSTC_GC_COMMAND :: Int +wxSTC_GC_COMMAND = 7 + +wxSTC_GC_STRING :: Int +wxSTC_GC_STRING = 8 + +wxSTC_GC_OPERATOR :: Int +wxSTC_GC_OPERATOR = 9 + +wxSTC_SN_DEFAULT :: Int +wxSTC_SN_DEFAULT = 0 + +wxSTC_SN_CODE :: Int +wxSTC_SN_CODE = 1 + +wxSTC_SN_COMMENTLINE :: Int +wxSTC_SN_COMMENTLINE = 2 + +wxSTC_SN_COMMENTLINEBANG :: Int +wxSTC_SN_COMMENTLINEBANG = 3 + +wxSTC_SN_NUMBER :: Int +wxSTC_SN_NUMBER = 4 + +wxSTC_SN_WORD :: Int +wxSTC_SN_WORD = 5 + +wxSTC_SN_STRING :: Int +wxSTC_SN_STRING = 6 + +wxSTC_SN_WORD2 :: Int +wxSTC_SN_WORD2 = 7 + +wxSTC_SN_WORD3 :: Int +wxSTC_SN_WORD3 = 8 + +wxSTC_SN_PREPROCESSOR :: Int +wxSTC_SN_PREPROCESSOR = 9 + +wxSTC_SN_OPERATOR :: Int +wxSTC_SN_OPERATOR = 10 + +wxSTC_SN_IDENTIFIER :: Int +wxSTC_SN_IDENTIFIER = 11 + +wxSTC_SN_STRINGEOL :: Int +wxSTC_SN_STRINGEOL = 12 + +wxSTC_SN_REGEXTAG :: Int +wxSTC_SN_REGEXTAG = 13 + +wxSTC_SN_SIGNAL :: Int +wxSTC_SN_SIGNAL = 14 + +wxSTC_SN_USER :: Int +wxSTC_SN_USER = 19 + +wxSTC_AU3_DEFAULT :: Int +wxSTC_AU3_DEFAULT = 0 + +wxSTC_AU3_COMMENT :: Int +wxSTC_AU3_COMMENT = 1 + +wxSTC_AU3_COMMENTBLOCK :: Int +wxSTC_AU3_COMMENTBLOCK = 2 + +wxSTC_AU3_NUMBER :: Int +wxSTC_AU3_NUMBER = 3 + +wxSTC_AU3_FUNCTION :: Int +wxSTC_AU3_FUNCTION = 4 + +wxSTC_AU3_KEYWORD :: Int +wxSTC_AU3_KEYWORD = 5 + +wxSTC_AU3_MACRO :: Int +wxSTC_AU3_MACRO = 6 + +wxSTC_AU3_STRING :: Int +wxSTC_AU3_STRING = 7 + +wxSTC_AU3_OPERATOR :: Int +wxSTC_AU3_OPERATOR = 8 + +wxSTC_AU3_VARIABLE :: Int +wxSTC_AU3_VARIABLE = 9 + +wxSTC_AU3_SENT :: Int +wxSTC_AU3_SENT = 10 + +wxSTC_AU3_PREPROCESSOR :: Int +wxSTC_AU3_PREPROCESSOR = 11 + +wxSTC_AU3_SPECIAL :: Int +wxSTC_AU3_SPECIAL = 12 + +wxSTC_AU3_EXPAND :: Int +wxSTC_AU3_EXPAND = 13 + +wxSTC_AU3_COMOBJ :: Int +wxSTC_AU3_COMOBJ = 14 + +wxSTC_APDL_DEFAULT :: Int +wxSTC_APDL_DEFAULT = 0 + +wxSTC_APDL_COMMENT :: Int +wxSTC_APDL_COMMENT = 1 + +wxSTC_APDL_COMMENTBLOCK :: Int +wxSTC_APDL_COMMENTBLOCK = 2 + +wxSTC_APDL_NUMBER :: Int +wxSTC_APDL_NUMBER = 3 + +wxSTC_APDL_STRING :: Int +wxSTC_APDL_STRING = 4 + +wxSTC_APDL_OPERATOR :: Int +wxSTC_APDL_OPERATOR = 5 + +wxSTC_APDL_WORD :: Int +wxSTC_APDL_WORD = 6 + +wxSTC_APDL_PROCESSOR :: Int +wxSTC_APDL_PROCESSOR = 7 + +wxSTC_APDL_COMMAND :: Int +wxSTC_APDL_COMMAND = 8 + +wxSTC_APDL_SLASHCOMMAND :: Int +wxSTC_APDL_SLASHCOMMAND = 9 + +wxSTC_APDL_STARCOMMAND :: Int +wxSTC_APDL_STARCOMMAND = 10 + +wxSTC_APDL_ARGUMENT :: Int +wxSTC_APDL_ARGUMENT = 11 + +wxSTC_APDL_FUNCTION :: Int +wxSTC_APDL_FUNCTION = 12 + +wxSTC_SH_DEFAULT :: Int +wxSTC_SH_DEFAULT = 0 + +wxSTC_SH_ERROR :: Int +wxSTC_SH_ERROR = 1 + +wxSTC_SH_COMMENTLINE :: Int +wxSTC_SH_COMMENTLINE = 2 + +wxSTC_SH_NUMBER :: Int +wxSTC_SH_NUMBER = 3 + +wxSTC_SH_WORD :: Int +wxSTC_SH_WORD = 4 + +wxSTC_SH_STRING :: Int +wxSTC_SH_STRING = 5 + +wxSTC_SH_CHARACTER :: Int +wxSTC_SH_CHARACTER = 6 + +wxSTC_SH_OPERATOR :: Int +wxSTC_SH_OPERATOR = 7 + +wxSTC_SH_IDENTIFIER :: Int +wxSTC_SH_IDENTIFIER = 8 + +wxSTC_SH_SCALAR :: Int +wxSTC_SH_SCALAR = 9 + +wxSTC_SH_PARAM :: Int +wxSTC_SH_PARAM = 10 + +wxSTC_SH_BACKTICKS :: Int +wxSTC_SH_BACKTICKS = 11 + +wxSTC_SH_HERE_DELIM :: Int +wxSTC_SH_HERE_DELIM = 12 + +wxSTC_SH_HERE_Q :: Int +wxSTC_SH_HERE_Q = 13 + +wxSTC_ASN1_DEFAULT :: Int +wxSTC_ASN1_DEFAULT = 0 + +wxSTC_ASN1_COMMENT :: Int +wxSTC_ASN1_COMMENT = 1 + +wxSTC_ASN1_IDENTIFIER :: Int +wxSTC_ASN1_IDENTIFIER = 2 + +wxSTC_ASN1_STRING :: Int +wxSTC_ASN1_STRING = 3 + +wxSTC_ASN1_OID :: Int +wxSTC_ASN1_OID = 4 + +wxSTC_ASN1_SCALAR :: Int +wxSTC_ASN1_SCALAR = 5 + +wxSTC_ASN1_KEYWORD :: Int +wxSTC_ASN1_KEYWORD = 6 + +wxSTC_ASN1_ATTRIBUTE :: Int +wxSTC_ASN1_ATTRIBUTE = 7 + +wxSTC_ASN1_DESCRIPTOR :: Int +wxSTC_ASN1_DESCRIPTOR = 8 + +wxSTC_ASN1_TYPE :: Int +wxSTC_ASN1_TYPE = 9 + +wxSTC_ASN1_OPERATOR :: Int +wxSTC_ASN1_OPERATOR = 10 + +wxSTC_VHDL_DEFAULT :: Int +wxSTC_VHDL_DEFAULT = 0 + +wxSTC_VHDL_COMMENT :: Int +wxSTC_VHDL_COMMENT = 1 + +wxSTC_VHDL_COMMENTLINEBANG :: Int +wxSTC_VHDL_COMMENTLINEBANG = 2 + +wxSTC_VHDL_NUMBER :: Int +wxSTC_VHDL_NUMBER = 3 + +wxSTC_VHDL_STRING :: Int +wxSTC_VHDL_STRING = 4 + +wxSTC_VHDL_OPERATOR :: Int +wxSTC_VHDL_OPERATOR = 5 + +wxSTC_VHDL_IDENTIFIER :: Int +wxSTC_VHDL_IDENTIFIER = 6 + +wxSTC_VHDL_STRINGEOL :: Int +wxSTC_VHDL_STRINGEOL = 7 + +wxSTC_VHDL_KEYWORD :: Int +wxSTC_VHDL_KEYWORD = 8 + +wxSTC_VHDL_STDOPERATOR :: Int +wxSTC_VHDL_STDOPERATOR = 9 + +wxSTC_VHDL_ATTRIBUTE :: Int +wxSTC_VHDL_ATTRIBUTE = 10 + +wxSTC_VHDL_STDFUNCTION :: Int +wxSTC_VHDL_STDFUNCTION = 11 + +wxSTC_VHDL_STDPACKAGE :: Int +wxSTC_VHDL_STDPACKAGE = 12 + +wxSTC_VHDL_STDTYPE :: Int +wxSTC_VHDL_STDTYPE = 13 + +wxSTC_VHDL_USERWORD :: Int +wxSTC_VHDL_USERWORD = 14 + +wxSTC_CAML_DEFAULT :: Int +wxSTC_CAML_DEFAULT = 0 + +wxSTC_CAML_IDENTIFIER :: Int +wxSTC_CAML_IDENTIFIER = 1 + +wxSTC_CAML_TAGNAME :: Int +wxSTC_CAML_TAGNAME = 2 + +wxSTC_CAML_KEYWORD :: Int +wxSTC_CAML_KEYWORD = 3 + +wxSTC_CAML_KEYWORD2 :: Int +wxSTC_CAML_KEYWORD2 = 4 + +wxSTC_CAML_KEYWORD3 :: Int +wxSTC_CAML_KEYWORD3 = 5 + +wxSTC_CAML_LINENUM :: Int +wxSTC_CAML_LINENUM = 6 + +wxSTC_CAML_OPERATOR :: Int +wxSTC_CAML_OPERATOR = 7 + +wxSTC_CAML_NUMBER :: Int +wxSTC_CAML_NUMBER = 8 + +wxSTC_CAML_CHAR :: Int +wxSTC_CAML_CHAR = 9 + +wxSTC_CAML_STRING :: Int +wxSTC_CAML_STRING = 11 + +wxSTC_CAML_COMMENT :: Int +wxSTC_CAML_COMMENT = 12 + +wxSTC_CAML_COMMENT1 :: Int +wxSTC_CAML_COMMENT1 = 13 + +wxSTC_CAML_COMMENT2 :: Int +wxSTC_CAML_COMMENT2 = 14 + +wxSTC_CAML_COMMENT3 :: Int +wxSTC_CAML_COMMENT3 = 15 + +wxSTC_T3_DEFAULT :: Int +wxSTC_T3_DEFAULT = 0 + +wxSTC_T3_X_DEFAULT :: Int +wxSTC_T3_X_DEFAULT = 1 + +wxSTC_T3_PREPROCESSOR :: Int +wxSTC_T3_PREPROCESSOR = 2 + +wxSTC_T3_BLOCK_COMMENT :: Int +wxSTC_T3_BLOCK_COMMENT = 3 + +wxSTC_T3_LINE_COMMENT :: Int +wxSTC_T3_LINE_COMMENT = 4 + +wxSTC_T3_OPERATOR :: Int +wxSTC_T3_OPERATOR = 5 + +wxSTC_T3_KEYWORD :: Int +wxSTC_T3_KEYWORD = 6 + +wxSTC_T3_NUMBER :: Int +wxSTC_T3_NUMBER = 7 + +wxSTC_T3_IDENTIFIER :: Int +wxSTC_T3_IDENTIFIER = 8 + +wxSTC_T3_S_STRING :: Int +wxSTC_T3_S_STRING = 9 + +wxSTC_T3_D_STRING :: Int +wxSTC_T3_D_STRING = 10 + +wxSTC_T3_X_STRING :: Int +wxSTC_T3_X_STRING = 11 + +wxSTC_T3_LIB_DIRECTIVE :: Int +wxSTC_T3_LIB_DIRECTIVE = 12 + +wxSTC_T3_MSG_PARAM :: Int +wxSTC_T3_MSG_PARAM = 13 + +wxSTC_T3_HTML_TAG :: Int +wxSTC_T3_HTML_TAG = 14 + +wxSTC_T3_HTML_DEFAULT :: Int +wxSTC_T3_HTML_DEFAULT = 15 + +wxSTC_T3_HTML_STRING :: Int +wxSTC_T3_HTML_STRING = 16 + +wxSTC_T3_USER1 :: Int +wxSTC_T3_USER1 = 17 + +wxSTC_T3_USER2 :: Int +wxSTC_T3_USER2 = 18 + +wxSTC_T3_USER3 :: Int +wxSTC_T3_USER3 = 19 + +wxSTC_REBOL_DEFAULT :: Int +wxSTC_REBOL_DEFAULT = 0 + +wxSTC_REBOL_COMMENTLINE :: Int +wxSTC_REBOL_COMMENTLINE = 1 + +wxSTC_REBOL_COMMENTBLOCK :: Int +wxSTC_REBOL_COMMENTBLOCK = 2 + +wxSTC_REBOL_PREFACE :: Int +wxSTC_REBOL_PREFACE = 3 + +wxSTC_REBOL_OPERATOR :: Int +wxSTC_REBOL_OPERATOR = 4 + +wxSTC_REBOL_CHARACTER :: Int +wxSTC_REBOL_CHARACTER = 5 + +wxSTC_REBOL_QUOTEDSTRING :: Int +wxSTC_REBOL_QUOTEDSTRING = 6 + +wxSTC_REBOL_BRACEDSTRING :: Int +wxSTC_REBOL_BRACEDSTRING = 7 + +wxSTC_REBOL_NUMBER :: Int +wxSTC_REBOL_NUMBER = 8 + +wxSTC_REBOL_PAIR :: Int +wxSTC_REBOL_PAIR = 9 + +wxSTC_REBOL_TUPLE :: Int +wxSTC_REBOL_TUPLE = 10 + +wxSTC_REBOL_BINARY :: Int +wxSTC_REBOL_BINARY = 11 + +wxSTC_REBOL_MONEY :: Int +wxSTC_REBOL_MONEY = 12 + +wxSTC_REBOL_ISSUE :: Int +wxSTC_REBOL_ISSUE = 13 + +wxSTC_REBOL_TAG :: Int +wxSTC_REBOL_TAG = 14 + +wxSTC_REBOL_FILE :: Int +wxSTC_REBOL_FILE = 15 + +wxSTC_REBOL_EMAIL :: Int +wxSTC_REBOL_EMAIL = 16 + +wxSTC_REBOL_URL :: Int +wxSTC_REBOL_URL = 17 + +wxSTC_REBOL_DATE :: Int +wxSTC_REBOL_DATE = 18 + +wxSTC_REBOL_TIME :: Int +wxSTC_REBOL_TIME = 19 + +wxSTC_REBOL_IDENTIFIER :: Int +wxSTC_REBOL_IDENTIFIER = 20 + +wxSTC_REBOL_WORD :: Int +wxSTC_REBOL_WORD = 21 + +wxSTC_REBOL_WORD2 :: Int +wxSTC_REBOL_WORD2 = 22 + +wxSTC_REBOL_WORD3 :: Int +wxSTC_REBOL_WORD3 = 23 + +wxSTC_REBOL_WORD4 :: Int +wxSTC_REBOL_WORD4 = 24 + +wxSTC_REBOL_WORD5 :: Int +wxSTC_REBOL_WORD5 = 25 + +wxSTC_REBOL_WORD6 :: Int +wxSTC_REBOL_WORD6 = 26 + +wxSTC_REBOL_WORD7 :: Int +wxSTC_REBOL_WORD7 = 27 + +wxSTC_REBOL_WORD8 :: Int +wxSTC_REBOL_WORD8 = 28 + +wxSTC_SQL_DEFAULT :: Int +wxSTC_SQL_DEFAULT = 0 + +wxSTC_SQL_COMMENT :: Int +wxSTC_SQL_COMMENT = 1 + +wxSTC_SQL_COMMENTLINE :: Int +wxSTC_SQL_COMMENTLINE = 2 + +wxSTC_SQL_COMMENTDOC :: Int +wxSTC_SQL_COMMENTDOC = 3 + +wxSTC_SQL_NUMBER :: Int +wxSTC_SQL_NUMBER = 4 + +wxSTC_SQL_WORD :: Int +wxSTC_SQL_WORD = 5 + +wxSTC_SQL_STRING :: Int +wxSTC_SQL_STRING = 6 + +wxSTC_SQL_CHARACTER :: Int +wxSTC_SQL_CHARACTER = 7 + +wxSTC_SQL_SQLPLUS :: Int +wxSTC_SQL_SQLPLUS = 8 + +wxSTC_SQL_SQLPLUS_PROMPT :: Int +wxSTC_SQL_SQLPLUS_PROMPT = 9 + +wxSTC_SQL_OPERATOR :: Int +wxSTC_SQL_OPERATOR = 10 + +wxSTC_SQL_IDENTIFIER :: Int +wxSTC_SQL_IDENTIFIER = 11 + +wxSTC_SQL_SQLPLUS_COMMENT :: Int +wxSTC_SQL_SQLPLUS_COMMENT = 13 + +wxSTC_SQL_COMMENTLINEDOC :: Int +wxSTC_SQL_COMMENTLINEDOC = 15 + +wxSTC_SQL_WORD2 :: Int +wxSTC_SQL_WORD2 = 16 + +wxSTC_SQL_COMMENTDOCKEYWORD :: Int +wxSTC_SQL_COMMENTDOCKEYWORD = 17 + +wxSTC_SQL_COMMENTDOCKEYWORDERROR :: Int +wxSTC_SQL_COMMENTDOCKEYWORDERROR = 18 + +wxSTC_SQL_USER1 :: Int +wxSTC_SQL_USER1 = 19 + +wxSTC_SQL_USER2 :: Int +wxSTC_SQL_USER2 = 20 + +wxSTC_SQL_USER3 :: Int +wxSTC_SQL_USER3 = 21 + +wxSTC_SQL_USER4 :: Int +wxSTC_SQL_USER4 = 22 + +wxSTC_SQL_QUOTEDIDENTIFIER :: Int +wxSTC_SQL_QUOTEDIDENTIFIER = 23 + +wxSTC_ST_DEFAULT :: Int +wxSTC_ST_DEFAULT = 0 + +wxSTC_ST_STRING :: Int +wxSTC_ST_STRING = 1 + +wxSTC_ST_NUMBER :: Int +wxSTC_ST_NUMBER = 2 + +wxSTC_ST_COMMENT :: Int +wxSTC_ST_COMMENT = 3 + +wxSTC_ST_SYMBOL :: Int +wxSTC_ST_SYMBOL = 4 + +wxSTC_ST_BINARY :: Int +wxSTC_ST_BINARY = 5 + +wxSTC_ST_BOOL :: Int +wxSTC_ST_BOOL = 6 + +wxSTC_ST_SELF :: Int +wxSTC_ST_SELF = 7 + +wxSTC_ST_SUPER :: Int +wxSTC_ST_SUPER = 8 + +wxSTC_ST_NIL :: Int +wxSTC_ST_NIL = 9 + +wxSTC_ST_GLOBAL :: Int +wxSTC_ST_GLOBAL = 10 + +wxSTC_ST_RETURN :: Int +wxSTC_ST_RETURN = 11 + +wxSTC_ST_SPECIAL :: Int +wxSTC_ST_SPECIAL = 12 + +wxSTC_ST_KWSEND :: Int +wxSTC_ST_KWSEND = 13 + +wxSTC_ST_ASSIGN :: Int +wxSTC_ST_ASSIGN = 14 + +wxSTC_ST_CHARACTER :: Int +wxSTC_ST_CHARACTER = 15 + +wxSTC_ST_SPEC_SEL :: Int +wxSTC_ST_SPEC_SEL = 16 + +wxSTC_FS_DEFAULT :: Int +wxSTC_FS_DEFAULT = 0 + +wxSTC_FS_COMMENT :: Int +wxSTC_FS_COMMENT = 1 + +wxSTC_FS_COMMENTLINE :: Int +wxSTC_FS_COMMENTLINE = 2 + +wxSTC_FS_COMMENTDOC :: Int +wxSTC_FS_COMMENTDOC = 3 + +wxSTC_FS_COMMENTLINEDOC :: Int +wxSTC_FS_COMMENTLINEDOC = 4 + +wxSTC_FS_COMMENTDOCKEYWORD :: Int +wxSTC_FS_COMMENTDOCKEYWORD = 5 + +wxSTC_FS_COMMENTDOCKEYWORDERROR :: Int +wxSTC_FS_COMMENTDOCKEYWORDERROR = 6 + +wxSTC_FS_KEYWORD :: Int +wxSTC_FS_KEYWORD = 7 + +wxSTC_FS_KEYWORD2 :: Int +wxSTC_FS_KEYWORD2 = 8 + +wxSTC_FS_KEYWORD3 :: Int +wxSTC_FS_KEYWORD3 = 9 + +wxSTC_FS_KEYWORD4 :: Int +wxSTC_FS_KEYWORD4 = 10 + +wxSTC_FS_NUMBER :: Int +wxSTC_FS_NUMBER = 11 + +wxSTC_FS_STRING :: Int +wxSTC_FS_STRING = 12 + +wxSTC_FS_PREPROCESSOR :: Int +wxSTC_FS_PREPROCESSOR = 13 + +wxSTC_FS_OPERATOR :: Int +wxSTC_FS_OPERATOR = 14 + +wxSTC_FS_IDENTIFIER :: Int +wxSTC_FS_IDENTIFIER = 15 + +wxSTC_FS_DATE :: Int +wxSTC_FS_DATE = 16 + +wxSTC_FS_STRINGEOL :: Int +wxSTC_FS_STRINGEOL = 17 + +wxSTC_FS_CONSTANT :: Int +wxSTC_FS_CONSTANT = 18 + +wxSTC_FS_ASM :: Int +wxSTC_FS_ASM = 19 + +wxSTC_FS_LABEL :: Int +wxSTC_FS_LABEL = 20 + +wxSTC_FS_ERROR :: Int +wxSTC_FS_ERROR = 21 + +wxSTC_FS_HEXNUMBER :: Int +wxSTC_FS_HEXNUMBER = 22 + +wxSTC_FS_BINNUMBER :: Int +wxSTC_FS_BINNUMBER = 23 + +wxSTC_CSOUND_DEFAULT :: Int +wxSTC_CSOUND_DEFAULT = 0 + +wxSTC_CSOUND_COMMENT :: Int +wxSTC_CSOUND_COMMENT = 1 + +wxSTC_CSOUND_NUMBER :: Int +wxSTC_CSOUND_NUMBER = 2 + +wxSTC_CSOUND_OPERATOR :: Int +wxSTC_CSOUND_OPERATOR = 3 + +wxSTC_CSOUND_INSTR :: Int +wxSTC_CSOUND_INSTR = 4 + +wxSTC_CSOUND_IDENTIFIER :: Int +wxSTC_CSOUND_IDENTIFIER = 5 + +wxSTC_CSOUND_OPCODE :: Int +wxSTC_CSOUND_OPCODE = 6 + +wxSTC_CSOUND_HEADERSTMT :: Int +wxSTC_CSOUND_HEADERSTMT = 7 + +wxSTC_CSOUND_USERKEYWORD :: Int +wxSTC_CSOUND_USERKEYWORD = 8 + +wxSTC_CSOUND_COMMENTBLOCK :: Int +wxSTC_CSOUND_COMMENTBLOCK = 9 + +wxSTC_CSOUND_PARAM :: Int +wxSTC_CSOUND_PARAM = 10 + +wxSTC_CSOUND_ARATE_VAR :: Int +wxSTC_CSOUND_ARATE_VAR = 11 + +wxSTC_CSOUND_KRATE_VAR :: Int +wxSTC_CSOUND_KRATE_VAR = 12 + +wxSTC_CSOUND_IRATE_VAR :: Int +wxSTC_CSOUND_IRATE_VAR = 13 + +wxSTC_CSOUND_GLOBAL_VAR :: Int +wxSTC_CSOUND_GLOBAL_VAR = 14 + +wxSTC_CSOUND_STRINGEOL :: Int +wxSTC_CSOUND_STRINGEOL = 15 + +wxSTC_CMD_REDO :: Int +wxSTC_CMD_REDO = 2011 + +wxSTC_CMD_SELECTALL :: Int +wxSTC_CMD_SELECTALL = 2013 + +wxSTC_CMD_UNDO :: Int +wxSTC_CMD_UNDO = 2176 + +wxSTC_CMD_CUT :: Int +wxSTC_CMD_CUT = 2177 + +wxSTC_CMD_COPY :: Int +wxSTC_CMD_COPY = 2178 + +wxSTC_CMD_PASTE :: Int +wxSTC_CMD_PASTE = 2179 + +wxSTC_CMD_CLEAR :: Int +wxSTC_CMD_CLEAR = 2180 + +wxSTC_CMD_LINEDOWN :: Int +wxSTC_CMD_LINEDOWN = 2300 + +wxSTC_CMD_LINEDOWNEXTEND :: Int +wxSTC_CMD_LINEDOWNEXTEND = 2301 + +wxSTC_CMD_LINEUP :: Int +wxSTC_CMD_LINEUP = 2302 + +wxSTC_CMD_LINEUPEXTEND :: Int +wxSTC_CMD_LINEUPEXTEND = 2303 + +wxSTC_CMD_CHARLEFT :: Int +wxSTC_CMD_CHARLEFT = 2304 + +wxSTC_CMD_CHARLEFTEXTEND :: Int +wxSTC_CMD_CHARLEFTEXTEND = 2305 + +wxSTC_CMD_CHARRIGHT :: Int +wxSTC_CMD_CHARRIGHT = 2306 + +wxSTC_CMD_CHARRIGHTEXTEND :: Int +wxSTC_CMD_CHARRIGHTEXTEND = 2307 + +wxSTC_CMD_WORDLEFT :: Int +wxSTC_CMD_WORDLEFT = 2308 + +wxSTC_CMD_WORDLEFTEXTEND :: Int +wxSTC_CMD_WORDLEFTEXTEND = 2309 + +wxSTC_CMD_WORDRIGHT :: Int +wxSTC_CMD_WORDRIGHT = 2310 + +wxSTC_CMD_WORDRIGHTEXTEND :: Int +wxSTC_CMD_WORDRIGHTEXTEND = 2311 + +wxSTC_CMD_HOME :: Int +wxSTC_CMD_HOME = 2312 + +wxSTC_CMD_HOMEEXTEND :: Int +wxSTC_CMD_HOMEEXTEND = 2313 + +wxSTC_CMD_LINEEND :: Int +wxSTC_CMD_LINEEND = 2314 + +wxSTC_CMD_LINEENDEXTEND :: Int +wxSTC_CMD_LINEENDEXTEND = 2315 + +wxSTC_CMD_DOCUMENTSTART :: Int +wxSTC_CMD_DOCUMENTSTART = 2316 + +wxSTC_CMD_DOCUMENTSTARTEXTEND :: Int +wxSTC_CMD_DOCUMENTSTARTEXTEND = 2317 + +wxSTC_CMD_DOCUMENTEND :: Int +wxSTC_CMD_DOCUMENTEND = 2318 + +wxSTC_CMD_DOCUMENTENDEXTEND :: Int +wxSTC_CMD_DOCUMENTENDEXTEND = 2319 + +wxSTC_CMD_PAGEUP :: Int +wxSTC_CMD_PAGEUP = 2320 + +wxSTC_CMD_PAGEUPEXTEND :: Int +wxSTC_CMD_PAGEUPEXTEND = 2321 + +wxSTC_CMD_PAGEDOWN :: Int +wxSTC_CMD_PAGEDOWN = 2322 + +wxSTC_CMD_PAGEDOWNEXTEND :: Int +wxSTC_CMD_PAGEDOWNEXTEND = 2323 + +wxSTC_CMD_EDITTOGGLEOVERTYPE :: Int +wxSTC_CMD_EDITTOGGLEOVERTYPE = 2324 + +wxSTC_CMD_CANCEL :: Int +wxSTC_CMD_CANCEL = 2325 + +wxSTC_CMD_DELETEBACK :: Int +wxSTC_CMD_DELETEBACK = 2326 + +wxSTC_CMD_TAB :: Int +wxSTC_CMD_TAB = 2327 + +wxSTC_CMD_BACKTAB :: Int +wxSTC_CMD_BACKTAB = 2328 + +wxSTC_CMD_NEWLINE :: Int +wxSTC_CMD_NEWLINE = 2329 + +wxSTC_CMD_FORMFEED :: Int +wxSTC_CMD_FORMFEED = 2330 + +wxSTC_CMD_VCHOME :: Int +wxSTC_CMD_VCHOME = 2331 + +wxSTC_CMD_VCHOMEEXTEND :: Int +wxSTC_CMD_VCHOMEEXTEND = 2332 + +wxSTC_CMD_ZOOMIN :: Int +wxSTC_CMD_ZOOMIN = 2333 + +wxSTC_CMD_ZOOMOUT :: Int +wxSTC_CMD_ZOOMOUT = 2334 + +wxSTC_CMD_DELWORDLEFT :: Int +wxSTC_CMD_DELWORDLEFT = 2335 + +wxSTC_CMD_DELWORDRIGHT :: Int +wxSTC_CMD_DELWORDRIGHT = 2336 + +wxSTC_CMD_LINECUT :: Int +wxSTC_CMD_LINECUT = 2337 + +wxSTC_CMD_LINEDELETE :: Int +wxSTC_CMD_LINEDELETE = 2338 + +wxSTC_CMD_LINETRANSPOSE :: Int +wxSTC_CMD_LINETRANSPOSE = 2339 + +wxSTC_CMD_LINEDUPLICATE :: Int +wxSTC_CMD_LINEDUPLICATE = 2404 + +wxSTC_CMD_LOWERCASE :: Int +wxSTC_CMD_LOWERCASE = 2340 + +wxSTC_CMD_UPPERCASE :: Int +wxSTC_CMD_UPPERCASE = 2341 + +wxSTC_CMD_LINESCROLLDOWN :: Int +wxSTC_CMD_LINESCROLLDOWN = 2342 + +wxSTC_CMD_LINESCROLLUP :: Int +wxSTC_CMD_LINESCROLLUP = 2343 + +wxSTC_CMD_DELETEBACKNOTLINE :: Int +wxSTC_CMD_DELETEBACKNOTLINE = 2344 + +wxSTC_CMD_HOMEDISPLAY :: Int +wxSTC_CMD_HOMEDISPLAY = 2345 + +wxSTC_CMD_HOMEDISPLAYEXTEND :: Int +wxSTC_CMD_HOMEDISPLAYEXTEND = 2346 + +wxSTC_CMD_LINEENDDISPLAY :: Int +wxSTC_CMD_LINEENDDISPLAY = 2347 + +wxSTC_CMD_LINEENDDISPLAYEXTEND :: Int +wxSTC_CMD_LINEENDDISPLAYEXTEND = 2348 + +wxSTC_CMD_HOMEWRAP :: Int +wxSTC_CMD_HOMEWRAP = 2349 + +wxSTC_CMD_HOMEWRAPEXTEND :: Int +wxSTC_CMD_HOMEWRAPEXTEND = 2450 + +wxSTC_CMD_LINEENDWRAP :: Int +wxSTC_CMD_LINEENDWRAP = 2451 + +wxSTC_CMD_LINEENDWRAPEXTEND :: Int +wxSTC_CMD_LINEENDWRAPEXTEND = 2452 + +wxSTC_CMD_VCHOMEWRAP :: Int +wxSTC_CMD_VCHOMEWRAP = 2453 + +wxSTC_CMD_VCHOMEWRAPEXTEND :: Int +wxSTC_CMD_VCHOMEWRAPEXTEND = 2454 + +wxSTC_CMD_LINECOPY :: Int +wxSTC_CMD_LINECOPY = 2455 + +wxSTC_CMD_WORDPARTLEFT :: Int +wxSTC_CMD_WORDPARTLEFT = 2390 + +wxSTC_CMD_WORDPARTLEFTEXTEND :: Int +wxSTC_CMD_WORDPARTLEFTEXTEND = 2391 + +wxSTC_CMD_WORDPARTRIGHT :: Int +wxSTC_CMD_WORDPARTRIGHT = 2392 + +wxSTC_CMD_WORDPARTRIGHTEXTEND :: Int +wxSTC_CMD_WORDPARTRIGHTEXTEND = 2393 + +wxSTC_CMD_DELLINELEFT :: Int +wxSTC_CMD_DELLINELEFT = 2395 + +wxSTC_CMD_DELLINERIGHT :: Int +wxSTC_CMD_DELLINERIGHT = 2396 + +wxSTC_CMD_PARADOWN :: Int +wxSTC_CMD_PARADOWN = 2413 + +wxSTC_CMD_PARADOWNEXTEND :: Int +wxSTC_CMD_PARADOWNEXTEND = 2414 + +wxSTC_CMD_PARAUP :: Int +wxSTC_CMD_PARAUP = 2415 + +wxSTC_CMD_PARAUPEXTEND :: Int +wxSTC_CMD_PARAUPEXTEND = 2416 + +wxSTC_CMD_LINEDOWNRECTEXTEND :: Int +wxSTC_CMD_LINEDOWNRECTEXTEND = 2426 + +wxSTC_CMD_LINEUPRECTEXTEND :: Int +wxSTC_CMD_LINEUPRECTEXTEND = 2427 + +wxSTC_CMD_CHARLEFTRECTEXTEND :: Int +wxSTC_CMD_CHARLEFTRECTEXTEND = 2428 + +wxSTC_CMD_CHARRIGHTRECTEXTEND :: Int +wxSTC_CMD_CHARRIGHTRECTEXTEND = 2429 + +wxSTC_CMD_HOMERECTEXTEND :: Int +wxSTC_CMD_HOMERECTEXTEND = 2430 + +wxSTC_CMD_VCHOMERECTEXTEND :: Int +wxSTC_CMD_VCHOMERECTEXTEND = 2431 + +wxSTC_CMD_LINEENDRECTEXTEND :: Int +wxSTC_CMD_LINEENDRECTEXTEND = 2432 + +wxSTC_CMD_PAGEUPRECTEXTEND :: Int +wxSTC_CMD_PAGEUPRECTEXTEND = 2433 + +wxSTC_CMD_PAGEDOWNRECTEXTEND :: Int +wxSTC_CMD_PAGEDOWNRECTEXTEND = 2434 + +wxSTC_CMD_STUTTEREDPAGEUP :: Int +wxSTC_CMD_STUTTEREDPAGEUP = 2435 + +wxSTC_CMD_STUTTEREDPAGEUPEXTEND :: Int +wxSTC_CMD_STUTTEREDPAGEUPEXTEND = 2436 + +wxSTC_CMD_STUTTEREDPAGEDOWN :: Int +wxSTC_CMD_STUTTEREDPAGEDOWN = 2437 + +wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND :: Int +wxSTC_CMD_STUTTEREDPAGEDOWNEXTEND = 2438 + +wxSTC_CMD_WORDLEFTEND :: Int +wxSTC_CMD_WORDLEFTEND = 2439 + +wxSTC_CMD_WORDLEFTENDEXTEND :: Int +wxSTC_CMD_WORDLEFTENDEXTEND = 2440 + +wxSTC_CMD_WORDRIGHTEND :: Int +wxSTC_CMD_WORDRIGHTEND = 2441 + +wxSTC_CMD_WORDRIGHTENDEXTEND :: Int +wxSTC_CMD_WORDRIGHTENDEXTEND = 2442 +
src/haskell/Graphics/UI/WXCore/WxcObject.hs view
@@ -1,194 +1,194 @@-{-# LANGUAGE CPP, ForeignFunctionInterface #-}-------------------------------------------------------------------------------------------{-| Module : WxcObject- Copyright : (c) Daan Leijen 2003, 2004- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Basic object type.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcObject(- -- * Object types- Object, objectNull, objectIsNull, objectCast, objectIsManaged- , objectFromPtr, objectFromManagedPtr- , withObjectPtr- , objectFinalize, objectNoFinalize- -- * Managed objects- , ManagedPtr, TManagedPtr, CManagedPtr- ) where--import Control.Exception -import System.IO.Unsafe( unsafePerformIO )-import Foreign.C-import Foreign.Ptr-import Foreign.Storable-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array--{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"- See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}-import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)-import Foreign.Concurrent--{------------------------------------------------------------------------------------------ Objects------------------------------------------------------------------------------------------}--{- | An @Object a@ is a pointer to an object of type @a@. The @a@ parameter is used- to encode the inheritance relation. When the type parameter is unit @()@, it denotes- an object of exactly that class, when the parameter is a type variable @a@, it- specifies an object that is at least an instance of that class. For example in - wxWidgets, we have the following class hierarchy:-- > EvtHandler- > |- Window- > |- Frame- > |- Control- > |- Button- > |- Radiobox-- In wxHaskell, all the creation functions will return objects of exactly that- class and use the @()@ type:-- > frameCreate :: Window a -> ... -> IO (Frame ())- > buttonCreate :: Window a -> ... -> IO (Button ())- > ...-- In contrast, all the /this/ (or /self/) pointers of methods can take objects- of any instance of that class and have a type variable, for example:-- > windowSetClientSize :: Window a -> Size -> IO ()- > controlSetLabel :: Control a -> String -> IO ()- > buttonSetDefault :: Button a -> IO ()-- This means that we can use @windowSetClientSize@ on any window, including- buttons and frames, but we can only use @controlSetLabel@ on controls, not- including frames.-- In wxHaskell, this works since a @Frame ()@ is actually a type synonym for- @Window (CFrame ())@ (where @CFrame@ is an abstract data type). We can thus- pass a value of type @Frame ()@ to anything that expects some @Window a@.- For a button this works too, as it is a synonym for @Control (CButton ())@- which is in turn a synonym for @Window (CControl (CButton ()))@. Note that- we can\'t pass a frame to something that expects a value of type @Control a@.- Of course, a @Window a@ is actually a type synonym for @EvtHandler (CWindow a)@.- If you study the documentation in "Graphics.UI.WX.Classes" closely, you- can discover where this chain ends :-). -- Objects are not automatically deleted. Normally you can use a delete function- like @windowDelete@ to delete an object. However, almost all objects in the- wxWidgets library are automatically deleted by the library. The only objects- that should be used with care are resources as bitmaps, fonts and brushes.--}-data Object a = Object !(Ptr a)- | Managed !(ForeignPtr (TManagedPtr a))----- | Managed pointer (proxy) objects-type ManagedPtr a = Ptr (CManagedPtr a)-type TManagedPtr a = CManagedPtr a-data CManagedPtr a = CManagedPtr---instance Eq (Object a) where- obj1 == obj2- = unsafePerformIO $- withObjectPtr obj1 $ \p1 ->- withObjectPtr obj2 $ \p2 ->- return (p1 == p2)--instance Ord (Object a) where- compare obj1 obj2- = unsafePerformIO $- withObjectPtr obj1 $ \p1 ->- withObjectPtr obj2 $ \p2 ->- return (compare p1 p2)--instance Show (Object a) where- show obj- = unsafePerformIO $- withObjectPtr obj $ \p ->- return (show p)---- | A null object. Use with care.-objectNull :: Object a-objectNull- = Object nullPtr---- | Is this a managed object?-objectIsManaged :: Object a -> Bool-objectIsManaged obj- = case obj of- Managed fp -> True- _ -> False---- | Test for null object.-objectIsNull :: Object a -> Bool-objectIsNull obj- = unsafePerformIO $- withObjectPtr obj $ \p -> return (p == nullPtr)- ---- | Cast an object to another type. Use with care.-objectCast :: Object a -> Object b-objectCast obj- = case obj of- Object p -> Object (castPtr p)- Managed fp -> Managed (castForeignPtr fp) ----- | Do something with the object pointer.-withObjectPtr :: Object a -> (Ptr a -> IO b) -> IO b-withObjectPtr obj f- = case obj of- Object p -> f p- Managed fp -> withForeignPtr fp $ \mp ->- do p <- wxManagedPtr_GetPtr mp- f p---- | Finalize a managed object manually. (No effect on unmanaged objects.)-objectFinalize :: Object a -> IO ()-objectFinalize obj- = case obj of- Object p -> return ()- Managed fp -> withForeignPtr fp $ wxManagedPtr_Finalize- --- | Remove the finalizer on a managed object. (No effect on unmanaged objects.)-objectNoFinalize :: Object a -> IO ()-objectNoFinalize obj- = case obj of- Object p -> return ()- Managed fp -> withForeignPtr fp $ wxManagedPtr_NoFinalize----- | Create an unmanaged object.-objectFromPtr :: Ptr a -> Object a-objectFromPtr p- = Object p---- | Create a managed object with a given finalizer.-objectFromManagedPtr :: ManagedPtr a -> IO (Object a)-objectFromManagedPtr mp- = do fun <- wxManagedPtrDeleteFunction- -- wxManagedPtr_NoFinalize mp {- turn off finalization -}- fp <- newForeignPtr mp (fun mp)- return (Managed fp)---wxManagedPtrDeleteFunction :: IO (ManagedPtr a -> IO ())-wxManagedPtrDeleteFunction- = do fun <- wxManagedPtr_GetDeleteFunction- return $ wxManagedPtr_CallbackFunction fun--{--------------------------------------------------------------------------- Managed pointers---------------------------------------------------------------------------}-foreign import ccall wxManagedPtr_GetPtr :: Ptr (TManagedPtr a) -> IO (Ptr a)-foreign import ccall wxManagedPtr_Finalize :: ManagedPtr a -> IO ()-foreign import ccall wxManagedPtr_NoFinalize :: ManagedPtr a -> IO ()-foreign import ccall wxManagedPtr_GetDeleteFunction :: IO (FunPtr (ManagedPtr a -> IO ()))-foreign import ccall "dynamic" wxManagedPtr_CallbackFunction :: FunPtr (ManagedPtr a -> IO ()) -> ManagedPtr a -> IO ()+{-# LANGUAGE CPP, ForeignFunctionInterface #-} +----------------------------------------------------------------------------------------- +{-| Module : WxcObject + Copyright : (c) Daan Leijen 2003, 2004 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Basic object type. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.WxcObject( + -- * Object types + Object, objectNull, objectIsNull, objectCast, objectIsManaged + , objectFromPtr, objectFromManagedPtr + , withObjectPtr + , objectFinalize, objectNoFinalize + -- * Managed objects + , ManagedPtr, TManagedPtr, CManagedPtr + ) where + +import Control.Exception +import System.IO.Unsafe( unsafePerformIO ) +import Foreign.C +import Foreign.Ptr +import Foreign.Storable +import Foreign.Marshal.Alloc +import Foreign.Marshal.Array + +{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent" + See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -} +import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer) +import Foreign.Concurrent + +{----------------------------------------------------------------------------------------- + Objects +-----------------------------------------------------------------------------------------} + +{- | An @Object a@ is a pointer to an object of type @a@. The @a@ parameter is used + to encode the inheritance relation. When the type parameter is unit @()@, it denotes + an object of exactly that class, when the parameter is a type variable @a@, it + specifies an object that is at least an instance of that class. For example in + wxWidgets, we have the following class hierarchy: + + > EvtHandler + > |- Window + > |- Frame + > |- Control + > |- Button + > |- Radiobox + + In wxHaskell, all the creation functions will return objects of exactly that + class and use the @()@ type: + + > frameCreate :: Window a -> ... -> IO (Frame ()) + > buttonCreate :: Window a -> ... -> IO (Button ()) + > ... + + In contrast, all the /this/ (or /self/) pointers of methods can take objects + of any instance of that class and have a type variable, for example: + + > windowSetClientSize :: Window a -> Size -> IO () + > controlSetLabel :: Control a -> String -> IO () + > buttonSetDefault :: Button a -> IO () + + This means that we can use @windowSetClientSize@ on any window, including + buttons and frames, but we can only use @controlSetLabel@ on controls, not + including frames. + + In wxHaskell, this works since a @Frame ()@ is actually a type synonym for + @Window (CFrame ())@ (where @CFrame@ is an abstract data type). We can thus + pass a value of type @Frame ()@ to anything that expects some @Window a@. + For a button this works too, as it is a synonym for @Control (CButton ())@ + which is in turn a synonym for @Window (CControl (CButton ()))@. Note that + we can\'t pass a frame to something that expects a value of type @Control a@. + Of course, a @Window a@ is actually a type synonym for @EvtHandler (CWindow a)@. + If you study the documentation in "Graphics.UI.WX.Classes" closely, you + can discover where this chain ends :-). + + Objects are not automatically deleted. Normally you can use a delete function + like @windowDelete@ to delete an object. However, almost all objects in the + wxWidgets library are automatically deleted by the library. The only objects + that should be used with care are resources as bitmaps, fonts and brushes. +-} +data Object a = Object !(Ptr a) + | Managed !(ForeignPtr (TManagedPtr a)) + + +-- | Managed pointer (proxy) objects +type ManagedPtr a = Ptr (CManagedPtr a) +type TManagedPtr a = CManagedPtr a +data CManagedPtr a = CManagedPtr + + +instance Eq (Object a) where + obj1 == obj2 + = unsafePerformIO $ + withObjectPtr obj1 $ \p1 -> + withObjectPtr obj2 $ \p2 -> + return (p1 == p2) + +instance Ord (Object a) where + compare obj1 obj2 + = unsafePerformIO $ + withObjectPtr obj1 $ \p1 -> + withObjectPtr obj2 $ \p2 -> + return (compare p1 p2) + +instance Show (Object a) where + show obj + = unsafePerformIO $ + withObjectPtr obj $ \p -> + return (show p) + +-- | A null object. Use with care. +objectNull :: Object a +objectNull + = Object nullPtr + +-- | Is this a managed object? +objectIsManaged :: Object a -> Bool +objectIsManaged obj + = case obj of + Managed fp -> True + _ -> False + +-- | Test for null object. +objectIsNull :: Object a -> Bool +objectIsNull obj + = unsafePerformIO $ + withObjectPtr obj $ \p -> return (p == nullPtr) + + +-- | Cast an object to another type. Use with care. +objectCast :: Object a -> Object b +objectCast obj + = case obj of + Object p -> Object (castPtr p) + Managed fp -> Managed (castForeignPtr fp) + + +-- | Do something with the object pointer. +withObjectPtr :: Object a -> (Ptr a -> IO b) -> IO b +withObjectPtr obj f + = case obj of + Object p -> f p + Managed fp -> withForeignPtr fp $ \mp -> + do p <- wxManagedPtr_GetPtr mp + f p + +-- | Finalize a managed object manually. (No effect on unmanaged objects.) +objectFinalize :: Object a -> IO () +objectFinalize obj + = case obj of + Object p -> return () + Managed fp -> withForeignPtr fp $ wxManagedPtr_Finalize + +-- | Remove the finalizer on a managed object. (No effect on unmanaged objects.) +objectNoFinalize :: Object a -> IO () +objectNoFinalize obj + = case obj of + Object p -> return () + Managed fp -> withForeignPtr fp $ wxManagedPtr_NoFinalize + + +-- | Create an unmanaged object. +objectFromPtr :: Ptr a -> Object a +objectFromPtr p + = Object p + +-- | Create a managed object with a given finalizer. +objectFromManagedPtr :: ManagedPtr a -> IO (Object a) +objectFromManagedPtr mp + = do fun <- wxManagedPtrDeleteFunction + -- wxManagedPtr_NoFinalize mp {- turn off finalization -} + fp <- newForeignPtr mp (fun mp) + return (Managed fp) + + +wxManagedPtrDeleteFunction :: IO (ManagedPtr a -> IO ()) +wxManagedPtrDeleteFunction + = do fun <- wxManagedPtr_GetDeleteFunction + return $ wxManagedPtr_CallbackFunction fun + +{-------------------------------------------------------------------------- + Managed pointers +--------------------------------------------------------------------------} +foreign import ccall wxManagedPtr_GetPtr :: Ptr (TManagedPtr a) -> IO (Ptr a) +foreign import ccall wxManagedPtr_Finalize :: ManagedPtr a -> IO () +foreign import ccall wxManagedPtr_NoFinalize :: ManagedPtr a -> IO () +foreign import ccall wxManagedPtr_GetDeleteFunction :: IO (FunPtr (ManagedPtr a -> IO ())) +foreign import ccall "dynamic" wxManagedPtr_CallbackFunction :: FunPtr (ManagedPtr a -> IO ()) -> ManagedPtr a -> IO ()
src/haskell/Graphics/UI/WXCore/WxcTypes.hs view
@@ -1,1439 +1,1439 @@-{-# LANGUAGE CPP, ForeignFunctionInterface, DeriveDataTypeable #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-------------------------------------------------------------------------------------------{-| Module : WxcTypes- Copyright : (c) Daan Leijen 2003, 2004- License : wxWindows-- Maintainer : wxhaskell-devel@lists.sourceforge.net- Stability : provisional- Portability : portable--Basic types and marshalling code for the wxWidgets C library.--}-------------------------------------------------------------------------------------------module Graphics.UI.WXCore.WxcTypes(- -- * Object types- Object, objectNull, objectIsNull, objectCast, objectIsManaged- , objectDelete- , objectFromPtr, managedObjectFromPtr- , withObjectPtr, withObjectRef- , withObjectResult, withManagedObjectResult- , objectFinalize, objectNoFinalize- --- , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch-- -- * Type synonyms- , Id- , Style- , EventId-- -- * Basic types- , fromBool, toBool-- -- ** Point- , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull-- -- ** Size- , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull-- -- ** Vector- , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull-- -- ** Rectangle- , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight)- , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight- , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty-- -- ** Color- , Color(..), rgb, colorRGB, rgba, colorRGBA, colorRed, colorGreen, colorBlue, colorAlpha- , intFromColor, colorFromInt, fromColor, toColor, colorOk, colorIsOk-- -- * Marshalling- -- ** Basic types- , withPointResult, withWxPointResult, toCIntPointX, toCIntPointY, fromCPoint, withCPoint- , withPointDoubleResult, toCDoublePointX, toCDoublePointY, fromCPointDouble, withCPointDouble- , withSizeResult, withWxSizeResult, toCIntSizeW, toCIntSizeH, fromCSize, withCSize- , withSizeDoubleResult, toCDoubleSizeW, toCDoubleSizeH, fromCSizeDouble, withCSizeDouble- , withVectorResult, withWxVectorResult, toCIntVectorX, toCIntVectorY, fromCVector, withCVector- , withVectorDoubleResult, toCDoubleVectorX, toCDoubleVectorY, fromCVectorDouble, withCVectorDouble- , withRectResult, withWxRectResult, withWxRectPtr, toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH, fromCRect, withCRect- , withRectDoubleResult, toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH, fromCRectDouble, withCRectDouble- , withArray, withArrayString, withArrayWString, withArrayInt, withArrayIntPtr, withArrayObject- , withArrayIntResult, withArrayIntPtrResult, withArrayStringResult, withArrayWStringResult, withArrayObjectResult-- , colourFromColor, colorFromColour- , colourCreate, colourSafeDelete -- , colourCreateRGB, colourRed, colourGreen, colourBlue colourAlpha-- - -- ** Managed object types-- -- , managedAddFinalizer- , TreeItem, treeItemInvalid, treeItemIsOk, treeItemFromInt- , withRefTreeItemId, withTreeItemIdPtr, withTreeItemIdRef, withManagedTreeItemIdResult- , withStringRef, withStringPtr, withManagedStringResult- , withRefColour, withColourRef, withColourPtr, withManagedColourResult- , withRefBitmap, withManagedBitmapResult- , withRefCursor, withManagedCursorResult- , withRefIcon, withManagedIconResult- , withRefPen, withManagedPenResult- , withRefBrush, withManagedBrushResult- , withRefFont, withManagedFontResult- , withRefImage- , withRefListItem- , withRefFontData- , withRefPrintData- , withRefPageSetupDialogData- , withRefPrintDialogData- , withRefDateTime, withManagedDateTimeResult- , withRefGridCellCoordsArray, withManagedGridCellCoordsArrayResult--- -- ** Primitive types- -- *** CString- , CString(..), withCString, withStringResult- , CWString(..), withCWString, withWStringResult- -- *** ByteString- , withByteStringResult, withLazyByteStringResult- -- *** CInt- , CInt(..), toCInt, fromCInt, withIntResult- -- *** IntPtr- , IntPtr(..)- -- *** CIntPtr- , CIntPtr(..), toCIntPtr, fromCIntPtr, withIntPtrResult- -- *** Word- , Word(..)- -- *** 8 bit Word- , Word8(..)- -- *** 64 bit Integer- , Int64(..)- -- *** CDouble- , CDouble(..), toCDouble, fromCDouble, withDoubleResult- -- *** CChar- , CChar(..), toCChar, fromCChar, withCharResult- , CWchar(..), toCWchar- -- *** CBool- , CBool(..), toCBool, fromCBool, withBoolResult- -- ** Pointers- , Ptr(..), ptrNull, ptrIsNull, ptrCast, ForeignPtr, FunPtr, toCFunPtr- ) where--import Control.Exception -import System.IO.Unsafe( unsafePerformIO )-import Foreign.C-import Foreign.Ptr-import Foreign.Storable-import Foreign.Marshal.Alloc-import Foreign.Marshal.Array-import Foreign.Marshal.Utils (fromBool, toBool)--{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent"- See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -}-import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer)-import Foreign.Concurrent--import Data.Array.MArray (MArray)-import Data.Array.Unboxed (IArray, UArray)-import Data.Bits( shiftL, shiftR, (.&.), (.|.) )--import qualified Data.ByteString as B-import qualified Data.ByteString.Lazy as LB-import qualified Data.ByteString.Char8 as BC (pack)-import qualified Data.ByteString.Lazy.Char8 as LBC (pack)--{- note: this is just for instances for the WX library and not necessary for WXCore -}-import Data.Dynamic--import Data.Int-import Data.Word-import Debug.Trace (traceIO)--import Graphics.UI.WXCore.WxcObject-import Graphics.UI.WXCore.WxcClassTypes--{------------------------------------------------------------------------------------------ Objects------------------------------------------------------------------------------------------}--- | An @Id@ is used to identify objects during event handling.-type Id = Int---- | An @EventId@ is identifies specific events.-type EventId = Int---- | A @Style@ is normally used as a flag mask to specify some window style-type Style = Int----- | Delete a wxObject, works for managed and unmanaged objects.-objectDelete :: WxObject a -> IO ()-objectDelete obj- = if objectIsManaged obj- then objectFinalize obj- else withObjectPtr obj $ \p ->- wxObject_SafeDelete p- --- | Create a managed object that will be deleted using |wxObject_SafeDelete|.-managedObjectFromPtr :: Ptr (TWxObject a) -> IO (WxObject a)-managedObjectFromPtr p - = do mp <- wxManagedPtr_CreateFromObject p- objectFromManagedPtr mp---- | Create a managed object that will be deleted using |wxObject_SafeDelete|.-withManagedObjectResult :: IO (Ptr (TWxObject a)) -> IO (WxObject a)-withManagedObjectResult io- = do p <- io- managedObjectFromPtr p---- | Return an unmanaged object.-withObjectResult :: IO (Ptr a) -> IO (Object a)-withObjectResult io- = do p <- io- return (objectFromPtr p)---- | Extract the object pointer and raise an exception if @NULL@.--- Otherwise continue with the valid pointer.-withObjectRef :: String -> Object a -> (Ptr a -> IO b) -> IO b-withObjectRef msg obj f- = withObjectPtr obj $ \p -> - withValidPtr msg p f---- | Execute the continuation when the pointer is not null and--- raise an error otherwise.-withValidPtr :: String -> Ptr a -> (Ptr a -> IO b) -> IO b-withValidPtr msg p f- = if (p == nullPtr)- then ioError (userError ("wxHaskell: NULL object" ++ (if null msg then "" else ": " ++ msg)))- else f p---foreign import ccall wxManagedPtr_CreateFromObject :: Ptr (TWxObject a) -> IO (ManagedPtr (TWxObject a))-foreign import ccall wxObject_SafeDelete :: Ptr (TWxObject a) -> IO ()---{------------------------------------------------------------------------------------------ Point------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Point = Point2 Int---- | A point has an x and y coordinate. Coordinates are normally relative to the--- upper-left corner of their view frame, where a positive x goes to the right and--- a positive y to the bottom of the view.-data (Num a) => Point2 a = Point- { pointX :: !a -- ^ x component of a point.- , pointY :: !a -- ^ y component of a point.- }- deriving (Eq,Show,Read,Typeable)---- | Construct a point.-point :: (Num a) => a -> a -> Point2 a-point x y = Point x y---- | Shorter function to construct a point.-pt :: (Num a) => a -> a -> Point2 a-pt x y = Point x y--pointFromVec :: (Num a) => Vector -> Point2 a-pointFromVec (Vector x y)- = Point (fromIntegral x) (fromIntegral y)--pointFromSize :: (Num a) => Size -> Point2 a-pointFromSize (Size w h)- = Point (fromIntegral w) (fromIntegral h)---- | Point at the origin.-pointZero :: (Num a) => Point2 a-pointZero- = Point 0 0---- | A `null' point is not a legal point (x and y are -1) and can be used for some--- wxWidgets functions to select a default point.-pointNull :: (Num a) => Point2 a-pointNull- = Point (-1) (-1)---- marshalling-withCPoint :: Point2 Int -> (CInt -> CInt -> IO a) -> IO a-withCPoint (Point x y) f- = f (toCInt x) (toCInt y)--withPointResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO (Point2 Int)-withPointResult f- = alloca $ \px ->- alloca $ \py ->- do f px py- x <- peek px- y <- peek py- return (fromCPoint x y)--toCIntPointX, toCIntPointY :: Point2 Int -> CInt-toCIntPointX (Point x y) = toCInt x-toCIntPointY (Point x y) = toCInt y--fromCPoint :: CInt -> CInt -> Point2 Int-fromCPoint x y- = Point (fromCInt x) (fromCInt y)--withCPointDouble :: Point2 Double -> (CDouble -> CDouble -> IO a) -> IO a-withCPointDouble (Point x y) f- = f (toCDouble x) (toCDouble y)--withPointDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Point2 Double)-withPointDoubleResult f- = alloca $ \px ->- alloca $ \py ->- do f px py- x <- peek px- y <- peek py- return (fromCPointDouble x y)--toCDoublePointX, toCDoublePointY :: Point2 Double -> CDouble-toCDoublePointX (Point x y) = toCDouble x-toCDoublePointY (Point x y) = toCDouble y--fromCPointDouble :: CDouble -> CDouble -> Point2 Double-fromCPointDouble x y- = Point (fromCDouble x) (fromCDouble y)--{---- | A @wxPoint@ object.-type WxPointObject a = Ptr (CWxPointObject a)-type TWxPointObject a = CWxPointObject a-data CWxPointObject a = CWxPointObject--}--withWxPointResult :: IO (Ptr (TWxPoint a)) -> IO (Point2 Int)-withWxPointResult io- = do pt <- io- x <- wxPoint_GetX pt- y <- wxPoint_GetY pt- wxPoint_Delete pt- return (fromCPoint x y)--foreign import ccall wxPoint_Delete :: Ptr (TWxPoint a) -> IO ()-foreign import ccall wxPoint_GetX :: Ptr (TWxPoint a) -> IO CInt-foreign import ccall wxPoint_GetY :: Ptr (TWxPoint a) -> IO CInt---{------------------------------------------------------------------------------------------ Size------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Size = Size2D Int---- | A @Size@ has a width and height.-data (Num a) => Size2D a = Size- { sizeW :: !a -- ^ the width of a size- , sizeH :: !a -- ^ the height of a size- }- deriving (Eq,Show,Typeable)---- | Construct a size from a width and height.-size :: (Num a) => a -> a -> Size2D a-size w h- = Size w h---- | Short function to construct a size-sz :: (Num a) => a -> a -> Size2D a-sz w h- = Size w h--sizeFromPoint :: (Num a) => Point2 a -> Size2D a-sizeFromPoint (Point x y)- = Size x y--sizeFromVec :: (Num a) => Vector2 a -> Size2D a-sizeFromVec (Vector x y)- = Size x y--sizeZero :: (Num a) => Size2D a-sizeZero- = Size 0 0---- | A `null' size is not a legal size (width and height are -1) and can be used for some--- wxWidgets functions to select a default size.-sizeNull :: (Num a) => Size2D a-sizeNull- = Size (-1) (-1)---- marshalling-withCSize :: Size -> (CInt -> CInt -> IO a) -> IO a-withCSize (Size w h) f- = f (toCInt w) (toCInt h)--withSizeResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Size-withSizeResult f- = alloca $ \cw ->- alloca $ \ch ->- do f cw ch- w <- peek cw- h <- peek ch- return (fromCSize w h)--fromCSize :: CInt -> CInt -> Size-fromCSize w h- = Size (fromCInt w) (fromCInt h)--toCIntSizeW, toCIntSizeH :: Size -> CInt-toCIntSizeW (Size w h) = toCInt w-toCIntSizeH (Size w h) = toCInt h--withCSizeDouble :: Size2D Double -> (CDouble -> CDouble -> IO a) -> IO a-withCSizeDouble (Size w h) f- = f (toCDouble w) (toCDouble h)--withSizeDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Size2D Double)-withSizeDoubleResult f- = alloca $ \cw ->- alloca $ \ch ->- do f cw ch- w <- peek cw- h <- peek ch- return (fromCSizeDouble w h)--fromCSizeDouble :: CDouble -> CDouble -> Size2D Double-fromCSizeDouble w h- = Size (fromCDouble w) (fromCDouble h)--toCDoubleSizeW, toCDoubleSizeH :: Size2D Double -> CDouble-toCDoubleSizeW (Size w h) = toCDouble w-toCDoubleSizeH (Size w h) = toCDouble h--{---- | A @wxSize@ object.-type WxSizeObject a = Ptr (CWxSizeObject a)-type TWxSizeObject a = CWxSizeObject a-data CWxSizeObject a = CWxSizeObject--}--withWxSizeResult :: IO (Ptr (TWxSize a)) -> IO Size-withWxSizeResult io- = do sz <- io- w <- wxSize_GetWidth sz- h <- wxSize_GetHeight sz- wxSize_Delete sz- return (fromCSize w h)--foreign import ccall wxSize_Delete :: Ptr (TWxSize a) -> IO ()-foreign import ccall wxSize_GetWidth :: Ptr (TWxSize a) -> IO CInt-foreign import ccall wxSize_GetHeight :: Ptr (TWxSize a) -> IO CInt---{------------------------------------------------------------------------------------------ Vector------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Vector = Vector2 Int---- | A vector with an x and y delta.-data (Num a) => Vector2 a = Vector- { vecX :: !a -- ^ delta-x component of a vector- , vecY :: !a -- ^ delta-y component of a vector- }- deriving (Eq,Show,Read,Typeable)---- | Construct a vector.-vector :: (Num a) => a -> a -> Vector2 a-vector dx dy = Vector dx dy---- | Short function to construct a vector.-vec :: (Num a) => a -> a -> Vector2 a-vec dx dy = Vector dx dy---- | A zero vector-vecZero :: (Num a) => Vector2 a-vecZero- = Vector 0 0---- | A `null' vector has a delta x and y of -1 and can be used for some--- wxWidgets functions to select a default vector.-vecNull :: (Num a) => Vector2 a-vecNull- = Vector (-1) (-1)--vecFromPoint :: (Num a) => Point2 a -> Vector2 a-vecFromPoint (Point x y)- = Vector x y--vecFromSize :: Size -> Vector-vecFromSize (Size w h)- = Vector w h----- marshalling-withCVector :: Vector -> (CInt -> CInt -> IO a) -> IO a-withCVector (Vector x y) f- = f (toCInt x) (toCInt y)--withVectorResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Vector-withVectorResult f- = alloca $ \px ->- alloca $ \py ->- do f px py- x <- peek px- y <- peek py- return (fromCVector x y)--toCIntVectorX, toCIntVectorY :: Vector -> CInt-toCIntVectorX (Vector x y) = toCInt x-toCIntVectorY (Vector x y) = toCInt y--fromCVector :: CInt -> CInt -> Vector-fromCVector x y- = Vector (fromCInt x) (fromCInt y)--withCVectorDouble :: Vector2 Double -> (CDouble -> CDouble -> IO a) -> IO a-withCVectorDouble (Vector x y) f- = f (toCDouble x) (toCDouble y)--withVectorDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Vector2 Double)-withVectorDoubleResult f- = alloca $ \px ->- alloca $ \py ->- do f px py- x <- peek px- y <- peek py- return (fromCVectorDouble x y)--toCDoubleVectorX, toCDoubleVectorY :: Vector2 Double -> CDouble-toCDoubleVectorX (Vector x y) = toCDouble x-toCDoubleVectorY (Vector x y) = toCDouble y--fromCVectorDouble :: CDouble -> CDouble -> Vector2 Double-fromCVectorDouble x y- = Vector (fromCDouble x) (fromCDouble y)---withWxVectorResult :: IO (Ptr (TWxPoint a)) -> IO Vector-withWxVectorResult io- = do pt <- io- x <- wxPoint_GetX pt- y <- wxPoint_GetY pt- wxPoint_Delete pt- return (fromCVector x y)---{------------------------------------------------------------------------------------------ Rectangle------------------------------------------------------------------------------------------}---- | Define Point type synonym for backward compatibility.-type Rect = Rect2D Int---- | A rectangle is defined by the left x coordinate, the top y coordinate,--- the width and the height.-data (Num a) => Rect2D a = Rect- { rectLeft :: !a- , rectTop :: !a- , rectWidth :: !a- , rectHeight :: !a- }- deriving (Eq,Show,Read,Typeable)---rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight :: (Num a) => Rect2D a -> Point2 a-rectTopLeft (Rect l t w h) = Point l t-rectTopRight (Rect l t w h) = Point (l+w) t-rectBottomLeft (Rect l t w h) = Point l (t+h)-rectBottomRight (Rect l t w h) = Point (l+w) (t+h)--rectBottom, rectRight :: (Num a) => Rect2D a -> a-rectBottom (Rect x y w h) = y + h-rectRight (Rect x y w h) = x + w---- | Create a rectangle at a certain (upper-left) point with a certain size.-rect :: (Num a) => Point2 a -> Size2D a -> Rect2D a-rect (Point x y) (Size w h)- = Rect x y w h---- | Construct a (positive) rectangle between two (arbitrary) points.-rectBetween :: (Num a, Ord a) => Point2 a -> Point2 a -> Rect2D a-rectBetween (Point x0 y0) (Point x1 y1)- = Rect (min x0 x1) (min y0 y1) (abs (x1-x0)) (abs (y1-y0))---- | An empty rectangle at (0,0).-rectZero :: (Num a) => Rect2D a-rectZero- = Rect 0 0 0 0---- | An `null' rectangle is not a valid rectangle (@Rect -1 -1 -1 -1@) but can--- used for some wxWidgets functions to select a default rectangle. (i.e. 'frameCreate').-rectNull :: (Num a) => Rect2D a-rectNull- = Rect (-1) (-1) (-1) (-1)---- | Get the size of a rectangle.-rectSize :: (Num a) => Rect2D a -> Size2D a-rectSize (Rect l t w h)- = Size w h---- | Create a rectangle of a certain size with the upper-left corner at ('pt' 0 0).-rectFromSize :: (Num a) => Size2D a -> Rect2D a-rectFromSize (Size w h)- = Rect 0 0 w h--rectIsEmpty :: (Num a, Eq a) => Rect2D a -> Bool-rectIsEmpty (Rect l t w h)- = (w==0 && h==0)------ marshalling 1-withCRect :: Rect -> (CInt -> CInt -> CInt -> CInt -> IO a) -> IO a-withCRect (Rect x0 y0 x1 y1) f- = f (toCInt (x0)) (toCInt (y0)) (toCInt (x1)) (toCInt (y1))--withRectResult :: (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()) -> IO Rect-withRectResult f- = alloca $ \cx ->- alloca $ \cy ->- alloca $ \cw ->- alloca $ \ch ->- do f cx cy cw ch- x <- peek cx- y <- peek cy- w <- peek cw- h <- peek ch- return (fromCRect x y w h)--fromCRect :: CInt -> CInt -> CInt -> CInt -> Rect-fromCRect x y w h- = Rect (fromCInt x) (fromCInt y) (fromCInt w) (fromCInt h)--toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH :: Rect -> CInt-toCIntRectX (Rect x y w h) = toCInt x-toCIntRectY (Rect x y w h) = toCInt y-toCIntRectW (Rect x y w h) = toCInt w-toCIntRectH (Rect x y w h) = toCInt h--withCRectDouble :: Rect2D Double -> (CDouble -> CDouble -> CDouble -> CDouble -> IO a) -> IO a-withCRectDouble (Rect x0 y0 x1 y1) f- = f (toCDouble (x0)) (toCDouble (y0)) (toCDouble (x1)) (toCDouble (y1))--withRectDoubleResult :: (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Rect2D Double)-withRectDoubleResult f- = alloca $ \cx ->- alloca $ \cy ->- alloca $ \cw ->- alloca $ \ch ->- do f cx cy cw ch- x <- peek cx- y <- peek cy- w <- peek cw- h <- peek ch- return (fromCRectDouble x y w h)--fromCRectDouble :: CDouble -> CDouble -> CDouble -> CDouble -> Rect2D Double-fromCRectDouble x y w h- = Rect (fromCDouble x) (fromCDouble y) (fromCDouble w) (fromCDouble h)--toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH :: Rect2D Double -> CDouble-toCDoubleRectX (Rect x y w h) = toCDouble x-toCDoubleRectY (Rect x y w h) = toCDouble y-toCDoubleRectW (Rect x y w h) = toCDouble w-toCDoubleRectH (Rect x y w h) = toCDouble h---- marshalling 2-{---- | A @wxRect@ object.-type WxRectObject a = Ptr (CWxRectObject a)-type TWxRectObject a = CWxRectObject a-data CWxRectObject a = CWxRectObject--}--withWxRectRef :: String -> Rect -> (Ptr (TWxRect r) -> IO a) -> IO a-withWxRectRef msg r f- = withWxRectPtr r $ \p -> withValidPtr msg p f--withWxRectPtr :: Rect -> (Ptr (TWxRect r) -> IO a) -> IO a-withWxRectPtr r f- = bracket (withCRect r wxRect_Create)- (wxRect_Delete)- f--withWxRectResult :: IO (Ptr (TWxRect a)) -> IO Rect-withWxRectResult io- = do rt <- io- x <- wxRect_GetX rt- y <- wxRect_GetY rt- w <- wxRect_GetWidth rt- h <- wxRect_GetHeight rt- wxRect_Delete rt- return (fromCRect x y w h)--foreign import ccall wxRect_Create :: CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect a))-foreign import ccall wxRect_Delete :: Ptr (TWxRect a) -> IO ()-foreign import ccall wxRect_GetX :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetY :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetWidth :: Ptr (TWxRect a) -> IO CInt-foreign import ccall wxRect_GetHeight :: Ptr (TWxRect a) -> IO CInt---{------------------------------------------------------------------------------------------ CInt------------------------------------------------------------------------------------------}-withIntResult :: IO CInt -> IO Int-withIntResult io- = do x <- io- return (fromCInt x)--toCInt :: Int -> CInt-toCInt i = fromIntegral i--fromCInt :: CInt -> Int-fromCInt ci- = fromIntegral ci--{------------------------------------------------------------------------------------------ CIntPtr------------------------------------------------------------------------------------------}-withIntPtrResult :: IO CIntPtr -> IO IntPtr-withIntPtrResult io- = do x <- io- return (fromCIntPtr x)--toCIntPtr :: IntPtr -> CIntPtr-toCIntPtr i = fromIntegral i--fromCIntPtr :: CIntPtr -> IntPtr-fromCIntPtr ci- = fromIntegral ci--{------------------------------------------------------------------------------------------ CDouble------------------------------------------------------------------------------------------}-withDoubleResult :: IO CDouble -> IO Double-withDoubleResult io- = do x <- io- return (fromCDouble x)--toCDouble :: Double -> CDouble-toCDouble d = realToFrac d--fromCDouble :: CDouble -> Double-fromCDouble cd- = realToFrac cd--{------------------------------------------------------------------------------------------ CBool------------------------------------------------------------------------------------------}-type CBool = CInt--toCBool :: Bool -> CBool-toCBool = intToCBool . fromBool--withBoolResult :: IO CBool -> IO Bool-withBoolResult io- = do x <- io- return (fromCBool x)--fromCBool :: CBool -> Bool-fromCBool = toBool . cboolToInt--foreign import ccall "intToBool" intToCBool :: Int -> CBool-foreign import ccall "boolToInt" cboolToInt :: CBool -> Int--{------------------------------------------------------------------------------------------ CString------------------------------------------------------------------------------------------}-withStringResult :: (Ptr CChar -> IO CInt) -> IO String-withStringResult f- = do len <- f nullPtr- if (len<=0)- then return ""- else withCString (replicate (fromCInt len) ' ') $ \cstr ->- do f cstr- peekCStringLen (cstr,fromCInt len)--withWStringResult :: (Ptr CWchar -> IO CInt) -> IO String-withWStringResult f- = do len <- f nullPtr- if (len<=0)- then return ""- else withCWString (replicate (fromCInt len) ' ') $ \cstr ->- do f cstr- peekCWString cstr--{------------------------------------------------------------------------------------------ ByteString------------------------------------------------------------------------------------------}--- TODO: replace this by more efficient implementation.--- e.g. use mmap when bytestring support mmap interface.-withByteStringResult :: (Ptr CChar -> IO CInt) -> IO B.ByteString-withByteStringResult f- = do len <- f nullPtr- if (len<=0)- then return $ BC.pack ""- else withCString (replicate (fromCInt len) ' ') $ \cstr ->- do f cstr- B.packCStringLen (cstr,fromCInt len)--withLazyByteStringResult :: (Ptr CChar -> IO CInt) -> IO LB.ByteString-withLazyByteStringResult f- = do str <- withStringResult f- return $ LBC.pack str--{------------------------------------------------------------------------------------------ Arrays------------------------------------------------------------------------------------------}-withArrayStringResult :: (Ptr (Ptr CChar) -> IO CInt) -> IO [String]-withArrayStringResult f- = do clen <- f nullPtr- let len = fromCInt clen- if (len <= 0)- then return []- else allocaArray len $ \carr ->- do f carr- arr <- peekArray len carr- mapM peekCString arr---- FIXME: factorise with withArrayStringResult-withArrayWStringResult :: (Ptr (Ptr CWchar) -> IO CInt) -> IO [String]-withArrayWStringResult f- = do clen <- f nullPtr- let len = fromCInt clen- if (len <= 0)- then return []- else allocaArray len $ \carr ->- do f carr- arr <- peekArray len carr- mapM peekCWString arr---withArrayIntResult :: (Ptr CInt -> IO CInt) -> IO [Int]-withArrayIntResult f- = do clen <- f nullPtr- let len = fromCInt clen- if (len <= 0)- then return []- else allocaArray len $ \carr ->- do f carr- xs <- peekArray len carr- return (map fromCInt xs)--withArrayIntPtrResult :: (Ptr CIntPtr -> IO CInt) -> IO [IntPtr]-withArrayIntPtrResult f- = do clen <- f nullPtr- let len = fromCInt clen- if (len <= 0)- then return []- else allocaArray len $ \carr ->- do f carr- xs <- peekArray len carr- return (map fromCIntPtr xs)--withArrayObjectResult :: (Ptr (Ptr a) -> IO CInt) -> IO [Object a]-withArrayObjectResult f- = do clen <- f nullPtr- let len = fromCInt clen- if (len <= 0)- then return []- else allocaArray len $ \carr ->- do f carr- ps <- peekArray len carr- return (map objectFromPtr ps)--withArrayString :: [String] -> (CInt -> Ptr CString -> IO a) -> IO a-withArrayString xs f- = withCStrings xs [] $ \cxs ->- withArray0 ptrNull cxs $ \carr ->- f (toCInt len) carr- where- len = length xs-- withCStrings [] cxs f- = f (reverse cxs)- withCStrings (x:xs) cxs f- = withCString x $ \cx ->- withCStrings xs (cx:cxs) f---- FIXME: factorise with withArrayString-withArrayWString :: [String] -> (CInt -> Ptr CWString -> IO a) -> IO a-withArrayWString xs f- = withCWStrings xs [] $ \cxs ->- withArray0 ptrNull cxs $ \carr ->- f (toCInt len) carr- where- len = length xs-- withCWStrings [] cxs f- = f (reverse cxs)- withCWStrings (x:xs) cxs f- = withCWString x $ \cx ->- withCWStrings xs (cx:cxs) f---withArrayInt :: [Int] -> (CInt -> Ptr CInt -> IO a) -> IO a-withArrayInt xs f- = withArray0 0 (map toCInt xs) $ \carr ->- f (toCInt (length xs)) carr--withArrayIntPtr :: [IntPtr] -> (CInt -> Ptr CIntPtr -> IO a) -> IO a-withArrayIntPtr xs f- = withArray0 0 (map toCIntPtr xs) $ \carr ->- f (toCInt (length xs)) carr--withArrayObject :: [Ptr a] -> (CInt -> Ptr (Ptr a) -> IO b) -> IO b-withArrayObject xs f- = withArray0 ptrNull xs $ \carr ->- f (toCInt (length xs)) carr--{------------------------------------------------------------------------------------------ CCHar------------------------------------------------------------------------------------------}-toCChar :: Char -> CChar-toCChar = castCharToCChar---- generalised to work with Char and CChar-withCharResult :: (Num a, Integral a, Show a) => IO a -> IO Char-withCharResult io- = do x <- io- if (x < 0)- then do traceIO ("Recieved negative unicode: " ++ (show x))- return '\n'- else return (fromCWchar x)--{- The (x < 0) if expression in withCharResult is a workaround for-"processExecAsyncTimed dies with Prelude.chr bad argument"- bug-reported here-http://sourceforge.net/mailarchive/message.php?msg_id=54647.129.16.31.149.1111686341.squirrel%40webmail.chalmers.se-and here-http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg00267.html--Windows GUI-only programs have no stdin, stdout or stderr. So we use Debug.Trace.traceIO-for reporting message.-http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/terminal-interaction.html-http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Debug-Trace.html#v:traceIO--}---fromCChar :: CChar -> Char-fromCChar = castCCharToChar--{------------------------------------------------------------------------------------------ CCHar------------------------------------------------------------------------------------------}-toCWchar :: (Num a) => Char -> a-toCWchar = fromIntegral . fromEnum---fromCWchar :: (Num a, Integral a) => a -> Char-fromCWchar = toEnum . fromIntegral---{------------------------------------------------------------------------------------------ CFunPtr------------------------------------------------------------------------------------------}-toCFunPtr :: FunPtr a -> Ptr a-toCFunPtr fptr- = castFunPtrToPtr fptr---- | Null pointer, use with care.-ptrNull :: Ptr a-ptrNull- = nullPtr---- | Test for null.-ptrIsNull :: Ptr a -> Bool-ptrIsNull p- = (p == ptrNull)---- | Cast a pointer type, use with care.-ptrCast :: Ptr a -> Ptr b-ptrCast p- = castPtr p--{------------------------------------------------------------------------------------------ Marshalling of classes that are managed------------------------------------------------------------------------------------------}--- | A @Managed a@ is a pointer to an object of type @a@, just like 'Object'. However,--- managed objects are automatically deleted when garbage collected. This is used for--- certain classes that are not managed by the wxWidgets library, like 'Bitmap's-type Managed a = ForeignPtr a---- | Create a managed object. Takes a finalizer as argument. This is normally a--- a delete function like 'windowDelete'.-createManaged :: IO () -> Ptr a -> IO (Managed a)-createManaged final obj- = newForeignPtr obj final---- | Add an extra finalizer to a managed object.-managedAddFinalizer :: IO () -> Managed a -> IO ()-managedAddFinalizer io managed- = addForeignPtrFinalizer managed io---- | Do something with the object from a managed object.-withManaged :: Managed a -> (Ptr a -> IO b) -> IO b-withManaged fptr f- = withForeignPtr fptr f----- | Keep a managed object explicitly alive.-managedTouch :: Managed a -> IO ()-managedTouch fptr- = touchForeignPtr fptr---- | A null pointer, use with care.-{-# NOINLINE managedNull #-}-managedNull :: Managed a-managedNull- = unsafePerformIO (createManaged (return ()) ptrNull)---- | Test for null.-managedIsNull :: Managed a -> Bool-managedIsNull managed- = (managed == managedNull)---- | Cast a managed object, use with care.-managedCast :: Managed a -> Managed b-managedCast fptr- = castForeignPtr fptr---{------------------------------------------------------------------------------------------ Classes assigned by value.------------------------------------------------------------------------------------------}-assignRef :: IO (Ptr (TWxObject a)) -> (Ptr (TWxObject a) -> IO ()) -> IO (WxObject a)-assignRef create f- = withManagedObjectResult (assignRefPtr create f)--assignRefPtr :: IO (Ptr a) -> (Ptr a -> IO ()) -> IO (Ptr a)-assignRefPtr create f- = do p <- create- f p- return p---withManagedBitmapResult :: IO (Ptr (TBitmap a)) -> IO (Bitmap a)-withManagedBitmapResult io- = do p <- io- static <- wxBitmap_IsStatic p- if (static) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromBitmap p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromBitmap :: Ptr (TBitmap a) -> IO (ManagedPtr (TBitmap a))-foreign import ccall wxBitmap_IsStatic :: Ptr (TBitmap a) -> IO Bool--withManagedIconResult :: IO (Ptr (TIcon a)) -> IO (Icon a)-withManagedIconResult io- = do p <- io- if (wxIcon_IsStatic p) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromIcon p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromIcon :: Ptr (TIcon a) -> IO (ManagedPtr (TIcon a))-foreign import ccall wxIcon_IsStatic :: Ptr (TIcon a) -> Bool--withManagedBrushResult :: IO (Ptr (TBrush a)) -> IO (Brush a)-withManagedBrushResult io- = do p <- io- if (wxBrush_IsStatic p) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromBrush p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromBrush :: Ptr (TBrush a) -> IO (ManagedPtr (TBrush a))-foreign import ccall wxBrush_IsStatic :: Ptr (TBrush a) -> Bool--withManagedCursorResult :: IO (Ptr (TCursor a)) -> IO (Cursor a)-withManagedCursorResult io- = do p <- io- if (wxCursor_IsStatic p) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromCursor p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromCursor :: Ptr (TCursor a) -> IO (ManagedPtr (TCursor a))-foreign import ccall wxCursor_IsStatic :: Ptr (TCursor a) -> Bool--withManagedFontResult :: IO (Ptr (TFont a)) -> IO (Font a)-withManagedFontResult io- = do p <- io- if (wxFont_IsStatic p) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromFont p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromFont :: Ptr (TFont a) -> IO (ManagedPtr (TFont a))-foreign import ccall wxFont_IsStatic :: Ptr (TFont a) -> Bool--withManagedPenResult :: IO (Ptr (TPen a)) -> IO (Pen a)-withManagedPenResult io- = do p <- io- if (wxPen_IsStatic p) - then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromPen p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromPen :: Ptr (TPen a) -> IO (ManagedPtr (TPen a))-foreign import ccall wxPen_IsStatic :: Ptr (TPen a) -> Bool----withRefBitmap :: (Ptr (TBitmap a) -> IO ()) -> IO (Bitmap a)-withRefBitmap f- = withManagedBitmapResult $ assignRefPtr wxBitmap_Create f-foreign import ccall "wxBitmap_CreateDefault" wxBitmap_Create :: IO (Ptr (TBitmap a))--withRefCursor :: (Ptr (TCursor a) -> IO ()) -> IO (Cursor a)-withRefCursor f- = withManagedCursorResult $ assignRefPtr (wx_Cursor_CreateFromStock 1) f-foreign import ccall "Cursor_CreateFromStock" wx_Cursor_CreateFromStock :: CInt -> IO (Ptr (TCursor a))--withRefIcon :: (Ptr (TIcon a) -> IO ()) -> IO (Icon a)-withRefIcon f- = withManagedIconResult $ assignRefPtr wxIcon_Create f-foreign import ccall "wxIcon_CreateDefault" wxIcon_Create :: IO (Ptr (TIcon a))--withRefImage :: (Ptr (TImage a) -> IO ()) -> IO (Image a)-withRefImage f- = assignRef wxImage_Create f-foreign import ccall "wxImage_CreateDefault" wxImage_Create :: IO (Ptr (TImage a))--withRefFont :: (Ptr (TFont a) -> IO ()) -> IO (Font a)-withRefFont f- = withManagedFontResult $ assignRefPtr wxFont_Create f-foreign import ccall "wxFont_CreateDefault" wxFont_Create :: IO (Ptr (TFont a))---withRefPen :: (Ptr (TPen a) -> IO ()) -> IO (Pen a)-withRefPen f- = withManagedPenResult $ assignRefPtr wxPen_Create f-foreign import ccall "wxPen_CreateDefault" wxPen_Create :: IO (Ptr (TPen a))---withRefBrush :: (Ptr (TBrush a) -> IO ()) -> IO (Brush a)-withRefBrush f- = withManagedBrushResult $ assignRefPtr wxBrush_Create f-foreign import ccall "wxBrush_CreateDefault" wxBrush_Create :: IO (Ptr (TBrush a))--withRefFontData :: (Ptr (TFontData a) -> IO ()) -> IO (FontData a)-withRefFontData f- = assignRef wxFontData_Create f-foreign import ccall "wxFontData_Create" wxFontData_Create :: IO (Ptr (TFontData a))--withRefListItem :: (Ptr (TListItem a) -> IO ()) -> IO (ListItem a)-withRefListItem f- = assignRef wxListItem_Create f-foreign import ccall "wxListItem_Create" wxListItem_Create :: IO (Ptr (TListItem a))--withRefPrintData :: (Ptr (TPrintData a) -> IO ()) -> IO (PrintData a)-withRefPrintData f- = assignRef wxPrintData_Create f-foreign import ccall "wxPrintData_Create" wxPrintData_Create :: IO (Ptr (TPrintData a))--withRefPrintDialogData :: (Ptr (TPrintDialogData a) -> IO ()) -> IO (PrintDialogData a)-withRefPrintDialogData f- = assignRef wxPrintDialogData_Create f-foreign import ccall "wxPrintDialogData_CreateDefault" wxPrintDialogData_Create :: IO (Ptr (TPrintDialogData a))--withRefPageSetupDialogData :: (Ptr (TPageSetupDialogData a) -> IO ()) -> IO (PageSetupDialogData a)-withRefPageSetupDialogData f- = assignRef wxPageSetupDialogData_Create f-foreign import ccall "wxPageSetupDialogData_Create" wxPageSetupDialogData_Create :: IO (Ptr (TPageSetupDialogData a))---withManagedDateTimeResult :: IO (Ptr (TDateTime a)) -> IO (DateTime a)-withManagedDateTimeResult io- = do p <- io- if (p==nullPtr)- then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromDateTime p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromDateTime :: Ptr (TDateTime a) -> IO (ManagedPtr (TDateTime a))---withRefDateTime :: (Ptr (TDateTime a) -> IO ()) -> IO (DateTime a)-withRefDateTime f- = withManagedDateTimeResult $ assignRefPtr wxDateTime_Create f-foreign import ccall "wxDateTime_Create" wxDateTime_Create :: IO (Ptr (TDateTime a))---withManagedGridCellCoordsArrayResult :: IO (Ptr (TGridCellCoordsArray a)) -> IO (GridCellCoordsArray a)-withManagedGridCellCoordsArrayResult io- = do p <- io- if (p==nullPtr)- then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromGridCellCoordsArray p- objectFromManagedPtr mp--foreign import ccall wxManagedPtr_CreateFromGridCellCoordsArray :: Ptr (TGridCellCoordsArray a) -> IO (ManagedPtr (TGridCellCoordsArray a))--withRefGridCellCoordsArray :: (Ptr (TGridCellCoordsArray a) -> IO ()) -> IO (GridCellCoordsArray a)-withRefGridCellCoordsArray f- = withManagedGridCellCoordsArrayResult $ assignRefPtr wxGridCellCoordsArray_Create f-foreign import ccall "wxGridCellCoordsArray_Create" wxGridCellCoordsArray_Create :: IO (Ptr (TGridCellCoordsArray a))-----{------------------------------------------------------------------------------------------ Tree items------------------------------------------------------------------------------------------}--- | Identifies tree items. Note: Replaces the @TreeItemId@ object and takes automatically--- care of allocation issues.-newtype TreeItem = TreeItem IntPtr- deriving (Eq,Show,Read)---- | Invalid tree item.-treeItemInvalid :: TreeItem-treeItemInvalid = TreeItem 0---- | Is a tree item ok? (i.e. not invalid).-treeItemIsOk :: TreeItem -> Bool-treeItemIsOk (TreeItem val)- = (val /= 0)--treeItemFromInt :: IntPtr -> TreeItem-treeItemFromInt i- = TreeItem i--withRefTreeItemId :: (Ptr (TTreeItemId ()) -> IO ()) -> IO TreeItem-withRefTreeItemId f- = do item <- assignRefPtr treeItemIdCreate f- val <- treeItemIdGetValue item- treeItemIdDelete item- return (TreeItem (fromCIntPtr val))--withTreeItemIdRef :: String -> TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b-withTreeItemIdRef msg t f- = withTreeItemIdPtr t $ \p -> withValidPtr msg p f--withTreeItemIdPtr :: TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b-withTreeItemIdPtr (TreeItem val) f - = do item <- treeItemIdCreateFromValue (toCIntPtr val)- x <- f item- treeItemIdDelete item- return x--withManagedTreeItemIdResult :: IO (Ptr (TTreeItemId a)) -> IO TreeItem -withManagedTreeItemIdResult io- = do item <- io- val <- treeItemIdGetValue item- treeItemIdDelete item- return (TreeItem (fromCIntPtr val))--foreign import ccall "wxTreeItemId_Create" treeItemIdCreate :: IO (Ptr (TTreeItemId a))-foreign import ccall "wxTreeItemId_GetValue" treeItemIdGetValue :: Ptr (TTreeItemId a) -> IO CIntPtr-foreign import ccall "wxTreeItemId_CreateFromValue" treeItemIdCreateFromValue :: CIntPtr -> IO (Ptr (TTreeItemId a))-foreign import ccall "wxTreeItemId_Delete" treeItemIdDelete :: Ptr (TTreeItemId a) -> IO ()--{------------------------------------------------------------------------------------------ String------------------------------------------------------------------------------------------}-{---- | A @wxString@ object.-type WxStringObject a = Ptr (CWxStringObject a)-type TWxStringObject a = CWxStringObject a-data CWxStringObject a = CWxStringObject--}---- FIXME: I am blithely changing these over to use CWString instead of String--- whereas in the rest of the code, I actually make a new version of the fns-withStringRef :: String -> String -> (Ptr (TWxString s) -> IO a) -> IO a-withStringRef msg s f- = withStringPtr s $ \p -> withValidPtr msg p f--withStringPtr :: String -> (Ptr (TWxString s) -> IO a) -> IO a-withStringPtr s f- = withCWString s $ \cstr ->- bracket (wxString_Create cstr)- (wxString_Delete)- f--withManagedStringResult :: IO (Ptr (TWxString a)) -> IO String-withManagedStringResult io- = do wxs <- io- len <- wxString_Length wxs- s <- if (len<=0)- then return ""- else withCWString (replicate (fromCInt len) ' ') $ \cstr ->- do wxString_GetString wxs cstr- peekCWStringLen (cstr, fromCInt len)- wxString_Delete wxs- return s---foreign import ccall wxString_Create :: Ptr CWchar -> IO (Ptr (TWxString a))-foreign import ccall wxString_CreateLen :: Ptr CWchar -> CInt -> IO (Ptr (TWxString a))-foreign import ccall wxString_Delete :: Ptr (TWxString a) -> IO ()-foreign import ccall wxString_GetString :: Ptr (TWxString a) -> Ptr CWchar -> IO CInt-foreign import ccall wxString_Length :: Ptr (TWxString a) -> IO CInt---{------------------------------------------------------------------------------------------ Color------------------------------------------------------------------------------------------}--- | An abstract data type to define colors.------ Note: Haddock 0.8 and 0.9 doesn't support GeneralizedNewtypeDeriving. So, This class--- doesn't have 'IArray' class's unboxed array instance now. If you want to use this type--- with unboxed array, you must write code like this.------ > {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, MultiParamTypeClasses #-}--- > import Graphics.UI.WXCore.WxcTypes--- > ...--- > deriving instance IArray UArray Color------ We can't derive 'MArray' class's unboxed array instance this way. This is a bad point--- of current 'MArray' class definition.----newtype Color = Color Word - deriving (Eq, Typeable) -- , IArray UArray) --instance Show Color where- showsPrec d c- = showParen (d > 0) (showString "rgba(" . shows (colorRed c) .- showChar ',' . shows (colorGreen c) .- showChar ',' . shows (colorBlue c) .- showChar ',' . shows (colorAlpha c) .- showChar ')' )---- | Create a color from a red\/green\/blue triple.-colorRGB :: (Integral a) => a -> a -> a -> Color-colorRGB r g b = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. 255)---- | Create a color from a red\/green\/blue triple.-rgb :: (Integral a) => a -> a -> a -> Color-rgb r g b = colorRGB r g b---- | Create a color from a red\/green\/blue\/alpha quadruple.-colorRGBA :: (Integral a) => a -> a -> a -> a -> Color-colorRGBA r g b a = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. (fromIntegral a))---- | Create a color from a red\/green\/blue\/alpha quadruple.-rgba :: (Integral a) => a -> a -> a -> a -> Color-rgba r g b a = colorRGBA r g b a----- | Return an 'Int' where the three least significant bytes contain--- the red, green, and blue component of a color.-intFromColor :: Color -> Int-intFromColor rgb- = let r = colorRed rgb- g = colorGreen rgb- b = colorBlue rgb- in (shiftL (fromIntegral r) 16 .|. shiftL (fromIntegral g) 8 .|. b)---- | Set the color according to an rgb integer. (see 'rgbIntFromColor').-colorFromInt :: Int -> Color-colorFromInt rgb- = let r = (shiftR rgb 16) .&. 0xFF- g = (shiftR rgb 8) .&. 0xFF- b = rgb .&. 0xFF- in colorRGB r g b---- | Return an 'Num' class's numeric representation where the three--- least significant the red, green, and blue component of a color.-fromColor :: (Num a) => Color -> a-fromColor (Color rgb)- = fromIntegral rgb---- | Set the color according to 'Integral' class's numeric representation.--- (see 'rgbaIntFromColor').-toColor :: (Integral a) => a -> Color-toColor- = Color . fromIntegral---- marshalling 1--- | Returns a red color component-colorRed :: (Num a) => Color -> a-colorRed (Color rgba) = fromIntegral ((shiftR rgba 24) .&. 0xFF)---- | Returns a green color component-colorGreen :: (Num a) => Color -> a-colorGreen (Color rgba) = fromIntegral ((shiftR rgba 16) .&. 0xFF)---- | Returns a blue color component-colorBlue :: (Num a) => Color -> a-colorBlue (Color rgba) = fromIntegral ((shiftR rgba 8) .&. 0xFF)---- | Returns a alpha channel component-colorAlpha :: (Num a) => Color -> a-colorAlpha (Color rgba) = fromIntegral (rgba .&. 0xFF)----- | This is an illegal color, corresponding to @nullColour@.-colorNull :: Color-colorNull- = Color (-1)--{-# DEPRECATED colorOk "Use colorIsOk instead" #-}--- | deprecated: use 'colorIsOk' instead.-colorOk :: Color -> Bool-colorOk = colorIsOk---- | Check of a color is valid (@Colour::IsOk@)-colorIsOk :: Color -> Bool-colorIsOk = (/= colorNull)----- marshalling 2-{--type Colour a = Object (CColour a)-type ColourPtr a = Ptr (CColour a)-data CColour a = CColour--}--withRefColour :: (Ptr (TColour a) -> IO ()) -> IO Color-withRefColour f- = withManagedColourResult $- assignRefPtr colourCreate f--withManagedColourResult :: IO (Ptr (TColour a)) -> IO Color-withManagedColourResult io- = do pcolour <- io- color <- do ok <- colourIsOk pcolour- if (ok==0)- then return colorNull- else do rgba <- colourGetUnsignedInt pcolour- return (toColor rgba)- colourSafeDelete pcolour- return color---withColourRef :: String -> Color -> (Ptr (TColour a) -> IO b) -> IO b-withColourRef msg c f- = withColourPtr c $ \p -> withValidPtr msg p f--withColourPtr :: Color -> (Ptr (TColour a) -> IO b) -> IO b-withColourPtr c f- = do pcolour <- colourCreateFromUnsignedInt (fromColor c)- x <- f pcolour- colourSafeDelete pcolour- return x--colourFromColor :: Color -> IO (Colour ())-colourFromColor c- = if (colorOk c)- then do p <- colourCreateFromUnsignedInt (fromColor c)- if (colourIsStatic p)- then return (objectFromPtr p)- else do mp <- wxManagedPtr_CreateFromColour p- objectFromManagedPtr mp- else withObjectResult colourNull- --colorFromColour :: Colour a -> IO Color-colorFromColour c- = withObjectRef "colorFromColour" c $ \pcolour ->- do ok <- colourIsOk pcolour- if (ok==0)- then return colorNull- else do rgba <- colourGetUnsignedInt pcolour- return (toColor rgba)---foreign import ccall "wxColour_CreateEmpty" colourCreate :: IO (Ptr (TColour a))-foreign import ccall "wxColour_CreateFromInt" colourCreateFromInt :: CInt -> IO (Ptr (TColour a))-foreign import ccall "wxColour_GetInt" colourGetInt :: Ptr (TColour a) -> IO CInt-foreign import ccall "wxColour_CreateFromUnsignedInt" colourCreateFromUnsignedInt :: Word -> IO (Ptr (TColour a))-foreign import ccall "wxColour_GetUnsignedInt" colourGetUnsignedInt :: Ptr (TColour a) -> IO Word-foreign import ccall "wxColour_SafeDelete" colourSafeDelete :: Ptr (TColour a) -> IO ()-foreign import ccall "wxColour_IsStatic" colourIsStatic :: Ptr (TColour a) -> Bool-foreign import ccall "wxColour_IsOk" colourIsOk :: Ptr (TColour a) -> IO CInt-foreign import ccall "Null_Colour" colourNull :: IO (Ptr (TColour a))-foreign import ccall wxManagedPtr_CreateFromColour :: Ptr (TColour a) -> IO (ManagedPtr (TColour a))+{-# LANGUAGE CPP, ForeignFunctionInterface, DeriveDataTypeable #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +----------------------------------------------------------------------------------------- +{-| Module : WxcTypes + Copyright : (c) Daan Leijen 2003, 2004 + License : wxWindows + + Maintainer : wxhaskell-devel@lists.sourceforge.net + Stability : provisional + Portability : portable + +Basic types and marshalling code for the wxWidgets C library. +-} +----------------------------------------------------------------------------------------- +module Graphics.UI.WXCore.WxcTypes( + -- * Object types + Object, objectNull, objectIsNull, objectCast, objectIsManaged + , objectDelete + , objectFromPtr, managedObjectFromPtr + , withObjectPtr, withObjectRef + , withObjectResult, withManagedObjectResult + , objectFinalize, objectNoFinalize + +-- , Managed, managedNull, managedIsNull, managedCast, createManaged, withManaged, managedTouch + + -- * Type synonyms + , Id + , Style + , EventId + + -- * Basic types + , fromBool, toBool + + -- ** Point + , Point, Point2(Point,pointX,pointY), point, pt, pointFromVec, pointFromSize, pointZero, pointNull + + -- ** Size + , Size, Size2D(Size,sizeW,sizeH), sz, sizeFromPoint, sizeFromVec, sizeZero, sizeNull + + -- ** Vector + , Vector, Vector2(Vector,vecX,vecY), vector, vec, vecFromPoint, vecFromSize, vecZero, vecNull + + -- ** Rectangle + , Rect, Rect2D(Rect,rectLeft,rectTop,rectWidth,rectHeight) + , rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight, rectBottom, rectRight + , rect, rectBetween, rectFromSize, rectZero, rectNull, rectSize, rectIsEmpty + + -- ** Color + , Color(..), rgb, colorRGB, rgba, colorRGBA, colorRed, colorGreen, colorBlue, colorAlpha + , intFromColor, colorFromInt, fromColor, toColor, colorOk, colorIsOk + + -- * Marshalling + -- ** Basic types + , withPointResult, withWxPointResult, toCIntPointX, toCIntPointY, fromCPoint, withCPoint + , withPointDoubleResult, toCDoublePointX, toCDoublePointY, fromCPointDouble, withCPointDouble + , withSizeResult, withWxSizeResult, toCIntSizeW, toCIntSizeH, fromCSize, withCSize + , withSizeDoubleResult, toCDoubleSizeW, toCDoubleSizeH, fromCSizeDouble, withCSizeDouble + , withVectorResult, withWxVectorResult, toCIntVectorX, toCIntVectorY, fromCVector, withCVector + , withVectorDoubleResult, toCDoubleVectorX, toCDoubleVectorY, fromCVectorDouble, withCVectorDouble + , withRectResult, withWxRectResult, withWxRectPtr, toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH, fromCRect, withCRect + , withRectDoubleResult, toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH, fromCRectDouble, withCRectDouble + , withArray, withArrayString, withArrayWString, withArrayInt, withArrayIntPtr, withArrayObject + , withArrayIntResult, withArrayIntPtrResult, withArrayStringResult, withArrayWStringResult, withArrayObjectResult + + , colourFromColor, colorFromColour + , colourCreate, colourSafeDelete -- , colourCreateRGB, colourRed, colourGreen, colourBlue colourAlpha + + + -- ** Managed object types + + -- , managedAddFinalizer + , TreeItem, treeItemInvalid, treeItemIsOk, treeItemFromInt + , withRefTreeItemId, withTreeItemIdPtr, withTreeItemIdRef, withManagedTreeItemIdResult + , withStringRef, withStringPtr, withManagedStringResult + , withRefColour, withColourRef, withColourPtr, withManagedColourResult + , withRefBitmap, withManagedBitmapResult + , withRefCursor, withManagedCursorResult + , withRefIcon, withManagedIconResult + , withRefPen, withManagedPenResult + , withRefBrush, withManagedBrushResult + , withRefFont, withManagedFontResult + , withRefImage + , withRefListItem + , withRefFontData + , withRefPrintData + , withRefPageSetupDialogData + , withRefPrintDialogData + , withRefDateTime, withManagedDateTimeResult + , withRefGridCellCoordsArray, withManagedGridCellCoordsArrayResult + + + -- ** Primitive types + -- *** CString + , CString(..), withCString, withStringResult + , CWString(..), withCWString, withWStringResult + -- *** ByteString + , withByteStringResult, withLazyByteStringResult + -- *** CInt + , CInt(..), toCInt, fromCInt, withIntResult + -- *** IntPtr + , IntPtr(..) + -- *** CIntPtr + , CIntPtr(..), toCIntPtr, fromCIntPtr, withIntPtrResult + -- *** Word + , Word(..) + -- *** 8 bit Word + , Word8(..) + -- *** 64 bit Integer + , Int64(..) + -- *** CDouble + , CDouble(..), toCDouble, fromCDouble, withDoubleResult + -- *** CChar + , CChar(..), toCChar, fromCChar, withCharResult + , CWchar(..), toCWchar + -- *** CBool + , CBool(..), toCBool, fromCBool, withBoolResult + -- ** Pointers + , Ptr(..), ptrNull, ptrIsNull, ptrCast, ForeignPtr, FunPtr, toCFunPtr + ) where + +import Control.Exception +import System.IO.Unsafe( unsafePerformIO ) +import Foreign.C +import Foreign.Ptr +import Foreign.Storable +import Foreign.Marshal.Alloc +import Foreign.Marshal.Array +import Foreign.Marshal.Utils (fromBool, toBool) + +{- note: for GHC 6.10.2 or higher, recommends to use "import Foreign.Concurrent" + See http://www.haskell.org/pipermail/cvs-ghc/2009-January/047120.html -} +import Foreign.ForeignPtr hiding (newForeignPtr,addForeignPtrFinalizer) +import Foreign.Concurrent + +import Data.Array.MArray (MArray) +import Data.Array.Unboxed (IArray, UArray) +import Data.Bits( shiftL, shiftR, (.&.), (.|.) ) + +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy as LB +import qualified Data.ByteString.Char8 as BC (pack) +import qualified Data.ByteString.Lazy.Char8 as LBC (pack) + +{- note: this is just for instances for the WX library and not necessary for WXCore -} +import Data.Dynamic + +import Data.Int +import Data.Word +import Debug.Trace (traceIO) + +import Graphics.UI.WXCore.WxcObject +import Graphics.UI.WXCore.WxcClassTypes + +{----------------------------------------------------------------------------------------- + Objects +-----------------------------------------------------------------------------------------} +-- | An @Id@ is used to identify objects during event handling. +type Id = Int + +-- | An @EventId@ is identifies specific events. +type EventId = Int + +-- | A @Style@ is normally used as a flag mask to specify some window style +type Style = Int + + +-- | Delete a wxObject, works for managed and unmanaged objects. +objectDelete :: WxObject a -> IO () +objectDelete obj + = if objectIsManaged obj + then objectFinalize obj + else withObjectPtr obj $ \p -> + wxObject_SafeDelete p + +-- | Create a managed object that will be deleted using |wxObject_SafeDelete|. +managedObjectFromPtr :: Ptr (TWxObject a) -> IO (WxObject a) +managedObjectFromPtr p + = do mp <- wxManagedPtr_CreateFromObject p + objectFromManagedPtr mp + +-- | Create a managed object that will be deleted using |wxObject_SafeDelete|. +withManagedObjectResult :: IO (Ptr (TWxObject a)) -> IO (WxObject a) +withManagedObjectResult io + = do p <- io + managedObjectFromPtr p + +-- | Return an unmanaged object. +withObjectResult :: IO (Ptr a) -> IO (Object a) +withObjectResult io + = do p <- io + return (objectFromPtr p) + +-- | Extract the object pointer and raise an exception if @NULL@. +-- Otherwise continue with the valid pointer. +withObjectRef :: String -> Object a -> (Ptr a -> IO b) -> IO b +withObjectRef msg obj f + = withObjectPtr obj $ \p -> + withValidPtr msg p f + +-- | Execute the continuation when the pointer is not null and +-- raise an error otherwise. +withValidPtr :: String -> Ptr a -> (Ptr a -> IO b) -> IO b +withValidPtr msg p f + = if (p == nullPtr) + then ioError (userError ("wxHaskell: NULL object" ++ (if null msg then "" else ": " ++ msg))) + else f p + + +foreign import ccall wxManagedPtr_CreateFromObject :: Ptr (TWxObject a) -> IO (ManagedPtr (TWxObject a)) +foreign import ccall wxObject_SafeDelete :: Ptr (TWxObject a) -> IO () + + +{----------------------------------------------------------------------------------------- + Point +-----------------------------------------------------------------------------------------} +--- | Define Point type synonym for backward compatibility. +type Point = Point2 Int + +-- | A point has an x and y coordinate. Coordinates are normally relative to the +-- upper-left corner of their view frame, where a positive x goes to the right and +-- a positive y to the bottom of the view. +data (Num a) => Point2 a = Point + { pointX :: !a -- ^ x component of a point. + , pointY :: !a -- ^ y component of a point. + } + deriving (Eq,Show,Read,Typeable) + +-- | Construct a point. +point :: (Num a) => a -> a -> Point2 a +point x y = Point x y + +-- | Shorter function to construct a point. +pt :: (Num a) => a -> a -> Point2 a +pt x y = Point x y + +pointFromVec :: (Num a) => Vector -> Point2 a +pointFromVec (Vector x y) + = Point (fromIntegral x) (fromIntegral y) + +pointFromSize :: (Num a) => Size -> Point2 a +pointFromSize (Size w h) + = Point (fromIntegral w) (fromIntegral h) + +-- | Point at the origin. +pointZero :: (Num a) => Point2 a +pointZero + = Point 0 0 + +-- | A `null' point is not a legal point (x and y are -1) and can be used for some +-- wxWidgets functions to select a default point. +pointNull :: (Num a) => Point2 a +pointNull + = Point (-1) (-1) + +-- marshalling +withCPoint :: Point2 Int -> (CInt -> CInt -> IO a) -> IO a +withCPoint (Point x y) f + = f (toCInt x) (toCInt y) + +withPointResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO (Point2 Int) +withPointResult f + = alloca $ \px -> + alloca $ \py -> + do f px py + x <- peek px + y <- peek py + return (fromCPoint x y) + +toCIntPointX, toCIntPointY :: Point2 Int -> CInt +toCIntPointX (Point x y) = toCInt x +toCIntPointY (Point x y) = toCInt y + +fromCPoint :: CInt -> CInt -> Point2 Int +fromCPoint x y + = Point (fromCInt x) (fromCInt y) + +withCPointDouble :: Point2 Double -> (CDouble -> CDouble -> IO a) -> IO a +withCPointDouble (Point x y) f + = f (toCDouble x) (toCDouble y) + +withPointDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Point2 Double) +withPointDoubleResult f + = alloca $ \px -> + alloca $ \py -> + do f px py + x <- peek px + y <- peek py + return (fromCPointDouble x y) + +toCDoublePointX, toCDoublePointY :: Point2 Double -> CDouble +toCDoublePointX (Point x y) = toCDouble x +toCDoublePointY (Point x y) = toCDouble y + +fromCPointDouble :: CDouble -> CDouble -> Point2 Double +fromCPointDouble x y + = Point (fromCDouble x) (fromCDouble y) + +{- +-- | A @wxPoint@ object. +type WxPointObject a = Ptr (CWxPointObject a) +type TWxPointObject a = CWxPointObject a +data CWxPointObject a = CWxPointObject +-} + +withWxPointResult :: IO (Ptr (TWxPoint a)) -> IO (Point2 Int) +withWxPointResult io + = do pt <- io + x <- wxPoint_GetX pt + y <- wxPoint_GetY pt + wxPoint_Delete pt + return (fromCPoint x y) + +foreign import ccall wxPoint_Delete :: Ptr (TWxPoint a) -> IO () +foreign import ccall wxPoint_GetX :: Ptr (TWxPoint a) -> IO CInt +foreign import ccall wxPoint_GetY :: Ptr (TWxPoint a) -> IO CInt + + +{----------------------------------------------------------------------------------------- + Size +-----------------------------------------------------------------------------------------} +--- | Define Point type synonym for backward compatibility. +type Size = Size2D Int + +-- | A @Size@ has a width and height. +data (Num a) => Size2D a = Size + { sizeW :: !a -- ^ the width of a size + , sizeH :: !a -- ^ the height of a size + } + deriving (Eq,Show,Typeable) + +-- | Construct a size from a width and height. +size :: (Num a) => a -> a -> Size2D a +size w h + = Size w h + +-- | Short function to construct a size +sz :: (Num a) => a -> a -> Size2D a +sz w h + = Size w h + +sizeFromPoint :: (Num a) => Point2 a -> Size2D a +sizeFromPoint (Point x y) + = Size x y + +sizeFromVec :: (Num a) => Vector2 a -> Size2D a +sizeFromVec (Vector x y) + = Size x y + +sizeZero :: (Num a) => Size2D a +sizeZero + = Size 0 0 + +-- | A `null' size is not a legal size (width and height are -1) and can be used for some +-- wxWidgets functions to select a default size. +sizeNull :: (Num a) => Size2D a +sizeNull + = Size (-1) (-1) + +-- marshalling +withCSize :: Size -> (CInt -> CInt -> IO a) -> IO a +withCSize (Size w h) f + = f (toCInt w) (toCInt h) + +withSizeResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Size +withSizeResult f + = alloca $ \cw -> + alloca $ \ch -> + do f cw ch + w <- peek cw + h <- peek ch + return (fromCSize w h) + +fromCSize :: CInt -> CInt -> Size +fromCSize w h + = Size (fromCInt w) (fromCInt h) + +toCIntSizeW, toCIntSizeH :: Size -> CInt +toCIntSizeW (Size w h) = toCInt w +toCIntSizeH (Size w h) = toCInt h + +withCSizeDouble :: Size2D Double -> (CDouble -> CDouble -> IO a) -> IO a +withCSizeDouble (Size w h) f + = f (toCDouble w) (toCDouble h) + +withSizeDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Size2D Double) +withSizeDoubleResult f + = alloca $ \cw -> + alloca $ \ch -> + do f cw ch + w <- peek cw + h <- peek ch + return (fromCSizeDouble w h) + +fromCSizeDouble :: CDouble -> CDouble -> Size2D Double +fromCSizeDouble w h + = Size (fromCDouble w) (fromCDouble h) + +toCDoubleSizeW, toCDoubleSizeH :: Size2D Double -> CDouble +toCDoubleSizeW (Size w h) = toCDouble w +toCDoubleSizeH (Size w h) = toCDouble h + +{- +-- | A @wxSize@ object. +type WxSizeObject a = Ptr (CWxSizeObject a) +type TWxSizeObject a = CWxSizeObject a +data CWxSizeObject a = CWxSizeObject +-} + +withWxSizeResult :: IO (Ptr (TWxSize a)) -> IO Size +withWxSizeResult io + = do sz <- io + w <- wxSize_GetWidth sz + h <- wxSize_GetHeight sz + wxSize_Delete sz + return (fromCSize w h) + +foreign import ccall wxSize_Delete :: Ptr (TWxSize a) -> IO () +foreign import ccall wxSize_GetWidth :: Ptr (TWxSize a) -> IO CInt +foreign import ccall wxSize_GetHeight :: Ptr (TWxSize a) -> IO CInt + + +{----------------------------------------------------------------------------------------- + Vector +-----------------------------------------------------------------------------------------} +--- | Define Point type synonym for backward compatibility. +type Vector = Vector2 Int + +-- | A vector with an x and y delta. +data (Num a) => Vector2 a = Vector + { vecX :: !a -- ^ delta-x component of a vector + , vecY :: !a -- ^ delta-y component of a vector + } + deriving (Eq,Show,Read,Typeable) + +-- | Construct a vector. +vector :: (Num a) => a -> a -> Vector2 a +vector dx dy = Vector dx dy + +-- | Short function to construct a vector. +vec :: (Num a) => a -> a -> Vector2 a +vec dx dy = Vector dx dy + +-- | A zero vector +vecZero :: (Num a) => Vector2 a +vecZero + = Vector 0 0 + +-- | A `null' vector has a delta x and y of -1 and can be used for some +-- wxWidgets functions to select a default vector. +vecNull :: (Num a) => Vector2 a +vecNull + = Vector (-1) (-1) + +vecFromPoint :: (Num a) => Point2 a -> Vector2 a +vecFromPoint (Point x y) + = Vector x y + +vecFromSize :: Size -> Vector +vecFromSize (Size w h) + = Vector w h + + +-- marshalling +withCVector :: Vector -> (CInt -> CInt -> IO a) -> IO a +withCVector (Vector x y) f + = f (toCInt x) (toCInt y) + +withVectorResult :: (Ptr CInt -> Ptr CInt -> IO ()) -> IO Vector +withVectorResult f + = alloca $ \px -> + alloca $ \py -> + do f px py + x <- peek px + y <- peek py + return (fromCVector x y) + +toCIntVectorX, toCIntVectorY :: Vector -> CInt +toCIntVectorX (Vector x y) = toCInt x +toCIntVectorY (Vector x y) = toCInt y + +fromCVector :: CInt -> CInt -> Vector +fromCVector x y + = Vector (fromCInt x) (fromCInt y) + +withCVectorDouble :: Vector2 Double -> (CDouble -> CDouble -> IO a) -> IO a +withCVectorDouble (Vector x y) f + = f (toCDouble x) (toCDouble y) + +withVectorDoubleResult :: (Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Vector2 Double) +withVectorDoubleResult f + = alloca $ \px -> + alloca $ \py -> + do f px py + x <- peek px + y <- peek py + return (fromCVectorDouble x y) + +toCDoubleVectorX, toCDoubleVectorY :: Vector2 Double -> CDouble +toCDoubleVectorX (Vector x y) = toCDouble x +toCDoubleVectorY (Vector x y) = toCDouble y + +fromCVectorDouble :: CDouble -> CDouble -> Vector2 Double +fromCVectorDouble x y + = Vector (fromCDouble x) (fromCDouble y) + + +withWxVectorResult :: IO (Ptr (TWxPoint a)) -> IO Vector +withWxVectorResult io + = do pt <- io + x <- wxPoint_GetX pt + y <- wxPoint_GetY pt + wxPoint_Delete pt + return (fromCVector x y) + + +{----------------------------------------------------------------------------------------- + Rectangle +-----------------------------------------------------------------------------------------} +--- | Define Point type synonym for backward compatibility. +type Rect = Rect2D Int + +-- | A rectangle is defined by the left x coordinate, the top y coordinate, +-- the width and the height. +data (Num a) => Rect2D a = Rect + { rectLeft :: !a + , rectTop :: !a + , rectWidth :: !a + , rectHeight :: !a + } + deriving (Eq,Show,Read,Typeable) + + +rectTopLeft, rectTopRight, rectBottomLeft, rectBottomRight :: (Num a) => Rect2D a -> Point2 a +rectTopLeft (Rect l t w h) = Point l t +rectTopRight (Rect l t w h) = Point (l+w) t +rectBottomLeft (Rect l t w h) = Point l (t+h) +rectBottomRight (Rect l t w h) = Point (l+w) (t+h) + +rectBottom, rectRight :: (Num a) => Rect2D a -> a +rectBottom (Rect x y w h) = y + h +rectRight (Rect x y w h) = x + w + +-- | Create a rectangle at a certain (upper-left) point with a certain size. +rect :: (Num a) => Point2 a -> Size2D a -> Rect2D a +rect (Point x y) (Size w h) + = Rect x y w h + +-- | Construct a (positive) rectangle between two (arbitrary) points. +rectBetween :: (Num a, Ord a) => Point2 a -> Point2 a -> Rect2D a +rectBetween (Point x0 y0) (Point x1 y1) + = Rect (min x0 x1) (min y0 y1) (abs (x1-x0)) (abs (y1-y0)) + +-- | An empty rectangle at (0,0). +rectZero :: (Num a) => Rect2D a +rectZero + = Rect 0 0 0 0 + +-- | An `null' rectangle is not a valid rectangle (@Rect -1 -1 -1 -1@) but can +-- used for some wxWidgets functions to select a default rectangle. (i.e. 'frameCreate'). +rectNull :: (Num a) => Rect2D a +rectNull + = Rect (-1) (-1) (-1) (-1) + +-- | Get the size of a rectangle. +rectSize :: (Num a) => Rect2D a -> Size2D a +rectSize (Rect l t w h) + = Size w h + +-- | Create a rectangle of a certain size with the upper-left corner at ('pt' 0 0). +rectFromSize :: (Num a) => Size2D a -> Rect2D a +rectFromSize (Size w h) + = Rect 0 0 w h + +rectIsEmpty :: (Num a, Eq a) => Rect2D a -> Bool +rectIsEmpty (Rect l t w h) + = (w==0 && h==0) + + + +-- marshalling 1 +withCRect :: Rect -> (CInt -> CInt -> CInt -> CInt -> IO a) -> IO a +withCRect (Rect x0 y0 x1 y1) f + = f (toCInt (x0)) (toCInt (y0)) (toCInt (x1)) (toCInt (y1)) + +withRectResult :: (Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()) -> IO Rect +withRectResult f + = alloca $ \cx -> + alloca $ \cy -> + alloca $ \cw -> + alloca $ \ch -> + do f cx cy cw ch + x <- peek cx + y <- peek cy + w <- peek cw + h <- peek ch + return (fromCRect x y w h) + +fromCRect :: CInt -> CInt -> CInt -> CInt -> Rect +fromCRect x y w h + = Rect (fromCInt x) (fromCInt y) (fromCInt w) (fromCInt h) + +toCIntRectX, toCIntRectY, toCIntRectW, toCIntRectH :: Rect -> CInt +toCIntRectX (Rect x y w h) = toCInt x +toCIntRectY (Rect x y w h) = toCInt y +toCIntRectW (Rect x y w h) = toCInt w +toCIntRectH (Rect x y w h) = toCInt h + +withCRectDouble :: Rect2D Double -> (CDouble -> CDouble -> CDouble -> CDouble -> IO a) -> IO a +withCRectDouble (Rect x0 y0 x1 y1) f + = f (toCDouble (x0)) (toCDouble (y0)) (toCDouble (x1)) (toCDouble (y1)) + +withRectDoubleResult :: (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()) -> IO (Rect2D Double) +withRectDoubleResult f + = alloca $ \cx -> + alloca $ \cy -> + alloca $ \cw -> + alloca $ \ch -> + do f cx cy cw ch + x <- peek cx + y <- peek cy + w <- peek cw + h <- peek ch + return (fromCRectDouble x y w h) + +fromCRectDouble :: CDouble -> CDouble -> CDouble -> CDouble -> Rect2D Double +fromCRectDouble x y w h + = Rect (fromCDouble x) (fromCDouble y) (fromCDouble w) (fromCDouble h) + +toCDoubleRectX, toCDoubleRectY, toCDoubleRectW, toCDoubleRectH :: Rect2D Double -> CDouble +toCDoubleRectX (Rect x y w h) = toCDouble x +toCDoubleRectY (Rect x y w h) = toCDouble y +toCDoubleRectW (Rect x y w h) = toCDouble w +toCDoubleRectH (Rect x y w h) = toCDouble h + +-- marshalling 2 +{- +-- | A @wxRect@ object. +type WxRectObject a = Ptr (CWxRectObject a) +type TWxRectObject a = CWxRectObject a +data CWxRectObject a = CWxRectObject +-} + +withWxRectRef :: String -> Rect -> (Ptr (TWxRect r) -> IO a) -> IO a +withWxRectRef msg r f + = withWxRectPtr r $ \p -> withValidPtr msg p f + +withWxRectPtr :: Rect -> (Ptr (TWxRect r) -> IO a) -> IO a +withWxRectPtr r f + = bracket (withCRect r wxRect_Create) + (wxRect_Delete) + f + +withWxRectResult :: IO (Ptr (TWxRect a)) -> IO Rect +withWxRectResult io + = do rt <- io + x <- wxRect_GetX rt + y <- wxRect_GetY rt + w <- wxRect_GetWidth rt + h <- wxRect_GetHeight rt + wxRect_Delete rt + return (fromCRect x y w h) + +foreign import ccall wxRect_Create :: CInt -> CInt -> CInt -> CInt -> IO (Ptr (TWxRect a)) +foreign import ccall wxRect_Delete :: Ptr (TWxRect a) -> IO () +foreign import ccall wxRect_GetX :: Ptr (TWxRect a) -> IO CInt +foreign import ccall wxRect_GetY :: Ptr (TWxRect a) -> IO CInt +foreign import ccall wxRect_GetWidth :: Ptr (TWxRect a) -> IO CInt +foreign import ccall wxRect_GetHeight :: Ptr (TWxRect a) -> IO CInt + + +{----------------------------------------------------------------------------------------- + CInt +-----------------------------------------------------------------------------------------} +withIntResult :: IO CInt -> IO Int +withIntResult io + = do x <- io + return (fromCInt x) + +toCInt :: Int -> CInt +toCInt i = fromIntegral i + +fromCInt :: CInt -> Int +fromCInt ci + = fromIntegral ci + +{----------------------------------------------------------------------------------------- + CIntPtr +-----------------------------------------------------------------------------------------} +withIntPtrResult :: IO CIntPtr -> IO IntPtr +withIntPtrResult io + = do x <- io + return (fromCIntPtr x) + +toCIntPtr :: IntPtr -> CIntPtr +toCIntPtr i = fromIntegral i + +fromCIntPtr :: CIntPtr -> IntPtr +fromCIntPtr ci + = fromIntegral ci + +{----------------------------------------------------------------------------------------- + CDouble +-----------------------------------------------------------------------------------------} +withDoubleResult :: IO CDouble -> IO Double +withDoubleResult io + = do x <- io + return (fromCDouble x) + +toCDouble :: Double -> CDouble +toCDouble d = realToFrac d + +fromCDouble :: CDouble -> Double +fromCDouble cd + = realToFrac cd + +{----------------------------------------------------------------------------------------- + CBool +-----------------------------------------------------------------------------------------} +type CBool = CInt + +toCBool :: Bool -> CBool +toCBool = intToCBool . fromBool + +withBoolResult :: IO CBool -> IO Bool +withBoolResult io + = do x <- io + return (fromCBool x) + +fromCBool :: CBool -> Bool +fromCBool = toBool . cboolToInt + +foreign import ccall "intToBool" intToCBool :: Int -> CBool +foreign import ccall "boolToInt" cboolToInt :: CBool -> Int + +{----------------------------------------------------------------------------------------- + CString +-----------------------------------------------------------------------------------------} +withStringResult :: (Ptr CChar -> IO CInt) -> IO String +withStringResult f + = do len <- f nullPtr + if (len<=0) + then return "" + else withCString (replicate (fromCInt len) ' ') $ \cstr -> + do f cstr + peekCStringLen (cstr,fromCInt len) + +withWStringResult :: (Ptr CWchar -> IO CInt) -> IO String +withWStringResult f + = do len <- f nullPtr + if (len<=0) + then return "" + else withCWString (replicate (fromCInt len) ' ') $ \cstr -> + do f cstr + peekCWString cstr + +{----------------------------------------------------------------------------------------- + ByteString +-----------------------------------------------------------------------------------------} +-- TODO: replace this by more efficient implementation. +-- e.g. use mmap when bytestring support mmap interface. +withByteStringResult :: (Ptr CChar -> IO CInt) -> IO B.ByteString +withByteStringResult f + = do len <- f nullPtr + if (len<=0) + then return $ BC.pack "" + else withCString (replicate (fromCInt len) ' ') $ \cstr -> + do f cstr + B.packCStringLen (cstr,fromCInt len) + +withLazyByteStringResult :: (Ptr CChar -> IO CInt) -> IO LB.ByteString +withLazyByteStringResult f + = do str <- withStringResult f + return $ LBC.pack str + +{----------------------------------------------------------------------------------------- + Arrays +-----------------------------------------------------------------------------------------} +withArrayStringResult :: (Ptr (Ptr CChar) -> IO CInt) -> IO [String] +withArrayStringResult f + = do clen <- f nullPtr + let len = fromCInt clen + if (len <= 0) + then return [] + else allocaArray len $ \carr -> + do f carr + arr <- peekArray len carr + mapM peekCString arr + +-- FIXME: factorise with withArrayStringResult +withArrayWStringResult :: (Ptr (Ptr CWchar) -> IO CInt) -> IO [String] +withArrayWStringResult f + = do clen <- f nullPtr + let len = fromCInt clen + if (len <= 0) + then return [] + else allocaArray len $ \carr -> + do f carr + arr <- peekArray len carr + mapM peekCWString arr + + +withArrayIntResult :: (Ptr CInt -> IO CInt) -> IO [Int] +withArrayIntResult f + = do clen <- f nullPtr + let len = fromCInt clen + if (len <= 0) + then return [] + else allocaArray len $ \carr -> + do f carr + xs <- peekArray len carr + return (map fromCInt xs) + +withArrayIntPtrResult :: (Ptr CIntPtr -> IO CInt) -> IO [IntPtr] +withArrayIntPtrResult f + = do clen <- f nullPtr + let len = fromCInt clen + if (len <= 0) + then return [] + else allocaArray len $ \carr -> + do f carr + xs <- peekArray len carr + return (map fromCIntPtr xs) + +withArrayObjectResult :: (Ptr (Ptr a) -> IO CInt) -> IO [Object a] +withArrayObjectResult f + = do clen <- f nullPtr + let len = fromCInt clen + if (len <= 0) + then return [] + else allocaArray len $ \carr -> + do f carr + ps <- peekArray len carr + return (map objectFromPtr ps) + +withArrayString :: [String] -> (CInt -> Ptr CString -> IO a) -> IO a +withArrayString xs f + = withCStrings xs [] $ \cxs -> + withArray0 ptrNull cxs $ \carr -> + f (toCInt len) carr + where + len = length xs + + withCStrings [] cxs f + = f (reverse cxs) + withCStrings (x:xs) cxs f + = withCString x $ \cx -> + withCStrings xs (cx:cxs) f + +-- FIXME: factorise with withArrayString +withArrayWString :: [String] -> (CInt -> Ptr CWString -> IO a) -> IO a +withArrayWString xs f + = withCWStrings xs [] $ \cxs -> + withArray0 ptrNull cxs $ \carr -> + f (toCInt len) carr + where + len = length xs + + withCWStrings [] cxs f + = f (reverse cxs) + withCWStrings (x:xs) cxs f + = withCWString x $ \cx -> + withCWStrings xs (cx:cxs) f + + +withArrayInt :: [Int] -> (CInt -> Ptr CInt -> IO a) -> IO a +withArrayInt xs f + = withArray0 0 (map toCInt xs) $ \carr -> + f (toCInt (length xs)) carr + +withArrayIntPtr :: [IntPtr] -> (CInt -> Ptr CIntPtr -> IO a) -> IO a +withArrayIntPtr xs f + = withArray0 0 (map toCIntPtr xs) $ \carr -> + f (toCInt (length xs)) carr + +withArrayObject :: [Ptr a] -> (CInt -> Ptr (Ptr a) -> IO b) -> IO b +withArrayObject xs f + = withArray0 ptrNull xs $ \carr -> + f (toCInt (length xs)) carr + +{----------------------------------------------------------------------------------------- + CCHar +-----------------------------------------------------------------------------------------} +toCChar :: Char -> CChar +toCChar = castCharToCChar + +-- generalised to work with Char and CChar +withCharResult :: (Num a, Integral a, Show a) => IO a -> IO Char +withCharResult io + = do x <- io + if (x < 0) + then do traceIO ("Recieved negative unicode: " ++ (show x)) + return '\n' + else return (fromCWchar x) + +{- The (x < 0) if expression in withCharResult is a workaround for +"processExecAsyncTimed dies with Prelude.chr bad argument"- bug +reported here +http://sourceforge.net/mailarchive/message.php?msg_id=54647.129.16.31.149.1111686341.squirrel%40webmail.chalmers.se +and here +http://www.mail-archive.com/wxhaskell-users@lists.sourceforge.net/msg00267.html + +Windows GUI-only programs have no stdin, stdout or stderr. So we use Debug.Trace.traceIO +for reporting message. +http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/terminal-interaction.html +http://www.haskell.org/ghc/docs/7.4.1/html/libraries/base-4.5.0.0/Debug-Trace.html#v:traceIO +-} + + +fromCChar :: CChar -> Char +fromCChar = castCCharToChar + +{----------------------------------------------------------------------------------------- + CCHar +-----------------------------------------------------------------------------------------} +toCWchar :: (Num a) => Char -> a +toCWchar = fromIntegral . fromEnum + + +fromCWchar :: (Num a, Integral a) => a -> Char +fromCWchar = toEnum . fromIntegral + + +{----------------------------------------------------------------------------------------- + CFunPtr +-----------------------------------------------------------------------------------------} +toCFunPtr :: FunPtr a -> Ptr a +toCFunPtr fptr + = castFunPtrToPtr fptr + +-- | Null pointer, use with care. +ptrNull :: Ptr a +ptrNull + = nullPtr + +-- | Test for null. +ptrIsNull :: Ptr a -> Bool +ptrIsNull p + = (p == ptrNull) + +-- | Cast a pointer type, use with care. +ptrCast :: Ptr a -> Ptr b +ptrCast p + = castPtr p + +{----------------------------------------------------------------------------------------- + Marshalling of classes that are managed +-----------------------------------------------------------------------------------------} +-- | A @Managed a@ is a pointer to an object of type @a@, just like 'Object'. However, +-- managed objects are automatically deleted when garbage collected. This is used for +-- certain classes that are not managed by the wxWidgets library, like 'Bitmap's +type Managed a = ForeignPtr a + +-- | Create a managed object. Takes a finalizer as argument. This is normally a +-- a delete function like 'windowDelete'. +createManaged :: IO () -> Ptr a -> IO (Managed a) +createManaged final obj + = newForeignPtr obj final + +-- | Add an extra finalizer to a managed object. +managedAddFinalizer :: IO () -> Managed a -> IO () +managedAddFinalizer io managed + = addForeignPtrFinalizer managed io + +-- | Do something with the object from a managed object. +withManaged :: Managed a -> (Ptr a -> IO b) -> IO b +withManaged fptr f + = withForeignPtr fptr f + + +-- | Keep a managed object explicitly alive. +managedTouch :: Managed a -> IO () +managedTouch fptr + = touchForeignPtr fptr + +-- | A null pointer, use with care. +{-# NOINLINE managedNull #-} +managedNull :: Managed a +managedNull + = unsafePerformIO (createManaged (return ()) ptrNull) + +-- | Test for null. +managedIsNull :: Managed a -> Bool +managedIsNull managed + = (managed == managedNull) + +-- | Cast a managed object, use with care. +managedCast :: Managed a -> Managed b +managedCast fptr + = castForeignPtr fptr + + +{----------------------------------------------------------------------------------------- + Classes assigned by value. +-----------------------------------------------------------------------------------------} +assignRef :: IO (Ptr (TWxObject a)) -> (Ptr (TWxObject a) -> IO ()) -> IO (WxObject a) +assignRef create f + = withManagedObjectResult (assignRefPtr create f) + +assignRefPtr :: IO (Ptr a) -> (Ptr a -> IO ()) -> IO (Ptr a) +assignRefPtr create f + = do p <- create + f p + return p + + +withManagedBitmapResult :: IO (Ptr (TBitmap a)) -> IO (Bitmap a) +withManagedBitmapResult io + = do p <- io + static <- wxBitmap_IsStatic p + if (static) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromBitmap p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromBitmap :: Ptr (TBitmap a) -> IO (ManagedPtr (TBitmap a)) +foreign import ccall wxBitmap_IsStatic :: Ptr (TBitmap a) -> IO Bool + +withManagedIconResult :: IO (Ptr (TIcon a)) -> IO (Icon a) +withManagedIconResult io + = do p <- io + if (wxIcon_IsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromIcon p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromIcon :: Ptr (TIcon a) -> IO (ManagedPtr (TIcon a)) +foreign import ccall wxIcon_IsStatic :: Ptr (TIcon a) -> Bool + +withManagedBrushResult :: IO (Ptr (TBrush a)) -> IO (Brush a) +withManagedBrushResult io + = do p <- io + if (wxBrush_IsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromBrush p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromBrush :: Ptr (TBrush a) -> IO (ManagedPtr (TBrush a)) +foreign import ccall wxBrush_IsStatic :: Ptr (TBrush a) -> Bool + +withManagedCursorResult :: IO (Ptr (TCursor a)) -> IO (Cursor a) +withManagedCursorResult io + = do p <- io + if (wxCursor_IsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromCursor p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromCursor :: Ptr (TCursor a) -> IO (ManagedPtr (TCursor a)) +foreign import ccall wxCursor_IsStatic :: Ptr (TCursor a) -> Bool + +withManagedFontResult :: IO (Ptr (TFont a)) -> IO (Font a) +withManagedFontResult io + = do p <- io + if (wxFont_IsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromFont p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromFont :: Ptr (TFont a) -> IO (ManagedPtr (TFont a)) +foreign import ccall wxFont_IsStatic :: Ptr (TFont a) -> Bool + +withManagedPenResult :: IO (Ptr (TPen a)) -> IO (Pen a) +withManagedPenResult io + = do p <- io + if (wxPen_IsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromPen p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromPen :: Ptr (TPen a) -> IO (ManagedPtr (TPen a)) +foreign import ccall wxPen_IsStatic :: Ptr (TPen a) -> Bool + + + +withRefBitmap :: (Ptr (TBitmap a) -> IO ()) -> IO (Bitmap a) +withRefBitmap f + = withManagedBitmapResult $ assignRefPtr wxBitmap_Create f +foreign import ccall "wxBitmap_CreateDefault" wxBitmap_Create :: IO (Ptr (TBitmap a)) + +withRefCursor :: (Ptr (TCursor a) -> IO ()) -> IO (Cursor a) +withRefCursor f + = withManagedCursorResult $ assignRefPtr (wx_Cursor_CreateFromStock 1) f +foreign import ccall "Cursor_CreateFromStock" wx_Cursor_CreateFromStock :: CInt -> IO (Ptr (TCursor a)) + +withRefIcon :: (Ptr (TIcon a) -> IO ()) -> IO (Icon a) +withRefIcon f + = withManagedIconResult $ assignRefPtr wxIcon_Create f +foreign import ccall "wxIcon_CreateDefault" wxIcon_Create :: IO (Ptr (TIcon a)) + +withRefImage :: (Ptr (TImage a) -> IO ()) -> IO (Image a) +withRefImage f + = assignRef wxImage_Create f +foreign import ccall "wxImage_CreateDefault" wxImage_Create :: IO (Ptr (TImage a)) + +withRefFont :: (Ptr (TFont a) -> IO ()) -> IO (Font a) +withRefFont f + = withManagedFontResult $ assignRefPtr wxFont_Create f +foreign import ccall "wxFont_CreateDefault" wxFont_Create :: IO (Ptr (TFont a)) + + +withRefPen :: (Ptr (TPen a) -> IO ()) -> IO (Pen a) +withRefPen f + = withManagedPenResult $ assignRefPtr wxPen_Create f +foreign import ccall "wxPen_CreateDefault" wxPen_Create :: IO (Ptr (TPen a)) + + +withRefBrush :: (Ptr (TBrush a) -> IO ()) -> IO (Brush a) +withRefBrush f + = withManagedBrushResult $ assignRefPtr wxBrush_Create f +foreign import ccall "wxBrush_CreateDefault" wxBrush_Create :: IO (Ptr (TBrush a)) + +withRefFontData :: (Ptr (TFontData a) -> IO ()) -> IO (FontData a) +withRefFontData f + = assignRef wxFontData_Create f +foreign import ccall "wxFontData_Create" wxFontData_Create :: IO (Ptr (TFontData a)) + +withRefListItem :: (Ptr (TListItem a) -> IO ()) -> IO (ListItem a) +withRefListItem f + = assignRef wxListItem_Create f +foreign import ccall "wxListItem_Create" wxListItem_Create :: IO (Ptr (TListItem a)) + +withRefPrintData :: (Ptr (TPrintData a) -> IO ()) -> IO (PrintData a) +withRefPrintData f + = assignRef wxPrintData_Create f +foreign import ccall "wxPrintData_Create" wxPrintData_Create :: IO (Ptr (TPrintData a)) + +withRefPrintDialogData :: (Ptr (TPrintDialogData a) -> IO ()) -> IO (PrintDialogData a) +withRefPrintDialogData f + = assignRef wxPrintDialogData_Create f +foreign import ccall "wxPrintDialogData_CreateDefault" wxPrintDialogData_Create :: IO (Ptr (TPrintDialogData a)) + +withRefPageSetupDialogData :: (Ptr (TPageSetupDialogData a) -> IO ()) -> IO (PageSetupDialogData a) +withRefPageSetupDialogData f + = assignRef wxPageSetupDialogData_Create f +foreign import ccall "wxPageSetupDialogData_Create" wxPageSetupDialogData_Create :: IO (Ptr (TPageSetupDialogData a)) + + +withManagedDateTimeResult :: IO (Ptr (TDateTime a)) -> IO (DateTime a) +withManagedDateTimeResult io + = do p <- io + if (p==nullPtr) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromDateTime p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromDateTime :: Ptr (TDateTime a) -> IO (ManagedPtr (TDateTime a)) + + +withRefDateTime :: (Ptr (TDateTime a) -> IO ()) -> IO (DateTime a) +withRefDateTime f + = withManagedDateTimeResult $ assignRefPtr wxDateTime_Create f +foreign import ccall "wxDateTime_Create" wxDateTime_Create :: IO (Ptr (TDateTime a)) + + +withManagedGridCellCoordsArrayResult :: IO (Ptr (TGridCellCoordsArray a)) -> IO (GridCellCoordsArray a) +withManagedGridCellCoordsArrayResult io + = do p <- io + if (p==nullPtr) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromGridCellCoordsArray p + objectFromManagedPtr mp + +foreign import ccall wxManagedPtr_CreateFromGridCellCoordsArray :: Ptr (TGridCellCoordsArray a) -> IO (ManagedPtr (TGridCellCoordsArray a)) + +withRefGridCellCoordsArray :: (Ptr (TGridCellCoordsArray a) -> IO ()) -> IO (GridCellCoordsArray a) +withRefGridCellCoordsArray f + = withManagedGridCellCoordsArrayResult $ assignRefPtr wxGridCellCoordsArray_Create f +foreign import ccall "wxGridCellCoordsArray_Create" wxGridCellCoordsArray_Create :: IO (Ptr (TGridCellCoordsArray a)) + + + + +{----------------------------------------------------------------------------------------- + Tree items +-----------------------------------------------------------------------------------------} +-- | Identifies tree items. Note: Replaces the @TreeItemId@ object and takes automatically +-- care of allocation issues. +newtype TreeItem = TreeItem IntPtr + deriving (Eq,Show,Read) + +-- | Invalid tree item. +treeItemInvalid :: TreeItem +treeItemInvalid = TreeItem 0 + +-- | Is a tree item ok? (i.e. not invalid). +treeItemIsOk :: TreeItem -> Bool +treeItemIsOk (TreeItem val) + = (val /= 0) + +treeItemFromInt :: IntPtr -> TreeItem +treeItemFromInt i + = TreeItem i + +withRefTreeItemId :: (Ptr (TTreeItemId ()) -> IO ()) -> IO TreeItem +withRefTreeItemId f + = do item <- assignRefPtr treeItemIdCreate f + val <- treeItemIdGetValue item + treeItemIdDelete item + return (TreeItem (fromCIntPtr val)) + +withTreeItemIdRef :: String -> TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b +withTreeItemIdRef msg t f + = withTreeItemIdPtr t $ \p -> withValidPtr msg p f + +withTreeItemIdPtr :: TreeItem -> (Ptr (TTreeItemId a) -> IO b) -> IO b +withTreeItemIdPtr (TreeItem val) f + = do item <- treeItemIdCreateFromValue (toCIntPtr val) + x <- f item + treeItemIdDelete item + return x + +withManagedTreeItemIdResult :: IO (Ptr (TTreeItemId a)) -> IO TreeItem +withManagedTreeItemIdResult io + = do item <- io + val <- treeItemIdGetValue item + treeItemIdDelete item + return (TreeItem (fromCIntPtr val)) + +foreign import ccall "wxTreeItemId_Create" treeItemIdCreate :: IO (Ptr (TTreeItemId a)) +foreign import ccall "wxTreeItemId_GetValue" treeItemIdGetValue :: Ptr (TTreeItemId a) -> IO CIntPtr +foreign import ccall "wxTreeItemId_CreateFromValue" treeItemIdCreateFromValue :: CIntPtr -> IO (Ptr (TTreeItemId a)) +foreign import ccall "wxTreeItemId_Delete" treeItemIdDelete :: Ptr (TTreeItemId a) -> IO () + +{----------------------------------------------------------------------------------------- + String +-----------------------------------------------------------------------------------------} +{- +-- | A @wxString@ object. +type WxStringObject a = Ptr (CWxStringObject a) +type TWxStringObject a = CWxStringObject a +data CWxStringObject a = CWxStringObject +-} + +-- FIXME: I am blithely changing these over to use CWString instead of String +-- whereas in the rest of the code, I actually make a new version of the fns +withStringRef :: String -> String -> (Ptr (TWxString s) -> IO a) -> IO a +withStringRef msg s f + = withStringPtr s $ \p -> withValidPtr msg p f + +withStringPtr :: String -> (Ptr (TWxString s) -> IO a) -> IO a +withStringPtr s f + = withCWString s $ \cstr -> + bracket (wxString_Create cstr) + (wxString_Delete) + f + +withManagedStringResult :: IO (Ptr (TWxString a)) -> IO String +withManagedStringResult io + = do wxs <- io + len <- wxString_Length wxs + s <- if (len<=0) + then return "" + else withCWString (replicate (fromCInt len) ' ') $ \cstr -> + do wxString_GetString wxs cstr + peekCWStringLen (cstr, fromCInt len) + wxString_Delete wxs + return s + + +foreign import ccall wxString_Create :: Ptr CWchar -> IO (Ptr (TWxString a)) +foreign import ccall wxString_CreateLen :: Ptr CWchar -> CInt -> IO (Ptr (TWxString a)) +foreign import ccall wxString_Delete :: Ptr (TWxString a) -> IO () +foreign import ccall wxString_GetString :: Ptr (TWxString a) -> Ptr CWchar -> IO CInt +foreign import ccall wxString_Length :: Ptr (TWxString a) -> IO CInt + + +{----------------------------------------------------------------------------------------- + Color +-----------------------------------------------------------------------------------------} +-- | An abstract data type to define colors. +-- +-- Note: Haddock 0.8 and 0.9 doesn't support GeneralizedNewtypeDeriving. So, This class +-- doesn't have 'IArray' class's unboxed array instance now. If you want to use this type +-- with unboxed array, you must write code like this. +-- +-- > {-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, MultiParamTypeClasses #-} +-- > import Graphics.UI.WXCore.WxcTypes +-- > ... +-- > deriving instance IArray UArray Color +-- +-- We can't derive 'MArray' class's unboxed array instance this way. This is a bad point +-- of current 'MArray' class definition. +-- +newtype Color = Color Word + deriving (Eq, Typeable) -- , IArray UArray) + +instance Show Color where + showsPrec d c + = showParen (d > 0) (showString "rgba(" . shows (colorRed c) . + showChar ',' . shows (colorGreen c) . + showChar ',' . shows (colorBlue c) . + showChar ',' . shows (colorAlpha c) . + showChar ')' ) + +-- | Create a color from a red\/green\/blue triple. +colorRGB :: (Integral a) => a -> a -> a -> Color +colorRGB r g b = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. 255) + +-- | Create a color from a red\/green\/blue triple. +rgb :: (Integral a) => a -> a -> a -> Color +rgb r g b = colorRGB r g b + +-- | Create a color from a red\/green\/blue\/alpha quadruple. +colorRGBA :: (Integral a) => a -> a -> a -> a -> Color +colorRGBA r g b a = Color (shiftL (fromIntegral r) 24 .|. shiftL (fromIntegral g) 16 .|. shiftL (fromIntegral b) 8 .|. (fromIntegral a)) + +-- | Create a color from a red\/green\/blue\/alpha quadruple. +rgba :: (Integral a) => a -> a -> a -> a -> Color +rgba r g b a = colorRGBA r g b a + + +-- | Return an 'Int' where the three least significant bytes contain +-- the red, green, and blue component of a color. +intFromColor :: Color -> Int +intFromColor rgb + = let r = colorRed rgb + g = colorGreen rgb + b = colorBlue rgb + in (shiftL (fromIntegral r) 16 .|. shiftL (fromIntegral g) 8 .|. b) + +-- | Set the color according to an rgb integer. (see 'rgbIntFromColor'). +colorFromInt :: Int -> Color +colorFromInt rgb + = let r = (shiftR rgb 16) .&. 0xFF + g = (shiftR rgb 8) .&. 0xFF + b = rgb .&. 0xFF + in colorRGB r g b + +-- | Return an 'Num' class's numeric representation where the three +-- least significant the red, green, and blue component of a color. +fromColor :: (Num a) => Color -> a +fromColor (Color rgb) + = fromIntegral rgb + +-- | Set the color according to 'Integral' class's numeric representation. +-- (see 'rgbaIntFromColor'). +toColor :: (Integral a) => a -> Color +toColor + = Color . fromIntegral + +-- marshalling 1 +-- | Returns a red color component +colorRed :: (Num a) => Color -> a +colorRed (Color rgba) = fromIntegral ((shiftR rgba 24) .&. 0xFF) + +-- | Returns a green color component +colorGreen :: (Num a) => Color -> a +colorGreen (Color rgba) = fromIntegral ((shiftR rgba 16) .&. 0xFF) + +-- | Returns a blue color component +colorBlue :: (Num a) => Color -> a +colorBlue (Color rgba) = fromIntegral ((shiftR rgba 8) .&. 0xFF) + +-- | Returns a alpha channel component +colorAlpha :: (Num a) => Color -> a +colorAlpha (Color rgba) = fromIntegral (rgba .&. 0xFF) + + +-- | This is an illegal color, corresponding to @nullColour@. +colorNull :: Color +colorNull + = Color (-1) + +{-# DEPRECATED colorOk "Use colorIsOk instead" #-} +-- | deprecated: use 'colorIsOk' instead. +colorOk :: Color -> Bool +colorOk = colorIsOk + +-- | Check of a color is valid (@Colour::IsOk@) +colorIsOk :: Color -> Bool +colorIsOk = (/= colorNull) + + +-- marshalling 2 +{- +type Colour a = Object (CColour a) +type ColourPtr a = Ptr (CColour a) +data CColour a = CColour +-} + +withRefColour :: (Ptr (TColour a) -> IO ()) -> IO Color +withRefColour f + = withManagedColourResult $ + assignRefPtr colourCreate f + +withManagedColourResult :: IO (Ptr (TColour a)) -> IO Color +withManagedColourResult io + = do pcolour <- io + color <- do ok <- colourIsOk pcolour + if (ok==0) + then return colorNull + else do rgba <- colourGetUnsignedInt pcolour + return (toColor rgba) + colourSafeDelete pcolour + return color + + +withColourRef :: String -> Color -> (Ptr (TColour a) -> IO b) -> IO b +withColourRef msg c f + = withColourPtr c $ \p -> withValidPtr msg p f + +withColourPtr :: Color -> (Ptr (TColour a) -> IO b) -> IO b +withColourPtr c f + = do pcolour <- colourCreateFromUnsignedInt (fromColor c) + x <- f pcolour + colourSafeDelete pcolour + return x + +colourFromColor :: Color -> IO (Colour ()) +colourFromColor c + = if (colorOk c) + then do p <- colourCreateFromUnsignedInt (fromColor c) + if (colourIsStatic p) + then return (objectFromPtr p) + else do mp <- wxManagedPtr_CreateFromColour p + objectFromManagedPtr mp + else withObjectResult colourNull + + +colorFromColour :: Colour a -> IO Color +colorFromColour c + = withObjectRef "colorFromColour" c $ \pcolour -> + do ok <- colourIsOk pcolour + if (ok==0) + then return colorNull + else do rgba <- colourGetUnsignedInt pcolour + return (toColor rgba) + + +foreign import ccall "wxColour_CreateEmpty" colourCreate :: IO (Ptr (TColour a)) +foreign import ccall "wxColour_CreateFromInt" colourCreateFromInt :: CInt -> IO (Ptr (TColour a)) +foreign import ccall "wxColour_GetInt" colourGetInt :: Ptr (TColour a) -> IO CInt +foreign import ccall "wxColour_CreateFromUnsignedInt" colourCreateFromUnsignedInt :: Word -> IO (Ptr (TColour a)) +foreign import ccall "wxColour_GetUnsignedInt" colourGetUnsignedInt :: Ptr (TColour a) -> IO Word +foreign import ccall "wxColour_SafeDelete" colourSafeDelete :: Ptr (TColour a) -> IO () +foreign import ccall "wxColour_IsStatic" colourIsStatic :: Ptr (TColour a) -> Bool +foreign import ccall "wxColour_IsOk" colourIsOk :: Ptr (TColour a) -> IO CInt +foreign import ccall "Null_Colour" colourNull :: IO (Ptr (TColour a)) +foreign import ccall wxManagedPtr_CreateFromColour :: Ptr (TColour a) -> IO (ManagedPtr (TColour a))
wxcore.cabal view
@@ -1,88 +1,88 @@-name: wxcore-version: 0.90.1.1-license: OtherLicense-license-file: LICENSE-author: Daan Leijen-maintainer: wxhaskell-devel@lists.sourceforge.net-category: GUI, User interfaces-synopsis: wxHaskell core-description:- wxHaskell is a portable and native GUI library for Haskell. It is- built on top of wxWidgets, a comprehensive C++ library that is- portable across all major GUI platforms, including GTK, Windows,- X11, and MacOS X. This version works with wxWidgets 2.9 only.-- Distributed under the WXWINDOWS LIBRARY LICENSE. Please see- LICENSE file, but note that this is essentially LGPL with an- exception allowing binary distribution of proprietary software.- This is the same license as wxWidgets itself uses.-homepage: http://haskell.org/haskellwiki/WxHaskell--cabal-version: >= 1.2-build-type: Custom--extra-tmp-files:- src/haskell/Graphics/UI/WXCore/WxcClassInfo.hs- src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs- src/haskell/Graphics/UI/WXCore/WxcClasses.hs- src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs- src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs--flag splitBase- description: use new split base- default: True--library- hs-source-dirs:- src/haskell-- exposed-modules:- Graphics.UI.WXCore- Graphics.UI.WXCore.Controls- Graphics.UI.WXCore.Defines- Graphics.UI.WXCore.Dialogs- Graphics.UI.WXCore.DragAndDrop- Graphics.UI.WXCore.Draw- Graphics.UI.WXCore.Events- Graphics.UI.WXCore.Frame- Graphics.UI.WXCore.Image- Graphics.UI.WXCore.Layout- Graphics.UI.WXCore.OpenGL- Graphics.UI.WXCore.Print- Graphics.UI.WXCore.Process- Graphics.UI.WXCore.Types- Graphics.UI.WXCore.WxcClassInfo- Graphics.UI.WXCore.WxcClassTypes- Graphics.UI.WXCore.WxcClasses- Graphics.UI.WXCore.WxcClassesAL- Graphics.UI.WXCore.WxcClassesMZ- Graphics.UI.WXCore.WxcDefs- Graphics.UI.WXCore.WxcObject- Graphics.UI.WXCore.WxcTypes-- other-modules:- Graphics.UI.WXCore.GHCiSupport-- frameworks:- Carbon-- build-depends:- bytestring,- filepath,- parsec,- stm,- wxc >= 0.90.1.0,- wxdirect >= 0.90.1.0,- directory,- time-- if flag(splitBase)- build-depends:- array >= 0.2 && < 0.5,- base >= 4 && < 5,- containers >= 0.2 && < 0.6- else- build-depends:- array >= 0.1 && < 0.3,- base >= 3 && < 4,- containers >= 0.1 && < 0.3+name: wxcore +version: 0.91.0.0 +license: OtherLicense +license-file: LICENSE +author: Daan Leijen +maintainer: wxhaskell-devel@lists.sourceforge.net +category: GUI, User interfaces +synopsis: wxHaskell core +description: + wxHaskell is a portable and native GUI library for Haskell. It is + built on top of wxWidgets, a comprehensive C++ library that is + portable across all major GUI platforms, including GTK, Windows, + X11, and MacOS X. This version works with wxWidgets 2.9 and 3.0. + + Distributed under the WXWINDOWS LIBRARY LICENSE. Please see + LICENSE file, but note that this is essentially LGPL with an + exception allowing binary distribution of proprietary software. + This is the same license as wxWidgets itself uses. +homepage: http://haskell.org/haskellwiki/WxHaskell + +cabal-version: >= 1.2 +build-type: Custom + +extra-tmp-files: + src/haskell/Graphics/UI/WXCore/WxcClassInfo.hs + src/haskell/Graphics/UI/WXCore/WxcClassTypes.hs + src/haskell/Graphics/UI/WXCore/WxcClasses.hs + src/haskell/Graphics/UI/WXCore/WxcClassesAL.hs + src/haskell/Graphics/UI/WXCore/WxcClassesMZ.hs + +flag splitBase + description: use new split base + default: True + +library + hs-source-dirs: + src/haskell + + exposed-modules: + Graphics.UI.WXCore + Graphics.UI.WXCore.Controls + Graphics.UI.WXCore.Defines + Graphics.UI.WXCore.Dialogs + Graphics.UI.WXCore.DragAndDrop + Graphics.UI.WXCore.Draw + Graphics.UI.WXCore.Events + Graphics.UI.WXCore.Frame + Graphics.UI.WXCore.Image + Graphics.UI.WXCore.Layout + Graphics.UI.WXCore.OpenGL + Graphics.UI.WXCore.Print + Graphics.UI.WXCore.Process + Graphics.UI.WXCore.Types + Graphics.UI.WXCore.WxcClassInfo + Graphics.UI.WXCore.WxcClassTypes + Graphics.UI.WXCore.WxcClasses + Graphics.UI.WXCore.WxcClassesAL + Graphics.UI.WXCore.WxcClassesMZ + Graphics.UI.WXCore.WxcDefs + Graphics.UI.WXCore.WxcObject + Graphics.UI.WXCore.WxcTypes + + other-modules: + Graphics.UI.WXCore.GHCiSupport + + frameworks: + Carbon + + build-depends: + bytestring, + filepath, + parsec, + stm, + wxc >= 0.91, + wxdirect >= 0.91, + directory, + time + + if flag(splitBase) + build-depends: + array >= 0.2 && < 0.6, + base >= 4 && < 5, + containers >= 0.2 && < 0.6 + else + build-depends: + array >= 0.1 && < 0.3, + base >= 3 && < 4, + containers >= 0.1 && < 0.3