{-# OPTIONS_GHC -optc-DWINVER=0x0600 #-}

{-# OPTIONS_GHC -optc-D_WIN32_WINNT=0x0600 #-}

{-# LINE 1 "Graphics\\Win32\\GDI\\Clip.hsc" #-}



{-# LINE 2 "Graphics\\Win32\\GDI\\Clip.hsc" #-}

{-# LANGUAGE Safe #-}



{-# LINE 6 "Graphics\\Win32\\GDI\\Clip.hsc" #-}

-----------------------------------------------------------------------------

-- |

-- Module      :  Graphics.Win32.GDI.Clip

-- 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.GDI.Clip where



import Control.Monad

import Graphics.Win32.GDI.Types

import System.Win32.Types

import Graphics.Win32.Message    ( WindowMessage )



import Foreign



#include "windows_cconv.h"

















type ClipboardFormat = UINT



cF_BITMAP             :: ClipboardFormat

cF_BITMAP             =  2

cF_DIB                :: ClipboardFormat

cF_DIB                =  8

cF_DIF                :: ClipboardFormat

cF_DIF                =  5

cF_DSPBITMAP          :: ClipboardFormat

cF_DSPBITMAP          =  130

cF_DSPENHMETAFILE     :: ClipboardFormat

cF_DSPENHMETAFILE     =  142

cF_DSPMETAFILEPICT    :: ClipboardFormat

cF_DSPMETAFILEPICT    =  131

cF_DSPTEXT            :: ClipboardFormat

cF_DSPTEXT            =  129

cF_ENHMETAFILE        :: ClipboardFormat

cF_ENHMETAFILE        =  14

cF_GDIOBJFIRST        :: ClipboardFormat

cF_GDIOBJFIRST        =  768

cF_HDROP              :: ClipboardFormat

cF_HDROP              =  15

cF_LOCALE             :: ClipboardFormat

cF_LOCALE             =  16

cF_METAFILEPICT       :: ClipboardFormat

cF_METAFILEPICT       =  3

cF_OEMTEXT            :: ClipboardFormat

cF_OEMTEXT            =  7

cF_OWNERDISPLAY       :: ClipboardFormat

cF_OWNERDISPLAY       =  128

cF_PALETTE            :: ClipboardFormat

cF_PALETTE            =  9

cF_PENDATA            :: ClipboardFormat

cF_PENDATA            =  10

cF_PRIVATEFIRST       :: ClipboardFormat

cF_PRIVATEFIRST       =  512

cF_PRIVATELAST        :: ClipboardFormat

cF_PRIVATELAST        =  767

cF_RIFF               :: ClipboardFormat

cF_RIFF               =  11

cF_SYLK               :: ClipboardFormat

cF_SYLK               =  4

cF_TEXT               :: ClipboardFormat

cF_TEXT               =  1

cF_WAVE               :: ClipboardFormat

cF_WAVE               =  12

cF_TIFF               :: ClipboardFormat

cF_TIFF               =  6

cF_DIBV5              :: ClipboardFormat

cF_DIBV5              =  17

cF_GDIOBJLAST         :: ClipboardFormat

cF_GDIOBJLAST         =  1023

cF_UNICODETEXT        :: ClipboardFormat

cF_UNICODETEXT        =  13



{-# LINE 68 "Graphics\\Win32\\GDI\\Clip.hsc" #-}



wM_CLIPBOARDUPDATE :: WindowMessage

wM_CLIPBOARDUPDATE = 0x031D -- #const WM_CLIPBOARDUPDATE -- Can't use constant due to GHC 7.8.x support.



-- % , CF_UNICODETEXT  -- WinNT only



foreign import WINDOWS_CCONV unsafe "windows.h ChangeClipboardChain"

  changeClipboardChain :: HWND -> HWND -> IO Bool



closeClipboard :: IO ()

closeClipboard =

  failIfFalse_ "CloseClipboard" c_CloseClipboard

foreign import WINDOWS_CCONV unsafe "windows.h CloseClipboard"

  c_CloseClipboard :: IO BOOL



foreign import WINDOWS_CCONV unsafe "windows.h CountClipboardFormats"

  countClipboardFormats :: IO Int



emptyClipboard :: IO ()

emptyClipboard =

  failIfFalse_ "EmptyClipboard" c_EmptyClipboard

foreign import WINDOWS_CCONV unsafe "windows.h EmptyClipboard"

  c_EmptyClipboard :: IO BOOL



-- original also tested GetLastError() != NO_ERROR



enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat

enumClipboardFormats format = do

  format' <- c_EnumClipboardFormats format

  when (format' == 0) $

    failUnlessSuccess "EnumClipboardFormats" getLastError

  return format'

foreign import WINDOWS_CCONV unsafe "windows.h EnumClipboardFormats"

  c_EnumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat



getClipboardData :: ClipboardFormat -> IO HANDLE

getClipboardData format =

  failIfNull "GetClipboardData" $ c_GetClipboardData format

foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardData"

  c_GetClipboardData :: ClipboardFormat -> IO HANDLE



getClipboardFormatName :: ClipboardFormat -> IO String

getClipboardFormatName format =

  allocaArray 256 $ \ c_name -> do

  len <- failIfZero "GetClipboardFormatName" $

    c_GetClipboardFormatName format c_name 256

  peekTStringLen (c_name, len)

foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardFormatNameW"

  c_GetClipboardFormatName :: ClipboardFormat -> LPTSTR -> Int -> IO Int



getClipboardOwner :: IO HWND

getClipboardOwner =

  failIfNull "GetClipboardOwner" c_GetClipboardOwner

foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardOwner"

  c_GetClipboardOwner :: IO HWND



getClipboardViewer :: IO HWND

getClipboardViewer =

  failIfNull "GetClipboardViewer" c_GetClipboardViewer

foreign import WINDOWS_CCONV unsafe "windows.h GetClipboardViewer"

  c_GetClipboardViewer :: IO HWND



getOpenClipboardWindow :: IO HWND

getOpenClipboardWindow =

  failIfNull "GetClipboardWindow" c_GetOpenClipboardWindow

foreign import WINDOWS_CCONV unsafe "windows.h GetOpenClipboardWindow"

  c_GetOpenClipboardWindow :: IO HWND



getPriorityClipboardFormat :: [ClipboardFormat] -> IO Int

getPriorityClipboardFormat formats =

  withArray formats $ \ format_array ->

  failIf (== -1) "GetPriorityClipboardFormat" $

    c_GetPriorityClipboardFormat format_array (length formats)

foreign import WINDOWS_CCONV unsafe "windows.h GetPriorityClipboardFormat"

  c_GetPriorityClipboardFormat :: Ptr UINT -> Int -> IO Int



foreign import WINDOWS_CCONV unsafe "windows.h IsClipboardFormatAvailable"

  isClipboardFormatAvailable :: ClipboardFormat -> IO BOOL



openClipboard :: HWND -> IO ()

openClipboard wnd =

  failIfFalse_ "OpenClipboard" $ c_OpenClipboard wnd

foreign import WINDOWS_CCONV unsafe "windows.h OpenClipboard"

  c_OpenClipboard :: HWND -> IO BOOL



registerClipboardFormat :: String -> IO ClipboardFormat

registerClipboardFormat name =

  withTString name $ \ c_name ->

  failIfZero "RegisterClipboardFormat" $

    c_RegisterClipboardFormat c_name

foreign import WINDOWS_CCONV unsafe "windows.h RegisterClipboardFormatW"

  c_RegisterClipboardFormat :: LPCTSTR -> IO ClipboardFormat



setClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE

setClipboardData format mem =

  failIfNull "SetClipboardData" $ c_SetClipboardData format mem

foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardData"

  c_SetClipboardData :: ClipboardFormat -> HANDLE -> IO HANDLE



setClipboardViewer :: HWND -> IO HWND

setClipboardViewer wnd =

  failIfNull "SetClipboardViewer" $ c_SetClipboardViewer wnd

foreign import WINDOWS_CCONV unsafe "windows.h SetClipboardViewer"

  c_SetClipboardViewer :: HWND -> IO HWND