----------------------------------------------------------------------------------------- {-| 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