xournal-types-0.1: src/Data/Xournal/Map.hs
{-# LANGUAGE TypeFamilies #-}
module Data.Xournal.Map where
import Data.IntMap
import Data.Xournal.Simple
import Data.Xournal.Generic
import Data.Xournal.BBox
type TPageMap = GPage Background IntMap TLayerSimple
type TXournalMap = GXournal [] TPageMap
type TPageBBoxMap = GPage Background IntMap TLayerBBox
type TXournalBBoxMap = GXournal IntMap TPageBBoxMap
type TPageBBoxMapBkg b = GPage b IntMap TLayerBBox
type TXournalBBoxMapBkg b = GXournal IntMap (TPageBBoxMapBkg b)
{-
data XournalBBoxMap = XournalBBoxMap { xbm_pages :: M.IntMap PageBBoxMap }
data PageBBoxMap = PageBBoxMap { pbm_dim :: Dimension
, pbm_bkg :: Background
, pbm_layers :: M.IntMap LayerBBox }
-}
{-
instance IPage PageBBoxMap where
type TLayer PageBBoxMap = LayerBBox
pageDim = pbm_dim
pageBkg = pbm_bkg
pageLayers = M.elems . pbm_layers
instance IXournal XournalBBoxMap where
type TPage XournalBBoxMap = PageBBoxMap
xournalPages = M.elems . xbm_pages
mkXournalBBoxMapFromXournalBBox :: XournalBBox -> XournalBBoxMap
mkXournalBBoxMapFromXournalBBox xoj =
XournalBBoxMap { xbm_pages = M.map mkPageBBoxMapFromPageBBox
. M.fromList
$ zip [0..] (xojbbox_pages xoj) }
mkPageBBoxMapFromPageBBox :: PageBBox -> PageBBoxMap
mkPageBBoxMapFromPageBBox page =
PageBBoxMap { pbm_dim = pagebbox_dim page
, pbm_bkg = pagebbox_bkg page
, pbm_layers = M.fromList $ zip [0..] (pagebbox_layers page) }
mkXournalBBoxMapFromXournal :: Xournal -> XournalBBoxMap
mkXournalBBoxMapFromXournal = mkXournalBBoxMapFromXournalBBox . mkXournalBBoxFromXournal
xournalFromXournalBBoxMap :: XournalBBoxMap -> Xournal
xournalFromXournalBBoxMap xoj =
emptyXournal { xoj_pages = map pageFromPageBBoxMap (xournalPages xoj) }
pageFromPageBBoxMap :: PageBBoxMap -> Page
pageFromPageBBoxMap page =
let pbox = PageBBox { pagebbox_dim = pbm_dim page
, pagebbox_bkg = pbm_bkg page
, pagebbox_layers = pageLayers page }
in pageFromPageBBox pbox
-}