hxournal-0.6.2: 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.Type.Canvas
import Application.HXournal.Type.Undo
import qualified Data.IntMap as M
import Application.HXournal.Coroutine.Callback
import Application.HXournal.Config
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 Control.Monad.Trans
import Data.IORef
import Data.Maybe
import Control.Category
import Data.Label
import Prelude hiding ((.),id)
startGUI :: Maybe FilePath -> IO ()
startGUI mfname = do
initGUI
window <- windowNew
cfg <- loadConfigFile
devlst <- initDevice cfg
(tref,sref) <- initCoroutine devlst window
st0 <- readIORef sref
maxundo <- getMaxUndo cfg >>=
\mmax -> maybe (return 50) (return . id) mmax
-- ncconf <- getNetworkInfo cfg
let st1 = -- set networkClipboardInfo ncconf
set undoTable (emptyUndo maxundo)
$ st0
-- let st1 = set gtkUIManager ui st0
st2 <- getFileContent mfname st1
let ui = get gtkUIManager st2
writeIORef sref st2
(winCvsArea, wconf) <- constructFrame
<$> get frameState
<*> get canvasInfoMap $ st2
setTitleFromFileName st2
vbox <- vBoxNew False 0
let st3 = set frameState wconf
. set rootWindow winCvsArea
. set rootContainer (castToBox vbox) $ st2
writeIORef sref st3
xinputbool <- getXInputConfig cfg
agr <- uiManagerGetActionGroups ui >>= \x ->
case x of
[] -> error "No action group? "
y:_ -> return y
uxinputa <- actionGroupGetAction agr "UXINPUTA" >>= \(Just x) ->
return (castToToggleAction x)
toggleActionSetActive uxinputa xinputbool
let canvases = map (get drawArea) . M.elems . get canvasInfoMap $ st3
if xinputbool
then mapM_ (flip widgetSetExtensionEvents [ExtensionEventsAll]) canvases
else mapM_ (flip widgetSetExtensionEvents [ExtensionEventsNone]) canvases
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
window `on` deleteEvent $ do
liftIO $ bouncecallback tref sref (Menu MenuQuit)
return True
widgetShowAll window
-- initialized
bouncecallback tref sref Initialized
mainGUI
return ()