content: -- | Condition: The page of the main notebook visible at each moment
  -- is the that corresponds to the selected branch in the category
  -- tree.
  --
  -- Copyright   : (C) Keera Studios Ltd, 2013
  -- License     : BSD3
  -- Maintainer  : support@keera.co.uk
  module Hails.Graphics.UI.Gtk.Simplify.AboutDialog
      (installHandlers)
    where
  
  import Control.Applicative
  import Control.Arrow
  import Control.Monad
  import Control.Monad.Reader (liftIO)
  import Data.ExtraVersion
  import Graphics.UI.Gtk
  import Hails.MVC.View.GtkView
  import Hails.MVC.View
  -- import Graphics.UI.Gtk.GenericView
  import Hails.MVC.GenericCombinedEnvironment
  import Hails.MVC.Model.ReactiveModel (Event)
  import Hails.MVC.Model.ProtectedModel.VersionedModel
  import Hails.MVC.Model.ProtectedModel.NamedModel
  
  installHandlers :: (GtkGUI a, VersionedBasicModel b, NamedBasicModel b,
                      Event c, MenuItemClass d)
                  => CEnv a b c
                  -> ViewElementAccessorIO (GtkView a) d
                  -> ViewElementAccessorIO (GtkView a) AboutDialog
                  -> IO ()
  installHandlers cenv mF dF = void $ do
    let vw = view cenv
    mn <- mF vw
    mn `on` menuItemActivate $ liftIO (onViewAsync vw (condition cenv dF))
  
  condition :: (GtkGUI a, VersionedBasicModel b, NamedBasicModel b, Event c)
                  => CEnv a b c
                  -> ViewElementAccessorIO (GtkView a) AboutDialog
                  -> IO ()
  condition cenv dF = do
    let (vw, pm) = (view &&& model) cenv
    dg <- dF vw
    vn <- versionToString <$> getVersion pm
    pr <- getName pm
    set dg [ aboutDialogVersion := vn ]
    set dg [ aboutDialogProgramName := pr ]
    set dg [ aboutDialogName := pr ]
    _ <- dialogRun dg
    widgetHide dg
  