fltkhs-0.5.0.0: src/TestPrograms/TestCall.hs
{-# LANGUAGE FlexibleContexts, ScopedTypeVariables #-}
module Main where
import Graphics.UI.FLTK.LowLevel.FLTKHS
import Graphics.UI.FLTK.LowLevel.Fl_Enumerations
import qualified Graphics.UI.FLTK.LowLevel.FL as FL
windowCallback :: (Show a) => a -> Ref Window -> IO ()
windowCallback a _ = print a
showOverride :: Ref Window -> IO ()
showOverride wptr = do
print "showOverride"
showWidgetSuper wptr
drawOverride :: Ref Window -> IO ()
drawOverride wptr = do
print "drawOverride"
drawSuper wptr
addButton :: Int -> Int -> T.Text -> IO (Ref Button)
addButton x_pos y_pos label = do
button <- buttonNew
(Rectangle (Position (X x_pos) (Y y_pos)) (Size (Width 80) (Height 30)) )
(Just label)
return button
addWindow :: IO (Ref Window)
addWindow = do
window <- windowCustom
(Size (Width 100) (Height 100))
Nothing
(Just "Test")
(Just drawOverride)
defaultCustomWidgetFuncs
defaultCustomWindowFuncs
button1 <- addButton 10 30 "button 1"
button2 <- addButton 10 70 "button 2"
setCallback button1 (\btn -> setLabel btn "New Label")
setCallback button2 (\_ -> FL.deleteWidget button1 >> redraw window)
setCallback window (windowCallback "window's callback data")
showWidget window
return window
runAwakeHandler :: IO ()
runAwakeHandler = do
awakeHandler <- FL.getAwakeHandler_
awakeHandler
eventIntercept :: Event -> Ref Window -> IO Int
eventIntercept e _ =
case e of
NoEvent -> do { putStrLn "NoEvent"; return 0; }
Push -> do { putStrLn "Push"; return 0; }
Release -> do { putStrLn "Release"; return 0; }
Enter -> do { putStrLn "Enter"; return 0; }
Leave -> do { putStrLn "Leave"; return 0; }
Drag -> do { putStrLn "Drag"; return 0; }
Focus -> do { putStrLn "Focus"; return 0; }
Unfocus -> do { putStrLn "Unfocus"; return 0; }
Keydown -> do { putStrLn "Keydown"; return 0; }
Keyup -> do { putStrLn "Keyup"; return 0; }
Close -> do { putStrLn "Close"; return 0; }
Move -> do { putStrLn "Move"; return 0; }
Shortcut -> do { putStrLn "Shortcut"; return 0; }
Deactivate -> do { putStrLn "Deactivate"; return 0; }
Activate -> do { putStrLn "Activate"; return 0; }
Hide -> do { putStrLn "Hide"; return 0; }
Show -> do { putStrLn "Show"; return 0; }
Paste -> do { putStrLn "Paste"; return 0; }
Selectionclear -> do { putStrLn "Selectionclear"; return 0; }
Mousewheel -> do { putStrLn "Mousewheel"; return 0; }
DndEnter -> do { putStrLn "DndEnter"; return 0; }
DndDrag -> do { putStrLn "DndDrag"; return 0; }
DndLeave -> do { putStrLn "DndLeave"; return 0; }
DndRelease -> do { putStrLn "DndRelease"; return 0; }
ScreenConfigurationChanged -> do { putStrLn "ScreenConfigurationChanged"; return 0; }
Fullscreen -> do { putStrLn "Fullscreen"; return 0; }
globalEventHandler :: Event -> IO Int
globalEventHandler e =
case e of
NoEvent -> do { putStrLn "Global NoEvent"; return 0; }
Push -> do { putStrLn "Global Push"; return 0; }
Release -> do { putStrLn "Global Release"; return 0; }
Enter -> do { putStrLn "Global Enter"; return 0; }
Leave -> do { putStrLn "Global Leave"; return 0; }
Drag -> do { putStrLn "Global Drag"; return 0; }
Focus -> do { putStrLn "Global Focus"; return 0; }
Unfocus -> do { putStrLn "Global Unfocus"; return 0; }
Keydown -> do { putStrLn "Global Keydown"; return 0; }
Keyup -> do { putStrLn "Global Keyup"; return 0; }
Close -> do { putStrLn "Global Close"; return 0; }
Move -> do { putStrLn "Global Move"; return 0; }
Shortcut -> do { putStrLn "Global Shortcut"; return 0; }
Deactivate -> do { putStrLn "Global Deactivate"; return 0; }
Activate -> do { putStrLn "Global Activate"; return 0; }
Hide -> do { putStrLn "Global Hide"; return 0; }
Show -> do { putStrLn "Global Show"; return 0; }
Paste -> do { putStrLn "Global Paste"; return 0; }
Selectionclear -> do { putStrLn "Global Selectionclear"; return 0; }
Mousewheel -> do { putStrLn "Global Mousewheel"; return 0; }
DndEnter -> do { putStrLn "Global DndEnter"; return 0; }
DndDrag -> do { putStrLn "Global DndDrag"; return 0; }
DndLeave -> do { putStrLn "Global DndLeave"; return 0; }
DndRelease -> do { putStrLn "Global DndRelease"; return 0; }
ScreenConfigurationChanged -> do { putStrLn "Global ScreenConfigurationChanged"; return 0; }
Fullscreen -> do { putStrLn "Global Fullscreen"; return 0; }
main :: IO ()
main = do
_ <- addWindow
print "added Window"
_ <- FL.addAwakeHandler (print "awake handler's callback data")
print "added awake handler"
_ <- runAwakeHandler
-- _ <- FL.setEventDispatch eventIntercept
_ <- FL.setHandler globalEventHandler
print "ran awake handler"
_ <- FL.run
return ()