Add node editor

This commit is contained in:
Joscha 2020-02-08 23:11:33 +00:00
parent 580b3b3209
commit fd39143945
3 changed files with 56 additions and 0 deletions

View file

@ -0,0 +1,48 @@
{-# LANGUAGE OverloadedStrings #-}
module Forest.Client.NodeEditor
( NodeEditor
, asReply
, editNode
, replyToNode
, handleNodeEditorEvent
, renderNodeEditor
) where
import Brick
import Brick.Widgets.Edit
import qualified Data.Text as T
import qualified Graphics.Vty as Vty
import Forest.Client.ResourceName
data NodeEditor = NodeEditor
{ neEditor :: Editor T.Text ResourceName
, neReply :: Bool
} deriving (Show)
asReply :: NodeEditor -> Bool
asReply = neReply
editNode :: T.Text -> NodeEditor
editNode text = NodeEditor
{ neEditor = editorText RnEditor (Just 1) text
, neReply = False
}
replyToNode :: NodeEditor
replyToNode = NodeEditor
{ neEditor = editorText RnEditor (Just 1) ""
, neReply = True
}
handleNodeEditorEvent :: Vty.Event -> NodeEditor -> EventM ResourceName NodeEditor
handleNodeEditorEvent event es = do
newEditor <- handleEditorEvent event $ neEditor es
pure es{neEditor = newEditor}
renderNodeEditor :: NodeEditor -> Widget ResourceName
renderNodeEditor es = renderEditor renderFunc True $ neEditor es
where
renderFunc :: [T.Text] -> Widget ResourceName
renderFunc = vBox . map txt

View file

@ -0,0 +1,6 @@
module Forest.Client.ResourceName
( ResourceName(..)
) where
data ResourceName = RnEditor
deriving (Show, Eq, Ord)