mirror of
https://github.com/fjvallarino/monomer.git
synced 2024-09-20 08:17:37 +03:00
Try removing s type parameter from WidgetRequest (to be reverted next)
This commit is contained in:
parent
531df8828a
commit
1f4462b630
@ -141,7 +141,7 @@ handleAppEvent wenv node model evt = case evt of
|
||||
_ -> []
|
||||
|
||||
buildUI :: WidgetEnv App AppEvent -> App -> WidgetNode App AppEvent
|
||||
buildUI wenv model = traceShow "Creating UI" widgetSplitH where
|
||||
buildUI wenv model = traceShow "Creating UI" widgetSplit where
|
||||
widgetSimple = vstack [
|
||||
label $ "Count: " <> showt (model ^. clickCount),
|
||||
button "Increase" IncButton
|
||||
|
@ -175,25 +175,25 @@ class CmbOnFocus t e | t -> e where
|
||||
onFocus :: e -> t
|
||||
|
||||
class CmbOnFocusReq t s | t -> s where
|
||||
onFocusReq :: WidgetRequest s -> t
|
||||
onFocusReq :: WidgetRequest -> t
|
||||
|
||||
class CmbOnBlur t e | t -> e where
|
||||
onBlur :: e -> t
|
||||
|
||||
class CmbOnBlurReq t s | t -> s where
|
||||
onBlurReq :: WidgetRequest s -> t
|
||||
onBlurReq :: WidgetRequest -> t
|
||||
|
||||
class CmbOnClick t e | t -> e where
|
||||
onClick :: e -> t
|
||||
|
||||
class CmbOnClickReq t s | t -> s where
|
||||
onClickReq :: WidgetRequest s -> t
|
||||
onClickReq :: WidgetRequest -> t
|
||||
|
||||
class CmbOnClickEmpty t e | t -> e where
|
||||
onClickEmpty :: e -> t
|
||||
|
||||
class CmbOnClickEmptyReq t s | t -> s where
|
||||
onClickEmptyReq :: WidgetRequest s -> t
|
||||
onClickEmptyReq :: WidgetRequest -> t
|
||||
|
||||
class CmbOnEnabledChange t e | t -> e where
|
||||
onEnabledChange :: e -> t
|
||||
@ -208,10 +208,10 @@ class CmbOnChangeIdx t a e | t -> e where
|
||||
onChangeIdx :: (Int -> a -> e) -> t
|
||||
|
||||
class CmbOnChangeReq t s | t -> s where
|
||||
onChangeReq :: WidgetRequest s -> t
|
||||
onChangeReq :: WidgetRequest -> t
|
||||
|
||||
class CmbOnChangeIdxReq t s | t -> s where
|
||||
onChangeIdxReq :: (Int -> WidgetRequest s) -> t
|
||||
onChangeIdxReq :: (Int -> WidgetRequest) -> t
|
||||
|
||||
class CmbOnLoadError t a e | t -> e where
|
||||
onLoadError :: (a -> e) -> t
|
||||
|
@ -53,36 +53,36 @@ nodeInstDesc level node = infoDesc (_winInfo node) where
|
||||
spaces ++ "req: " ++ show (_wniSizeReqW info, _wniSizeReqH info) ++ "\n"
|
||||
rectDesc r = show (_rX r, _rY r, _rW r, _rH r)
|
||||
|
||||
isResizeWidgets :: WidgetRequest s -> Bool
|
||||
isResizeWidgets :: WidgetRequest -> Bool
|
||||
isResizeWidgets ResizeWidgets = True
|
||||
isResizeWidgets _ = False
|
||||
|
||||
isRenderOnce :: WidgetRequest s -> Bool
|
||||
isRenderOnce :: WidgetRequest -> Bool
|
||||
isRenderOnce RenderOnce{} = True
|
||||
isRenderOnce _ = False
|
||||
|
||||
isRenderEvery :: WidgetRequest s -> Bool
|
||||
isRenderEvery :: WidgetRequest -> Bool
|
||||
isRenderEvery RenderEvery{} = True
|
||||
isRenderEvery _ = False
|
||||
|
||||
isRenderStop :: WidgetRequest s -> Bool
|
||||
isRenderStop :: WidgetRequest -> Bool
|
||||
isRenderStop RenderStop{} = True
|
||||
isRenderStop _ = False
|
||||
|
||||
isFocusRequest :: WidgetRequest s -> Bool
|
||||
isFocusRequest :: WidgetRequest -> Bool
|
||||
isFocusRequest MoveFocus{} = True
|
||||
isFocusRequest SetFocus{} = True
|
||||
isFocusRequest _ = False
|
||||
|
||||
isIgnoreParentEvents :: WidgetRequest s -> Bool
|
||||
isIgnoreParentEvents :: WidgetRequest -> Bool
|
||||
isIgnoreParentEvents IgnoreParentEvents = True
|
||||
isIgnoreParentEvents _ = False
|
||||
|
||||
isIgnoreChildrenEvents :: WidgetRequest s -> Bool
|
||||
isIgnoreChildrenEvents :: WidgetRequest -> Bool
|
||||
isIgnoreChildrenEvents IgnoreChildrenEvents = True
|
||||
isIgnoreChildrenEvents _ = False
|
||||
|
||||
isRunTask :: WidgetRequest s -> Bool
|
||||
isRunTask :: WidgetRequest -> Bool
|
||||
isRunTask RunTask{} = True
|
||||
isRunTask _ = False
|
||||
|
||||
|
@ -92,7 +92,7 @@ instance Serialise WidgetState where
|
||||
0 -> return $ WidgetState (model :: ByteString)
|
||||
_ -> fail "Invalid WidgetState"
|
||||
|
||||
data WidgetRequest s
|
||||
data WidgetRequest
|
||||
= IgnoreParentEvents
|
||||
| IgnoreChildrenEvents
|
||||
| ResizeWidgets
|
||||
@ -113,15 +113,15 @@ data WidgetRequest s
|
||||
| RenderStop WidgetId
|
||||
| ExitApplication Bool
|
||||
| UpdateWindow WindowRequest
|
||||
| UpdateModel (s -> s)
|
||||
| SetWidgetPath WidgetId Path
|
||||
| ResetWidgetPath WidgetId
|
||||
| forall s . Typeable s => UpdateModel (s -> s)
|
||||
| forall i . Typeable i => RaiseEvent i
|
||||
| forall i . Typeable i => SendMessage WidgetId i
|
||||
| forall i . Typeable i => RunTask WidgetId Path (IO i)
|
||||
| forall i . Typeable i => RunProducer WidgetId Path ((i -> IO ()) -> IO ())
|
||||
|
||||
instance Eq (WidgetRequest s) where
|
||||
instance Eq WidgetRequest where
|
||||
IgnoreParentEvents == IgnoreParentEvents = True
|
||||
IgnoreChildrenEvents == IgnoreChildrenEvents = True
|
||||
ResizeWidgets == ResizeWidgets = True
|
||||
@ -148,7 +148,7 @@ instance Eq (WidgetRequest s) where
|
||||
|
||||
data WidgetResult s e = WidgetResult {
|
||||
_wrNode :: WidgetNode s e,
|
||||
_wrRequests :: Seq (WidgetRequest s)
|
||||
_wrRequests :: Seq WidgetRequest
|
||||
}
|
||||
|
||||
-- This instance is lawless (there is not an empty widget): use with caution
|
||||
@ -363,7 +363,7 @@ data Widget s e =
|
||||
-> IO ()
|
||||
}
|
||||
|
||||
instance Show (WidgetRequest s) where
|
||||
instance Show WidgetRequest where
|
||||
show IgnoreParentEvents = "IgnoreParentEvents"
|
||||
show IgnoreChildrenEvents = "IgnoreChildrenEvents"
|
||||
show ResizeWidgets = "ResizeWidgets"
|
||||
@ -384,9 +384,9 @@ instance Show (WidgetRequest s) where
|
||||
show (RenderStop wid) = "RenderStop: " ++ show wid
|
||||
show ExitApplication{} = "ExitApplication"
|
||||
show (UpdateWindow req) = "UpdateWindow: " ++ show req
|
||||
show UpdateModel{} = "UpdateModel"
|
||||
show (SetWidgetPath wid path) = "SetWidgetPath: " ++ show (wid, path)
|
||||
show (ResetWidgetPath wid) = "ResetWidgetPath: " ++ show wid
|
||||
show UpdateModel{} = "UpdateModel"
|
||||
show RaiseEvent{} = "RaiseEvent"
|
||||
show SendMessage{} = "SendMessage"
|
||||
show RunTask{} = "RunTask"
|
||||
|
@ -85,7 +85,7 @@ simpleApp model eventHandler uiBuilder configs = do
|
||||
appWidget = composite_ "app" id uiBuilder eventHandler compCfgs
|
||||
|
||||
runApp
|
||||
:: (MonomerM s m, WidgetEvent e)
|
||||
:: (WidgetModel s, WidgetEvent e, MonomerM s m)
|
||||
=> SDL.Window
|
||||
-> WidgetNode s ep
|
||||
-> AppConfig e
|
||||
@ -163,7 +163,7 @@ runApp window widgetRoot config = do
|
||||
mainLoop window renderer config loopArgs
|
||||
|
||||
mainLoop
|
||||
:: (MonomerM s m, WidgetEvent e)
|
||||
:: (WidgetModel s, WidgetEvent e, MonomerM s m)
|
||||
=> SDL.Window
|
||||
-> Renderer
|
||||
-> AppConfig e
|
||||
@ -370,7 +370,7 @@ saveMonomerCtx wenv root config = do
|
||||
liftIO $ writeFileSerialise file (ctxp, instNode)
|
||||
|
||||
loadMonomerCtx
|
||||
:: MonomerM s m
|
||||
:: (WidgetModel s, MonomerM s m)
|
||||
=> WidgetEnv s ep
|
||||
-> WidgetNode s ep
|
||||
-> AppConfig e
|
||||
|
@ -27,7 +27,7 @@ import Data.Default
|
||||
import Data.List (foldl')
|
||||
import Data.Maybe
|
||||
import Data.Sequence (Seq(..), (|>))
|
||||
import Data.Typeable (Typeable)
|
||||
import Data.Typeable (Typeable, cast)
|
||||
import Foreign (alloca, poke)
|
||||
import Safe (headMay)
|
||||
import SDL (($=))
|
||||
@ -47,7 +47,7 @@ import Monomer.Main.Util
|
||||
import qualified Monomer.Lens as L
|
||||
import Control.Monad.Trans.Maybe
|
||||
|
||||
type HandlerStep s e = (WidgetEnv s e, WidgetNode s e, Seq (WidgetRequest s))
|
||||
type HandlerStep s e = (WidgetEnv s e, WidgetNode s e, Seq WidgetRequest)
|
||||
|
||||
getTargetPath
|
||||
:: WidgetEnv s e
|
||||
@ -87,7 +87,7 @@ getTargetPath wenv pressed overlay target event root = case event of
|
||||
pointEvent point = pressed <|> pathFromPoint point <|> overlay
|
||||
|
||||
handleSystemEvents
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> [SystemEvent]
|
||||
-> WidgetNode s e
|
||||
@ -138,7 +138,7 @@ handleSystemEvents wenv baseEvents widgetRoot = nextStep where
|
||||
nextStep = foldM reduceEvt (wenv, widgetRoot, Seq.empty) newEvents
|
||||
|
||||
handleSystemEvent
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> SystemEvent
|
||||
-> Path
|
||||
@ -176,7 +176,7 @@ handleResourcesInit = do
|
||||
return $ Map.insert icon cursor map
|
||||
|
||||
handleWidgetInit
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> m (HandlerStep s e)
|
||||
@ -194,7 +194,7 @@ handleWidgetInit wenv widgetRoot = do
|
||||
else return step
|
||||
|
||||
handleWidgetRestore
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetInstanceNode
|
||||
-> WidgetNode s e
|
||||
@ -206,7 +206,7 @@ handleWidgetRestore wenv widgetInst widgetRoot = do
|
||||
handleWidgetResult wenv True widgetResult
|
||||
|
||||
handleWidgetDispose
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> m (HandlerStep s e)
|
||||
@ -217,7 +217,7 @@ handleWidgetDispose wenv widgetRoot = do
|
||||
handleWidgetResult wenv False widgetResult
|
||||
|
||||
handleWidgetResult
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> Bool
|
||||
-> WidgetResult s e
|
||||
@ -236,8 +236,8 @@ handleWidgetResult wenv resizeWidgets result = do
|
||||
return step
|
||||
|
||||
handleRequests
|
||||
:: (MonomerM s m)
|
||||
=> Seq (WidgetRequest s)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> Seq WidgetRequest
|
||||
-> HandlerStep s e
|
||||
-> m (HandlerStep s e)
|
||||
handleRequests reqs step = foldM handleRequest step reqs where
|
||||
@ -262,7 +262,9 @@ handleRequests reqs step = foldM handleRequest step reqs where
|
||||
RenderStop wid -> handleRenderStop wid step
|
||||
ExitApplication exit -> handleExitApplication exit step
|
||||
UpdateWindow req -> handleUpdateWindow req step
|
||||
UpdateModel fn -> handleUpdateModel fn step
|
||||
UpdateModel fnt -> case cast fnt of
|
||||
Just fn -> handleUpdateModel fn step
|
||||
_ -> return step
|
||||
SetWidgetPath wid path -> handleSetWidgetPath wid path step
|
||||
ResetWidgetPath wid -> handleResetWidgetPath wid step
|
||||
RaiseEvent msg -> handleRaiseEvent msg step
|
||||
@ -271,7 +273,7 @@ handleRequests reqs step = foldM handleRequest step reqs where
|
||||
RunProducer wid path handler -> handleRunProducer wid path handler step
|
||||
|
||||
handleResizeWidgets
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> HandlerStep s e
|
||||
-> m (HandlerStep s e)
|
||||
handleResizeWidgets previousStep = do
|
||||
@ -289,7 +291,7 @@ handleResizeWidgets previousStep = do
|
||||
return (wenv2, root2, reqs <> reqs2)
|
||||
|
||||
handleMoveFocus
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> Maybe WidgetId
|
||||
-> FocusDirection
|
||||
-> HandlerStep s e
|
||||
@ -318,7 +320,7 @@ handleMoveFocus startFromWid dir (wenv, root, reqs) = do
|
||||
return (wenv1, root1, reqs <> reqs1)
|
||||
|
||||
handleSetFocus
|
||||
:: (MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleSetFocus newFocusWid (wenv, root, reqs) = do
|
||||
newFocus <- getWidgetIdPath newFocusWid
|
||||
oldFocus <- getFocusedPath
|
||||
@ -338,7 +340,7 @@ handleSetFocus newFocusWid (wenv, root, reqs) = do
|
||||
return (wenv, root, reqs)
|
||||
|
||||
handleGetClipboard
|
||||
:: (MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleGetClipboard widgetId (wenv, root, reqs) = do
|
||||
path <- getWidgetIdPath widgetId
|
||||
hasText <- SDL.hasClipboardText
|
||||
@ -350,27 +352,27 @@ handleGetClipboard widgetId (wenv, root, reqs) = do
|
||||
return (wenv2, root2, reqs <> reqs2)
|
||||
|
||||
handleSetClipboard
|
||||
:: (MonomerM s m) => ClipboardData -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => ClipboardData -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleSetClipboard (ClipboardText text) previousStep = do
|
||||
SDL.setClipboardText text
|
||||
return previousStep
|
||||
handleSetClipboard _ previousStep = return previousStep
|
||||
|
||||
handleStartTextInput
|
||||
:: (MonomerM s m) => Rect -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => Rect -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleStartTextInput (Rect x y w h) previousStep = do
|
||||
SDL.startTextInput (SDLT.Rect (c x) (c y) (c w) (c h))
|
||||
return previousStep
|
||||
where
|
||||
c x = fromIntegral $ round x
|
||||
|
||||
handleStopTextInput :: (MonomerM s m) => HandlerStep s e -> m (HandlerStep s e)
|
||||
handleStopTextInput :: (Typeable s, MonomerM s m) => HandlerStep s e -> m (HandlerStep s e)
|
||||
handleStopTextInput previousStep = do
|
||||
SDL.stopTextInput
|
||||
return previousStep
|
||||
|
||||
handleSetOverlay
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> Path
|
||||
-> HandlerStep s e
|
||||
@ -383,7 +385,7 @@ handleSetOverlay widgetId path previousStep = do
|
||||
return previousStep
|
||||
|
||||
handleResetOverlay
|
||||
:: (MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleResetOverlay widgetId step = do
|
||||
let (wenv, root, reqs) = step
|
||||
let mousePos = wenv ^. L.inputStatus . L.mousePos
|
||||
@ -401,7 +403,7 @@ handleResetOverlay widgetId step = do
|
||||
return (wenv2, root2, reqs <> reqs2)
|
||||
|
||||
handleSetCursorIcon
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> CursorIcon
|
||||
-> HandlerStep s e
|
||||
@ -415,7 +417,7 @@ handleSetCursorIcon wid icon previousStep = do
|
||||
return previousStep
|
||||
|
||||
handleResetCursorIcon
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> HandlerStep s e
|
||||
-> m (HandlerStep s e)
|
||||
@ -432,7 +434,7 @@ handleResetCursorIcon wid previousStep = do
|
||||
return previousStep
|
||||
|
||||
handleStartDrag
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> Path
|
||||
-> WidgetDragMsg
|
||||
@ -447,7 +449,7 @@ handleStartDrag widgetId path dragData previousStep = do
|
||||
return previousStep
|
||||
|
||||
handleStopDrag
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> HandlerStep s e
|
||||
-> m (HandlerStep s e)
|
||||
@ -463,7 +465,7 @@ handleStopDrag widgetId previousStep = do
|
||||
else return previousStep
|
||||
|
||||
handleFinalizeDrop
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> HandlerStep s e
|
||||
-> m (HandlerStep s e)
|
||||
handleFinalizeDrop previousStep = do
|
||||
@ -477,13 +479,13 @@ handleFinalizeDrop previousStep = do
|
||||
return $ previousStep & _1 . L.dragStatus .~ Nothing
|
||||
else return previousStep
|
||||
|
||||
handleRenderOnce :: (MonomerM s m) => HandlerStep s e -> m (HandlerStep s e)
|
||||
handleRenderOnce :: (Typeable s, MonomerM s m) => HandlerStep s e -> m (HandlerStep s e)
|
||||
handleRenderOnce previousStep = do
|
||||
L.renderRequested .= True
|
||||
return previousStep
|
||||
|
||||
handleRenderEvery
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> Int
|
||||
-> Maybe Int
|
||||
@ -506,20 +508,20 @@ handleRenderEvery widgetId ms repeat previousStep = do
|
||||
| otherwise = schedule
|
||||
|
||||
handleRenderStop
|
||||
:: (MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleRenderStop widgetId previousStep = do
|
||||
schedule <- use L.renderSchedule
|
||||
L.renderSchedule .= Map.delete widgetId schedule
|
||||
return previousStep
|
||||
|
||||
handleExitApplication
|
||||
:: (MonomerM s m) => Bool -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => Bool -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleExitApplication exit previousStep = do
|
||||
L.exitApplication .= exit
|
||||
return previousStep
|
||||
|
||||
handleUpdateWindow
|
||||
:: (MonomerM s m) => WindowRequest -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WindowRequest -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleUpdateWindow windowRequest previousStep = do
|
||||
window <- use L.window
|
||||
case windowRequest of
|
||||
@ -532,7 +534,7 @@ handleUpdateWindow windowRequest previousStep = do
|
||||
return previousStep
|
||||
|
||||
handleUpdateModel
|
||||
:: (MonomerM s m) => (s -> s) -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => (s -> s) -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleUpdateModel fn (wenv, root, reqs) = do
|
||||
L.mainModel .= _weModel wenv2
|
||||
return (wenv2, root, reqs)
|
||||
@ -540,13 +542,13 @@ handleUpdateModel fn (wenv, root, reqs) = do
|
||||
wenv2 = wenv & L.model %~ fn
|
||||
|
||||
handleSetWidgetPath
|
||||
:: (MonomerM s m) => WidgetId -> Path -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> Path -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleSetWidgetPath wid path step = do
|
||||
setWidgetIdPath wid path
|
||||
return step
|
||||
|
||||
handleResetWidgetPath
|
||||
:: (MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
:: (Typeable s, MonomerM s m) => WidgetId -> HandlerStep s e -> m (HandlerStep s e)
|
||||
handleResetWidgetPath wid step = do
|
||||
delWidgetIdPath wid
|
||||
return step
|
||||
@ -561,7 +563,7 @@ handleRaiseEvent message step = do
|
||||
return step
|
||||
|
||||
handleSendMessage
|
||||
:: forall s e m msg . (MonomerM s m, Typeable msg)
|
||||
:: forall s e m msg . (Typeable s, MonomerM s m, Typeable msg)
|
||||
=> WidgetId
|
||||
-> msg
|
||||
-> HandlerStep s e
|
||||
@ -616,8 +618,8 @@ sendMessage channel message = atomically $ writeTChan channel message
|
||||
|
||||
addFocusReq
|
||||
:: SystemEvent
|
||||
-> Seq (WidgetRequest s)
|
||||
-> Seq (WidgetRequest s)
|
||||
-> Seq WidgetRequest
|
||||
-> Seq WidgetRequest
|
||||
addFocusReq (KeyAction mod code KeyPressed) reqs = newReqs where
|
||||
isTabPressed = isKeyTab code
|
||||
stopProcessing = isJust $ Seq.findIndexL isIgnoreParentEvents reqs
|
||||
@ -638,7 +640,7 @@ preProcessEvents (e:es) = case e of
|
||||
_ -> e : preProcessEvents es
|
||||
|
||||
addRelatedEvents
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> Button
|
||||
-> WidgetNode s e
|
||||
@ -715,7 +717,7 @@ addRelatedEvents wenv mainBtn widgetRoot evt = case evt of
|
||||
_ -> return [(evt, Nothing)]
|
||||
|
||||
addHoverEvents
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> Point
|
||||
@ -737,7 +739,7 @@ addHoverEvents wenv widgetRoot point = do
|
||||
return (target, leave ++ enter)
|
||||
|
||||
findEvtTargetByPoint
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> SystemEvent
|
||||
@ -767,7 +769,7 @@ findNextFocus wenv dir start overlay widgetRoot = fromJust nextFocus where
|
||||
nextFocus = candidateWni <|> fromRootWni <|> Just focusWni
|
||||
|
||||
dropNonParentWidgetId
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetId
|
||||
-> [(WidgetId, a)]
|
||||
-> m [(WidgetId, a)]
|
||||
@ -783,7 +785,7 @@ dropNonParentWidgetId wid (x:xs) = do
|
||||
isParentPath parent child = seqStartsWith parent child && parent /= child
|
||||
|
||||
resetCursorOnNodeLeave
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> SystemEvent
|
||||
-> HandlerStep s e
|
||||
-> m ()
|
||||
|
@ -24,7 +24,7 @@ import Monomer.Main.Types
|
||||
import qualified Monomer.Lens as L
|
||||
|
||||
handleWidgetTasks
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e -> WidgetNode s e -> m (HandlerStep s e)
|
||||
handleWidgetTasks wenv widgetRoot = do
|
||||
tasks <- use widgetTasks
|
||||
@ -34,7 +34,7 @@ handleWidgetTasks wenv widgetRoot = do
|
||||
processTasks wenv widgetRoot tasks
|
||||
|
||||
processTasks
|
||||
:: (MonomerM s m, Traversable t)
|
||||
:: (Typeable s, MonomerM s m, Traversable t)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> t WidgetTask
|
||||
@ -46,7 +46,7 @@ processTasks wenv widgetRoot tasks = nextStep where
|
||||
nextStep = foldM reducer (wenv, widgetRoot, Seq.empty) tasks
|
||||
|
||||
processTask
|
||||
:: (MonomerM s m)
|
||||
:: (Typeable s, MonomerM s m)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> WidgetTask
|
||||
@ -65,7 +65,7 @@ processTask model widgetRoot (WidgetProducer widgetId channel task) = do
|
||||
Nothing -> return (model, widgetRoot, Seq.empty)
|
||||
|
||||
processTaskResult
|
||||
:: (MonomerM s m, Typeable a)
|
||||
:: (Typeable s, MonomerM s m, Typeable a)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> WidgetId
|
||||
@ -78,7 +78,7 @@ processTaskResult wenv widgetRoot widgetId (Right taskResult)
|
||||
= processTaskEvent wenv widgetRoot widgetId taskResult
|
||||
|
||||
processTaskEvent
|
||||
:: (MonomerM s m, Typeable a)
|
||||
:: (Typeable s, MonomerM s m, Typeable a)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> WidgetId
|
||||
|
@ -70,7 +70,7 @@ data EventResponse s e ep
|
||||
= Model s
|
||||
| Event e
|
||||
| Report ep
|
||||
| Request (WidgetRequest s)
|
||||
| Request WidgetRequest
|
||||
| forall i . Typeable i => Message WidgetKey i
|
||||
| Task (TaskHandler e)
|
||||
| Producer (ProducerHandler e)
|
||||
@ -81,7 +81,7 @@ data CompositeCfg s e sp ep = CompositeCfg {
|
||||
_cmcOnDispose :: [e],
|
||||
_cmcOnResize :: [Rect -> e],
|
||||
_cmcOnChange :: [s -> ep],
|
||||
_cmcOnChangeReq :: [WidgetRequest sp],
|
||||
_cmcOnChangeReq :: [WidgetRequest],
|
||||
_cmcOnEnabledChange :: [e],
|
||||
_cmcOnVisibleChange :: [e]
|
||||
}
|
||||
@ -162,7 +162,7 @@ data Composite s e sp ep = Composite {
|
||||
_cmpOnDispose :: [e],
|
||||
_cmpOnResize :: [Rect -> e],
|
||||
_cmpOnChange :: [s -> ep],
|
||||
_cmpOnChangeReq :: [WidgetRequest sp],
|
||||
_cmpOnChangeReq :: [WidgetRequest],
|
||||
_cmpOnEnabledChange :: [e],
|
||||
_cmpOnVisibleChange :: [e]
|
||||
}
|
||||
@ -193,8 +193,8 @@ data ReducedEvents s e sp ep = ReducedEvents {
|
||||
_reModel :: s,
|
||||
_reEvents :: Seq e,
|
||||
_reReports :: Seq ep,
|
||||
_reRequests :: Seq (WidgetRequest s),
|
||||
_reMessages :: Seq (WidgetRequest sp),
|
||||
_reRequests :: Seq WidgetRequest,
|
||||
_reMessages :: Seq WidgetRequest,
|
||||
_reTasks :: Seq (TaskHandler e),
|
||||
_reProducers :: Seq (ProducerHandler e)
|
||||
}
|
||||
@ -709,7 +709,7 @@ reduceEvtResponse
|
||||
=> WidgetNode sp ep
|
||||
-> WidgetKeysMap s e
|
||||
-> EventResponse s e ep
|
||||
-> Maybe (WidgetRequest sp)
|
||||
-> Maybe WidgetRequest
|
||||
reduceEvtResponse widgetComp globalKeys response = case response of
|
||||
Model newModel -> Just $ sendTo widgetComp (CompMsgUpdate $ const newModel)
|
||||
Event event -> Just $ sendTo widgetComp event
|
||||
@ -757,10 +757,10 @@ getModel
|
||||
-> s
|
||||
getModel comp wenv = widgetDataGet (_weModel wenv) (_cmpWidgetData comp)
|
||||
|
||||
toParentReqs :: (Typeable s, Typeable sp) => WidgetId -> Seq (WidgetRequest s) -> Seq (WidgetRequest sp)
|
||||
toParentReqs :: WidgetId -> Seq WidgetRequest -> Seq WidgetRequest
|
||||
toParentReqs wid reqs = fromJust <$> Seq.filter isJust (toParentReq wid <$> reqs)
|
||||
|
||||
toParentReq :: (Typeable s, Typeable sp) => WidgetId -> WidgetRequest s -> Maybe (WidgetRequest sp)
|
||||
toParentReq :: WidgetId -> WidgetRequest -> Maybe WidgetRequest
|
||||
toParentReq _ IgnoreParentEvents = Just IgnoreParentEvents
|
||||
toParentReq _ IgnoreChildrenEvents = Just IgnoreChildrenEvents
|
||||
toParentReq _ ResizeWidgets = Just ResizeWidgets
|
||||
|
@ -29,9 +29,9 @@ data BoxCfg s e = BoxCfg {
|
||||
_boxAlignH :: Maybe AlignH,
|
||||
_boxAlignV :: Maybe AlignV,
|
||||
_boxOnClick :: [e],
|
||||
_boxOnClickReq :: [WidgetRequest s],
|
||||
_boxOnClickReq :: [WidgetRequest],
|
||||
_boxOnClickEmpty :: [e],
|
||||
_boxOnClickEmptyReq :: [WidgetRequest s]
|
||||
_boxOnClickEmptyReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (BoxCfg s e) where
|
||||
|
@ -21,6 +21,7 @@ import Control.Lens (ALens', (&), (^.), (.~), (<>~))
|
||||
import Data.Default
|
||||
import Data.Maybe
|
||||
import Data.Tuple (swap)
|
||||
import Data.Typeable (Typeable)
|
||||
import GHC.Generics
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
@ -35,7 +36,7 @@ data SplitCfg s e = SplitCfg {
|
||||
_spcHandleSize :: Maybe Double,
|
||||
_spcIgnoreChildResize :: Maybe Bool,
|
||||
_spcOnChange :: [Double -> e],
|
||||
_spcOnChangeReq :: [WidgetRequest s]
|
||||
_spcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (SplitCfg s e) where
|
||||
@ -101,26 +102,34 @@ instance WidgetModel SplitState where
|
||||
modelToByteString = serialise
|
||||
byteStringToModel = bsToSerialiseModel
|
||||
|
||||
hsplit :: WidgetEvent e => (WidgetNode s e, WidgetNode s e) -> WidgetNode s e
|
||||
hsplit
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> (WidgetNode s e, WidgetNode s e)
|
||||
-> WidgetNode s e
|
||||
hsplit nodes = hsplit_ def nodes
|
||||
|
||||
hsplit_
|
||||
:: WidgetEvent e
|
||||
=> [SplitCfg s e] -> (WidgetNode s e, WidgetNode s e) -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> [SplitCfg s e]
|
||||
-> (WidgetNode s e, WidgetNode s e)
|
||||
-> WidgetNode s e
|
||||
hsplit_ configs nodes = split_ True nodes configs
|
||||
|
||||
vsplit :: WidgetEvent e => (WidgetNode s e, WidgetNode s e) -> WidgetNode s e
|
||||
vsplit
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> (WidgetNode s e, WidgetNode s e)
|
||||
-> WidgetNode s e
|
||||
vsplit nodes = vsplit_ def nodes
|
||||
|
||||
vsplit_
|
||||
:: WidgetEvent e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> [SplitCfg s e]
|
||||
-> (WidgetNode s e, WidgetNode s e)
|
||||
-> WidgetNode s e
|
||||
vsplit_ configs nodes = split_ False nodes configs
|
||||
|
||||
split_
|
||||
:: WidgetEvent e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> Bool
|
||||
-> (WidgetNode s e, WidgetNode s e)
|
||||
-> [SplitCfg s e]
|
||||
@ -139,7 +148,12 @@ split_ isHorizontal (node1, node2) configs = newNode where
|
||||
newNode = defaultWidgetNode widgetName widget
|
||||
& L.children .~ Seq.fromList [node1, node2]
|
||||
|
||||
makeSplit :: WidgetEvent e => Bool -> SplitCfg s e -> SplitState -> Widget s e
|
||||
makeSplit
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> Bool
|
||||
-> SplitCfg s e
|
||||
-> SplitState
|
||||
-> Widget s e
|
||||
makeSplit isHorizontal config state = widget where
|
||||
widget = createContainer state def {
|
||||
containerUseCustomCursor = True,
|
||||
@ -318,7 +332,7 @@ makeSplit isHorizontal config state = widget where
|
||||
| isHorizontal = (^. L.info . L.sizeReqW)
|
||||
| otherwise = (^. L.info . L.sizeReqH)
|
||||
|
||||
setModelPos :: SplitCfg s e -> Double -> [WidgetRequest s]
|
||||
setModelPos :: Typeable s => SplitCfg s e -> Double -> [WidgetRequest]
|
||||
setModelPos cfg
|
||||
| isJust (_spcHandlePos cfg) = widgetDataSet (fromJust $ _spcHandlePos cfg)
|
||||
| otherwise = const []
|
||||
|
@ -36,11 +36,11 @@ data ButtonCfg s e = ButtonCfg {
|
||||
_btnFactorW :: Maybe Double,
|
||||
_btnFactorH :: Maybe Double,
|
||||
_btnOnFocus :: [e],
|
||||
_btnOnFocusReq :: [WidgetRequest s],
|
||||
_btnOnFocusReq :: [WidgetRequest],
|
||||
_btnOnBlur :: [e],
|
||||
_btnOnBlurReq :: [WidgetRequest s],
|
||||
_btnOnBlurReq :: [WidgetRequest],
|
||||
_btnOnClick :: [e],
|
||||
_btnOnClickReq :: [WidgetRequest s]
|
||||
_btnOnClickReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (ButtonCfg s e) where
|
||||
|
@ -17,6 +17,7 @@ import Control.Monad
|
||||
import Data.Default
|
||||
import Data.Maybe
|
||||
import Data.Text (Text)
|
||||
import Data.Typeable (Typeable)
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
|
||||
@ -33,11 +34,11 @@ data CheckboxCfg s e = CheckboxCfg {
|
||||
_ckcMark :: Maybe CheckboxMark,
|
||||
_ckcWidth :: Maybe Double,
|
||||
_ckcOnFocus :: [e],
|
||||
_ckcOnFocusReq :: [WidgetRequest s],
|
||||
_ckcOnFocusReq :: [WidgetRequest],
|
||||
_ckcOnBlur :: [e],
|
||||
_ckcOnBlurReq :: [WidgetRequest s],
|
||||
_ckcOnBlurReq :: [WidgetRequest],
|
||||
_ckcOnChange :: [Bool -> e],
|
||||
_ckcOnChangeReq :: [WidgetRequest s]
|
||||
_ckcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (CheckboxCfg s e) where
|
||||
@ -107,23 +108,34 @@ checkboxMark mark = def {
|
||||
_ckcMark = Just mark
|
||||
}
|
||||
|
||||
checkbox :: WidgetEvent e => ALens' s Bool -> WidgetNode s e
|
||||
checkbox :: (Typeable s, WidgetEvent e) => ALens' s Bool -> WidgetNode s e
|
||||
checkbox field = checkbox_ field def
|
||||
|
||||
checkbox_
|
||||
:: WidgetEvent e => ALens' s Bool -> [CheckboxCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> ALens' s Bool
|
||||
-> [CheckboxCfg s e]
|
||||
-> WidgetNode s e
|
||||
checkbox_ field config = checkboxD_ (WidgetLens field) config
|
||||
|
||||
checkboxV :: WidgetEvent e => Bool -> (Bool -> e) -> WidgetNode s e
|
||||
checkboxV
|
||||
:: (Typeable s, WidgetEvent e) => Bool -> (Bool -> e) -> WidgetNode s e
|
||||
checkboxV value handler = checkboxV_ value handler def
|
||||
|
||||
checkboxV_
|
||||
:: WidgetEvent e => Bool -> (Bool -> e) -> [CheckboxCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> Bool
|
||||
-> (Bool -> e)
|
||||
-> [CheckboxCfg s e]
|
||||
-> WidgetNode s e
|
||||
checkboxV_ value handler config = checkboxD_ (WidgetValue value) newConfig where
|
||||
newConfig = onChange handler : config
|
||||
|
||||
checkboxD_
|
||||
:: WidgetEvent e => WidgetData s Bool -> [CheckboxCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> WidgetData s Bool
|
||||
-> [CheckboxCfg s e]
|
||||
-> WidgetNode s e
|
||||
checkboxD_ widgetData configs = checkboxNode where
|
||||
config = mconcat configs
|
||||
widget = makeCheckbox widgetData config
|
||||
@ -131,7 +143,7 @@ checkboxD_ widgetData configs = checkboxNode where
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeCheckbox
|
||||
:: WidgetEvent e => WidgetData s Bool -> CheckboxCfg s e -> Widget s e
|
||||
:: (Typeable s, WidgetEvent e) => WidgetData s Bool -> CheckboxCfg s e -> Widget s e
|
||||
makeCheckbox widgetData config = widget where
|
||||
widget = createSingle () def {
|
||||
singleGetBaseStyle = getBaseStyle,
|
||||
|
@ -22,6 +22,7 @@ import Control.Monad
|
||||
import Data.Default
|
||||
import Data.Maybe
|
||||
import Data.Text (Text)
|
||||
import Data.Typeable (Typeable)
|
||||
import GHC.Generics
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
@ -36,11 +37,11 @@ data DialCfg s e a = DialCfg {
|
||||
_dlcWidth :: Maybe Double,
|
||||
_dlcDragRate :: Maybe Rational,
|
||||
_dlcOnFocus :: [e],
|
||||
_dlcOnFocusReq :: [WidgetRequest s],
|
||||
_dlcOnFocusReq :: [WidgetRequest],
|
||||
_dlcOnBlur :: [e],
|
||||
_dlcOnBlurReq :: [WidgetRequest s],
|
||||
_dlcOnBlurReq :: [WidgetRequest],
|
||||
_dlcOnChange :: [a -> e],
|
||||
_dlcOnChangeReq :: [WidgetRequest s]
|
||||
_dlcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (DialCfg s e a) where
|
||||
@ -119,11 +120,11 @@ instance WidgetModel DialState where
|
||||
modelToByteString = serialise
|
||||
byteStringToModel = bsToSerialiseModel
|
||||
|
||||
dial :: (DialValue a, WidgetEvent e) => ALens' s a -> a -> a -> WidgetNode s e
|
||||
dial :: (Typeable s, WidgetEvent e, DialValue a) => ALens' s a -> a -> a -> WidgetNode s e
|
||||
dial field minVal maxVal = dial_ field minVal maxVal def
|
||||
|
||||
dial_
|
||||
:: (DialValue a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DialValue a)
|
||||
=> ALens' s a
|
||||
-> a
|
||||
-> a
|
||||
@ -132,11 +133,11 @@ dial_
|
||||
dial_ field minVal maxVal cfgs = dialD_ (WidgetLens field) minVal maxVal cfgs
|
||||
|
||||
dialV
|
||||
:: (DialValue a, WidgetEvent e) => a -> (a -> e) -> a -> a -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e, DialValue a) => a -> (a -> e) -> a -> a -> WidgetNode s e
|
||||
dialV value handler minVal maxVal = dialV_ value handler minVal maxVal def
|
||||
|
||||
dialV_
|
||||
:: (DialValue a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DialValue a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> a
|
||||
@ -149,7 +150,7 @@ dialV_ value handler minVal maxVal configs = newNode where
|
||||
newNode = dialD_ widgetData minVal maxVal newConfigs
|
||||
|
||||
dialD_
|
||||
:: (DialValue a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DialValue a)
|
||||
=> WidgetData s a
|
||||
-> a
|
||||
-> a
|
||||
@ -163,7 +164,7 @@ dialD_ widgetData minVal maxVal configs = dialNode where
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeDial
|
||||
:: (DialValue a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DialValue a)
|
||||
=> WidgetData s a
|
||||
-> a
|
||||
-> a
|
||||
|
@ -25,7 +25,7 @@ import Data.List (foldl')
|
||||
import Data.Maybe (fromJust, fromMaybe, isJust)
|
||||
import Data.Sequence (Seq(..), (<|), (|>))
|
||||
import Data.Text (Text)
|
||||
import Data.Typeable (cast)
|
||||
import Data.Typeable (Typeable, cast)
|
||||
import GHC.Generics
|
||||
|
||||
import qualified Data.Sequence as Seq
|
||||
@ -44,13 +44,13 @@ data DropdownCfg s e a = DropdownCfg {
|
||||
_ddcItemStyle :: Maybe Style,
|
||||
_ddcItemSelectedStyle :: Maybe Style,
|
||||
_ddcOnFocus :: [e],
|
||||
_ddcOnFocusReq :: [WidgetRequest s],
|
||||
_ddcOnFocusReq :: [WidgetRequest],
|
||||
_ddcOnBlur :: [e],
|
||||
_ddcOnBlurReq :: [WidgetRequest s],
|
||||
_ddcOnBlurReq :: [WidgetRequest],
|
||||
_ddcOnChange :: [a -> e],
|
||||
_ddcOnChangeReq :: [WidgetRequest s],
|
||||
_ddcOnChangeReq :: [WidgetRequest],
|
||||
_ddcOnChangeIdx :: [Int -> a -> e],
|
||||
_ddcOnChangeIdxReq :: [Int -> WidgetRequest s]
|
||||
_ddcOnChangeIdxReq :: [Int -> WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (DropdownCfg s e a) where
|
||||
@ -162,7 +162,7 @@ data DropdownMessage
|
||||
| OnListBlur
|
||||
|
||||
dropdown
|
||||
:: (Traversable t, DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, DropdownItem a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> (a -> WidgetNode s e)
|
||||
@ -172,7 +172,7 @@ dropdown field items makeMain makeRow = newNode where
|
||||
newNode = dropdown_ field items makeMain makeRow def
|
||||
|
||||
dropdown_
|
||||
:: (Traversable t, DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, DropdownItem a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> (a -> WidgetNode s e)
|
||||
@ -184,7 +184,7 @@ dropdown_ field items makeMain makeRow configs = newNode where
|
||||
newNode = dropdownD_ widgetData items makeMain makeRow configs
|
||||
|
||||
dropdownV
|
||||
:: (Traversable t, DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, DropdownItem a)
|
||||
=> a
|
||||
-> (Int -> a -> e)
|
||||
-> t a
|
||||
@ -195,7 +195,7 @@ dropdownV value handler items makeMain makeRow = newNode where
|
||||
newNode = dropdownV_ value handler items makeMain makeRow def
|
||||
|
||||
dropdownV_
|
||||
:: (Traversable t, DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, DropdownItem a)
|
||||
=> a
|
||||
-> (Int -> a -> e)
|
||||
-> t a
|
||||
@ -208,7 +208,7 @@ dropdownV_ value handler items makeMain makeRow configs = newNode where
|
||||
newNode = dropdownD_ (WidgetValue value) items makeMain makeRow newConfigs
|
||||
|
||||
dropdownD_
|
||||
:: (Traversable t, DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, DropdownItem a)
|
||||
=> WidgetData s a
|
||||
-> t a
|
||||
-> (a -> WidgetNode s e)
|
||||
@ -226,7 +226,7 @@ makeNode widget = defaultWidgetNode "dropdown" widget
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeDropdown
|
||||
:: (DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DropdownItem a)
|
||||
=> WidgetData s a
|
||||
-> Seq a
|
||||
-> (a -> WidgetNode s e)
|
||||
@ -477,7 +477,7 @@ makeDropdown widgetData items makeMain makeRow config state = widget where
|
||||
renderAction = widgetRender widget renderer wenv overlayNode
|
||||
|
||||
makeListView
|
||||
:: (DropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, DropdownItem a)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetData s a
|
||||
-> Seq a
|
||||
@ -502,7 +502,7 @@ makeListView wenv value items makeRow config widgetId = listViewNode where
|
||||
& L.info . L.style .~ lvStyle
|
||||
& L.info . L.overlay .~ True
|
||||
|
||||
createMoveFocusReq :: WidgetEnv s e -> WidgetRequest s
|
||||
createMoveFocusReq :: WidgetEnv s e -> WidgetRequest
|
||||
createMoveFocusReq wenv = MoveFocus Nothing direction where
|
||||
direction
|
||||
| wenv ^. L.inputStatus . L.keyMod . L.leftShift = FocusBwd
|
||||
|
@ -54,11 +54,11 @@ data InputFieldCfg s e a = InputFieldCfg {
|
||||
_ifcDragHandler :: Maybe (InputDragHandler a),
|
||||
_ifcDragCursor :: Maybe CursorIcon,
|
||||
_ifcOnFocus :: [e],
|
||||
_ifcOnFocusReq :: [WidgetRequest s],
|
||||
_ifcOnFocusReq :: [WidgetRequest],
|
||||
_ifcOnBlur :: [e],
|
||||
_ifcOnBlurReq :: [WidgetRequest s],
|
||||
_ifcOnBlurReq :: [WidgetRequest],
|
||||
_ifcOnChange :: [a -> e],
|
||||
_ifcOnChangeReq :: [WidgetRequest s]
|
||||
_ifcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
data HistoryStep a = HistoryStep {
|
||||
@ -120,7 +120,7 @@ caretMs :: Int
|
||||
caretMs = 500
|
||||
|
||||
inputField_
|
||||
:: (InputFieldValue a, WidgetEvent e)
|
||||
:: (Typeable s, InputFieldValue a, WidgetEvent e)
|
||||
=> WidgetType
|
||||
-> InputFieldCfg s e a
|
||||
-> WidgetNode s e
|
||||
@ -131,7 +131,7 @@ inputField_ widgetType config = node where
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeInputField
|
||||
:: (InputFieldValue a, WidgetEvent e)
|
||||
:: (Typeable s, InputFieldValue a, WidgetEvent e)
|
||||
=> InputFieldCfg s e a
|
||||
-> InputFieldState a
|
||||
-> Widget s e
|
||||
@ -589,18 +589,18 @@ renderContent renderer state style currText = do
|
||||
delim :: Char -> Bool
|
||||
delim c = c == ' ' || c == '.' || c == ','
|
||||
|
||||
setModelValid :: InputFieldCfg s e a -> Bool -> [WidgetRequest s]
|
||||
setModelValid :: Typeable s => InputFieldCfg s e a -> Bool -> [WidgetRequest]
|
||||
setModelValid config
|
||||
| isJust (_ifcValid config) = widgetDataSet (fromJust $ _ifcValid config)
|
||||
| otherwise = const []
|
||||
|
||||
genReqsEvents
|
||||
:: (Eq a)
|
||||
:: (Typeable s, Eq a)
|
||||
=> InputFieldCfg s e a
|
||||
-> InputFieldState a
|
||||
-> Text
|
||||
-> [WidgetRequest s]
|
||||
-> ([WidgetRequest s], [e])
|
||||
-> [WidgetRequest]
|
||||
-> ([WidgetRequest], [e])
|
||||
genReqsEvents config state newText newReqs = result where
|
||||
resizeOnChange = _ifcResizeOnChange config
|
||||
fromText = _ifcFromText config
|
||||
@ -630,7 +630,7 @@ genReqsEvents config state newText newReqs = result where
|
||||
result = (reqs, events)
|
||||
|
||||
moveHistory
|
||||
:: (InputFieldValue a, WidgetEvent e)
|
||||
:: (Typeable s, InputFieldValue a, WidgetEvent e)
|
||||
=> WidgetEnv s e
|
||||
-> WidgetNode s e
|
||||
-> InputFieldState a
|
||||
|
@ -49,13 +49,13 @@ data ListViewCfg s e a = ListViewCfg {
|
||||
_lvcItemSelectedStyle :: Maybe Style,
|
||||
_lvcMergeRequired :: Maybe (Seq a -> Seq a -> Bool),
|
||||
_lvcOnFocus :: [e],
|
||||
_lvcOnFocusReq :: [WidgetRequest s],
|
||||
_lvcOnFocusReq :: [WidgetRequest],
|
||||
_lvcOnBlur :: [e],
|
||||
_lvcOnBlurReq :: [WidgetRequest s],
|
||||
_lvcOnBlurReq :: [WidgetRequest],
|
||||
_lvcOnChange :: [a -> e],
|
||||
_lvcOnChangeReq :: [WidgetRequest s],
|
||||
_lvcOnChangeReq :: [WidgetRequest],
|
||||
_lvcOnChangeIdx :: [Int -> a -> e],
|
||||
_lvcOnChangeIdxReq :: [Int -> WidgetRequest s]
|
||||
_lvcOnChangeIdxReq :: [Int -> WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (ListViewCfg s e a) where
|
||||
@ -183,7 +183,7 @@ newtype ListViewMessage
|
||||
= OnClickMessage Int
|
||||
|
||||
listView
|
||||
:: (Traversable t, ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, ListItem a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> MakeRow s e a
|
||||
@ -191,7 +191,7 @@ listView
|
||||
listView field items makeRow = listView_ field items makeRow def
|
||||
|
||||
listView_
|
||||
:: (Traversable t, ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, ListItem a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> MakeRow s e a
|
||||
@ -201,7 +201,7 @@ listView_ field items makeRow configs = newNode where
|
||||
newNode = listViewD_ (WidgetLens field) items makeRow configs
|
||||
|
||||
listViewV
|
||||
:: (Traversable t, ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, ListItem a)
|
||||
=> a
|
||||
-> (Int -> a -> e)
|
||||
-> t a
|
||||
@ -211,7 +211,7 @@ listViewV value handler items makeRow = newNode where
|
||||
newNode = listViewV_ value handler items makeRow def
|
||||
|
||||
listViewV_
|
||||
:: (Traversable t, ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, ListItem a)
|
||||
=> a
|
||||
-> (Int -> a -> e)
|
||||
-> t a
|
||||
@ -224,7 +224,7 @@ listViewV_ value handler items makeRow configs = newNode where
|
||||
newNode = listViewD_ widgetData items makeRow newConfigs
|
||||
|
||||
listViewD_
|
||||
:: (Traversable t, ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, ListItem a)
|
||||
=> WidgetData s a
|
||||
-> t a
|
||||
-> MakeRow s e a
|
||||
@ -242,7 +242,7 @@ makeNode widget = scroll_ [scrollStyle L.listViewStyle] childNode where
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeListView
|
||||
:: (ListItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, ListItem a)
|
||||
=> WidgetData s a
|
||||
-> Seq a
|
||||
-> MakeRow s e a
|
||||
@ -442,7 +442,7 @@ updateStyles
|
||||
-> WidgetNode s e
|
||||
-> Int
|
||||
-> Int
|
||||
-> (WidgetNode s e, [WidgetRequest s])
|
||||
-> (WidgetNode s e, [WidgetRequest])
|
||||
updateStyles wenv config state node newSlIdx newHlIdx = (newNode, newReqs) where
|
||||
items = node ^. L.children . ix 0 . L.children
|
||||
slStyle = getSlStyle wenv config
|
||||
|
@ -47,11 +47,11 @@ data NumericFieldCfg s e a = NumericFieldCfg {
|
||||
_nfcResizeOnChange :: Maybe Bool,
|
||||
_nfcSelectOnFocus :: Maybe Bool,
|
||||
_nfcOnFocus :: [e],
|
||||
_nfcOnFocusReq :: [WidgetRequest s],
|
||||
_nfcOnFocusReq :: [WidgetRequest],
|
||||
_nfcOnBlur :: [e],
|
||||
_nfcOnBlurReq :: [WidgetRequest s],
|
||||
_nfcOnBlurReq :: [WidgetRequest],
|
||||
_nfcOnChange :: [a -> e],
|
||||
_nfcOnChangeReq :: [WidgetRequest s]
|
||||
_nfcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (NumericFieldCfg s e a) where
|
||||
@ -157,12 +157,12 @@ instance CmbOnChangeReq (NumericFieldCfg s e a) s where
|
||||
}
|
||||
|
||||
numericField
|
||||
:: (FormattableNumber a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, FormattableNumber a)
|
||||
=> ALens' s a -> WidgetNode s e
|
||||
numericField field = numericField_ field def
|
||||
|
||||
numericField_
|
||||
:: (FormattableNumber a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, FormattableNumber a)
|
||||
=> ALens' s a
|
||||
-> [NumericFieldCfg s e a]
|
||||
-> WidgetNode s e
|
||||
@ -170,12 +170,12 @@ numericField_ field configs = widget where
|
||||
widget = numericFieldD_ (WidgetLens field) configs
|
||||
|
||||
numericFieldV
|
||||
:: (FormattableNumber a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, FormattableNumber a)
|
||||
=> a -> (a -> e) -> WidgetNode s e
|
||||
numericFieldV value handler = numericFieldV_ value handler def
|
||||
|
||||
numericFieldV_
|
||||
:: (FormattableNumber a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, FormattableNumber a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> [NumericFieldCfg s e a]
|
||||
@ -186,7 +186,7 @@ numericFieldV_ value handler configs = newNode where
|
||||
newNode = numericFieldD_ widgetData newConfigs
|
||||
|
||||
numericFieldD_
|
||||
:: (FormattableNumber a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, FormattableNumber a)
|
||||
=> WidgetData s a
|
||||
-> [NumericFieldCfg s e a]
|
||||
-> WidgetNode s e
|
||||
|
@ -15,6 +15,7 @@ import Control.Monad
|
||||
import Data.Default
|
||||
import Data.Maybe
|
||||
import Data.Text (Text)
|
||||
import Data.Typeable (Typeable)
|
||||
|
||||
import Monomer.Widgets.Single
|
||||
|
||||
@ -23,11 +24,11 @@ import qualified Monomer.Lens as L
|
||||
data RadioCfg s e a = RadioCfg {
|
||||
_rdcWidth :: Maybe Double,
|
||||
_rdcOnFocus :: [e],
|
||||
_rdcOnFocusReq :: [WidgetRequest s],
|
||||
_rdcOnFocusReq :: [WidgetRequest],
|
||||
_rdcOnBlur :: [e],
|
||||
_rdcOnBlurReq :: [WidgetRequest s],
|
||||
_rdcOnBlurReq :: [WidgetRequest],
|
||||
_rdcOnChange :: [a -> e],
|
||||
_rdcOnChangeReq :: [WidgetRequest s]
|
||||
_rdcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (RadioCfg s e a) where
|
||||
@ -90,23 +91,23 @@ instance CmbOnChangeReq (RadioCfg s e a) s where
|
||||
_rdcOnChangeReq = [req]
|
||||
}
|
||||
|
||||
radio :: (Eq a, WidgetEvent e) => ALens' s a -> a -> WidgetNode s e
|
||||
radio :: (Typeable s, WidgetEvent e, Eq a) => ALens' s a -> a -> WidgetNode s e
|
||||
radio field option = radio_ field option def
|
||||
|
||||
radio_ :: (Eq a, WidgetEvent e) => ALens' s a -> a -> [RadioCfg s e a] -> WidgetNode s e
|
||||
radio_ :: (Typeable s, WidgetEvent e, Eq a) => ALens' s a -> a -> [RadioCfg s e a] -> WidgetNode s e
|
||||
radio_ field option configs = radioD_ (WidgetLens field) option configs
|
||||
|
||||
radioV :: (Eq a, WidgetEvent e) => a -> (a -> e) -> a -> WidgetNode s e
|
||||
radioV :: (Typeable s, WidgetEvent e, Eq a) => a -> (a -> e) -> a -> WidgetNode s e
|
||||
radioV value handler option = radioV_ value handler option def
|
||||
|
||||
radioV_ :: (Eq a, WidgetEvent e) => a -> (a -> e) -> a -> [RadioCfg s e a] -> WidgetNode s e
|
||||
radioV_ :: (Typeable s, WidgetEvent e, Eq a) => a -> (a -> e) -> a -> [RadioCfg s e a] -> WidgetNode s e
|
||||
radioV_ value handler option configs = newNode where
|
||||
widgetData = WidgetValue value
|
||||
newConfigs = onChange handler : configs
|
||||
newNode = radioD_ widgetData option newConfigs
|
||||
|
||||
radioD_
|
||||
:: (Eq a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Eq a)
|
||||
=> WidgetData s a
|
||||
-> a
|
||||
-> [RadioCfg s e a]
|
||||
@ -117,7 +118,7 @@ radioD_ widgetData option configs = radioNode where
|
||||
radioNode = defaultWidgetNode "radio" widget
|
||||
& L.info . L.focusable .~ True
|
||||
|
||||
makeRadio :: (Eq a, WidgetEvent e) => WidgetData s a -> a -> RadioCfg s e a -> Widget s e
|
||||
makeRadio :: (Typeable s, WidgetEvent e, Eq a) => WidgetData s a -> a -> RadioCfg s e a -> Widget s e
|
||||
makeRadio field option config = widget where
|
||||
widget = createSingle () def {
|
||||
singleGetBaseStyle = getBaseStyle,
|
||||
|
@ -14,6 +14,7 @@ module Monomer.Widgets.Singles.TextDropdown (
|
||||
import Control.Lens (ALens')
|
||||
import Data.Default
|
||||
import Data.Text (Text, pack)
|
||||
import Data.Typeable (Typeable)
|
||||
import TextShow
|
||||
|
||||
import Monomer.Core
|
||||
@ -24,7 +25,7 @@ import Monomer.Widgets.Singles.Dropdown
|
||||
type TextDropdownItem a = DropdownItem a
|
||||
|
||||
textDropdown
|
||||
:: (Traversable t, TextDropdownItem a, TextShow a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, TextShow a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> WidgetNode s e
|
||||
@ -32,7 +33,7 @@ textDropdown field items = newNode where
|
||||
newNode = textDropdown_ field items showt def
|
||||
|
||||
textDropdown_
|
||||
:: (Traversable t, TextDropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> (a -> Text)
|
||||
@ -42,7 +43,7 @@ textDropdown_ field items toText configs = newNode where
|
||||
newNode = textDropdownD_ (WidgetLens field) items toText configs
|
||||
|
||||
textDropdownV
|
||||
:: (Traversable t, TextDropdownItem a, TextShow a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, TextShow a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> t a
|
||||
@ -51,7 +52,7 @@ textDropdownV value handler items = newNode where
|
||||
newNode = textDropdownV_ value handler items showt def
|
||||
|
||||
textDropdownV_
|
||||
:: (Traversable t, TextDropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> t a
|
||||
@ -64,7 +65,7 @@ textDropdownV_ value handler items toText configs = newNode where
|
||||
newNode = textDropdownD_ widgetData items toText newConfigs
|
||||
|
||||
textDropdownD_
|
||||
:: (Traversable t, TextDropdownItem a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a)
|
||||
=> WidgetData s a
|
||||
-> t a
|
||||
-> (a -> Text)
|
||||
@ -76,7 +77,7 @@ textDropdownD_ widgetData items toText configs = newNode where
|
||||
newNode = dropdownD_ widgetData items makeMain makeRow configs
|
||||
|
||||
textDropdownS
|
||||
:: (Traversable t, TextDropdownItem a, Show a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, Show a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> WidgetNode s e
|
||||
@ -84,7 +85,7 @@ textDropdownS field items = newNode where
|
||||
newNode = textDropdownS_ field items def
|
||||
|
||||
textDropdownS_
|
||||
:: (Traversable t, TextDropdownItem a, Show a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, Show a)
|
||||
=> ALens' s a
|
||||
-> t a
|
||||
-> [DropdownCfg s e a]
|
||||
@ -93,7 +94,7 @@ textDropdownS_ field items configs = newNode where
|
||||
newNode = textDropdownDS_ (WidgetLens field) items configs
|
||||
|
||||
textDropdownSV
|
||||
:: (Traversable t, TextDropdownItem a, Show a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, Show a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> t a
|
||||
@ -102,7 +103,7 @@ textDropdownSV value handler items = newNode where
|
||||
newNode = textDropdownSV_ value handler items def
|
||||
|
||||
textDropdownSV_
|
||||
:: (Traversable t, TextDropdownItem a, Show a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, Show a)
|
||||
=> a
|
||||
-> (a -> e)
|
||||
-> t a
|
||||
@ -114,7 +115,7 @@ textDropdownSV_ value handler items configs = newNode where
|
||||
newNode = textDropdownDS_ widgetData items newConfigs
|
||||
|
||||
textDropdownDS_
|
||||
:: (Traversable t, TextDropdownItem a, Show a, WidgetEvent e)
|
||||
:: (Typeable s, WidgetEvent e, Traversable t, TextDropdownItem a, Show a)
|
||||
=> WidgetData s a
|
||||
-> t a
|
||||
-> [DropdownCfg s e a]
|
||||
|
@ -16,6 +16,7 @@ import Control.Lens (ALens')
|
||||
import Data.Default
|
||||
import Data.Maybe
|
||||
import Data.Text (Text)
|
||||
import Data.Typeable (Typeable)
|
||||
|
||||
import qualified Data.Text as T
|
||||
|
||||
@ -31,11 +32,11 @@ data TextFieldCfg s e = TextFieldCfg {
|
||||
_tfcResizeOnChange :: Maybe Bool,
|
||||
_tfcSelectOnFocus :: Maybe Bool,
|
||||
_tfcOnFocus :: [e],
|
||||
_tfcOnFocusReq :: [WidgetRequest s],
|
||||
_tfcOnFocusReq :: [WidgetRequest],
|
||||
_tfcOnBlur :: [e],
|
||||
_tfcOnBlurReq :: [WidgetRequest s],
|
||||
_tfcOnBlurReq :: [WidgetRequest],
|
||||
_tfcOnChange :: [Text -> e],
|
||||
_tfcOnChangeReq :: [WidgetRequest s]
|
||||
_tfcOnChangeReq :: [WidgetRequest]
|
||||
}
|
||||
|
||||
instance Default (TextFieldCfg s e) where
|
||||
@ -122,24 +123,35 @@ instance CmbOnChangeReq (TextFieldCfg s e) s where
|
||||
instance Default Text where
|
||||
def = T.empty
|
||||
|
||||
textField :: WidgetEvent e => ALens' s Text -> WidgetNode s e
|
||||
textField :: (Typeable s, WidgetEvent e) => ALens' s Text -> WidgetNode s e
|
||||
textField field = textField_ field def
|
||||
|
||||
textField_
|
||||
:: WidgetEvent e => ALens' s Text -> [TextFieldCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> ALens' s Text
|
||||
-> [TextFieldCfg s e]
|
||||
-> WidgetNode s e
|
||||
textField_ field configs = textFieldD_ (WidgetLens field) configs
|
||||
|
||||
textFieldV :: WidgetEvent e => Text -> (Text -> e) -> WidgetNode s e
|
||||
textFieldV
|
||||
:: (Typeable s, WidgetEvent e) => Text -> (Text -> e) -> WidgetNode s e
|
||||
textFieldV value handler = textFieldV_ value handler def
|
||||
|
||||
textFieldV_
|
||||
:: WidgetEvent e => Text -> (Text -> e) -> [TextFieldCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> Text
|
||||
-> (Text -> e)
|
||||
-> [TextFieldCfg s e]
|
||||
-> WidgetNode s e
|
||||
textFieldV_ value handler configs = textFieldD_ widgetData newConfig where
|
||||
widgetData = WidgetValue value
|
||||
newConfig = onChange handler : configs
|
||||
|
||||
textFieldD_
|
||||
:: WidgetEvent e => WidgetData s Text -> [TextFieldCfg s e] -> WidgetNode s e
|
||||
:: (Typeable s, WidgetEvent e)
|
||||
=> WidgetData s Text
|
||||
-> [TextFieldCfg s e]
|
||||
-> WidgetNode s e
|
||||
textFieldD_ widgetData configs = inputField where
|
||||
config = mconcat configs
|
||||
fromText = textToText (_tfcMaxLength config)
|
||||
|
@ -100,7 +100,7 @@ isNodeBeforePath path node = result where
|
||||
handleFocusChange
|
||||
:: Typeable e
|
||||
=> (c -> [e])
|
||||
-> (c -> [WidgetRequest s])
|
||||
-> (c -> [WidgetRequest])
|
||||
-> c
|
||||
-> WidgetNode s e
|
||||
-> Maybe (WidgetResult s e)
|
||||
|
@ -97,7 +97,7 @@ widgetDataGet :: s -> WidgetData s a -> a
|
||||
widgetDataGet _ (WidgetValue value) = value
|
||||
widgetDataGet model (WidgetLens lens) = model ^# lens
|
||||
|
||||
widgetDataSet :: WidgetData s a -> a -> [WidgetRequest s]
|
||||
widgetDataSet :: Typeable s => WidgetData s a -> a -> [WidgetRequest]
|
||||
widgetDataSet WidgetValue{} _ = []
|
||||
widgetDataSet (WidgetLens lens) value = [UpdateModel updateFn] where
|
||||
updateFn model = model & lens #~ value
|
||||
@ -109,12 +109,12 @@ resultEvts :: Typeable e => WidgetNode s e -> [e] -> WidgetResult s e
|
||||
resultEvts node events = result where
|
||||
result = WidgetResult node (Seq.fromList $ RaiseEvent <$> events)
|
||||
|
||||
resultReqs :: WidgetNode s e -> [WidgetRequest s] -> WidgetResult s e
|
||||
resultReqs :: WidgetNode s e -> [WidgetRequest] -> WidgetResult s e
|
||||
resultReqs node requests = result where
|
||||
result = WidgetResult node (Seq.fromList requests)
|
||||
|
||||
resultReqsEvts
|
||||
:: Typeable e => WidgetNode s e -> [WidgetRequest s] -> [e] -> WidgetResult s e
|
||||
:: Typeable e => WidgetNode s e -> [WidgetRequest] -> [e] -> WidgetResult s e
|
||||
resultReqsEvts node requests events = result where
|
||||
result = WidgetResult node (Seq.fromList requests <> evtSeq)
|
||||
evtSeq = Seq.fromList $ RaiseEvent <$> events
|
||||
@ -163,7 +163,7 @@ findWidgetIdFromPath :: WidgetEnv s e -> Path -> Maybe WidgetId
|
||||
findWidgetIdFromPath wenv path = mwni ^? _Just . L.widgetId where
|
||||
mwni = wenv ^. L.findByPath $ path
|
||||
|
||||
delayedMessage :: Typeable i => WidgetNode s e -> i -> Int -> WidgetRequest s
|
||||
delayedMessage :: Typeable i => WidgetNode s e -> i -> Int -> WidgetRequest
|
||||
delayedMessage node msg delay = RunTask widgetId path $ do
|
||||
threadDelay (delay * 1000)
|
||||
return msg
|
||||
|
Loading…
Reference in New Issue
Block a user