From f6cad45dab58fc19f16881dfe694954304342ed9 Mon Sep 17 00:00:00 2001 From: Jason Shipman Date: Tue, 20 Feb 2024 14:20:46 -0500 Subject: [PATCH] Add support for disabled blocks (#196) --- src/DearImGui.hs | 16 ++++++++++++++++ src/DearImGui/Raw.hs | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/DearImGui.hs b/src/DearImGui.hs index a20a471..b03e9c0 100644 --- a/src/DearImGui.hs +++ b/src/DearImGui.hs @@ -279,6 +279,11 @@ module DearImGui , Raw.beginTooltip , Raw.endTooltip + -- ** Disabled blocks + , withDisabled + , Raw.beginDisabled + , Raw.endDisabled + -- * Popups/Modals -- ** Generic @@ -1763,6 +1768,17 @@ setTabItemClosed tabName = liftIO do withTooltip :: MonadUnliftIO m => m a -> m a withTooltip = bracket_ Raw.beginTooltip Raw.endTooltip + +-- | Action wrapper for disabled blocks. +-- +-- See 'Raw.beginDisabled' and 'Raw.endDisabled' for more info. +withDisabled :: (MonadUnliftIO m, HasGetter ref Bool) => ref -> m a -> m a +withDisabled disabledRef action = do + disabled <- get disabledRef + if disabled then bracket_ (Raw.beginDisabled 1) Raw.endDisabled action else action + + + -- | Returns 'True' if the popup is open, and you can start outputting to it. -- -- Wraps @ImGui::BeginPopup()@ diff --git a/src/DearImGui/Raw.hs b/src/DearImGui/Raw.hs index fae94c0..e4c8392 100644 --- a/src/DearImGui/Raw.hs +++ b/src/DearImGui/Raw.hs @@ -65,6 +65,8 @@ module DearImGui.Raw , setNextWindowSizeConstraints , setNextWindowCollapsed , setNextWindowBgAlpha + , beginDisabled + , endDisabled -- ** Child Windows , beginChild @@ -1582,6 +1584,29 @@ setNextWindowBgAlpha alpha = liftIO do [C.exp| void { SetNextWindowBgAlpha($(float alpha)) } |] +-- | Begin a block that may be disabled. This disables all user interactions +-- and dims item visuals. +-- +-- Always call a matching 'endDisabled' for each 'beginDisabled' call. +-- +-- The boolean argument is only intended to facilitate use of boolean +-- expressions. If you can avoid calling @beginDisabled 0@ altogether, +-- that should be preferred. +-- +-- Wraps @ImGui::BeginDisabled()@ +beginDisabled :: (MonadIO m) => CBool -> m () +beginDisabled disabled = liftIO do + [C.exp| void { BeginDisabled($(bool disabled)) } |] + + +-- | Ends a block that may be disabled. +-- +-- Wraps @ImGui::EndDisabled()@ +endDisabled :: (MonadIO m) => m () +endDisabled = liftIO do + [C.exp| void { EndDisabled() } |] + + -- | undo a sameLine or force a new line when in an horizontal-layout context. -- -- Wraps @ImGui::NewLine()@