|
| 1 | +-- TODO rename this file to PopupDialogs or something |
1 | 2 | {-# LANGUAGE RecordWildCards #-} |
2 | 3 | {-# LANGUAGE RecursiveDo #-} |
3 | 4 |
|
@@ -41,7 +42,6 @@ data SaveAsWindowConfig t = SaveAsWindowConfig { |
41 | 42 | _saveAsWindowConfig_saveAs :: Event t FP.FilePath -- ^ Event to launch the popup window to save file as Text is previous file name or empty string |
42 | 43 | } |
43 | 44 |
|
44 | | --- UNTESTED |
45 | 45 | popupSaveAsWindow :: forall t m. (MonadWidget t m, HasPotato t m) |
46 | 46 | => SaveAsWindowConfig t |
47 | 47 | -> m (Event t FP.FilePath, Dynamic t Bool) -- ^ (file to save to, popup state) |
@@ -72,3 +72,31 @@ popupSaveAsWindow SaveAsWindowConfig {..} = do |
72 | 72 | return (cancelEv, saveAsFileEv) |
73 | 73 | fmapfn w = \escEv clickOutsideEv -> fmap (\(cancelEv, outputEv) -> (leftmost [escEv, cancelEv, void outputEv], outputEv)) w |
74 | 74 | popupPane def $ (fmap fmapfn popupSaveAsEv) |
| 75 | + |
| 76 | + |
| 77 | +data SaveBeforeExitConfig t = SaveBeforeExitConfig { |
| 78 | + _saveBeforeExitConfig_exitWithChanges :: Event t () |
| 79 | +} |
| 80 | +data SaveBeforeExitOutput t = SaveBeforeExitOutput { |
| 81 | + _saveBeforeExitOutput_save :: Event t () |
| 82 | + , _saveBeforeExitOutput_saveAs :: Event t () |
| 83 | +} |
| 84 | + |
| 85 | +popupSaveBeforeExit :: forall t m. (MonadWidget t m, HasPotato t m) |
| 86 | + => SaveBeforeExitConfig t |
| 87 | + -> m (SaveBeforeExitOutput t, Dynamic t Bool) |
| 88 | +popupSaveBeforeExit SaveBeforeExitConfig {..} = do |
| 89 | + -- TODO style everything |
| 90 | + let |
| 91 | + popupSaveBeforeExitEv = ffor _saveBeforeExitConfig_exitWithChanges $ \f0 -> mdo |
| 92 | + boxTitle (constant def) "You have unsaved changes. Would you like to save?" $ do |
| 93 | + initManager_ $ col $ mdo |
| 94 | + (cancelEv, saveButtonEv, saveAsButtonEv) <- (tile . fixed) 3 $ row $ do |
| 95 | + cancelEv' <- (tile . stretch) 10 $ textButton def "cancel" |
| 96 | + saveEv' <- (tile . stretch) 10 $ textButton def "save" |
| 97 | + saveAsEv' <- (tile . stretch) 10 $ textButton def "save as" |
| 98 | + return (cancelEv', saveEv', saveAsEv') |
| 99 | + return (cancelEv, align saveButtonEv saveAsButtonEv) |
| 100 | + fmapfn w = \escEv clickOutsideEv -> fmap (\(cancelEv, outputEv) -> (leftmost [escEv, cancelEv, void outputEv], outputEv)) w |
| 101 | + (outputEv, stateDyn) <- popupPane def $ (fmap fmapfn popupSaveBeforeExitEv) |
| 102 | + return (uncurry SaveBeforeExitOutput (fanThese outputEv), stateDyn) |
0 commit comments