-----------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Win32.Message
-- Copyright   :  (c) Alastair Reid, 1997-2003
-- License     :  BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer  :  Esa Ilari Vuokko <ei@vuokko.info>
-- Stability   :  provisional
-- Portability :  portable
--
-- A collection of FFI declarations for interfacing with Win32.
--
-----------------------------------------------------------------------------

module Graphics.Win32.Message where

import System.Win32.Types

#include <windows.h>

type WindowMessage   = DWORD

#{enum WindowMessage,
 , wM_COMPACTING        = WM_COMPACTING
 , wM_WININICHANGE      = WM_WININICHANGE
 , wM_SYSCOLORCHANGE    = WM_SYSCOLORCHANGE
 , wM_QUERYNEWPALETTE   = WM_QUERYNEWPALETTE
 , wM_PALETTEISCHANGING = WM_PALETTEISCHANGING
 , wM_PALETTECHANGED    = WM_PALETTECHANGED
 , wM_FONTCHANGE        = WM_FONTCHANGE
 , wM_SPOOLERSTATUS     = WM_SPOOLERSTATUS
 , wM_DEVMODECHANGE     = WM_DEVMODECHANGE
 , wM_TIMECHANGE        = WM_TIMECHANGE
 , wM_POWER             = WM_POWER
 , wM_QUERYENDSESSION   = WM_QUERYENDSESSION
 , wM_ENDSESSION        = WM_ENDSESSION
 , wM_QUIT              = WM_QUIT
 , wM_CREATE            = WM_CREATE
 , wM_NCCREATE          = WM_NCCREATE
 , wM_DESTROY           = WM_DESTROY
 , wM_NCDESTROY         = WM_NCDESTROY
 , wM_SHOWWINDOW        = WM_SHOWWINDOW
 , wM_SETREDRAW         = WM_SETREDRAW
 , wM_ENABLE            = WM_ENABLE
 , wM_SETTEXT           = WM_SETTEXT
 , wM_GETTEXT           = WM_GETTEXT
 , wM_GETTEXTLENGTH     = WM_GETTEXTLENGTH
 , wM_WINDOWPOSCHANGING = WM_WINDOWPOSCHANGING
 , wM_WINDOWPOSCHANGED  = WM_WINDOWPOSCHANGED
 , wM_MOVE              = WM_MOVE
 , wM_SIZE              = WM_SIZE
 , wM_QUERYOPEN         = WM_QUERYOPEN
 , wM_CLOSE             = WM_CLOSE
 , wM_GETMINMAXINFO     = WM_GETMINMAXINFO
 , wM_PAINT             = WM_PAINT
 , wM_ERASEBKGND        = WM_ERASEBKGND
 , wM_ICONERASEBKGND    = WM_ICONERASEBKGND
 , wM_NCPAINT           = WM_NCPAINT
 , wM_NCCALCSIZE        = WM_NCCALCSIZE
 , wM_QUERYDRAGICON     = WM_QUERYDRAGICON
 , wM_DROPFILES         = WM_DROPFILES
 , wM_ACTIVATE          = WM_ACTIVATE
 , wM_ACTIVATEAPP       = WM_ACTIVATEAPP
 , wM_NCACTIVATE        = WM_NCACTIVATE
 , wM_SETFOCUS          = WM_SETFOCUS
 , wM_KILLFOCUS         = WM_KILLFOCUS
 , wM_KEYDOWN           = WM_KEYDOWN
 , wM_KEYUP             = WM_KEYUP
 , wM_CHAR              = WM_CHAR
 , wM_DEADCHAR          = WM_DEADCHAR
 , wM_SYSKEYDOWN        = WM_SYSKEYDOWN
 , wM_SYSKEYUP          = WM_SYSKEYUP
 , wM_SYSCHAR           = WM_SYSCHAR
 , wM_SYSDEADCHAR       = WM_SYSDEADCHAR
 , wM_KEYFIRST          = WM_KEYFIRST
 , wM_KEYLAST           = WM_KEYLAST
 , wM_MOUSEMOVE         = WM_MOUSEMOVE
 , wM_LBUTTONDOWN       = WM_LBUTTONDOWN
 , wM_LBUTTONUP         = WM_LBUTTONUP
 , wM_LBUTTONDBLCLK     = WM_LBUTTONDBLCLK
 , wM_RBUTTONDOWN       = WM_RBUTTONDOWN
 , wM_RBUTTONUP         = WM_RBUTTONUP
 , wM_RBUTTONDBLCLK     = WM_RBUTTONDBLCLK
 , wM_MBUTTONDOWN       = WM_MBUTTONDOWN
 , wM_MBUTTONUP         = WM_MBUTTONUP
 , wM_MBUTTONDBLCLK     = WM_MBUTTONDBLCLK
 , wM_MOUSEFIRST        = WM_MOUSEFIRST
 , wM_MOUSELAST         = WM_MOUSELAST
 , wM_NCMOUSEMOVE       = WM_NCMOUSEMOVE
 , wM_NCLBUTTONDOWN     = WM_NCLBUTTONDOWN
 , wM_NCLBUTTONUP       = WM_NCLBUTTONUP
 , wM_NCLBUTTONDBLCLK   = WM_NCLBUTTONDBLCLK
 , wM_NCRBUTTONDOWN     = WM_NCRBUTTONDOWN
 , wM_NCRBUTTONUP       = WM_NCRBUTTONUP
 , wM_NCRBUTTONDBLCLK   = WM_NCRBUTTONDBLCLK
 , wM_NCMBUTTONDOWN     = WM_NCMBUTTONDOWN
 , wM_NCMBUTTONUP       = WM_NCMBUTTONUP
 , wM_NCMBUTTONDBLCLK   = WM_NCMBUTTONDBLCLK
 , wM_MOUSEACTIVATE     = WM_MOUSEACTIVATE
 , wM_CANCELMODE        = WM_CANCELMODE
 , wM_TIMER             = WM_TIMER
 , wM_INITMENU          = WM_INITMENU
 , wM_INITMENUPOPUP     = WM_INITMENUPOPUP
 , wM_MENUSELECT        = WM_MENUSELECT
 , wM_MENUCHAR          = WM_MENUCHAR
 , wM_COMMAND           = WM_COMMAND
 , wM_HSCROLL           = WM_HSCROLL
 , wM_VSCROLL           = WM_VSCROLL
 , wM_CUT               = WM_CUT
 , wM_COPY              = WM_COPY
 , wM_PASTE             = WM_PASTE
 , wM_CLEAR             = WM_CLEAR
 , wM_UNDO              = WM_UNDO
 , wM_RENDERFORMAT      = WM_RENDERFORMAT
 , wM_RENDERALLFORMATS  = WM_RENDERALLFORMATS
 , wM_DESTROYCLIPBOARD  = WM_DESTROYCLIPBOARD
 , wM_DRAWCLIPBOARD     = WM_DRAWCLIPBOARD
 , wM_PAINTCLIPBOARD    = WM_PAINTCLIPBOARD
 , wM_SIZECLIPBOARD     = WM_SIZECLIPBOARD
 , wM_VSCROLLCLIPBOARD  = WM_VSCROLLCLIPBOARD
 , wM_HSCROLLCLIPBOARD  = WM_HSCROLLCLIPBOARD
 , wM_ASKCBFORMATNAME   = WM_ASKCBFORMATNAME
 , wM_CHANGECBCHAIN     = WM_CHANGECBCHAIN
 , wM_SETCURSOR         = WM_SETCURSOR
 , wM_SYSCOMMAND        = WM_SYSCOMMAND
 , wM_MDICREATE         = WM_MDICREATE
 , wM_MDIDESTROY        = WM_MDIDESTROY
 , wM_MDIACTIVATE       = WM_MDIACTIVATE
 , wM_MDIRESTORE        = WM_MDIRESTORE
 , wM_MDINEXT           = WM_MDINEXT
 , wM_MDIMAXIMIZE       = WM_MDIMAXIMIZE
 , wM_MDITILE           = WM_MDITILE
 , wM_MDICASCADE        = WM_MDICASCADE
 , wM_MDIICONARRANGE    = WM_MDIICONARRANGE
 , wM_MDIGETACTIVE      = WM_MDIGETACTIVE
 , wM_MDISETMENU        = WM_MDISETMENU
 , wM_CHILDACTIVATE     = WM_CHILDACTIVATE
 , wM_INITDIALOG        = WM_INITDIALOG
 , wM_NEXTDLGCTL        = WM_NEXTDLGCTL
 , wM_PARENTNOTIFY      = WM_PARENTNOTIFY
 , wM_ENTERIDLE         = WM_ENTERIDLE
 , wM_GETDLGCODE        = WM_GETDLGCODE
 , wM_SETFONT           = WM_SETFONT
 , wM_GETFONT           = WM_GETFONT
 , wM_DRAWITEM          = WM_DRAWITEM
 , wM_MEASUREITEM       = WM_MEASUREITEM
 , wM_DELETEITEM        = WM_DELETEITEM
 , wM_COMPAREITEM       = WM_COMPAREITEM
 , wM_VKEYTOITEM        = WM_VKEYTOITEM
 , wM_CHARTOITEM        = WM_CHARTOITEM
 , wM_QUEUESYNC         = WM_QUEUESYNC
 , wM_USER              = WM_USER
 , wM_APP               = WM_APP
 }

registerWindowMessage :: String -> IO WindowMessage
registerWindowMessage msg =
  withTString msg c_RegisterWindowMessage
foreign import stdcall unsafe "windows.h RegisterWindowMessageW"
  c_RegisterWindowMessage :: LPCTSTR -> IO WindowMessage

-- These are WM_SIZE specific
#{enum WPARAM,
 , sIZE_RESTORED        = SIZE_RESTORED
 , sIZE_MINIMIZED       = SIZE_MINIMIZED
 , sIZE_MAXIMIZED       = SIZE_MAXIMIZED
 , sIZE_MAXSHOW         = SIZE_MAXSHOW
 , sIZE_MAXHIDE         = SIZE_MAXHIDE
 }

----------------------------------------------------------------
-- Phew!
----------------------------------------------------------------
