MultiSelect: added courtesy ImGuiMultiSelectFlags_NavWrapX flag so we can demo this until a nav api is designed.
This commit is contained in:
@@ -2781,6 +2781,7 @@ enum ImGuiMultiSelectFlags_
|
|||||||
ImGuiMultiSelectFlags_SelectOnClick = 1 << 13, // Apply selection on mouse down when clicking on unselected item. (Default)
|
ImGuiMultiSelectFlags_SelectOnClick = 1 << 13, // Apply selection on mouse down when clicking on unselected item. (Default)
|
||||||
ImGuiMultiSelectFlags_SelectOnClickRelease = 1 << 14, // Apply selection on mouse release when clicking an unselected item. Allow dragging an unselected item without altering selection.
|
ImGuiMultiSelectFlags_SelectOnClickRelease = 1 << 14, // Apply selection on mouse release when clicking an unselected item. Allow dragging an unselected item without altering selection.
|
||||||
//ImGuiMultiSelectFlags_RangeSelect2d = 1 << 15, // Shift+Selection uses 2d geometry instead of linear sequence, so possible to use Shift+up/down to select vertically in grid. Analogous to what BoxSelect does.
|
//ImGuiMultiSelectFlags_RangeSelect2d = 1 << 15, // Shift+Selection uses 2d geometry instead of linear sequence, so possible to use Shift+up/down to select vertically in grid. Analogous to what BoxSelect does.
|
||||||
|
ImGuiMultiSelectFlags_NavWrapX = 1 << 16, // [Temporary] Enable navigation wrapping on X axis. Provided as a convenience because we don't have a design for the general Nav API for this yet. When the more general feature be public we may obsolete this flag in favor of new one.
|
||||||
};
|
};
|
||||||
|
|
||||||
// Main IO structure returned by BeginMultiSelect()/EndMultiSelect().
|
// Main IO structure returned by BeginMultiSelect()/EndMultiSelect().
|
||||||
|
|||||||
+14
-7
@@ -9836,10 +9836,21 @@ struct ExampleAssetsBrowser
|
|||||||
|
|
||||||
// Multi-select
|
// Multi-select
|
||||||
ImGuiMultiSelectFlags ms_flags = ImGuiMultiSelectFlags_ClearOnEscape | ImGuiMultiSelectFlags_ClearOnClickVoid;
|
ImGuiMultiSelectFlags ms_flags = ImGuiMultiSelectFlags_ClearOnEscape | ImGuiMultiSelectFlags_ClearOnClickVoid;
|
||||||
if (AllowDragUnselected)
|
|
||||||
ms_flags |= ImGuiMultiSelectFlags_SelectOnClickRelease; // To allow dragging an unselected item without altering selection.
|
// - Enable box-select (in 2D mode, so that changing box-select rectangle X1/X2 boundaries will affect clipped items)
|
||||||
if (AllowBoxSelect)
|
if (AllowBoxSelect)
|
||||||
ms_flags |= ImGuiMultiSelectFlags_BoxSelect2d; // Enable box-select in 2D mode.
|
ms_flags |= ImGuiMultiSelectFlags_BoxSelect2d;
|
||||||
|
|
||||||
|
// - This feature allows dragging an unselected item without selecting it (rarely used)
|
||||||
|
if (AllowDragUnselected)
|
||||||
|
ms_flags |= ImGuiMultiSelectFlags_SelectOnClickRelease;
|
||||||
|
|
||||||
|
// - Enable keyboard wrapping on X axis
|
||||||
|
// (FIXME-MULTISELECT: We haven't designed/exposed a general nav wrapping api yet, so this flag is provided as a courtesy to avoid doing:
|
||||||
|
// ImGui::NavMoveRequestTryWrapping(ImGui::GetCurrentWindow(), ImGuiNavMoveFlags_WrapX);
|
||||||
|
// When we finish implementing a more general API for this, we will obsolete this flag in favor of the new system)
|
||||||
|
ms_flags |= ImGuiMultiSelectFlags_NavWrapX;
|
||||||
|
|
||||||
ImGuiMultiSelectIO* ms_io = ImGui::BeginMultiSelect(ms_flags, Selection.Size, Items.Size);
|
ImGuiMultiSelectIO* ms_io = ImGui::BeginMultiSelect(ms_flags, Selection.Size, Items.Size);
|
||||||
|
|
||||||
// Use custom selection adapter: store ID in selection (recommended)
|
// Use custom selection adapter: store ID in selection (recommended)
|
||||||
@@ -9970,10 +9981,6 @@ struct ExampleAssetsBrowser
|
|||||||
if (want_delete)
|
if (want_delete)
|
||||||
Selection.ApplyDeletionPostLoop(ms_io, Items, item_curr_idx_to_focus);
|
Selection.ApplyDeletionPostLoop(ms_io, Items, item_curr_idx_to_focus);
|
||||||
|
|
||||||
// Keyboard/Gamepad Wrapping
|
|
||||||
// FIXME-MULTISELECT: Currently an imgui_internal.h API. Find a design/way to expose this in public API.
|
|
||||||
//ImGui::NavMoveRequestTryWrapping(ImGui::GetCurrentWindow(), ImGuiNavMoveFlags_WrapX);
|
|
||||||
|
|
||||||
// Zooming with CTRL+Wheel
|
// Zooming with CTRL+Wheel
|
||||||
if (ImGui::IsWindowAppearing())
|
if (ImGui::IsWindowAppearing())
|
||||||
ZoomWheelAccum = 0.0f;
|
ZoomWheelAccum = 0.0f;
|
||||||
|
|||||||
@@ -7479,6 +7479,13 @@ ImGuiMultiSelectIO* ImGui::EndMultiSelect()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Courtesy nav wrapping helper flag
|
||||||
|
if (ms->Flags & ImGuiMultiSelectFlags_NavWrapX)
|
||||||
|
{
|
||||||
|
IM_ASSERT(ms->Flags & ImGuiMultiSelectFlags_ScopeWindow); // Only supported at window scope
|
||||||
|
ImGui::NavMoveRequestTryWrapping(ImGui::GetCurrentWindow(), ImGuiNavMoveFlags_WrapX);
|
||||||
|
}
|
||||||
|
|
||||||
// Unwind
|
// Unwind
|
||||||
window->DC.CursorMaxPos = ImMax(ms->BackupCursorMaxPos, window->DC.CursorMaxPos);
|
window->DC.CursorMaxPos = ImMax(ms->BackupCursorMaxPos, window->DC.CursorMaxPos);
|
||||||
PopFocusScope();
|
PopFocusScope();
|
||||||
|
|||||||
Reference in New Issue
Block a user