on develop help sign in
Add example selection
d333d0cAli Abrar
src-bin/example.hs+29−1
@@ -19,17 +19,45 @@ import qualified Data.Text as T
19import qualified Data.Text.Zipper as TZ
19import qualified Data.Text.Zipper as TZ
20import qualified Graphics.Vty as V
20import qualified Graphics.Vty as V
21import Reflex
21import Reflex
22+import Reflex.Network
22import Reflex.Class.Switchable
23import Reflex.Class.Switchable
23import Reflex.NotReady.Class
24import Reflex.NotReady.Class
24import Reflex.Vty
25import Reflex.Vty
25
26
27+data Example = Example_TextEditor
28+ | Example_Todo
29+ deriving (Show, Read, Eq, Ord, Enum, Bounded)
30+
26main :: IO ()
31main :: IO ()
27main = mainWidget $ do
32main = mainWidget $ do
28 inp <- input
33 inp <- input
34+ size <- displaySize
29 tellShutdown . fforMaybe inp $ \case
35 tellShutdown . fforMaybe inp $ \case
30 V.EvKey (V.KChar 'c') [V.MCtrl] -> Just ()
36 V.EvKey (V.KChar 'c') [V.MCtrl] -> Just ()
31 _ -> Nothing
37 _ -> Nothing
38+ let buttons = do
39+ text $ pure "Select an example. Ctrl+c to quit."
40+ let region1 = ffor size $ \(w,h) ->
41+ Region (w `div` 6) (h `div` 6) (w `div` 6) (h `div` 6)
42+ region2 = ffor size $ \(w,h) ->
43+ Region (2 * w `div` 6) (h `div` 6) (w `div` 6) (h `div` 6)
44+ todo' <- pane region1 (pure True) $ button "Todo List"
45+ editor <- pane region2 (pure True) $ button "Text Editor"
46+ return $ leftmost
47+ [ Example_TextEditor <$ editor
48+ , Example_Todo <$ todo'
49+ ]
50+ rec out <- networkHold buttons $ ffor (switch $ current out) $ \case
51+ Example_TextEditor -> testBoxes >> return never
52+ Example_Todo -> taskList >> return never
53+ return ()
54+
55+taskList
56+ :: (Reflex t, MonadHold t m, MonadFix m, Adjustable t m, NotReady t m, PostBuild t m)
57+ => VtyWidget t m ()
58+taskList = do
32 let btn = button $ pure "Add another task"
59 let btn = button $ pure "Add another task"
60+ inp <- input
33 rec let todos' = todos [Todo "First" True, Todo "Second" False, Todo "Third" False] $ leftmost
61 rec let todos' = todos [Todo "First" True, Todo "Second" False, Todo "Third" False] $ leftmost
34 [ () <$ e
62 [ () <$ e
35 , fforMaybe inp $ \case
63 , fforMaybe inp $ \case
@@ -41,7 +69,7 @@ main = mainWidget $ do
41 return ()
69 return ()
42
70
43testBoxes :: (Reflex t, MonadHold t m, MonadFix m) => VtyWidget t m ()
71testBoxes :: (Reflex t, MonadHold t m, MonadFix m) => VtyWidget t m ()
44−testBoxes = do
72+testBoxes = do
45 size <- displaySize
73 size <- displaySize
46 let region1 = fmap (\(w,h) -> Region (w `div` 6) (h `div` 6) (w `div` 2) (h `div` 2)) size
74 let region1 = fmap (\(w,h) -> Region (w `div` 6) (h `div` 6) (w `div` 2) (h `div` 2)) size
47 region2 = fmap (\(w,h) -> Region (w `div` 4) (h `div` 4) (2 * (w `div` 3)) (2*(h `div` 3))) size
75 region2 = fmap (\(w,h) -> Region (w `div` 4) (h `div` 4) (2 * (w `div` 3)) (2*(h `div` 3))) size