mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 21:21:06 +01:00 
			
		
		
		
	Demo: Added more complete Combo demo. (#1658)
This commit is contained in:
		
							
								
								
									
										1
									
								
								TODO.txt
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								TODO.txt
									
									
									
									
									
								
							| @@ -237,6 +237,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | |||||||
|  - font: fix AddRemapChar() to work before font has been built. |  - font: fix AddRemapChar() to work before font has been built. | ||||||
|  - font: (api breaking) removed "TTF" from symbol names. also because it now supports OTF. |  - font: (api breaking) removed "TTF" from symbol names. also because it now supports OTF. | ||||||
|  |  | ||||||
|  |  - nav: SetItemDefaultFocus() level of priority, so widget like Selectable when inside a popup could claim a low-priority default focus on the first selected iem | ||||||
|  - nav: allow input system to be be more tolerant of io.DeltaTime=0.0f |  - nav: allow input system to be be more tolerant of io.DeltaTime=0.0f | ||||||
|  - nav: ESC on a flattened child |  - nav: ESC on a flattened child | ||||||
|  - nav: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?) |  - nav: Left within a tree node block as a fallback (ImGuiTreeNodeFlags_NavLeftJumpsBackHere by default?) | ||||||
|   | |||||||
							
								
								
									
										109
									
								
								imgui_demo.cpp
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								imgui_demo.cpp
									
									
									
									
									
								
							| @@ -321,37 +321,16 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|                 ImGui::EndTooltip(); |                 ImGui::EndTooltip(); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             // Testing ImGuiOnceUponAFrame helper. |  | ||||||
|             //static ImGuiOnceUponAFrame once; |  | ||||||
|             //for (int i = 0; i < 5; i++) |  | ||||||
|             //    if (once) |  | ||||||
|             //        ImGui::Text("This will be displayed only once."); |  | ||||||
|  |  | ||||||
|             ImGui::Separator(); |             ImGui::Separator(); | ||||||
|  |  | ||||||
|             ImGui::LabelText("label", "Value"); |             ImGui::LabelText("label", "Value"); | ||||||
|  |  | ||||||
|             { |             { | ||||||
|                 // Simplified one-liner Combo() API, using values packed in a single constant string |                 // Using the _simplified_ one-liner Combo() api here | ||||||
|                 static int current_item_1 = 1; |                 const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" }; | ||||||
|                 ImGui::Combo("combo", ¤t_item_1, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); |                 static int item_current = 0; | ||||||
|                 //ImGui::Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items));   // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. |                 ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items)); | ||||||
|  |                 ImGui::SameLine(); ShowHelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n"); | ||||||
|                 // General BeginCombo() API, you have full control over your selection data and display type |  | ||||||
|                 const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" }; |  | ||||||
|                 static const char* current_item_2 = NULL; |  | ||||||
|                 if (ImGui::BeginCombo("combo 2", current_item_2)) // The second parameter is the label previewed before opening the combo. |  | ||||||
|                 { |  | ||||||
|                     for (int n = 0; n < IM_ARRAYSIZE(items); n++) |  | ||||||
|                     { |  | ||||||
|                         bool is_selected = (current_item_2 == items[n]); // You can store your selection however you want, outside or inside your objects |  | ||||||
|                         if (ImGui::Selectable(items[n], is_selected)) |  | ||||||
|                             current_item_2 = items[n]; |  | ||||||
|                         if (is_selected) |  | ||||||
|                             ImGui::SetItemDefaultFocus();   // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) |  | ||||||
|                     } |  | ||||||
|                     ImGui::EndCombo(); |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             { |             { | ||||||
| @@ -394,25 +373,36 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|                 ImGui::SliderAngle("slider angle", &angle); |                 ImGui::SliderAngle("slider angle", &angle); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             static float col1[3] = { 1.0f,0.0f,0.2f }; |             { | ||||||
|             static float col2[4] = { 0.4f,0.7f,0.0f,0.5f }; |                 static float col1[3] = { 1.0f,0.0f,0.2f }; | ||||||
|             ImGui::ColorEdit3("color 1", col1); |                 static float col2[4] = { 0.4f,0.7f,0.0f,0.5f }; | ||||||
|             ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); |                 ImGui::ColorEdit3("color 1", col1); | ||||||
|  |                 ImGui::SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); | ||||||
|  |  | ||||||
|             ImGui::ColorEdit4("color 2", col2); |                 ImGui::ColorEdit4("color 2", col2); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" }; |             { | ||||||
|             static int listbox_item_current = 1; |                 // List box | ||||||
|             ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4); |                 const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" }; | ||||||
|  |                 static int listbox_item_current = 1; | ||||||
|  |                 ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4); | ||||||
|  |  | ||||||
|             //static int listbox_item_current2 = 2; |                 //static int listbox_item_current2 = 2; | ||||||
|             //ImGui::PushItemWidth(-1); |                 //ImGui::PushItemWidth(-1); | ||||||
|             //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4); |                 //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4); | ||||||
|             //ImGui::PopItemWidth(); |                 //ImGui::PopItemWidth(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             ImGui::TreePop(); |             ImGui::TreePop(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         // Testing ImGuiOnceUponAFrame helper. | ||||||
|  |         //static ImGuiOnceUponAFrame once; | ||||||
|  |         //for (int i = 0; i < 5; i++) | ||||||
|  |         //    if (once) | ||||||
|  |         //        ImGui::Text("This will be displayed only once."); | ||||||
|  |  | ||||||
|         if (ImGui::TreeNode("Trees")) |         if (ImGui::TreeNode("Trees")) | ||||||
|         { |         { | ||||||
|             if (ImGui::TreeNode("Basic trees")) |             if (ImGui::TreeNode("Basic trees")) | ||||||
| @@ -617,6 +607,49 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|             ImGui::TreePop(); |             ImGui::TreePop(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if (ImGui::TreeNode("Combo")) | ||||||
|  |         { | ||||||
|  |             // Expose flags as checkbox for the demo | ||||||
|  |             static ImGuiComboFlags flags = 0; | ||||||
|  |             ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft); | ||||||
|  |             if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton)) | ||||||
|  |                 flags &= ~ImGuiComboFlags_NoPreview;     // Clear the other flag, as we cannot combine both | ||||||
|  |             if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview)) | ||||||
|  |                 flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both | ||||||
|  |  | ||||||
|  |             // General BeginCombo() API, you have full control over your selection data and display type. | ||||||
|  |             // (your selection data could be an index, a pointer to the object, an id for the object, a flag stored in the object itself, etc.) | ||||||
|  |             const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" }; | ||||||
|  |             static const char* item_current = items[0];            // Here our selection is a single pointer stored outside the object. | ||||||
|  |             if (ImGui::BeginCombo("combo 1", item_current, flags)) // The second parameter is the label previewed before opening the combo. | ||||||
|  |             { | ||||||
|  |                 for (int n = 0; n < IM_ARRAYSIZE(items); n++) | ||||||
|  |                 { | ||||||
|  |                     bool is_selected = (item_current == items[n]); | ||||||
|  |                     if (ImGui::Selectable(items[n], is_selected)) | ||||||
|  |                         item_current = items[n]; | ||||||
|  |                     if (is_selected) | ||||||
|  |                         ImGui::SetItemDefaultFocus();   // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) | ||||||
|  |                 } | ||||||
|  |                 ImGui::EndCombo(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // Simplified one-liner Combo() API, using values packed in a single constant string | ||||||
|  |             static int item_current_2 = 0;  | ||||||
|  |             ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); | ||||||
|  |  | ||||||
|  |             // Simplified one-liner Combo() using an array of const char* | ||||||
|  |             static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview | ||||||
|  |             ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items)); | ||||||
|  |  | ||||||
|  |             // Simplified one-liner Combo() using an accessor function | ||||||
|  |             struct FuncHolder { static bool ItemGetter(void* data, int idx, const char** out_str) { *out_str = ((const char**)data)[idx]; return true; } }; | ||||||
|  |             static int item_current_4 = 0; | ||||||
|  |             ImGui::Combo("combo 4 (function)", &item_current_4, &FuncHolder::ItemGetter, items, IM_ARRAYSIZE(items)); | ||||||
|  |  | ||||||
|  |             ImGui::TreePop(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (ImGui::TreeNode("Selectables")) |         if (ImGui::TreeNode("Selectables")) | ||||||
|         { |         { | ||||||
|             // Selectable() has 2 overloads: |             // Selectable() has 2 overloads: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user