module Network.OnRmt.UI
(OnRmtUI(..), runUI, stateEventHandler) where
import Concurrent.Worker (DispBlk, StateCmd(..), WorkMsg(..)
, WorkItems(..), WorkId, WorkState)
import qualified Data.Text as T
class Show b => OnRmtUI a b | b -> a where
startUI :: a -> (WorkMsg -> IO ()) -> b -> IO b
setUIItems :: b -> [WorkItems] -> Maybe (WorkId -> WorkState -> T.Text) -> IO b
newOutput :: b -> DispBlk -> IO b
addOutput :: b -> DispBlk -> IO b
setProgress :: b -> T.Text -> Int -> IO b
addLogInfo :: b -> T.Text -> IO b
setItemState :: b -> WorkState -> WorkId -> IO b
endInfo :: b -> IO b
runUI :: (OnRmtUI ui uistate, Show uistate)
=> ui -> (WorkMsg -> IO ()) -> uistate -> IO uistate
runUI = startUI
stateEventHandler :: OnRmtUI cfg ui => ui -> StateCmd -> IO ui
stateEventHandler ui (NewItems ns idfun) = setUIItems ui ns idfun
stateEventHandler ui (DisplaySet dsp) = newOutput ui dsp
stateEventHandler ui (DisplayAdd dsp) = addOutput ui dsp
stateEventHandler ui (SetProgress t n) = setProgress ui t n
stateEventHandler ui (LogInfo i) = addLogInfo ui i
stateEventHandler ui (ChgState s i) = setItemState ui s i
stateEventHandler ui ResetUI = putStr "No handling for ResetUI" >> return ui
stateEventHandler ui EndOfInformation = endInfo ui