packages feed

taffybar-2.1.0: src/System/Taffybar/Widget/Volume.hs

module System.Taffybar.Widget.Volume
  ( volumeTextNew
  , volumeControlNew
  ) where

import Control.Monad.IO.Class
import Graphics.UI.Gtk
import System.Taffybar.Information.Volume
import System.Taffybar.Widget.Generic.PollingLabel

-- | Creates a new text volume meter
volumeTextNew :: MonadIO m => String -> String -> Double -> m Widget
volumeTextNew mixer control pollSeconds = liftIO $ do
  l <- pollingLabelNew "" pollSeconds . fmap show $ getVolume mixer control
  widgetShowAll l
  return l

-- | Creates a new volume meter widget
volumeControlNew :: String -> String -> IO Widget
volumeControlNew mixer control = do
  b <- volumeButtonNew
  _ <- on b scaleButtonValueChanged $ \v ->
    setVolume mixer control (v * 100)
  let w = toWidget b
  widgetShowAll w
  return w