chiasma-0.2.0.0: lib/Chiasma/Ui/Data/RenderableTree.hs
module Chiasma.Ui.Data.RenderableTree where
import Data.Text.Prettyprint.Doc (Doc, Pretty(..), emptyDoc, space, (<+>))
import Chiasma.Data.TmuxId (PaneId(..))
import Chiasma.Ui.Data.Tree (NNode, NTree)
import Chiasma.Ui.Data.ViewGeometry (ViewGeometry(ViewGeometry))
import Chiasma.Ui.Data.ViewState (ViewState)
data RLayout =
RLayout {
_ref :: RPane,
_vertical :: Bool
}
deriving (Eq, Show)
data RPane =
RPane {
_id :: PaneId,
_top :: Int,
_left :: Int
}
deriving (Eq, Show)
data Renderable a =
Renderable {
_state :: ViewState,
_geometry :: ViewGeometry,
_view :: a
}
deriving (Eq, Show)
type RenderableLayout = Renderable RLayout
type RenderablePane = Renderable RPane
type RenderableTree = NTree RenderableLayout RenderablePane
type RenderableNode = NNode RenderableLayout RenderablePane
instance Pretty RLayout where
pretty (RLayout (RPane (PaneId refId) _ _) vertical) =
"l –" <+> "ref:" <+> pretty refId <+> "pos:" <+> if vertical then "v" else "h"
instance Pretty RPane where
pretty (RPane (PaneId paneId) top left) =
"p –" <+> pretty paneId <+> pretty top <+> pretty left
mayPretty :: Text -> Maybe Float -> Doc a
mayPretty prefix (Just a) =
space <> pretty (prefix <> ":") <+> pretty a
mayPretty _ Nothing =
emptyDoc
instance Pretty a => Pretty (Renderable a) where
pretty (Renderable _ (ViewGeometry minSize maxSize fixedSize _ _ _) a) =
pretty a <> mayPretty "min" minSize <> mayPretty "max" maxSize <> mayPretty "fixed" fixedSize