From fd39143945978dad3910e04a925d72bb4238c6c4 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sat, 8 Feb 2020 23:11:33 +0000 Subject: [PATCH] Add node editor --- package.yaml | 2 ++ src/Forest/Client/NodeEditor.hs | 48 +++++++++++++++++++++++++++++++ src/Forest/Client/ResourceName.hs | 6 ++++ 3 files changed, 56 insertions(+) create mode 100644 src/Forest/Client/NodeEditor.hs create mode 100644 src/Forest/Client/ResourceName.hs diff --git a/package.yaml b/package.yaml index 3c5a7aa..12cf95d 100644 --- a/package.yaml +++ b/package.yaml @@ -16,8 +16,10 @@ dependencies: - base >= 4.7 && < 5 - aeson - async +- brick - containers - text +- vty - websockets library: diff --git a/src/Forest/Client/NodeEditor.hs b/src/Forest/Client/NodeEditor.hs new file mode 100644 index 0000000..80e32a2 --- /dev/null +++ b/src/Forest/Client/NodeEditor.hs @@ -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 diff --git a/src/Forest/Client/ResourceName.hs b/src/Forest/Client/ResourceName.hs new file mode 100644 index 0000000..4753e80 --- /dev/null +++ b/src/Forest/Client/ResourceName.hs @@ -0,0 +1,6 @@ +module Forest.Client.ResourceName + ( ResourceName(..) + ) where + +data ResourceName = RnEditor + deriving (Show, Eq, Ord)