module SplitF where
import AllFudgets
import HandleF(vHandleF,hHandleF)
import LinearSplitP(linearSplitP)

hSplitF :: F a a -> F b b -> F (Either a b) (Either a b)
hSplitF = forall {a} {a} {b} {b}.
Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
hSplitF' Alignment
aCenter
vSplitF :: F a a -> F b b -> F (Either a b) (Either a b)
vSplitF = forall {a} {a} {b} {b}.
Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
vSplitF' Alignment
aCenter

hSplitF' :: Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
hSplitF' = forall {a} {a} {b} {b}.
LayoutDir
-> Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
splitF' LayoutDir
Horizontal
vSplitF' :: Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
vSplitF' = forall {a} {a} {b} {b}.
LayoutDir
-> Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
splitF' LayoutDir
Vertical

splitF' :: LayoutDir
-> Alignment -> F a a -> F b b -> F (Either a b) (Either a b)
splitF' LayoutDir
dir Alignment
alignment F a a
fud1 F b b
fud2 =
    forall a b c d.
F (Either (Either a b) c) (Either (Either c d) a) -> F b d
loopCompThroughRightF forall a b. (a -> b) -> a -> b
$
    forall {a} {b} {c} {d}.
[FRequest] -> K a b -> F c d -> F (Either a c) (Either b d)
groupF [FRequest]
startcmds forall {a} {b} {b} {a} {b}.
K (Either (Either (Either a b) b) (Either a b))
  (Either (Either (Either a Size) b) (Either a b))
sizeK forall a b. (a -> b) -> a -> b
$
    forall a b. Placer -> F a b -> F a b
placerF (LayoutDir -> Distance -> Placer
linearSplitP LayoutDir
dir forall a. Num a => a
defaultSep) forall a b. (a -> b) -> a -> b
$
    F a a
fud1forall {a} {b} {c} {d}.
F a b -> F c d -> F (Either a c) (Either b d)
>+<forall {d}. F Size d
hFforall {a} {b} {c} {d}.
F a b -> F c d -> F (Either a c) (Either b d)
>+<F b b
fud2
  where
    startcmds :: [FRequest]
startcmds = [XCommand -> FRequest
XCmd forall a b. (a -> b) -> a -> b
$ [WindowAttributes] -> XCommand
ChangeWindowAttributes [PixmapId -> WindowAttributes
CWBackPixmap PixmapId
parentRelative]]

    hF :: F Size d
hF = forall {p}. LayoutDir -> p -> p -> p
colinear LayoutDir
dir forall {d}. Alignment -> F Size d
hHandleF forall {d}. Alignment -> F Size d
vHandleF Alignment
alignment

    toLoop :: a -> Maybe (Message a (Either a b))
toLoop = forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Message a b
High forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left
    out :: a -> Maybe (Message a (Either a a))
out = forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Message a b
High forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Either a b
Right
    toHandle :: a -> Maybe (Message a (Either (Either (Either a a) b) b))
toHandle = forall {a} {a} {b}. a -> Maybe (Message a (Either a b))
toLoop forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Either a b
Right
    toFud1 :: a -> Maybe (Message a (Either (Either (Either a b) b) b))
toFud1 = forall {a} {a} {b}. a -> Maybe (Message a (Either a b))
toLoop forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left
    toFud2 :: a -> Maybe (Message a (Either (Either a a) b))
toFud2 = forall {a} {a} {b}. a -> Maybe (Message a (Either a b))
toLoop forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Either a b
Right

    sizeK :: K (Either (Either (Either a b) b) (Either a b))
  (Either (Either (Either a Size) b) (Either a b))
sizeK = forall hi ho. KSP hi ho -> K hi ho
K (forall {t} {b}. (t -> Maybe b) -> SP t b
mapFilterSP forall {a} {b} {b} {a} {b} {a}.
Message FResponse (Either (Either (Either a b) b) (Either a b))
-> Maybe
     (Message a (Either (Either (Either a Size) b) (Either a b)))
route)
    route :: Message FResponse (Either (Either (Either a b) b) (Either a b))
-> Maybe
     (Message a (Either (Either (Either a Size) b) (Either a b)))
route = forall {t1} {t2} {t3}.
(t1 -> t2) -> (t3 -> t2) -> Message t1 t3 -> t2
message forall {a} {a} {b} {b}.
FResponse
-> Maybe (Message a (Either (Either (Either a Size) b) b))
low forall {a} {b} {b} {a} {b} {a} {b}.
Either (Either (Either a b) b) (Either a b)
-> Maybe (Message a (Either (Either (Either a b) b) (Either a b)))
high

    low :: FResponse
-> Maybe (Message a (Either (Either (Either a Size) b) b))
low (LEvt (LayoutSize Size
size)) = forall {a} {a} {a} {b} {b}.
a -> Maybe (Message a (Either (Either (Either a a) b) b))
toHandle Size
size
    low FResponse
event = forall {p} {a}. p -> Maybe a
ignore FResponse
event
    
    high :: Either (Either (Either a b) b) (Either a b)
-> Maybe (Message a (Either (Either (Either a b) b) (Either a b)))
high = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall {a} {b} {b} {a} {a}.
Either (Either a b) b -> Maybe (Message a (Either a (Either a b)))
fromLoop (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall {a} {a} {b} {b} {b}.
a -> Maybe (Message a (Either (Either (Either a b) b) b))
toFud1 forall {a} {a} {a} {b}.
a -> Maybe (Message a (Either (Either a a) b))
toFud2)
    fromLoop :: Either (Either a b) b -> Maybe (Message a (Either a (Either a b)))
fromLoop = forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall {a} {a} {a} {b}.
a -> Maybe (Message a (Either a (Either a b)))
fromFud1 forall {p} {a}. p -> Maybe a
ignore) forall {a} {a} {a} {a}.
a -> Maybe (Message a (Either a (Either a a)))
fromFud2
    fromFud1 :: a -> Maybe (Message a (Either a (Either a b)))
fromFud1 = forall {a} {a} {a}. a -> Maybe (Message a (Either a a))
out forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left
    fromFud2 :: a -> Maybe (Message a (Either a (Either a a)))
fromFud2 = forall {a} {a} {a}. a -> Maybe (Message a (Either a a))
out forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Either a b
Right

    ignore :: p -> Maybe a
ignore p
_ = forall a. Maybe a
Nothing