chiasma-0.12.2.0: lib/Chiasma/Ui/Data/RenderableTree.hs
module Chiasma.Ui.Data.RenderableTree where
import Prettyprinter (Doc, Pretty (..), emptyDoc, space, (<+>))
import Chiasma.Data.Axis (Axis)
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,
_axis :: Axis
}
deriving stock (Eq, Show)
data RPane =
RPane {
_id :: PaneId,
_top :: Int,
_left :: Int
}
deriving stock (Eq, Show)
data Renderable a =
Renderable {
_state :: ViewState,
_geometry :: ViewGeometry,
_view :: a
}
deriving stock (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) _ _) axis) =
"l –" <+> "ref:" <+> pretty refId <+> "pos:" <+> pretty axis
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