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
@@ -195,6 +199,23 @@ checkVersion :: MonadIO m => m ()
195
199
checkVersion = liftIO do
196
200
[C. exp | void { IMGUI_CHECKVERSION(); } |]
197
201
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 | const char* { GetIO().IniFilename } |]
209
+ if cStr == nullPtr then return Nothing else Just <$> peekCString cStr
210
+
211
+ setter =
212
+ \ 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); } |]
198
219
199
220
-- | Create demo window. Demonstrate most ImGui features. Call this to learn
200
221
-- about the library! Try to make it always available in your application!
0 commit comments