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 
@@ -195,6 +199,23 @@ checkVersion :: MonadIO m => m ()
195199checkVersion =  liftIO do 
196200  [C. exp
197201
202+ --  |  Path to @.ini@ file. Set to 'Nothing' to disable automatic .ini 
203+ --  loading/saving, if e.g. you want to manually load/save from memory. 
204+ iniFilename  ::  StateVar  (Maybe String 
205+ iniFilename =  StateVar  getter setter
206+   where 
207+     getter =  do 
208+       cStr <-  [C. exp
209+       if  cStr ==  nullPtr then  return  Nothing  else  Just  <$>  peekCString cStr
210+ 
211+     setter = 
212+       \ case 
213+         Nothing  -> 
214+           [C. block
215+ 
216+         Just  str ->  do 
217+           strPtr <-  newCString str
218+           [C. block
198219
199220--  |  Create demo window. Demonstrate most ImGui features. Call this to learn 
200221--  about the library! Try to make it always available in your application! 
0 commit comments