module Main where import Control.Monad.IO.Class (MonadIO(..)) import Dingo.Event (Event(..)) import Dingo.Callback (CallbackM) import Dingo.ResourceBundle.JqueryUI.Lightness (jqueryUIStyleResourceBundle) import Dingo.Server (DingoSettings(..), defaultDingoSettings, runApplication) import Dingo.Widget.Application import Dingo.Widget.DataTables (mkTable, setTableData, onTableBodyEvent) import qualified Dingo.Widget.Button as WB import qualified Dingo.Widget.Input as WI import qualified Dingo.Widget.Panel as WP import qualified Dingo.Widget.Select as WS import qualified TownWidget as TSW -- Test application app :: Application -> CallbackM () app pw = do panel <- WP.mkPanel pw -- Add a button widget. btn <- WB.mkButton panel "Click Me!" WB.onClick btn $ do liftIO $ putStrLn "Button was clicked!" setApplicationTitle pw "Hello, world!" -- Add select field. sel <- WS.mkSelect panel [ ("K1", "V1") , ("K2", "V2") ] WS.onChange sel $ do liftIO $ putStrLn "Select field changed!" WS.setValue sel "K1" liftIO $ putStrLn "Select field reset!" -- Add an input field. inp <- WI.mkInput panel WI.onChange inp $ do liftIO $ putStrLn "Input field changed!" v <- WI.getValue inp liftIO $ putStrLn $ "INPUT FIELD NEW VALUE: " ++ show v -- Reset the field value to something else. WI.setValue inp "CHANGED!" v' <- WI.getValue inp liftIO $ putStrLn $ "INPUT FIELD NEW VALUE*: " ++ show v' -- Also change selector. WS.setValue sel "K2" -- Add a little table. table <- mkTable panel ["Task", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] [ ["Frob the Gib", "(0,0)", "(1,0)", "(2,0)", "(3,0)", "(4,0)", "(5,0)", "(6,0)" ] , ["Knead It", "(0,1)", "(1,1)", "(2,1)", "(3,1)", "(4,1)", "(5,1)", "(6,1)" ] , ["Empty Trash", "(0,2)", "(1,2)", "(2,2)", "(3,2)", "(4,2)", "(5,2)", "(6,2)" ] , ["Choose Knob", "(0,3)", "(1,3)", "(2,3)", "(3,3)", "(4,3)", "(5,3)", "(6,3)" ] , ["Frotz Nitz", "(0,4)", "(1,4)", "(2,4)", "(3,4)", "(4,4)", "(5,4)", "(6,4)"] ] onTableBodyEvent table OnDblClick $ liftIO $ putStrLn "CLICKED TABLE!" -- Add town selector widget. townSel <- TSW.mkTownWidget panel TSW.onChange townSel $ do liftIO $ putStrLn "TOWN SELECTOR CHANGE EVENT FIRED!" v <- TSW.getSelectedTown townSel liftIO $ putStrLn $ "TOWN: " ++ show v v' <- TSW.getSelectedCountry townSel liftIO $ putStrLn $ "COUNTRY: " ++ show v' -- Change a cell in the table. setTableData table (2,1) "Hello!" return () main :: IO () main = do putStrLn "Starting server" runApplication dingoSettings "Dingo Example App" app where dingoSettings = defaultDingoSettings { dsPort = 3000 , dsResourceBundles = [jqueryUIStyleResourceBundle] }