wxcore-0.92.3.0: src/haskell/Graphics/UI/WXCore/DragAndDrop.hs
-----------------------------------------------------------------------------------------
{-|
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.Image
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
{--------------------------------------------------------------------------------
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 $ \iconCopy ->
withObjectPtr nullIcon $ \iconMove ->
withObjectPtr nullIcon $ \iconNone ->
dropSourceCreate wxdata win' iconCopy iconMove iconNone
-- | 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