diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2026-01-01 20:29:02 -0700 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2026-01-01 20:29:02 -0700 |
| commit | cb657fa9fc8124bdab42eb148e9b4a8ac69fc05e (patch) | |
| tree | 299ab9c10e0c6c40fe30f38f3c75286a282c6283 /plug/src/Montis/Layout | |
| parent | 88b5144ba82393e9efbffc8ba7ecc225d99dc9ed (diff) | |
| download | montis-cb657fa9fc8124bdab42eb148e9b4a8ac69fc05e.tar.gz montis-cb657fa9fc8124bdab42eb148e9b4a8ac69fc05e.tar.bz2 montis-cb657fa9fc8124bdab42eb148e9b4a8ac69fc05e.zip | |
[refactor] Wetterhorn -> Montis
Diffstat (limited to 'plug/src/Montis/Layout')
| -rw-r--r-- | plug/src/Montis/Layout/Combine.hs | 48 | ||||
| -rw-r--r-- | plug/src/Montis/Layout/Full.hs | 23 |
2 files changed, 71 insertions, 0 deletions
diff --git a/plug/src/Montis/Layout/Combine.hs b/plug/src/Montis/Layout/Combine.hs new file mode 100644 index 0000000..7563876 --- /dev/null +++ b/plug/src/Montis/Layout/Combine.hs @@ -0,0 +1,48 @@ +{-# LANGUAGE ViewPatterns #-} + +module Montis.Layout.Combine where + +import Data.Typeable +import Montis.Constraints +import Montis.Core.W + +data (|||) a b = Comb LR a b + deriving (Typeable, Read, Show) + +data Next = Next + deriving (Typeable) + +data Reset = Reset + deriving (Typeable) + +(|||) :: a -> b -> (a ||| b) +a ||| b = Comb L a b + +data LR = L | R deriving (Read, Show, Ord, Eq, Enum) + +instance (HandleMessage a, HandleMessage b) => HandleMessage (a ||| b) where + handleMessage (fromMessage -> Just Next) (Comb L l r) = return (Comb R l r) + handleMessage (fromMessage -> Just Reset) (Comb _ l r) = return (Comb L l r) + handleMessage mesg (Comb L l r) = + Comb L <$> handleMessage mesg l <*> pure r + handleMessage mesg (Comb R l r) = + Comb L l <$> handleMessage mesg r + +instance (LayoutClass a, LayoutClass b) => LayoutClass (a ||| b) where + -- In order to use this layout class, the lay-out type 'a' must satisfy BOTH + -- the left and right constraints. + type LayoutConstraint (a ||| b) = LayoutConstraint a &&&& LayoutConstraint b + + runLayout as (Comb R r l) = do + (r', ret) <- runLayout as r + return (Comb R r' l, ret) + runLayout as (Comb L r l) = do + (l', ret) <- runLayout as l + return (Comb R r l', ret) + + serializeLayout (Comb lr l r) = show (Comb lr (serializeLayout l) (serializeLayout r)) + readLayout str = Comb lr <$> l <*> r + where + (Comb lr (readLayout -> l) (readLayout -> r)) = read str + + description (Comb _ l r) = description l ++ " ||| " ++ description r diff --git a/plug/src/Montis/Layout/Full.hs b/plug/src/Montis/Layout/Full.hs new file mode 100644 index 0000000..b2efb91 --- /dev/null +++ b/plug/src/Montis/Layout/Full.hs @@ -0,0 +1,23 @@ +module Montis.Layout.Full where + +import Data.Data (Typeable) +import Data.Default.Class +import Montis.Constraints +import Montis.Core.W +import Montis.StackSet + +data Full = Full + deriving (Read, Show, Typeable) + +instance Default Full where + def = Full + +instance HandleMessage Full + +instance LayoutClass Full where + type LayoutConstraint Full = Unconstrained + + runLayout = pureLayout $ \l _ -> + case l of + (focused -> Just a) -> [(a, RationalRect 1 1 1 1)] + _ -> [] |