content: -- | Keep the four notification mechanisms in sync between the model and the view
  module Controller.Conditions.NotificationMenu where
  
  import Data.ReactiveValue
  import Graphics.UI.Gtk.Reactive
  import Hails.MVC.Model.ProtectedModel.Reactive
  
  import CombinedEnvironment
  
  -- | Establishes the synchronization conditions between model and view for
  -- selecting which notification methods are enabled.
  installHandlers :: CEnv -> IO()
  installHandlers cenv = do
  
    -- Get elements from the view
    notifyIcon <- fmap checkMenuItemActiveReactive $ mainMenuNotifyIconItem $ mainWindowBuilder $ view cenv
    -- notifyBubble  <- cenvReactiveCheckMenuItem mainMenuNotifyBubbleItem  cenv
    notifySound   <- fmap checkMenuItemActiveReactive $ mainMenuNotifySoundItem   $ mainWindowBuilder $ view cenv
    notifyOverlay <- fmap checkMenuItemActiveReactive $ mainMenuNotifyOverlayItem $ mainWindowBuilder $ view cenv
  
    -- Install bidirectional conditions
    notifyIcon    =:= mkFieldAccessor notificationIconEnabledField (model cenv)
    -- notifyBubble  =:= notificationBubbleEnabledField (model cenv)
    notifySound   =:= mkFieldAccessor notificationSoundEnabledField (model cenv)
    notifyOverlay =:= mkFieldAccessor notificationOverlayEnabledField (model cenv)
  