-- | Contains basic operations related to the GUI module View ( module View , module Exported ) where -- External libraries import Control.Monad import Graphics.UI.Gtk import Hails.MVC.View.GladeView import Hails.MVC.View.GtkView as Exported -- Internal libraries import View.Objects import View.InitLanguagesCombo -- | Initialises the GUI. This must be called before -- any other GUI operation. initView :: IO () initView = void initGUI -- | Starts a thread for the view. startView :: IO () startView = mainGUI -- | Executes an operation on the view thread synchronously onViewSync :: IO a -> IO a onViewSync = postGUISync -- | Executes an operation on the view thread asynchronously onViewAsync :: IO () -> IO () onViewAsync = postGUIAsync -- | Destroys the view thread destroyView :: IO () destroyView = mainQuit instance GtkGUI View where initialise = createView instance GladeView View where ui = mainWindowBuilder -- | This datatype should hold the elements that we must track in the future -- (for instance, treeview models) data View = View { mainWindowBuilder :: Builder , languageListStore :: LanguageListStore -- , camerasListStore :: CameraListStore -- , statusIcon :: StatusIcon } createView :: IO View createView = do bldr <- loadInterface langs <- initLanguagesCombo bldr -- cams <- initCamerasCombo bldr -- icon <- trayIcon bldr return View { mainWindowBuilder = bldr , languageListStore = langs -- , camerasListStore = cams -- , statusIcon = icon }