Save the opened window in the state.
[matthijs/projects/fpprac.git] / FPPrac.hs
index e56c60458dd3fa75e655bd00c7505969b9dd922f..47b3cad30e0c80c06efa2445adeebc50b9ab7e62 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -98,10 +98,8 @@ testProg = Main
        }
 
 data IState = forall s. IS
-       { {-sFrame    :: Frame    ()
-       , sPanel    :: Panel    ()
-       , buffer    :: MemoryDC ()
-       , -}postponed :: IORef [Request]
+       { window    :: Gtk.Window
+       , postponed :: IORef [Request]
        , usrState  :: IORef s
        , usrProg   :: TinaStep s
        }
@@ -134,20 +132,27 @@ runTina :: TinaProgram -> IO ()
 runTina Main {..} = do
        usrState  <- newIORef initialState
        postponed <- newIORef (GfxText (rgb 0 0 0) (pt 50 50) "foo" : GfxClear :initialRequests)
-       let state = IS { usrProg = eventHandler, .. }
-       runGUI {-(sz windowWidth windowHeight) -}state
+       let state = IS { window = undefined, usrProg = eventHandler, .. }
+       runGUI windowWidth windowHeight state
 
-runGUI :: {-Size ->-} IState -> IO ()
-runGUI s = do
+runGUI :: Int -> Int -> IState -> IO ()
+runGUI w h s = do
        -- Init GTK.
        Gtk.initGUI
        
        -- Create a window, which will make the mainloop terminated when
        -- it is closed.
        window <- Gtk.windowNew
+               
        Gtk.set window [ Gtk.containerBorderWidth := 10
-                      , Gtk.windowTitle := "FP Practicum" ]
+                      , Gtk.windowTitle := "FP Practicum" 
+                      , Gtk.windowDefaultWidth := w
+                      , Gtk.windowDefaultHeight := h
+                      ]
        Gtk.onDestroy window Gtk.mainQuit
+
+       -- Add the window to the state
+       let state = s { window = window }
        
        -- Show the window and start the Gtk mainloop.
        Gtk.widgetShowAll window