packages feed

keera-posture-0.1.3: src/Controller/Conditions/MenuEnabledClick.hs

-- | Toggles notification status when the user interacts with the status icon
module Controller.Conditions.MenuEnabledClick where

import Control.Monad
import Graphics.UI.Gtk

import CombinedEnvironment
import Model.Model (Status(..))
import Hails.MVC.Model.ProtectedModel.Reactive

-- Detects interaction with the main window and the tray icon
installHandlers :: CEnv -> IO()
installHandlers cenv = void $ do
  menu <- mainMenuEnableItem $ mainWindowBuilder $ view cenv
  menu `on` menuItemActivate $ condition cenv
  icon <- trayIcon $ mainWindowBuilder $ view cenv
  icon `on` statusIconActivate $ condition cenv

-- | Closes the menu and toggles notification status
condition :: CEnv -> IO()
condition cenv = onViewAsync $ do
  -- Close the menu if the option is selected
  menu <- mainMenu $ mainWindowBuilder $ view cenv
  menuPopdown menu

  let pm = model cenv

  status <- getStatus pm
  -- notifyEnabled <- getter notificationEnabledField pm

  case status of 
   StatusDisabled     -> do setStatus pm StatusIdle
                            setter notificationEnabledField pm True
   StatusCallibrating -> return ()
   _                  -> do setStatus pm StatusDisabled
                            setter notificationEnabledField pm False