11{-# LANGUAGE  BlockArguments #-}
22{-# LANGUAGE  DuplicateRecordFields #-}
33{-# LANGUAGE  FlexibleContexts #-}
4+ {-# LANGUAGE  LambdaCase #-}
45{-# LANGUAGE  NamedFieldPuns #-}
56{-# LANGUAGE  OverloadedStrings #-}
67{-# LANGUAGE  PatternSynonyms #-}
@@ -27,6 +28,9 @@ module DearImGui
2728  , getDrawData 
2829  , checkVersion 
2930
31+     --  ** @ImGUIIO@
32+   , iniFilename 
33+ 
3034    --  * Demo, Debug, Information
3135  , showDemoWindow 
3236  , showMetricsWindow 
@@ -126,7 +130,7 @@ import qualified Language.C.Inline.Cpp as Cpp
126130
127131--  StateVar
128132import  Data.StateVar 
129-   ( HasGetter (get ), HasSetter , ($=!)  )
133+   ( HasGetter (get ), HasSetter , StateVar ( .. ),  ($=!)  )
130134
131135--  transformers
132136import  Control.Monad.IO.Class 
@@ -196,6 +200,24 @@ checkVersion = liftIO do
196200  [C. exp
197201
198202
203+ --  |  Path to @.ini@ file. Set to 'Nothing' to disable automatic .ini 
204+ --  loading/saving, if e.g. you want to manually load/save from memory. 
205+ iniFilename  ::  StateVar  (Maybe String 
206+ iniFilename =  StateVar  getter setter
207+   where 
208+     getter =  do 
209+       cStr <-  [C. exp
210+       if  cStr ==  nullPtr then  return  Nothing  else  Just  <$>  peekCString cStr
211+ 
212+     setter =  \ case 
213+       Nothing  -> 
214+         [C. block
215+ 
216+       Just  str ->  do 
217+         strPtr <-  newCString str
218+         [C. block
219+ 
220+ 
199221--  |  Create demo window. Demonstrate most ImGui features. Call this to learn 
200222--  about the library! Try to make it always available in your application! 
201223showDemoWindow  ::  MonadIO  m  =>  m  () 
0 commit comments