module Xmobar.Plugins.Monitors.Common.Types ( Monitor
, MConfig (..)
, Opts (..)
, Selector
, setConfigValue
, getConfigValue
, mkMConfig
, io
) where
import Control.Monad.Reader (ReaderT, ask, liftIO)
import Data.IORef (IORef, modifyIORef, newIORef, readIORef)
type Monitor a = ReaderT MConfig IO a
io :: IO a -> Monitor a
io :: IO a -> Monitor a
io = IO a -> Monitor a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
data MConfig =
MC { MConfig -> IORef (Maybe String)
normalColor :: IORef (Maybe String)
, MConfig -> IORef Int
low :: IORef Int
, MConfig -> IORef (Maybe String)
lowColor :: IORef (Maybe String)
, MConfig -> IORef Int
high :: IORef Int
, MConfig -> IORef (Maybe String)
highColor :: IORef (Maybe String)
, MConfig -> IORef String
template :: IORef String
, MConfig -> IORef [String]
export :: IORef [String]
, MConfig -> IORef Int
ppad :: IORef Int
, MConfig -> IORef Int
decDigits :: IORef Int
, MConfig -> IORef Int
minWidth :: IORef Int
, MConfig -> IORef Int
maxWidth :: IORef Int
, MConfig -> IORef String
maxWidthEllipsis :: IORef String
, MConfig -> IORef String
padChars :: IORef String
, MConfig -> IORef Bool
padRight :: IORef Bool
, MConfig -> IORef String
barBack :: IORef String
, MConfig -> IORef String
barFore :: IORef String
, MConfig -> IORef Int
barWidth :: IORef Int
, MConfig -> IORef Bool
useSuffix :: IORef Bool
, MConfig -> IORef String
naString :: IORef String
, MConfig -> IORef Int
maxTotalWidth :: IORef Int
, MConfig -> IORef String
maxTotalWidthEllipsis :: IORef String
}
type Selector a = MConfig -> IORef a
sel :: Selector a -> Monitor a
sel :: Selector a -> Monitor a
sel Selector a
s =
do MConfig
hs <- ReaderT MConfig IO MConfig
forall r (m :: * -> *). MonadReader r m => m r
ask
IO a -> Monitor a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> Monitor a) -> IO a -> Monitor a
forall a b. (a -> b) -> a -> b
$ IORef a -> IO a
forall a. IORef a -> IO a
readIORef (Selector a
s MConfig
hs)
mods :: Selector a -> (a -> a) -> Monitor ()
mods :: Selector a -> (a -> a) -> Monitor ()
mods Selector a
s a -> a
m =
do MConfig
v <- ReaderT MConfig IO MConfig
forall r (m :: * -> *). MonadReader r m => m r
ask
IO () -> Monitor ()
forall a. IO a -> Monitor a
io (IO () -> Monitor ()) -> IO () -> Monitor ()
forall a b. (a -> b) -> a -> b
$ IORef a -> (a -> a) -> IO ()
forall a. IORef a -> (a -> a) -> IO ()
modifyIORef (Selector a
s MConfig
v) a -> a
m
setConfigValue :: a -> Selector a -> Monitor ()
setConfigValue :: a -> Selector a -> Monitor ()
setConfigValue a
v Selector a
s =
Selector a -> (a -> a) -> Monitor ()
forall a. Selector a -> (a -> a) -> Monitor ()
mods Selector a
s (a -> a -> a
forall a b. a -> b -> a
const a
v)
getConfigValue :: Selector a -> Monitor a
getConfigValue :: Selector a -> Monitor a
getConfigValue = Selector a -> Monitor a
forall a. Selector a -> Monitor a
sel
mkMConfig :: String
-> [String]
-> IO MConfig
mkMConfig :: String -> [String] -> IO MConfig
mkMConfig String
tmpl [String]
exprts =
do IORef (Maybe String)
lc <- Maybe String -> IO (IORef (Maybe String))
forall a. a -> IO (IORef a)
newIORef Maybe String
forall a. Maybe a
Nothing
IORef Int
l <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
33
IORef (Maybe String)
nc <- Maybe String -> IO (IORef (Maybe String))
forall a. a -> IO (IORef a)
newIORef Maybe String
forall a. Maybe a
Nothing
IORef Int
h <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
66
IORef (Maybe String)
hc <- Maybe String -> IO (IORef (Maybe String))
forall a. a -> IO (IORef a)
newIORef Maybe String
forall a. Maybe a
Nothing
IORef String
t <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
tmpl
IORef [String]
e <- [String] -> IO (IORef [String])
forall a. a -> IO (IORef a)
newIORef [String]
exprts
IORef Int
p <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
0
IORef Int
d <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
0
IORef Int
mn <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
0
IORef Int
mx <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
0
IORef String
mel <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
""
IORef String
pc <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
" "
IORef Bool
pr <- Bool -> IO (IORef Bool)
forall a. a -> IO (IORef a)
newIORef Bool
False
IORef String
bb <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
":"
IORef String
bf <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
"#"
IORef Int
bw <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
10
IORef Bool
up <- Bool -> IO (IORef Bool)
forall a. a -> IO (IORef a)
newIORef Bool
False
IORef String
na <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
"N/A"
IORef Int
mt <- Int -> IO (IORef Int)
forall a. a -> IO (IORef a)
newIORef Int
0
IORef String
mtel <- String -> IO (IORef String)
forall a. a -> IO (IORef a)
newIORef String
""
MConfig -> IO MConfig
forall (m :: * -> *) a. Monad m => a -> m a
return (MConfig -> IO MConfig) -> MConfig -> IO MConfig
forall a b. (a -> b) -> a -> b
$ IORef (Maybe String)
-> IORef Int
-> IORef (Maybe String)
-> IORef Int
-> IORef (Maybe String)
-> IORef String
-> IORef [String]
-> IORef Int
-> IORef Int
-> IORef Int
-> IORef Int
-> IORef String
-> IORef String
-> IORef Bool
-> IORef String
-> IORef String
-> IORef Int
-> IORef Bool
-> IORef String
-> IORef Int
-> IORef String
-> MConfig
MC IORef (Maybe String)
nc IORef Int
l IORef (Maybe String)
lc IORef Int
h IORef (Maybe String)
hc IORef String
t IORef [String]
e IORef Int
p IORef Int
d IORef Int
mn IORef Int
mx IORef String
mel IORef String
pc IORef Bool
pr IORef String
bb IORef String
bf IORef Int
bw IORef Bool
up IORef String
na IORef Int
mt IORef String
mtel
data Opts = HighColor String
| NormalColor String
| LowColor String
| Low String
| High String
| Template String
| PercentPad String
| DecDigits String
| MinWidth String
| MaxWidth String
| Width String
| WidthEllipsis String
| PadChars String
| PadAlign String
| BarBack String
| BarFore String
| BarWidth String
| UseSuffix String
| NAString String
| MaxTotalWidth String
| MaxTotalWidthEllipsis String