packages feed

titan-1.0.2: src/Controller.hs

-- | This contains the main controller. Many operations will be
-- implemented in the Controller.* subsystem. This module simply
-- initialises program.

-- FIXME: A debug version could be included as a separate controller.

module Controller where

-- Uncomment the following line if you need to capture errors
-- import System.Glib.GError
import Graphics.UI.Gtk

-- Internal imports
import CombinedEnvironment
import Controller.Conditions
import Model.Model
import IOBridge

-- | Starts the program by creating the model,
-- the view, starting all the concurrent threads,
-- installing the handlers for all the conditions
-- and starting the view.
startController :: IO ()
startController = do
  -- Uncomment the following line if you need to debug errors
  -- handleGError (\(GError _ _ em) -> putStrLn em) $ do
  
    -- Initialise the visual layer
    initView

    -- Create an empty model
    ioBridge <- mkDefaultIOBridge
    cenv <- createCEnv emptyBM ioBridge

    -- Install the model and view handlers
    installHandlers cenv
  
    -- Notify the system's initialisation
    initialiseSystem $ model cenv

    mainWindow (uiBuilder (view cenv)) >>= widgetShowAll

    -- Run the view
    startView