packages feed

keera-posture-0.2.1: src/Controller/Conditions/Postcalibration.hs

-- | Manages the interaction with one of the calibration steps (calibration
-- results).
module Controller.Conditions.Postcalibration where

import Data.ReactiveValue
import Graphics.UI.Gtk.Reactive

import CombinedEnvironment
import Controller.Conditions.Calibration

-- | Detects when the dialog is closed, or when its buttons are pressed.
installHandlers :: CEnv -> IO()
installHandlers cenv = do
  let ui = mainWindowBuilder $ view cenv
 
  calWin <- calibrationWindow ui
  btnCls <- calibrationCloseBtn ui
  btnCal <- calibrationRecalibrateBtn ui

  let mustClose = lMerge (windowCloseReactive calWin) 
                         (buttonActivateField btnCls)

      mustReallyClose = mustClose `governingR` btnClsSensitive

      btnClsSensitive = widgetSensitiveReactive btnCls
      btnCalSensitive = widgetSensitiveReactive btnCal

  mustReallyClose            =:> widgetVisibleReactive calWin
  buttonActivateField btnCal =:> (constW False btnClsSensitive)
  buttonActivateField btnCal =:> (constW False btnCalSensitive)
  buttonActivateField btnCal =:> wrapDo_ (calibrate cenv)
    

  -- import Control.Monad
  -- import Control.Monad.Trans
  -- import Graphics.UI.Gtk
  -- calWin `on` deleteEvent $ liftIO (handleClose cenv)
 
  -- btnCls <- calibrationCloseBtn ui
  -- btnCls `on` buttonActivated $ onViewAsync (void (handleClose cenv))
  -- btnCal `on` buttonActivated $ handleRecalibrate cenv
 

-- -- Close the calibration window when appropriate
-- handleClose :: CEnv -> IO Bool
-- handleClose cenv = do
--   -- calCloseSensitive = widgetSensitive btnCls
--   
--   let ui = mainWindowBuilder $ view cenv
--   btn       <- calibrationCloseBtn ui
--   isEnabled <- get btn widgetSensitive 
--   calWin    <- calibrationWindow ui
--   if isEnabled then widgetHide calWin else widgetShowAll calWin
--   return isEnabled

-- Request a recalibration when instructed by the user
-- handleRecalibrate :: CEnv -> IO ()
-- handleRecalibrate cenv = onViewAsync $ do
--   let ui = mainWindowBuilder $ view cenv
--   btn1 <- calibrationCloseBtn ui
--   btn2 <- calibrationRecalibrateBtn ui
-- 
--   widgetSetSensitive btn1 False
--   widgetSetSensitive btn2 False
-- 
--   calibrate cenv