ige-0.1.0.0: src/IGE/UI.hs
module IGE.UI where
import Protolude hiding (on)
import Graphics.UI.Gtk hiding (get)
import Data.Graph.Inductive.Graph
import Data.Graph.Inductive.PatriciaTree
import Control.Concurrent.STM
import Control.Concurrent.STM.TBMChan
import IGE.Types
import IGE.Render
import IGE.Layout
import IGE.Control
runMainWindow :: (RenderNode n, RenderEdge e) => Gr n e -> RM -> KeyBinding n e () -> IO ()
runMainWindow initGr initRM keybinding = do
void initGUI
w <- windowNew
da <- drawingAreaNew
w `containerAdd` da
editorState <- newTVarIO $ EditorState initGr initRM 3 "" [] (layoutGr initGr)
keyChan <- newTBMChanIO 16
_ <- forkIO $ runKeyBinding keyChan editorState w keybinding
void $ (w `on` deleteEvent) $ liftIO mainQuit >> return True
void $ (da `on` exposeEvent) $ liftIO $ do
dw <- widgetGetDrawWindow da
es <- readTVarIO editorState
dims <- drawableGetSize dw
renderWithDrawable dw $ renderEditorState es dims
return True
void $ (da `on` keyPressEvent) $ do
kv <- eventKeyVal
liftIO $ atomically $ writeTBMChan keyChan kv
return True
da `widgetSetCanFocus` True
da `widgetAddEvents` [KeyPressMask]
widgetShowAll w
mainGUI