hxournal-0.5: lib/Application/HXournal/ModelAction/File.hs
module Application.HXournal.ModelAction.File where
import Application.HXournal.Type.XournalState
import Application.HXournal.Type.Canvas
import Application.HXournal.ModelAction.Page
import Graphics.Xournal.Type.Map
import Text.Xournal.Type
import qualified Text.Xournal.Parse as P
import qualified Data.IntMap as M
import Control.Category
import Data.Label
import Prelude hiding ((.),id)
-- | get file content from xournal file and update xournal state
getFileContent :: Maybe FilePath
-> HXournalState
-> IO HXournalState
getFileContent (Just fname) xstate = do
xojcontent <- P.read_xournal fname
let currcid = get currentCanvas xstate
cmap = get canvasInfoMap xstate
let xojWbbox = mkXournalBBoxMapFromXournal xojcontent
let Dim width height = pageDim . (!! 0) . xournalPages $ xojcontent
startingxojstate = ViewAppendState xojWbbox
cids = M.keys cmap
update x _cinfo =
let changefunc c =
setPage startingxojstate 0
. set viewInfo (ViewInfo OnePage Original (0,0) (width,height))
. set currentPageNum 0
$ c
in M.adjust changefunc x cmap
cmap' = foldr update cmap cids
let newxstate = set xournalstate startingxojstate
. set currFileName (Just fname)
. set canvasInfoMap cmap'
. set currentCanvas currcid
$ xstate
return newxstate
getFileContent Nothing xstate = do
let newxoj = mkXournalBBoxMapFromXournal defaultXournal
newxojstate = ViewAppendState newxoj
xstate' = set currFileName Nothing
. set xournalstate newxojstate
$ xstate
cmap = get canvasInfoMap xstate'
let Dim w h = pageDim . (!! 0) . xournalPages $ defaultXournal
ciupdt = setPage newxojstate 0
. set viewInfo (ViewInfo OnePage Original (0,0) (w,h))
. set currentPageNum 0
cmap' = M.map ciupdt cmap
return (set canvasInfoMap cmap' xstate')