hxournal-0.5: lib/Application/HXournal/GUI.hs
{-# LANGUAGE ScopedTypeVariables #-}
module Application.HXournal.GUI where
import Application.HXournal.Type.XournalState
import Application.HXournal.Type.Event
import Application.HXournal.Coroutine.Callback
import Application.HXournal.Device
import Application.HXournal.Coroutine
import Application.HXournal.GUI.Menu
import Application.HXournal.ModelAction.File
import Application.HXournal.ModelAction.Window
import Graphics.UI.Gtk hiding (get,set)
import Control.Applicative
import Data.IORef
import Control.Category
import Data.Label
import Prelude hiding ((.),id)
startGUI :: Maybe FilePath -> IO ()
startGUI mfname = do
initGUI
window <- windowNew
devlst <- initDevice
(tref,sref) <- initCoroutine devlst window
st0 <- readIORef sref
st1 <- getFileContent mfname st0
writeIORef sref st1
(winCvsArea, wconf) <- constructFrame
<$> get frameState
<*> get canvasInfoMap $ st1
setTitleFromFileName st1
vbox <- vBoxNew False 0
let st2 = set frameState wconf
. set rootWindow winCvsArea
. set rootContainer (castToBox vbox) $ st1
writeIORef sref st2
ui <- getMenuUI tref sref
let st3 = set gtkUIManager ui st2
writeIORef sref st3
maybeMenubar <- uiManagerGetWidget ui "/ui/menubar"
let menubar = case maybeMenubar of
Just x -> x
Nothing -> error "cannot get menubar from string"
maybeToolbar1 <- uiManagerGetWidget ui "/ui/toolbar1"
let toolbar1 = case maybeToolbar1 of
Just x -> x
Nothing -> error "cannot get toolbar from string"
maybeToolbar2 <- uiManagerGetWidget ui "/ui/toolbar2"
let toolbar2 = case maybeToolbar2 of
Just x -> x
Nothing -> error "cannot get toolbar from string"
containerAdd window vbox
boxPackStart vbox menubar PackNatural 0
boxPackStart vbox toolbar1 PackNatural 0
boxPackStart vbox toolbar2 PackNatural 0
boxPackEnd vbox winCvsArea PackGrow 0
-- cursorDot <- cursorNew BlankCursor
onDestroy window mainQuit
widgetShowAll window
-- initialized
bouncecallback tref sref Initialized
mainGUI
return ()