module UserLayoutF where
import Fudget
import FRequest
--import Command
--import Event
import Geometry(Rect)
--import CompOps
import Spops(concatMapSP)
import CompSP(preMapSP,serCompSP)
import LayoutRequest
--import Message(Message(..))

userLayoutF :: F a b -> F (Either (Path,Rect) a) (Either (Path,LayoutMessage) b)
userLayoutF :: F a b -> F (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
userLayoutF (F FSP a b
fud) = FSP (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
-> F (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} ((Message (Path, FRequest) b
 -> [Message (Path, FRequest) (Either (Path, LayoutMessage) b)])
-> SP
     (Message (Path, FRequest) b)
     (Message (Path, FRequest) (Either (Path, LayoutMessage) b))
forall t b. (t -> [b]) -> SP t b
concatMapSP Message (Path, FRequest) b
-> [Message (Path, FRequest) (Either (Path, LayoutMessage) b)]
forall a b.
Message (a, FRequest) b
-> [Message (a, FRequest) (Either (a, LayoutMessage) b)]
post SP
  (Message (Path, FRequest) b)
  (Message (Path, FRequest) (Either (Path, LayoutMessage) b))
-> FSP a b
-> SP
     (FEvent a)
     (Message (Path, FRequest) (Either (Path, LayoutMessage) b))
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
`serCompSP` FSP a b
fud SP
  (FEvent a)
  (Message (Path, FRequest) (Either (Path, LayoutMessage) b))
-> (Message (Path, FResponse) (Either (Path, Rect) a) -> FEvent a)
-> FSP (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
forall a b t. SP a b -> (t -> a) -> SP t b
`preMapSP` Message (Path, FResponse) (Either (Path, Rect) a) -> FEvent a
forall a b.
Message (a, FResponse) (Either (a, Rect) b)
-> Message (a, FResponse) b
pre)
  where
    pre :: Message (a, FResponse) (Either (a, Rect) b)
-> Message (a, FResponse) b
pre Message (a, FResponse) (Either (a, Rect) b)
msg =
      case Message (a, FResponse) (Either (a, Rect) b)
msg of
        High (Right b
x) -> b -> Message (a, FResponse) b
forall a b. b -> Message a b
High b
x
	High (Left (a
p,Rect
place)) -> (a, FResponse) -> Message (a, FResponse) b
forall a b. a -> Message a b
Low (a
p,LayoutResponse -> FResponse
LEvt (Rect -> LayoutResponse
LayoutPlace Rect
place))
	Low (a, FResponse)
pev -> (a, FResponse) -> Message (a, FResponse) b
forall a b. a -> Message a b
Low (a, FResponse)
pev
    post :: Message (a, FRequest) b
-> [Message (a, FRequest) (Either (a, LayoutMessage) b)]
post Message (a, FRequest) b
msg =
      case Message (a, FRequest) b
msg of
        High b
x -> [Either (a, LayoutMessage) b
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. b -> Message a b
High (b -> Either (a, LayoutMessage) b
forall a b. b -> Either a b
Right b
x)]
	Low (a
p,LCmd LayoutMessage
req) -> [Either (a, LayoutMessage) b
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. b -> Message a b
High ((a, LayoutMessage) -> Either (a, LayoutMessage) b
forall a b. a -> Either a b
Left (a
p,LayoutMessage
req))]
	--Low d@(p,XCmd DestroyWindow) -> [Low d] --,High (Left (p,LayoutDestroy))]
	Low (a, FRequest)
pcmd -> [(a, FRequest)
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. a -> Message a b
Low (a, FRequest)
pcmd]