packages feed

hxournal-0.6.2: lib/Application/HXournal/Coroutine/Commit.hs

module Application.HXournal.Coroutine.Commit where

import Application.HXournal.Type.XournalState 
import Application.HXournal.Type.Coroutine
import Application.HXournal.Type.Event
import Application.HXournal.Type.Undo 

import Application.HXournal.Coroutine.Draw 
import Application.HXournal.ModelAction.File
import Application.HXournal.ModelAction.Page

import Data.Label
-- import Control.Monad (liftM)
import Control.Monad.Trans
import Application.HXournal.Accessor



commit :: HXournalState -> MainCoroutine () 
commit xstate = do 
  let ui = get gtkUIManager xstate
  liftIO $ toggleSave ui True
  let xojstate = get xournalstate xstate
      undotable = get undoTable xstate 
      undotable' = addToUndo undotable xojstate
      xstate' = set isSaved False 
                . set undoTable undotable'
                $ xstate
  putSt xstate' 

undo :: MainCoroutine () 
undo = do 
    liftIO $ putStrLn "undo is called"
    xstate <- getSt
    let utable = get undoTable xstate
    case getPrevUndo utable of 
      Nothing -> liftIO $ putStrLn "no undo item yet"
      Just (xojstate1,newtable) -> do 
        xojstate <- liftIO $ resetXournalStateBuffers xojstate1 
        let xstate' = set xournalstate xojstate
                      . set undoTable newtable 
                      . updatePageAll xojstate 
                      $ xstate 
        putSt xstate'
        invalidateAll 
      
  
redo :: MainCoroutine () 
redo = do 
    liftIO $ putStrLn "redo is called"
    xstate <- getSt
    let utable = get undoTable xstate
    case getNextUndo utable of 
      Nothing -> liftIO $ putStrLn "no redo item"
      Just (xojstate1,newtable) -> do 
        xojstate <- liftIO $ resetXournalStateBuffers xojstate1         
        let xstate' = set xournalstate xojstate
                      . set undoTable newtable 
                      . updatePageAll xojstate 
                      $ xstate 
        putSt xstate'
        invalidateAll