INblobs-0.1.1: src/PDDefaults.hs
{-| Module : PDDefaults
Author : Arjan van IJzendoorn
License : do whatever you like with this
Maintainer : afie@cs.uu.nl
Some defaults for the field of the persistent document
record. For example, the default undo update function
changes the text of a menu item to reflect what will be
undo and disables it if there is nothing to be undone.
You might want more than the defaults if you have a
more advanced GUI. Let's say you also have a button
in a toolbar to undo, then you might want to gray out
that button, too, if there is nothing to be undone.
-}
module PDDefaults where
import Graphics.UI.WX
import Graphics.UI.WXCore(wxID_CANCEL)
type Extensions = [(String, [String])]
-- Update the menu item "Undo" to show which
-- action will be undone. If there is nothing
-- to undo the corresponding menu item is disabled
defaultUpdateUndo :: MenuItem () -> Bool -> String -> IO ()
defaultUpdateUndo undoItem enable message =
set undoItem
[ text := "Undo " ++ message ++ "\tCtrl+Z"
, enabled := enable
]
defaultUpdateRedo :: MenuItem () -> Bool -> String -> IO ()
defaultUpdateRedo redoItem enable message =
set redoItem
[ text := "Redo " ++ message ++ "\tCtrl+Y"
, enabled := enable
]
-- Enable the save item only if the document is dirty
defaultUpdateSave :: MenuItem () -> Bool -> IO ()
defaultUpdateSave saveItem enable =
set saveItem [ enabled := enable ]
-- Update the title bar: program name - document name followed by "(modified)" if
-- the document is dirty
defaultUpdateTitlebar :: Frame () -> String -> Maybe String -> Bool -> IO ()
defaultUpdateTitlebar theFrame programName theFileName modified =
let newTitle = programName
++ " - "
++ (case theFileName of Nothing -> "untitled"; Just name -> name)
++ (if modified then " (modified)" else "")
in set theFrame [ text := newTitle ]
-- | defaultSaveChangesDialog shows a dialog with three buttons with corresponding
-- return values: Don't Save -> Just False, Save -> Just True
-- Cancel -> Nothing
defaultSaveChangesDialog :: Frame () -> String -> IO (Maybe Bool)
defaultSaveChangesDialog parentWindow theProgramName =
do{ d <- dialog parentWindow [text := theProgramName]
; p <- panel d []
; msg <- staticText p [text := "Do you want to save the changes?"]
; dontsaveB <- button p [text := "Don't Save"]
; saveB <- button p [text := "Save"]
; cancelB <- button p [text := "Cancel", identity := wxID_CANCEL ]
; set d [layout := margin 10 $ container p $
column 10 [ hfill $ widget msg
, row 50 [ floatBottomLeft $ widget dontsaveB
, floatBottomRight $ row 5 [ widget saveB, widget cancelB]
]
]
]
; set p [ defaultButton := saveB ]
; showModal d $ \stop ->
do set dontsaveB [on command := stop (Just False) ]
set saveB [on command := stop (Just True) ]
set cancelB [on command := stop Nothing ]
}
defaultSaveAsDialog :: Frame () -> Extensions -> Maybe String -> IO (Maybe String)
defaultSaveAsDialog theFrame extensions theFileName =
fileSaveDialog
theFrame
False -- remember current directory
True -- overwrite prompt
"Save file"
extensions
"" -- directory
(case theFileName of Nothing -> ""; Just name -> name) -- initial file name