hxournal-0.6.0: lib/Application/HXournal/ModelAction/Page.hs
module Application.HXournal.ModelAction.Page where
import Application.HXournal.Type.XournalState
import Application.HXournal.Type.Canvas
import Data.Xournal.Simple
import Data.Xournal.Map
import Data.Xournal.Generic
import Graphics.Xournal.Render.Generic
import Graphics.Xournal.Render.BBoxMapPDF
import Control.Category
import Data.Label
import Prelude hiding ((.),id)
import qualified Data.IntMap as M
updatePageAll :: XournalState
-> HXournalState
-> HXournalState
updatePageAll xst xstate = let cmap = get canvasInfoMap xstate
cmap' = fmap (updatePage xst) cmap
in set canvasInfoMap cmap' xstate
getPageFromXojBBoxMapPDF :: Int -> TXournalBBoxMapPDF -> TPageBBoxMapPDF
getPageFromXojBBoxMapPDF pagenum xoj =
case M.lookup pagenum (gpages xoj) of
Nothing -> error "something wrong in updatePage"
Just p -> p
updatePage :: XournalState -> CanvasInfo -> CanvasInfo
updatePage (ViewAppendState xojbbox) cinfo =
let pagenum = get currentPageNum cinfo
pg = getPageFromXojBBoxMapPDF pagenum xojbbox
Dim w h = gdimension pg
in set currentPageNum pagenum
. set (pageDimension.viewInfo) (w,h)
. set currentPage (Left pg)
$ cinfo
updatePage (SelectState txoj) cinfo =
let pagenum = get currentPageNum cinfo
mspage = gselectSelected txoj
pageFromArg = case M.lookup pagenum (gselectAll txoj) of
Nothing -> error "no such page in updatePage"
Just p -> p
(newpage,Dim w h) =
case mspage of
Nothing -> (Left pageFromArg, gdimension pageFromArg)
Just (spagenum,page) ->
if spagenum == pagenum
then (Right page, gdimension page)
else (Left pageFromArg, gdimension pageFromArg)
in set currentPageNum pagenum
. set (pageDimension.viewInfo) (w,h)
. set currentPage newpage
$ cinfo
setPage :: XournalState -> Int -> CanvasInfo -> CanvasInfo
setPage (ViewAppendState xojbbox) pagenum cinfo =
let pg = getPageFromXojBBoxMapPDF pagenum xojbbox
Dim w h = gdimension pg
in set currentPageNum pagenum
. set (viewPortOrigin.viewInfo) (0,0)
. set (pageDimension.viewInfo) (w,h)
. set currentPage (Left pg)
$ cinfo
setPage (SelectState txoj) pagenum cinfo =
let mspage = gselectSelected txoj
-- tx_selectpage
pageFromArg = case M.lookup pagenum (gselectAll txoj) of
Nothing -> error "no such page in setPage"
Just p -> p
(newpage,Dim w h) =
case mspage of
Nothing -> (Left pageFromArg, gdimension pageFromArg)
Just (spagenum,page) ->
if spagenum == pagenum
then (Right page, gdimension page)
else (Left pageFromArg, gdimension pageFromArg)
in set currentPageNum pagenum
. set (viewPortOrigin.viewInfo) (0,0)
. set (pageDimension.viewInfo) (w,h)
. set currentPage newpage
$ cinfo
getPage :: CanvasInfo -> TPageBBoxMapPDF
getPage cinfo = case get currentPage cinfo of
Right tpgs -> tpageBBoxMapPDFFromTTempPageSelectPDF tpgs
-- pageBBoxMapFromTempPageSelect tpgs
Left pg -> pg