packages feed

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')