mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	ListBox: renamed ListBoxHeader>BeginListBox, ListBoxFooter>EndListBox. Added demo bits.
This commit is contained in:
		| @@ -6124,18 +6124,14 @@ bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags | ||||
| //------------------------------------------------------------------------- | ||||
| // [SECTION] Widgets: ListBox | ||||
| //------------------------------------------------------------------------- | ||||
| // - BeginListBox() | ||||
| // - EndListBox() | ||||
| // - ListBox() | ||||
| // - ListBoxHeader() | ||||
| // - ListBoxFooter() | ||||
| //------------------------------------------------------------------------- | ||||
| // FIXME: This is an old API. We should redesign some of it, rename ListBoxHeader->BeginListBox, ListBoxFooter->EndListBox | ||||
| // and promote using them over existing ListBox() functions, similarly to how we now use combo boxes. | ||||
| //------------------------------------------------------------------------- | ||||
|  | ||||
| // FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||
| // Tip: To have a list filling the entire window width, use size.x = -FLT_MIN and pass an non-visible label e.g. "##empty" | ||||
| // Tip: If your vertical size is calculated from an item count (e.g. 10 * item_height) consider adding a fractional part to facilitate seeing scrolling boundaries (e.g. 10.25 * item_height). | ||||
| bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | ||||
| bool ImGui::BeginListBox(const char* label, const ImVec2& size_arg) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = GetCurrentWindow(); | ||||
| @@ -6174,7 +6170,8 @@ bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| // FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||
| // OBSOLETED in 1.81 (from February 2021) | ||||
| bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items) | ||||
| { | ||||
|     // If height_in_items == -1, default height is maximum 7. | ||||
| @@ -6183,15 +6180,15 @@ bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_item | ||||
|     ImVec2 size; | ||||
|     size.x = 0.0f; | ||||
|     size.y = GetTextLineHeightWithSpacing() * height_in_items_f + g.Style.FramePadding.y * 2.0f; | ||||
|     return ListBoxHeader(label, size); | ||||
|     return BeginListBox(label, size); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| // FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||
| void ImGui::ListBoxFooter() | ||||
| void ImGui::EndListBox() | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImGuiWindow* window = g.CurrentWindow; | ||||
|     IM_ASSERT((window->Flags & ImGuiWindowFlags_ChildWindow) && "Mismatched ListBoxHeader/ListBoxFooter calls. Did you test the return value of ListBoxHeader()?"); | ||||
|     IM_ASSERT((window->Flags & ImGuiWindowFlags_ChildWindow) && "Mismatched BeginListBox/EndListBox calls. Did you test the return value of BeginListBox?"); | ||||
|  | ||||
|     EndChildFrame(); | ||||
|     EndGroup(); // This is only required to be able to do IsItemXXX query on the whole ListBox including label | ||||
| @@ -6203,14 +6200,23 @@ bool ImGui::ListBox(const char* label, int* current_item, const char* const item | ||||
|     return value_changed; | ||||
| } | ||||
|  | ||||
| // This is merely a helper around BeginListBox(), EndListBox(). | ||||
| // Considering using those directly to submit custom data or store selection differently. | ||||
| bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items) | ||||
| { | ||||
|     if (!ListBoxHeader(label, items_count, height_in_items)) | ||||
|     ImGuiContext& g = *GImGui; | ||||
|  | ||||
|     // Calculate size from "height_in_items" | ||||
|     if (height_in_items < 0) | ||||
|         height_in_items = ImMin(items_count, 7); | ||||
|     float height_in_items_f = height_in_items + 0.25f; | ||||
|     ImVec2 size(0.0f, ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + g.Style.FramePadding.y * 2.0f)); | ||||
|  | ||||
|     if (!BeginListBox(label, size)) | ||||
|         return false; | ||||
|  | ||||
|     // Assume all items have even height (= 1 line of text). If you need items of different height, | ||||
|     // you can create a custom version of ListBox() in your code without using the clipper. | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     bool value_changed = false; | ||||
|     ImGuiListClipper clipper; | ||||
|     clipper.Begin(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to. | ||||
| @@ -6232,7 +6238,7 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v | ||||
|                 SetItemDefaultFocus(); | ||||
|             PopID(); | ||||
|         } | ||||
|     ListBoxFooter(); | ||||
|     EndListBox(); | ||||
|     if (value_changed) | ||||
|         MarkItemEdited(g.CurrentWindow->DC.LastItemId); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user