packages feed

4Blocks-0.2: Interface/MainWindow.hs

module Interface.MainWindow ( mainWindow )

where

import Interface.KeyEvents
import Interface.WindowUpdate
import Interface.OnePlayerModeWindow
import Interface.CommandKeys

import Rendering.Engine

import Core.Commands
import Core.Game

import Control.Monad
import Control.Concurrent
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.Events
import Data.IORef;

mainWindow :: IO ()
mainWindow
  = do initGUI
       window <- windowNew
       set window [
                    windowTitle := "4Blocks in Haskell!",
                    windowDefaultWidth := 500, 
                    windowDefaultHeight := 500                    
                  ]
       frame <- frameNew
       containerAdd window frame
       canvas <- drawingAreaNew
       containerAdd frame canvas
       widgetModifyBg canvas StateNormal (Color 0 0 0)
       widgetShowAll window 
      
       drawin <- widgetGetDrawWindow canvas
       onExpose canvas (\x -> do renderWithDrawable drawin $ renderIntroScreen
                                 return (eventSent x))
       
       -- Boolean value variable used to check if mode key has already been pressed
       modeSelectedIORef <- newIORef (False)
        
       setupCommandKeyMode "1" window canvas modeSelectedIORef onePlayerMode
       
       onKeyPress window $ \Key { eventKeyName = key } ->
         when (key == "Escape") mainQuit >> return False

       -- redraw window periodically
       timeoutAdd (widgetQueueDraw window >> return True) 20
       
       onDestroy window mainQuit
       mainGUI