diff --git a/src/System/Taffybar/Battery.hs b/src/System/Taffybar/Battery.hs index 5335eff..32c7efa 100644 --- a/src/System/Taffybar/Battery.hs +++ b/src/System/Taffybar/Battery.hs @@ -9,6 +9,7 @@ -- more advanced features could be supported if there is interest. module System.Taffybar.Battery ( batteryBarNew, + batteryIconNew, textBatteryNew, defaultBatteryConfig ) where @@ -108,30 +109,22 @@ defaultBatteryConfig = | pct < 0.9 = (0.5, 0.5, 0.5) | otherwise = (0, 1, 0) --- | A fancy graphical battery widget that represents the current --- charge as a colored vertical bar. There is also a textual --- percentage readout next to the bar. +-- | batteryBarNew :: BarConfig -- ^ Configuration options for the bar display - -> Double -- ^ Polling period in seconds -> IO Widget -batteryBarNew battCfg pollSeconds = do +batteryBarNew battCfg = do battCtxt <- batteryContextNew - case battCtxt of - Nothing -> do - let lbl :: Maybe String - lbl = Just "No battery" - labelNew lbl >>= return . toWidget - Just ctxt -> do - -- This is currently pretty inefficient - each poll period it - -- queries the battery twice (once for the label and once for - -- the bar). - -- - -- Converting it to combine the two shouldn't be hard. - b <- hBoxNew False 1 - txt <- textBatteryNew "$percentage$%" pollSeconds - r <- newIORef ctxt - bar <- pollingBarNew battCfg pollSeconds (battPct r) - boxPackStart b bar PackNatural 0 - boxPackStart b txt PackNatural 0 - widgetShowAll b - return (toWidget b) + let noBat = toWidget <$> labelNew (Just "No battery" :: Maybe String) + maybe noBat (batteryIconNew battCfg) battCtxt + +-- | A fancy graphical battery widget that represents the current +-- charge as a colored vertical bar. +batteryIconNew :: BarConfig + -> BatteryContext + -> IO Widget +batteryIconNew cfg ctxt = do + icon <- pollingBarNew cfg pollSeconds . battPct =<< newIORef ctxt + widgetShowAll icon + return icon + where + pollSeconds = 5 diff --git a/src/System/Taffybar/Widgets/PollingBar.hs b/src/System/Taffybar/Widgets/PollingBar.hs index d30adaf..01f161c 100644 --- a/src/System/Taffybar/Widgets/PollingBar.hs +++ b/src/System/Taffybar/Widgets/PollingBar.hs @@ -16,6 +16,7 @@ import Control.Monad ( forever ) import Graphics.UI.Gtk import System.Taffybar.Widgets.VerticalBar +import Debug.Trace pollingBarNew :: BarConfig -> Double -> IO Double -> IO Widget pollingBarNew cfg pollSeconds action = do