{-# LANGUAGE TypeOperators, Arrows #-} module JuicyBar.Visualizer.Colorer where import Data.Record import Data.Record.Signal import Control.Arrow import Control.Applicative import qualified Graphics.UI.Gtk as Gtk import Graphics.UI.Grapefruit.GTK import JuicyBar.GTKDock import JuicyBar.Timer import Graphics.UI.Grapefruit.Circuit import Graphics.UI.Grapefruit.Item as Item import FRP.Grapefruit.Circuit import FRP.Grapefruit.Signal as Signal import FRP.Grapefruit.Signal.Segmented as SSignal import FRP.Grapefruit.Signal.Discrete as DSignal import FRP.Grapefruit.Setup colorize :: Samplee sig => (a -> String) -> (a -> Gtk.Color) -> Int -> UICircuit Widget GTK era (sig era a) () colorize printer colorizer rate = proc inputSignal -> do timer <- fromCircuit makeTimer -< rate let sSignal = construct () timer #> inputSignal stringSignal = fmap printer sSignal colorSignal = fmap colorizer sSignal X <- just label -< X :& Text := stringSignal :& Color := colorSignal :& Tooltip := stringSignal returnA -< ()