-- | This module provides access to the terminal bell.
module HTk.Devices.Bell (

  ringBell,
  bell

) where

import HTk.Containers.Window
import HTk.Containers.Toplevel
import HTk.Kernel.Core


-- -----------------------------------------------------------------------
-- Ring Bell
-- -----------------------------------------------------------------------

-- | Rings the bell for the given window.
ringBell :: Window w => Maybe w -> IO ()
ringBell Nothing = execTclScript [tkRing Nothing]
ringBell (Just win) = execMethod win (\ nm -> [tkRing (Just nm)])

-- | Rings the bell.
bell :: IO ()
bell = ringBell (Nothing :: Maybe Toplevel)


-- -----------------------------------------------------------------------
-- Unparsing of Commands
-- -----------------------------------------------------------------------

tkRing :: Maybe ObjectName -> TclCmd
tkRing Nothing = "bell"
tkRing (Just win) = "bell -displayof " ++ show win
{-# INLINE tkRing #-}