Wx haskell Drag and Drop Example

I am looking for an example of wx haskell Drag and Drop. I haven't found one yet.

Are there any available? or hints?

Still:

  • I see the event on drag(but not "drop by drop")
  • the mouse just gives left upfor the purpose
  • I see some comment where I have to set the target’s passport to the object, but I don’t see how it is called:

    Graphics.UI.WXCore.DragAndDrop

    L 51

    - | Create a DropSource. Then "dragAndDrop" replaces the target DataObject with this "DataObject".

    dropSource :: DataObject a -> Window b -> IO (DropSource ())

  • I don’t see where the WX layer is located above Graphics.UI.WXCore.DragAndDrop

  • This is (also) old, I think: [0]: http://bb10.com/haskell-wxhaskell-general/2007-08/msg00035.html

, ...


edit: : , dragAndDrop ( xinput , ) (dragger , [O]), )

--- test where DnD from yinput to xinput
module Main where

import CustoWidget
import Graphics.UI.WX hiding (empty)
import Data.Graph.Inductive
import Data.Maybe
import Control.Monad
import Graphics.UI.WX.Events
import Graphics.UI.WXCore.WxcClassesMZ
import Graphics.UI.WXCore.WxcClassesAL
import Graphics.UI.WXCore.DragAndDrop
import Graphics.UI.WXCore.Events
import Debug.Trace
main
  = start ballsFrame
  -- @next : try andrun start within a state

ballsFrame
  = do

      f      <- frame  [text := "Layout test"]
      p      <- panel  f []                       -- panel for color and tab management.
      ok     <- button p [text := "Ok"]
      can    <- button p [text := "Cancel", on command := infoDialog f "Info" "Pressed 'Cancel'"]
      xinput <- textEntry p [text := "100", alignment := AlignRight]
      yinput <- textEntry p [text := "100", alignment := AlignRight]

      set f [defaultButton := ok
             ,layout := container p $
                        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 can]]
                                 ]
      set xinput [    on mouse := showMe] --, on keyboard := showMeK
      set yinput [ ] --on mouse := showMe, on keyboard := showMeK ]
--      fileDropTarget xinput (\pt file ->  putStrLn $ show file )


      -- prepare the drop source

      textdata <- textDataObjectCreate ""
      drop <- dropTarget xinput textdata

      textdata' <- textDataObjectCreate "text"
      src <- dropSource textdata' yinput

      -- activate on drag the do drag drop
      set yinput [ on drag := onDrag src]
      set ok [ on command := onOk f textdata]




      return ()



onDrag s p =  trace ("on drag " ++ show s ++ " " ++ show p) 
    dragAndDrop s Default (\_ -> return ()) 



onOk f textdata = do

          txt <- textDataObjectGetText textdata
          infoDialog f "resultText" txt
          close f

showMe = \x -> do putStrLn $ show x

dragger win wout = do
          textdata <- textDataObjectCreate ""
          drop <- dropTarget wout textdata
          textdata' <- textDataObjectCreate "text"
          src <- dropSource textdata' win
          dragAndDrop src Default (\_ -> return ())
          txt <- textDataObjectGetText textdata
          infoDialog wout "resultText" txt
+5
1

:

  • dropTarget dropSource: Graphics.UI.WXCore.DragAndDrop
  • "on drag" , dragAndDrop Graphics.UI.WXCore.Events

:

  • "on drop", . , :
  • "" . mouse up mouse down.            (DnD), , . [0]
  • , textEntry , "", . "on drag Activated" .
  • - , DataObjects ( , textEntry.). . " ".

, :

module Main where


import Graphics.UI.WX hiding (empty)

import Data.Maybe
import Control.Monad
import Graphics.UI.WX.Events
import Graphics.UI.WXCore.WxcClassesMZ
--import Graphics.UI.WXCore.WxcClassesAL
import Graphics.UI.WXCore.DragAndDrop
import Graphics.UI.WXCore.Events

main
  = start dndtest


dndtest
  = do

      f      <- frame  [text := "Drag And Drop test"]
      p      <- panel  f []                       
      ok     <- button p [text := "Ok"]
      xinput <- textEntry p [text := "here :"] 
      yinput <- staticText p [text := "drag me"]

      set f [defaultButton := ok
             ,layout := container p $
                        margin 10 $
                        column 5 [boxed "coordinates" (grid 5 5 [[label "source:", hfill $ widget yinput]
                                                                ,[label "target(focus first):", hfill $ widget xinput]
                                                                ])
                                 ,floatBottomRight $ row 5 [widget ok]]
                                 ]

      set xinput [ on enter := onEnter]

      set yinput [ ] 
---------------------------------------------------------
--- meaningful stuff starts here
---------------------------------------------------------

       -- prepare the drop source : create a DataObject and associate it with the source
      textdata' <- textDataObjectCreate "text dropped"
      src <- dropSource textdata' yinput

      -- prepare the drop target: create a DataObject (placeholder here) and associate it with the target
      textdata <- textDataObjectCreate ".."
      drop <- dropTarget xinput textdata 


      -- activate on drag the do dragdrop. this will replace the target dataObject with the source one.
      -- Try with and without giving focus to the textEntry field
      -- Try and source from your favorite editor also (focus first!)
      set yinput [ on drag := onDrag src ]
---------------------------------------------------------
--- meaningful stuff stops here
---------------------------------------------------------

      set ok [ on command := close f ]
      return ()





--onDrag:: Graphics.UI.WXCore.WxcClassTypes.DropSource a -> Point -> IO ()
onDrag s p  =  do
    dragAndDrop s Default (\_ -> return ())
    putStrLn "on Drag activated:"



showMeE :: EventMouse -> IO ()
showMeE (MouseMotion point mod) = putStr ""  --- discard meaningless Motion event
showMeE  e = putStrLn $ show e


onEnter p = putStrLn $ "on Enter:" ++ show p

, , , .

[0]: http://docs.wxwidgets.org/2.8/wx_wxdndoverview.html

+2
source

All Articles