我正在寻找一个wx haskell拖放示例.我还没找到.
有空吗?还是提示?
至今:
on drag事件(但没有"在下降")left up目标我看到一些注释,我应该将一个drop target附加到object上,但是我看不到它是如何被调用的:
Graphics.UI.WXCore.DragAndDrop
L 51
- | 创建'DropSource'.然后'dragAndDrop'用'DataObject'替换target的'DataObject'.
dropSource :: DataObject a - > Window b - > IO(DropSource())
我看不到Graphics.UI.WXCore.DragAndDrop上面的WX层在哪里
无论如何,现在相当模糊......
编辑:这是我现在所处的位置:在拖动时不要激活,所以也没有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
Run Code Online (Sandbox Code Playgroud)
概括 :
on drag小部件上使用事件“ ” ,您可以从其中调用Graphics.UI.WXCore.EventsdragAndDrop我的错误和错误的假设:
mouse up或mouse down。如果未在 (DnD) 目标上释放,则拖动将中止并恢复正常事件。[0]以下代码将事件转储到控制台上以进行实验:
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
Run Code Online (Sandbox Code Playgroud)
我还看到了我可能探索的其他好处,比如在拖动过程中改变光标,或者对不同的拖放变体做出反应。
[0]:http://docs.wxwidgets.org/2.8/wx_wxdndoverview.html
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |