1
1
{-# LANGUAGE BlockArguments #-}
2
2
{-# LANGUAGE DuplicateRecordFields #-}
3
3
{-# LANGUAGE FlexibleContexts #-}
4
+ {-# LANGUAGE LambdaCase #-}
4
5
{-# LANGUAGE NamedFieldPuns #-}
5
6
{-# LANGUAGE OverloadedStrings #-}
6
7
{-# LANGUAGE PatternSynonyms #-}
@@ -27,6 +28,9 @@ module DearImGui
27
28
, getDrawData
28
29
, checkVersion
29
30
31
+ -- ** @ImGUIIO@
32
+ , iniFilename
33
+
30
34
-- * Demo, Debug, Information
31
35
, showDemoWindow
32
36
, showMetricsWindow
@@ -126,7 +130,7 @@ import qualified Language.C.Inline.Cpp as Cpp
126
130
127
131
-- StateVar
128
132
import Data.StateVar
129
- ( HasGetter (get ), HasSetter , ($=!) )
133
+ ( HasGetter (get ), HasSetter , StateVar ( .. ), ($=!) )
130
134
131
135
-- transformers
132
136
import Control.Monad.IO.Class
@@ -196,6 +200,24 @@ checkVersion = liftIO do
196
200
[C. exp | void { IMGUI_CHECKVERSION(); } |]
197
201
198
202
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 | const char* { GetIO().IniFilename } |]
210
+ if cStr == nullPtr then return Nothing else Just <$> peekCString cStr
211
+
212
+ setter = \ case
213
+ Nothing ->
214
+ [C. block | void { GetIO().IniFilename = $(char* nullPtr); } |]
215
+
216
+ Just str -> do
217
+ strPtr <- newCString str
218
+ [C. block | void { GetIO().IniFilename = $(char* strPtr); } |]
219
+
220
+
199
221
-- | Create demo window. Demonstrate most ImGui features. Call this to learn
200
222
-- about the library! Try to make it always available in your application!
201
223
showDemoWindow :: MonadIO m => m ()
0 commit comments